[ Qlex @ 09.06.2004. 14:27 ] @
OSNOVA OBJEKTNO ORIJENTISANOG PROGRAMIRANJA (OOP-a)

OOP je način pristupa realizaciji softvera kao modelu realnog sveta. Objektno orijentisano programiranje predstavlja sasvim nov način razmišljanja u odnosu na tzv. tradicionalno algoritamsko programiranje. Problemi se identifikuju kao objekti koji nešto rade i apstrakcije koje predstavljaju skupove objekata istih svojstava. Kod ovakvog načina programiranja mnogo više vremena se troši na projektovanje, a manje na samo programiranje, što je bio slučaj kod običnog (tradicionalnog) programiranja. OOP u centar rada postavlja problem koji rešava, a ne pitanje konkretnog programskog rešenja. Akcenat je na objektima (delovima sistema) koji nešto rade, a ne na algoritmima tj. na tome kako nešto radi. OOP pruža nekoliko bitnih koncepata, a to su: klase, objekti, enkapsulacija, metode i svojstva, kontruktori i destruktori, nasleđivanje i polimorfizam

1.Klasa je osnovna organizaciona jedinica programa u objektno orijentisanom jeziku. Klasa predstavlja tip, skup objekata istih svojstava. Klasa je tip, a objekat je primerak klase. Klasa predstavlja neki apstraktni tip koga definiše korisnik jezika. Kao što u nekom jeziku postoje ugrađeni tipovi – int, char, real, ovde nam je dozvoljeno da definišemo proizvoljan broj promenljivih svog tipa i da iskoristimo potpuno ravnopravno. Uočavanje zajedničkih svojstava bitnih za funkcionisanje sistema i izdvajanje skupa entiteta koji imaju zajednička svojstva se naziva asptrakcijom. Klasa ima određene atribute (osobine) i operacije (akcije) koje se mogu vršiti nad objektima klase. Atributi najčešće predstavljaju unutrašnjost klase tj. njenu realizaciju, dok operacije predstavljaju ono što se spolja može raditi sa objektima klase. Svojstvo definisanja proizvoljno mnogo promenljivih nekog apstraktnog tipa se naziva svojstvom višestrukih primeraka. Klasa predstavlja tip za koji se mogu kreirati primerci. Primerci klase se zovu objekti.
Klase se u Visual Basic .NET-u prave korišćenjem naredbe Class. Osnovna šema izgleda ovako:

[Public | Private | Protected | Friend | Protected Friend | Shadows ]
[ MustInherit | NotInheritable ] Class nazivKlase
'ovde ide implementacija
End Class

Značenje ključnih reči:

Public - Klasa je javno dostupna.
Private - Klasi je moguće pristupiti samo iz programskog modula u kojoj je deklarisana.
Protected - Klasi je moguće pristupiti samo iz klase koja je sadrži ili iz tipova izvedenih iz te klase.
Friend - Klasa je dostupna samo iz ovog programa.
Protected Friend - Klasa je dostupna samo iz programa ili tipova izvedenih iz klase koja je sadrži.
Shadows - Klasa je senka neke identično imenovane klase.
MustInherit - Ovo je apstraktna klasa i članove klase mora da implementira klasa koja je nasleđuje.
NotInheritable - Klasa ne može da se nasleđuje


2.Objekat. Objekat je predstavljanje nečega što postoji. Kako je klasa tip, objekat predstavlja promeljivu toga tipa u programu. Svaki objekat ima sopstvene elemente koji su navedeni u deklaraciji klase, a takođe ima i svoje karakteristike: identitet, stanje i ponašanje.
Kako to funkcioniše? Setimo se programa za video klub koji bi sada trebalo da ištampa račun za izdate filmove članu kluba. Za ovo su nam potrebni objekat pod nazivom 'Račun' i objekat pod nazivom 'Izdanje'. Objekat Izdanje predstavlja osnovnu delatnost kluba, tačnije samo izdavanje filmova članu. Ovaj objekat će konsultovati objekat Član koji će mu dati podatke o samom članu koji je došao da iznajmi filmove, ali će konsultovati i objekat Film koji će mu dati podatke o izdatom filmu. Objekatu Izdanje je potrebna i mogućnost da generiše račun. Objekat Račun bi predstavljao primerak računa za člana u kome bi bili upisani detalji računa, a takođe bi mogao i da se odštampa. Veoma je bitno zapaziti da objekat ima inteligenciju da proizvede aktivnosti koje se na njega odnose (objekat Izdanje može da generiše račun). Tada objektu Izdanje možemo jednostavno reći 'Napravi račun.', a objektu Račun možemo reći 'Odštampaj se'. Ovo su primeri ponašanja objekta. Veliki je značaj objekta u tome što ih može koristiti i neko ko ne razume kako su oni sastavljeni.

3.Enkapsulacija je osnovni koncept na kome počiva objektna orijentisanost. Ona predstavlja sakrivanje detalja realizacije nekog tipa, gde tip opisuje ista svojstva celog skupa primeraka. Korisniku određenog tipa je potrebno precizno definisati samo šta se s tipom može raditi, dok se način kako se to tačno radi sakriva od korisnika. Jedan objekat u programu može da koristi samo one delove drugog objekta koje je taj drugi objekat proglasio za vidljive. Nema načina da jedan objekat pristupi unutrašnjosti drugog, osim ako mu to nije specijalno dozvoljeno. Ovakav princip u velikoj meri smanjuje verovatnoću grešaka u programu jer je sigurno da se niko spolja ne oslanja na detalje realizacije, prosto zato što ne može da ih vidi. Enkapsulacija znači da objekte možemo posmatrati kao crne kutije. Uz osnovno znanje o tome šta kutija radi, nama nije potrebno da ulazimo u detalje i razumevanje kako ona zapravo radi kada joj zadamo da uradi nešto. U primeru štampanja računa članu video kluba, onaj ko iznajmljuje filmove članovima, ne mora da zna na koji način će se obaviti radnja 'Napravi račun', njemu je samo bitno formiranje računa radi njegove štampe.

4. Metode i svojstva. Na objekte utičemo kroz metode i svojstva. Metode predstavljaju nešto što zadamo objektu da radi. U tom smislu, pokretanje metoda je analogno pozivanju funkcija. Svojstvo je nešto što opisuje osobinu i stanje objekta. Ako bi trebalo da štampamo račun, trebalo bi da nađemo metod koji ovo radi. Kada pokrenemo metod, pretpostavlja se da sam objekt razume šta treba da uradi da bi zadovoljio zahtev. Nas ne zanima šta on zapravo radi, mi samo kažemo 'Štampaj račun'. Sa druge strane, ako bi trebalo da štampamo neki drugi račun, možemo podesiti svojstvo računa. Ako želimo da štampamo račun broj 5 a ne 7, podesićemo svojstvo broja računa na vrednost 5. Takođe moguće je menjati svojstvo tip ili veličinu fonta, kao i mnoga druga. Objekat je odgovoran za reagovanje na ovaj zahtev i mi ne treba da brinemo o tehničkim stvarima kroz koje objekat prolazi da bi ispunio naš zahtev.

5.Kontruktori. Objekat predstavlja složeni sistem koji ima neko svoje unutrašnje stanje. To stanje treba uspostaviti na određen način na početku života objekta. Zato u programu treba obezbediti mehanizam da se objekat automatski po nastanku dovede u ispravno početno stanje što se postiže procesom inicijalizacije. Da bi se to obezbedilo, u klasi se definiše posebna funkcija članica koja se poziva automatski pri kreiranju objekta. Ova funkcija se naziva konstruktorom i nosi isto ime kao i sama klasa. Izgled samog konstruktora je stvar interne realizacije klase. Kada se definišu objekti neke klase, potrebno je navesti stvarne argumente poziva konstruktora. Kada se u toku izvršavanja programa naiđe na definiciju objekta, poziva se konstruktor sa navedenim argumentima. Tada se izvršava telo konstruktora, čime je objekat doveden u početno stanje onakvo kakvo je predvideo projektant klase.
U Visual Basic .NET-u konstruktori predstavljaju funkcije članice koji se pozivaju sa New.

6.Destruktori. Moguće je definisati funkciju članicu klase (metodu) koja će se automatski pozvati kada objekat prestaje da živi. Ova funkcija se naziva destruktor. Njena sintaksa je sledeća:


Sub Despose()
' ovde dolazi kod koji služi za 'čišćenje'
End Sub


Jedna od dobrih stvari koje je odradio .NET Framework jeste prikupljanje đubreta (Garbage Collection, GC) koje se odvija u pozadini i prikuplja reference objekta koji se ne koriste, što nas oslobađa potrebe da ih sami uništavamo. Međutim, kako je ovo proces koji se odvija u pozadini, mi ne možemo tačno znati kada je proces pozvan.

7.Nasleđivanje je najvažniji koncept OOP-a. To je relacija između klasa: Ako je klasa B jedna vrsta klase A, tj. ako objekti klase B imaju sve osobine klase A i još neke, onda je klasa B naslednik klase A. Nasleđivanje se realizuje izvođenjem klasa. Kada jedna klasa predstavlja jednu vrstu druge klase, kaže se da je ona izvedena klasa iz te druge klase, koja se naziva osnovnom klasom. Pri kreiranju objekta izvedene ili nasleđene klase, najpre se izvršava kostruktor osnovne klase koji inicijalizuje podobjekat osnovne klase, zatim konstruktor članova izvedene klase, i najzad telo konstruktora izvedene klase. Kada se kreira objekat izvedene klase koji u sebi sadrži i članove nasleđene iz osnovne klase, potrebno je inicijalizovati i taj nasleđeni deo. To se vrši automatski, pozivom konstruktora osnovne klase pre nego što se izvrši telo konstruktora izvedene klase.

8. Polimorfizam u prevodu znači pojavljivanje u više oblika. To je svojstvo koje obezbeđuje izvršavanje verzije funckije članice svojstvene izvedenoj klasi, iako se objektu pristupa kao pripadniku osnovne klase. Funkcije članice koje će u izvedenim klasama imati nove verzije nazivaju se virtuelnim funckijama. To su funkcije čija se definicija odlaže za izvedene klase. Virtuelna funkcija deklariše se navođenjem reči virtual ispred deklaracije funkcije unutar deklaracije klase.

Preuzeto iz mog maturskog rada iz informatike.
[ Romel68 @ 16.09.2014. 16:31 ] @
Lepo napisano, hvala za tekst
[ AMD guy @ 16.09.2014. 21:49 ] @
Pogledaj TOP teme o OOP u Art of programming forumu.