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

С Википедије, слободне енциклопедије
Пређи на навигацију Пређи на претрагу

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

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

  1. идентификовање проблема
  2. идентификовање објеката који су потребни за његово решење
  3. идентификовање порука које ће објекти међусобно слати и примати
  4. креирање секвенце порука објектима, које ће решавати проблем или проблеме.

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

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

Свака класа се састоји од:

  • података - чланова
  • објекат - члан
  • функција чланица - метода

Податак, члан и објекат члан су атрибути класе, и помоћу њих је описано стање објеката. Објекат је модел ентитета а атрибути су есенцијалне особине ентитета које га описују. Методе дефинишу понашање објеката.

Својства[уреди | уреди извор]

Објектно-оријентисано програмирање користи објекте, али нису све придружене технике и структуре директно подржане на језицима који тврде да подржавају ООП. Испод наведене карактеристике уобичајене су међу језицима за које се сматра да су снажно оријентисани према класама и објектима (или мултипарадигми са подршком за ООП), са поменутим знатним изузецима.[3][4][5][6]

Заједничка својства са претходничким не-ООП језицима[уреди | уреди извор]

Модуларно програмска подршка пружа способност груписања процедура у фајлове и модуле за организационе сврхе. Модули су именски простори који су дефинисани тако да идентификатори у једном модулу нису у сукобу са процедуром или променљивом истог имена у другој датотеци или модулу.

Објекти и класе[уреди | уреди извор]

Језици који подржавају објектно-оријентисано програмирање (ООП) типично користе наслеђивање за поновну употребу и проширење кода у облику класа или прототипа. Они који користе класе подржавају два главна концепта:

  • Класе – дефиниције формата података и доступних процедура за дату врсту или класу објекта; могу такође да садрже податке и процедуре (познате као методе класе), тј. класе садрже чланове који су подаци и чланове који су функције
  • Објекти – инстанце класа

Објекти понекад кореспондирају стварима које постоје у стварном свету. На пример, графички програм може да има објекте као што су „круг”, „квадрат”, „мени”. Систем за онлајн куповину може да садржи објекте као што су „корпа за куповину”, „купац” и „производ”.[7] Понекад објекти представљају апстрактније ентитете, попут објекта који представља отворену датотеку или објекта који пружа услугу конверзије мерења из САД јединца у метричке.

Објектно-оријентисано програмирање је више од само класа и објеката; то је читава парадигма програмирања заснована на објектима (структурама података) који садрже поља података и метода. Битно је да се то разуме; коришћење класа за организовање скупа неповезаних метода није објектна оријентација.

Junade Ali, Mastering PHP Design Patterns[8]

Принципи објектно оријентисаног програмирања[уреди | уреди извор]

  1. Све је објекат
  2. Програм је скуп објеката који задају послове један другом преко слања порука
  3. Сваки објекат поседује сопствену меморију
  4. Сваки објекат припада сопственој класи
  5. Сви објекти исте класе могу примати исте поруке

Темељи објектно оријентисаног програмирања[уреди | уреди извор]

  1. Апстракција и скривање информација
  2. Енкапсулација
  3. Модуларност
  4. Полиморфизам
  5. Везе између класа и насљеђивање

Апстракција је поступак раздвајања битног од небитног. У току овог поступка неопходно је уочити који подаци и везе су битне за дати домен проблема, и оне битне податке имплементирати у класи. Постоје три групе апстракције: апстракција предмета, апстракција процеса и синтетска апстракција (апстракција виртуелне машине).

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

Енкапсулација је поступак обједињавања стања и понашања у једну целину. Крајњи резултат енкапсулације је класа. Други задатак енкапсулације је обезбеђивање контроле приступа у циљу поштовања принципа скривања информација.

Модуларност се односи на поступак разбијања програма на мање дијелове који могу аутономно функционисати. Модуларност се примјењује како би се омогућила вишеструка употреба софтверских компоненти.

Полиморфизам је контекстно зависно понашање. Програмске категорије које се могу полиморфно понашати су: промјенљиве односно инстанце класе, оператори и методе. Полиморфизам се дијели на универзални и ад хок. Универзални полиморфизам се дијели на параметарски и инклузиони. Ад хок полиморфизам се дели на преклапање и коерцитивни полиморфизам.

Насљеђивање представља могућност хијерархијске организације класа. Када једна класа наследи другу она задржава комплетан садржај класе коју насљеђује, и тај садржај може редефинисати или проширити. Постоји неколико врста насљеђивања.

Објектно оријентисани језици[уреди | уреди извор]

Преведени:

Преведени у бајт код за извршавање на виртуелној машини:

Интерпретирани:

Референце[уреди | уреди извор]

  1. ^ Kindler, E.; Krivy, I. (2011). „Object-Oriented Simulation of systems with sophisticated control”. International Journal of General Systems: 313—343. 
  2. ^ Lewis, John; Loftus, William (2008). Java Software Solutions Foundations of Programming Design 6th ed. Pearson Education Inc. ISBN 978-0-321-53205-3. , section 1.6 "Object-Oriented Programming"
  3. ^ Deborah J. Armstrong. The Quarks of Object-Oriented Development. A survey of nearly 40 years of computing literature which identified a number of fundamental concepts found in the large majority of definitions of OOP, in descending order of popularity: Inheritance, Object, Class, Encapsulation, Method, Message Passing, Polymorphism, and Abstraction.
  4. ^ John C. Mitchell, Concepts in programming languages, Cambridge University Press, 2003, ISBN 0-521-78098-5, p.278. Lists: Dynamic dispatch, abstraction, subtype polymorphism, and inheritance.
  5. ^ Michael Lee Scott, Programming language pragmatics, Edition 2, Morgan Kaufmann, 2006, ISBN 0-12-633951-1, p. 470. Lists encapsulation, inheritance, and dynamic dispatch.
  6. ^ Pierce, Benjamin (2002). Types and Programming Languages. MIT Press. ISBN 978-0-262-16209-8. , section 18.1 "What is Object-Oriented Programming?" Lists: Dynamic dispatch, encapsulation or multi-methods (multiple dispatch), subtype polymorphism, inheritance or delegation, open recursion ("this"/"self")
  7. ^ Booch, Grady (1986). Software Engineering with Ada. Addison Wesley. стр. 220. ISBN 978-0805306088. »Perhaps the greatest strength of an object-oriented approach to development is that it offers a mechanism that captures a model of the real world.« 
  8. ^ Ali, Junade (28. 9. 2016). Mastering PHP Design Patterns | PACKT Books (на језику: енглески) (1 изд.). Birmingham, England, UK: Packt Publishing Limited. стр. 11. ISBN 978-1-78588-713-0. Приступљено 11. 12. 2017. 

Литература[уреди | уреди извор]

Спољашње везе[уреди | уреди извор]