Реферат: Основные шаблоны проектирования

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Министерство науки и высшего образования РФ

Пермский национальный исследовательский политехнический университет

Электротехнический факультет

Кафедра «Информационные технологии и автоматизированные системы»

Реферат

по дисциплине: Учебно-исследовательская работа

на тему:

«Основные шаблоны проектирования»

Иванов Иван Иванович

г. Пермь, 2020

СОДЕРЖАНИЕ

  • Введение 3
  • 1. Описание шаблонов проектирования 5
  • 2. Классификация шаблонов проектирования 7
    • 2.1 Основные шаблоны 7
    • 2.2 Порождающие шаблоны проектирования 7
    • 2.3 Структурные шаблоны 8
    • 2.4 Поведенческие шаблоны 10
    • 2.5 Шаблоны параллельного программирования 11
    • 2.6 Архитектурные шаблоны 11
  • Заключение 13
  • Список использованных источников 15

Введение

шаблон проектирование программирование

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

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

Шаблоны проектирования как раз и являются тем средством, с помощью которого люди могут поделиться друг с другом накопленным опытом. Как только шаблон становится всеобщим достоянием, он обогащает наш язык и позволяет легко поделиться с другими новыми идеями проектирования и их результатами. С помощью шаблонов проектирования просто выделяют общие задачи, определяют проверенные решения и описывают вероятные результаты.

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

Целью работы является исследование шаблонов как инструмента проектирования информационных систем.

К числу основных задач относятся:

· дать характеристику основным шаблонам проектирования;

· провести структурный анализ реализации шаблонов;

· обосновать потребность в использовании шаблонов проектирования для решения определенных задач;

·

1. Описание Шаблонов Проектирования

Самая трудная задача в объектно-ориентированном проектировании - разложить систему на объекты. При решении приходится учитывать множество факторов: инкапсуляцию, глубину детализации, наличие зависимостей, гибкость, производительность, развитие, повторное использование и т.д. Все это влияет на декомпозицию, причем часто противоречивым образом. Методики объектно-ориентированного проектирования отражают разные подходы. Вы можете сформулировать задачу письменно, выделить из получившейся существительные и глаголы, после чего создать соответствующие классы и операции [1]. Другой путь - сосредоточиться на отношениях и разделении обязанностей в системе. Можно построить модель реального мира и перенести выявленные при анализе объекты. Шаблоны проектирования помогают выявить не вполне очевидные абстракции и объекты, которые могут их использовать.

Шаблон проектирования или шаблон в разработке программного обеспечения - описание взаимодействия объектов и классов, адаптированных для решения общей задачи проектирования в конкретном контексте [2].

В отличие от готовых функций или библиотек, шаблон нельзя просто взять и скопировать в программу. Шаблон представляет собой не какой-то конкретный код, а общую концепцию решения той или иной проблемы, которую нужно будет ещё подстроить под нужды вашей программы.

Шаблоны часто путают с алгоритмами, ведь оба понятия описывают типовые решения каких-то известных проблем. Но если алгоритм - это чёткий набор действий, то шаблон - это высокоуровневое описание решения, реализация которого может отличаться в двух разных программах.

В общем случае шаблон состоит из четырех основных элементов:

1. Имя. Сославшись на него, мы можем сразу описать проблему проектирования, ее решения и их последствия. Присваивание шаблонам имен позволяет проектировать на более высоком уровне абстракции. С помощью словаря шаблонов можно вести обсуждение с коллегами, упоминать шаблоны в документации. Нахождение хороших имен было одной из самых трудных задач при составлении каталога.

2. Задача. Описание того, когда следует применять шаблон. Необходимо сформулировать задачу и ее контекст. Может описываться конкретная проблема проектирования, например, способ представления алгоритмов в виде объектов. Иногда отмечается, какие структуры классов или объектов свидетельствуют о негибком дизайне. Также может включаться перечень условий, при выполнении которых имеет смысл применять данный шаблон.

3. Решение. Описание элементов дизайна, отношений между ними, функций каждого элемента. Конкретный дизайн или реализация не имеются в виду, поскольку шаблон - это шаблон, применимый в самых разных ситуациях. Просто дается абстрактное описание задачи проектирования и того, как она может быть решена с помощью некоего весьма обобщенного сочетания элементов (в нашем случае классов и объектов).

4. Результаты - это следствия применения шаблона и разного рода компромиссы. Хотя при описании проектных решений о последствиях часто не упоминают, знать о них необходимо, чтобы можно было выбрать между различными вариантами и оценить преимущества и недостатки данного шаблона [2].

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

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

2. Классификация шаблонов проектирования

Шаблоны проектирования различаются степенью детализации и уровнем абстракции и должны быть каким то образом организованы. Предлагается следующая общая классификация шаблонов по категориям их применения [4].

2.1 Основные шаблоны

Необходимы для использования общих методов структурирования компьютерных программ. Одним из распространённым шаблоном является интерфейс.

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

2.2 Порождающие шаблоны проектирования

Абстрагируют процесс объявления переменных. Они позволяют сделать систему независимой от способа создания, композиции и представления объектов. Шаблон, порождающий классы, использует наследование, чтобы изменять инстанцируемый класс, а шаблон, порождающий объекты, делегирует инстанцирование другому объекту. К порождающим относятся следующие шаблоны:

· Абстрактная фабрика - позволяет создавать семейства связанных объектов, не привязываясь к конкретным классам создаваемых объектов;

· Фабричный метод - определяет общий интерфейс для создания объектов в суперклассе, позволяя подклассам изменять тип создаваемых объектов;

· Прототип - предоставляет возможность копировать объекты, не вдаваясь в подробности их реализации;

· Одиночка - гарантирует, что у класса есть только один экземпляр, и предоставляет к нему глобальную точку доступа.

Пример реализации шаблона смотрите Рисунок 1. Все реализации одиночки сводятся к тому, чтобы скрыть конструктор по умолчанию и создать публичный статический метод, который и будет контролировать жизненный цикл объекта-одиночки.

Рисунок 1. Структура шаблона итератор

Метод getInstance() либо создаёт объект, либо отдаёт существующий объект, если он уже был создан. Если есть доступ к классу одиночки, значит, будет доступ и к этому статическому методу. Из какой точки кода вы бы его ни вызвали, он всегда будет отдавать один и тот же объект.

2.3 Структурные шаблоны

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

· Адаптер - позволяет объектам с несовместимыми интерфейсами работать вместе;

· Мост - разделяет один или несколько классов на две отдельные иерархии: абстракцию и реализацию;

· Компоновщик - позволяет сгруппировать множество объектов в древовидную структуру, а затем работать с ней так, как будто это единичный объект;

· Заместитель - предоставляет возможность подставлять вместо реальных объектов специальные объекты-заменители. Эти объекты перехватывают вызовы к оригинальному объекту, позволяя сделать что-то до или после передачи вызова оригиналу.

Шаблон Заместитель, смотрите Рисунок 2, предлагает создать новый класс-дублёр, имеющий тот же интерфейс, что и оригинальный служебный объект. При получении запроса от клиента объект-заместитель сам бы создавал экземпляр служебного объекта и переадресовывал бы ему всю реальную работу[4].

Рисунок 2. Структура шаблона заместитель

Вместо того чтобы грузить данные сразу после старта программы, можно сэкономить ресурсы и создать объект тогда, когда он действительно понадобится.

2.4 Поведенческие шаблоны

Определяют взаимодействие между объектами, увеличивая таким образом его гибкость.

· Состояние - позволяет объектам менять поведение в зависимости от своего состояния;

· Стратегия - определяет семейство схожих алгоритмов и помещает каждый из них в собственный класс, после чего алгоритмы можно взаимозаменять прямо во время исполнения программы;

· Наблюдатель - создаёт механизм подписки, позволяющий одним объектам следить и реагировать на события, происходящие в других объектах.

· Итератор - даёт возможность последовательно обходить элементы составных объектов, не раскрывая их внутреннего представления.

Рассмотрим пример структуры паттерна Итератор Рисунок 1, а именно - из каких классов он состоит, какие роли эти классы выполняют и как они взаимодействуют друг с другом[4].

Рисунок 3. Пример структуры шаблона итератор

Итератор предоставляет Client всего несколько простых методов перебора элементов коллекции ConcreteCollection. Это не только упрощает доступ к коллекции, но и защищает её данные от неосторожных или злоумышленных действий

2.5 Шаблоны параллельного программирования

Используется для более эффективного написания многопоточных программ, и предоставляет готовые решения проблем синхронизации.

· Блокировка - один поток блокирует ресурс для предотвращения доступа или изменения его другими потоками

· Монитор - объект, предназначенный для безопасного использования более чем одним потоком.

2.6 Архитектурные шаблоны

Описывают структурную схему программной системы в целом. В данной схеме указываются отдельные функциональные составляющие системы, называемые подсистемами, а также взаимоотношения между ними. Примером архитектурного паттерна является хорошо известная программная парадигма «модель-представление-контроллер» (MVC) смотрите Рисунок 4.

Рисунок 4. Структура шаблона MVC

шаблон проектирование программирование

· Модель предоставляет данные и реагирует на команды контроллера, изменяя своё состояние.

· Представление отвечает за отображение данных модели пользователю, реагируя на изменения модели

· Контроллер интерпретирует действия пользователя, оповещая модель о необходимости изменений.

Основная цель применения этой концепции состоит в отделении бизнес-логики (модели) от её визуализации (представления, вида). За счёт такого разделения повышается возможность повторного использования кода. Наиболее полезно применение данной концепции в тех случаях, когда пользователь должен видеть те же самые данные одновременно в различных контекстах и / или с различных точек зрения [5].