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

24. Базовые принципы программирования dry, kiss, yagni.

DRY – Don’t repeat yourself (не повторяй себя). Любой функционал в коде должен быть реализован ровно один раз, не говоря уже о том, что copy-paste-кода вообще не должно быть.

KISS – keep it simple stupid (делайте вещи проще). Не нужно усложнять дизайн там, где в этом нет необходимости. Чем проще, тем лучше. В сложном коде сложнее искать ошибки и в дальнейшем его модернизировать.

YAGNI - You Ain’t Gonna Need It — вам это не понадобится! Его суть в том, чтобы реализовать только поставленные задачи и отказаться от избыточного функционала.

25. Принцип единственности ответственности и шаблон проектирования Expert.

Принцип единственной ответственности гласит — «На каждый объект должна быть возложена одна единственная обязанность». Т.е. другими словами — конкретный класс должен решать конкретную задачу — ни больше, ни меньше.

Информационный эксперт (Information Expert). Ответственность должна быть назначена тому, кто владеет максимумом необходимой информации для исполнения — информационному эксперту.

Проблема: каков наиболее общий принцип распределения обязанностей между объектами при объектно-ориентированном проектировании?

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

Достоинства:

  • шаблон «Эксперт» поддерживает инкапсуляцию. Для выполнения требуемых задач объекты используют собственные данные. Подобную возможность обеспечивает также шаблон «Слабая связанность», применение которого приводит к созданию более надежных и приспособленных к обслуживанию систем;

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

26. Шаблоны проектирования High Cohesion и Low Coupling.

Мера связности модулей определяется количеством информации, которой располагает один модуль о природе другого.

«Слабая» связность» и Low Coupling — распределение ответственностей и данных, обеспечивающее взаимную независимость классов. Класс со «слабой» связностью:

  • Не зависит от внешних изменений;

  • Прост для повторного использования.

Мера зацепления модуля определяется степенью сфокусированности его обязанностей.

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

Проблема: степень связанности – это способ измерения того, насколько жестко один класс связан с другими классами либо каким количеством данных о других классах он обладает. Класс с низкой степенью связанности (или слабым связыванием) зависит от небольшого числа других классов. Выражение "небольшого числа" зависит от контекста и сложности проектируемой системы.

Решение: Распределить обязанности таким образом, чтобы степень связанности оставалась низкой.

Класс с высокой степенью связанности (или жестко связанный) зависит от множества других классов. Наличие таких классов нежелательно, поскольку оно приводит к возникновению следующих проблем:

  • изменения в связанных классах приводят к изменениям в данном классе;

  • затрудняется понимание каждого класса в отдельности;

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

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

Шаблон «Слабая связанность» поддерживает независимость классов, что повышает возможности повторного использования и обеспечивает более высокую эффективность приложения.

Достоинства:

  • изменения компонентов мало сказываются на других объектах;

  • принципы работы и функции компонентов можно понять, не изучая другие объекты;

  • повышается удобство повторного использования

Высокое зацепление

Проблема: как обеспечить возможность управления сложностью?

В терминах объектно-ориентированного проектирования зацепление (более точно, функциональное зацепление) – это мера связанности и родственности обязанностей класса.

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

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

  • трудность в понимании;

  • сложности при повторном использовании;

  • сложности в поддержке;

  • ненадежность и постоянная подверженность изменениям.

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

Решение: распределение обязанностей, поддерживающее высокую степень зацепления.

Достоинства:

  • повышаются ясность и простота проектных решений;

  • упрощаются поддержка и доработка;

  • как правило, обеспечивается слабое связывание;

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

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