Објектно оријентисано програмирање
Објектно оријентисано програмирање је парадигма програмирања, која користи објекте као основу за пројектовање рачунарских програма и различитих апликација софтвера. Заснива се на различитим техникама, као што су наслеђивање, апстракција, полиморфизам и енкапсулација.[1][2]
Решавање проблема парадигмом објектно оријентисаног програмирања, је врло слично људском начину размишљања и решавању проблема. Састоји се од идентификовања објеката и постављање објеката који ће се користити у одговарајућу секвенцу за решење одређеног проблема. Ради се о дизајну објеката чија ће понашања као јединица и у њиховој међусобној интеракцији, решити одређени проблем. Интеракција између објеката се састоји у размени порука, где одређена порука усмерена према одређеном објекту, покреће енкапсулиране операције у том објекту, чиме се решава део обично ширег и сложенијег проблема. Уопштено гледано, објектно оријентисано решавање проблема се састоји из четири корака:
- идентификовање проблема
- идентификовање објеката који су потребни за његово решење
- идентификовање порука које ће објекти међусобно слати и примати
- креирање секвенце порука објектима, које ће решавати проблем или проблеме.
У парадигми објектно оријентисаног програмирања, објекти су структуре података које представљају одређено и јасно дефинисано знање о спољашњем свету или стварности. Типична организација је у хијерархијске класе, где свака класа објекта поседује информације о особинама објекта које се чувају у инстанцама променљивих и које су повезане (концептом асоцијације) са сваком инстанцом у одређеној класи. Сваки објекат препознаје други објекат преко његовог интерфејса. Подаци и логика сваког објекта су скривени од других објеката. Тиме се омогућава раздвајање имплементације од понашања објекта у интеракцији са другим објектима.
Основне особине објеката су идентитет, стање и понашање. Идентитет представља назив објекта којим се одређени објекат разликује од осталих. Стање објекта је део прошлости и садашњости које одређују понашање објекта у будућности. Понашање објекта је одређено операцијама које се над објектом могу извршити, а активирање операције се врши поруком.
Свака класа се састоји од:
- података - чланова
- објекат - члан
- функција чланица - метода
Податак, члан и објекат члан су атрибути класе, и помоћу њих је описано стање објеката. Објекат је модел ентитета а атрибути су есенцијалне особине ентитета које га описују. Методе дефинишу понашање објеката.
Својства
[уреди | уреди извор]Објектно оријентисано програмирање користи објекте, али нису све придружене технике и структуре директно подржане на језицима који тврде да подржавају ООП. Испод наведене карактеристике уобичајене су међу језицима за које се сматра да су снажно оријентисани према класама и објектима (или мултипарадигми са подршком за ООП), са поменутим знатним изузецима.[3][4][5][6]
Заједничка својства са претходничким не-ООП језицима
[уреди | уреди извор]- Променљиве које могу да складиште информације су форматиране у малом броју уграђених типова података попут целих бројева и алфанумеричких знакова. Ово може обухватати структуре података попут ниски, листи и хеш табела, које су било уграђене или су резултат комбиновања променљивих помоћу меморијских показивача.
- Процедуре – такође познате као функције, методе, рутине, или подрутине – које узимају улаз, генеришу излаз и манипулишу податке. Савремени језици укључују структуриране програмске конструкције попут петљи и услова.
Модуларно програмска подршка пружа способност груписања процедура у фајлове и модуле за организационе сврхе. Модули су именски простори који су дефинисани тако да идентификатори у једном модулу нису у сукобу са процедуром или променљивом истог имена у другој датотеци или модулу.
Објекти и класе
[уреди | уреди извор]Језици који подржавају објектно оријентисано програмирање (ООП) типично користе наслеђивање за поновну употребу и проширење кода у облику класа или прототипа. Они који користе класе подржавају два главна концепта:
- Класе – дефиниције формата података и доступних процедура за дату врсту или класу објекта; могу такође да садрже податке и процедуре (познате као методе класе), тј. класе садрже чланове који су подаци и чланове који су функције
- Објекти – инстанце класа
Објекти понекад кореспондирају стварима које постоје у стварном свету. На пример, графички програм може да има објекте као што су „круг”, „квадрат”, „мени”. Систем за онлајн куповину може да садржи објекте као што су „корпа за куповину”, „купац” и „производ”.[7] Понекад објекти представљају апстрактније ентитете, попут објекта који представља отворену датотеку или објекта који пружа услугу конверзије мерења из САД јединца у метричке.
Објектно оријентисано програмирање је више од само класа и објеката; то је читава парадигма програмирања заснована на објектима (структурама података) који садрже поља података и метода. Битно је да се то разуме; коришћење класа за организовање скупа неповезаних метода није објектна оријентација.
Junade Ali, Mastering PHP Design Patterns[8]
Принципи објектно оријентисаног програмирања
[уреди | уреди извор]- Све је објекат
- Програм је скуп објеката који задају послове један другом преко слања порука
- Сваки објекат поседује сопствену меморију
- Сваки објекат припада сопственој класи
- Сви објекти исте класе могу примати исте поруке
Темељи објектно оријентисаног програмирања
[уреди | уреди извор]- Апстракција и скривање информација
- Енкапсулација
- Модуларност
- Полиморфизам
- Везе између класа и насљеђивање
Апстракција је поступак раздвајања битног од небитног. У току овог поступка неопходно је уочити који подаци и везе су битне за дати домен проблема, и оне битне податке имплементирати у класи. Постоје три групе апстракције: апстракција предмета, апстракција процеса и синтетска апстракција (апстракција виртуелне машине).
Скривање података се дефинише на сљедећи начин: све информације о модулу морају бити скривене осим оних које су експлицитно декларисане као јавне. Непосредна реализација чланова класе мора бити недоступна клијенту.
Енкапсулација је поступак обједињавања стања и понашања у једну целину. Крајњи резултат енкапсулације је класа. Други задатак енкапсулације је обезбеђивање контроле приступа у циљу поштовања принципа скривања информација.
Модуларност се односи на поступак разбијања програма на мање дијелове који могу аутономно функционисати. Модуларност се примјењује како би се омогућила вишеструка употреба софтверских компоненти.
Полиморфизам је контекстно зависно понашање. Програмске категорије које се могу полиморфно понашати су: промјенљиве односно инстанце класе, оператори и методе. Полиморфизам се дијели на универзални и ад хок. Универзални полиморфизам се дијели на параметарски и инклузиони. Ад хок полиморфизам се дели на преклапање и коерцитивни полиморфизам.
Насљеђивање представља могућност хијерархијске организације класа. Када једна класа наследи другу она задржава комплетан садржај класе коју насљеђује, и тај садржај може редефинисати или проширити. Постоји неколико врста насљеђивања.
Објектно оријентисани језици
[уреди | уреди извор]Преведени:
Преведени у бајт код за извршавање на виртуелној машини:
Интерпретирани:
Референце
[уреди | уреди извор]- ^ Kindler, E.; Krivy, I. (2011). „Object-Oriented Simulation of systems with sophisticated control”. International Journal of General Systems: 313—343.
- ^ 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"
- ^ 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.
- ^ John C. Mitchell, Concepts in programming languages, Cambridge University Press. 2003. ISBN 0-521-78098-5. стр. 278.. Lists: Dynamic dispatch, abstraction, subtype polymorphism, and inheritance.
- ^ Michael Lee Scott, Programming language pragmatics, Edition 2, Morgan Kaufmann. 2006. ISBN 0-12-633951-1. стр. 470.. Lists encapsulation, inheritance, and dynamic dispatch.
- ^ 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")
- ^ 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.”
- ^ 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.
Литература
[уреди | уреди извор]- Abadi, Martin; Cardelli, Luca (1998). A Theory of Objects. Springer Verlag. ISBN 978-0-387-94775-4.
- Abelson, Harold; Gerald Jay Sussman (1997). Structure and Interpretation of Computer Programs. MIT Press. ISBN 978-0-262-01153-2. Архивирано из оригинала 26. 12. 2017. г. Приступљено 01. 01. 2017.
- Armstrong, Deborah J. (2006). „The Quarks of Object-Oriented Development”. Communications of the ACM. 49 (2): 123—128. ISSN 0001-0782. doi:10.1145/1113034.1113040. Приступљено 8. 8. 2006.
- Booch, Grady (1997). Object-Oriented Analysis and Design with Applications. Addison-Wesley. ISBN 978-0-8053-5340-2.
- Eeles, Peter; Sims, Oliver (1998). Building Business Objects. John Wiley & Sons. ISBN 978-0-471-19176-6.
- Gamma, Erich; Richard Helm; Ralph Johnson; John Vlissides (1995). Design Patterns: Elements of Reusable Object Oriented Software. Addison-Wesley. ISBN 978-0-201-63361-0.
- Harmon, Paul; William Morrissey (1996). The Object Technology Casebook – Lessons from Award-Winning Business Applications. John Wiley & Sons. ISBN 978-0-471-14717-6.
- Jacobson, Ivar (1992). Object-Oriented Software Engineering: A Use Case-Driven Approach. Addison-Wesley. ISBN 978-0-201-54435-0.
- Kay, Alan. The Early History of Smalltalk. Архивирано из оригинала 4. 4. 2005. г. Приступљено 1. 1. 2017.
- Meyer, Bertrand (1997). Object-Oriented Software Construction. Prentice Hall. ISBN 978-0-13-629155-8.
- Pecinovsky, Rudolf (2013). OOP – Learn Object Oriented Thinking & Programming. Bruckner Publishing. ISBN 978-80-904661-8-0.
- Rumbaugh, James; Blaha, Michael; Premerlani, William; Eddy, Frederick; William Lorensen (1991). Object-Oriented Modeling and Design. Prentice Hall. ISBN 978-0-13-629841-0.
- Schach, Stephen (2006). Object-Oriented and Classical Software Engineering, Seventh Edition. McGraw-Hill. ISBN 978-0-07-319126-3.
- Schreiner, Axel-Tobias (1993). Object oriented programming with ANSI-C. Hanser. ISBN 978-3-446-17426-9. hdl:1850/8544. templatestyles stripmarker у
|id=
на позицији 1 (помоћ) - Taylor, David A. (1992). Object-Oriented Information Systems – Planning and Implementation. John Wiley & Sons. ISBN 978-0-471-54364-0.
- Weisfeld, Matt (2009). The Object-Oriented Thought Process, Third Edition. Addison-Wesley. ISBN 978-0-672-33016-2.
- West, David (2004). Object Thinking (Developer Reference). Microsoft Press. ISBN 978-0-7356-1965-4.
Спољашње везе
[уреди | уреди извор]- Object-oriented programming на сајту Curlie (језик: енглески)
- Real life and real world example of object oriented programming
- Introduction to Object Oriented Programming Concepts (OOP) and More by L.W.C. Nirosh
- Discussion about the flaws of OOD
- OOP Concepts (Java Tutorials)
- Science or Snake Oil: Empirical Software engineering Thoughts on software and systems engineering, by Ian Sommerville (2011-8-29)