Professional Documents
Culture Documents
Принципи проектування
Принципи проектування
ОСНОВИ
ПАТЕРНІВ
denis.rozganyaev@gmail.com (#9569)
26 ОСНОВИ ПАТЕРНІВ / Що таке патерн? #9569
Що таке патерн?
Патерн проектування — це типовий спосіб вирішення певної
проблеми, що часто зустрічається при проектуванні архіте-
ктури програм.
denis.rozganyaev@gmail.com (#9569)
27 ОСНОВИ ПАТЕРНІВ / Що таке патерн? #9569
Класифікація патернів
Патерни відрізняються за рівнем складності, деталізації та
охоплення проектованої системи. Проводячи аналогію з
будівництвом, ви можете підвищити безпеку на перехре-
сті, встановивши світлофор, а можете замінити перехрестя
цілою автомобільною розв’язкою з підземними переходами.
denis.rozganyaev@gmail.com (#9569)
28 ОСНОВИ ПАТЕРНІВ / Що таке патерн? #9569
denis.rozganyaev@gmail.com (#9569)
29 ОСНОВИ ПАТЕРНІВ / Що таке патерн? #9569
denis.rozganyaev@gmail.com (#9569)
30 ОСНОВИ ПАТЕРНІВ / Навіщо знати патерни? #9569
denis.rozganyaev@gmail.com (#9569)
#9569
ПРИНЦИПИ
ПРОЕКТУВАННЯ
denis.rozganyaev@gmail.com (#9569)
32 ПРИНЦИПИ ПРОЕКТУВАННЯ / Якості хорошої архітектури #9569
denis.rozganyaev@gmail.com (#9569)
33 ПРИНЦИПИ ПРОЕКТУВАННЯ / Повторне використання коду #9569
1
Наведу цитату Еріха Гамми , одного з першовідкривачів
патернів, про повторне використання коду та ролі патернів
у ньому.
denis.rozganyaev@gmail.com (#9569)
34 ПРИНЦИПИ ПРОЕКТУВАННЯ / Розширюваність #9569
„
рни дозволяють повторно використовувати ідеї та концепції
у відриві від конкретного коду.
Розширюваність
Зміни часто називають головним ворогом програміста.
denis.rozganyaev@gmail.com (#9569)
35 ПРИНЦИПИ ПРОЕКТУВАННЯ / Розширюваність #9569
denis.rozganyaev@gmail.com (#9569)
36 Базові принципи #9569
Базові принципи
проектування
Що таке хороший дизайн? За якими критеріями його оціню-
вати, і яких правил дотримуватися при розробці? Як забе-
зпечити достатній рівень гнучкості, зв’язаності, керованості,
стабільності та зрозумілості коду?
denis.rozganyaev@gmail.com (#9569)
37 Базові принципи / Інкапсулюйте те, що змінюється #9569
denis.rozganyaev@gmail.com (#9569)
38 Базові принципи / Інкапсулюйте те, що змінюється #9569
1 method getOrderTotal(order) is
2 total = 0
3 foreach item in order.lineItems
4 total += item.price * item.quantity
5
6 if (order.country == "US")
7 total += total * 0.07 // US sales tax
8 else if (order.country == "EU"):
9 total += total * 0.20 // European VAT
10
11 return total
denis.rozganyaev@gmail.com (#9569)
39 Базові принципи / Інкапсулюйте те, що змінюється #9569
1 method getOrderTotal(order) is
2 total = 0
3 foreach item in order.lineItems
4 total += item.price * item.quantity
5
6 total += total * getTaxAmount(order.country)
7
8 return total
9
10 method getTaxAmount(country) is
11 if (country == "US")
12 return 0.07 // US sales tax
13 else if (country == "EU")
14 return 0.20 // European VAT
15 else
16 return 0
denis.rozganyaev@gmail.com (#9569)
40 Базові принципи / Інкапсулюйте те, що змінюється #9569
denis.rozganyaev@gmail.com (#9569)
41 Базові принципи / Програмуйте на рівні інтерфейсу #9569
denis.rozganyaev@gmail.com (#9569)
42 Базові принципи / Програмуйте на рівні інтерфейсу #9569
Приклад
denis.rozganyaev@gmail.com (#9569)
43 Базові принципи / Програмуйте на рівні інтерфейсу #9569
denis.rozganyaev@gmail.com (#9569)
44 Базові принципи / Програмуйте на рівні інтерфейсу #9569
denis.rozganyaev@gmail.com (#9569)
45 Базові принципи / Програмуйте на рівні інтерфейсу #9569
denis.rozganyaev@gmail.com (#9569)
46 Базові принципи / Віддавайте перевагу композиції перед спадкуванням #9569
denis.rozganyaev@gmail.com (#9569)
47 Базові принципи / Віддавайте перевагу композиції перед спадкуванням #9569
Приклад
denis.rozganyaev@gmail.com (#9569)
48 Базові принципи / Віддавайте перевагу композиції перед спадкуванням #9569
denis.rozganyaev@gmail.com (#9569)