Я бы сказал, что блог Ноэля Ллописа, вероятно, лучшая инструкция для сочетания объектно-ориентированного программирования и ориентированного на данные дизайна. Он является одним из создателей термина DOD, является сильным программистом на C ++ и много писал о своем стиле и о том, как он использует возможности OO в C ++.
Я думаю, если бы я назвал ключевые элементы их объединения, согласно Ноэлю:
- Используйте как можно больше функций POD и не-членов, не-друзей. Функции, не являющиеся членами, не являющиеся друзьями, улучшают инкапсуляцию и являются ключевой частью ориентации данных, поскольку они хранят данные, данные.
- Избегайте хранения «временного» состояния на ваших объектах. Временное состояние забивает ваши данные. Если вам нужно что-то кэшировать (например, для производительности), то это относится к новому классу, причем функции, не являющиеся членами-не-друзьями, связывают два типа, а не отношения is-a или has-a.
- Избегайте объектов, которые могут находиться в состоянии A или состоянии B. Предпочитайте переключение между двумя объектами, один из которых - A, а другой - B.
- Избегайте полиморфизм, остерегайтесь виртуальные функции, шаблоны , остерегайтесь, избегать всего , что делает ваши данные имеют синтаксический внешний вид однообразия , а не фактическая тождественности.
Другое известное имя в пропаганде DOD сейчас - Майк Актон из Insomniac, но, читая то, что он написал, я бы сказал, что он на самом деле не сторонник ОО (или анти-ОО, если он все еще ориентирован на данные).