Специалист по базам данных спрашивает: теория объектно-ориентированного дизайна?

Я очень долго работал над проектированием баз данных, а сейчас работаю и на C #. Для меня объектно-ориентированный подход имеет смысл, но я не чувствую, что у меня есть хорошее основание в глубокой теории объектно-ориентированного проектирования.

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

Есть ли какие-либо похожие концепции при проектировании структуры объектно-ориентированной программы?

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

Где я могу найти дополнительную информацию?
Есть ли полезные работы, которые мне стоит прочитать?

Обновлять:

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

Еще раз спасибо за ответы :)


person AJ.    schedule 29.10.2008    source источник
comment
см. также programmers.stackexchange.com/questions/84598/   -  person Steven A. Lowe    schedule 12.07.2011


Ответы (14)


Будьте осторожны с некоторыми публикациями по шаблонам проектирования.

Есть несколько широких видов определений классов. Классы для постоянных объектов (которые похожи на строки в реляционных таблицах) и коллекций (которые похожи на сами таблицы) - это одно.

Некоторые из шаблонов проектирования «Gang of Four» являются более применимо к активным объектам приложения и менее применимо к постоянным объектам. Пока вы боретесь с чем-то вроде Абстрактной фабрики, вы упускаете некоторые ключевые моменты объектно-ориентированного проектирования, поскольку он применяется к постоянным объектам.

На странице Object Mentor Что такое объектно-ориентированный дизайн? многие из вас действительно должны знать перейти от реляционного дизайна к объектно-ориентированному дизайну.

Нормализация, кстати, не является общим принципом проектирования, который всегда применяется к реляционным базам данных. Нормализация применяется, когда у вас есть транзакции обновления, чтобы предотвратить аномалии обновления. Это хитрость, потому что реляционные базы данных - вещь пассивная; вам либо нужно добавить обработку (например, методы в классе), либо передать кучу правил (нормализация). В мире хранилищ данных, где обновления редки (или отсутствуют), стандартные правила нормализации не так актуальны.

Следовательно, для объектных моделей данных не существует «такой нормализации».

В OO Design, пожалуй, наиболее важным правилом для проектирования постоянных объектов является принцип единой ответственности.

Если вы проектируете свои классы так, чтобы они соответствовали реальным объектам, и вы распределяете обязанности между этими классами очень целенаправленно, вы будете довольны своей объектной моделью. Вы сможете сопоставить его с реляционной базой данных с относительно небольшими сложностями.

Оказывается, когда вы смотрите на вещи с точки зрения ответственности, вы обнаруживаете, что правила 2NF и 3NF подходят для правильного распределения ответственности. Уникальные ключи по-прежнему имеют значение. За производные данные отвечает функция метода, а не постоянный атрибут.

person S.Lott    schedule 29.10.2008
comment
Спасибо. Думаю, вы действительно ответили на вопрос, который никому не удалось решить. :) - person AJ.; 29.10.2008
comment
Был там - был администратором баз данных, прежде чем стать архитектором объектов - проводил время, обучая других администраторов баз данных. Я чувствую твою боль. - person S.Lott; 29.10.2008

Книга «Шаблоны проектирования» - ваш следующий шаг.
https://rads.stackoverflow.com/amzn/click/com/0201633612

Но вам не обязательно использовать объектно-ориентированный подход ко всему. Не относитесь к этому религиозно. Если более процедурный подход кажется более простым, тогда сделайте это. Люди, плохо знакомые с объектно-ориентированной архитектурой, как правило, откладывают ее на некоторое время.

person Corey Trager    schedule 29.10.2008
comment
Хорошая книга, но не для людей, которые переходят от реляционного дизайна к объектно-ориентированному дизайну - я считаю, что она слишком сосредоточена на активных классах и недостаточно сосредоточена на постоянных объектах. - person S.Lott; 29.10.2008

Я думаю, что Гибкая разработка программного обеспечения, принципы, шаблоны и практики неплохо.

В нем подробно рассматриваются принципы объектно-ориентированного проектирования, перечисленные здесь:

  • Принципы объектно-ориентированного проектирования и управления зависимостями
  • SRP - принцип единой ответственности
  • OCP - Принцип открытости и закрытости
  • LSP - Принцип замещения Лискова
  • DIP - Принцип инверсии зависимостей
  • Интернет-провайдер - Принцип разделения интерфейсов
  • REP - Принцип эквивалентности повторного использования релизов
  • CCP - Общий принцип закрытия
  • CRP - Общий принцип повторного использования
  • ADP - Принцип ациклических зависимостей
  • SDP - Принцип стабильных зависимостей
  • SAP - Принцип стабильных абстракций
person toolkit    schedule 29.10.2008

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

В целом, я бы сказал, что вам намного лучше прийти в объектно-ориентированный дизайн с опытом работы в реляционных базах данных, чем пойти в другом направлении.

person Jason Kester    schedule 29.10.2008
comment
Спасибо. Думаю, это то, о чем говорило мое чутье. :) - person AJ.; 29.10.2008
comment
+1 - В этом взгляде много достоинств. Нормализованное представление данных довольно близко соответствует объектной модели. - person ConcernedOfTunbridgeWells; 29.10.2008

Если вы действительно хотите разобраться с O-O, поиграйте с Smalltalk. ST - это чистый объектно-ориентированный язык, и он весьма откровенен. Как только вы преодолеете парадигму, вы научитесь объектно-ориентированному программированию, поскольку без нее вы не сможете работать с Smalltalk. Так я впервые изучил объектно-ориентированный подход.

person ConcernedOfTunbridgeWells    schedule 29.10.2008

Проверьте результаты этого. Учитесь на каждом вопросе.

person jfs    schedule 29.10.2008

Мне очень понравились шаблоны проектирования Head First, то есть очень доступный и отличный Эвристика объектно-ориентированного дизайна, Артур Дж. Риль

person Galwegian    schedule 29.10.2008
comment
Спасибо за рекомендации. У меня есть Head First, и это хорошо. Эвристика дизайна выглядит действительно интересно - я добавил ее в свой список желаний! :) - person AJ.; 29.10.2008

На этом сайте перечислены 101 заголовок ... шаблоны проектирования, рефакторинг и другие ... посмотрите на это .. Это будет хорошей отправной точкой ...

person spinodal    schedule 29.10.2008

Перейти к объектному мышлению Дэвида Уэста. Интересное чтение ..
Но вы с темной стороны .. согласно книге;) Мышление о базах данных было проклятием всех объектно-ориентированных программистов. Это противоположные концы спектра. Например

  • При мышлении базы данных атрибуты данных важнее всего остального. Нормализация и создание типов на основе того, как они вписываются в схему БД ИЛИ диаграмму ER. Объектно-ориентированное мышление создает типы, основанные на поведении и сотрудничестве, и не признает атрибуты данных как все важные.
  • Базы данных исходят от ученых, для которых формализация и метод важнее всего. ОО исходит от людей, которые используют эвристику и практические правила и ценят индивидуальность и социальное взаимодействие как жесткий и быстрый процесс.

Дело в том, что программист на COBOL может писать программы на COBOL даже после перехода на объектно-ориентированный язык. Посмотрите любую книгу, например «Мышление на Java», в первом разделе, который неизменно детализирует принципы объектно-ориентированного программирования (подмастерье) ... Следуйте за ним с помощью объектного мышления (подмастерье), а в свое время ... мастера.

person Gishu    schedule 29.10.2008

Смоделируйте свои объекты, помня об объектах реального мира.

В настоящее время мы разрабатываем программное обеспечение для автоматизации машин. Одна из этих машин имеет два загрузочных порта для подачи сырья, а все остальные - только одно. До сих пор во всех модулях у нас была информация о портах (текущие настройки, номер партии, назначенный на данный момент и т. Д.) В качестве членов класса, представляющего машину.

Мы решили создать новый класс, содержащий информацию о портах, и добавить два члена LoadPort в этот класс MachineXY. Если бы мы думали об этом раньше, мы бы сделали то же самое для всех этих однопортовых машин ...

person Treb    schedule 29.10.2008

Вам следует взглянуть на UML, который представляет собой весь процесс, выполняемый OOD.

Я бы порекомендовал купить книгу (или пару), потому что теория довольно обширна, и большинство людей выбирают методы, наиболее подходящие для данного проекта.

person Ady    schedule 29.10.2008

Начните читать о шаблонах дизайна, скажем, от Мартина Фаулера. :)

Они являются наиболее практичным применением ООП.

person sajidnizami    schedule 29.10.2008
comment
Какая книга, шаблон проектирования предприятия? - person MrWaqasAhmed; 22.08.2016

Полагаю, вы имеете в виду объектно-ориентированный подход в мире баз данных.

Объектно-ориентированные базы данных, в которых хранятся объекты, никогда не ловили их, поэтому в настоящее время вы ищете сопоставление объектов с реляционной базой данных. ORM или объектно-реляционное сопоставление - это термин, используемый для описания программного обеспечения, которое выполняет это сопоставление. В идеале это дает вам лучшее из обоих миров, где разработчики могут взаимодействовать с объектами, а в базе данных все хранится в реляционных таблицах, где может иметь место стандартная настройка.

person Will Dieterich    schedule 29.10.2008

на сленге администраторов баз данных: объектно-ориентированный дизайн - это не что иное, как правильно нормализованные данные за безопасными рабочими интерфейсами, безопасный смысл, смотрите на операции, а не на данные напрямую

person lurscher    schedule 29.06.2011