From 376d82e4c0dd22fe4004b01d4fc069e1bc90beaa Mon Sep 17 00:00:00 2001 From: bekodeg Date: Mon, 9 Dec 2024 22:36:53 +0400 Subject: [PATCH] =?UTF-8?q?5=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=B0=20?= =?UTF-8?q?=D0=B1=D0=B5=D0=B7=20=D0=B4=D0=B8=D0=BE=D0=B3=D1=80=D0=B0=D0=BC?= =?UTF-8?q?=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Lab3/Models/StudentViewModel.cs | 1 - Lab5-6/lab5.md | 88 +++++++++++++++++++ 2 files changed, 88 insertions(+), 1 deletion(-) create mode 100644 Lab5-6/lab5.md diff --git a/Cop.Borovkov.Var3/Lab3/Models/StudentViewModel.cs b/Cop.Borovkov.Var3/Lab3/Models/StudentViewModel.cs index 9e9ca4a..18570bf 100644 --- a/Cop.Borovkov.Var3/Lab3/Models/StudentViewModel.cs +++ b/Cop.Borovkov.Var3/Lab3/Models/StudentViewModel.cs @@ -1,5 +1,4 @@ using Lab3.Database.DTO; -using System.Globalization; namespace Lab3.Models { diff --git a/Lab5-6/lab5.md b/Lab5-6/lab5.md new file mode 100644 index 0000000..7324ef9 --- /dev/null +++ b/Lab5-6/lab5.md @@ -0,0 +1,88 @@ +# Лабораторная работа №5. +# Применение структурных паттернов. + +## Задание +1) Дать описание паттернов, указанных во вариантах, для каких целей они могут применяться, + какие участники там фигурируют. +2) На основе задания из 3 лабораторной работы, для каждого паттерна придумать сущности, + относящиеся к той же предметной области, что описаны в задании и реализация которых + бы в приложении потребовала применения паттерна. + ### Ограничения: + - На каждый паттерн свои сущности + - В качестве источника сущностей использовать предметную область задания 3 лабораторной работы, а не элементы разработки (что-то типа «У меня паттерн Singleton, укажу ка я класс-подключение к БД через него», не принимается). +3) Создать диаграммы классов, отражающие взаимодействие новых +сущностей (а также используемый паттерн) с классами, +созданными в рамках 3 лабораторной работы. Отдельно отметить +классы, которые являются участниками паттерна + +## Вариант 3: _Adapter, Composite, Proxy_ +### Паттерн Adapter +Паттерн Адаптер используется для того, +чтобы объекты с несовместимыми интерфейсами могли работать вместе. +Он оборачивает один интерфейс в другой, +делая несовместимые классы совместимыми без изменения их исходного кода. + +Задачи, которые решает паттерн Adapter: +- Интеграция стороннего кода или библиотек: +когда требуется использовать стороннюю библиотеку с вашим приложением, +но её интерфейс отличается от имеющегося интерфейса. +- Обратная совместимость: когда нужно подключить новый код к старому интерфейсу, не изменяя существующий. +- Упрощение взаимодействия: уменьшает сложность работы с несколькими несовместимыми компонентами. + +Участники: +- Target: представляет объекты, которые используются клиентом. +- Client: использует объекты Target для реализации своих задач. +- Adaptee: представляет адаптируемый класс, который хотелось бы использовать у клиента вместо объектов Target. +- Adapter: сам адаптер, который позволяет работать с объектами Adaptee как с объектами Target. + +**Пример реализации для рассматриваемой предметной области:**
+ +Классы, реализующие паттерн: +- StudentDTO (Target) – определяет модель, которую клиент ожидает использовать для работы со студентами +- StudentRepository (Client) – использует StudentDTO +- Student (Adaptee) – Модель доступная из базы данных +- IMapper (Adapter) – Преобразует Student в StudentDTO + +### Паттерн Composite +Паттерн Компоновщик (Composite) объединяет группы объектов в древовидную структуру +по принципу "часть-целое и позволяет клиенту одинаково работать как с отдельными объектами, +так и с группой объектов. + +Образно реализацию паттерна можно представить в виде меню, +которое имеет различные пункты. Эти пункты могут содержать подменю, в которых, +в свою очередь, также имеются пункты. То есть пункт меню служит с одной стороны частью меню, +а с другой стороны еще одним меню. В итоге мы однообразно можем работать как с пунктом меню, +так и со всем меню в целом. + +Участники: + +- Component – определяет интерфейс для всех компонентов в древовидной структуре +- Composite – представляет компонент, который может содержать другие компоненты +и реализует механизм для их добавления и удаления +- Leaf – представляет отдельный компонент, который не может содержать другие компоненты +- Client – клиент, который использует компоненты + +Классы, реализующие паттерн: +- path (Component) – путь к объекту на диске +- FolderPath (Composite) – Путь к папке +- FilePath (Leaf) – Путь к файлу +- FormMain (Client) – Просматревает дерево папок в поисках файлов с типом .dll + +### Паттерн Proxy + +Паттерн Заместитель (Proxy) предоставляет объект-заместитель, который управляет доступом к другому объекту. +То есть создается объект-суррогат, который может выступать в роли другого объекта и замещать его. + +Участники: + +- Subject – определяет общий интерфейс для Proxy и RealSubject. Поэтому Proxy может использоваться вместо RealSubject +- RealSubject – представляет реальный объект, для которого создается прокси +- Proxy – заместитель реального объекта. Хранит ссылку на реальный объект, контролирует к нему доступ, +может управлять его созданием и удалением. При необходимости Proxy переадресует запросы объекту RealSubject +- Client – использует объект Proxy для доступа к объекту RealSubject + +Классы, реализующие паттерн: +- Студент (Subject) – Абстрактный студент +- Студент из группы (RealSubject) – студент из конкретной группы +- Староста (Proxy) – Передаёт информацию студенту +- Преподаватель (Client) - Передаёт информацию студенту через старосту \ No newline at end of file