OOP-C++-2-Objektna Paradigma-2018 PDF

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 5

11.10.2018.

Teme

Osnovni elementi objektnog pristupa


Klase i apstrakcija
Objekti, stvaranje objekata, pristup
Učahurivanje, modifikatori vidljivosti
Nasljeđivanje i polimorfizam

Objektno-orijentirano programiranje
u programskom jeziku C++

11.10.2018. 1 11.10.2018. 2

Osnovni elementi objektnog modela Klasa


osim klasa i objekata da bi model bio objektno orijentiran mora vrijediti:
predložak za stvaranje objekata
apstrakcija
Klase - strukture podataka koja sadrže stanje i funkcije koje definiraju ponašanje
zanemarivanje nebitnih dijelova objekta i koncentriranje na one koji ga razlikuju od
jednakih objekata
ostalih objekata
Objekti se stvaraju (instanciraju) na temelju opisa definiranog u klasi
potrebna radi lakšeg pojednostavljivanja kompleksnih sustava
Pojavnost (instanca) klase i objekt su sinonimi
učahurivanje (encapsulacija)
niti jedan dio složenog sustava ne smije ovisiti o unutrašnjim dijelovima drugog dijela PONAŠANJE:
sustava
robusnost se postiže skrivanjem podataka i detalja implementacije ATRIBUTI: prihvatiOdjeću()
prihvatiDeterdžent()
hijerarhija apstrakcija / polimorfizam nazivMarke uključi()
“is a” (je) hijerarhija klasa i “part of” (dio-od) hijerarhija objekata nazivModela isključi()
jednostruko i višestruko nasljeđivanje predstavlja generalizaciju/ specijalizaciju serijskiBroj
kapacitet
modularnost
dijeljenje sustava u skup relativno nezavisnih modula koji objedinjuju klase koje imaju
nešto zajedničko
11.10.2018.3 Algoritmi i strukture podataka, 11.10.2018.4
FER, 2008./09.

Apstrakcija - Modeliranje Apstrakcija - Preciznost modela


ATRIBUTI:
modeliranje (projektiranje, dizajniranje sustava) ovisno o zahtjevima domene (naše aplikacije),
nazivMarke
proces kojim djelić stvarnog svijeta pojednostavljujemo prema model može biti manje ili više precizan nazivModela
serijskiBroj
potrebama sustava kojeg modeliramo ATRIBUTI:
kapacitet
volumenBubnja
motor
nazivMarke
vrstaMotora
nazivModela ATRIBUTI:
serijskiBroj
kapacitet nazivMarke
nazivModela KLASA
KLASA KLASA serijskiBroj PerilicaRublja
MODELIRANJE PerilicaRublja PerilicaRublja kapacitet

PONAŠANJE:
PONAŠANJE: PONAŠANJE:
prihvatiOdjeću()
prihvatiOdjeću() prihvatiDeterdžent()
prihvatiOdjeću()
prihvatiDeterdžent() uključi()
prihvatiDeterdžent() isključi()
uključi() uključi()
isključi() prihvatiOmekšivač()
isključi()
pokreniCentrifugiranje()

11.10.2018.5 Algoritmi i strukture podataka, 11.10.2018.6


FER, 2008./09.

OOP – C++, M. Ivašić-Kos 1


11.10.2018.

Apstrakcija Struktura objekata

modeliranje objekata tako da se koriste samo bitne komponente svaki objekt ima:
stvarnog objekta svojstva (atribute, varijable)
što je bitno? - podatkovni dio objekata
npr. perilica rublja – serijskiBroj - ima vlastite vrijednosti atributa
- bitan ako modeliramo sustav u kojem bilježimo koliko je koja perilica oprala ponašanje (metode, funkcije)
- nebitan ako izrađujemo program koji upravlja smjerom okretanja bubnja - operacije koje objekt nudi
perilice - operacije se izvršavaju nad objektom (nad atributima i funkcijama)
- operacije mogu utjecati na atribute objekta
ATRIBUTI:

nazivMarke
nazivModela
KLASA serijskiBroj
kapacitet
PerilicaRublja volumenBubnja
motor
vrstaMotora

Algoritmi i strukture podataka, 11.10.2018.7 11.10.2018.8


FER, 2008./09.

Stanje objekta Ponašanje objekta


stanje objekta čine sva (obično statička) svojstva (atributi) objekta i ponašanje objekta = opisuje djelovanje objekta, koje usluge nudi
trenutne (obično dinamičke) vrijednosti svakog od svojstava svojim klijentima i kako reagira na promjene stanja i protok poruka
svako svojstvo ima neku vrijednost (jednostavnog tipa ili neki drugi objekt) u C++ se govori o objektu koji poziva člansku funkciju drugog objekta
kako bi obavio neku uslugu ili operaciju
objekti postoje u vremenu, promjenjivi su, imaju stanje, stvaraju se i
uništavaju, te mogu biti dijeljeni operacije koje klijenti mogu obaviti na objektu zovemo postupcima ili
članskim funkcijama (methods, member functions).
budući da ima stanje, svaki objekt zauzima određeni prostor
članske funkcije su deklarirani u klasi.
class Osoba { class Osoba {
private: private:
char JMBG[13+1]; … // stanje
char Prezime[40+1]; public:
char Ime[40+1]; string GetJMBG();
float Placa; string GetPrezime();
// … ponašanje string GetIme();
} float GetPlaca();
void PromijeniPlacu(int posto);
11.10.2018.9 … Algoritmi i strukture podataka, 11.10.2018.
10
FER,.
}

Stvaranje objekata Objekti, članske varijable i metode


članske varijable svakog objekta Objekt Pero
Objekt = instanca klase klase Student
Objekt treba stvoriti imaju specifičnu vrijednost
metode se definiraju na razini klase Id = 1
Definiranjem klase nije stvoren objekt !
-> svi objekti koriste iste metode Metode

Primjer stvaranje objekta: Objekt Ivo klase


Student
Macka Tom; // objekt klase Macka
Osoba Marko; // objekt klase Osoba Klasa Student Id = 2

Student Ana, Ivo; // objekti klase Student Članske varijable: Metode


Id
Objekt Marko
Metode:
klase Student
GetId()
SetId()
Id = 3

Metode
11.10.2018.
11 Algoritmi i strukture podataka, 11.10.2018.
12 / 55
FER, 2008./09.

OOP – C++, M. Ivašić-Kos 2


11.10.2018.

Slanje poruka Pristup objektu

objekti međusobno komuniciraju slanjem poruka metode objekta mogu pristupati svim članskim varijablama i metodama
slanje poruka zapravo je pozivanje metoda klijenti mogu vidjeti samo javne članske varijable i metode

Objekt Pero
Objekt KL_doo Klijent
klase Student
klase Firma
Radi()
Radi()
Vozi() public
SetId GetId
Objekt RI555 Objekt klase
klase Auto Student
id

Vozi() private

Algoritmi i strukture podataka, 11.10.2018.


13 / 55 Algoritmi i strukture podataka, 11.10.2018.
14 / 55
FER, 2008./09. FER, 2008./09.

Modifikatori vidljivosti Učahurivanje/ Enkapsulacija

tri modifikatora vidljivosti: niti jedan dio složenog sustava ne bi smio ovisiti o realizaciji ili
private – član klase dostupan ili vidljivo samo metodama definiranim unutar implementaciji nekog drugoga dijela sustava
iste klase i prijateljima klase robusnost se postiže skrivanjem podataka i detalja implementacije -
protected – dostupno metodama unutar iste klase, prijateljima klase+ učahurivanje (enkapsulacija)
članovima njihovih izvedenih klasa (nasljeđivanje)
učahurivanjem klasa skriva neke atribute i neka ponašanja od ostalih
public – član klase dostupan ili vidljivo svim korisnicima (klijentima) koji imaju
klasa
pristup klasi
učahurivanje je komplementaran koncept apstrakcije
apstrakcija se fokusira na vidljivo ponašanje objekta, dok se enkapsulacija fokusira
pomoću modifikatora vidljivosti ograničava se pristup članskim
na implementaciju koja podržava takvo ponašanje
varijablama i metodama
opis klase ima dva dijela:
ograničavanje pristupa provodi se već pri prevođenju programa sučelje (interface) - sučelje predstavlja vanjski pogled na klasu
implementacija (implementation ) klase - predstavlja mehanizme pomoću kojih su
ostvarene funkcije opisane u sučelju

11.10.2018.
15 / 55 11.10.2018.
16

Učahurivanje i skrivanje informacija


učahurivanjem se postiže slaba Sučelje objekta skriva konkretnu implementaciju od okoline
povezanost objekata
slabom povezanošću objekti postaju
neovisniji i interne promjene jednog
objekta ne utječu na rad drugog

kako radi Hi-Fi audio sustav?


tako dugo dok uređaj dobro funkcionira, nas to
zapravo niti ne zanima!
audio sustav, iako djeluje kao cjelina,
sastavljen je od međusobno neovisnih
i odvojivih komponenti
sučelje implementacija
ako se jedna komponenta pokvari,
ostale i dalje nastavljaju s radom

Algoritmi i strukture podataka, 11.10.2018.


17 11.10.2018.
18
FER, 2008./09.

OOP – C++, M. Ivašić-Kos 3


11.10.2018.

Hijerarhija Nasljeđivanje
skup apstrakcija često formira hijerarhiju odnos između klasa kod kojeg se jedna klasa stvara na temelju druge
Hijerarhija predstavlja rangiranje apstrakcija tako da joj se dodaju specifični atributi i ponašanje

najvažnije hijerarhije: Vozilo:

hijerarhija klase (“je” ili “is a” hijerarhija) Vozilo Brzina


Snaga
hijerarhija strukture objekata (“dio od” ili “part of” hijerarhija) Broj sjedećih mjesta

GENERALIZACIJA
Hijerarhija nasljeđivanja

SPECIJALIZACIJA
nasljeđivanje definira odnose među klasama, tako da jedna klasa dijeli strukturu i Vozilo na Vozilo na motorni
električni pogon:
ponašanje jedne ili više drugih klasa (jednostruko i višestruko nasljeđivanje) Električno Motorno
pogon:
generalizacija/ specijalizacija: “je tip” ili “is a kind of” veza između nadređenog i vozilo vozilo Vrsta goriva
Vrsta motora
Napon
podređene klase Izvor napajanja
Veličina spremnika
za gorivo

11.10.2018.
19 Algoritmi i strukture podataka, 11.10.2018.
20
FER, 2008./09.

Primjer nasljeđivanja Višeobličje (polimorfizam)


class Vozilo{
protected: slična ponašanja različitih klasa
Nadklasa ili bazna klasa
char boja[20]; svaka klasa za sebe precizno definira zajedničko ponašanje
int brojKotaca; klase: vrata, ormar, kutija, prozor, ladica, poklon
public:
Sintaksa izvođenja nove klase ponašanje: otvori()
Vozilo();
~Vozilo();
(podklase) iz postojeće klase (nadklase,
void start();
bazne klase):
void stop();
void vozi();
}; class NazivKlase : public Nadklasa
class Auto: public Vozilo{ {…}
protected:
Podklasa ili izvedena klasa
char vrstaGoriva;
public:
Auto();
}; 11.10.2018. 21 Algoritmi i strukture podataka, 11.10.2018.
22
FER, 2008./09.

Primjer: Pokazivača referenciran na različitim objektima podklasa Agregacija (sadržavanje)


Pokazivača na klasu Sisavac pozvan je nad različitim objektima podklasa. Agregacija je veza tipa cjelina-dio
Pozivaju se odgovarajuće funkcije nadjačane u podklasama. između razrada postoji veza “dio od”
class Sisavac { nije karakteristična samo za OOP (strukture u ostalim programskim jezicima)
public: void main() {
virtual void GlasaSe() const { cout << “Sisavac se glasa!\n”; Sisavac *pMam ;
}
objekt može biti sastavljen od više drugih objekata
pMam = new Pas;
}; npr. računalo je sastavljeno od središnje jedinice, monitora, miša, tipkovnice itd.
pMam ->GlasaSe();

class Pas : public Sisavac { pMam = new Macka;


public: pMam ->GlasaSe();
void GlasaSe()const { cout << “Vau! Vau!\n”; } delete pMam;
}; }
class Macka : public Sisavac {
public:
void GlasaSe( )const { cout << “Miau! Miau!\n”; }
};

Algoritmi i strukture podataka, 11.10.2018.


24
FER, 2008./09.

OOP – C++, M. Ivašić-Kos 4


11.10.2018.

Sadržavanje - objekti kao podatkovni članovi drugih klasa Asocijacija (povezanost)


Primjer:
Pravokutnik ima četiri stranice. Svaka stranica definirana je s dvije točke. U koordinatnom neki su objekti međusobno povezani
sustavu, točka ima x i y koordinatu. Deklaracija klase Pravokutnik može biti: npr. daljinski uređaj i televizor
međusobno povezani, jer daljinskim
uređajem uključujemo televizor
povezani su jednosmjerno, jer televizor
class Pravokutnik { ne može slati poruke daljinskom uređaju
private:
Tocka itsA; dvosmjerna asocijacija (povezanost)
Tocka itsB;
Tocka itsC; ako oba objekta mogu slati poruke jedan drugome
Tocka itsD;
public:
Pravokutnik (int x1, int x2, int y1, int y2);
~Pravokutnik () {}

Tocka GetA() const { return itsA; }


SLANJE E-MAILA
void SetA(Tocka t) {itsA = t;}

….
};
11.10.2018. 25 Algoritmi i strukture podataka, 11.10.2018.
26
FER, 2008./09.

Asocijacija (povezanost) Pitanja za kraj

dvosmjerna povezanost po više kriterija Što je apstrakcija i enkapsulacija?


Koja je razlika između klase i objekata?
SURADNICI Kako se dobrom definicijom javnog sučelja ostvaruje učahurivanje?
Što su modifikatori vidljivosti?
PRIJATELJI
Što je nasljeđivanje i polimorfizam?

jednosmjerna povezanost po više kriterija

Algoritmi i strukture podataka, 11.10.2018.


27 11.10.2018. 28
FER, 2008./09.

OOP – C++, M. Ivašić-Kos 5

You might also like