Добавил:
выбрасываю тут свой мусор, надеюсь, что он кому-то может пригодится... Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
OOP-KONEChNYJ.docx
Скачиваний:
20
Добавлен:
03.12.2023
Размер:
7.72 Mб
Скачать

37. Понятие и назначение интерфейса. Отличие реализации интерфейса от наследования. Выбор предпочтения между наследованием и реализацией интерфейса.

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

Интерфейс предоставляет лишь набор методов без их реализации. При реализации интерфейса, класс должен определить реализацию для каждого метода из интерфейса. Интерфейс – абстрактный класс, нельзя создавать его экземпляров (ведь нет реализаций методов).

В C# множественное наследование осуществляется за счет интерфейсов. Класс не может наследоваться от нескольких классов.

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

38. Состав и назначение solid-принципов.

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

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

Таким образом, мы имеем 5 принципов, которые и рассмотрим ниже:

  1. Принцип единственной ответственности (Single responsibility) - «На каждый объект должна быть возложена одна единственная обязанность»

  2. Принцип открытости/закрытости (Open-closed) - "программные сущности должны быть открыты для расширения, но закрыты для модификации"

  3. Принцип подстановки Барбары Лисков (Liskov substitution) - «Объекты в программе могут быть заменены их наследниками без изменения свойств программы»

  4. Принцип разделения интерфейса (Interface segregation) - «Много специализированных интерфейсов лучше, чем один универсальный»

  5. Принцип инверсии зависимостей (Dependency Invertion) - «зависимости должны строится относительно абстракций, а не деталей»

39. Понятие шаблона проектирования и структура шаблонов grasp.

GRASP (общие шаблоны распределения ответственностей) — шаблоны, используемые в объектно-ориентированном проектировании для решения общих задач по назначению ответственностей классам и объектам. Представляют собой обобщенные подходы/рекомендации/принципы, используемые при проектировании дизайна системы.

В книге Крэйга Лармана «Применение UML и шаблонов проектирования» описано 9 таких шаблонов: каждый помогает решить некоторую проблему, возникающую как в объектно-ориентированном анализе. Таким образом, шаблоны «G.R.A.S.P.» — хорошо стандартизированные и проверенные временем принципы объектно-ориентированного анализа.

Аббревиатура GRASP (General Responsibility Assignment Software Patterns) означает - общие шаблоны распределения обязанностей в программных системах. На самом деле следовало бы обозначать "шаблоны GRAS", но "шаблоны GRASP" звучит лучше, так как в переводе с английского grasp это "схватывать", "постигать".

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

Многие шаблоны содержат рекомендации по распределению обязанностей между объектами с учетом специфики задачи.

Таким образом, шаблон – это именованная пара "проблема/решение", которую можно применять в различных контекстах и которая содержит рекомендации по использованию в различных конкретных ситуациях.

Шаблоны являются основным механизмом для накопления и повторного использования полезных принципов разработки ПО.

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

Основные и фундаментальные вопросы проектирования описывают следующие шаблоны GRASP.

  • «Эксперт» (Expert);

  • «Слабая связанность» (Low Coupling);

  • «Высокое зацепление» (High Cohesion);

  • «Создатель» (Creator);

  • «Контроллер» (Controller);

  • «Полиморфизм» (Polymorphism); - Шаблон полиморфизм позволяет обрабатывать альтернативные варианты поведения на основе типа. При этом, альтернативные реализации приводятся к обобщенному интерфейсу.

  • «Чистая синтетика» (Pure Fabrication);

  • «Перенаправление» (Indirection); - Шаблон перенаправление реализует низкую связность между классами, путем назначения обязанностей по их взаимодействию дополнительному объекту — посреднику.

  • «Защита от изменений» (Protected Variations); - Проблема модификации системы наиболее актуальна в условиях динамически изменяющихся требований. Зачастую, удается выделить т.н. точки неустойчивости системы, которые наиболее часто будут подвержены изменению/модификации. Тогда, сущность шаблона устойчивый к изменениям заключается в устранении точек неустойчивости, путем определения их в качестве интерфейсов и реализации для них различных вариантов поведения.

Соседние файлы в предмете Объектно-ориентированное программирование