8. Objektno-orijentisani jezici Flashcards

1
Q

Apstrakcija

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Koncept objektno-orijentisanog programiranja

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Klase u programskom jeziku C++

A
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
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Klase u programskom jeziku Java

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Klase u programskom jeziku C#

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Nasledjivanje

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Polimorfizam

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Tip Object u Javi i C#-u

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Apstraktne klase

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Interfejsi

A

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 { ... }
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Genericke funkcije i klase u Javi

A

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;}
}
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Upotreba dzokera na mesto stvarnih paremtara generickih klasa

A

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!();

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Genericke funkcije i klase u C#-u

A

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!(…)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Razlika izmedju generickih klasa i klasa sa atributima Object

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly