Фрагмент для ознакомления
2
ВВЕДЕНИЕ
Паттерн проектирования (от англ. design pattern) — повторяемая архитектурная конструкция в области проектирования программного обеспечения, которая предлагает решение проблемы проектирования в рамках некоторого часто возникающего контекста.
Актуальность. Применение паттернов облегчает взаимодействие между разработчиками. Если все понимают, что когда кто-то говорит «Наблюдатель», то имеется в виду довольно специфическая структура кода, тогда возможно довольно быстро описать, каким образом функционирует фрагмент кода, который использует данный паттерн. Альтернативой является полное описание решения, что отнимает много времени и чревато ошибками.
Второе преимущество паттернов заключается в том, что они представляют собой готовые формы решения распространенных форм проблем.
Данные сильные стороны, в том числе, на самом деле усиливают друг друга. Они предоставляют возможность быстро решать определенные распространенные классы проблем и затем сообщить остальным, каким образом была решена проблема.
Таким образом, цель данной курсовой работы – исследовать паттерны Поведения (Visitor).
В соответствии с целью курсовой работы, были определены задачи:
- рассмотреть, что представляет собой паттерн;
- рассмотреть поведенческие шаблоны: паттерн Посетитель (Visitor);
- проанализировать применение паттерна Посетитель (Visitor);
- реализовать решение проблемы с применением паттерна Посетитель (Visitor).
Объект исследования – паттерн Посетитель (Visitor).
Предмет исследования – применение паттерна Посетитель (Visitor) для решения проблем.
Теоретическую основу исследования составили труды российских и зарубежных специалистов, среди которых Босуэлл Д., Фаучер Т., Гамма Э., Хелм Р., Джонсон Р., Влиссидес Д., Фримен Э., Фримен Э., Сьерра К., Бейтс Б., Тепляков С. и так далее.
Структура курсовой работы представлена следующим образом: введение, теоретическая глава, состоящая из двух параграфов, практическая глава, состоящая из двух параграфов, заключение, список использованных источников.
ГЛАВА 1. ТЕОРЕТИЧЕСКИЕ АСПЕКТЫ ПАТТЕРНОВ ПОВЕДЕНИЯ
1.1 Что представляет собой паттерн
Паттерн представляет определённый способ построения программного кода для решения часто встречающихся проблем проектирования. В данном случае подразумевается, что существует некоторый набор общих формализованных проблем, которые достаточно часто встречаются, и паттерны предоставляют перечень принципов для решения данных проблем.
Паттерны проектирования — это универсальные решения часто встречающихся проблем при проектировании программного обеспечения. Они напоминают готовые чертежи, которые возможно изменить, чтобы устранить повторяющиеся проблемы проектирования в вашем коде.
Паттерны проектирования программного обеспечения для веб-разработки предлагают модели и методы для разработки и решения повторяющихся проблем и задач программного обеспечения. Внедряя проверенные паттерны, инженеры-программисты могут создавать расширяемый, гибкий и высококачественный код, демонстрирующий их мастерство в своем деле.
Паттерны часто путают с алгоритмами, поскольку обе идеи описывают решения определенных проблем. Паттерн проектирования программирования — это описание решения более высокого уровня, чем алгоритм, который всегда определяет отдельный набор шагов, ведущих к определенному результату. Код может отличаться даже при использовании одного и того же шаблона в двух разных программах.
Несмотря на то, что идея паттернов как способ описания решения распространенных проблем в сфере проектирования возникла достаточно давно, однако их популярность начала возрастать во многом благодаря популярной работе четырех специалистов Эриха Гаммы, Ричарда Хелма, Ральфа Джонсона, Джона Влиссидеса, которая называлась «Design Patterns: Elements of Reusable Object-Oriented Software» (на русском языке известна как «Приемы объектно-ориентированного проектирования. Паттерны проектирования») и которая была опубликована в 1994 году [2]. А сам коллектив авторов нередко именуют «Банда четырёх» либо «Gang of Four» либо сокращенно GoF. Эта книга, по сути, являлась первой масштабной попыткой описать распространённые способы проектирования программ. И со временем использование паттернов стало считаться хорошей практикой программирования.
При написании программ возможно формализовать проблему в виде классов и объектов и взаимосвязей между ними. И использовать один из существующих паттернов для ее решения. В результате нет необходимости что-то придумывать, поскольку уже есть готовый шаблон, и необходимо лишь его использовать в определённой программе.
Причем паттерны, в основном, не зависят от языка программирования. Их принципы использования будут схожи и в C#, и в Jave, и в остальных языках.
Помимо этого мышление паттернами облегчает групповую разработку программ. Зная используемый паттерн проектирования и его важнейшие принципы, другому разработчику будет легче понять его реализацию и применять её.
В то же время не стоит использовать паттерны ради самих паттернов. Хорошая программа подразумевает применение паттернов. Однако не всегда паттерны облегчают и улучшают программу. Неоправданное их применение может привести к усложнению программного кода, снижению его качества. Паттерн должен быть оправданным и эффективным способом решения проблемы.
Большинство современных паттернов проектирования описаны в общих чертах, чтобы разработчики могли использовать их во многих контекстах. Разделы, составляющие описание паттерна, обычно следующие:
1. Цель паттерна описывает как проблему, так и решение.
2. Мотивация далее объясняет проблему и то, как паттерн может ее решить.
3. Структура классов описывает каждый компонент паттерна и то, как они связаны.
4. Пример кода на популярном языке программирования облегчает понимание концепции паттерна.
Некоторые списки паттернов проектирования предоставляют дополнительную полезную информацию, включая применимость паттерна, этапы реализации и связи с другими паттернами.
Существует множество всевозможных паттернов, которые решают различные проблемы и выполняют многочисленные задачи. Однако по своему действию их возможно объединить в ряд групп. Необходимо рассмотреть некоторые группы паттернов. В основу классификации главных паттернов заложена цель либо задачи, которые определённый паттерн реализует.
Хотя на сегодняшний день обнаружено 26 паттернов проектирования программного обеспечения, в том числе 23 паттерна «Банда четырех», только некоторые из них считаются наиболее значимыми или влиятельными. Ниже описываются 7 основных паттернов проектирования программного обеспечения, их значение и подходящее применение.
Паттерн Синглтон.
Синглтон — это творческий паттерн проектирования программного обеспечения, который ограничивает создание объекта класса единственным экземпляром. Класс имеет только один экземпляр, предоставляя глобальную точку доступа к этому экземпляру.
Это один из известных паттернов программирования «Банды четырех», которые объясняют, как решать повторяющиеся проблемы в объектно-ориентированном программном обеспечении. Паттерн полезен, когда для координации действий во всей системе требуется только один объект.
Преимущества:
- класс имеет единственный экземпляр;
- имеется глобальная точка доступа к этому экземпляру;
-только первые запросы инициализируют одноэлементный объект.
Недостатки:
- принцип единой ответственности нарушен. Паттерн одновременно решает две проблемы;
- паттерн программирования Singleton может скрывать плохой дизайн. Например, когда компоненты программы слишком много знают друг о друге.
Фабричный метод.
Фабричный метод, также известный как виртуальный конструктор, позволяет создавать объекты в суперклассе, одновременно позволяя подклассам изменять тип создаваемых объектов.
При необходимости в фабрику можно добавлять новые классы. На первый взгляд это изменение может показаться бессмысленным: был перенесён вызов конструктора из одной области программы в другую. Но необходимо учесть, что возможно изменить класс продуктов, создаваемый фабричным методом, переопределив его в подклассе.
Возможно использовать фабричный метод:
- когда еще определяется, какие типы и зависимости представляют собой объекты, с которыми код должен будет работать;
- когда необходимо предоставить пользователям библиотеки или фреймворка возможность изменять ее внутренние компоненты;
- когда необходимо сохранить системные ресурсы, повторно используя существующие объекты, а не перестраивая их каждый раз.
Преимущества:
- между создателем и продуктом нет жесткой связи;
- принцип единой ответственности. Код создания продукта можно переместить в одно место программы, что упрощает его обслуживание;
- принцип открытости/закрытости. Программа может добавлять новые виды товаров без изменения клиентского кода.
Фрагмент для ознакомления
3
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
1. Арораа Г., Чилберто Д. Паттерны проектирования для C# и платформы .NET Core. – СПб.: Питер, 2021. – 352 с. ISBN 978-5-4461-1523-5
2. Босуэлл Д., Фаучер Т. Читаемый код, или Программирование как искусство. – СПб.: Питер, 2012. – 208 с.: ил. ISBN 978-5-459-01188-3
3. Гамма Э., Хелм Р., Джонсон Р., Влиссидес Д. Приемы объектно-ориентированного программирования. Паттерны программирования. – СПб.: Питер, 2022. – 448 с.: ил. ISBN 978-5-4461-1595-2
4. Гамма Э., Хелм Р., Джонсон Р., Влиссидес Д. Паттерны объектно-ориентированного проектирования. – СПб.: Питер, 2024. – 448 с.
5. Фримен Э., Фримен Э., Сьерра К., Бейтс Б. Паттерны проектирования. – СПб.: Питер, 2011. – 656 с.: ил. ISBN 978-5-459-00435-9
6. Тепляков С. Паттерны проектирования на платформе .NET. — СПб.: Питер, 2015. — 320 с.: ил. ISBN 978-5-496-01649-0
7. Osmani A. Learning JavaScript Design Patterns // O'Reilly Media, Inc. – 2023. – 296 с. ISBN: 9781098139872