8. Objektno-orijentisani jezici Flashcards
Apstrakcija
Pod apstrakcijom se podrazumeva namerno zanemarivanje detalja u zavisnosti od potreba. Prilikom opisivanja nekog sistema, beleze se samo one osobine koje mogu biti od znacaja za dalji rad. Koncept apstrakcije je fundamentalan u programiranju
Apstrakcija procesa podrazumeva koriscenje potprograma - potprogram definise neki proces a njegov poziv je apstrakcija tog procesa. Korisnik nije upoznat sa njegovom implementacijom.
Apstraktni tipovi podataka su korisnicki tipovi koji ispunjavaju sledece uslove:
• Reprezentacija podataka tog tipa je sakrivena od delova programa koji te podatke koriste. Nad podacima tog tipa mogu da se primenjuju samo operacije definisane u tipu.
• Deklaracija podataka i procesa koji se mogu primenjivati su definisane u jedinstvenom modulu, dok drugi moduli mogu samo da kreiraju promenljive tog tipa. U proceduralnim jezicima se za apstrakciju podataka koriste moduli, a u o-o se koriste klase.
Proceduralni jezici:
Modul sadrži:Interfejs – sadrži definicije tipova podataka koji se u modulu obradjuju i deklaracije potprograma koje podatke tih tipova obradjuju i Implementaciju – sadrži implementaciju potprograma definisanih u interfejsu modula
Objektno orijentisani jezici:
Klase:
Klasa sadrzi skup podataka koji opisuju stanje objekta i metode koje se nad njim mogu izvrsavati. Za sve clanove klase je definisano pravo pristupa (enkapsulacija) koje moze biti private, protected i public. Nepisano pravilo je da svi podaci trebaju biti private
Koncept objektno-orijentisanog programiranja
Svi podaci koji se koriste predstavljaju objekte. Objekat je definisan podacima koji opisuju njegovo stanje i procesima koji opisuju njegovo ponasanje. Objekti medjusobno komuniciraju preko poruka, tj procesa i svaki objekat pripada svojoj klasi.
Klase u programskom jeziku C++
Kod C++-a definicija klase je odvojena od implementacije (CPP i Header fajlovi). Pravima pristupa se postize sakrivanje podataka. class ImeKlase { private: //nesto protected://nesto public://nesto } Primer klase:Stack
Klase u programskom jeziku Java
Za razliku od C++-a, funkcije se implementiraju direktno u klasi. Postoji i dodatno pravo pristupa na nivou paketa (sve klase u okviru jednog paketa se smatraju prijateljima). U javi enkapsulacija na nivou klase je slabija nego u C++-u i takodje postoji enkapsulacija na nivou paketa.
Primer klase://stack
Klase u programskom jeziku C#
Funkcije se implementiraju direktno u klasi.
Postoje svojstva kao posebni clanovi klase (spolja se vide kao javni atributi, a unutra klase su funkcije get i set). Postoje dodatna prava pristupa (internal - clanovi su vidljivi u okviru asemblija i to je podrazumevano pravo pristupa, i protected internal - clanovi vidljivi u okviru istog asemblija i u izvedenim klasama). Enkapsulacija je na nivou asemblija.
Assembly je deo aplikacije koji sadrzi semanticki skup klasa koji se nezavisno prevodi. Svakom asembliju odgovara posebna projekat. Na osnovu jednog asemblija generise se:
Modul koji se moze izvrsavati(.exe)
Dynamic link library (.dll)
Klase u okviru jednog asemblija se tretiraju kao prijateljske.
Nasledjivanje
Nasledjivanje omogucava da se definisu nove klase na osnovu postojecih. Nova klasa se definise kao specijalizacija ili prosirenje neka klasa koja vec postoji i inicijalno ima sve atribute i metode kao klasa koju nasledjuje. Novoj klasi mogu i da budu pridodati novi atributi i metode. Metode mogu biti i izmenjene sa ciljem da se nova klasa prilagodi specificnim potrebama.
C++: class ImeKlase : ImeRoditeljske [, ImeR2]... Java: class ImeKlase extends ImeRoditeljske C#: class ImeKlase : ImeRoditeljske
Kod C++-a nasledjivanje moze biti i javno i privatno i zasticeno, dok kod Jave i C#-a samo je jedan nacin izvodjenja koji odgovara javnom izvodjenju kod C++-a. Kada je potrebno da objekat jedne klase bude deo druge, definise se kao atribut.
Polimorfizam
Termin polimorfizam ukazuje na mogucnost da se razlciti metodi pozivaju preko istog interfejsa. To je zapravo sposobnost da razliciti objekti odgovore na iste poruke na sebi svojstven nacin. Polimorfne funkcije se obelezavaju u
C++:u osnovnoj klasi virtual, u izvedenoj nista
Java:ni u osnovnoj ni u izvedenoj nista
C#: u osnovnoj virtual, u izvedenoj override
Tip Object u Javi i C#-u
Kod Jave su iz klase Object izvedene sve klase i ukoliko se definise klasa bez roditeljske, bice direktno izvedena iz klase Object.
Kod C#-a iz klase Object su izvedeni svi tipovi podataka.
Apstraktne klase
Apstraktne klase su klase koje sadrze bar jednu apstraktnu metodu (nema implementaciju) Ne mogu da se kreiraju instance apstraktnih klasa vec one samo sluze za izvodjenje drugih klasa.
C++: apstraktne metode se obelezavaju sa virtual …=0;
Java: apstraktne metode i klasa se obelezava sa abstract
C#:apstraktne klase i metode se obelezavaju sa abstract, a implementirane metode sa ovrride
Interfejsi
Interfejsi definisu skup apstraktnih metoda koje izvedene klase treba da implementiraju. Metode clanice su uvek apstraktne i javne.
U Javi, clanovi interfejsa mogu da budu atributi koji su obavezno javni,staticki i konstantni.
U C#-u clanovi interfejsa mogu da budu i svojstva, delegati i dogadjaji.
Interfejs se u Javi i C#-u definise kao interface Ime {…}
U Javi ispred metode moze da stoji public abstract, ali u C#-u ne
U Javi, klase implementiraju interfejs kao class Ime implements Interfejs { ... } U C#-u, klase implementiraju interfejs kao class Ime:Interfejs { ... }
Genericke funkcije i klase u Javi
Prvi put su uvedene u verziji Java 5.0. Parametar templejta moze biti samo tip. Na mesto stvarnog parametra templejta se ne mogu koristiti primitivni tipovi (wrapper klase). Sve bibliotecke klase za predstavljanje kolekcija su zamenjene generickim klasama: ArrayList, Vector, LinkedList itd..
Definicija genericke funkcije : Tip Ime!argumentitemplejta!(argumenti funkcije){ … } Definicija genericke klase: class Ime!argumenti templejta! { … }
Parametar templejta se moze iskoristiti kao: tip atributa, tip parametra metode, tip lokalne promenljive metode, povratni tip metode)
Parametar templejta se ne moze iskoristiti kao: tip statickog atributa, tip parametra staticke metode, tip lokalne promenljive u statickoj metodi, povratni tip staticke metode, tip niza ili objekta koji se kreira)
Primer:
class Stack!T!
{
public void Push(T newElement) {…}
public T pop() { … } …
}
Instanciranje objekta tipa templejtske klase:
Stack!Integer! s1=new Stack!Integer!(); // Stack!Integer! s2=new Stack!!();
• Genericka klasa sa ogranicenim parametrima U definiciji templejta mogu da se dodaju ogranicenja koja treba da zadovolje tipovi da bi se mogli upotrebiti kao argument templejta pri instanciranju objekta T extends B1 & I1… &IN Primer: class Vektor T extends Comparable { private T[] niz; … public T min() { T m=niz[0]; for(int i=1;i MANJE niz.lenght;i++) if(niz[i].CompareTo(m) VECE 0) m=v[i]; return m;} }
Upotreba dzokera na mesto stvarnih paremtara generickih klasa
Na mesto stvarnog argumenta templejta se moze upotrebiti neograniceni dzoker ( ? ) ili ograniceni dzoker ( ? extends B ). Dzoker je opstiji od parametrizovanog tipa i znaci samo “neoznacnei tip”. Parametrizovani tip znaci da samo trenutni nije definisan, ali ce biti definisan kasnije, npr kada kreiramo objekat.
Stack ! ? ! s = new Stack !Integer!();
Genericke funkcije i klase u C#-u
Parametar templejta moze biti samo tip. Na mestu stvarnog parametra se mogu koristiti i primitivni tipovi. U biblioteci klasa za predstavljanje kolekcija su paralelno definisane genericke i negenericke klase.
class ImeKlase !argTemp! [where argTemp : ogranicenja]
Vrste ogranicenja:
• class - argument templejta je referentnog tipa
• struct - argument templejta je vrednosnog tipa
• new() - argument templejta je klasa koja sadrzi prazan konstruktor bez argumenata
• imeKlase - argument templejta je tipa date klase ili izvedena iz nje
• imeInterfejsa - argument templejta je tipa klase koja implementira dati interfejs
class Vektor !T! where T: IComparable { T[] niz; public Vektor(int n){niz=new T[n];} public T min(){ T m=v[0]; for(int i=1;i manje niz.Lenght;i++) if(((IComparable)v[i].CompareTo(m)>0) m=v[i]; return m; }
U C#-u moze da se definise genericka metoda i u klasi koja nije genericka
tip imeFunkcije !argtemp!(…){…}
imeFunkcije!listatipova!(…)
Razlika izmedju generickih klasa i klasa sa atributima Object
Genericka klasa:
• Ako se radi o jednoj kolekciji, svi elementi su istog tipa
• Uvodjenjem ogranicenja suzava se lista tipova koji se mogu koristiti tako da je koriscenje nekih funkcija bezbednije
• Koriscenje atributa van klase je bez kastovanja
Klasa sa atributima tipa Object
• Tipovi mogu biti raznorodni
• Ne postoje nikakva ogranicenja nad tipovima kojima mogu pripadati atributi
• Ukoliko se atributi koriste spolja, neophodno je kastovanje