Принципы проектирования
и разработки ПО
Роберт Мартин:
    5 принципов объекто-ориентированного проектирования ("SOLID"):

    • Принцип единственной ответственности
    • Принцип открытости/закрытости
    • Принцип подстановки Лисков
    • Принцип разделения интерфейса
    • Принцип инверсии зависимостей

    "Быстрая разработка программ: принципы, примеры, практика", 2004

    Другие принципы объектно-ориентированного проектирования:

    • Принцип эквивалентности повторного использования и выпуска
    • Принцип общей закрытости
    • Принцип совместного повторного использования
    • Принцип ацикличности зависимостей
    • Принцип устойчивых зависимостей
    • Принцип устойчивых абстракций

    "Принципы, паттерны и методики гибкой разработки на языке C#", 2011
Бертран Мейер:
    5 критериев объекто-ориентированного проектирования:

    • Декомпозиция
    • Композиция
    • Понятность
    • Непрерывность
    • Защищенность

    5 правил объекто-ориентированного проектирования:

    • Прямое отображение
    • Минимум интерфейсов
    • Слабая связность интерфейсов
    • Явные интерфейсы
    • Скрытие информации

    5 принципов объекто-ориентированного проектирования:

    • Лингвистические модульные единицы
    • Самодокументирование
    • Унифицированный доступ
    • Открыт-закрыт
    • Единственный выбор

    "Объектно-ориентированное конструирование программных систем", 2005
«Банда четырёх» (GoF):
    Принципы объектно-ориентированного проектирования:

    • Программируйте в соответствии с интерфейсом, а не с реализацией
    • Предпочитайте композицию наследованию класса

    Типичные причины перепроектирования:

    • При создании объекта явно указывается класс
    • Зависимость от конкретных операций
    • Зависимость от аппаратной и программной платформ
    • Зависимость от представления или реализации объекта
    • Зависимость от алгоритмов
    • Сильная связанность
    • Расширение функциональности за счет порождения подклассов
    • Неудобства при изменении классов

    "Приемы объектно-ориентированного проектирования. Паттерны проектирования", 1995
Крэг Ларман:
    9 шаблонов распределения обязанностей в программных системах ("GRASP"):

    • Информационный эксперт (Information Expert)
    • Создатель (Creator)
    • Контроллер (Controller)
    • Слабая связность (Low Coupling)
    • Высокая сопряженность (High Cohesion)
    • Полиморфизм (Polymorphism)
    • Чистое изготовление (Pure Fabrication)
    • Перенаправление (Indirection)
    • Устойчивость к изменениям (Protected Variations)

    "Применение UML 2.0 и шаблонов проектирования", 2005
Энди Хант и Дэйв Томас:
    Принцип разработки программного обеспечения "DRY" ("Don’t repeat yourself"):

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

    "Программист-прагматик. Путь от подмастерья к мастеру", 2000
Кент Бек:
    Ценности, помогающие достичь совершенства в программировании:

    • Взаимодействие
    • Простота
    • Гибкость

    Принципы:

    • Локализация последствий
    • Минимизация повторений
    • Объединение логики и данных
    • Симметрия
    • Описательные выражения
    • Частота изменений

    "Шаблоны реализации корпоративных приложений", 2008
Эрик Эванс:
    Фундаментальные способы использования модели при разработке программ:

    • Модель и арxuтектура программы взаимно определяют друг друга
    • Модель лежит в основе языка, на котором говорят все члены группы разработчиков
    • Модель - это дистиллированное знание

    "Предметно-ориентированное проектирование. Структуризация сложных программных систем", 2011
Манифест Agile:
    • Люди и взаимодействие важнее процессов и инструментов
    • Работающий продукт важнее исчерпывающей документации
    • Сотрудничество с заказчиком важнее согласования условий контракта
    • Готовность к изменениям важнее следования первоначальному плану

    "Agile-манифест разработки программного обеспечения", 2001
Манифест мастерства разработки:
    • Не только рабочий софт, но также и хорошо разработанное программное обеспечение
    • Не только реагируя на изменения, но также постоянно добавляя ценность
    • Не только личности и взаимодействия, но и сообщество профессионалов
    • Не только сотрудничество с клиентами, но и продуктивное партнерство

    "Manifesto for Software Craftsmanship", 2009
Принципы Spring Framework:
    • Обеспечьте выбор на каждом уровне
    • Учитывайте разные точки зрения
    • Поддерживайте сильную обратную совместимость
    • Заботьтесь о дизайне API
    • Установите высокие стандарты качества кода

    Документация по Spring Framework 5.3.14
Принцип Java:
    • Написано однажды, работает везде

    Джеймс Гослинг, 1995
Приёмы экстремального программирования:
    • Разработка через тестирование
    • Игра в планирование
    • Заказчик всегда рядом
    • Парное программирование
    • Непрерывная интеграция
    • Рефакторинг
    • Частые небольшие релизы
    • Простота проектирования
    • Метафора системы
    • Коллективное владение кодом
    • Стандарт оформления кода
    • 40-часовая рабочая неделя

    Кент Бек "Экстремальное программирование", 2002