SlideShare a Scribd company logo
1 of 68
Рефакторинг и объектно-ориентированный дизайн Ingate Development 2011
Обращаться с языком кое-как — значит и мыслить кое-как: приблизительно, неточно, неверно. А. Н. Толстой. Код программы чаще читается, чем пишется. Народная мудрость. Цель: узнать, что такое правильный объектно-ориентированный дизайн программного обеспечения и какими способами его можно достигать. Ingate Development  2011
О чем поговорим? ,[object Object]
Ответ на вопрос «что» дают принципы объектно-ориентированного дизайна и паттерны.
Ответ на вопрос «как» дают техники рефакторинга.
Будем в первую очередь разбираться в причинах того или иного варианта определения объектов и их взаимодействия.
Поговорим о том, что идеального дизайна не существует и каждому из вас предстоит нелегкая задача поиска баланса между нарушениями разных принципов.Ingate Development  2011
О чем не будем говорить? ,[object Object]
Не будем перечислять конкретные техники рефакторинга
Хотя и паттерны и рефакторинг будем часто использовать в примерах.
Не будем разбирать принципы объектно-ориентированного подхода.
Не будем анализировать плюсы и минусы объектно-ориентированного подхода. Будем считать, что раз вы сюда пришли, то выбор вы для себя уже сделали.Ingate Development  2011
ОО дизайн SOLID – этоаббревиатура пяти основных принципов дизайна в объектно-ориентированном проектировании. В дополнение к этому, рассмотрим еще шестой принцип, который не входит в эту аббревиатуру. Ingate Development  2011
Рефакторинг Рефакторинг (англ. refactoring) — процесс изменения внутренней структуры программы, не затрагивающий её внешнего поведения и имеющий целью облегчить понимание её работы. В основе рефакторинга лежит последовательность небольших эквивалентных (то есть сохраняющих поведение) преобразований. Поскольку каждое преобразование маленькое, программисту легче проследить за его правильностью, и в то же время вся последовательность может привести к существенной перестройке программы и улучшению её согласованности и четкости. Wikipedia Ingate Development  2011
Single Responsibility Principle Принцип единственной обязанности Ingate Development  2011
Single Responsibility Principle В объектно-ориентированном программировании, принцип единственной обязанности обозначает, что каждый объект должен иметь одну обязанность и эта обязанность должна быть полностью инкапсулирована в класс. Wikipedia Не должно существовать более одного мотива для изменения класса. Роберт Мартин Ingate Development  2011
Single Responsibility Principle Ingate Development  2011
Single Responsibility Principle Связность (cohesion):насколько сильно связаны и сонаправлены различные обязанности модуля Связанность (coupling):степень, в которой программный модуль зависит от других модулей Стремитесь к слабой связанности, но к сильной связности модулей Ingate Development  2011
Single Responsibility Principle ,[object Object]
Чем больше обязанностей у класса – тем больше вероятность его изменения
Несколько обязанностей в пределах одного класса делают эти обязанности взаимозависимыми
Чем больше классов затронет изменение, тем больше ошибок при этом наделаютIngate Development  2011
Single Responsibility Principle Пример нарушения принципа Ingate Development  2011
Single Responsibility Principle Описание проблемы ,[object Object]
Операции в розничной системе продаж не требуют резервирования товара на складе
Операции на сайте не требуют отчисления бонусов торговому менеджеру
При этом любые изменения в систему процессинга платежей, систему резервирования товаров или начисления бонусов затрагивает Order, а соответственно и оба модуля Web и SaleSystemIngate Development  2011
Single Responsibility Principle Рефакторинг Ingate Development  2011
Open/Closed Principle Принцип открытости/закрытости Ingate Development  2011
Open/Closed Principle Сущности в программе (классы, модули, функции и т.п.) должны быть открыты для расширения, но закрыты для изменения.  Wikipedia Ingate Development  2011
Open/Closed Principle Ingate Development  2011
Open/Closed Principle Открыты для расширения Новая функциональность может быть добавлена в будущем Закрыты для изменения Изменения в исходниках или бинарных сборках не требуются для добавления функциональности Принцип впервые описан Бертраном Мейером в 1988 г. Ingate Development  2011
Open/Closed Principle Пример нарушения принципа Ingate Development  2011
Open/Closed Principle Описание проблемы ,[object Object]
Каждое изменение может наплодить багов и требует повторного тестирования
Добавление новых классов в меньшей степени чревато проблемами:
Нет кода, который зависит от новых классов (пока)
Новые классы не имеют исторической связанности, которая затрудняет их проектирование и тестированиеIngate Development  2011
Open/Closed Principle Три подхода к достижению OCP ,[object Object]
Дайте клиентам возможность контролировать поведение через дополнительные параметры
В сочетании с делегатами/лямбда-выражениями можно добиться очень хорошего результата
Использование наследования
Потомки определяют (доопределяют) поведение базового класса / интерфейса
Использование паттерна «Стратегия»
Клиентский код зависит от абстракции
Используется  модель «plug in», которая позволяет переопределять поведение, заменив абстракциюIngate Development  2011
Open/Closed Principle Рефакторинг Ingate Development  2011
Open/Closed Principle Понимание приходит с опытом ,[object Object]
Если модуль изменяется в первый раз – нарушьте принцип и просто измените реализацию
Если модуль изменяется повторно – примените рефакторинг для достижения OCP
Бесплатный сыр бывает только в мышеловке:OCP всегда усложняет дизайн
И помните:нет такого дизайна, который бы был закрыт от всех измененийIngate Development  2011
Liskov substitution principle Принцип подстановки Лисковой Ingate Development  2011
Liskov substitution principle Функции, которые используют ссылки на базовые классы, должны иметь возможность использовать объекты производных классов, не зная об этом. Роберт Мартин Назван так в честь Барбары Лисковой, которая описала этот принцип впервые в 1988 г. Ingate Development  2011
Liskov substitution principle Ingate Development  2011
Liskov substitution principle Потомки (дочерние классы) не должны: ,[object Object]
нарушать контрактные обязательства предковИ вообще код при использовании потомков не должен знать, что он оперирует не предком, а чем-то еще. Ingate Development  2011
Liskov substitution principle ,[object Object]
Strawberry IS A berry
Клубника – это ягода
С точки зрения принципа подстановки Лисковой правильнее говорить об отношении«IS SUBSTITUTABLE FOR»
Strawberry IS SUBSTITUTABLE FOR berry
Клубника может быть использована как ягода
И тогда не будет неожиданностей…
Волчья ягода – это ягода
Волчья ягода может быть использована как ягодаIngate Development  2011
Liskov substitution principle Типичное нарушение принципа abstractclassBase { publicabstractvoid Method1(); publicabstractvoid Method2(); } classDerived : Base { publicoverridevoid Method1() { thrownewNotImplementedException();         }   publicoverridevoid Method2() { // do something } }   Ingate Development  2011
Liskov substitution principle Типичное нарушение принципа publicvoidPrint(Employeeperson) { if(person isProgrammer) { _printer.PrintProgrammer(person); } elseif (person isManager) { _printer.PrintManager(person); } }  Ingate Development  2011

More Related Content

What's hot

Шаблоны разработки ПО. Рефакторинг
Шаблоны разработки ПО. РефакторингШаблоны разработки ПО. Рефакторинг
Шаблоны разработки ПО. РефакторингSergey Nemchinsky
 
Большие проекты, архитектура и фреймворки.
Большие проекты, архитектура и фреймворки.Большие проекты, архитектура и фреймворки.
Большие проекты, архитектура и фреймворки.EatDog
 
Шаблоны разработки ПО. Часть 2. ООП и UML
Шаблоны разработки ПО. Часть 2. ООП и UMLШаблоны разработки ПО. Часть 2. ООП и UML
Шаблоны разработки ПО. Часть 2. ООП и UMLSergey Nemchinsky
 
Щаблоны разработки ПО. Антипаттерны
Щаблоны разработки ПО. АнтипаттерныЩаблоны разработки ПО. Антипаттерны
Щаблоны разработки ПО. АнтипаттерныSergey Nemchinsky
 
SOLID. Принципы объектно ориентированного дизайна
SOLID. Принципы объектно ориентированного дизайнаSOLID. Принципы объектно ориентированного дизайна
SOLID. Принципы объектно ориентированного дизайнаМихаил Польгун
 
SOLID Principles in the real world
SOLID Principles in the real worldSOLID Principles in the real world
SOLID Principles in the real worldEPAM
 
Архитектурный шаблон MVC
Архитектурный шаблон MVCАрхитектурный шаблон MVC
Архитектурный шаблон MVCUnguryan Vitaliy
 
Андрей Кирпичев "Гибкая модульность инструментами АОП"
Андрей Кирпичев  "Гибкая модульность инструментами АОП"Андрей Кирпичев  "Гибкая модульность инструментами АОП"
Андрей Кирпичев "Гибкая модульность инструментами АОП"MskDotNet Community
 
SOLID – принципы объектно-ориентированного дизайна
SOLID – принципы объектно-ориентированного дизайнаSOLID – принципы объектно-ориентированного дизайна
SOLID – принципы объектно-ориентированного дизайнаPavel Treshnikov
 
Парадигмы программирования
Парадигмы программированияПарадигмы программирования
Парадигмы программированияITCP Community
 
HappyDev-lite-2016-весна 05 Евгений Тюменцев. Не все технологии одинаково по...
HappyDev-lite-2016-весна 05 Евгений Тюменцев. Не все технологии одинаково по...HappyDev-lite-2016-весна 05 Евгений Тюменцев. Не все технологии одинаково по...
HappyDev-lite-2016-весна 05 Евгений Тюменцев. Не все технологии одинаково по...HappyDev-lite
 
Евгений Кривошеев: Фундаментальные правила и принципы проектирования ПО
Евгений Кривошеев: Фундаментальные правила и принципы проектирования ПОЕвгений Кривошеев: Фундаментальные правила и принципы проектирования ПО
Евгений Кривошеев: Фундаментальные правила и принципы проектирования ПОLuxoft Education Center
 
07 Архитектура информационных систем. Принципы GRASP
07 Архитектура информационных систем. Принципы GRASP07 Архитектура информационных систем. Принципы GRASP
07 Архитектура информационных систем. Принципы GRASPEdward Galiaskarov
 
Стажировка-2015. Разработка. Занятие 8. Абстракции, именование,документирование
Стажировка-2015. Разработка. Занятие 8. Абстракции, именование,документированиеСтажировка-2015. Разработка. Занятие 8. Абстракции, именование,документирование
Стажировка-2015. Разработка. Занятие 8. Абстракции, именование,документирование7bits
 

What's hot (20)

Шаблоны разработки ПО. Рефакторинг
Шаблоны разработки ПО. РефакторингШаблоны разработки ПО. Рефакторинг
Шаблоны разработки ПО. Рефакторинг
 
Большие проекты, архитектура и фреймворки.
Большие проекты, архитектура и фреймворки.Большие проекты, архитектура и фреймворки.
Большие проекты, архитектура и фреймворки.
 
Принципы SOLID
Принципы SOLIDПринципы SOLID
Принципы SOLID
 
Шаблоны разработки ПО. Часть 2. ООП и UML
Шаблоны разработки ПО. Часть 2. ООП и UMLШаблоны разработки ПО. Часть 2. ООП и UML
Шаблоны разработки ПО. Часть 2. ООП и UML
 
Щаблоны разработки ПО. Антипаттерны
Щаблоны разработки ПО. АнтипаттерныЩаблоны разработки ПО. Антипаттерны
Щаблоны разработки ПО. Антипаттерны
 
SOLID. Принципы объектно ориентированного дизайна
SOLID. Принципы объектно ориентированного дизайнаSOLID. Принципы объектно ориентированного дизайна
SOLID. Принципы объектно ориентированного дизайна
 
Refactoring
RefactoringRefactoring
Refactoring
 
Step 5
Step 5Step 5
Step 5
 
SOLID Principles in the real world
SOLID Principles in the real worldSOLID Principles in the real world
SOLID Principles in the real world
 
Архитектурный шаблон MVC
Архитектурный шаблон MVCАрхитектурный шаблон MVC
Архитектурный шаблон MVC
 
Андрей Кирпичев "Гибкая модульность инструментами АОП"
Андрей Кирпичев  "Гибкая модульность инструментами АОП"Андрей Кирпичев  "Гибкая модульность инструментами АОП"
Андрей Кирпичев "Гибкая модульность инструментами АОП"
 
SOLID – принципы объектно-ориентированного дизайна
SOLID – принципы объектно-ориентированного дизайнаSOLID – принципы объектно-ориентированного дизайна
SOLID – принципы объектно-ориентированного дизайна
 
Парадигмы программирования
Парадигмы программированияПарадигмы программирования
Парадигмы программирования
 
Grasp principles
Grasp principlesGrasp principles
Grasp principles
 
HappyDev-lite-2016-весна 05 Евгений Тюменцев. Не все технологии одинаково по...
HappyDev-lite-2016-весна 05 Евгений Тюменцев. Не все технологии одинаково по...HappyDev-lite-2016-весна 05 Евгений Тюменцев. Не все технологии одинаково по...
HappyDev-lite-2016-весна 05 Евгений Тюменцев. Не все технологии одинаково по...
 
Step 3.1
Step 3.1Step 3.1
Step 3.1
 
Евгений Кривошеев: Фундаментальные правила и принципы проектирования ПО
Евгений Кривошеев: Фундаментальные правила и принципы проектирования ПОЕвгений Кривошеев: Фундаментальные правила и принципы проектирования ПО
Евгений Кривошеев: Фундаментальные правила и принципы проектирования ПО
 
Design Rules And Principles
Design Rules And PrinciplesDesign Rules And Principles
Design Rules And Principles
 
07 Архитектура информационных систем. Принципы GRASP
07 Архитектура информационных систем. Принципы GRASP07 Архитектура информационных систем. Принципы GRASP
07 Архитектура информационных систем. Принципы GRASP
 
Стажировка-2015. Разработка. Занятие 8. Абстракции, именование,документирование
Стажировка-2015. Разработка. Занятие 8. Абстракции, именование,документированиеСтажировка-2015. Разработка. Занятие 8. Абстракции, именование,документирование
Стажировка-2015. Разработка. Занятие 8. Абстракции, именование,документирование
 

Viewers also liked

Методики «Inversion of Control» и «Dependency Injection». Применение в Spring.
Методики «Inversion of Control» и «Dependency Injection». Применение в Spring.Методики «Inversion of Control» и «Dependency Injection». Применение в Spring.
Методики «Inversion of Control» и «Dependency Injection». Применение в Spring.Fedor Malyshkin
 
Enterprise Symfony Architecture (RU)
Enterprise Symfony Architecture (RU)Enterprise Symfony Architecture (RU)
Enterprise Symfony Architecture (RU)Alexander Lisachenko
 
.NET Core e C# 7.0 - InterCon 2016
.NET Core e C# 7.0 - InterCon 2016.NET Core e C# 7.0 - InterCon 2016
.NET Core e C# 7.0 - InterCon 2016Renato Groff
 
Принципы Solid на практике
Принципы Solid на практикеПринципы Solid на практике
Принципы Solid на практикеEatDog
 
How to scale your web app
How to scale your web appHow to scale your web app
How to scale your web appGeorgio_1999
 
Принципы проектирования S.O.L.I.D
Принципы проектирования S.O.L.I.DПринципы проектирования S.O.L.I.D
Принципы проектирования S.O.L.I.DAndreyGeonya
 
Рукописные лекции по линейной алгебре
Рукописные лекции по линейной алгебреРукописные лекции по линейной алгебре
Рукописные лекции по линейной алгебреDEVTYPE
 
7. Дискретная вероятность
7. Дискретная вероятность7. Дискретная вероятность
7. Дискретная вероятностьDEVTYPE
 
Основы комбинаторики - II
Основы комбинаторики - IIОсновы комбинаторики - II
Основы комбинаторики - IIDEVTYPE
 
Разбор задач модуля Комбинаторика l
Разбор задач модуля Комбинаторика lРазбор задач модуля Комбинаторика l
Разбор задач модуля Комбинаторика lDEVTYPE
 
Основы комбинаторики II. Разбор задач
Основы комбинаторики II. Разбор задачОсновы комбинаторики II. Разбор задач
Основы комбинаторики II. Разбор задачDEVTYPE
 
Разбор задач модуля "Теория графов ll"
Разбор задач модуля "Теория графов ll"Разбор задач модуля "Теория графов ll"
Разбор задач модуля "Теория графов ll"DEVTYPE
 
Zabbix 3.0 and beyond - FISL 2015
Zabbix 3.0 and beyond - FISL 2015Zabbix 3.0 and beyond - FISL 2015
Zabbix 3.0 and beyond - FISL 2015Zabbix
 
Diagnosing Technical Issues With Search Engine Optimization
Diagnosing Technical Issues With Search Engine OptimizationDiagnosing Technical Issues With Search Engine Optimization
Diagnosing Technical Issues With Search Engine OptimizationNine By Blue
 

Viewers also liked (14)

Методики «Inversion of Control» и «Dependency Injection». Применение в Spring.
Методики «Inversion of Control» и «Dependency Injection». Применение в Spring.Методики «Inversion of Control» и «Dependency Injection». Применение в Spring.
Методики «Inversion of Control» и «Dependency Injection». Применение в Spring.
 
Enterprise Symfony Architecture (RU)
Enterprise Symfony Architecture (RU)Enterprise Symfony Architecture (RU)
Enterprise Symfony Architecture (RU)
 
.NET Core e C# 7.0 - InterCon 2016
.NET Core e C# 7.0 - InterCon 2016.NET Core e C# 7.0 - InterCon 2016
.NET Core e C# 7.0 - InterCon 2016
 
Принципы Solid на практике
Принципы Solid на практикеПринципы Solid на практике
Принципы Solid на практике
 
How to scale your web app
How to scale your web appHow to scale your web app
How to scale your web app
 
Принципы проектирования S.O.L.I.D
Принципы проектирования S.O.L.I.DПринципы проектирования S.O.L.I.D
Принципы проектирования S.O.L.I.D
 
Рукописные лекции по линейной алгебре
Рукописные лекции по линейной алгебреРукописные лекции по линейной алгебре
Рукописные лекции по линейной алгебре
 
7. Дискретная вероятность
7. Дискретная вероятность7. Дискретная вероятность
7. Дискретная вероятность
 
Основы комбинаторики - II
Основы комбинаторики - IIОсновы комбинаторики - II
Основы комбинаторики - II
 
Разбор задач модуля Комбинаторика l
Разбор задач модуля Комбинаторика lРазбор задач модуля Комбинаторика l
Разбор задач модуля Комбинаторика l
 
Основы комбинаторики II. Разбор задач
Основы комбинаторики II. Разбор задачОсновы комбинаторики II. Разбор задач
Основы комбинаторики II. Разбор задач
 
Разбор задач модуля "Теория графов ll"
Разбор задач модуля "Теория графов ll"Разбор задач модуля "Теория графов ll"
Разбор задач модуля "Теория графов ll"
 
Zabbix 3.0 and beyond - FISL 2015
Zabbix 3.0 and beyond - FISL 2015Zabbix 3.0 and beyond - FISL 2015
Zabbix 3.0 and beyond - FISL 2015
 
Diagnosing Technical Issues With Search Engine Optimization
Diagnosing Technical Issues With Search Engine OptimizationDiagnosing Technical Issues With Search Engine Optimization
Diagnosing Technical Issues With Search Engine Optimization
 

Similar to Принципы объектно-ориентированного дизайна

Рефакторинг и второе рождение проекта на примере Zend Framework 2.0
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0Рефакторинг и второе рождение проекта на примере Zend Framework 2.0
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0AlexeyParhomenko
 
Как спроектировать хороший API и почему это так важно
Как спроектировать хороший API и почему это так важноКак спроектировать хороший API и почему это так важно
Как спроектировать хороший API и почему это так важноBubon Makabra
 
Общие темы. Тема 02.
Общие темы. Тема 02.Общие темы. Тема 02.
Общие темы. Тема 02.Igor Shkulipa
 
Benefits of unit-testing and inversion of controll
Benefits of unit-testing and inversion of controllBenefits of unit-testing and inversion of controll
Benefits of unit-testing and inversion of controllMykyta Hopkalo
 
Общие темы. Тема 01.
Общие темы. Тема 01.Общие темы. Тема 01.
Общие темы. Тема 01.Igor Shkulipa
 
Автоматизация design patterns и компактный код вместе с PostSharp
Автоматизация design patterns и компактный код вместе с PostSharpАвтоматизация design patterns и компактный код вместе с PostSharp
Автоматизация design patterns и компактный код вместе с PostSharpgeekfamilyrussia
 
Автоматизация design patterns и компактный код вместе с PostSharp
Автоматизация design patterns и компактный код вместе с PostSharpАвтоматизация design patterns и компактный код вместе с PostSharp
Автоматизация design patterns и компактный код вместе с PostSharpGoSharp
 
AOP and Design Patterns (GoF)
AOP and Design Patterns (GoF)AOP and Design Patterns (GoF)
AOP and Design Patterns (GoF)Andrey Gordienkov
 
Aspect Oriented Programming and Design Patterns
Aspect Oriented Programming and Design PatternsAspect Oriented Programming and Design Patterns
Aspect Oriented Programming and Design PatternsAndrey Gordienkov
 
Проектирование WEB-продукта. Взгляд со стороны начинающего продукт-менеджера.
Проектирование WEB-продукта. Взгляд со стороны начинающего продукт-менеджера.Проектирование WEB-продукта. Взгляд со стороны начинающего продукт-менеджера.
Проектирование WEB-продукта. Взгляд со стороны начинающего продукт-менеджера.ForkConf
 
(Seleniumcamp) Selenium IDE как артефакт пикника на обочине
(Seleniumcamp) Selenium IDE как артефакт пикника на обочине(Seleniumcamp) Selenium IDE как артефакт пикника на обочине
(Seleniumcamp) Selenium IDE как артефакт пикника на обочинеAlexei Lupan
 
Аспектно-ориентированный подход на службе веб-приложений
Аспектно-ориентированный подход на службе веб-приложенийАспектно-ориентированный подход на службе веб-приложений
Аспектно-ориентированный подход на службе веб-приложенийAlexander Byndyu
 
Отладка и оптимизация многопоточных OpenMP-программ
Отладка и оптимизация многопоточных OpenMP-программОтладка и оптимизация многопоточных OpenMP-программ
Отладка и оптимизация многопоточных OpenMP-программTatyanazaxarova
 
React новая эра фронтенд разработки / Роберт Харитонов (Liberty Global)
React новая эра фронтенд разработки / Роберт Харитонов (Liberty Global)React новая эра фронтенд разработки / Роберт Харитонов (Liberty Global)
React новая эра фронтенд разработки / Роберт Харитонов (Liberty Global)Ontico
 

Similar to Принципы объектно-ориентированного дизайна (20)

Рефакторинг и второе рождение проекта на примере Zend Framework 2.0
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0Рефакторинг и второе рождение проекта на примере Zend Framework 2.0
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0
 
Как спроектировать хороший API и почему это так важно
Как спроектировать хороший API и почему это так важноКак спроектировать хороший API и почему это так важно
Как спроектировать хороший API и почему это так важно
 
Software Design Patterns
Software Design PatternsSoftware Design Patterns
Software Design Patterns
 
Общие темы. Тема 02.
Общие темы. Тема 02.Общие темы. Тема 02.
Общие темы. Тема 02.
 
Benefits of unit-testing and inversion of controll
Benefits of unit-testing and inversion of controllBenefits of unit-testing and inversion of controll
Benefits of unit-testing and inversion of controll
 
Общие темы. Тема 01.
Общие темы. Тема 01.Общие темы. Тема 01.
Общие темы. Тема 01.
 
лек11 7
лек11 7лек11 7
лек11 7
 
лек11 7
лек11 7лек11 7
лек11 7
 
Автоматизация design patterns и компактный код вместе с PostSharp
Автоматизация design patterns и компактный код вместе с PostSharpАвтоматизация design patterns и компактный код вместе с PostSharp
Автоматизация design patterns и компактный код вместе с PostSharp
 
Автоматизация design patterns и компактный код вместе с PostSharp
Автоматизация design patterns и компактный код вместе с PostSharpАвтоматизация design patterns и компактный код вместе с PostSharp
Автоматизация design patterns и компактный код вместе с PostSharp
 
Use case in action
Use case in actionUse case in action
Use case in action
 
AOP and Design Patterns (GoF)
AOP and Design Patterns (GoF)AOP and Design Patterns (GoF)
AOP and Design Patterns (GoF)
 
Aspect Oriented Programming and Design Patterns
Aspect Oriented Programming and Design PatternsAspect Oriented Programming and Design Patterns
Aspect Oriented Programming and Design Patterns
 
Проектирование WEB-продукта. Взгляд со стороны начинающего продукт-менеджера.
Проектирование WEB-продукта. Взгляд со стороны начинающего продукт-менеджера.Проектирование WEB-продукта. Взгляд со стороны начинающего продукт-менеджера.
Проектирование WEB-продукта. Взгляд со стороны начинающего продукт-менеджера.
 
(Seleniumcamp) Selenium IDE как артефакт пикника на обочине
(Seleniumcamp) Selenium IDE как артефакт пикника на обочине(Seleniumcamp) Selenium IDE как артефакт пикника на обочине
(Seleniumcamp) Selenium IDE как артефакт пикника на обочине
 
Аспектно-ориентированный подход на службе веб-приложений
Аспектно-ориентированный подход на службе веб-приложенийАспектно-ориентированный подход на службе веб-приложений
Аспектно-ориентированный подход на службе веб-приложений
 
Отладка и оптимизация многопоточных OpenMP-программ
Отладка и оптимизация многопоточных OpenMP-программОтладка и оптимизация многопоточных OpenMP-программ
Отладка и оптимизация многопоточных OpenMP-программ
 
Solid code via tdd
Solid code via tddSolid code via tdd
Solid code via tdd
 
Лекция 4. Принципы SOLID
Лекция 4. Принципы SOLID Лекция 4. Принципы SOLID
Лекция 4. Принципы SOLID
 
React новая эра фронтенд разработки / Роберт Харитонов (Liberty Global)
React новая эра фронтенд разработки / Роберт Харитонов (Liberty Global)React новая эра фронтенд разработки / Роберт Харитонов (Liberty Global)
React новая эра фронтенд разработки / Роберт Харитонов (Liberty Global)
 

Принципы объектно-ориентированного дизайна