Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
+++++++ООП_КН. doc.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
94.72 Кб
Скачать

Методи доступу

Поля класу, в загальному випадку, не мають бути доступні ззовні, оскільки такий доступ дозволив би довільним чином міняти внутрішній стан об'єктів. Тому поля зазвичай оголошуються прихованими (або мова в принципі не дозволяє звертатися до полів класу ззовні), а для доступу до тих, що знаходяться в полях даним використовуються спеціальні методи, звані методами доступу. Такі методи або повертають значення того або іншого поля, або проводять запис в це поле нового значення. При записі метод доступу може проконтролювати допустимість записуваного значення і, при необхідності, провести інші маніпуляції з даними об'єкту, щоб вони залишилися коректними (внутрішньо узгодженими). Методи доступу називають ще аксесорами (від англ. access — доступ), а окремо — геттерами (англ. get — читання) і сетерами (англ. set — запис)[6].

Властивості об'єкту

Псевдополя, доступні для читання і/або запису. Властивості зовні виглядають як поля і використовуються аналогічно доступним полям (з деякими виключеннями), проте фактично при зверненні до них відбувається виклик методів доступу. Таким чином, властивості можна розглядати як «розумні» поля даних, супроводжуючі доступ до внутрішніх даних об'єкту якими-небудь додатковими діями (наприклад, коли зміна координати об'єкту супроводиться його перемальовуванням на новому місці). Властивості, по суті — не більше ніж синтаксичний цукор, оскільки ніяких нових можливостей вони не додають, а лише приховують виклик методів доступу. Конкретна мовна реалізація властивостей може бути різною. Наприклад, в C# оголошення властивості безпосередньо містить код методів доступу, який викликається тільки при роботі з властивостями, тобто не вимагає окремих методів доступу, доступних для безпосереднього виклику. У Delphi оголошення властивості містить лише імена методів доступу, які повинні викликатися при зверненні до поля. Самими методами доступу є звичайні методи з деякими додатковими вимогами до сигнатури.

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

Підходи до проектування програм в цілому

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

Об'єктно-орієнтоване проектування полягає в описі структури і поведінки проектованої системи, тобто, фактично, відповідає на два основні питання:

  • З яких частин складається система.

  • У чому полягає відповідальність кожній з частин.

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

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

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

Споріднені методології

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

Компонентне програмування

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