Принцип - поліморфізм

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

Кожен метод може бути переоб'явлен в нащадку. Однак, виклик методу основного класу не викличе переоб'явленний метод, незважаючи на справжній клас об' єкта.

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

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

Ця ситуація називається runtime binding. Це виконується у всіх викликають виразах, не тільки в явних.

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

Область дії і видимість.

Область дії визначає доступність об' єктів. Всі членуй оголошені всередині об' єкта доступні цьому об' єкту і його нащадкам. Коли ти пишеш код реалізує метод, який посилається на властивості і методи об' єкта, де метод оголошений, то ти не зобов'язаний спочатку писати ідентифікатор імені об' єкта.

Кожен об' єкт проектується "чорним ящиком". Це означає, що його реалізація і внутрішня частина повинні бути сховані, в тій година як інтерфейс повинний бути ясно визначено. У ТОП це зазвичай досягається приписуванням атрибутів видимості властивостям і методам. Коли ви оголошуєте властивість або метод, новий член класу має видимість зазначену одним із слів: private, protected, public. Видимість члена визначається доступністю для інших об' єктів та одиниць.

Рrivate член доступний тільки всередині методу цього ж класу. Сморід використовуються для повного приховування властивостей і методів, які не повинні бути доступні комусь ще.

Protected член доступний всередині методів того ж класу і всіх нащадків.

Public член доступний звідусіль.

Події та обробники подій.

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

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

Творець події і відправник ->

Середа ->

Подія ->

Диспетчер іншого об' єкта ->

Обробник події об' єкта.

Подія - це механізм, який пов' язує випадок з яких-небудь потоком.

1. Чисто- подієвий підхід (чисте Win32 програмування)

2. Процедурно- подієвий підхід (CBuilder, Delphi)

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

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

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

Відіа подій, які можуть відбутися, можуть бути розділені на дві головні категорії : призначені для користувача події та системні події. Користувальницькі події - дії, вироблені користувачем. Ці події завжди пов' язані з діями користувача. Системні події - події, які ОС здійснює для вас.

Множинне успадкування і інтерфейси.

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

Іншим рішенням буде оголошення нащадка від двох класів. Це називається множинним спадкуванням. При множині спадкуванні нащадок успадковує всі методи і властивості всіх своїх предків.

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

Інтерфейс може мати предків і успадковувати всі їхні методи. Але інтерфейс не реалізує методи. Класи, що підтримують інтерфейс, повинні реалізовувати його методи.

Обробка виключень в ТОП.

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

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

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

Винятки надають гарний спосіб ловити помилки під година виконання без зупинки програми і без громіздких умовних операторів.

Щоб створити об' єкт винятку, програмісту потрібно викликати конструктор класу винятків оператором raise (throw).

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

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

Якщо виключення залишилося необробленим, виконання переходити у вкладений обробник винятків, і так далі.

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

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

Обробка виключення усуває умови помилки і знищує об' єкт виключення, що дозволяє додатку продовжити виконання.

Життєвий цикл об' єктів і керування пам'яттю.

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

Синтаксичний підхід реалізує метод управління пам'яттю об' єкта в мові.

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

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

Автоматичне управління пам'яттю.

Техніка автоматичного управління пам'яттю дозволяє програмісту передавати відповідальність за управління пам'яттю мови.

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

Техніка підрахунку посилань дозволяє знищувати об' єкти автоматичний, коли ніхто більше не посилається на цей об' єкт. Об' єкт існує, доки хоча б хтось один на нього посилається.