3-Ispitna Pitanja Iz Objektnog Programiranja 2336

Embed Size (px)

DESCRIPTION

d

Citation preview

  • Ispitna pitanja iz Objektnog programiranja

    1. Problemi kompatibilnosti, kontinuiteta i ponovnog korienjaReiti jednainu Ax=b reda n, korienjem inverzne matrice.

    3 dominantne metodologije:1. Kompozitno programiranje bazirano na potprogramima. Prethodila je struktuiranom programiranju. Tipini

    predstavnik je Fortran.2. Struktuirano programiranje dekompozicija do nivoa naredbe. Programi se izvravaju sekvencijalno, nema

    povratka ni preskakanja (bez primene goto naredbe osim u specijalnim sluajevima). Nastalo nakon softverske krize. Osnovni problem je taj to je algoritamski orijentisno.

    Problemi: Kompatibilnost algoritmi su kompatibilni, ali strukture podataka nisu. Pola posla mora biti ureeno

    centralizovano i nestrukturirano (ne definisu svi istu matricu). Sa razvojem struktura podataka, postaje previe komplikovano dekomponovati i strukturu podataka, pa nastaju problemi pri sklapanju potprograma

    Kontinuitet pojavila se potreba za modifikovanjem programa (zbog trita). Program je dinamika struktura i kao takav podloan je stalnim promenama. Te promene se vre na vrlo visokom nivo to zahteva velike izmene u izvornom kodu.

    Ponovno korienje (REUSE) ne mogu se koristiti pojedini delovi programa, ve se samo moe kopirati ceo kod, s tim to strukture podataka predstavljaju problem. Struktuirano programiranje ne dozvoljava ponovno korienje funkcija.

    3. Objektno programiranje nema kolizije izmeu strukture podataka i algoritma. Stvara se dekompozicija problema na klase entiteta. Programiraju se entiteti i najkrae se zadrava na realizaciji. Takoe je uveden mehanizam formiranja nove klase dodavanjem nedostajeeg staroj (jednostavna modifikacija).

    Entiteti su: subjekat, stvar, pojam, dogaaj.

    Kod objektnog programiranja postoji:- domen problema

    Uoavanje entiteta. Entiteti se klasifikuju. Klasifikacija se vri najvie osloncem na apstrakciju. Sve se klasifikuje kao klasa entiteta (klasa entiteta student, klasa entiteta inventar itd.)

    - domen modelaU naem primeru entiteti su A matrica, b skalar, x skalar (nepoznata). Model neega je uproena slika originala. Model: Naziv: Matrica

    Podaci: m, n, POperacije: uitavanje, prikaz, transponovanje, ...

    - realizacijamatrica A;vektor b,x;A.ucitati;b.ucitati;A.inverzija;pomnoziti(A, b, x);x.prikazati;

    Imamo sve funkcije, jednom ih napravimo, drimo u modulima, i stalno koristimo.

    1

    ReitiAx = b

    Ulazn, A, b

    Odreditix

    Izlazx

    OdreditiA^(-1)

    Odreditix=A^(-1) b

  • Strukture podataka sa prateim algoritmima su spakovani u fiziku celinu. Konkretni problem se ostavlja po strani. Modeluju se jedinice posmatranja (entiteti).

    Taj nain razmiljanja uveo je O.J. Dahl.1. Principi:

    - apstrakcija (izdvajanje bitnih stvari)- skrivanje informacija (razdvojiti interfejs od realizacije i detalje realizacije uiniti nedostupnim)

    2. Tehnike:- inkapsulacija (postupak za objedinjavanje ovih delova)- modularnost- polimorfizam (konteksno zavisno ponaanje)- hierarhija (veze izmeu klasa)- nasleivanje

    2. Odnos algoritma i strukture podataka

    Struktura podataka mora pratiti strukturu algoritma. Strukture podataka sa preteim algoritmima su spakovani u fiziku celinu. Konkretni problem se ostavlja po strani. Modeluju se jedinice posmatranja (entiteti).

    3. Definicija klase i objekta, Svojstva objekta

    Entiteti sa zajednikim osobinama ine klase (entiteta). Tip entiteta sadri opisne osobine (pasivan model pasivan je zato to nema operacija).Objekat je model entiteta koji ima tri karakteristike: identitet, stanje i ponaanje.

    Svojstva objekta:- Identitet identifikacija objekta kao takvog. Po emu prepoznajemo objekat.

    Ako posmatramo dve identine matrice, moemo ih posmatrati kao dve posebne, ili kao jednu sa kopijom. Ako je jedna sa kopijom, promenom jedne menja se i druga, inae se menja samo jedna.

    - Stanje deo prolosti i sadanjost objekta potrebni za odreivanje njegovog budueg ponaanja.Push zavisi od prethodnog stanja steka, a stanje steka ima istoriju, zavisi od vie prethodnih stanja.

    - Ponaanje reagovanje na spoljanje pobude (operacije). Objekti su aktivni modeli.

    Ureeni skup deskriptivnih osobina i podobjekata datog objekta, ini njegovu strukturu.Klasa (objekata) je model klase entiteta koju sainjavaju objekti sa istom strukturom i ponaanjem (nije skup objekata).Klasa se sastoji od lanova klasa koji mogu biti:

    - Podaci lanovi- Objekti lanovi- Funkcije lanice (metode)

    U C++, klase su strukturirani tipovi podataka koji se sastoje od ureenih nizova elemenata (lanova klase) koji mogu da budu meusobno razliitih tipova. Strukturu objekta ine pasivni podaci, podobjekti i njihove veze (bez operacija). Podaci klasnih tipova predstavljaju primerke date klase i nazivaju se objektima. Vrednosti podataka lanova ine stanje objekta. Funkcije lanice slue za izvoenje raznih operacija nad podacima lanovima ime menjaju stanje objekta. Nazivaju se metode klase.Zvanian termin za aktiviranje metode je slanje poruke. #Svaka klasa ima otvoren deo koji se zove interfejs i zatvoren deo koji nosi naziv telo klase. Svi objekti iste klase imaju istu strukturu. Klijent klase koristi usluge klase. Svaka klasa raspolae skupom pravila i on se zove protokol klase.

    Small talk

    Stvaralac Small talk-a je Alan Kay. To je ist objektni jezik. Definicali su pet principa:

    1) Sve je objekat2) Program je skup objekata koji zadaju poslove jedan drugom putem slanja poruka3) Svaki objekat poseduje sopstvenu memoriju4) Svaki objekat pripada nekoj klasi5) Svi objekti iz iste klase mogu da primaju iste poruke

    4. Deklaracija klase u programskom jeziku C++

    C++ je nastao u periodu 1984-85. godine i napravio ga je Bjarne Stroustrup.U C++, osnovni koncept nije objekat, ve klasa. Definicija predstavlja navoenje svih lanova klase.Definicija klase u header fajlu:class Ime_klase{

    };

    2

  • Deklaracijom klase se samo naznai da neki identifikator predstavlja klasu, ali se nita ne kae o sadraju te klase. Opti oblik: class Ime_klase;Posle deklaracije klase mogu da se definiu pokazivai i upuivai na tu klasu, ali ne i objekti.

    Deklaracije podataka lanova i objekata lanova su u obliku naredbi za definisanje podataka. Ne mogu da se navedu inicijalizatori niti mogu biti nepostojani (volatile). Objekti lanovi klase ne mogu biti tipa te klase. F-je lanice klase se nazivaju metode. Od slobodnih funkcija se razlikuju po tome to pored formalnih argumenata imaju i skriveni argument. Skriveni argument je tekui objekat klase. U toku izvravanja metode njegova adresa se uva u pokazivau this. On moe biti const ili volatile, ako se iza parametara u deklaraciji/definiciji dodaju ti kvalifikatori.Ako se u okviru klase navede definicija metode, ta metoda se naziva inline i telo te metode se automatski urauje u kod (bez skoka) na svakom mestu gde se poziva ta metoda. To se radi zato to ponekad poziv funkcije, prepisivanje na stek i povratak iz funkcije oduzimaju vie vremena od izvravanja tela funkcije. Ako se u okviru klase navede deklaracija metode, definicija mora da se navede na nekom drugom mestu izvan klase. Poto se metoda koja je lanica klase definie izvan klase mora se koristiti operator za proirenje dosega ::.

    Definicija metode izvan klase: opis_tipa Ime_klase:: Ime_F-je(niz_argumenata) {...}

    Telo I ovakvih metoda moe da se ugrauje u kod dodavanjem modifikatora inline ispred definicije metode, ali se ne zna da li e prevodilac da uvai to. Kontrola pristupa lanicama klase se vri labelama public i private. Public lanovi su dostupni svima i ine interfejs, a private lanovi klase su dostupni samo u okviru klase i ine telo klase. Ukoliko se ne navede labela podrazumeva se labela private. Glavni kandidati za zatvaranje su podaci lanovi a za otvaranje metode. Objekti lanovi mogu da budu i otvoreni a i zatvoreni, ostaje na programeru da odlui. Pored metode klase mogu imati i prijateljske (friend) funkcije.

    Osobine objektnog programiranja

    5. Definicija i vrste apstrakcije, Princip skrivanja informacija

    Apstrakcija je izdvajanje bitnih osobina entiteta (osobine krede). Oznaava skup bitnih osobina entiteta koji ga izdvajaju od ostalih postavljaljui otre pojmovne granice (u zavisnosti od ugla posmatranja). Zanemarivanje nije apstrakcija. Princip apstrakcije se oslanja na interfejs klase (deo otvoren za korisnike) i kae da interfejs klase mora biti razdvojen od realizacije. Razdvajanjem se postie invarijantnost klase u odnosu na realizaciju (klijent je neosetljiv na promene u realizaciji).

    Apstrakciji pristupamo na dva naina:1) Izdvajanje bitnih stvari a ostalo se zanemaruje (odbacuje) primer materijalne take u kinematici2) Stavljanje u drugi plan detalje realizacije

    BOOCH razvrstava apstrakcije (po tipu):- Apstrakcija entiteta objekat i klasa predstavljaju apstrakciju entiteta- Apstrakcija akcije klasa obezbeuje skup operacija iste kategorije- Apstrakcija virtuelne maine skup operacija na niem nivou zamenjuje se jednom operacijom vieg nivoa

    apstrakcije. Princip se pojavio jo u strukturnom programiranju- Sluajna apstrakcija klasa koja objedinjuje stvari koje nisu meusobno povezani

    Princip skrivanja informacija (INFORMATION HIDING) kae da telo klase mora biti skriveno od klijenata (realizaciju uiniti nedostupnom klijentu). Prvo je sve bilo crno-belo, kasnije je princip evoluirao, pa su se pojavili stepeni meuzatite (pristup za privilegovane korisnike).

    6. Pojam inkaspulacije i realizacije u C++, Pravilo inkapsulacije

    Bez inkapsulacije nema objektnog programiranja. Inkapsulacija je postupak objedinjavanja strukture i funkcionalnosti (ponaanja) u softversku celinu, tako da se omogui kontrola pristupa i samim tim i skrivanje informacija.U C++ se realizuje naredbom class. Naredba class objedinjava:

    Podatke lanove i objekte lanove strukturu Funkcije lanice funkcionalnost

    Kontrola pristupa se vri labelama private, public ili labelom privilegovanog pristupa protected. Public otvara, a private zatvara lanice klase, dok protected omoguava pristup samo nasledniku klase. U naelu podaci i objekti lanovi se zatvaraju.Ne ugrauju se sve metode u sve klase, ve samo potrebne. U svakoj klasi je apriori definisana naredba dodele (=).Pravilo inkapsulacije klasu (objekat) treba koristiti disciplinovano u skladu sa dokumentacijom.

    7. Pojam modula i primena u objektnom programiranju. Modularizacija.

    Modul je softverska komponenta koja se realizuje autonomno (odvojeno, samostalno). Osnovna svrha modula je viekratna upotreba (klasa zahteva viekratnu upotrebu i zato su moduli i klase u jakoj vezi). Realizacija modula odnoso njegova logika struktura je dvodelna, sastoji se od interfejsa (ekstenzija .h ili .hpp) i tela modula (ekstenzija .c ili .cpp). Moduli se ne mogu samostalno izvravati. Moduli slue za smetanje klasa tako to se u interfejs modula (header,

    3

  • zaglavlje) smeta naredba class, zajedno sa eventualnim inline metoda, dok se u telo modula smetaju definicije ostalih metoda.

    Odnos klase i modula: Klasa se nalazi u modulu (nikad se ne nalazi u glavnom programu). Ta injenica je diktirana B. Meyer-ovom

    jednakou KLASA=MODUL.Ona se tumai na sledei nain:

    o Svaka klasa se nalazi u sopstvenom moduluo Kasnije se pokazalo da ovo ne moe da se potuje zbog velikog broja klasa, pa su je zamenili

    Meyerovom inkluzijom KLASA JE PODSKUP MODULA. to znai da se vie klasa mogu nai u istom modulu

    o U modulu se nalaze klase koje su po nekoj logici srodneo PARNAS je rekao da se od modula oekuje logika kohezijao Ali od modula se oekuje da ima slabu zavisnost od drugog modula, ali potpuna nezavisnost ne moe

    da se postigne (LOOSE COUPLING)

    8. Klasifikacija operacija nad objektima

    Kod objektnog programiranja sve ukljucujui i definisanje je operacija.

    - kontruktori kreiraju bilo promenljivu bilo instancu klase. Zauzimaju prostor u memoriji i mogu da vre inicijalizaciju. Pozivaju se implicitno naredbama za definisanje podataka. Paralelno i odvojeno mogu postojati i inicijalizatori

    - destruktori unitavaju promenljivu ili instancu klase, fiziki (oslobaaju memoriju) ili logiki (vrednost postaje nedostupna). Najee se pozivaju implicitno, kad objekat izae iz dosega. Moe i eksplicitno. Paralelno sa njima postoje i obine metode koje ponitavaju objekat i dovode ga u neko poetno stanje terminatori

    - selektori su metode koje pristupaju odreenim delovima sloene promenljive ili objekta (taka i indeksiranje je selektor)

    - modifikatori operacije koje slue za promenu stanja objekta ili vrednosti promenljivih.- indikatori daju informacije o stanju objekta ili o vrednosti promenljive. To ne mora biti jedna operacija. Npr. za

    komplexan broj proitamo mu realni deo sa GetR() i imaginarni deo sa GetI() i imamo stanje objekta.- iteratori omoguavaju pristup svim delovima sloene promenljive ili objekta u odabranom redosledu. Npr. iterator za

    niz je for petlja.

    9. Konstruktori i destruktori u C++

    KonstruktoriMehanizam koji jezik C++ nudi za zagarantovanu inicijalizaciju svih kategorija objekata zasniva se na specijalnim metodama klasa koji se nazivaju konstruktori. Zadatak konstruktora je da pare dodeljene memorije pretvori u objekat sa svim obelejima svoje klase Oni se pozivaju implicitno u trenucima stvaranja stvarnih ili prolaznih objekata u naredbama za definisanje objekata, prilikom dodeljivanja memorije u dinamikoj zoni ili eksplicitno.Konstruktori su posebne metode klase koje koje imaju isto ime kao i klasa. Konstruktori treba da budu javne metode. Od obinih metoda se najvie razlikuju po tome to se ispred imena konstruktora ne navodi opis tipa. Jedna klasa moe imati vie konstruktora ali se oni moraju razlikovati po broju i/ili tipovima argumenata. Argument konstruktora ne moe da bude tipa svoje klase, ali moe da bude pokaziva ili upuiva na primerak sopstvene klase. Ako klasa nema ni jedan konstruktor on e se automatski generisati. Poeljno je da svaka klasa ima svoj konstruktor.

    Definicija konstruktora: Ime_konstruktora (niz_argumenata) : inicijalizator,inicijalizator, {...}Inicijalizator: ime_atributa (izraz1,izraz2,...,izrazn)

    Argumenti konstruktora mogu imati podrazumevane vrednosti. Inicijalizator vri inicijalizaciju a u telu konstruktora se vri dodela vrednosti. Konstruktor bez argumenata ili konstruktor iji svi argumenti imaju podrazumevane vrednosti zove se podrazumevani konstruktor. Ako u nekoj klasi ne postoji ni jedan konstruktor, podrazumevani konstruktor se generie (ugraeni konstruktor) sa praznim telom i to kao javni konstruktor. Ako je u klasi definisan bar jedan konstruktor, podrazumevani konstruktor se ne generie. Postoji: 1) konstruktor objekta

    2) konstruktor kopije3) konstruktor konverzije

    1) konstruktor objekta zauzima mesto u memoriji i moe da vri inicijalizaciju i/ili dodelu poetnih vrednosti. Inicijalizacija se vri argumentima iji tip nije jednak posmatranoj klasi2) konstruktor kopije slui za inicijalizaciju primerka klase kopijom sadraja drugog objekta iste klase. Ima obavezni argument, upuiva (referencu) na objekat klase kojoj pripada. Bitna primena se javlja prilikom prenosa po vrednosti objekata kao stvarnih argumenata ili vraanja vrednosti funkcija. Izbegava se prenosom argumenata po referenci. Svaka klasa ima ugraeni konstruktor kopije. 3) konstruktor konverzije konstruktor koji moe da se pozove sa jednim argumentom koji je objekat neke druge klase ili promenljiva standardnog tipa. Koristi se za automatsku konverziju.

    4

  • DestruktoriDestruktori su posebne metode klasa koji imaju iste identifikatore kao i klasa kojima pripadaju sa dodatkom znaka ~ na poetku. Koriste se za automatsko unitavanje primeraka svojih klasa.

    Opti oblik: ~ime_klase() {...}

    Data klasa moe imati samo jedan destruktor i on treba da bude javna metoda. Destruktori ne mogu da imaju argumente. Ako u klasi nije definisan destruktor, isti se automatski generie sa praznim telom. Generisani destruktor je javan. Destruktor se automatski ukljuuje onog trenutka kada objekat izae iz opsega. U sluaju da imamo bar jedan podatak lan klase koji je u dinamikoj memoriji (heap-u) obavezno moramo samostalno definisati destruktor, koji e pri unitavanju objekta, osloboditi svu zauzetu memoriju. Eksplicitno pozivanje treba izbegavati.

    10. Prijateljske (kooperativne) funkcije

    Prijateljske funkcije su slobodne funkcije. Nisu lanovi klase. Prijateljske funkcije mogu da pristupaju svim delovima klase. Moraju biti deklarisane u klasi iji su prijatelji. Dodavanjem modifikatora friend ispred deklaracije funkcije, proglaavamo tu funkciju prijateljskom funkcijom klase u kojoj se nalazi.

    Deklaracija prijateljske funkcije: friend opsi_tipa Ime_funkcije (niz_argumenata);

    Za razliku od metoda klase prijateljske funkcije nemaju pokazivac this (koji pokazuje na objekat za koga je pozvana metoda), zato jedan argument ovih funkcija obavezno mora biti objekat, pokaziva ili upuiva na objekat, za koju je ova f-ja prijateljska.Razlozi za korienje prijateljske funkcije su:

    1) poveanje brzine2) da bi jedna funkcija neposredno pristupala lanovima nekoliko klasa3) programeri vie vole klasinu notaciju za poziv funkcije (f(x) radije nego x.f())

    Intenzivno se koriste kod preklapanja operatora.

    11. Pojam i vrste polimorfizma

    Polimorfizam je konteksno zavisno ponaanje kategorije (promenljive, objekta, funkcije).Vrste polimorfizama:

    univerzalni polimorfizam jedna kategorija se razliito ponaa u razliitim situacijama1) parametarski odreen generikim tipovima i generikim klasama. Npr. stek i red, oni rade isto, bez

    obzira ta stavljamo na njega.2) inkluzivni osobina promenljive ili instance klase da moe istovremeno pripadati veem broju tipova. Npr

    char koji je i int. ad hoc prividni polimorfizam

    - jedna oznaka za vie srodnih kategorija koje se razliito ponaaju1) preklapanje funkcija i operatora (OVERLOADING) vie funkcija ili promenljivih koje imaju isto ime

    - ugrauje se u programski jezik, npr. preklapanje operatora2) koercitivni (prinudni) razliito ponaanje iste kategorije (eksplicitna konverzija tipa)

    12. Preklapanje funkcija i operatora u C++

    C++ omoguava da slobodne funkcije imaju isto ime. Samo ime i broj argumenata identifikuju funkciju. Kod preklapanja funkcija podrazumevane vrednosti treba izbegavati. Primer:Deklaracija: double f(double,double);

    double f(double);Pozivanje: f(x,y);

    f(x);

    Pravilo ouvanja sematike: funkcije i operatori sa istim nazivom moraju da rade isti posao odnosno moraju imati istu semantiku.

    Preklapanje operatora predstavlja redefinisanje tumaenja standardnih operatora jezika C++ za sluajeve kada su operandi klasnih tipova. Preklapanje operatora se vri preklapanjem imena operatorskih funkcija.Ime operatorske funkcije ima oblik: operator op , gde je op simbol odgovarajueg operatora ili slubena re koja se preklapa.Deklaracija operatorske funkcije: opis_tipa operator ime_operatora (niz_argumenata);

    Postoje odreena ogranienja:- mogu se preklopiti samo oni operatori koji ve postoje u C++ i ne mogu se preklapati sledei operatori: . .* :: ?

    : sizeof throw

    5

  • - ne mogu se redefinisati tumaenja operatora za standardne tipove podataka- operatori (typecast) = () [] -> se moraju preklopiti kao metode- ne moe uticati na prioritet i redosled grupisanja operatora- za operatore dodele vrednosti (=), za obrazovanje adrese objekta (&) i za obrazovanje niza izraza ( , )

    automatski postoji tumaenje za sve klasne tipove. Ako su neki od podataka lanova objekta pokazivai, automatskom dodelom vrednosti se nee dobiti kopija celog izvornog objekta, pa se tada operator dodele samostalno preklapa, uz proveru jednakosti adresa. Primer:

    T& operator=(const T&);T& T:: operator=(const T& t) {

    if (&t!=this) {}return *this;}

    - operatorske funkcije mogu biti i metode i prijateljske funkcije. Argumenti operatorskih funkcija ne mogu imati podrazumevane vrednosti.

    - operatoske funkcije operatora za ulaz i izlaz podataka (>>,Complex

    Eksplicitna (programer je definie): realizuje se preklapanjem operatora operator tip() preklapanjem operatora za konverziju tipa mogue je ostvariti konverziju tipa iz tipa klase kojoj pripada ta

    operatorska funkcija u bilo koji drugi klasni ili standardni tip.

    6

  • 14. Tipovi veza izmeu klasa

    Jedna od najbitnijih stvari bez kojeg objektno programirajne ne bi imalo svrhu.Klase se uvek pojavljuju kao ureen skup sa vie relacija

    Tipine vrste veza:1. agregacija modeluje odnos celina deo (veza sadranja) fakultet se sastoji od odseka2. nasleivanje (najvanija veza) modeluje odnos opte pojedinano, reava problem ponovnog

    korienja lav je maka. Pojedinano ima sve osobine opteg, i jo plus svoje. Generalizacija specijalizacija.

    3. asocijacija povezuje semantiki nezavisne klase, nastavnik predaje predmet4. veza zavisnosti - vrsta egzistencijalne veze (zahteva da mora biti na raspolaganju) program koristi

    datoteku

    Unified Modeling Language (UML)- UML predvia vezu zavisnosti- Slui za razvoj objektnih sistema. Sastoji se od segmenata:

    - za analizu- za projektovanje- za kodiranje

    - Svi segmenti su predstavljeni dirjagramima, a dijagram stanja je jedan od najvanijih elemenata UML-a.

    5. veza korienja (on postoji ako bar jedna metoda klase A poseduje parametar klase B)

    naziv klase

    +, -, # atribut: tip = p.v.

    +, -, # metoda (arg): tip

    +: public, -: private, #: protected, p.v.: poetna vrednost

    Deo sa metodama i deo sa atributima nije obavezan.

    15. Agregacija

    Ova veza modeluje odnos celina deo (sastoji se od, sadri, pripada).U objektnim jezicima ne postoje posebna sredstva za njenu realizaciju. Postoje dva tipa koja se razlikuju po vrstini veze:

    kompozicija (veza po vrednosti) vra veza; ako je klasa A komponovana od klase B, tada je objekat klase B objekat lan klase A i oni dele istu memoriju. ivotni vek objekta klase B sadran je u ivotnomveku objekta klase A. Ovo je najvra veza izmeu klasa. Svaka veza se snabdeva kardinalitetom koji predstavlja odnos instanci. Svakoj vezi se moe dodati ime.

    Jedna du sadri dve take (krajnje).

    ista agregacija (veza po referenci) objekat ija je klasa (A) komponenta neke druge klase (B) moe da postoji pre objekta ija klasa sadri njegovu tj. ivotni vek objekta klase A ne zavisi od ivotnog veka objekta klase B. Veza moe da se realizuje pomou niza ili liste.

    Jedan fakultet sadri 0 ili vie odseka.

    -> oznaava redosled (orijentaciju)

    7

  • 16. Definicija i osobine nasleivanja

    Ova veza modeluje odnos opte - pojedinano, generalizacija, specijalizacija i reava problem ponovnog korienja softvera. Ona omoguava preuzimanje osobina neke klase uz mogunost dodavanja podataka lanova i modifikovanje metoda.

    A je klasa predak, a B je klasa potomak. Nasleivanje ne podrazumeva nikakve izmene u kodu klase pretka. Izvorni kod klase pretka ne mora biti, I najee nije na raspolaganju, ve samo prevedeni oblik. Nasleivanje uvodi jos jedan nivo zatite protected, koji dozvoljava pristup lanovima samo klasama naslednicama, za sve ostale je zatvoreno.

    Osobine nasleivanja: mogunost modifikacije (redefinisanja) metode klase pretka (OVERRIDING) mogunost proirivanja klase tranzitivnost (ako Y nasleuje X, i Z nasleuje Y, tada Z nasleuje i X) mogunost viestrukog nasleivanja klasa moe imati vie predaka

    17. Demetrin zakon i zakon supstitucije

    Demetrin zakon (povezuje nasleivanje i inkapsulaciju)

    Metode klase ne smeju ni na koji nain da zavise od strukture bilo koje druge klase, osim od neposrednog pretka.

    metoda m

    metoda m moe da pristupi zatienim lanovima klase z, ali ne sme zatienim lanovima klase t.

    Zakon supstitucije Barbara Liskov (povezuje nasleivanje i inkluzivni polimorfizam)Ako za svaki objekat s klase S postoji objekat t klase T takav da se proizvoljni program definisan nad klasom T ponaa isto kada se t zameni sa s, tada je S izvedena klasa od T.

    18. Realizacija nasleivanja u C++

    Postojanje nasleivanja oznaava se dvema takama ( : ) iza identifikatora klase koja se definie, a iza koje slede identifikatori osnovnih klasa. Kae se da izvedena klasa nasleuje sve lanove osnovne klase i njima (osim private lanova) pristupa kao sopstvenim. Moe se smatrati da izvedena klasa poseduje, kao podobjekat, bezimeni primerak osnovne klase. Konstruktori, destruktori, metoda operator=() i prijateljstvo iz osnovne klase se ne nasleuje, ve se generie samostalno.Izvoenjenje klase iz neke osnovne klase moe se vriti javno, zatieno ili privatno, dodavanjem modifikatora public, protected ili private ispred identifikatora osnovne klase. Primer: class A : public B {}Za javno izvoenje stepen zatite osnovne klase se nee promeniti u izvedenoj klasi. U zatienom izvoenju javni lanovi osnovne klase postaju zatieni lanovi izvedene klase, a za privatno izvoenje svi lanovi osnovne klase postae privatni lanovi izvedene klase. U odsustvu modifikatora, podrazumeva se private izvoenje. Redeklarisanjem identifikatora unutar izvedene klase pokriva istoimeni lan osnovne klase. Takvi lanovi se ipak mogu koristiti unutar izvedene klase pomou operatora za razreenje dosega ( :: ), tj. pomou izraza oblika osnovna_klasa::lan.

    Nasledjivanjelanovi osnovne klase

    public protected private

    public public protected private

    protected protected protected private

    private private private private

    8

    Ageneralizacija spec

    ijaliz

    acija

    x

    z

    t

  • 19. Inkluzivni polimorfizam u C++

    Najosnovniji primer je tip char u C-u. Kao podtip int-a, ima sve njegove osobine, ali i neke svoje dodatne.Opte pravilo inkluzivnog polimorfizma je da potomak moe zameniti pretka, a da obrnuto ne vai. (ne neposredni ve bilo koji potomak).Promenljiva ili objekat se ponaa kao da pripada nekoj drugoj klasi.Inkluzivni polimorfizam se javlja u dva oblika:

    kod operacije dodele potomak moe da preuzme vrednost pretka i tada je potomak delimino definisan (ali se ni sluajno ne radi)

    kod zamene formalnih sa stvarnim parametrima ako formalni parametar definisan kao primerak osnovne klase onda na tom mestu pozivamo izvedenu klasu (stvarni parametar). C++ zahteva da formalni parametar bude referenca i time se dobija pravi polimorfizam

    Zakon supstitucije Barbara Liskov (povezuje nasleivanje i inkluzivni polimorfizam)Ako za svaki objekat s klase S postoji objekat t klase T takav da se proizvoljni program definisan nad klasom T ponaa isto kada se t zameni sa s, tada je S izvedena klasa od T.

    Dodela vrednosti izmeu prtka i potomka se radi pokazivaima.Predak Pr, *pPr; Potomak Po, *pPo;

    1. Pr = Po Poto postoji type cast, moemo i obrnuto, ali to bi izazvalo haos, zato to je Po iri od Pr.

    Kopira se bit po bit.

    2. *pPr = *pPoIsto kao u prethodnom sluaju.

    3. pPr = pPo

    Ono to se stvarno deava: pPr = (Predak *) pPo Automatski se vri konverzija tipa.

    Ako imamo metodu m, koja je redefinisana u potomku, posle 3. ako uradimo pPr -> m() pozvae se m iz pretka.Kod funkcija: formalni parametar predak, stvarni moe biti potomak, ako na mestu formiranja parametra stoji referenca.Predak se moe ponaati kao potomak ako sa pokazivaima uradimo eksplicitnu konverziju. U dodeli se potomak ponaa polimorfno, u tom sulaju priamo o polimorfizmu.

    20. Virtuelne metode

    Bez njih nema dobrog nasledjivanja.

    Poetni problem: Metoda M() je napisana u vreme formiranja pretka. U njoj se nalazi poziv metode K(), takoe iz pretka. U potomku je redefinisana metoda K(). Pa posle u programu:

    Potomak P;P.M(); - poziva se metoda M() ali ona poziva metodu K() iz pretka a ne redefinisanu metodu K() iz potomka.

    Da bi se to reilo, trebalo je modifikovati prevodilac kod poziva metoda, pa se metode vie ne pozivaju kao ostale funkcije.

    9

    pPr pPo

    predak

    potomak

    pPo pPopPr

    Posle dodelepPr = pPo

    predak

    potomakm

    adr(k)

    jmp k

    k

    k

  • Svaka klasa snabdeva se jednom tabelom koja se naziva v-tabela. U njoj se nalazi veliina objekta (u bajtovima, zbog destruktora) i adrese virtuelnih metoda. U v-tabeli izvedene klase nalazi se adresa redefinisane virtuelne metode (virtuelnost se nasleuje) i iz nje e se pozvati odgovarajua metoda K() iz potomka.

    Virtuelne metode su metode osnovne klase koje mogu da se zamene istoimenim metodama izvedene klase kada se pozovu za objekat koji pripada izvedenoj klasi. Virtuelne metode su obine metode i one se koriste u veini, ali statike metode se bre pozivaju pa su zato ostali u C++. Prijateljske funkcije ne mogu biti vituelne. Deklariu se dodavanjem modifikatora virtual ispred njihove deklaracije u osnovnoj klasi i on se ne mora ponovo pisati pri ponovnim deklarisanjima u izvedenim klasama. Deklaracije virtuelnih metoda u osnovnoj i u svim izvedenim klasama moraju biti istovetne po imenu, tipu koji vreaju, i broju i tipu parametara. Skup svih istoimenih virtuelnih metoda moe da se smatra jednom polimorfnom metodom ije ponaanje zavisi od trenutne situacije, tj. od konkretnog objekta, u momentu pozivanja (to ini programiranje objektno orijentisanim).

    Virtuelna metoda koja nije definisana u osnovnoj klasi naziva se apstraktnom metodom. Apstraktna metoda se oznaava sa =0, umesto tela funkcije prilikom definisanja. Klasa koja sadri bar jednu apstraktnu metodu naziva se apstraktnom klasom. Ne mogu se stvarati objekti te klase ve samo pokazivai i upuivai na nju. Takoe, klasa izvedena iz apstraktne klase koja ne sadri definiciju bar jedne apstraktne metode, i sama je apstraktna klasa. Svrha apstraktne klase je pravljenje hijerarhije klasa. One stoje u vrhu i sadre sve to je zajedniko za potomke.

    Praksa je da se za vituelne metode proglaavaju metode za koje se oekuje da e kasnije biti redefinisane, a naroito apstraktne metode i destruktori (da bi se svaka nasleena klasa unitila svojim destruktorom). Konstruktori ne mogu da budu virtuelne metode.

    21. Viestruko nasleivanje u C++

    Viestruko nasleivanje predstavlja istovremeno nasleivanje vie klasa. Realizuje se isto kao i jednostruko nasleivanje, navoenjem imena svih predaka uz modifikatore pristupa.

    class A : public B, public C { }Prilikom viestrukog nasleivanja moe doi do sledeeg problema: ako se iz klase A izvedu klase B i C, a iz B i C se izvede klasa D, tada e D imati dvostruki sadraj klase A, kome e moi da se jedino pristupa pomou oparatora za razreenje dosega (B:: i C::). Da bi se to izbeglo, prvobitna osnovna klasa (A) treba da bude virtuelna osnovna klasa za svoje neposredne izvedene klase. To se postie dodavanjem modifikatora virtual ispred imena pretka pri definisanju potomka. Tako e objekat klase D imati samo jedan primerak klase A. Takoe, lako se prave I semantike greke: klasa Voza bude naslednik klasa ovek i Automobil, pa onda voza ima ruke, noge, tokove, vrata

    Primer upotrebe je kada od jedne klase uzimamo interface, a od druge realizaciju. Problem moe nastati ako klasa A i klasa B imaju istu metodu m.Reenja:

    1) redefinisati2) klasifikovati A::m, B::m3) ako je m potpuno ista u A i B problem

    Ovaj problem se reava zakrpom viestrukog nasledjivanja.

    C++ nudi virtuelno nasledjivanje koje spreava da se dve kopije iste metode tretiraju kao iste metode.

    10

  • 22. Generike klase

    Generike klase su klase koje imaju druge klase kao parametre ( parametrizovan polimorfizam). Parametrizovane su nazivima klasa. One modeluju odnos opte pojedinano i realizuju parametarski polimorfizam. Mehanizam za izvoenje generinosti u C++-u su template-i. Opti oblik ablona generike klase je:

    template< argument, argument,, argument > opisgde argumenti mogu oznaavati tipove ili konstante, pa je njihov opti oblik:class identifikator_tipa ili oznaka_tipa identifikator_konstante. U opisu se nalazi definicija klase ili definicija/deklaracija funkcije i tu se ponovo navode argumenti pod istim imenom kao u template-u. Primer:

    template< class T, int k >class Vekt {

    private:int kap;T niz [k];

    public:Vekt();T& operator[](int i) const {return niz[i];}

    };

    ablone koristi prevodilac za generisanje konkretnih klasa i funkcija, pa ih stoga treba stavljati u zaglavlja. Template se ne prevodi zajedno sa klasom. Prilikom definisanja metode van njene klase pored identifikatora klase (radi proirenja dosega) potrebno je navesti i identifikatore argumenata ablona:

    template< class T,int k >Vekt:: Vekt() : kap(k) { for( int i=0; i iniz;Vekt< double,20 > dniz;

    Konstantni izrazi ne smeju da sadre promeljive.

    U UML-u se generika klasa predstavlja:

    23. Veza asocijacije

    Veza asocijacije je veza izmeu dve semantiki nezavisne klase. Ovakva veza je veoma znaajna u projektovanju baza podataka. Npr. (prikaz u UML-u)

    1..* 1..*NASTAVNIK________________PREDMET

    predaje

    Kad ustanovimo da veza postoji, onda je bitno odrediti kardinalitet. Asocijacija moe biti i viestruka:

    Kardinalitet pokazuje koliko objekata jedne klase moe biti u vezi sa jednim objektom iz druge klase. U ovom primeru jedan ili vie profesora (1..*) predaje jedan ili vie predmeta (1..*).Ova veza moe biti binarna, ternarna, itd. Realizuje se preko pokazivaa, pa se moe predstaviti listom ili nizom (za nastavnika napraviti listu predmeta koje predaje ili obrnuto; kad se predmet unitava kao objekat, mora se iskljuiti i iz nastavnikove liste...).

    11

  • 24. Veza zavisnosti

    Veze zavisnosti predstavljaju najrazliitije veze izmeu objekata dveju klasa (zavisnost objekta klase X od objekta klase Y)Ako objekat klase X zavisi od objekta klase Y, on ne moe da funkcionie ako se pre toga ne konstruie objekat klase Y. Treba izdvojiti samo jednu pod imenom veza korienja:

    X--------------------Y

    Ova veza se pojavljuje kada u najmanje jednoj metodi klase X figurie formalni parametar iz druge klase Y.

    12