2. Обращаться с языком кое-как — значит и мыслить кое-как: приблизительно, неточно, неверно. А. Н. Толстой. Код программы чаще читается, чем пишется. Народная мудрость. Цель: узнать, что такое правильный объектно-ориентированный дизайн программного обеспечения и какими способами его можно достигать. Ingate Development 2011
3.
4. Ответ на вопрос «что» дают принципы объектно-ориентированного дизайна и паттерны.
6. Будем в первую очередь разбираться в причинах того или иного варианта определения объектов и их взаимодействия.
7. Поговорим о том, что идеального дизайна не существует и каждому из вас предстоит нелегкая задача поиска баланса между нарушениями разных принципов.Ingate Development 2011
12. Не будем анализировать плюсы и минусы объектно-ориентированного подхода. Будем считать, что раз вы сюда пришли, то выбор вы для себя уже сделали.Ingate Development 2011
13. ОО дизайн SOLID – этоаббревиатура пяти основных принципов дизайна в объектно-ориентированном проектировании. В дополнение к этому, рассмотрим еще шестой принцип, который не входит в эту аббревиатуру. Ingate Development 2011
14. Рефакторинг Рефакторинг (англ. refactoring) — процесс изменения внутренней структуры программы, не затрагивающий её внешнего поведения и имеющий целью облегчить понимание её работы. В основе рефакторинга лежит последовательность небольших эквивалентных (то есть сохраняющих поведение) преобразований. Поскольку каждое преобразование маленькое, программисту легче проследить за его правильностью, и в то же время вся последовательность может привести к существенной перестройке программы и улучшению её согласованности и четкости. Wikipedia Ingate Development 2011
16. Single Responsibility Principle В объектно-ориентированном программировании, принцип единственной обязанности обозначает, что каждый объект должен иметь одну обязанность и эта обязанность должна быть полностью инкапсулирована в класс. Wikipedia Не должно существовать более одного мотива для изменения класса. Роберт Мартин Ingate Development 2011
18. Single Responsibility Principle Связность (cohesion):насколько сильно связаны и сонаправлены различные обязанности модуля Связанность (coupling):степень, в которой программный модуль зависит от других модулей Стремитесь к слабой связанности, но к сильной связности модулей Ingate Development 2011
27. При этом любые изменения в систему процессинга платежей, систему резервирования товаров или начисления бонусов затрагивает Order, а соответственно и оба модуля Web и SaleSystemIngate Development 2011
30. Open/Closed Principle Сущности в программе (классы, модули, функции и т.п.) должны быть открыты для расширения, но закрыты для изменения. Wikipedia Ingate Development 2011
32. Open/Closed Principle Открыты для расширения Новая функциональность может быть добавлена в будущем Закрыты для изменения Изменения в исходниках или бинарных сборках не требуются для добавления функциональности Принцип впервые описан Бертраном Мейером в 1988 г. Ingate Development 2011
54. Liskov substitution principle Функции, которые используют ссылки на базовые классы, должны иметь возможность использовать объекты производных классов, не зная об этом. Роберт Мартин Назван так в честь Барбары Лисковой, которая описала этот принцип впервые в 1988 г. Ingate Development 2011
57. нарушать контрактные обязательства предковИ вообще код при использовании потомков не должен знать, что он оперирует не предком, а чем-то еще. Ingate Development 2011
75. Interface segregation principle Клиент не должен вынужденно зависеть от элементов интерфейса, которые он не использует. Роберт Мартин Смысл: предпочитайте маленькие, простые интерфейсы «жирным». Ingate Development 2011
80. Interface segregation principle Типичное нарушение принципа publicoverridevoidSomeMethod() { thrownewNotImplementedException(); } Что само по себе является нарушением LSP Ingate Development 2011
92. Dependency inversion principle Модули верхнего уровня не должны зависеть от модулей нижнего уровня. И те и другие должны зависеть от абстракций. Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций. Роберт Мартин Ingate Development 2011
116. Если же этого нет, то класс имеет скрытые зависимости publicclassHelloWorldHidden { publicstring Hello(string name) { if (DateTime.Now.Hour < 12) { return"Good morning, " + name; } if (DateTime.Now.Hour < 18) { return"Good afternoon, " + name; } return"Good evening, " + name; } } Ingate Development 2011
168. Don’t repeat yourselfor Duplicate is evil Не повторяйся илиДублирование - зло Ingate Development 2011
169. Don’t repeat yourself Каждое отдельное понятие должно иметь единственное, однозначное отражение в системе. Энди Хунт Логические повторы говорят о необходимости абстракции. Повторы в работе говорят о необходимости автоматизации. 97 вещей, которые должен знать любой программист. Ingate Development 2011
181. Если вы поняли суть этого принципа, то у вас должно возникнуть желание написатьstring.Format("{0} вручную – это муторно и неэффективно", action);Ingate Development 2011
182. На этом все Почитать еще что-нибудь: dev.ingate.ru Задать мне вопрос: sergey.shebanin@ingate.ru