PDA

Pogledaj cijelu verziju : [Članak] OOD tema



Shakes
06-05-2007, 11:32
Object Oriented Design

ORIENTED ON C++

Dakle, zbog kronične upale Slobodnog Vremena u posljednje vrijeme odlučio sam napisati tutorijal za junior programere koji su se privikli na proceduralno, action-based programiranje kako bi ih upoznao sa konceptom objektno-orijentiranog dizajna. Na kraju ovog tutorijala, skromni cilj bi bio priviknuti vas na objektno-orijentirani način razmišljanja te jedan kratak uvod u UML (Unified Modeling Language), grafički jezik koji omogućuje programerima koji se koriste objektno-orijentiranim "stilom" stvaranja softvera da "iscrtaju" svoje umijeće.

Čim smo započeli, čeka nas terminologija... Gdje kud da pogledamo, vidimo objekte, žene, cure, prostitutke, striptizete, kuće, cure, je l' tako? Ljudi misle na temelju objekata. Tu su objekti koje vidimo svakodnevno, dakle imamo krevet, kompjuter, stol, doručak, ručak, kompjuter... Ali naravno, tu su i stvari koje vidimo rijeđe... NLOi, zgodna ženska na vašem krevetu ili program koji ne javlja errore. Objekte možemo podijeliti na žive i nežive. Sada nećemo ići nabrajati živu i neživu prirodu, nego obratimo pažnju na važan detalj. Svi ti objekti imaju neke svoje atribute i načine ponašanja. Atributi su na primjer veličina, širina i boja, a načini ponašanja, tu imamo eto, ženu koja redovito prigovara, dijete koje plače, šef koji zapovijeda i nastavnica koja je nastrana ili odskakanje lopte, pucanje puške. Ljudi uče o objektima tako da promatraju njihove atribute i načine na koje se ponašaju. Neki objekti imaju slična svojstva poput čovjeka i majmuna, ali neki nemaju, recimo, žena prije braka i žena poslije braka, jelde?

Objektno-orijentirani dizajn iliti skraćeno OOD je način stvaranja softvera da se program opiše slično onako kako čovjek opisuje objekte iz "stvarnog" života. Svi smo gledali matrix, pa mora biti pod navodnicima, nikad ne znaš... OOD iskorištava povezanost klasa, gdje možda objekti neke određene klase, recimo vozila, imaju iste karakteristike. Objekti poput auta, lokomotive i kamiona imaju mnogo sličnosti pa se mogu poistovjetiti u jednoj generalnoj skupini tj. klasi vozila, ali ipak imaju svoja neka svojstva. To se unutar OODa zove nasljeđivanje, dakle mogućnost da neka nova klasa preuzme svojstva druge klase, te da, naravno, ima svoja jedinstvena. Kao primjer, uzmimo objekt kabrioleta, za njega smo deklarirali posebnu klasu te naslijedili svojstva od klase vozila, koja je općenitija klasa. Nadam se da držite korak uz mene jer ipak mi je ovo prvi tutorijal, ako ne shvatite iz prve, pokušajte ponovno pročitati, a ako i dalje ne shvaćate, javite...

Kao što vidite, OOD nam omogućava da na intuitivan način riješavamo probleme kod stvaranja softvera kreiranjem klasa koje opisuju različita svojstva objekata te su sa drugim klasama srodne pa se može iskoristiti opcija nasljeđivanja. Objekti, kao i ljudi, komuniciraju preko poruka. Kao primjer, uzmimo da je žena primila naredbu/poruku da prekine zanovijetati jer je "korisniku" dosadila i ona će to izvršiti. No, opet, ovo je primjer jedino izvediv u mašti i programiranju, hehe.

OOD omata atribute i načine ponašanja u objekte. U objektu su spremljene sve informacije o njegovom načinu ponašanja i atributima. Svi objekti imaju opciju skrivanja informacija. To znači da mogu komunicirati međusobno ali ne mogu znati kako su jedni i drugi implementirani. Vratimo se na dobar primjer automobila. Možemo ga voziti, ali ne moramo znati kako njegov motor i shiftanje brzina npr. radi, ukoliko znamo kako koristiti mjenjač i pritisnuti pedalu za gas. Sakrivanje informacija je prilično bitno i ključno u stvaranju kvalitetnog softvera.

Nadalje, c++ programeri, kao što znate iz dosadašnjeg teksta, stvaraju svoje klase. Svaka klasa sadrži atribute ali i skupinu funkcija koje spadaju pod gore prozvano "način ponašanja". Atributi svoje ime profesionale izgovaraju "data members", dok funkcije unutar klasa imaju naziv member functions, ili maštovitije prozvano "metode" od strane starijih programera vičnih sa objektno-orijentiranim programskim jezicima poput Jave. Ako niste dosad shvatili, klase su zapravo poput nacrta, dok su objekti prava stvar i deklariraju se kao int, float itd. Još jedan od zanimljivih fičra koje kao što imaju funkcije je mogućnost recikliranja klasa tj. opcija spremanja klasa kao zasebnih fileova te iskorištavanja ih poslije u istom ali možda i u nekom drugom projektu.

Još jedna od bitnih činjenica kod objektno orijentiranog dizajna program jest analiza tj. planiranje klasa i kako će program izgledati. Naravno, mnogi ovaj dio preskaču jer ne prave NASA-ine sustave ali što kada projekti postanu veći? E, onda ćete morati sjesti i prvo osmisliti što bi program trebao raditi i kako.. to se zove Objektno orijentirana analiza i dizajn (OOAD).

UML

UML ili Unified Modeling language je zapravo grafička reprezentacija vašeg objektno-orijentiranog dizajna. No, više kao neka skica nego prava grafika doduše. Fleksibilnost je njegovo srednje ime tj. mogućnost stalnog rastezanja njegovih mogućnosti da se prilagodi programeru. Njegova povijest ide skroz od samih početaka objektno orijentiranog programiranja, dakle '80-ete godine prošlog stoljeća, no njegov pravi razvoj počinje negdje oko sredine 90-etih, točnije 1994. Za više informacija o UMLu potražite na službenoj stranici http://www.uml.orgS, a mi se ovim opraštamo zasad, sljedeći put ćemo krenti na pravo putovanje kroz Objektno orijentirano programiranje u C++u. Farewell!

RIPtheREAPER
06-05-2007, 11:52
Svaka cast na trudu, ali oce li to pomoci samo naprednijim programerima ili onima koji su dosli do FOR petlje?
Ili mozda i jednima i drugima?

Shakes
06-05-2007, 13:17
Ovo je više za startne programere koji bi trebali uvidjeti moć OO programiranja...

Burek_fr0m_SPACE
06-05-2007, 13:25
Ovo je više za startne programere koji bi trebali uvidjeti moć OO programiranja...
Malo si proturiječiš. Sva ta "moć OO programiranja" i nije baš za početnike.

Shakes
06-05-2007, 14:34
Nikada se nije rano upoznati sa OO-om, a sada kada će ga naučiti, to je drugo pitanje. Inače, nije pod pod početnike spadaju dobro poznavanje c++ovih fičra uključujući barem osnove pointera i arraya...

Shakes
06-05-2007, 20:32
Danke schon :) Uskoro slijedi nastavak, a zanima me da li bi ikog zanimali C++ tutorijali?

RIPtheREAPER
06-05-2007, 21:04
Mene jer sad cu u srednju a tamo se uci C++
A vec nesto znam o C++ tako da cu lagano pokopcat stvari.

I dali taj OOD sluzi npr. da "nacrtamo" nesto, kao u LOGO-u?

Shakes
06-05-2007, 21:28
Ne, OOD je "dizajniranje" klasa... To je kod, to nije ništa vidljivo kao 3d model ili crtež... To je dio koda koji omogućuje programeru da programira logično... Object-based ili object-oriented... To je samo opcija za bolji i efektivniji kod.

RIPtheREAPER
06-05-2007, 22:09
Aha, to je za naprednije...

Meni netreba da znam kako na napredniji nacin ispisati nesto, imam <cout i sta ce mi vise...
Istina frend mi je rekao jos jednu naredbu al se ne sjecam.

Luka
01-03-2009, 22:11
Aha, to je za naprednije...

Meni netreba da znam kako na napredniji nacin ispisati nesto, imam <cout i sta ce mi vise...
Istina frend mi je rekao jos jednu naredbu al se ne sjecam.

Sry što dižem temu iz mrtvih ali sam osjetio potrebu prokomentirati ovo :D

(std::)cout je objekt klase ostream. Dakle, samo postojanje couta je omogućeno OOP-om. Kako bi to izgledalo bez OOP-a? Onako kako izgleda printf (neugledno :D).

fps_gamer
01-03-2009, 23:02
mod si tu i ispricavas se sto dizes temu :pray: :pray: :pray:

Luka
02-03-2009, 14:34
pravila vrijede za sve ;)

natrag na temu