Download - Design Rules And Principles
![Page 1: Design Rules And Principles](https://reader033.vdocuments.mx/reader033/viewer/2022051412/54c2e52a4a7959ad5c8b45dd/html5/thumbnails/1.jpg)
Базовые правила и принципы Базовые правила и принципы проектирования ПОпроектирования ПОЕвгений Кривошеев[email protected]
![Page 2: Design Rules And Principles](https://reader033.vdocuments.mx/reader033/viewer/2022051412/54c2e52a4a7959ad5c8b45dd/html5/thumbnails/2.jpg)
О вашем инструктореО вашем инструкторе
Имя:Евгений Кривошеев
Статусы:SCJP, SCWCD, SCBCD, BEA WLS CA, IBM WAS CA
Контакты:[email protected]
2
![Page 3: Design Rules And Principles](https://reader033.vdocuments.mx/reader033/viewer/2022051412/54c2e52a4a7959ad5c8b45dd/html5/thumbnails/3.jpg)
Цели семинараЦели семинара
Семинар призван систематизировать базовые правила и принципы проектирования ПО
Представленные базовые принципы необходимы для понимания более сфокусированных техник и приемов - рефакторинга и шаблонов проектирования
3
![Page 4: Design Rules And Principles](https://reader033.vdocuments.mx/reader033/viewer/2022051412/54c2e52a4a7959ad5c8b45dd/html5/thumbnails/4.jpg)
Цели семинараЦели семинара
Данный семинар – вводный, ~ 3 мин на принцип или правило
В дальнейшем будет разработан полноценный курс
4
![Page 5: Design Rules And Principles](https://reader033.vdocuments.mx/reader033/viewer/2022051412/54c2e52a4a7959ad5c8b45dd/html5/thumbnails/5.jpg)
Необходимая подготовкаНеобходимая подготовка
Иметь опыт разработки на одном из ООП-языков программирования
Понимать ключевые концепции ООП
5
Слушатели должны:
![Page 6: Design Rules And Principles](https://reader033.vdocuments.mx/reader033/viewer/2022051412/54c2e52a4a7959ad5c8b45dd/html5/thumbnails/6.jpg)
Организация обученияОрганизация обучения
Время начала и конца занятий Перерывы
6
![Page 7: Design Rules And Principles](https://reader033.vdocuments.mx/reader033/viewer/2022051412/54c2e52a4a7959ad5c8b45dd/html5/thumbnails/7.jpg)
Конференции УЦ Конференции УЦ LuxoftLuxoft
Конференции (www.soft-labs.ru): 26 сентября, Киев: TEST Labs 2009,
программа сформирована, регистрация участников
17 ноября, Москва: Req Labs 2009, открыта регистрация докладчиков
15 декабря, Москва: Arch Labs 2009, открыта регистрация докладчиков
7
![Page 8: Design Rules And Principles](https://reader033.vdocuments.mx/reader033/viewer/2022051412/54c2e52a4a7959ad5c8b45dd/html5/thumbnails/8.jpg)
Ближайшие занятия в ШколахБлижайшие занятия в Школах
Расписание: Класс руководителя группы разработки.
Основные курсы (24.08.2009-15.09.2009) Класс менеджера проектов. Основы
управления проектами (24.08.2009-17.09.2009)
Класс тест-дизайнера. Дополнительные курсы (27.08.2009-11.09.2009)
Класс java-разработчика. Разработка на базе платформы JavaSE. Экспертный уровень. (31.08.2009-30.09.2009)http://www.luxoft-training.ru/timetable
8
![Page 9: Design Rules And Principles](https://reader033.vdocuments.mx/reader033/viewer/2022051412/54c2e52a4a7959ad5c8b45dd/html5/thumbnails/9.jpg)
План семинараПлан семинара
9
![Page 10: Design Rules And Principles](https://reader033.vdocuments.mx/reader033/viewer/2022051412/54c2e52a4a7959ad5c8b45dd/html5/thumbnails/10.jpg)
ВведениеВведение
Наследование Полиморфизм
10
Ключевые понятия ООП-проектирования (общеизвестные)
![Page 11: Design Rules And Principles](https://reader033.vdocuments.mx/reader033/viewer/2022051412/54c2e52a4a7959ad5c8b45dd/html5/thumbnails/11.jpg)
ВведениеВведение
Responsibility (ответственность) Intention (намерение) Coupling (связность) Cohesion
(сцепленность, сфокусированность) Granularity
(гранулярность, детальность)
11
Ключевые понятия ООП-проектирования (менее известные)
![Page 12: Design Rules And Principles](https://reader033.vdocuments.mx/reader033/viewer/2022051412/54c2e52a4a7959ad5c8b45dd/html5/thumbnails/12.jpg)
ВведениеВведение
Ответственность – решаемая классом задача из предметной области Функциональная задача Инкапсуляция данных
Чаще этот термин применяется для классов
12
Responsibility
![Page 13: Design Rules And Principles](https://reader033.vdocuments.mx/reader033/viewer/2022051412/54c2e52a4a7959ad5c8b45dd/html5/thumbnails/13.jpg)
ВведениеВведение
Намерение – решаемая разработчиком задача
Чаще этот термин применяется для методов
13
Intention
![Page 14: Design Rules And Principles](https://reader033.vdocuments.mx/reader033/viewer/2022051412/54c2e52a4a7959ad5c8b45dd/html5/thumbnails/14.jpg)
ВведениеВведение
Связность – метрика, характеризующая степень зависимости классов друг от друга
Loosely coupled vs. Tightly coupled Классы могут быть связаны
(coupled) различными образами: Зависимые По управлению По данным 14
Coupling
![Page 15: Design Rules And Principles](https://reader033.vdocuments.mx/reader033/viewer/2022051412/54c2e52a4a7959ad5c8b45dd/html5/thumbnails/15.jpg)
ВведениеВведение
Сцепленность (Сфокусированность) – метрика, характеризующая узость ответственности класса
Low cohesion vs. High cohesion Классы могут иметь различную
сфокусированность (cohesion): По функциональности По данным 15
Cohesion
![Page 16: Design Rules And Principles](https://reader033.vdocuments.mx/reader033/viewer/2022051412/54c2e52a4a7959ad5c8b45dd/html5/thumbnails/16.jpg)
ВведениеВведение
Гранулированность (Детальность) – метрика, характеризующая способ реализации намерений
Fine-grained vs. Coarse-grained Чаще этот термин применяется
для интерфейсов, где намерение выражается методом
16
Granularity
![Page 17: Design Rules And Principles](https://reader033.vdocuments.mx/reader033/viewer/2022051412/54c2e52a4a7959ad5c8b45dd/html5/thumbnails/17.jpg)
ВведениеВведение
Наследование Делегирование
17
Инструменты code reuse в ООП
![Page 18: Design Rules And Principles](https://reader033.vdocuments.mx/reader033/viewer/2022051412/54c2e52a4a7959ad5c8b45dd/html5/thumbnails/18.jpg)
ВведениеВведение
Brian Foote and William F. Opdyke. Lifecycle and refactoring patterns that support evolution and reuse, 1995(отдельно и в рамках книги Pattern Languages of Program Design vol. 1)
Stefan Roock. Refactoring in Large Software, 2006
Martin Fowler. Refactoring: Improving the Design of Existing Code, 1999
18
Литературные источники семинара
![Page 19: Design Rules And Principles](https://reader033.vdocuments.mx/reader033/viewer/2022051412/54c2e52a4a7959ad5c8b45dd/html5/thumbnails/19.jpg)
План семинараПлан семинара
19
![Page 20: Design Rules And Principles](https://reader033.vdocuments.mx/reader033/viewer/2022051412/54c2e52a4a7959ad5c8b45dd/html5/thumbnails/20.jpg)
Design RulesDesign Rules
20
Литературные источники
![Page 21: Design Rules And Principles](https://reader033.vdocuments.mx/reader033/viewer/2022051412/54c2e52a4a7959ad5c8b45dd/html5/thumbnails/21.jpg)
Design RulesDesign Rules
21
Design Rules
http://www.laputan.org/drc/drc.html
![Page 22: Design Rules And Principles](https://reader033.vdocuments.mx/reader033/viewer/2022051412/54c2e52a4a7959ad5c8b45dd/html5/thumbnails/22.jpg)
Design RulesDesign Rules
В дальнейшем обсуждении мы рассмотрим не дословный перевод правил проектирования, а расширенные современные трактовки
Важно помнить, что эти правила хоть и распространенные, но контекстные, т.е. их применимость следует обосновывать 22
Design Rules
![Page 23: Design Rules And Principles](https://reader033.vdocuments.mx/reader033/viewer/2022051412/54c2e52a4a7959ad5c8b45dd/html5/thumbnails/23.jpg)
Design RulesDesign Rules
Используйте непротиворечивые имена методов [и свойств]
Непротиворечивость здесь – это одинаковые имена для одинаковых намерений
В книге [MF] есть аналогичный smell/refactoring
23
DR1. Use Consistent NamesDR1. Recursion introduction
![Page 24: Design Rules And Principles](https://reader033.vdocuments.mx/reader033/viewer/2022051412/54c2e52a4a7959ad5c8b45dd/html5/thumbnails/24.jpg)
Design RulesDesign Rules
Избегайте смешивания бизнес-логики и логики выбора/ветвления
В книге [MF] есть аналогичный smell/refactoring
24
DR2. Eliminate Case Analysis
![Page 25: Design Rules And Principles](https://reader033.vdocuments.mx/reader033/viewer/2022051412/54c2e52a4a7959ad5c8b45dd/html5/thumbnails/25.jpg)
Design RulesDesign Rules
Уменьшайте число аргументов/параметров
В книге [MF] есть аналогичный smell/refactoring
25
DR3. Reduce The Number Of Arguments
![Page 26: Design Rules And Principles](https://reader033.vdocuments.mx/reader033/viewer/2022051412/54c2e52a4a7959ad5c8b45dd/html5/thumbnails/26.jpg)
Design RulesDesign Rules
Уменьшайте объем методов В книге [MF] есть аналогичный
smell/refactoring
26
DR4. Reduce The Size Of Methods
![Page 27: Design Rules And Principles](https://reader033.vdocuments.mx/reader033/viewer/2022051412/54c2e52a4a7959ad5c8b45dd/html5/thumbnails/27.jpg)
Иерархию наследования стоит проектировать глубокой и узкой
Design RulesDesign Rules
27
DR5. Class Hierarchies Should Be Deep And Narrow
далее
![Page 28: Design Rules And Principles](https://reader033.vdocuments.mx/reader033/viewer/2022051412/54c2e52a4a7959ad5c8b45dd/html5/thumbnails/28.jpg)
Design RulesDesign Rules
28
DR5. Class Hierarchies Should Be Deep And Narrow
vs
![Page 29: Design Rules And Principles](https://reader033.vdocuments.mx/reader033/viewer/2022051412/54c2e52a4a7959ad5c8b45dd/html5/thumbnails/29.jpg)
Design RulesDesign Rules
На вершине иерархии наследования стоит размещать абстракцию
29
DR6. The Top Of The Class Hierarchy Should Be Abstract
vs
![Page 30: Design Rules And Principles](https://reader033.vdocuments.mx/reader033/viewer/2022051412/54c2e52a4a7959ad5c8b45dd/html5/thumbnails/30.jpg)
Design RulesDesign Rules
Стоит минимизировать прямой доступ к переменным классов и экземпляров
Encapsulation aka Hiding В книге [MF] есть аналогичный
smell/refactoring
30
DR7. Minimize Access to Variables
![Page 31: Design Rules And Principles](https://reader033.vdocuments.mx/reader033/viewer/2022051412/54c2e52a4a7959ad5c8b45dd/html5/thumbnails/31.jpg)
Design RulesDesign Rules
Наследники должны быть специализациями базовых классов
Специализация – отношение «IS-A», «является»
В книге [MF] есть аналогичный smell/refactoring (Refused Bequest)
31
DR8. Subclasses Should Be Specializations
![Page 32: Design Rules And Principles](https://reader033.vdocuments.mx/reader033/viewer/2022051412/54c2e52a4a7959ad5c8b45dd/html5/thumbnails/32.jpg)
Design RulesDesign Rules
Разбивайте большие классы В книге [MF] есть аналогичный
smell/refactoring
32
DR9. Split Large Classes
![Page 33: Design Rules And Principles](https://reader033.vdocuments.mx/reader033/viewer/2022051412/54c2e52a4a7959ad5c8b45dd/html5/thumbnails/33.jpg)
Design RulesDesign Rules
В случае серьезной разницы в реализации метода двумя «братьями» стоит задуматься о целесообразности описания этого метода в их «отце»
Потенциально можно вынести этот метод в иной класс (делегировать)
33
DR10. Factor Implementation Differences Into Subcomponents
![Page 34: Design Rules And Principles](https://reader033.vdocuments.mx/reader033/viewer/2022051412/54c2e52a4a7959ad5c8b45dd/html5/thumbnails/34.jpg)
Design RulesDesign Rules
Разделяйте несвязанные методы
Связь: по управлению по данным
В книге [MF] есть аналогичный smell/refactoring
34
DR11. Separate Methods That Do Not Communicate
![Page 35: Design Rules And Principles](https://reader033.vdocuments.mx/reader033/viewer/2022051412/54c2e52a4a7959ad5c8b45dd/html5/thumbnails/35.jpg)
Design RulesDesign Rules
Делегируйте Inheritance-based framework vs
component-based framework – где ниже связность?
35
DR12. Send Messages To Components Instead Of To Self
![Page 36: Design Rules And Principles](https://reader033.vdocuments.mx/reader033/viewer/2022051412/54c2e52a4a7959ad5c8b45dd/html5/thumbnails/36.jpg)
Design RulesDesign Rules
Передавайте параметры явно Варианты неявной передачи:
глобальные переменные состояние внешние источники данных
Вызов метода, результат которого зависит только от входных параметров - идемпотентный 36
DR13. Reduce Implicit Parameter Passing
![Page 37: Design Rules And Principles](https://reader033.vdocuments.mx/reader033/viewer/2022051412/54c2e52a4a7959ad5c8b45dd/html5/thumbnails/37.jpg)
План семинараПлан семинара
37
![Page 38: Design Rules And Principles](https://reader033.vdocuments.mx/reader033/viewer/2022051412/54c2e52a4a7959ad5c8b45dd/html5/thumbnails/38.jpg)
ВопросыВопросы
Буду рад ответить на Ваши вопросы
38
![Page 39: Design Rules And Principles](https://reader033.vdocuments.mx/reader033/viewer/2022051412/54c2e52a4a7959ad5c8b45dd/html5/thumbnails/39.jpg)
План семинараПлан семинара
39
![Page 40: Design Rules And Principles](https://reader033.vdocuments.mx/reader033/viewer/2022051412/54c2e52a4a7959ad5c8b45dd/html5/thumbnails/40.jpg)
Design PrinciplesDesign Principles
40
Литературные источники
![Page 41: Design Rules And Principles](https://reader033.vdocuments.mx/reader033/viewer/2022051412/54c2e52a4a7959ad5c8b45dd/html5/thumbnails/41.jpg)
Design PrinciplesDesign Principles
41
Design PrinciplesDRY : Don’t Repeat Yourself SCP : Speaking CodeOCP : Open/ClosedLSP : Liskov SubstitutionDIP : Dependency InversionISP : Interface SegregationREP : Reuse/Release EquivalenceCRP : Common ReuseCCP : Common ClosureADP : Acyclic DependenciesSDP : Stable DependenciesSAP : Stable AbstractionsTDA : Tell, Don’t AskSOC : Separation Of Concerns
Stefan Roock. Refactoring in Large Software. 2006
![Page 42: Design Rules And Principles](https://reader033.vdocuments.mx/reader033/viewer/2022051412/54c2e52a4a7959ad5c8b45dd/html5/thumbnails/42.jpg)
Design PrinciplesDesign Principles
Минимизируйте повторение кода для снижения затрат на поддержку
aka Single Point of Truth or Single Point of Maintenance
В книге [MF] есть аналогичный smell/refactoring
42
DRY: Don’t Repeat Yourself
![Page 43: Design Rules And Principles](https://reader033.vdocuments.mx/reader033/viewer/2022051412/54c2e52a4a7959ad5c8b45dd/html5/thumbnails/43.jpg)
Design PrinciplesDesign Principles
Код должен явно и однозначно отражать намерение
В книге [MF] есть аналогичный smell/refactoring
43
SCP: Speaking Code
![Page 44: Design Rules And Principles](https://reader033.vdocuments.mx/reader033/viewer/2022051412/54c2e52a4a7959ad5c8b45dd/html5/thumbnails/44.jpg)
Design PrinciplesDesign Principles
Программные сущности (классы, модули, функции) должны быть открыты для расширения и закрыты для изменения «Открыты для расширения» - возможно
расширять и изменять поведение приложения при изменении требований
«Закрыты для изменения» - расширение поведения не приводит к изменению исходного или бинарного кода 44
OCP: Open/Closed
далее
![Page 45: Design Rules And Principles](https://reader033.vdocuments.mx/reader033/viewer/2022051412/54c2e52a4a7959ad5c8b45dd/html5/thumbnails/45.jpg)
Design PrinciplesDesign Principles
Принцип OCP используется в двух контекстах его реализации: Dr. Bertrand Meyer's Open/Closed Principle
«Написанная реализация класса модифицируется только для исправления ошибок, новые ответственности или изменение существующих потребует создание нового класса, возможно, наследника. Этот новый класс не обязан реализовать тот же интерфейс.»
Polymorphic Open/Closed PrincipleБолее современная версия. «Множество реализаций классов можно использовать полиморфно, через один и тот же интерфейс.» Здесь зафиксирована интерфейсная часть, а реализация вариативна.
См. так же «Protected Variation» 45
OCP: Open/Closed
далее
![Page 46: Design Rules And Principles](https://reader033.vdocuments.mx/reader033/viewer/2022051412/54c2e52a4a7959ad5c8b45dd/html5/thumbnails/46.jpg)
Design PrinciplesDesign Principles
46
OCP: Open/Closed
![Page 47: Design Rules And Principles](https://reader033.vdocuments.mx/reader033/viewer/2022051412/54c2e52a4a7959ad5c8b45dd/html5/thumbnails/47.jpg)
Design PrinciplesDesign Principles
Существует два базовых определения: Barbara Liskov
«В коде приложения класс всегда можно заменить его наследником»
Bertrand Meyer ("Design-by-Contract" formulation)«Наследники должны соблюдать контракт предка»
47
LSP: Liskov Substitution
далее
![Page 48: Design Rules And Principles](https://reader033.vdocuments.mx/reader033/viewer/2022051412/54c2e52a4a7959ad5c8b45dd/html5/thumbnails/48.jpg)
Design PrinciplesDesign Principles
48
LSP: Liskov Substitution
![Page 49: Design Rules And Principles](https://reader033.vdocuments.mx/reader033/viewer/2022051412/54c2e52a4a7959ad5c8b45dd/html5/thumbnails/49.jpg)
Design PrinciplesDesign Principles
Высокоуровневые модули не должны зависеть от низкоуровневых. И те, и другие должны зависеть от абстракций.
Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракции.
49
DIP: Dependency Inversion
далее
![Page 50: Design Rules And Principles](https://reader033.vdocuments.mx/reader033/viewer/2022051412/54c2e52a4a7959ad5c8b45dd/html5/thumbnails/50.jpg)
Design PrinciplesDesign Principles
С помощью абстракций детали системы изолируются друг от друга
Легко менять детали реализации без модификации высокоуровневой логики
Шаблоны, с помощью которых реализуется принцип DIP: Plug-in, [A] Factory [M], Service Locator,
Inversion of Control, Dependency Injection50
DIP: Dependency Inversion
далее
![Page 51: Design Rules And Principles](https://reader033.vdocuments.mx/reader033/viewer/2022051412/54c2e52a4a7959ad5c8b45dd/html5/thumbnails/51.jpg)
Design PrinciplesDesign Principles
51
DIP: Dependency Inversion
далее
vs
![Page 52: Design Rules And Principles](https://reader033.vdocuments.mx/reader033/viewer/2022051412/54c2e52a4a7959ad5c8b45dd/html5/thumbnails/52.jpg)
Design PrinciplesDesign Principles
52
DIP: Dependency Inversion
далее
![Page 53: Design Rules And Principles](https://reader033.vdocuments.mx/reader033/viewer/2022051412/54c2e52a4a7959ad5c8b45dd/html5/thumbnails/53.jpg)
Design PrinciplesDesign Principles
Inversion Of Control Принцип инверсии управления потоком
выполнения по сравнению с процедурным программированием
Основа всех каркасов (frameworks) aka Hollywood Principle
Dependency Injection Шаблон проектирования Не мы сами получаем необходимые
объекты, а внешняя среда нам их передает 53
DIP → IoC → Dependency Injection
![Page 54: Design Rules And Principles](https://reader033.vdocuments.mx/reader033/viewer/2022051412/54c2e52a4a7959ad5c8b45dd/html5/thumbnails/54.jpg)
Design PrinciplesDesign Principles
Не стоит заставлять клиентов зависеть от ненужных им интерфейсов
Вместо одного многофункционального интерфейса лучше выделить несколько узкоспециальных
54
ISP: Interface Segregation
далее
![Page 55: Design Rules And Principles](https://reader033.vdocuments.mx/reader033/viewer/2022051412/54c2e52a4a7959ad5c8b45dd/html5/thumbnails/55.jpg)
Design PrinciplesDesign Principles
55
ISP: Interface Segregation
![Page 56: Design Rules And Principles](https://reader033.vdocuments.mx/reader033/viewer/2022051412/54c2e52a4a7959ad5c8b45dd/html5/thumbnails/56.jpg)
Design PrinciplesDesign Principles
The granule of reuse is the granule of release. Only components that are released through a tracking system can be effectively reused. This granule is the package
Многократно используемая единица кода должна пройти завершенный цикл разработки – система контроля версий, багтрекер, тесты. Эта единица – пакет.
REP и ряд следующих принципов – макропринципы организации разработки и пакетирования кода
56
REP: Reuse/Release Equivalence
![Page 57: Design Rules And Principles](https://reader033.vdocuments.mx/reader033/viewer/2022051412/54c2e52a4a7959ad5c8b45dd/html5/thumbnails/57.jpg)
Design PrinciplesDesign Principles
Классы в пакете используются совместно. Если используется один класс из пакета, считается что используются все.
Здесь использование – многократное использование при дальнейшей разработке
57
CRP: Common Reuse
![Page 58: Design Rules And Principles](https://reader033.vdocuments.mx/reader033/viewer/2022051412/54c2e52a4a7959ad5c8b45dd/html5/thumbnails/58.jpg)
Design PrinciplesDesign Principles
Классы в пакете должны быть связаны одинаковой причиной их изменения. Изменение пакета (одного из классов) касается всех классов в нем.
58
CCP: Common Closure
![Page 59: Design Rules And Principles](https://reader033.vdocuments.mx/reader033/viewer/2022051412/54c2e52a4a7959ad5c8b45dd/html5/thumbnails/59.jpg)
Design PrinciplesDesign Principles
Не должно быть взаимной зависимости между пакетами, только односторонняя.
59
ADP: Acyclic Dependencies
vs
![Page 60: Design Rules And Principles](https://reader033.vdocuments.mx/reader033/viewer/2022051412/54c2e52a4a7959ad5c8b45dd/html5/thumbnails/60.jpg)
Design PrinciplesDesign Principles
Зависимости между пакетами должны быть в сторону более стабильного. Пакет должен зависеть только от более стабильного пакета, чем он сам.
Стабильность модуля, класса или пакета – степень сложности его изменений
Стабильные классы – независимые классы (незачем менять) или сильнозависимые (множество причин не менять)
60
SDP: Stable Dependencies
![Page 61: Design Rules And Principles](https://reader033.vdocuments.mx/reader033/viewer/2022051412/54c2e52a4a7959ad5c8b45dd/html5/thumbnails/61.jpg)
Design PrinciplesDesign Principles
Самые стабильные пакеты должны быть самыми абстрактными. Нестабильные пакеты должны быть конкретными. Степень абстракции пакета должна зависеть от его стабильности.
61
SAP: Stable Abstractions
![Page 62: Design Rules And Principles](https://reader033.vdocuments.mx/reader033/viewer/2022051412/54c2e52a4a7959ad5c8b45dd/html5/thumbnails/62.jpg)
Design PrinciplesDesign Principles
62
REP : Reuse/Release EquivalenceCRP : Common ReuseCCP : Common ClosureADP : Acyclic
DependenciesSDP : Stable
DependenciesSAP : Stable
Abstractions
![Page 63: Design Rules And Principles](https://reader033.vdocuments.mx/reader033/viewer/2022051412/54c2e52a4a7959ad5c8b45dd/html5/thumbnails/63.jpg)
Design PrinciplesDesign Principles
TDA – стиль ООП, при котором объектА сигнализирует объектуБ выполнить его ответственность, вместо того, чтобы что-либо спрашивать у него и выполнять ответственность самому
63
TDA: Tell, Don’t Ask
далее
![Page 64: Design Rules And Principles](https://reader033.vdocuments.mx/reader033/viewer/2022051412/54c2e52a4a7959ad5c8b45dd/html5/thumbnails/64.jpg)
Design PrinciplesDesign Principles
Объекты берут на себя сфокусированные ответственности и делегируют остальные ответственности другим объектам
ООП vs Процедурный стиль См. так же «Low Of Demeter»
64
TDA: Tell, Don’t Ask
![Page 65: Design Rules And Principles](https://reader033.vdocuments.mx/reader033/viewer/2022051412/54c2e52a4a7959ad5c8b45dd/html5/thumbnails/65.jpg)
Design PrinciplesDesign Principles
Разделяйте ответственности по сфокусированным классам
aka Single Responsibility Principle«Класс должен иметь только одну причину изменения»
65
SOC: Separation Of Concerns
далее
![Page 66: Design Rules And Principles](https://reader033.vdocuments.mx/reader033/viewer/2022051412/54c2e52a4a7959ad5c8b45dd/html5/thumbnails/66.jpg)
Design PrinciplesDesign Principles
66
SOC : Separation Of Concerns
![Page 67: Design Rules And Principles](https://reader033.vdocuments.mx/reader033/viewer/2022051412/54c2e52a4a7959ad5c8b45dd/html5/thumbnails/67.jpg)
План семинараПлан семинара
67
Выводы
![Page 68: Design Rules And Principles](https://reader033.vdocuments.mx/reader033/viewer/2022051412/54c2e52a4a7959ad5c8b45dd/html5/thumbnails/68.jpg)
ВопросыВопросы
Буду рад ответить на Ваши вопросы
68
Ссылка на оценочную форму семинара:
http://www.luxoft-training.ru/events/vote
![Page 69: Design Rules And Principles](https://reader033.vdocuments.mx/reader033/viewer/2022051412/54c2e52a4a7959ad5c8b45dd/html5/thumbnails/69.jpg)
УчебныйУчебный Центр Центр LuxoftLuxoft
УЦ Luxoft предлагает более 200 курсов и тренингов по различным направлениям промышленной разработки ПО
Наши инструкторы – практики, готовые передать свою экспертизу
69
http://luxoft-training.ru
![Page 70: Design Rules And Principles](https://reader033.vdocuments.mx/reader033/viewer/2022051412/54c2e52a4a7959ad5c8b45dd/html5/thumbnails/70.jpg)
Конференции УЦ Конференции УЦ LuxoftLuxoft
Конференции (www.soft-labs.ru): 26 сентября, Киев: TEST Labs 2009,
программа сформирована, регистрация участников
17 ноября, Москва: Req Labs 2009, открыта регистрация докладчиков
15 декабря, Москва: Arch Labs 2009, открыта регистрация докладчиков
70
![Page 71: Design Rules And Principles](https://reader033.vdocuments.mx/reader033/viewer/2022051412/54c2e52a4a7959ad5c8b45dd/html5/thumbnails/71.jpg)
Ближайшие занятия в ШколахБлижайшие занятия в Школах
Расписание: Класс руководителя группы разработки.
Основные курсы (24.08.2009-15.09.2009) Класс менеджера проектов. Основы
управления проектами (24.08.2009-17.09.2009)
Класс тест-дизайнера. Дополнительные курсы (27.08.2009-11.09.2009)
Класс java-разработчика. Разработка на базе платформы JavaSE. Экспертный уровень. (31.08.2009-30.09.2009)http://www.luxoft-training.ru/timetable
71
![Page 72: Design Rules And Principles](https://reader033.vdocuments.mx/reader033/viewer/2022051412/54c2e52a4a7959ad5c8b45dd/html5/thumbnails/72.jpg)
Базовые правила и принципы Базовые правила и принципы проектирования ПОпроектирования ПОЕвгений Кривошеев[email protected]