Принципы проектирования программного обеспечения OO

StackOverflow https://stackoverflow.com/questions/1089504

Вопрос

Я большой поклонник принципов проектирования программного обеспечения, таких как ТВЕРДЫЙ и СУХОЙ.Какие еще принципы существуют для разработки программного обеспечения OO?

Примечание.Я не ищу ответы типа "прокомментируйте свой код", а вместо этого ищу принципы проектирования OO, подобные тем, которые обсуждались Дядя Боб.

Это было полезно?

Решение

Довольно полный список из Википедии:

http://en.wikipedia.org/wiki/List_of_software_development_philosophies

  • Гибкая разработка программного обеспечения
  • Гибкий унифицированный процесс (AUP)
  • Разработка, ориентированная на поведение (BDD)
  • Большой дизайн спереди (BDUF)
  • Закон Брукса
  • Собор и Базар
  • Код и исправление
  • Конструктивистская методология проектирования (CDM)
  • Ковбойское кодирование
  • Кристально Чистый
  • Разработка на основе дизайна (D3)
  • Не повторяйся (СУХО) или Один и только один раз (ОООО), Единственная точка Истины (SPoT)
  • Метод разработки динамических систем (DSDM)
  • Экстремальное программирование (XP)
  • Разработка, ориентированная на функциональные возможности
  • Голливудский принцип
  • Итеративная и постепенная разработка
  • Совместный дизайн приложения, он же JAD или "Совместная разработка приложения"
  • Кайдзен
  • Канбан
  • Принцип ПОЦЕЛУЯ (Будь проще, глупо)
  • Бережливая разработка программного обеспечения
  • Платформа Microsoft Solutions Framework (MSF)
  • Архитектура, управляемая моделью (MDA)
  • Открытый исходный код
  • Открытый Унифицированный процесс
  • Быстро-и-грязно
  • Рациональный унифицированный процесс (RUP)
  • Схватка
  • Интеллектуальная (гибкая разработка)
  • Разделение интересов (SoC)
  • Сервис-ориентированное моделирование
  • Мастерство программного обеспечения
  • Безопасность программной системы
  • Спиральная модель
  • Разработка, основанная на тестировании (TDD)
  • Унифицированный процесс (UP)
  • V-Образная модель
  • Модель водопада
  • Модель колеса со спицами
  • Чем хуже, тем лучше (стиль Нью-Джерси, в отличие от подхода Массачусетского технологического института)
  • Экстремальный
  • Тебе Это не понадобится (ЯГНИ)
  • Ноль Один Бесконечность

Другие советы

Высокая Когезия - Насколько сфокусированы обязанности модулей, которые вы разрабатываете.

Низкое Сцепление - Степень, в которой модули полагаются на другие модули.

Выбрал композицию вместо наследования, это одно.

Многие люди, особенно новички в OO, начнут расширять классы, когда все, что им действительно нужно, - это использовать composition.Действительно, если вы должны спросить себя, является ли новый класс B классом A?Если нет, то вам не следует продлевать.

Например, допустим, у меня есть Person Класс, а Car Класс, и я хотел бы создать новый класс под названием a DrivenCar класс.Наивной реализацией было бы сказать (давайте представим, что мы получили множественное наследование)

class DrivenCar extends Person, Car  { ... }

Является ли управляемый автомобиль типом Человека?Нет, так что это не должно быть расширяющимся Человеком.Является ли DrivenCar Автомобилем?да, поэтому имеет смысл расширить

Используя композицию, внедрение будет выглядеть следующим образом

class DrivenCar extends Car {
    private Person driver;
}

В СХВАТЫВАНИЕ Шаблоны.Да, они кажутся довольно тривиальными.Больше похоже на дистилляцию вплоть до основных качеств, которые демонстрируют другие, более сложные паттерны.

Интерфейс.Большинство шаблонов проектирования основаны на разделении интерфейса и реализации.

Когда ожидается, что ваш API будет расти, используйте Абстрактный класс вместо интерфейса.Добавление нового метода в интерфейс требует изменения ВСЕХ классов, которые его реализуют.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top