Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Документація.doc
Скачиваний:
12
Добавлен:
23.02.2016
Размер:
1.27 Mб
Скачать

Глава 2 Об'єктна модель

Парадигми програмування. Виявили п'ять основних різновидів стилів програмування:

1. Процедурно-орієнтований – алгоритми.

2. Об'єктно-орієнтований - класи та об'єкти.

3. Логіко-орієнтована мета - часто виражені в термінах числення предикатів.

4. Орієнтований на правила - правила «якщо-то».

5. Орієнтований на обмеження - інваріантні співвідношення.

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

  • абстрагування

  • інкапсуляція

  • модульність

  • ієрархія

Ці елементи є головними в тому сенсі, що без будь-якого з них модель не буде об'єктно-орієнтованої. Крім головних, є ще три додаткові елементи:

  • типізація

  • паралелізм

  • збереженість

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

Існуючі абстракції:

1. Абстракція суті - Об'єкт представляє собою корисну модель якоїсь сутності в предметної області.

2. Абстракція поведінки - Об'єкт складається з узагальненого безлічі операцій.

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

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

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

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

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

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

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

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

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

Ієрархія. Ієрархія - це упорядкування абстракцій, розташування їх по рівнях.

Основними видами ієрархічних структур стосовно кладних систем є структура класів (ієрархія «is-a») і структура об'єктів (ієрархія «part of»).

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

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

Було відзначино наступні важливі переваги суворо типізованих мов:

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

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

3. Оголошення типів покращує документування програм.

4. Багато компілятори генерують більш ефективний об'єктний код, якщо їм явно відомі типи ».

Мови, в яких типізація відсутній, володіють більшою гнучкістю.

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

В об'єктно-орієнтованому проектуванні є три підходи до паралелізму.

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

По-друге, можна використовувати бібліотеку класів, що реалізовують яку-небудь різновид «легкого» паралелізму.

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

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

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

1. «Проміжні результати обчислення виразів.

2. Локальні змінні у виклику процедур.

3. Власні змінні, глобальні змінні і динамічно створювані дані. 4. Дані, що зберігаються між сеансами виконання програми. 5. Дані, які зберігаються при переході на нову версію програми. 6. Дані, які взагалі переживають програму ».

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

Збереженість - здатність об'єкта існувати в часі, переживаючи породив його процес, і (або) у просторі, переміщаючись з свого початкового адресного простору.