![]() |
Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | |
|
Опис вкладеного повторення і з’єднання у програмних специфікаціях
Мета – дослідити та набути практичних навичок з використання вкладених управляючих дій повторення та їх з’єднання при складанні програмних специфікацій
Приклади складення специфікацій
Задача 1.8. Задана множина послідовностей A[M,N], де M – номер послідовності, N – кількість елементів в m-ній послідовності. Знайти добуток суми елементів послідовностей
Рішення
Програмні специфікації запишемо у псевдокоді (рис.1.15) та графічній формі (рис.1.16)
Крок 1. Визначимо основні дії (рис.1.15,а і рис.1.16,а)
Крок 2. Деталізуємо дію знаходження добутку Р з використанням управляючої дії повторення (рис.1.15,б і рис.1.16,б)
Крок 3. Деталізуємо дію знаходження добутку Р (рис.1.15,в і рис.1.16,в)
Крок 4. Деталізуємо дію знаходження суми S елементів i-ої послідовності (рис.1.15,г і рис.1.16,г)
початок Знайти добуток Р кінець | початок Р:= 1 i:= 1 поки i <= M повторити Знайти добуток Р i:= i + 1 все повторити кінець |
а) крок 1 б) крок 2
початок Р:= 1 i:= 1 поки i <= M повторити З найти суму S Р:= Р * S i:= i + 1 все повторити кінець | початок Р:= 1 i:= 1 поки i <= M повторити S:= 0 j:= 1 поки j <= N повторити S:= S + A[i,j] j:= j + 1 все повторити Р:= Р * S i:= i + 1 все повторити кінець |
в) крок 3 г) крок 4
Рис.1.15. Програмна специфікація розв’язання задачі 1.8 у псевдокоді
![]() | ![]() |
а) крок 1 б) крок 2
![]() | ![]() |
в) крок 3 г) крок 4
Рис.1.16. Програмна специфікація розв’язання задачі 1.8
Задачі для самостійного розв’язання
1) Задана множина послідовностей А[m,n], де m – номер послідовності, n – кількість елементів в m - ній послідовності. Знайти добуток суми елементів послідовності
2) Задана множина послідовностей А[m,n], де m – номер послідовності, n – кількість елементів в m - ній послідовності. Знайти добуток всієї множини послідовностей
3) Задана множина послідовностей А[m,n], де m – номер послідовності, а n – кількість елементів в m - ній послідовності. Знайти максимальне число за абсолютною величиною із всієї множини послідовностей
4) Задана множина послідовностей А[m,n], де m – номер послідовності, а n – кількість елементів в m - ній послідовності. Знайти добуток від’ємних чисел всієї множини послідовностей
5) Задана множина послідовностей А[m,n], де m – номер послідовності, а n – кількість елементів в m - ній послідовності. Знайти номер мінімального числа в множині
6) Задані дві послідовності P1 і P2. Замінити в другій послідовності входження чисел з P1 в P2 на частку від ділення суми підпослідовності з P1 на кількість елементів підпослідовності
7) Задане натуральне число і послідовність чисел, яка складається із 0 та 1. Скласти специфікацію для моделювання операцій зсуву вліво (SHL) і зсуву вправо (SHR)
Розділ 5. Програмні конструкції
Конструктивний підхід до компонентів програми, який систематично культивується в інженерії програмного забезпечення, став можливим завдяки низці фундаментальних результатів, здобутих у теорії програмування.
Рівні абстракції та віртуальні машини як засоби моделювання програм упровадили Н.Вірт [30] та Е.Дейкстра [37]. Поняття модуляризація як засобу інкапсуляції (конструктивного виокремлення компонентів програми) увів Д.Парнас, ґрунтуючись на понятті інтерфейсу та принципі інформаційного приховування (information hiding) [65]. Л. Константин, розробляючи метод структурного проектування програм, запропонував два критерії оцінювання якості інкапсуляції – зв’язування (cohesion) елементів програми в компоненти (модулі) та поєднання (coupling) модулів між собою при складанні програми. Нарешті, Б.Лисков та С.Зайлис завершили формування конструктивного погляду на компоненти програм, запропонувавши поняття абстрактного типу даних.
Для кожного типу програмних компонентів як будівельних конструкцій програми було розроблено відповідний метод застосування – процедурне (підпрограмне), модульне та об’єктно-орієнтоване програмування.
5.1. Принципи інженерії програмного забезпечення і програмні конструкції
Нині розв’язування трьох груп задач інженерії програмного забезпечення ґрунтується на понятті програмної конструкції. По-перше, ідеться про розв’язання задач прямої інженерії, тісно пов’язаних із навчанням програмуванню, що передбачає з’ясування таких питань: із чого можуть будуватися програми; якими мають бути програмні конструкції; як ці конструкції доцільно використовувати. По-друге, задачі зворотної інженерії не можна розв’язати, не класифікувавши програмних конструкцій та зв’язків між ними. І по-третє, розв’язування задач ефективної реалізації процесів повторного використання потребує розуміння властивостей програмних конструкцій [64].
У практичному програмуванні відомі різні погляди на програмні конструкції. Як засіб, що дає змогу уточнити поняття програмної конструкції, використовуватимемо класифікацію, а як класифікаційну ознаку – рівень інкапсуляції, котрий введемо на основі принципів інженерії програмного забезпечення – інкапсуляції та багаторівневого подання.
Інкапсуляція в загальному випадку – це процес створення оболонки навколо тих чи інших речовин. Оболонка називається капсулою, а речовини в капсулі є інкапсульованими й характеризуються високими внутрішніми (cohesion) та низькими зовнішніми (coupling) зв’язками. Інкапсуляція у програмуванні – це процес, у результаті виконання якого „речовина” програм, кодованих тією чи іншою мовою програмування, агрегується, утворюючи капсули. Вони можуть використовуватися у програмуванні як єдині у певному розумінні закінчені частини програм. Цей процес, як побачимо далі, регламентований.
У програмі роль інкапсульованої „речовини” відіграють її компоненти, наприклад оператори, підпрограми. Утворення капсули навколо компонентів програми дає змогу досягти таких цілей:
– маніпулювати при написанні, налагодженні та розумінні програм капсулами, розглядаючи їх як закінчені частини;
– зазначити метод програмування що регламентує використання капсул;
– зазначити значення оброблювані капсулою;
– обмежувати допуск до компонентів розміщених у капсулі;
– приховувати деталі реалізації компонентів, розміщених у капсулі;
– використовувати капсули для побудови інших капсул;
Побудова капсули відбувається агрегуванням необхідних частин програми та створення оболонки (інтерфейсу), що забезпечує правильне застосування капсули.
При створення або повторному використанні капсул перед програмістом постають три питання. По-перше, в якому разі (для реалізації яких проектних рішень – дій) може застосовуватись та чи інша капсула (яка концепція капсули)? По-друге, якою має бути капсула (яка будова, устрій капсули)? По-третє, як пов’язується капсула з оточенням (який контекст капсули)?
Відповідь на перше запитання ґрунтується на використанні знань про розв’язувану задачу і таких фундаментальних понять: тип, абстракція, перелічування, вибір, математична індукція. Відповідь на друге питання враховує якість капсули, що є виявленням її функціональних і конструктивних характеристик, які визначають відповідність капсули вимогам, котрі висуваються до неї згідно з її призначенням. Нарешті, відповідь на третє питання дає вказівку щодо інтерфейсу, методу та місця застосування капсули та відбиває її зв'язок із середовищем – як капсула залежить від будови та концепції інших капсул програми.
Програміст створюючи або повторно багатократного використовуючи заготовлені капсули, застосовує їх згідно з методом програмування та реалізовує проектні рішення, отримані в попередніх фазах життєвого циклу програми, що становить частину процесів конструювання програм.
Капсулу застосовувану згідно з методом програмування називатимемо програмною конструкцією. Щоб характеризувати відомі нині програмні конструкції, а також з’ясувати, які значення вони обробляють та в чому полягають методи конструювання (програмування) програм із них, скористаємося ще одним принципом інженерії програмного забезпечення багаторівневим поданням.
Багаторівневе подання програм. В інженерії програмного забезпечення завдяки застосуванню абстракції значного поширення набули рівні подання програмного забезпечення, які, скажімо, відповідають фазам життєвого циклу або в рамках однієї фази відбивають різні погляди на програмне забезпечення [3]. Наприклад, програма може розглядатися як текст, сукупність взаємозв’язаних компонентів (операторів) або послідовність одиниць і нулів.
5.2. Рівні інкапсуляції
Застосовуючи принцип інкапсуляції на рівнях подання структури програми, які відповідають різним ступеням абстракції програмного забезпечення, підходимо до поняття рівня інкапсуляції [64]. Скориставшись цим поняттям, можна з’ясувати типи програмних конструкцій та відповідні методи конструювання програм.
Нині можна виокремити шість рівнів інкапсуляції та стільки ж типів програмних конструкцій (табл.5.1):
Таблиця 5.1. Рівні інкапсуляції
Рівень інкапсуляції | Інкапсульо-вувані частини програм | Утворювана капсула (конструктція) | Метод програмування | Засоби програмування та механізми |
Лексичний | Символи алфавіту мови | Лексема | Правила утворення лексем (позначень) і виразів із них | Мова програмування, оператор присвоювання |
Операторний | Лексеми | Оператор структурний | Структурне програмування | 2 GL*, 3GL, операторний базис вибору, повторення та зчленування, блок |
Підпрограмний | Оператори | Підпрограма (процедура, функція, макрос) | Підпрограмне програмування | 3 GL, бібліотеки макросів, процедур та функцій, незалежна компіляція, об’єкт |
Модульний | Оператори опису, макроси процедури, функції | Модуль (пакет) | Модульне програмування | 3 GL, середовище програмування, механізми, видимості інформації, роздільна компіляція |
Класний | Оператори опису, макроси процедури, функції | Клас | Об’єктно-орієнтоване програмування | 4 GL, класи об’єктів, механізми, успадкування поліфоризму |
Мегамодуль-ний | Програми, модулі, класи (знання подовження керування) | Мегамодуль | Мегапрограму-вання | 5 GL (MPL**), колекції мегамодулів, гетерогенний інтерфейс |
* GL - generation of languages
** MPL - megamodule program language.
– лексичній рівень – інкапсулюються символи алфавіту мови, утворюючи капсули, які називають лексемами (позначення та зображення об’єктів програми);
– операторний рівень – інкапсулюються лексеми та побудовані з них вирази, утворюючи капсули, які називають операторами (описи об’єктів програми, визначення типів і структурні оператори);
– підпрограмний рівень – інкапсулюються оператори, утворюються капсули, які називають підпрограмами (макроси, процедури та функції); застосовують останні два типи – процедури та функції – на основі поняття блока та механізму незалежної компіляції;
– модульний рівень – інкапсулюються оператори опису об’єктів програми, визначення типів і підпрограми, утворюючи капсули, які називають модулями, або пакетами, і застосовують на основі механізмів видимості інформації та розділеної компіляції;
– класний рівень – інкапсулюються оператори опису та визначення типів і підпрограми, утворюючи капсули, які називають класами й застосовують на основі механізмів успадкування та поліморфізму;
– мегамодульний рівень – інкапсулюються знання, поводження, управління у вигляді об’єднань модулів, класів, утворюючи капсули, які називають мегамодулями.
Ступінь абстрагування та розуміння програми підвищується від лексичного рівня до мегамодульного. Кожному рівню інкапсуляції відповідає свій тип капсул, правила утворення та дисципліна їх використання в конструюванні програм (метод програмування).
Розглянуті капсули являють собою динамічні (виконувані) складові програм, мета виконання яких полягає в обробці значень. Зв'язок програмних конструкцій із оброблюваними значеннями ілюструє табл.5.2.
Таблиця 5.2.
Зв'язок програмних конструкцій з оброблюваними значеннями
Рівень інкапсуляції | Програмні конструкції | Типи оброблюваних значень | Оброблювані значення | Характер конструкції |
Лексичний | Лексеми | Наперед визначені, та визначувані скалярні й спеціальні (покажчик посилання) | Наперед визначених типів | «Ланка» |
Операторний | Структурні оператори | Визначувані структурні типи (складані) | Масиви, структури, багатозначні | |
Підпрограмний | Макроси, процедури, функції в програмі і структурі (записи) | Визначувані абстрактні (структури даних), об’єкти | Списки, стекі, дерево, таблиці і т.п., об’єкти на їх основі | «Механізм» |
Модульний | Модулі | |||
Класний | Класи | |||
Мегамодульний | Мегамодулі | Інтенсіональні складові бази даних, знань, репозитарій, (схема) | Екстенсіональна складова баз даних | «Машина» |
5.3. Питання для самоперевірки
1.Поясніть сутність принципу інкапсуляції.
2.Яких цілей дає змогу досягти утворення капсул навколо частин програми.
3.Що таке програмна конструкція?
4.Поясніть сутність принципу багаторівневого подання. Наведіть приклад з програмного забезпечення.
5.У чому полягає сутність рівня інкапсуляції?
6.Назвіть рівні інкапсуляції та надайте їм характеристику.
7.Наведіть історичну довідку про конструктивний підхід в програмуванні.
8.Розв’язання яких задач ґрунтується на понятті програмної конструкції.
9.Наведіть та поясніть зв’язок програмних конструкцій з оброблюваними значеннями.
Тести
1. Капсула застосовувана згідно з методом програмування називається:
а) програмною конструкцією;
б) програмною задачею;
в) програмним об’єктом.
2. Скільки рівнів інкапсуляції існує нині:
а) 7;
б) 6;
в) 5.
3. Лексеми та побудовані з них вирази інкапсулюються:
а) на операторно му рівні;
б) на лексичному рівні;
в) на модульному рівні.
4. На класному рівні інкапсулюються:
а) оператори опису та визначення;
б) підпрограми;
в) обидві відповіді правильні.
Дата публикования: 2014-11-26; Прочитано: 369 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!