
- •Основи програмної інженерії Тема 1. Поняття програмної інженерії. Вступ
- •Процес створення програмного забезпечення
- •Моделі технологічного процесу створення пз
- •Моделі процесу розробки по
- •Характеристики якісного пз
- •Тема 2. Види моделей систем. Поняття і класифікація вимог до програмної системи.
- •Способи запису специфікацій вимог.
- •Види моделей систем.
- •Мова моделювання uml.
- •Об'єктні моделі
- •Інструментальні case-засоби.
- •Тема 3. Поняття архітектурного проектування. Архітектурні моделі.
- •Архітектурний шаблон mvc.
- •Особливості шаблону mvc.
- •Модель проблемної сфери.
- •Тема 4. Важливі функціональні засоби мови c#. Автоматично реалізовані властивості.
- •Ініціалізатори об'єктів та колекцій.
- •Автоматичне виведення типу.
- •Анонімні типи.
- •Використання методів розширення Методи розширення
- •Застосування методів розширення до інтерфейсу
- •Створення фільтруючих методів розширення
- •Тема 5. Лямбда-вирази. Мова linq. Лямбда-вирази.
- •Мова linq.
- •Методи розширення linq.
- •Відкладені запити linq.
- •Тема 6. Створення слабо зв'язаних компонентів. Впровадження залежності.
- •Контейнери впровадження залежності.
- •Бібліотека Ninject.
- •Порядок роботи з Ninject.
- •Тема 7. Засоби доступу до даних. Технологія ado.Net.
- •Реалізація доступу до даних.
- •Робота з даними.
- •Тема 8. Тестування пз. Розробка через тестування. Автоматизоване тестування пз та його види.
- •Розробка через тестування. Робочий потік "червоний-зелений-рефакторинг".
- •Модель "організація.Дія.Твердження".
- •Використання бібліотеки Moq
- •Тема 9. Проектування інтерфейсу користувача. Інтерфейс користувача.
- •Переваги графічного інтерфейсу.
- •Процес проектування графічного інтерфейсу.
- •Принципи проектування інтерфейсів користувача.
- •Шаблони.
- •Тема 10. Основи інженерії вимог. Розробка вимог.
- •Формування і аналіз вимог.
- •Опорні точки зору.
- •Сценарії.
- •Атестація вимог.
- •Тема 11. Прототипування програмних систем. Поняття прототипування.
- •Переваги прототипування.
- •Види прототипування.
- •Технології швидкого прототипування.
- •Тема 12. Покомпонентна розробка. Компоненти і класи об'єктів.
- •Компоненти як постачальники послуг.
- •Рівні абстракції компонентів.
- •Вимоги до компонентів.
- •Тема 13. Шаблони проектування. Структурні шаблони.
- •Поняття шаблону проектування.
- •Основні елементи шаблону.
- •Механізми повторного використання.
- •Структурні шаблони проектування.
Структурні шаблони проектування.
У структурних патернах розглядається питання про те, як з класів та об'єктів утворюються більш великі структури. Структурні патерни рівня класу використовують успадкування для складання композицій з інтерфейсів і реалізацій. Простий приклад – використання множинного успадкування для об'єднання декількох класів в один. У результаті виходить клас, що володіє властивостями всіх своїх батьків. Особливо корисний цей патерн, коли потрібно організувати спільну роботу декількох незалежно розроблених бібліотек . Інший приклад патерну рівня класу-адаптер. У загальному випадку адаптер робить інтерфейс одного класу (який адаптується) сумісним з інтерфейсом іншого, забезпечуючи тим самим уніфіковану абстракцію різнорідних інтерфейсів. Це досягається за рахунок закритого спадкування адаптованості класу. Після цього адаптер висловлює свій інтерфейс в термінах операцій класу, що адаптується.
Замість композиції інтерфейсів або реалізацій структурні патерни рівня об'єкта компонують об'єкти для отримання нової функціональності. Додаткова гнучкість у цьому випадку пов'язана з можливістю змінити композицію об'єктів під час виконання, що неприпустимо для статичної композиції класів.
Прикладом структурного патерну рівня об'єктів є компонувальник. Він описує побудову ієрархії класів для двох видів об'єктів: примітивних і складових. Останні дозволяють створювати довільно складні структури з примітивних та інших складових об'єктів. У патерні заступник об'єкт бере на себе функції іншого об'єкта. У заступника є багато застосувань. Він може діяти як локальний представник об'єкту, що знаходиться в віддаленому адресному просторі. Або бути великим об'єктом, що завантажується на вимогу. Або обмежувати доступ до критично важливого об'єкту. Заступник вводить додатковий непрямий рівень доступу до окремих властивостей об'єкта. Тому він може обмежувати, розширювати або змінювати ці властивості.
Патерн пристосуванець визначає структуру для спільного використання об'єктів. Власники поділяють об'єкти, щонайменше, з двох причин: для досягнення ефективності та несуперечності. Пристосуванець акцентує увагу на ефективності використання пам'яті. У додатках, в яких бере участь дуже багато об'єктів, повинні знижуватися накладні витрати на зберігання. Значної економії можна добитися за рахунок розділення об'єктів замість їх дублювання. Але об'єкт може бути таким, що розділяється, тільки якщо його стан не залежить від контексту. У об'єктів-пристосуванців такої залежності немає. Будь-яка додаткова інформація передається їм у міру необхідності. У відсутність контекстних залежностей об'єкти-пристосуванці можуть легко розділятися.
Якщо патерн пристосуванець надає спосіб роботи з великою кількістю дрібних об'єктів , то фасад показує, як один об'єкт може представляти цілу підсистему. Фасад являє набір об'єктів і виконує свої функції, перенаправляючи повідомлення об'єктам, яких він представляє. Патерн міст відокремлює абстракцію об'єкта від його реалізації, так що їх можна змінювати незалежно.
Патерн декоратор описує динамічне додавання об'єктам нових обов'язків. Це структурний патерн, який рекурсивно компонує об'єкти з метою реалізації заздалегідь невідомого числа додаткових функцій. Наприклад, об'єкт-декоратор, що містить певний елемент користувацького інтерфейсу, може додати до нього оформлення у вигляді рамки або тіні або нову функціональність, наприклад можливість прокрутки або зміни масштабу. Два різних оформлення додаються шляхом простого вкладання одного декоратора в інший. Для досягнення цієї мети кожен об'єкт-декоратор повинен дотримуватися інтерфейсу свого компонента і перенаправляти йому повідомлення. Свої функції (скажімо, малювання рамки навколо компонента) декоратор може виконувати як до, так і після перенаправлення повідомлення.
Багато структурних патернів у тій чи іншій мірі пов'язані один з одним.