Апстракција (објектно-оријентисано програмирање) — разлика између измена

Садржај обрисан Садржај додат
мНема описа измене
.
Ред 1:
У [[програмирање|програмирању]], '''апстракција''' се огледа у одабиру параметара приликом моделовања предмета или појмова који су битни за даљу обраду.<ref name="КраусЦ++">{{cite book|last1=Краус|first1=Ласло|title=Програмски језик С++ са решеним задацима|date=2016|publisher=Академска мисао|location=Београд|isbn=978-86-7466-582-4}}</ref> Конкретније, у [[Објектно-оријентисано програмирање|објектно-оријентисаном програмирању]] се односи на могућност да се дата [[Класа (програмирање)|класа]] прогласи за [[Апстрактна класа|апстрактну класу]].<ref name="Javajee">{{cite web|title=SUMMARYSummary OFOf OBJECTObject-ORIENTEDOriented PROGRAMMINGProgramming (OOP) CONCEPTSConcepts INIn Java JAVA|url=http://javajee.com/summary-of-object-oriented-programming-oop-concepts-in-java|website=Javajee|accessdate=28. 1. 2018}}</ref>
 
== Објашњење ==
Под апстракцијом се подразмева занемаривање небитних детаља објеката у зависности од потреба.<ref name="КраусЦ++"/> Приликом описивања неког система, апстракција блежи само оне његове особине које могу имати значај за даљи рад, тако да програмер фокусира на мање концепата у току рада.<ref name="Javajee"/><ref name="Erickson">{{cite book|last1=Erickson|first1=Carl|title=OBJECTObject ORIENTEDOriented Programming PROGRAMMING|page=17|date=2009|publisher=Atomic Object, LLC|url=https://atomicobject.com/uploads/archive/files/ObjectOrientedProgramming.pdf|accessdate=28. 1. 2018}}</ref> Ипак, приликом апстракаховања, апстракција мора бити добро дефинисана тако да остале апстракције могу бити изведене из ње.<ref name="Erickson"/> У објектно-оријентисаном програмирању, апстракције су најчешће репрезентоване управо класама.<ref name="Erickson"/>
 
На пример, за програм који бележи људе учлањене у библиотеке, од свих особина сваког члана, потребни су само лични подаци попут имена, адресе и броја личне карте, док остале особине нису од интереса за рад програма.<ref name="КраусЦ++"/> На основу тога се може формирати и задата класа ''Члан'' која би имала те податке, са неки својим методама попут ''УпишиЧлана'' и слично, у зависности од потреба програма:
Ред 30:
Као што је речено, апстракција се исказује кроз класе које користе готово сви објектно-оријентисани језици. Што се тиче језика попут [[C++]] и [[Јава (програмски језик)|Java]], апстракција се огледа и кроз омогућавања стварања апстрактних класа.<ref name="КраусЦ++"/><ref name="Javajee"/> Апстрактне класе су такве да се не могу инстанцирати, односно не могу се стварати објектни који су типа тих класа.<ref name="КраусЦ++"/> Користе се да би се из њих даље могле [[Наслеђивање (објектно-оријентисано програмирање)|извести]] конкретне класе које се могу инстанцирати.<ref name="КраусЦ++"/>
 
Пример за апстрактне класе би била класа геометријских тела. За апстрактан појам ''геометријска фигура'', нема смисла питати колика јој је површина. Ипак, како постоје разне геометријске фигуре попут правоугаоника и кругова, а њима се може израчунати површина, тада би у конкретној класи геометријских фигура таква метода била проглашена за апстрактном методом (''abstract method'') или чистом виртуелном методом (''pure virtual method''). Ово је омогућено у програмским језицима попут [[C++]], па се у свакој изведеној класи та метода наслеђује и може се изменити и поново дефинисати. У програмском језику [[C++]] се ово постиже тако што се у класи да само декларација методе, без дефиниције и на њу дода '= 0', а сама метода је виртуелна са модификатором 'virtual' на почетку декларације.<ref name="КраусЦ++"/><ref name="Erickson"/> Када класа поседује бар једну апстрактну методу, тада је она апстрактна класа.<ref name="КраусЦ++"/><ref name="CPPRef">{{cite web |title=abstractAbstract class|url=http://en.cppreference.com/w/cpp/language/abstract_class|website=cppreference|accessdate=28. 1. 2018}}</ref>
 
Пример за апстрактну класу у програмском језику [[C++]] би био:
Ред 40:
};
</syntaxhighlight>
 
== Види још ==
* [[Објектно-оријентисано програмирање]]
* [[Полиморфизам (рачунарство)]]
 
== Референце ==
Линија 45 ⟶ 49:
 
== Литература ==
{{refbegin}}
* {{cite book|last1=Краус|first1=Ласло|title=Програмски језик С++ са решеним задацима|date=2016|publisher=Академска мисао|location=Београд|isbn=978-86-7466-582-4}}
* {{cite book|last1=Erickson|first1=Carl|title=OBJECTObject ORIENTEDOriented Programming PROGRAMMING|page=17|date=2009|publisher=Atomic Object, LLC|url=https://atomicobject.com/uploads/archive/files/ObjectOrientedProgramming.pdf|accessdate=28. 1. 2018}}
* {{cite book|author1=Harold Abelson|author2=Gerald Jay Sussman|author3=Julie Sussman|title=Structure and Interpretation of Computer Programs|url=http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-10.html|accessdate=22 June 2012|edition=2|date=25 July 1996|publisher=MIT Press|isbn=978-0-262-01153-2}}
* {{cite web|last=Spolsky|first=Joel|title=The Law of Leaky Abstractions|url=http://www.joelonsoftware.com/articles/LeakyAbstractions.html|work=Joel on Software|date=11 November 2002}}
* [http://www.cs.cornell.edu/courses/cs211/2006sp/Lectures/L08-abstraction/08_abstraction.html Abstraction/information hiding] - CS211 course, Cornell University.
* {{cite book|author=Eric S. Roberts|title=Programming Abstractions in C A Second Course in Computer Science|date=1997}}
* {{cite web|last=Palermo|first=Jeffrey|title=The Onion Architecture|url=http://jeffreypalermo.com/blog/the-onion-architecture-part-1/|work=Jeffrey Palermo|date=29 July 2008}}
{{refend}}
 
== Спољашње везе ==
* -{[http://en.cppreference.com/w/cpp/language/abstract_class cppreference - Abstract class ]}-
* [http://javajee.com/summary-of-object-oriented-programming-oop-concepts-in-java SUMMARY OF OBJECT-ORIENTED PROGRAMMING (OOP) CONCEPTS IN JAVA]
* -{[https://sites.google.com/site/simulationarchitecture/ SimArch] example of layered architecture for distributed simulation systems.}-
* [http://en.cppreference.com/w/cpp/language/abstract_class cppreference - Abstract class ]
 
{{Authority control}}
== Види још ==
* [[Објектно-оријентисано програмирање]]
* [[Полиморфизам (рачунарство)]]
 
[[Категорија:Објектно-оријентисано програмирање]]
[[Категорија:Управљање подацима]]
[[Категорија:Програмске парадигме]]
[[Категорија:Апстракција]]