нне успадкування створює відому проблему (в C + +), коли клас успадковується від декількох класів-посередників, які в свою чергу успадковуються від одного класу (так звана «Проблема ромба»): якщо метод загального предка був перевизначений в посередниках, невідомо, яку реалізацію методу повинен успадковувати загальний нащадок. Вирішується ця проблема шляхом відмови від множинного спадкоємства для класів і дозволом множинного спадкоємства для повністю абстрактних класів (тобто інтерфейсів) (C #, Delphi, Java), або через віртуальне успадкування (C + +).
Спадкування - механізм об'єктно-орієнтованого програмування, що дозволяє описати новий клас на основі вже існуючого (батьківського), при цьому властивості і функціональність батьківського класу запозичуються новим класом.
Просте спадкування. Клас, від якого відбулося спадкування, називається базовим або батьківським (англ. base class). Класи, які походять від базового, називаються нащадками, спадкоємцями або похідними класами (англ. derived class).
У деяких мовах використовуються абстрактні класи. Абстрактний клас - це клас, який містить хоча б один абстрактний метод, він описаний в програмі, має поля, методи і не може використовуватися для безпосереднього створення об'єкта. Тобто від абстрактного класу можна тільки наслідувати. Об'єкти створюються тільки на основі похідних класів, успадкованих від абстрактного. Наприклад, абстрактним класом може бути базовий клас «співробітник вузу», від якого успадковуються класи «аспірант», «професор» і т. д. Так як похідні класи мають спільні поля і функції (наприклад, поле «рік народження»), то ці члени класу можуть бути описані в базовому класі. У програмі створюються об'єкти на основі класів «аспірант», «професор», але немає сенсу створювати об'єкт на основі класу «співробітник вузу».
При множині спадкування у класу може бути більше одного предка. У цьому випадку клас успадковує методи всіх предків. Переваги такого підходу в більшої гнучкості. Мова Java не підтримує множинне спадкування.
Абстракція - в об'єктно-орієнтованому програмуванні це додання об'єкту характеристик, які відрізняють його від усіх інших об'єктів, чітко визначаючи його концептуальні межі. Основна ідея полягає в тому, щоб відокремити спосіб використання складових об'єктів даних від деталей їх реалізації у вигляді більш простих об'єктів, подібно до того, як функціональна абстракція поділяє спосіб використання функції і деталей її реалізації в термінах більш примітивних функцій, таким чином, дані обробляються функцією високого рівня за допомогою виклику функцій низького рівня.
Такий підхід є основою об'єктно-орієнтованого програмування. Це дозволяє працювати з об'єктами, не вдаючись у особливості їх реалізації. У кожному конкретному випадку застосовується той чи інший підхід: інкапсуляція, поліморфізм або спадкування. Наприклад, при необхідності звернутися до прихованих даними об'єкта, слід скористатися инкапсуляцией, створивши, так звану, функцію доступу або властивість.
Абстракція даних - популярна і загалом невірно визначається техніка програмування. Фундаментальна ідея полягає в поділі несуттєвих деталей реалізації підпрограми і характеристик істотних для коректного її використання. Такий поділ може бути виражене через спеціальний «інтерфейс», зосереджують опис всіх можливих застос...