Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
О.О.П / 3_кол / Лекції / лекция_С++ (3)_у.doc
Скачиваний:
8
Добавлен:
30.05.2020
Размер:
134.66 Кб
Скачать

3. Модульне програмування

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

Цю технологію підтримують сучасні версії мов Pascal і З (C++), мови Пекла і Modula.

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

П

Підпрограми з локальними даними

Підпрограмми с локальными даними

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

Модулі с локальними даними

Мал. 5. Архітектура програми, що складається з модулів

Прагнення зменшити кількість зв'язків між окремими частинами програми привело до появи об'єктно-орієнтованого програмування (ООП).

3. Бозові поняття об'єктно-орієнтованого програмування

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

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

Примітка. Таке представлення програми вперше було використане в мові імітаційного моделювання складних систем Simula, що з'явився ще в 60-х роках. Природний для мов моделювання спосіб представлення програми отримав розвиток в іншій спеціалізованій мові моделювання - мові Smalltalk (70-і роки), а потім був використаний в нових версіях універсальних мов програмування, таких як Pascal, C++, Ада, Modula.

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

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

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

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

Розглянемо, що є кожним принципом.

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

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

Необхідність обмеження доступу припускає розмежування двох частин в описі абстракції:

інтерфейс - сукупність доступних ззовні елементів реалізації абстракції (основні характеристики стану і поведінки);

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

Обмеження доступу в ООП дозволяє розробникові:

  1. виконувати конструювання системи поетапно, не відволікаючись на особливості реалізації використовуваних абстракцій;

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

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

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

Ієрархія - ранжирувана або впорядкована система абстракцій. Принцип ієрархічності припускає використання ієрархій при розробці програмних систем.

У ООП використовуються два види ієрархії:

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

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

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

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

Використання принципу типізації забезпечує:

  1. раннє виявлення помилок, пов'язаних з неприпустимими операціями над програмними об'єктами (помилки виявляються на етапі компіляції програми при перевірці допустимості виконання даної операції над програмним об'єктом);

  2. спрощення документування;

  3. можливість генерації ефективнішої коди.

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

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

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

Реальний паралелізм досягається тільки при реалізації завдань такого типу на багатопроцесорних системах, коли є можливість виконання кожного процесу окремим процесором. Системи з одним процесором імітують паралелізм за рахунок розділення часу процесора між завданнями управління різними процесами. Залежно від типу використовуваної операційної системи (одно- або мультипрограмною) розділення часу може виконуватися або системою (як в MS DOS), що розробляється, або використовуваною ОС (як в системах Windows).

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

Розрізняють:

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

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

  3. глобальні об'єкти, що існують поки програма завантажена в пам'ять;

  4. сохраняемые объекты, данные которых хранятся в файлах внешней памяти между сеансами работы программы.

Всі вказані вище принципи в тому або іншому ступені реалізовані в різних версіях об'єктно-орієнтованих мов.

Контрольні питання:

1. Недоліки технології програмування, які привели до створення процедурного програмування.

2. Основні принципи структурного програмування.

3. Метод покрокової деталізації.

Соседние файлы в папке Лекції