Apstrakcija (objektno-orijentisano programiranje)
U programiranju, apstrakcija se ogleda u odabiru parametara prilikom modelovanja predmeta ili pojmova koji su bitni za dalju obradu.[1] Konkretnije, u objektno-orijentisanom programiranju se odnosi na mogućnost da se data klasa proglasi za apstraktnu klasu.[2]
Objašnjenje[uredi | uredi izvor]
Pod apstrakcijom se podrazmeva zanemarivanje nebitnih detalja objekata u zavisnosti od potreba.[1] Prilikom opisivanja nekog sistema, apstrakcija beleži samo one njegove osobine koje mogu imati značaj za dalji rad, tako da se programer fokusira na manje koncepata u toku rada.[2][3] Prilikom apstrahovanja, apstrakcija mora biti dobro definisana tako da ostale apstrakcije mogu biti izvedene iz nje.[3] U objektno-orijentisanom programiranju, apstrakcije su najčešće reprezentovane upravo klasama.[3]
Na primer, za program koji beleži učlanjenje ljudi u biblioteke, od svih osobina svakog člana, potrebni su samo lični podaci poput imena, adrese i broja lične karte, dok ostale osobine nisu od interesa za rad programa.[1] Na osnovu toga se može formirati i zadata klasa Član koja bi imala te podatke, sa neki svojim metodama poput UpišiČlana i slično, u zavisnosti od potreba programa:
class Clan { //Класа члана библиотеке
public:
Clan(strin i, string a, int b) : ime(i), adresa(a), BRLK(b) { upisan = false; } //Конструктор
void upisiClana() { upisan = true; }
void ispisiClana() { upisan = false; }
friend ostream& operator<<(ostream& os, const Clan& c) {
os << c.ime << ' ' << c.adresa << ' ' << c.BRLK;
if (c.upisan)
os << " upisan";
else
os << " nije upisan";
return os;
}
private:
string ime, adresa;
int BRLK;
bool upisan;
};
Iznad je klasa napisana na programskom jeziku C++. Dakle, bila nam je potrebna klasa preko koje bi utvrdili koji član je upisan i koji su njegovi podaci. Zbog toga su nam od interesa bili samo ti određeni atributi, što predstavlja apstrakciju u ovom slučaju.
Apstrakcija u objektno-orijentisanim jezicima[uredi | uredi izvor]
Kao što je rečeno, apstrakcija se iskazuje kroz klase koje koriste gotovo svi objektno-orijentisani jezici. Što se tiče jezika poput C++ i Java, apstrakcija se ogleda i kroz mogućnost stvaranja apstraktnih klasa.[1][2] Apstraktne klase su takve da se ne mogu instancirati, odnosno ne mogu se stvarati objektni koji su tipa tih klasa.[1] Koriste se da bi se iz njih dalje mogle izvesti konkretne klase koje se mogu instancirati.[1]
Primer za apstraktne klase bi bila klasa geometrijskih tela. Za apstraktan pojam geometrijska figura, nema smisla pitati kolika joj je površina. Ipak, kako postoje razne geometrijske figure poput pravougaonika i krugova, a njima se može izračunati površina, tada bi u konkretnoj klasi geometrijskih figura takva metoda bila proglašena za apstraktnom metodom (abstract method) ili čistom virtuelnom metodom (pure virtual method). Ovo je omogućeno u programskim jezicima poput C++, pa se u svakoj izvedenoj klasi ta metoda nasleđuje i može se izmeniti i ponovo definisati. U programskom jeziku C++ ovo se postiže tako što se u klasi da samo deklaracija metode, bez definicije i na nju doda '= 0', a sama metoda je virtuelna sa modifikatorom 'virtual' na početku deklaracije.[1][3] Kada klasa poseduje bar jednu apstraktnu metodu, tada je ona apstraktna klasa.[1][4]
Primer za apstraktnu klasu u programskom jeziku C++ bi bio:
class Osn { //Апстрактна класа
public:
virtual void g(); //Обична виртуелна метода
virtual void f() = 0; //Апстрактна метода
};
Reference[uredi | uredi izvor]
- ^ a b v g d đ e ž Kraus, Laslo (2016). Programski jezik S++ sa rešenim zadacima. Beograd: Akademska misao. ISBN 978-86-7466-582-4.
- ^ a b v „Summary Of Object-Oriented Programming (OOP) Concepts In Java”. Javajee. Pristupljeno 28. 1. 2018.
- ^ a b v g Erickson, Carl (2009). Object Oriented Programming (PDF). Atomic Object, LLC. str. 17. Pristupljeno 28. 1. 2018.
- ^ „Abstract class”. cppreference. Pristupljeno 28. 1. 2018.
Literatura[uredi | uredi izvor]
- Erickson, Carl (2009). Object Oriented Programming (PDF). Atomic Object, LLC. str. 17. Pristupljeno 28. 1. 2018.
- Kraus, Laslo (2016). Programski jezik S++ sa rešenim zadacima. Beograd: Akademska misao. ISBN 978-86-7466-582-4.
- Erickson, Carl (2009). Object Oriented Programming (PDF). Atomic Object, LLC. str. 17. Pristupljeno 28. 1. 2018.
- Abelson, Harold; Gerald Jay Sussman; Sussman, Julie (25. 07. 1996). Structure and Interpretation of Computer Programs (2 izd.). MIT Press. ISBN 978-0-262-01153-2. Arhivirano iz originala 26. 02. 2009. g. Pristupljeno 22. 06. 2012.
- Spolsky, Joel (11. 11. 2002). „The Law of Leaky Abstractions”. Joel on Software.
- Abstraction/information hiding - CS211 course, Cornell University.
- Roberts, Eric S. (1997). Programming Abstractions in C A Second Course in Computer Science.
- Palermo, Jeffrey (29. 07. 2008). „The Onion Architecture”. Jeffrey Palermo.
Spoljašnje veze[uredi | uredi izvor]
- cppreference - Abstract class
- SimArch example of layered architecture for distributed simulation systems.