Парадигма на език за програмиране. Що е то?

От Уикикниги

Процедурно програмиране[редактиране]

Процедурното програмиране е парадигма, при която кодът се разделя на няколко модула/пакета. Една програма написна на език с процедурна парадигма се състои от един или повече модула, като някои от модулите биха могли да бъдат библиотеки, създадени предварително от други програмисти. Всеки модул е съставен от една или повече подпрограми. Една подпрограма може да е съставена от функции, процедури или методи - в зависимост от възприетата терминология за съответния език за програмиране.

Възможно е съществуването на няколко полета на видимост - тоест една подпрограма може да включва в себе си други подпрограми, които от своя страна също биха могли да включват други подпрограми. Елементите на едно поле на видимост са недостъпни за външните нему полета на видимост.

Процедурното програмиране има следни предимства:

  • по-добра разбираемост и по-лесна подръжка
  • повече гъвкавост
  • поощрява добрият програмен дизайн

Обобщено програмиране[редактиране]

Това е подход, който позволява една стойност да бъде от различни типове, стига тя да отговаря на определини условия. Това свойство е известно още и като полиморфизъм. Обобщеното програмиране добива популярност най-вече заради употребата на шаблони(templates). Шаблоните позволяват писането на код, който не зависи от типа на променливите, които се използват. Стандартната Шаблонна Библиотека (STL) е базирана върху употребата на шаблони.

Обектно-базирано програмиране[редактиране]

На обектно-базираното програмиране може да се гледа като: прототипно-базирано програмиране или като ограничена версия на обектно-ориентираното програмиране със следните ограничения:

  • няма непосредствено наследяване
  • няма полиморфизъм
  • много малка част от наличните променливи са обекти (обикно GUI компонентите са били такива)

Обектно-базираното програмиране е крачката, която в последствие е довела до въвеждането на концепцията за класове.

Обектно-ориентирано програмиране[редактиране]

Обектно-ориентираното програмиране (ООП) е подобрение на обектно-базираното програмиране, което позволява по-добра повторна употреба на съществуващия код и по-разбираемо представяне на сложни и големи софтуерни системи чрез по-добра абстракция (скриване на имплементацията).

Съществуват различни определения за ООП. В най-общи линии това е техника на програмиране, при която софтуерът е съставен от обекти, които отразяват "същноста" на нещата, а не толкова тяхната обвързаност компютърният код.

Обекти[редактиране]

Обектите са логически единици, които съдържат както код, така и данни. Човек е склонен да възприема заобикалящият го свят под формата на обекти. Нека да разгледамие един такъв обект - автомобил. За да представим идеята за автомобил чрез програмен код ние ще използваме съвкупност от данни, наречена клас.

Класът съдържа обекти и методи. Пример за обекти са двигател, гориво и т.н.. Методите са действията, дифинирани от съответния клас - например запалване, спиране, завиване и т.н.. С други думи обекти + методи = клас.

Обектът е инстанция на класа, който я е създал, и притежава неговите характеристики (данни и методи). Всички обекти се създават като "отражения" на даден клас. Обектът отразява йерархията и "родствените" връзки на съответния клас.

Полиморфизъм[редактиране]

Полиморфизмът позволява едно и също име да се използва многократно за различни цели - тоест едно име се използва за да представи общия случай, като конкретните действия зависят от типа на данните.

Капсулиране[редактиране]

Капуслирането позволява "обединяването" на данни и изпълним код (методи). Този ефект се постига чрез използването на класове:

class addition
{
    int a,b;
public:
    void read()
    {
        cout << "\n Enter two numbers";
        cin >> a >> b;
    }
    void print()
    {
        cout << "\n first number:" << a;
        cout << "\n Second number:" << b;
    }
    int cal()
    {
        return a + b;
    }
};

В по-горния пример видяхме, че класът аddition обединява данни (int a,b) и методи print(), read(), cal(). За да получим достъп до въпросните методи трябва да използваме обект:

int main()
{
    addition obj;
    obj.read();
    obj.cal();
    obj.print();

    return 0;
}

Наследяване[редактиране]

Наследяването е процес, при който един клас (наричан подклас) "наследява" свойствата на друг клас (наричан родителски клас, суперклас или базов клас). Един подклас може да е родителски клас за други класове. Когато един клас наслядава своя родителски клас, той наследява както неговите свойства (методи и обекти) така и свойствата на неговите родителски класове. По този начин е възможно да се създаде сложна йерархия от класове и подкласове.

Множествено наследяване[редактиране]

Един клас наследява няколко базови класа.

class A {int a;}
class B {int b;}
class C {int c;}

class D: public A, public B, public C {int d;} 

int main()
{
  D obj;
  obj.a = obj.b = obj.c = obj.d = 90;
  cout << obj.a << obj.b << obj.c << obj.d << endl; //90909090

  return 0;
}

В по-горния пример е показан синтаксиса за множествено наследяване.