о доступні будь-якому класу, розташованому нижче в ієрархічному дереві.
Таким чином, програма являє собою набір об'єктів, що мають стан і поведінку. Об'єкти взаємодіють за допомогою повідомлень. Природним чином вибудовуєтьсяієрархія об'єктів: програма в цілому - це об'єкт, для виконання своїх функцій вона звертається до вхідних в неї об'єктів, які, у свою чергу, виконують запитане шляхом звернення до інших об'єктів програми. Природно, щоб уникнути нескінченної рекурсії у зверненнях, на якомусь етапі об'єкт трансформує звернене до нього повідомлення в повідомлення до стандартних системних об'єктів, що надаються мовою і середовищем програмування.
Стійкість і керованість системи забезпечується за рахунок чіткого поділу відповідальності об'єктів (за кожну дію відповідає певний об'єкт), однозначного визначення інтерфейсів межоб'ектного взаємодії та повної ізольованості внутрішньої структури об'єкта від зовнішнього середовища (інкапсуляції).
Концепції
Поява в ООП окремого поняття класу закономірно випливає з бажання мати безліч об'єктів з подібним поведінкою. Клас в ООП - це в чистому вигляді абстрактний тип даних, створюваний програмістом. З цієї точки зору об'єкти є значеннями даного абстрактного типу, а визначення класу задає внутрішню структуру значень і набір операцій, які над цими значеннями можуть бути виконані. Бажаність ієрархії класів (а значить, успадкування) випливає з вимог до повторного використання коду - якщо кілька класів мають подібну поведінку, немає сенсу дублювати їх опис, краще виділити загальну частину в загальний батьківський клас, а в описі самих цих класів залишити тільки розрізняються елементи.
Необхідність спільного використання об'єктів різних класів, здатних обробляти однотипні повідомлення, вимагає підтримки поліморфізму - можливості записувати різні об'єкти в змінні одного і того ж типу. У таких умовах об'єкт, відправляючи повідомлення, може не знати в точності, до якого класу належить адресат, і одні й ті ж повідомлення, відправлені змінним одного типу, що містить об'єкти різних класів, викличуть різну реакцію.
Окремої пояснень вимагає поняття обміну повідомленнями. Спочатку (наприклад, в тому ж Smalltalk) взаємодія об'єктів уявлялося як справжній обмін повідомленнями, тобто пересилання від одного об'єкта іншому спеціального об'єкта-повідомлення. Така модель є надзвичайно загальною. Вона прекрасно підходить, наприклад, для опису паралельних обчислень за допомогою активних об'єктів, кожен з яких имее?? власний потік виконання і працює одночасно з іншими. Такі об'єкти можуть поводитися як окремі, абсолютно автономні обчислювальні одиниці. Посилка повідомлень природним чином вирішує питання обробки повідомлень об'єктами, присвоєними поліморфним змінним - незалежно від того, як оголошується змінна, повідомлення обробляє код класу, до якого відноситься присвоєний змінної об'єкт.
Однак спільність механізму обміну повідомленнями має й інший бік - повноцінна передача повідомлень вимагає додаткових накладних витрат, що не завжди прийнятно. Тому в більшості нині існуючих об'єктно-орієнтованих мов програмування використовується концепція відправка повідомлення як виклик методу - Об'єкти мають доступні ззовні методи, викликами яких і забезпечується взаємодія об'єктів. Даний підхід реалізований у величезній кількості мов програмування, у тому числі C ++, Object Pascal, Java, Oberon - 2. На даний момент саме він є найбільш поширеним в об'єктно-орієнтованих мовах.
Концепція віртуальних методів, підтримувана цими та іншими сучасними мовами, з'явилася як засіб забезпечити виконання потрібних методів при використанні поліморфних змінних, тобто, по суті, як спроба розширити можливості виклику методів для реалізації частини функціональності, забезпечувана механізмом обробки повідомлень.
Особливості реалізації
Як вже говорилося вище, в сучасних об'єктно-орієнтованих мовах програмування кожен об'єкт є значенням, що належать до певного класу. Клас являє собою оголошений програмістом складовою тип даних, що має в складі:
Поля даних
Параметри об'єкту (звичайно, не всі, а тільки необхідні в програмі), що задають його стан (властивості об'єкта предметної області). Іноді поля даних об'єкта називають властивостями об'єкта, через що можлива плутанина. Фізично поля являють собою значення (змінні, константи), оголошені як належать класу.
Методи
Процедури і функції, пов'язані з класом. Вони визначають дії, які можна виконувати над об'єктом такого типу, і які сам об'єкт може виконувати.
Класи можуть успадк...