Course program← Объектно ориентированное программирование
1История ООП
2Объект и Класс
3Базовые концепции ООП
4Принцип проектирования GRASP
5Принцип проектирования SOLID
6Паттерны GOF
7Методические материалы

Книги, статьи и лекции

This lesson is not translated yet – the Russian original is below.

Курс даёт каркас: понятия, принципы и типовые решения в одном месте. Дальше глубина набирается чтением – ниже собрано то, что стоит открыть по каждому модулю. Список избыточен намеренно: читать всё подряд не нужно, выбирайте по теме, которая сейчас болит.

С чего начать

Три книги закрывают большую часть курса и читаются в любом порядке:

  • Крейг Ларман, «Applying UML and Patterns» (3-е изд., 2004) – источник GRASP. Ценна не главами про UML, а разбором того, как из требований вырастает распределение ответственностей.
  • Гамма, Хелм, Джонсон, Влиссидес, «Design Patterns» (1994) – та самая «книга банды четырёх». Читается тяжело и по одному паттерну за раз, но каждый разбор устроен одинаково: проблема, решение, последствия.
  • Роберт Мартин, «Agile Software Development, Principles, Patterns, and Practices» (2002) – там, где SOLID собран целиком и с примерами, а не пересказан по пунктам.

По модулям курса

  • История ООП – Алан Кэй, «The Early History of Smalltalk» (1993): как задумывалось ООП автором термина, и почему оно не про классы. Рядом – Эдсгер Дейкстра, «The Humble Programmer» (1972) про кризис сложности, из которого выросла парадигма.
  • Объект и класс – Бертран Мейер, «Object-Oriented Software Construction» (2-е изд., 1997): самое подробное изложение объектной модели, заодно источник принципа «проектирование по контракту».
  • Базовые концепции – Дэвид Парнас, «On the Criteria To Be Used in Decomposing Systems into Modules» (1972): инкапсуляция как сокрытие решения, которое может измениться, – за пять лет до появления слова «ООП».
  • GRASP – Ребекка Вирфс-Брок, «Object Design: Roles, Responsibilities, and Collaborations» (2002): responsibility-driven design из первых рук, тот самый подход, на который опирался Ларман.
  • SOLID – Барбара Лисков, «Data Abstraction and Hierarchy» (1988) и, для формулировок построже, Лисков и Винг, «A Behavioral Notion of Subtyping» (1994) – первоисточник буквы L.
  • Паттерны GOF – Фримен и Робсон, «Head First Design Patterns» (2-е изд., 2020): те же паттерны, что у GoF, но объяснённые на пальцах; хорошая опора, если оригинал идёт тяжело.

Дальше: проектирование и код

  • Мартин Фаулер, «Refactoring» (2-е изд., 2018) – каталог запахов кода и преобразований. Прямое продолжение курса: принципы говорят, как должно быть, рефакторинг – как туда прийти из того, что уже написано.
  • Мартин Фаулер, «Patterns of Enterprise Application Architecture» (2002) – слои, репозитории, модели предметной области: где в реальном приложении живут объекты, о которых мы говорили.
  • Эрик Эванс, «Domain-Driven Design» (2003) – про то, как из языка предметной области получаются классы. Тяжёлая, но окупается на больших системах.
  • Роберт Мартин, «Clean Architecture» (2017) – границы, зависимости и направление связей на уровне модулей.
  • Стив Макконнелл, «Code Complete» (2-е изд., 2004) – энциклопедия ремесла: имена, функции, защитное программирование, всё то, что ниже уровня проектирования.
  • Сэнди Мец, «Practical Object-Oriented Design» (2-е изд., 2018) – примеры на Ruby, но рассуждения о зависимостях и о том, когда наследование лишнее, языконезависимы.

Видео и лекции

  • Лекции курса – встроены прямо в уроки: у большинства тем сверху страницы есть запись.
  • Барбара Лисков, тьюринговская лекция (2009) – про абстракцию данных из первых рук.
  • Сэнди Мец, доклады с RailsConf (список на sandimetz.com) – «SOLID Object-Oriented Design», «All the Little Things», «Nothing is Something». Лучший вход в тему, если принципы кажутся набором лозунгов.
  • Кевлин Хенни, «SOLID Deconstruction» – критический разбор: какие из пяти принципов говорят об одном и том же и что в них устарело. Смотреть после того, как SOLID усвоен.

Справочники под рукой

  • refactoring.guru – паттерны GOF и запахи кода на русском, с примерами на нескольких языках. Удобно для быстрого напоминания.
  • martinfowler.com/bliki – короткие заметки по терминам проектирования, часто точнее и честнее учебников.

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