Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Одиночне успадкування




Успадкування

 

3.1 Загальні поняття

 

В об'єктно-орієнтованому програмуванні, успадкува́ння — механізм утворення нових класів на основі використання вже існуючих. При цьому властивості і функціональність батьківського класу переходять до класу нащадка(дочірнього).

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

Застосування механізму успадкування дозволяє покращити повторне використання коду шляхом використання вже визначених властивостей та методів (поведінки) базових класів.

 

Приклад успадкування в С++:

class A{ //базовий клас

};

class B: public A{ //public успадкування

};

class C: protected A{ //protected успадкування

};

class Z: private A{ //private успадкування

};

 

 

Клас може мати «підкласи», спеціалізовані, розширені версії надкласу. Можуть навіть утворюватись цілі дерева успадкування. Наприклад, клас Собака може мати підкласи Коллі, Пекінес, Вівчарка і т.п. Так, Сірко може бути екземпляром класу Вівчарка. Підкласи успадковують атрибути та поведінку своїх батьківських класів, і можуть вводити свої власні. Успадкування може бути одиничне (один безпосередній батьківський клас) та множинне (кілька батьківських класів). Це залежить від вибору програміста, який реалізовує клас та мови програмування.

Множинне успадкування — властивість деяких об'єктно орієнтовних мов програмування, в яких класи можуть успадкувати поведінку і властивості більш ніж від одного суперкласу (безпосереднього батьківського класу). Це відрізняється від простого успадкування, у випадку якого клас може мати тільки один суперклас.

Одиничне успадкування — властивість деяких об'єктно орієнтовних мов програмування, в яких класи можуть успадкувати поведінку і властивості тільки від одного класу.


 

4. Поліморфізм

 

4.1 Загальні поняття

 

 

Поліморфізм — концепція в програмуванні, відповідно до якої використовується спільний інтерфейс для обробки даних різних спеціалізованих типів. Поліморфізм - можливість об'єктів з однаковою специфікацією мати різну реалізацію. Мова програмування підтримує поліморфізм, якщо класи з однаковою специфікацією можуть мати різну реалізацію - наприклад, реалізація класу може бути змінена в процесі успадкування.

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

Поліморфізм — один з трьох найважливіших механізмів об'єктно-орієнтованого програмування. Поліморфізм дозволяє писати більш абстрактні програми і підвищити коефіцієнт повторного використання коду.

Спільні властивості об'єктів об'єднуються в систему, яку можуть називати по різному: інтерфейс, клас. Спільність має зовнішнє і внутрішнє вираження. Зовнішня спільність проявляється як однаковий набір методів з однаковими іменами і сигнатурами (типами аргументів і результатів).Внутрішня спільність є однакова функціональність методів. Її можна описати інтуїтивно виразити у вигляді строгих законів, правил, яким повинні підкорятись методи. Можливість приписувати різну функціональність одному методу (функції, операції) називається перевантаженням методу.

 

4.2 Поліморфізм і його реалізація через віртуальні функції

 

Поліморфізм - основоположна концепція об'єктно-орієнтованого програмування Віртуальна функція - це функція, оголошена з ключовим словом virtual в базовому класі і перевизначена в одному або в декількох похідних класах. Віртуальні функції є особливими функціями, тому що при виклику об'єкта похідного класу за допомогою вказівника або посилання на нього С ++ визначає під час виконання програми, яку функцію викликати, грунтуючись на типі об'єкта. У мові С++ ключове слово virtual надає функції можливість стати поліморфічною, якщо вона буде переписана (перевизначена) в одному класі-нащадку або більше. Однак слово virtual аж ніяк не є необхідним, так як будь-яка функція, перевизначення в класі-нащадку, може бути поліморфічною. Компілятору тільки потрібно генерувати код для істинно поліморфічних процедур.

Якщо автор батьківського класу в мові С ++ не передбачає, що клас-нащадок захоче перевизначити функцію, то він не зможе зробити її і поліморфічною.

С++ також дозволяє функціям бути перевантаженими, в такій ситуації виклик потрібної функції залежить від аргументів. Різниця між перевантаженими і поліморфічне (перевизначеними) функціями полягає в тому, що в перевантажених функціях потрібна, визначається при компіляції, а в разі поліморфічною визначається при виконанні.

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

 

 

4.3 Абстрактні та віртуальні базові класи

 

В об'єктно-орієнтованому програмуванні абстрактний клас – це базовий клас, від якого не можна створити екземпляру. На практиці абстрактні класи реалізують один з принципів ООП – поліморфізм. В абстрактному класі можна описати (або не визначити) абстрактні методи та властивості. Абстрактний метод не реалізовується в класі в якому описується, але має бути реалізований в неабстрактному нащадку. Абстрактні класи вважаються найбільшими узагальненими абстракціями, тобто відношення об'єму описів до об'єму реалізації найбільше. Абстрактний клас можна розглядати, як інтерфейс для сімейства класів, які ним породжені, але на противагу класичному інтерфейсу, абстрактний клас може містити реалізацію методів та властивості. Абстрактні методи переважно є і віртуальними, через це поняття «абстрактний» та «віртуальний» інколи плутають.

Якщо який-небудь клас має хоча б одну віртуальну функцію, то такий клас називається абстрактним (abstract). Важливою особливістю абстрактних класів є те, що не існує жодного об'єкта даного класу. Замість цього абстрактний клас служить в якості базового для інших похідних класів. Причина, по якій абстрактний клас не може бути використаний для оголошення об'єкта, полягає в тому, що одна або декілька його функцій-членів не мають визначення. Проте, навіть якщо базовий клас є абстрактним, все одно можна оголошувати вказівники або посилання на нього, за допомогою яких потім підтримується поліморфізм часу виконання.

C + + - єдиний з трьох мов, що підтримує множинне успадкування.

 


4.4 Перевантаження функцій і операцій

 

Перевантаження функцій:

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

Приклад перевантаження функції:

int function(int a,int b)

{return (a+b); }

int function(int a,int b,int c)

{return ((a+b)*c); }

main()

{

cout<<”Отримані результати функції номер 1”<<function(4,5)<<endl;

cout<<”Отримані результати функції номер 2”<<function(6,7,8)<<endl;

}

Перевантаження операторів:

Програмне забезпечення є одним з видів перевантаження функцій, особливістю програмного забезпечення є те, що оператор завжди перевантажується відносно класу. Для програмного забезпечення утворюється оператор функція, яка є членом класу для якого вона визначена.

Приклад перевантаження операторів:

class mi

{ int i;

public:

int getI ()

{return i; }

mi (int v)

{i = v;}

mi operator+ (int v)

{mi i1 (i + v); return i1; }

};

int main()

{mi a (5);

mi b = a + 7;

cout << b.getI () << endl;

system("pause>>int");}

При перевантаженні операцій слід пам’ятати наступне:

  1. не можна поміняти пріоритет операцій;
  2. не можна змінити тип операції (з унарної операції не можна зробити бінарну або навпаки);
  3. перевантажена операція є членом класу і може використовуватися тільки у виразах з об'єктами свого класу;
  4. не можна створювати нові операції;
  5. заборонено перевантажувати операції:. (доступ до членів класу), унарну операцію * (значення за адресою вказівника),:: (розширення області видимості),?: (операція if);
  6. допустиме перевантаження наступних операцій: +, -, *, /,%, =, <,>, + =, - =, * =, / =, &&, ||, ++, -, (), [], new, delete.

 




Поделиться с друзьями:


Дата добавления: 2015-05-26; Просмотров: 2087; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.027 сек.