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

У програмирању, апстракција се огледа у одабиру параметара приликом моделовања предмета или појмова који су битни за даљу обраду.[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; //Апстрактна метода};

Референце

Литература

Спољашње везе