Основи об’єктно-орієнтованого програмування 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Основи об’єктно-орієнтованого програмування



Рекомендована література: [15-61]

Процедурне програмування – програмування основане на використанні підпрограм, що дозволяє підвищити ефективність програмування відносно складних програмних систем (с.41).

Модульне програмування – програмування основане на використанні модулів – множини підпрограм з даними, які ці підпрограми обробляють.

Структурне проектування - методологія проектування, основана на алгоритмічній декомпозиції.

Об’єктно-орієнтоване проектування – це методологія проектування, яка поєднує в собі процес об’єктної декомпозиції і прийоми представлення логічної і фізичної, а також статичної і динамічної моделей системи, що проектується.

Об’ктно-орієнтоване програмування (ООП) –програмування основане на використанні об’єктів, які є абстрактними моделями реальних об’єктів. Основні принципи ООП: абстрагування, інкапсуляція, успадкування, поліморфізм. Об’єктно-орієнтований підхід у програмуванні реалізується за допомогою спеціальних типів даних – класів (с.46) і ефективно використовується для розробки складних програмних систем.

Основні переваги ООП:

- можливість створення абстрактних програмних моделей предметів і понять і ієрархій їх систем.

- зменшення трудомісткості програмування складних програм, забезпечення можливості повторного використання окремих програмних компонентів, спрощення модифікації програмних компонентів.

Об’єктно-орієнтовані мови програмування – мови програмування високого рівня, побудовані на принципах ООП: Simula, Smalltalk, Ada, CLOS, C++, Object Pascal, Java, C#, Visual Basic.NET, Python та інші.

Абстрагування полягає в тому, що модель (клас) містить не всі ознаки і властивості предмету (поняття), що представляється нею, а тільки ті, які істотні для програмної системи, що розробляється.

Інкапсуляція – об’єднання даних і алгоритмів їх опрацювання в класі (с.46).

Композиція – включення в поля класу об’єктів інших класів (с.50).

Успадкування(inheritance) – успадкування дочірнім класом доступних (не закритих (private)) полів і методів батьківського класу таким чином, що вони стають членами цього дочірнього класу (с.54).

Закрите успадкування (private inheritance) – усі відкриті і захищені члени базового класу стають закритими членами похідного класу. Використовується по замовчуванню. Приклад:

class B:private A {};

Відкрите успадкування (public inheritance) – не змінює права доступу у похідному класі. Приклад:

class B:public A {};

Захищене успадкування (protected inheritance) - усі відкриті члени базового класу стають захищеними членами похідного класу. Приклад:

class B:protected A {};

Множинне успадкування – безпосереднє успадкування дочірним класом кількох базових (с.58). Приклад:

class C:public A, public B {};

Поліморфізм – можливість функцій з однаковим ім’ям або методів з однаковим ім’ям батьківського і дочірнього класів виконувати різні команди. В основі статичного поліморфізму лежить механізм перевантаження функцій і операторів (с.55). В основі динамічного поліморфізму лежить принцип успадкування та механізм віртуальних функцій, які викликаються через вказівник або посилання (с.56).

Структура (struct) - похідний тип даних, який використовується для опису об’єктів, які можуть складатися з даних різного типу (с.47). Подібним на структуру типом є клас. Приклад структури А:

struct A

{int x;

float y;};

Об’єднання (union) - похідний тип даних, який використовується для опису об’єктів, які в кожен момент часу містять дані різного типу (с.47).

Клас (class) – похідний тип даних, який використовується для опису об’єктів, в яких дані різного типу об’єднані з алгоритмами їх опрацювання (функціями) (с.46). Клас може описувати також набір обмежень на доступ до цих даних і функцій:

class <назва класу>: <специфікатор доступу успадкування> <назва батьківського класу>

{

<специфікатор доступу>:

<тип поля> <назва поля>;

...;

<тип методу> <назва методу(<формальні параметри>)>

{

<реалізація алгоритму методу>;

}

...;

...;

}

Члени класу - поля і методи класу (с.46).

Поля класу – дані, які є членами класу.

Методи класу – функції, які є членами класу, використовуються для операцій над об’єктами. Метод класу може бути визначений в класі, або зовні класу. В останньому випадку в класі повинен бути оголошений прототип методу. Приклад визначення методу print класу A поза класом:

void A::print()

{cout<<b;}

Об’єкт (екземпляр класу) – дане певного класового типу (с.46). Об’єкту властиві стан, поведінка і ідентичність. Приклад:

A obj;//об’єкт obj класу A

Конструктор – метод класу (функція), який має ім’я класу і використовується для створення екземплярів класу (с.47). Викликається при створенні об’єкту. Приклад визначення конструктора класу А:

A::A(int x){a=x;}//ініціалізація поля a параметром x

Конструктор копії – конструктор, який використовує в якості аргументу екземпляр класу, для якого цей конструктор визначений (с.49). Використовується для створення копій об’єкта. Приклад:

A::A(A &obj)

{a=obj.a;}//ініціалізація поля a параметром obj.a

Деструктор - метод класу (функція), який має ім’я класу зі символом ~ і використовується для знищення екземплярів класу (с.48). Викликається автоматично при знищенні об’єкту. Приклад:

A::~A()

{cout<<"destructor";}

Спеціфікатори доступу членів класу (public, private, protected) використовуються для визначення доступності членів класу (с.54):

public (відкритий) - доступність для будь-якої зовнішньої функції;

private (закритий) - доступність тільки для методів класу, використовується по замовчуванню;

protected (захищений) - доступність тільки для методів класу і похідних класів.

Абстрактні класи - це класи, які містять хоча б одну чисто віртуальну функцію і, тому, не можуть мати екземплярів. Використовуються тільки для породження похідних класів. Приклад:

class A//абстрактний клас A

{

public: int a;

virtual void f()=0;//чисто віртуальний метод

};

Інтерфейс – зовнішній вигляд класу, об'єкту або модуля, що виділяє його істотні риси і не показує внутрішнього устрою і деталей поведінки. У С++ це абстрактний клас, який містить тільки оголошення методів і статичні константні поля.

Реалізація – на відміну від інтерфейсу - внутрішнє представлення класу, об'єкту або модуля, включаючи деталі його поведінки.

Ієрархія класів – сукупність класів побудована на основі принципу успадкування (с.54). Клас, який лежить в основі ієрархії називається базовим (батьківським), а клас, який його успадковує називається похідним (дочірнім). Приклад ієрархії:

class A {};

class B:public A {};

class C:public B {};

Віртуальні (узагальнені) методи (функції) – методи, які оголошуються в базовому класі за допомогою слова virtual та використовуються для реалізації принципу динамічного поліморфізму (с.56). Віртуальна функція може бути перевизначена в похідних класах, отже, її реалізація визначається множиною методів, оголошених у всіх класах дерева успадкування. Приклад:

virtual void f()

{cout<<a;}

Таблиця віртуальних методів – таблиця вказівників на методи, яка існує для кожного класу. Всі екземпляри класу містять вказівник на цю таблицю.

Чисто віртуальна функція – метод класу, який не має реалізації. Приклад:

virtual void f()=0;

Перевантаження функцій-членів класу полягає в тому, що декілька різних функцій-членів використовують одне і теж ім’я, при цьому, кожне перевизначення функції повинно використовувати інші типи параметрів або їх кількість (с.55). Приклад перевантаження функції s:

void s(int x){cout<<x;}

void s(int x,int y){cout<<x+y;}

Дружні функції – функції, які не є членами класу але володіють усіма правами члена класу і оголошуються в класі за допомогою слова friend (с.53). Мають доступ до закритих і захищених полів класу. Приклад:

friend void f();

Статичні поля – змінні члени класу, які оголошуються за допомогою слова static і належать цьому класу, а не його об’єктам. Їх визначення повинно знаходитись поза класом. Приклад:

class A

{static int a;};//оголошення статичного поля а

int A::a=0;//визначення поля а

Статичні методи – функції члени класу, які оголошуються за допомогою слова static, і можуть звертатись тільки до статичних полів і методів. Можуть викликатись як звичайні функції: <клас>::<метод>. Приклад:

class A

{public: static int a;//статичне поле

static void f(){cout<<a;};//статичний метод

};

Константні методи - функції члени класу, які оголошуються за допомогою слова const, і не можуть змінювати значення полів класу. Приклад:

class A

{public: int a;

void f() const {cout<<a;};//константний метод

};

Вказівник this – псевдозмінна-вказівник, який використовується в методі класу і вказує на об’єкт, який викликав цей метод. Приклад:

void A::f(){this->a=1;}

Перевантаження операторів основане на перевантаженні операторних функцій, які створюються за допомогою слова operator і визначають дії перевантажених операторів стосовно певного класу (с.56). Приклад:

A A::operator+(const A& obj)

{return A(a+obj.a);}//повернути об’єкт, у якого поле а є сумою полів доданків

Шаблони (template) – механізм реалізації статичного поліморфізму, який дозволяє створювати узагальнені функції і класи, які працюють з типом даних, який заданий як параметр (с.62). Таким чином, одну і ту ж функцію, або клас можна застосовувати до різних типів даних, не використовуючи окремі варіанти для кожного типу. Конкретна версія шаблонної функції або класу створюється на етапі компіляції і називається спеціалізацією. Шаблони оголошуються за допомогою слова template. Приклад шаблону функції:

template <typename T>//список шаблонних параметрів

T sum(T a, T b){return a+b;};

Узагальнене програмування основане на використанні шаблонів і призначене для створення програмних компонентів, які не залежать від типу даних.

 



Поделиться:


Последнее изменение этой страницы: 2017-01-24; просмотров: 349; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.12.36.30 (0.015 с.)