Паттерны проектирования

Паттерны проектирования. Вводная.

При написании программ, используя объектно ориентированные языки программирования (ООП), требуется разрабатывать классы, соответствующие предметам, процессам и понятиям предментой области, нужно описать взаимодействия этих классов, взаимодействия объектов этих классов и т.д. Задача эта не совсем простая, иногда довольно сложная, кроме всего прочего, есть множество правильных решений, используя объектно ориентированные подходы, но еще больше количество неправильных решений. Под правильными, я подразумеваю те решения, которые полностью покрывают текущую задачу, дают гибкость(возможность модификаций в будущем), дают простоту при использовании классов и объектов. Архитектура будущей программы(программного обеспечения, системы, ...) должна быть достаточно общей, чтобы сделать возможным внесение изменений, которые могут потребоваться в будущем, а это довольно частая задача, а иногда и проблема(из-за плохого проектирования). Накапливая свой опыт в программировании, вы накапливаете в своих знаниях те или иные способы решения определенных задач, вы можете писать для себя какие-то общие классы, и потом использовать их в своих программах, то есть использовать одни и те же подходы в различных программах, которые могут быть совсем не связаны с собой. Вот эти решения уже смело можно называть паттернами
При изучении паттернов, нужно обязательно изучить что такое антипаттерны. Одна из распростанненых ошибок у новичков, это попытка использовать паттерны в своих программах, не имея на то веских оснований, а просто потому что разработчик узнал о новом паттерне, и решил его попробовать, или же совместить в себе несколько паттернов, только потому что "Я это умею", тем самым сильно усложнив код. Как я иногда говорю - всегда думайте! 
Перед применением того или иного паттерна, вы должны четко дать развернутые ответы на: 
- поможет ли он в решении задачи? 
- насколько он усложнит код?
- насколько он упростит код?
- легко ли модифицировать данную программу в будущем?
После ответов, как минимум на эти вопросы, я думаю вы легко сможете принять решение, о том, использовать этот паттерн или нет.
Паттерн - это описание взаимодействия объектов и классов, адаптированных для решения общей задачи проектирования в конкрентом контексте.
Есть громадное количество литературы(3 или 4 книги, не помню точно :-) ), с описанием паттернов, но на самом деле их гораздо больше, так как в книги вошли самые распростаненные решения тех или иных задач, которые упрощают жизнь подавляющему большинству программистов. Но очень много решений, красивых и полезных не вошедших в книги, остается в исходном коде многих систем. Много красивых решений можете знать и вы, но в силу тех или иных проблем, вы не издаете книгу с описанием своих паттернов, в самом лучшем случае вы это опубликуете где-то на форуме, хотя зачастую этого не делают, так как "Я сам это придумал, и это моё" :-)
Классические паттерны поделены на 3 типа - порождающие, структурные, поведения.
В каждой группе можно, в свою очередь, выделить два уровня, определяющих, применяется паттерн к классам или объектам.
Часто паттерны используются совместно. Паттерны позволяют повысить степень повторной используемости, улучшить качество доккументирования. Но все это иногда требует определенных жертв(увеличение потребляемой памяти, ухудшение производительности, усложнение кода).

Порождающие паттерны абстрагируют процесс создания классов и объектов с целью обеспечить гибкость системы, то есть помогают сделать систему независимой от способа создания и представления объектов. Эти паттерны скрывают знания о конкретных классах и скрывают детали того, как эти классы создаются и стыкуются. Таким образом, можно собрать систему из готовых объектов с самой различной структурой и функциональностью статически или динамически.
Структурные паттерны.

Паттерны поведения.


!!ДОПОЛНЯЕТСЯ!!





























Комментарии