ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 09.09.2024
Просмотров: 24
Скачиваний: 0
Лекція 3:
Тема: Введення в об’єктноо-орієнтовану технологію програмування.
План:
1. Перехід від процедурного програмування до об'єктного.
2. Модульне програмування.
3. Базові поняття об'єктно-орієнтованого програмування.
1. Введення
Складність сучасного програмного забезпечення вимагає від розробників володіння найбільш перспективними технологіями його створення. Одній з таких технологій є об'єктно-орієнтоване програмування (ООП). Застосування ООП дозволяє розробляти програмне забезпечення підвищеної складності за рахунок поліпшення його технологічності (кращих механізмів розділення даних, збільшення повторюваності код, використання стандартизованных інтерфейсів користувача і так далі)
ООП з'явилося в результаті тривалої еволюції технології розробки програмних продуктів В основу еволюції лягло прагнення прискорити процес створення надійних програмних засобів. Об'єктні моделі різних версій універсальних мов програмування мають свої особливості, але в їх основі лежать єдині концепції, що дозволяє говорити про теоретичні основи ООП.
1. Від процедурного програмування до об'єктного
Поява в мовах засобів, що дозволяють оперувати підпрограмами, істотно понизило трудомісткість розробки програм. Підпрограми можна було зберігати і використовувати в інших програмах. В результаті бувальщини накопичені величезні бібліотеки розрахункових і службових підпрограм, які у міру потреби викликалися з програми, що розроблялася. Типова підпрограм (в основному бібліотечних), що виконують обробку всіх даних або їх частини (мал. 1) .программа того часу складалася з основної програми, області глобальних даних і набору.
Підпрограми
Мал. 1. Архітектура програми, що використовує глобальну область даних
Слабким местомом такої архітектури було те, що при збільшенні кількості підпрограм зростала вірогідність спотворення частини глобальних даних якою-небудь підпрограмою. Наприклад, бінарний пошук (ділення на половину, требі контролювати який масив повертається до головної програми).
Необхідність виключення таких помилок привела до ідеї використання в підпрограмах локальних даних (мал. 2).
Зусиллями багатьох авторів була створена нова технологыя, якаі отримала назву «Структурне програмування».
Ще раз згадаємо основні принципи виконання розробки:
-
принцип низхідної розробки, що рекомендує на всіх етапах спочатку визначати найбільш загальні моменти, а потім поетапно виконувати деталізацію (що дозволяє послідовно концентрувати увагу на невеликих фрагментах розробки);
-
Підпрограми з локальними даними
Мал. 2. Архітектура програми, що використовує підпрограми з локальними даними
-
принцип крізного структурного контролю, що припускає проведення змістовного контролю всіх етапів розробки (чим раніше виявлена помилка, тим простіше за неї виправити).
В основі структурного програмування лежить декомпозиція (розбиття на частини) складних систем з метою подальшої реалізації у вигляді окремих невеликих (до 40 ... 50 операторів) підпрограм. На відміну від використовуваного раніше інтуїтивного підходу до декомпозиції, структурний підхід вимагав представлення завдання у вигляді ієрархії підзадач простої структури, для отримання якої рекомендувалося застосовувати метод покрокової деталізації. З появою інших принципів декомпозиції (об'єктного, логічного і так далі) даний спосіб отримав назву процедурної декомпозиції.
Метод покрокової деталізації полягає в наступному:
визначається загальна структура програми у вигляді одного з трьох варіантів (мал. 3):
-
послідовності підзадач (наприклад, введення даних, перетворення даних, виведення даних)
-
альтернативи підзадач (наприклад, додавання записів до файлу або їх пошук)
-
Слідування
Альтернатива
Цикл-доки
підзадача1
підзадача2
Немає
подзадача1
Мал. 3. Основні структури процедурної декомпозиції
кожна підзадача, у свою чергу, розбивається на підзадачі з використанням тих же структур;
процес продовжується, поки на черговому рівні не виходить підзадача, яка досить просто реалізується засобами використовуваної мови (1-2 керівників оператора мови).
Приклад 1. Процедурна декомпозиція (програма «Записник»): Хай потрібно розробити програму, яка в зручній для користувача формі дозволить записувати і потім знаходити телефони різних людей і організацій. «Зручна» форма на сучасному рівні програмування припускає спілкування програми з користувачем через «меню».
Аналіз завдання показує, що програму можна будувати як послідовність підпрограм. Отже, на першому кроці декомпозиції з використанням покрокової деталізації отримуємо
Основна програма:
Почати роботу.
Вивести меню на екран.
Ввести команду.
Виконати цикл обробки команд, що вводяться.
Завершити роботу.
Перші три підзадачі, виявлені на даному кроці, представляються нескладними, тому на наступному кроці деталізуємо дію «Виконати цикл обробки команд, що вводяться»
Виконати цикл обробки команд, що вводяться:
цикл-пока команда = «завершити роботу»
Виконати команду.
Ввести команду
все-цикл.
Після цього деталізуємо операцію «Виконати команду». Виконуємо декомпозицію, використовуючи відразу декілька конструкцій галуження.
Виконати команду:
якщо команда= «відкрити книжку»
то Відкрити книжку
інакше якщо команда= «додати»
то Додати запис
інакше якщо команда= «знайти»
то Знайти запис
все-если
все-если
все-если.
На цьому кроці можна поки зупинитися, оскільки дії, що залишилися, достатньо прості. «Вклавши» результати покрокової деталізації, отримаємо структурне представлення алгоритму основної програми об'ємом не більше 20... 30 операторів.
Основна програма:
Почати роботу.
Вивести меню на екран.
Ввести команду.
цикл-пока команда = «завершити роботу»
якщо команда= «відкрити книжку»
то Відкрити книжку
інакше якщо команда = «додати»
то Додати запис
інакше якщо команда= «знайти»
то Знайти запис
все-если
все-если
все-если
Ввести команду
все-цикл
Завершити роботу.
Примітка. Для запису алгоритму використаний псевдокод, в якому проходження відображається записом дій на різних рядках, галуження позначається конструкцією якщо <умова> та <дія 1> інакше <дія 2> все-если, а цикл з перевіркою умови виходу на початку - цикл-пока <дії> все-цикл. Вкладеність конструкцій визначається відступами від початку рядка.
Остаточно, на першому рівні виділені підзадачі: «Вивести меню», «Ввести команду», «Відкрити книжку», «Додати запис» і «Знайти запис».
На наступному рівні визначаються підзадачі завдань другого рівня
наприклад:
Открить_кніжку:
Ввести ім'я файлу
якщо існує файл Імякніжки
то Відкрити файл
інакше Вивести повідомлення про помилку
все-если
На цьому етапі отримуємо підзадачі: «Ввести ім'я файлу» і «Відкрити файл». Поступивши аналогічно з найбільш складними підзадачами першого рівня, отримуємо схему дворівневої алгоритмічної декомпозиції завдання.
На мал. 1.4 показано, з яких підпрограм складатиметься система, що розробляється, і взаємодія останніх по викликах.
Створена за наслідками декомпозиції програма має правильну з погляду структурної технології організацію, тобто включає 12 відносно невеликих підпрограм, що викликаються з основної програми або підпрограм більш високого рівня.
Сформульована таким чином методика декомпозиції закріпила процедурний або алгоритмічний підхід, що склався у той час, до програмування, при якому основна увага концентрується на визначенні послідовності дій.
Підтримка принципів структурного програмування була закладена в основу так званих процедурних мов програмування. Як правило, вони включали основних «структурних» операторів управління, підтримували вкладення підпрограм, локалізацію і обмеження області «видимості» даних. Серед найбільш відомих мов цієї групи варто назвати PL/1, ALGOL-68, Pascal, С.
Примітка. Одночасно із структурним програмуванням з'явилася величезна кількість мов, що базуються на інших концепціях, але більшість з них не витримала конкуренції. Якісь мови були просто забуті, ідеї інших були надалі використані в наступних версіях мов, що розвивалися.
Вивести вікно з текстом |
Ввести ім'я файлу |
Відкрити файл |
Ввести запис |
Додати запис у файл |
Ввести ім'я |
Знайти запис у файлі |
Мал. 4. Алгоритмічна декомпозиція системи «записник»
Подальше зростання складності і розмірів програмного забезпечення, що розробляється, зажадало розвитку структуризації даних і, відповідно, в мовах з'являється можливість визначення призначених для користувача типів даних. Одночасно посилюється прагнення розмежувати доступ до глобальних даних програми для зменшення кількості помилок. Результатом була поява і розвиток технології модульного програмування.