КОНЦЕПТИ ОБЈЕКТНО ОРИЈЕНТИСАНОГ ПРОГРАМИРАЊА

Радио: Игор Ранковић


Објектно-оријентисано програмирање је парадигма програмирања, која користи објекте као основу за пројектовање рачунарских програма и различитих апликација софтвера.Заснива се на различитим техникама, као што су

  • наслеђивање.
  • модуларност.
  • полиморфизам и
  • енкапсулација.

Решавање проблема парадигмом објектно-оријентисаног програмирања, је врло слично људском начину размишљања и решавању проблема. Састоји се од идентификовања објеката и постављање објеката који ће се користити у одговарајућу секвенцу за решење  одређеног проблема. Ради се о дизајну објеката чија ће понашања као јединица и у њиховој међусобној интеракцији, решити одређени проблем.

Интеракција између објеката се састоји у размени порука, где одређена порука усмерена према одређеном објекту,покреће енкапсулиране операције у том објекту, чиме се решава део обично ширег и сложенијег проблема. Уопштено гледано, објектно-оријентисано решавање проблема се састоји из четири корака:
1. идентификовање проблема
2. идентификовање објеката који су потребни за његово решење
3. идентификовање порука које ће објекти међусобно слати и примати
4. креирање секвенце порука објектима, које ће решавати проблем или проблеме.
У парадигми објектно-оријентисаног програмирања, објекти су структуре података којепредстављају одређено и јасно дефинисано знање о спољашњем свету или стварности.Типична  организација  је  у  хијерархијске  класе,  где  свака  класа  објекта  поседује информације о особинама објекта које се чувају у инстанцама променљивих и које су повезане (концептом асоцијације) са сваком инстанцом у одређеној класи. Сваки објекат препознаје други објекат преко његовог интерфејса. Подаци и логика сваког објекта су скривени  од  других  објеката.  Тиме  се  омогућава  раздвајање  имплементације  од понашања објекта у интеракцији са другим објектима.

Основни принципи – Објектно оријентисаног програмирање 

Структурним програмирањем тежимо да што реалније пресликамо (моделирамо,симулирамо) понашање неког система. Објектно-оријентисаним програмирањем (ознакаООП) пресликавамо исти тај систем тако што га представљамо као скуп међусобно повезаних објеката. Наиме, цели систем се структурира на мање целине којима је лакше управљати, а које међусобно комуницирају. Систем који је овако организован лакши је за разумевање , њиме је лакше управљање и рад.Сматра се да је сложеност проблема које је неко у стању да риеши директно сразмерна предмету (шта?) и квалитету (како?) апстракције којом располаже.
Објектно-оријентисани  приступ посебним  чини  обезбјеђење  алата  механизама  за исказивање проблема појмовима из домена проблема. Апстракције које оно уводи су довољно опште тако да програмер није ограничен једним доменом примене.
Објектно-оријентисано програмирање.Представља имплементациону методу код које су програми организовани као кооперативни скуп објеката при чему сваки објекат представља инстанцу неке класе из хијерархији класа настале на бази релација наслеђивања (
inheritance).Објектно-оријентисани дизајн Представља  пројектантску  методу  која  обухвата  процес  објектно  оријентисане декомпозиције и нотацију за исказивање логичких и физичких као и статичких и динамичких модела посматраног система.

Објектно-оријентисана анализа Представља аналитичарску методу која захтеве (реqуирементс) посматра из перспецтиве КЛАСА и ОБЈЕКАТА који припада домену проблема.Основни појам у објектно-оријентисаним језицима је објект.
Објект је ентитет који представља људе, места или ствари – било апстрактно било конкретно.Карактеристике објеката представљене су преко атрибута и метода. Да бисмо користили готов објекат, не морамо да знамо како је он прављен, нити шта је у њему; све што је потребно да знамо јесте његова веза са спољним светом – интерфејс, као и то шта објект ради.
Атрибути описују објекат, вредности атрибута одредјују стање објекта. На пример: серијски број, модел, боја и година су само неки од атрбута објекта „Opel“, а једно стање того бјекта би могло да буде M789876, Kadet, бела, 2002.

Методи су процедуре додељене објекту које могу да мењају стање објекта (тј. Могу да мењају вредности атрибута).Објекти унутар програма морају да сарадјују. Да би омогућили координацију, методи проузрокују и поруке (messages) које шаљу другим објектима. Ове поруке могу даа ктивирају методе неких других објеката, а тако активирани методи даље могу да изазову активирање нових акција неког следећег објекта итд. Дакле, поруке омогућавају објекту да комуницира са другим објектима.Да би неки програмски језик био објектно-оријентисан, он мора да:
-има  основну  јединицу  учауравања  (encapsulation)  и  да  подржава  „скривање информација“ у оквиру ње (то је класа),
-омогући креирање виших инстанци класе,
-омогући наслеђивање којим се стварају хијерархије класа,
-подржава полиморфизам.
Уколико неки језик нема све ове четири карактеристике, не може се рећи да је објектно оријентисан. На пример, у програмским језицима Clipper или Visual Basic 3.0, корисник може да користи неке већ предефинисане класе, али не и да ствара нове, те се за ове језике не може рећи да су објектно-оријентисани.Објектно-оријентисани језици су Smalltalk, Java, C++.

Наслеђивање (inheritance) је основа  развоја  објеката;  то  је  систем  односно  принцип  који  нам  омогућује  да направљене ствари не пишемо поново, већ само надоградимо оним што нама треба, затренутни специфични проблем. Циљ наслеђивања је преузимање особина једног или висе родитељских објеката, и њихова доградња на потребан ниво, било додавањем новихметода и података, било применом већ постојећих.Тако, једном креиран објект може бити неограничено много пута корисцеен.чиме се у многоме повећава брзина рада и продуктивност. Наслеђивање представља принцип даједном дефинисана класа, може да продукује одређену класу (или више њих), која наслеђује све атрибуте, методе и поруке те (надређене) класе која ју је генерирала.Подређене класе могу да искључе неке постојеће и укључе нове атрибуте или метода надређене класе. Међутим, то искључивање појединог атрибута или методе није буквално,они и даље формално постоје у тој класи, само им је онемогућен приступ. 

Појам и декларација класе

Класа је реализација апстракције која има
своју интерну представу (своје атрибуте) и
•операције које се могу вршити над њом(јавне функције чланице).

Класа дефинише нови тип.Један примерак таквог типа (Инстанца класе) назива се ОБЈЕКТОМ те класе (енгл.class object).ПОДАЦИ који су дио класе називају се подаци чланови класе (енгл. data members).ФУНКЦИЈЕ које су дио класе називају се функције чланице класе (енгл. member functions).

  • Чланови (подаци или функције) класе иза кључне речи PRIVATE: заштићени су од приступа споља (енкапсулирани су). Овим члановима могу приступати само функције чланице класе. Ови чланови називају се ПРИВАТНИМ члановима класе(енгл. private class members).
  • Чланови иза кључне ријечи PUBLIC: доступни су споља и називају се ЈАВНИМ члановима класе (енгл. public class members).
  • Чланови иза кључне речи PROTECTED: доступни су функцијама чланицама дате класе, као и класа изведених из те класе, али не и корисницима споља, и називају се ЗАШТИЋЕНИМ члановима класе (енгл. protected class members).

Редослед секција public, protected и private је произвољан, али се препоручује баш наведени редослед. Подразумевано (ако се не наведе спецификатор испред) су чланови приватни.

Каже се још да класа има своје унутрашње стање, представљено атрибутима, које мења помоћу операција. Јавне функције лланице називају се још и методима класе, а позив ових функција – упућивање поруке објекту класе. Објекат класе мења своје стање када сепозове његов метод, односно када му се упути порука.Објекат унутар своје функције чланице може позивати функцију чланицу неке друге или исте класе, односно упутити поруку другом објекту. Објекат који шаље поруку (позива функцију) назива се објекат-клијент, а онај који је прима (чија је функција чланица позвана)је објекат-сервер.
Препорука је да се класе пројектују тако да немају јавне податке чланове.
Унутар функције чланице класе, члановима објекта чија је функција позвана приступа се директно,само навођењем њиховог имена.
Контрола приступа члановима није ствар објекта, него класе: један објекат неке класе из своје функције чланице може да приступи приватним члановима другог објекта исте класе.Такође, контрола приступа члановима је потпуно одвојена од концепта области важења:најпре се, на основу области важења, одређује ентитет на кога се односи дато име на месту обраћања у програму, а затим се одређује да ли се том ентитету може приступити.
Могуће је преклопити (енгл. overload) fункције чланице, укључујући и конструкторе.Декларацијом класе сматра се део којим се спецификује оно што корисници класе треба да виде. То су увек јавни чланови. Наведена декларација је заправо дефиниција класе, али се из хисторијских разлога назива декларацијом.

Полиморфизам 

Како дефинисати полиморфизам? Посматрајмо, на пример, телефоне – неки су црвени са кружним бројчаником, неки су бели са дугмићима, неки имају аутоматску секретарицу,неки факс. Међутим, како год они изгледали, све их користимо на исти начин: подигнемо слушалицу и изаберемо број. И знамо да ћемо без обзира на то како телефон изгледао,увек моћи да га користимо. То је полиморфизам, нека врста стандардизације на нивоу објеката, могућност да се n- tи објекат у наследној хијерархији позива на исти начин као и први, други, или пети. Већина аутора се данас слажу у томе да објектни модел чине четири основна елемента:

(1) апстракција,
(2) учауривање,
(3) модуларност и
(4) хијерархија,као и три битна, али не и неопходна, елемента:

(1) типизација података,
(2) конкурентност извршавања и
(3) перзистенција.

Апстракција 

Апстракција је поједностављена представа неког система, креирана тако да нагласи за нас релевантне карактеристике, игноришући све нама небитно. Она представља један од основних  механизама  помоћу  којих  се  људи  боре  са  комплексним  проблемима.Апстракција, о којој никад не размишљамо на тако формалан начин је поставила темеље целокупних природних наука.Целокупна Њутнова физика никада не би била развијена да Њутн није занемарио отпор ваздуха који је успоравао јабуку док му је падала на главу.Креирајући објекте у програму ми креирамо јасно дефинирану структуру, а наш је задатак да представимо нешто чије карактеристике нису баш јасно дефиниране.
Због тога апстрахујемо реалан појам и представљамо га објектом, бирајући само оне особине тог објекта које су нам потребне. Класа је само дефиниција објекта, и обично обухвата: које класе насљеђује, који методи се мењају и/или додају, који подаци се додају. Она, у ствари, представља упутство за понашање објеката, и у практичним смислу,представља мртво слово на папиру. Да би нека класа „оживела“ потребно је да има свој уинстанцу, тј. радну копију у меморији. Класа је везана за теоријски део објектноо ријентираног програмирања, док је инстанца практична примена. Једно без другог не могу, пошто се инстанца понаша по описима у класи, док је класа не употребљива без своје инстанце. Једна класа може имати више инстанци у меморији, док једна инстанца може припадати само једној класи. Не може нпр. инстанца класе Запослени уједно бити и инстанце класе Недјељна плата.Класе могу бити дио хијерархијске структуре за које су дефинисане подређене и надређе некласе. На пример, класа Аутомобил има надређену класу Возила и подређену класу Камиони.При креирању објекта треба водити рачуна о две битне ствари:

(1) при дефинисању неке класе треба тежити да она садржи само основну функционалност неког објекта,
(2) да се при дефинисању класе представи комплетно понашање класе, те да се искључе накнадна изненађења.

Учауривање (encapsulation)

Учауривање  представља  следећу  битну  карактеристику  објектно-оријентисаног програмирања. Идеја учауривања је да се све потребне процедуре и подаци који су потребни за те процедуре сместе у један објекат. На тај начин подаци се директно прослеђују процедурама, које их обрађују. Када су подаци и процедуре раздвојени, тада увек постоји могућност да нека процедура покуша да обради неодговарајуће податке.Модуларност се постиже дељењем програма на више логичких целина, у оквиру којих се онда налазе дефиниране класе. Основна предност модуларних програма је у томе што дозвољавају дељење програма на мање целине.чиме је олакшано разумевање програма.

Хијерархија

Хијерархија се дефинише као редослед апстракција. Као што смо истакли, захвљујући принципу наслеђивања, једном дефинисана класа, може да продукује подређену класу (или више њих). Тако дефинирано стабло класа представља хијерархију.

Шта се мења преласком на ООП?

Ево неколико напомена о томе шта се мења у размишљању и писању програма на 00начин:
1. ООП уводи другачији начин размишљања у програмирање!
2. У ООП-у, много више времена се троши на пројектовајне, а мање на саму имплементацију (програмирање, кодовање).
3. У ООП-у се размишља о проблему који се решава, а не директно о програмском решењу.
4. У ООП-у се размишља о деловима система (објектима) који нешто раде, а не о алгоритмима, тј. о томе како се нешто ради.
5. У ООП-у, пажња се пребацује са реализације делова програма на међусобне везе између тих делова. Тежња је да се број и интензитет тих веза што више смањи ида  се оне  строго  контролишу.  Циљ  ООП-а  је  да  смањи  интеракцију  између софтверских делова.

Advertisements

Оставите одговор

Попуните детаље испод или притисните на иконицу да бисте се пријавили:

WordPress.com лого

Коментаришет користећи свој WordPress.com налог. Одјавите се / Промени )

Слика на Твитеру

Коментаришет користећи свој Twitter налог. Одјавите се / Промени )

Фејсбукова фотографија

Коментаришет користећи свој Facebook налог. Одјавите се / Промени )

Google+ photo

Коментаришет користећи свој Google+ налог. Одјавите се / Промени )

Повезивање са %s