Professional Documents
Culture Documents
10 Lectures PDF
10 Lectures PDF
Архітектура програмного
забезпечення
Архітектурні стилі
виклику з поверненням
незалежних компонентів
• системи взаємодіючих процесів (Communicating Sequential
Processes)
Документування ПЗ
ВСТУП В
УНІФІКОВАНУ МОВУ МОДЕЛЮВАННЯ
(UML)
Основний недолік:
об'єднання тексту програми (її вихідного коду) з характеристиками
об'єкта автоматизації здійснюється тільки в свідомості програміста, а
документальний зв'язок між ними відсутній.
Структура UML
Структурні сутності
Клас Людина
Об'єкт
iРозрахунок
Замовник
“Документування програмного забезпечення
© Іванюк О.О., КСА, НУЛП, 2019
та шаблони проектування”
38
Структурні сутності. Кооперація (collaboration)
Обробка
замовлення
Примітка (comment)
Коментар до елементу
• Вони є зауваженнями, застосовуваними для опису,
пояснення і коментування будь-якого елементу моделі.
Передбачений один різновид пояснюючого предмета -
примітка.
• Примітка - символ для відображення обмежень і
зауважень, що приєднуються до елементу або сукупності
елементів.
Застосування взаємодії
Взаємодія на діаграмі
послідовності
Діаграма
Стан скінченного станів (скінченного
автомата автомата)
Відношення
Основні:
Залежність Асоціація
(dependency) (association)
Узагальнення Реалізація
(generalization) (realization)
Діаграми UML
Найчастіше застосовуються
діаграми позначені зеленим
кольором.
• Кожна з цих діаграм деталізує і конкретизує різні уявлення про моделі складної
системи в термінах мови UML.
• При цьому діаграма варіантів використання (функціонал, доступний
користувачам системи) являє собою найбільш загальну концептуальну модель
складної системи, яка є вихідною для побудови всіх інших діаграм.
• Діаграма класів (логічна модель даних системи, сутностей, з яких буде
будуватися БД), по своїй суті, логічна модель, що відображає статичні аспекти
структурної побудови складної системи.
• Діаграми кооперації та послідовностей (опис одного сценарію)
представляють собою різновиди логічної моделі, які відображають динамічні
аспекти функціонування складної системи.
• Діаграми скінченних автоматів або станів (відображення статусів об'єктів)
та діяльності (блок-схема) призначені для моделювання поведінки системи.
• І, нарешті, діаграми компонентів і розгортання служать для подання
фізичних компонентів складної системи і тому відносяться до її фізичної моделі.
Таким чином
• Основними компонентами діаграми варіантів використання
є:
– актори
– прецеденти
– відношення
Оплатити замовлення
кредитною карткою
Види відношень:
Ім’я класу *
- <атрибут-1> область
+ <атрибут-2> атрибутів
…
# <атрибут-n>
видимість - <операція-1>
# <операція-2> область
… сигнатури
+ <операція-m>
Person Person
+Employee 1.. *
work on
+Employer *
Company Company
Team Person
1 *
Building Room
1 *
class cls 15
Colledge Faculty
rule
- name - name
- address include 0..1
- phon e 1 1.. * + addInstructor()
+ removeInstructor()
work on
+ attestInst ruct ors() + getInstructor()
+ attestSt udents() : void + getAllInstructor() 1.. *
1.. * 1.. *
studied at
Шаблони в розробці
програмного забезпечення
Christopher Alexander
“Документування програмного забезпечення
© Іванюк О.О., КСА, НУЛП, 2019
та шаблони проектування”
7
Історія розвитку
Переваги шаблонів
Недоліки шаблонів
• Обмін temp = a;
значеннями: a = b;
b = temp;
while True:
• Безкінечний do_something()
цикл: for (;;){
do_something();}
• дубляж коду
• великі методи
• великі класи
• заздрість - клас надмірно використовує методи іншого класу
• порушення приватності - клас надмірно залежить від
деталей реалізації іншого класу
• порушення контракту - клас перевизначає метод, і при
цьому порушує його контракт (первісне призначення)
• лінивий клас - клас, який робить занадто мало
• довгі ідентифікатори
Класифікація патернів
Інверсія управління
та
впровадження залежностей
Ідея
Впровадження залежностей
(Dependency Injection)
class TodoRepository {
// other code
}
class TodoService {
TodoRepository todoRepository = new TodoRepository();
// other code
}
class Application {
public static void main(String[] args) {
TodoRepository todoRepository = new TodoRepository();
TodoService todoService = new TodoService(todoRepository);
}
}
“Документування програмного забезпечення
© Іванюк О.О., КСА, НУЛП, 2020
та шаблони проектування”
15
Приклад 1.
Впровадження залежності через set-метод
class TodoService {
TodoRepository todoRepository;
void setTodoRepository(TodoRepository todoRepository) {
this.todoRepository = todoRepository;
}
}
class Application {
public static void main(String[] args) {
TodoRepository todoRepository = new TodoRepository();
TodoService todoService = new TodoService();
todoService.setTodoRepository(todoRepository);
}
}
“Документування програмного забезпечення
© Іванюк О.О., КСА, НУЛП, 2020
та шаблони проектування”
16
Приклад 1.
Впровадження залежності через інтерфейс
class TodoService implements Consumer<TodoRepository> {
TodoRepository todoRepository;
@Override
public void accept(TodoRepository todoRepository) {
this.todoRepository = todoRepository;
}
}
class Application {
public static void main(String[] args) {
TodoRepository todoRepository = new TodoRepository();
TodoService todoService = new TodoService();
todoService.accept(todoRepository);
}
}
“Документування програмного забезпечення
© Іванюк О.О., КСА, НУЛП, 2020
та шаблони проектування”
17
Приклад 1.
Впровадження залежності через властивості
class TodoService {
TodoRepository todoRepository;
}
class Application {
public static void main(String[] args) {
TodoService todoService = new TodoService();
todoService.todoRepository = new TodoRepository();
}
}
1. Create С
IoC Container Object C
2. Create B, Object B
inject C
Object C
Object A
3. Create A,
inject B Object B
Object C
Dagger
Google Guice
PicoContainer
class ScheduleViewer
{
private ScheduleManager _scheduleManager = new ScheduleManager();
public void RenderSchedule()
{
_scheduleManager.GetSchedule();
// Do Something by render schedule...
}
}
interface IScheduleManager
{
Schedule GetSchedule();
}
ПОСИЛАННЯ
Шаблон MVC
Концепція MVC
View: Controller:
Бутерброд Продавець
User:
Ви
1) Одночасний розвиток
• Оскільки MVC розділяє різні компоненти програми,
розробники можуть працювати паралельно над різними
компонентами, не впливаючи і не блокуючи один одного.
• Наприклад, команда може розділити своїх розробників між
фронт-ендом і бек-ендом. Бек-енд розробники можуть
спроектувати структуру даних і те, як користувач взаємодіє з
ними, не вимагаючи завершення користувацького
інтерфейсу.
• І навпаки, розробники фронт-енду можуть спроектувати і
протестувати макет додатка ще до того, як структура даних
стане доступною.
Приклад застосування
MVC
ПОСИЛАННЯ
1. ASP.NET MVC 5
https://metanit.com/sharp/mvc5/1.1.php
2. MVC Framework Tutorial
https://www.tutorialspoint.com/mvc_framework/index.htm
Шаблони GRASP
Походження терміну
• Рішення: Коли запит надходить від об'єкта рівня UI, шаблон Controller
допомагає нам визначити, що це за перший об'єкт, який отримує
повідомлення від об'єктів рівня UI.
• Переваги:
- можна повторно використовувати цей клас контролера.
- можна використовувати для підтримки стану варіанта використання.
- може контролювати послідовність дій
class A class B
class A class B
• Якщо покласти цей обов'язок на клас “Sale", то будемо мати низьку ступінь
згуртованості і високий ступінь зв'язності (оскільки клас “Sale" повинен бути
пов'язаний з інтерфейсом реляційної бази даних).
SaleRepository
SaveObject()
UpdateObject()
“Документування програмного забезпечення © Іванюк О.О., Павельчак А.Г.,
та шаблони проектування” КСА, НУЛП, 2020
31
Indirection (Посередник)
• Приклад
• Приклад