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

У програмирању, апстракција се огледа у одабиру параметара приликом моделовања предмета или појмова који су битни за даљу обраду.[1] Конкретније, у објектно-оријентисаном програмирању се односи на могућност да се дата класа прогласи за апстрактну класу.[2]

Објашњење уреди

Под апстракцијом се подразмева занемаривање небитних детаља објеката у зависности од потреба.[1] Приликом описивања неког система, апстракција бeлежи само оне његове особине које могу имати значај за даљи рад, тако да се програмер фокусира на мање концепата у току рада.[2][3] Приликом апстраховања, апстракција мора бити добро дефинисана тако да остале апстракције могу бити изведене из ње.[3] У објектно-оријентисаном програмирању, апстракције су најчешће репрезентоване управо класама.[3]

На пример, за програм који бележи учлањење људи у библиотеке, од свих особина сваког члана, потребни су само лични подаци попут имена, адресе и броја личне карте, док остале особине нису од интереса за рад програма.[1] На основу тога се може формирати и задата класа Члан која би имала те податке, са неки својим методама попут УпишиЧлана и слично, у зависности од потреба програма:

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;
};

Изнад је класа написана на програмском језику C++. Дакле, била нам је потребна класа преко које би утврдили који члан је уписан и који су његови подаци. Због тога су нам од интереса били само ти одређени атрибути, што представља апстракцију у овом случају.

Апстракција у објектно-оријентисаним језицима уреди

Као што је речено, апстракција се исказује кроз класе које користе готово сви објектно-оријентисани језици. Што се тиче језика попут C++ и Java, апстракција се огледа и кроз могућност стварања апстрактних класа.[1][2] Апстрактне класе су такве да се не могу инстанцирати, односно не могу се стварати објектни који су типа тих класа.[1] Користе се да би се из њих даље могле извести конкретне класе које се могу инстанцирати.[1]

Пример за апстрактне класе би била класа геометријских тела. За апстрактан појам геометријска фигура, нема смисла питати колика јој је површина. Ипак, како постоје разне геометријске фигуре попут правоугаоника и кругова, а њима се може израчунати површина, тада би у конкретној класи геометријских фигура таква метода била проглашена за апстрактном методом (abstract method) или чистом виртуелном методом (pure virtual method). Ово је омогућено у програмским језицима попут C++, па се у свакој изведеној класи та метода наслеђује и може се изменити и поново дефинисати. У програмском језику C++ ово се постиже тако што се у класи да само декларација методе, без дефиниције и на њу дода '= 0', а сама метода је виртуелна са модификатором 'virtual' на почетку декларације.[1][3] Када класа поседује бар једну апстрактну методу, тада је она апстрактна класа.[1][4]

Пример за апстрактну класу у програмском језику C++ би био:

class Osn { //Апстрактна класа
public:
   virtual void g(); //Обична виртуелна метода
   virtual void f() = 0; //Апстрактна метода
};

Референце уреди

  1. ^ а б в г д ђ е ж Краус, Ласло (2016). Програмски језик С++ са решеним задацима. Београд: Академска мисао. ISBN 978-86-7466-582-4. 
  2. ^ а б в „Summary Of Object-Oriented Programming (OOP) Concepts In Java”. Javajee. Приступљено 28. 1. 2018. 
  3. ^ а б в г Erickson, Carl (2009). Object Oriented Programming (PDF). Atomic Object, LLC. стр. 17. Приступљено 28. 1. 2018. 
  4. ^ „Abstract class”. cppreference. Приступљено 28. 1. 2018. 

Литература уреди

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