Professional Documents
Culture Documents
04 - CSharp - OOP
04 - CSharp - OOP
Predavanja 2015./2016.
10/31/16
1 / 10
C# OOP
10/31/16
Klase
Klasa fundamentalni konstrukt .NET platforme
Definicija vlastitog tipa koji se sastoji od podataka i funkcijama koje barataju tim podacima
(metode)
10/31/16
Klase
Kljuna rije: class
class Car
{
// internal
}
Klase
public class Car
{
public string Name;
public int FuelLeftMeterValue;
public SteeringWheel Wheel;
private FuelTank _tank;
private FuelInjectionPump _pump;
public void TurnOn()
{
BuildHeat();
InjectFuelIntoCylinders();
IncreaseCylinderPressure();
...
}
private void BuildHeat()
{
}
private void InjectFuelIntoCilinders()
{
}
...
Properties
Ne preporua se drati varijable javno dostupne
Ne postoji kontrola nad pristupom varijabli
public class Car
{
public int TopSpeed;
}
10/31/16
Properties
Rjeenje: definirati kontrolirani i javni
pristup varijablama kroz metode
Varijabla je privatna
Pristup kontroliran kroz javne get i set
metode
Car mazda = new Car();
mazda.SetTopSpeed(int.MaxValue);
// brzina svjetlosti
int topSpeed = mazda.GetTopSpeed();
10/31/16
Properties
C# rjeenje: definirati kontrolirani
i javni pristup varijablama kroz
svojstva (engl. property)
Kraa sintaksa od definiranja
metoda
Van klase, kontroliranom svojstvu
se pristupa kao i svakoj drugoj
varijabli - bolje!
Car mazda = new Car();
// Bre od brzine svjetlosti
mazda.TopSpeed = int.MaxValue;
int topSpeed = mazda.TopSpeed;
10/31/16
Properties
public class Car
{
private int _topSpeed;
public int GetTopSpeed()
{
return _topSpeed;
}
10/31/16
Properties
public class Car
{
private string _name;
public string Name
{
get
{
return _name;
}
set
{
_name = value;
}
}
10/31/16
10
Properties
public class Car
{
public string Name;
}
10/31/16
Preporua se u C#
Moemo dodati get/set funkcionalnost
naknadno bez promjene API-a
Tehnologije nad .NET-om rade
uglavnom s Property lanovima
11
Properties
public class Car
{
private string _name;
public string Name
{
get
{
return _name;
}
}
Read-only properties
Klasa interno postavlja vrijednost
_name varijable
Izvan klase, ime se moe samo
itati
10/31/16
12
Konstruktori
Objekti imaju stanje koje moda elimo
postaviti prije nego to krenemo s uporabom
npr. Naziv, maksimalnu brzinu automobila...
10/31/16
13
Konstruktori
Svaka klasa moe definirati
proizvoljan broj razliitih konstruktora
14
Konstruktori
Ako nismo definirali niti jedan
konstruktor, implicitno se
podrazumijeva prazan konstruktor koji
ne prima nikakve parametre
Defaultni konstruktor se vie ne
podrazumijeva jednom kada postoji
eksplicitna definicija konstruktora
10/31/16
15
16
10/31/16
17
10/31/16
18
Temelji OOP-a
Tri temelja objektno orijentiranog programiranja
Enkapsulacija
Nasljeivanje
Polimorfizam
10/31/16
19
20
10/31/16
21
10/31/16
22
10/31/16
23
public class A
{
public string Name { get; set; }
protected string ProtectedName { get;
set; }
internal string InternalName { get; set;
}
private string PrivateName { get; set; }
}
public class B : A
{
public void AccessTest()
{
Name = "This works";
ProtectedName = "This also works";
InternalName = "This works.. if I'm
in
the same assembly";
PrivateName = "Compiler error!";
}
}
Razvoj aplikacija u programskom jeziku C#
10/31/16
24
}
}
public class B : A
{
public B() : base(0, 0)
{
}
public B(int x, int y) : base(x, y)
{
}
}
10/31/16
25
}
}
public class B : A
{
public B() // compiler error
{
}
public B(int x, int y) : base(x, y)
{
}
}
10/31/16
26
10/31/16
27
10/31/16
28
10/31/16
29
10/31/16
30
2)
Add(5, 5);
Add("Hello", "World");
{
Console.WriteLine(a1 + a2);
}
public void Add(int a1, int a2)
{
Console.WriteLine(a1 + a2);
}
}
10/31/16
31
b1
b2
b3
b4
=
=
=
=
32
10/31/16
33
10/31/16
34
10/31/16
Output
Animal sound?
Animal sound?
Wuf
Nismo dobili eljeno ponaanje!
Razvoj aplikacija u programskom jeziku C#
35
10/31/16
Output
Wuf
Animal sound?
36
or
{
Console.WriteLine(Wuf");
}
}
10/31/16
37
Apstraktne klase
public abstract class Animal
{
public DateTime DateBorn { get; set;
public string Name { get; set; }
public void Move()
{
Console.WriteLine("Moving...");
}
public abstract void Sound();
}
public class Dog : Animal
{
public override void Sound()
{
Console.WriteLine("Wuf Wuf");
}
}
10/31/16
Apstraktne klase
Klase koje predstavljaju apstraktne tipove
apstraktni tipovi ne mogu se instancirati
Smisao apstraktnih klasa je da postave
temelje za budue izvedene klase
Mogue oznaiti lanove s kljunom rijei
abstract
Implementacija e se zahtijevati od
izvedenih klasa
Implementaciju izostavljamo u
apstraktnoj klasi (apstraktna je, vezana
za konkretnu izvedenu klasu)
38
Apstraktne klase
public abstract class Animal
{
public DateTime DateBorn { get; set;
public string Name { get; set; }
public void Move()
{
Console.WriteLine("Moving...");
}
public abstract void Sound();
}
public class Dog : Animal // compiler
or
{
}
10/31/16
Apstraktne klase
Klase koje predstavljaju apstraktne tipove
apstraktni tipovi ne mogu se instancirati
Smisao apstraktnih klasa je da postave
temelje za budue izvedene klase
Mogue oznaiti lanove s kljunom rijei
abstract
Implementacija e se zahtijevati od
izvedenih klasa
Implementaciju izostavljamo u
apstraktnoj klasi (apstraktna je, vezana
za konkretnu izvedenu klasu)
39
Apstraktne klase
Apstraktne klase
abstract
Implementacija e se zahtijevati od
izvedenih klasa
Implementaciju izostavljamo u
apstraktnoj klasi (apstraktna je, vezana
za konkretnu izvedenu klasu)
10/31/16
40
Interfaces
Suelja (engl. Interfaces) omoguuju nam opisivanje suelja klasa
Suelje klase javna svojstva i metode
Klasa ako implementira suelje, duna je imati navedene javne lanove
public interface IPipeFixer
{
Wrench Wrench { get; }
void FixPipe();
}
10/31/16
41
Interfaces
class LadyInDistress
{
public Bike Bike { get; set; }
void FixMyBikeTire(Mechanic
anic)
{
mechanic.ChangeTire(Bike);
}
}
class LadyInDistress
{
public Bike Bike { get; set; }
void FixMyBikeTire(IChangeBikeTires anyone)
{
anyone.ChangeTire(Bike);
}
}
10/31/16
42
Interfaces
public interface IDatabase
{
Product[] GetProducts();
Category[] GetCategories();
void AddProduct();
void DeleteProduct();
...
}
10/31/16
43
Interfaces
public interface IDatabase
{
Product[] GetProducts();
Category[] GetCategories();
void AddProduct();
void DeleteProduct();
...
}
10/31/16
44