Чек-лист для .NET программиста: Анализ и Проектирование

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

Для того чтобы создавать приложения, модули которого будут пригодны к повторному использованию, внесение изменений в которые не будет приводить к каскадному обновлению половины всего существующего кода, либо к поломке системы в десяти других местах, разработчик овладевает внушительным арсеналом принципов и шаблонов проектирования и учится применять их там, где это оправдано. В такой арсенал входят принципы ООП (Абстракция, Инкапсуляция, Наследование, Полиморфизм), SOLID, IoC, KISS, DRY, YAGNI, шаблоны проектирования GRASP и GoF, закон Деметры и другие.

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

Вопросы

  1. Какие основные плюсы и минусы объектно-ориентированной парадигмы?
  2. Какие принципы функционального программирования применяются в ООП?
  3. Какие существуют принципы ООП?
  4. Чем отличаются абстракция от инкапсуляции?
  5. Какие преимущества агрегирования над наследованием?
  6. Как реализуется полиморфизм в C#?
  7. Как расшифровывается аббревиатура SOLID?
  8. Как нарушить принцип подстановки Лисков?
  9. Как нарушить принцип единой ответственности?
  10. Какие существуют способы внедрения зависимости в класс?
  11. В чем заключается смысл принципа инверсии управления (IoC)?
  12. В чем заключается смысл закона Деметры?
  13. Какую проблему решает шаблон Декоратор?
  14. Чем отличается шаблон Стратегия от Шаблонного метода?
  15. Какие недостатки шаблона Синглтон?
  16. Какие существуют шаблоны для обеспечения взаимодействия между 2-мя объектами, которые ничего не должны знать о существовании друг друга?
  17. Чем отличаются принципы Высокого зацепления (High Cohesion) и Низкой связанности (Low Coupling)?

Книги

Статьи

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход /  Изменить )

Google photo

Для комментария используется ваша учётная запись Google. Выход /  Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход /  Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход /  Изменить )

Connecting to %s