- •3.Об’єктно-орієнтований підхід до розробки програмного забезпечення. Дайте визначення поняття класу, об’єкту, поля, методу. З чого складається життєвий цикл об’єкту?
- •4.Опишіть внутрішню структуру об’єкта. Що таке інформація про тип під час виконання rtti і як вона використовується?
- •6.В чому полягає принцип спадковості? Що таке одинична та множинна спадковості? Як реалізується принцип одиничної та множинної спадковості в об’єктно-орієнтованих мовах програмування?
- •12. Поняття виключної ситуації, наведіть приклади виключних ситуацій. Як реалізуються виключні ситуації та їх обробка в об’єктно-орієнтованих мовах програмування?
- •13. Основні етапи і задачі об’єктно-орієнтованого аналізу предметної області. Які артефакти розробляються на етапі оОаналізу?
- •14. Визначення прецеденту. Що таке сценарій прецеденту та правила його опису?
- •16. Основні етапи і задачі об’єктно-орієнтованого проектування. Які артефакти розробляються на етапі оОпроектування?
- •18.Як під час проектування здійснюється розподіл обов’язків між класами? що таке шаблони проектування? Наведіть приклади шаблонів з прикладами їх застосування.
- •19. Охарактеризуйте мову uml та її призначення. Які діаграми для подання моделі складної системи надає uml, дайте коротку характеристику діаграм. Для чого на діаграмах uml застосовується мова ocl?
- •20. Призначення та правила побудови діаграми прецедентів uml: типи зв’язків між прецедентами(з прикладами), зображення на діаграмі прецедентів ролей (акторів).
- •24. Різновид діаграм реалізації. Що спільного і в чому різниця в uml діаграмах компонентів та розгортання?
- •26. Призначення компонувальника та завантажувача. В чому різниця між статичним та динамічним компонуванням бібліотек? Дайте порівняльну характеристику програмних модулів та динамічних бібліотек.
- •30. Як організувати багато потокове застосування? Які проблеми можуть виникнути під час взаємодії потоків і які методи їх уникнення?
1. Охарактеризуйте основні етапи процесу розробки програмного забезпечення (від виникнення ідеї розробки до прийняття рішення про виведення з експлуатації). Які програмні системи призначені для автоматизації процесу розробки програмного забезпечення на різних етапах?
Основні етапи процесу розробки програмного забезпечення:
Виникнення і дослідження ідеї-це класичний процес має наступні дії: виникнення та первинне дослідження ідеї; детальне дослідження ідеї, вироблення концепції, постановка задачі; експертиза ідеї фахівцями, прийняття рішення про початок процесу планування. Тут використовують пошукові інформаційні системи (google, yandex ...), системи пошуку рішень.
Управління - цей процес триватиме майже весь життєвий цикл програмного продукту, одним з найважливіших дій управління є планування, яке починається слідом за прийняттям рішення, про те, що проект потрібно реалізувати. Тут використовують 3 групи інструментів-системи управління проектами (Microsoft project, time line), організаційні засоби (електронна пошта, електронний календар ...), засоби оцінки якості (metricate)
Аналіз вимог і проектування двох тісно пов'язаних процесу, вони виконують загальну задачу , результатом кіт має стати чітке уявлення про систему на основі якого буде створено програмний код. Аналіз вимог це процес життєвого циклу програми під час якого вимоги замовника уточнюються, формалізується і документуються. Проектування - це процес життєвого циклу програми під час кіт досліджуються її структура та взаємозв'язки елементів. Проектування, як правило, є ітераційний процесом. Проектування та аналіз вимог можуть різнитися різними способами декомпозиції систем-структурна декомпозиція (розглядає структуру системи в термінах ієрархії функцій та передачі інформації) і об'єктна декомпозиція (розглядає структуру об'єктів та зв'язків між ними, а також поведінка системи в термінах обміну повідомлень між об'єктами). Тут використовують при структурному підході (Erwin, Oracle Designer), при об'єктно-орієнтованому підході (Rational Rose ...)
Програмування (реалізація). Тут використовують С #, c + +, Delphi, java
Тестування та налагодження. Тестування - це процес виконання програми з метою виявлення факту наявності помилок. Налагодження - це процес локалізації та усунення помилок. Тестування починається з розробки безлічі тестів і їх виконання на основі однієї з обраних методик. Після порівняння результатів з еталонними починається або діагностика проблеми або оцінка достатності повноти тестування. Тут використовують Prodelphi, rational purecoverage
Запровадження програми в дію - істотно залежить від того чи була ця розробка для конкретного замовника або вона є продуктом розрахованим на широкого користувача. Існує 3 основних способи доставки програми до користувача-індивідуальна доставка, коробкова доставка, доставка через Інтернет. Тут використовують Create install, InstallShild
Експлуатація та супровід. Під супроводом розуміють всі дії щодо підвищення надійності програмного продукту після завершення налагодження й розробку удосконалення версій. Основні класи задач вирішуються на етапі супроводу: адаптація, як правило модифікація функцій, вдосконалення, звичайно додавання нових функцій, корекція (або виправлення помилок), попередження проблем, які можуть виникнути в майбутньому. Тут використовують системи деінсталяції.
Закінчення експлуатації. Цей процес не складний, але вимагає ретельно організованої підготовки, зазвичай процес починається з того, що користувачі повідомляють про припинення супроводу, з цього моменту користувачі можуть продовжувати використовувати продукт до тих пір, поки не настане його моральне старіння, дуже часто неможливість вирішити хоча б одну з 4 завдань супроводу призводить до того, що від продукту доводиться відмовитися.
2. Структурний підхід до розробки програмного забезпечення. Низхідне та висхідне проектування та програмування. Використання заглушок.
Цей підхід полягає в декомпозиції задачі на функції або процеси (скласти звіт, додати ресурси ...).
Структурний підхід до програмування охоплює всі стадії розробки проекту: специфікацію, проектування, власне програмування та тестування. Ключовими ідеями структурного підходу є спадна розробка, структурний програмування та спадної тестування.
I етап. Створення будь-якої програми починається з постановки задачі. Спочатку завдання ставиться в термінах предметної області, і необхідно перевести її в терміни більш близькі до програмування. Постановка задачі завершується створенням технічного завдання, а потім зовнішньої специфікації програми, що включає в себе:
опис вихідних даних та результатів (типи, формати, точність, спосіб передачі, обмеження); опис завдання, що реалізується програмою; спосіб звернення до програми;
опис можливих аварійних ситуацій і помилок користувача. Таким чином, програма розглядається як чорний ящик, для якого визначена функція і вхідні і вихідні дані.
II етап. Розробка внутрішніх структур даних. Більшість алгоритмів залежить від того, яким чином організовані дані, тому інтуїтивно зрозуміло, що починати проектування програми треба не з алгоритмів, а з розробки структур, необхідних для представлення вхідних, вихідних і промежут6чних даних. При цьому беруться до уваги багато факторів, наприклад, обмеження на розмір даних, необхідна точність, вимоги до швидкодії програми. Структури даних можуть бути статичним або динамічними.
III етап. Проектування (визначення загальної структури та взаємодії модулів). На цьому етапі застосовується технологія спадної проектування програми, основна ідея якого теоретично проста: розбиття задачі на під задачі меншої складності, які можна розглядати окремо. При цьому використовується метод покрокової деталізації. Дуже важливою на цьому етапі є специфікація інтерфейсів, тобто способів взаємодії під задач. Для кожної під задачі складається зовнішня специфікація, аналогічна наведеній вище. На цьому ж етапі вирішуються питання розбиття програми на модулі, головний критерій - мінімізація їх взаємодії. Одна задача може реалізовуватися за допомогою декількох модулів і навпаки, в одному модулі може вирішуватися кілька завдань. На більш низький рівень проектування переходять тільки після закінчення проектування верхнього рівня. Алгоритми записують в узагальненій формі - наприклад, словесної, у вигляді узагальнених блок-схем або іншими способами. На етапі проектування слід враховувати можливість майбутніх модифікацій програми і прагнути проектувати програму таким чином, щоб вносити зміни було можливо простіше. Процес проектування є ітераційний, оскільки в програмах реального розміру неможливо продумати всі деталі з першого разу.
IV етап. Структурне програмування. Процес програмування також організується за принципом «зверху вниз»: спочатку кодуються модулі самого верхнього рівня і складаються тестові приклади для їх налагодження, при цьому на місці ще не написаних модулів наступного рівня ставляться «заглушки» - тимчасові програми. «3аглушкі» в простому випадку просто видають повідомлення про те, що їм передано управління, а потім повертають його в викликає модуль. В інших випадках «заглушка» може видавати значення, задані заздалегідь або обчислених за спрощеним алгоритмом. Таким чином, спочатку створюється логічний скелет програми, який потім обростає плоттю коду. Здавалося б, більш логічно застосовувати до процесу програмування висхідній технологію - написати і налагодити спочатку модулі нижнього рівня, а потім поєднувати їх у більш великі фрагменти, але цей підхід має ряд недоліків. По-перше, в процесі кодування верхнього рівня можуть бути розкриті ті чи інші труднощі проектування більш низьких рівнів програми. По-друге, для налагодження кожного модуля, а потім більш великих фрагментів програми потрібно щоразу складати свої тестові приклади, і програміст часто змушений імітувати то оточення, в якому має працювати модуль. Спадна ж технологія програмування забезпечує природний порядок створення тестів - можливість спадної налагодження, яка розглянута далі.
V етап. Спадної тестування. Проектування та програмування обов'язково повинні супроводжуватися написанням набору тестів - перевірочних вихідних даних та відповідних їм наборів еталонних реакцій. Ідея низхідного тестування передбачає, що до тестування програми приступають ще до того, як завершено її проектування. Це дозволяє раніше випробувати основні між модульні інтерфейси, а також переконатися в тому, що програма в основному задовольняє вимогам користувача. Тільки після того, як логічне ядро випробуване настільки, що з'являється впевненість у правильності реалізації основних інтерфейсів, приступають до кодуванню та тестування наступного рівня програми.
3.Об’єктно-орієнтований підхід до розробки програмного забезпечення. Дайте визначення поняття класу, об’єкту, поля, методу. З чого складається життєвий цикл об’єкту?
Цей підхід полягає в декомпозиції задачі на об'єкти або поняття (книга, каталог ...)
Ситуаційний підхід - реакція на якусь подію.
Об'єктно-орієнтована методологія (ООМ) включає в себе 3 частини - об'єктно-орієнтований аналіз (ООА), об'єктно-орієнтоване проектування (ООП) і об'єктно-орієнтоване програмування (ООР) - і використовується програмістами як засіб для подолання складності створюваних систем. Об'єктно-орієнтований підхід в рамках об'єктною парадигми (програмування в іменників) структурується в 4 етапу - аналіз, проектування, еволюція і модифікація - і являє собою послідовний ітеративний процес, який дозволяє безболісно вносити будь-які зміни у вже налагоджений програмний продукт і в якому результати одного з етапів можуть впливати на рішення, прийняті на попередніх.
У процесі проектування створюється деяка система, але спочатку необхідно визначити її потрібну поведінку. Цю мету і переслідує ООА - метод для ототожнювання важливих сутностей в завданнях реального світу для розуміння і пояснення того, як вони взаємодіють між собою. У загальному випадку ООА реалізується в три етапи - розробка інформаційних моделей, розробка моделей станів і розробка моделей процесів.
Фундаментальними поняттями ООР є поняття класу і об'єкту.
Об'єкт - відчутна сутність, що чітко виявляє свою поведінку. Кожний об'єкт характеризується властивостями (розмір, колір, смак і таке інше) та діями (ходить, їсть, сидить і таке інше). За збігом основних ознак ми можемо виділити групи об'єктів - класи.
Клас - це сукупність об'єктів одного типу, тобто схожих за своїми властивостями та призначенням. Іншими словами, кожен об'єкт є екземпляри певного класу.
З точки зору програмної реалізації об'єкт - це сукупність полів даних та методів (процедур або функцій) їх обробки. Таким чином, при описі програмного об'єкту ми задаємо перелік полів та описуємо заголовки методів. Полями класу є змінні оголошені всередині класу, вони призначені для зберігання даних під час роботи екземпляра класу (об'єкта). Обмежень на тип полів у класі не передбачено. Методом називається оголошена в класі процедура або функція, які використовується для роботи з полями і властивостями класу.
Життєвий цикл об'єкта складається з конструктора (для створення екземпляр об'єкту використовують спеціальний метод, який називається конструктором і має ім'я Create. Призначення конструктора Create:
• виділення пам'яті для об'єкта.
• ініціалізація полів об'єкту нулями), дій, які є реакцією на деякий подія. Ці дії виконує об'єкт за допомогою своїх методів і деструктор (деструктор Destroy не має параметрів та виконує такі дії:
• виклик методу CleanupInstance.
• виклик InstanceSize для визначення розміру об'єкту, що видаляється.
Найчастіше для знищення об'єкта використовується не сам деструктор, а метод Free, який також спадкується об'єктами від TObject. Цей метод спочатку перевіряє, чи не дорівнює покажчик на об'єкт NIL, якщо ні, то викликає деструктор цього об'єкту.)