21
1 Klasa Uvodimo klju nu rije class Klasa poop ava pojam strukture iz C-a Razlika izme u klase (class) i strukture (struct) u jeziku C++ Sa stanovi ta C++ prevoditelja primarno sintaksna kod strukture je sve podrazumijevano public dok je kod razreda sve podrazumijevano private Konceptualna razlika: Struktura je (ipak) namijenjena modeliranju skupa jednostavnih podataka nad kojima ostali dijelovi programa direktno operiraju Klasa kao primarni koncept OO paradigme (prisutan u svim OO jezicima!) je namijenjen modeliranju (predstavljanju) koncepata iz podru ja problema koji rje avamo (DinamickoPolje, Stog, HashFile, ...) koji imaju slo eno pona anje realizirano preko skupa lanskih funkcija

Primjer - unizg.hr · Klasa poopava pojam strukture iz C-a Razlika izmeu klase (class) i strukture (struct) u jeziku C++ Sa stanovita C++ prevoditelja primarno sintaksnakod strukture

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Primjer - unizg.hr · Klasa poopava pojam strukture iz C-a Razlika izmeu klase (class) i strukture (struct) u jeziku C++ Sa stanovita C++ prevoditelja primarno sintaksnakod strukture

1

Klasa

Uvodimo klju nu rije classKlasa poop ava pojam strukture iz C-a

Razlika izme u klase (class) i strukture (struct) u jeziku C++Sa stanovi ta C++ prevoditelja primarno sintaksna kod strukture je sve podrazumijevano public dok je kod razreda sve podrazumijevano private

Konceptualna razlika:Struktura je (ipak) namijenjena modeliranju skupa jednostavnih podataka nad kojima ostali dijelovi programa direktno operirajuKlasa kao primarni koncept OO paradigme (prisutan u svim OO jezicima!) je namijenjen modeliranju (predstavljanju) koncepata iz podru ja problema koji rje avamo (DinamickoPolje, Stog, HashFile, ...) koji imaju slo eno pona anje realizirano preko skupa lanskih funkcija

Page 2: Primjer - unizg.hr · Klasa poopava pojam strukture iz C-a Razlika izmeu klase (class) i strukture (struct) u jeziku C++ Sa stanovita C++ prevoditelja primarno sintaksnakod strukture

2

Primjer:P05_DinamickoPolje_Cpp2_prava_pristupa

class DinamickoPolje{public:

int Inicijaliziraj(int inMaxBrojElem);void Izbrisi();int PostaviNovuVelicinu(int NoviBrojElem);

void PostaviElement(int Indeks, int Vrijednost);int DohvatiElement(int Indeks);int DodajElementNaKraj(int Vrijednost);

int BrojElemenata();

private:int *_Podaci;

int BrojElem; // koliko stvarno ima elemenata u poljuint MaxBrojElemenata; // maksimalni raspolo ivi prostor

};

Page 3: Primjer - unizg.hr · Klasa poopava pojam strukture iz C-a Razlika izmeu klase (class) i strukture (struct) u jeziku C++ Sa stanovita C++ prevoditelja primarno sintaksnakod strukture

3

Apstrakcija i enkapsulacijaosnovni elementi OO paradigme

Apstrakcija odbacivanje onoga to je sporedno, posebno i slu ajno radi onoga to je op e, zakonito i bitnoEnkapsulacija (u ahurivanje) -onemogu avanje pristupa varijablama klaseosim putem ugra enih metoda za njihovoitanje i pisanje. Time se osigurava da objekt

ne mo e do i u neko nepredvi eno stanje izbilo kojeg razloga

Page 4: Primjer - unizg.hr · Klasa poopava pojam strukture iz C-a Razlika izmeu klase (class) i strukture (struct) u jeziku C++ Sa stanovita C++ prevoditelja primarno sintaksnakod strukture

4

A & E (nastavak)Apstrakcija

Apstrakcija klase / objekti predstavljaju koncepte iz domene problema koji rje avamo

Klasa DinamickoPoljeApstrakcija koncepta dinami kog polja s dobro definiranim karakteristikama

Nije li to isto i struktura u C-u?Struktura predstavlja agregatni skup podataka nad kojima operiraju vanjski elementi programa (funkcije)

Vanjske funkcije nisu dio strukture zbog toga struktura nije potpuna jer je za razumijevanje koncepta koji predstavlja potrebno

prou iti ne to to nije dio same definicije struktureStruktura nije zatvorena u smislu da ne upravlja sama svojim pona anjem i stanjem!Modeliranjem koncepta pomo u klase rje avamo navedene probleme

Page 5: Primjer - unizg.hr · Klasa poopava pojam strukture iz C-a Razlika izmeu klase (class) i strukture (struct) u jeziku C++ Sa stanovita C++ prevoditelja primarno sintaksnakod strukture

5

Enkapsulacijaniti jedan dio slo enog sustava ne bi smio ovisiti

o unutra njim detaljima drugog dijela

unutra nji detalji korisnika klase DinamickoPolje uop e ne treba zanimati kako je realizirana njegova funkcionalnost

A & E (nastavak)Enkapsulacija

Page 6: Primjer - unizg.hr · Klasa poopava pojam strukture iz C-a Razlika izmeu klase (class) i strukture (struct) u jeziku C++ Sa stanovita C++ prevoditelja primarno sintaksnakod strukture

6

Primjer DinamickoPoljeimplementacija

Koncept dinami kog polja je vrlo jednostavan i prakti ki implicira na in implementacije (dinami ka alokacija memorije za elemente polja), ali kod slo enijih klasa to ni u kojem slu aju nije tako

ak i kod dinami kog polja mo emo imati varijabilnost u implementaciji:Npr., ako je rukovanje memorijom skriveno od korisnika klase, mo e se izraditi vlastiti modul za upravljanje memorijom (ne koristimo malloc i realloc, ve vlastitu implementaciju npr. radi efikasnosti)

Page 7: Primjer - unizg.hr · Klasa poopava pojam strukture iz C-a Razlika izmeu klase (class) i strukture (struct) u jeziku C++ Sa stanovita C++ prevoditelja primarno sintaksnakod strukture

7

Primjer DinamickoPoljeenkapsulacija

Enkapsulaciju posti emo deklariranjem unutra njih detalja razreda kao privateBudu i da tada ionako ne mo e pristupiti tim dijelovima, korisnik klase DinamickoPolje ne mo e o njima ni ovisiti (zato jer ih ne mo e izravno referencirati u programskom kodu kojega on pi e)

Page 8: Primjer - unizg.hr · Klasa poopava pojam strukture iz C-a Razlika izmeu klase (class) i strukture (struct) u jeziku C++ Sa stanovita C++ prevoditelja primarno sintaksnakod strukture

8

Javno su elje klase

Sve to je u klasi deklarirano kao public dio je javnog su elja klaseJavno su elje klase predstavlja prozor u svijet kroz koji razred komunicira s ostalim dijelovima programaDefiniranjem lanskih varijabli kao private, klasa skriva svoje stanje

Page 9: Primjer - unizg.hr · Klasa poopava pojam strukture iz C-a Razlika izmeu klase (class) i strukture (struct) u jeziku C++ Sa stanovita C++ prevoditelja primarno sintaksnakod strukture

9

Enkapsulacijau stvarnom ivotu i u programiranju

Svaki sustav kod kojega nije bitno kakoradi ve to radiPostoji su elje putem kojega korisnik komunicira sa sustavom (npr. daljinski upravlja - Play, Stop, Eject, ... )

Za korisnika klase DinamickoPolje je bitno da klasa ima o ekivano pona anje, a kako je unutar klase omogu eno takvo pona anje, korisnika (uglavnom) ne zanima!

Page 10: Primjer - unizg.hr · Klasa poopava pojam strukture iz C-a Razlika izmeu klase (class) i strukture (struct) u jeziku C++ Sa stanovita C++ prevoditelja primarno sintaksnakod strukture

10

Pojam

Ovako izgleda deklaracija klase (novi tip podatka):

class MojaKlasa {...

};Sli no kao i kod struktura, klasa predstavlja predlo ak iz kojega e se kreirati objekti

Kod struktura se konkretna instanca strukture naziva varijabla struktureKod klase se konkretna instanca klase naziva se naziva objekt

Klasa je jedna, a iz nje se mo e instancirati proizvoljan broj objekataSvi objekti imaju isti skup lanskih varijabli i lanskih funkcijaObjekti se razlikuju po vrijednostima koje imaju njihove lanske varijable (te vrijednosti predstavljaju stanje objekta)

Analogija sa strukturom polje svi lanovi su istog tipa, a vrijednosti im se razlikuju za svaki indeks polja

Page 11: Primjer - unizg.hr · Klasa poopava pojam strukture iz C-a Razlika izmeu klase (class) i strukture (struct) u jeziku C++ Sa stanovita C++ prevoditelja primarno sintaksnakod strukture

11

Kreiranje objekataSli no kao i kod struktura, kreiranje objekta primarno podrazumijeva alociranje prostora u memoriji gdje e objekt (odnosno njegove lanske varijable) biti smje ten

Mogu a su dva standardna na ina:Smje tanje objekta na stog - Objekt se deklarira kao lokalni objekt unutar funkcijeSmje tanje objekta na heap (gomilu) - ivotni vijekobjekta nije vezan uz kontekst izvo enja funkcije ve se objekt eksplicitno mora uni titi (izbrisati iz memorije)

Page 12: Primjer - unizg.hr · Klasa poopava pojam strukture iz C-a Razlika izmeu klase (class) i strukture (struct) u jeziku C++ Sa stanovita C++ prevoditelja primarno sintaksnakod strukture

12

Heap - gomila

Za potrebe rada s objektima na heap-u, uvedena su dva nova operatora:new operator za kreiranje objekata na heap-udelete operator za brisanje objekata s heap-a

Page 13: Primjer - unizg.hr · Klasa poopava pojam strukture iz C-a Razlika izmeu klase (class) i strukture (struct) u jeziku C++ Sa stanovita C++ prevoditelja primarno sintaksnakod strukture

13

Primjer za new i delete

class MojaKlasa{public:

int _MojPodatak;};

int main(int argc, char* argv[]){

MojaKlasa objStog; // objekt na stoguobjStog._MojPodatak = 10;

MojaKlasa *pStog = new MojaKlasa(); // objekt na heap-upStog->_MojPodatak = 10;

delete pStog; // moramo eksplicitno osloboditi memoriju

return 0;// po zavr etku funkcije, objStog e se automatskiukloniti iz memorije

}

Page 14: Primjer - unizg.hr · Klasa poopava pojam strukture iz C-a Razlika izmeu klase (class) i strukture (struct) u jeziku C++ Sa stanovita C++ prevoditelja primarno sintaksnakod strukture

14

new i delete nisu namijenjeni isklju ivo za kreiranje i uni tavanje objekata:

Predstavljaju op enitu zamjenu za malloc i rea llocType safe verzija to no se zna za kakav tip podatka se alocira memorija

Jo o new i delete

Page 15: Primjer - unizg.hr · Klasa poopava pojam strukture iz C-a Razlika izmeu klase (class) i strukture (struct) u jeziku C++ Sa stanovita C++ prevoditelja primarno sintaksnakod strukture

15

Primjer: P06_Primjer_new_delete

float *pFloat = new float;

int *pInt = new int[10];

char *pString = new char[20];

delete pFloat;

delete [] pInt;

delete [] pString;

Za brisanje polja mora se koristiti operator delete []

Page 16: Primjer - unizg.hr · Klasa poopava pojam strukture iz C-a Razlika izmeu klase (class) i strukture (struct) u jeziku C++ Sa stanovita C++ prevoditelja primarno sintaksnakod strukture

16

Kreiranje objekta ipak ne zna i samo alokaciju memorije za smje tanje objekta !

Bitno je u kakvom stanju se objekt nalazi nakon kreiranja, odnosno kakve su mu vrijednosti lanskih varijabli - problem inicijalizacije !

Javlja se i u C-u:Nakon deklaracije int a; nije jednozna no definirano kakvu vrijednost ima varijabla a

Kod objekata je stvar jo slo enija jer mogu imati vi e lanskih varijabli

Kako inicijalizirati pokaziva e koji su dio klase ?!

Page 17: Primjer - unizg.hr · Klasa poopava pojam strukture iz C-a Razlika izmeu klase (class) i strukture (struct) u jeziku C++ Sa stanovita C++ prevoditelja primarno sintaksnakod strukture

17

Inicijaliziranje objekta

Rje avanju ovog problema kod klaseDinamickoPolje je namijenjena funkcija Inicijaliziraj() koja dovodi kreirani objekt u ispravno stanje

to ako kreiramo objekt i zaboravimo pozvati funkciju Inicijaliziraj() ?

Dolazi do pogre ke kod kori tenja objekta

Page 18: Primjer - unizg.hr · Klasa poopava pojam strukture iz C-a Razlika izmeu klase (class) i strukture (struct) u jeziku C++ Sa stanovita C++ prevoditelja primarno sintaksnakod strukture

18

Sljede i put

Konstruktori

Page 19: Primjer - unizg.hr · Klasa poopava pojam strukture iz C-a Razlika izmeu klase (class) i strukture (struct) u jeziku C++ Sa stanovita C++ prevoditelja primarno sintaksnakod strukture

19

Pojam konstruktora objekta/klase

Specijalna lanska funkcija namijenjena inicijalizaciji stanja objekta kod njegovog kreiranjaPrepoznaje se po imenu funkcije mora biti isto kao i ime razreda

class MojaKlasa {public:

MojaKlasa() { ... } // konstruktor bez parametara

MojaKlasa(int a) { ... } // konstruktor s parametrom

};

Page 20: Primjer - unizg.hr · Klasa poopava pojam strukture iz C-a Razlika izmeu klase (class) i strukture (struct) u jeziku C++ Sa stanovita C++ prevoditelja primarno sintaksnakod strukture

20

Primjer overloading-a (preoptere enja) funkcijeImamo funkcije istog imena (u C-u nije dozvoljeno) a prevoditelj ih razlikuje po parametrima !

Konstruktor nema povratnog parametra ne vra a i ne mo e vratiti nikakav podatak nakon izvr avanja !

A ako do e do pogre ke koju treba signalizirati ostatku programa treba baciti izuzetak (engl. exception)

Page 21: Primjer - unizg.hr · Klasa poopava pojam strukture iz C-a Razlika izmeu klase (class) i strukture (struct) u jeziku C++ Sa stanovita C++ prevoditelja primarno sintaksnakod strukture

21

Primjer kori tenja:void main() {

MojaKlasa a;MojaKlasa b(10);MojaKlasa *c = new MojaKlasa();MojaKlasa *d = new MojaKlasa(10);

}

A kako su onda radili na i prethodni primjeri (bez definiranog konstruktora) ?Prevodilac za svaki razred za koji nije eksplicitno definiran konstruktor sam dodaje podrazumijevani (engl. default) konstruktor