Что такое объектно-ориентированный мыслительный процесс? [закрыто]

9

Последние несколько месяцев я изучал ООП в сочетании с реализацией Zend MVC. В общем, я довольно новичок в программировании, но я твердо убежден, что я должен учить вещи «правильным» способом, что для меня означает убедиться, что я понимаю, почему все сделано так, как есть. Т.е. я обнаружил, что при обучении тому, как что-то делать (что-нибудь, скажем, музыке), лучший способ научиться делать что-то - это знать, почему это делается в первую очередь.

В любом случае, я изо всех сил пытался понять, как разрабатывать свои собственные бизнес-модели (например, M из MVC), и я решил, что это не потому, что я не понимаю ООП в целом, потому что я изучал его несколько раз. месяцев, и я не думаю, что концепции очень трудно понять. Я нахожу примеры, которые я изучил, на самом деле очень интуитивно понятными. Проблема для меня, я думаю, заключается в процессе перевода моих собственных проблем в объектно-ориентированные решения. Примеры в книгах (которые я читал до сих пор) слишком очевидны, поэтому процесс перевода проблемы в объекты не очень сложен. То, что я думаю, я мог бы упустить - это абстрагированный процесс высокого уровня. Какой-то список шагов или вопросов, на которые каждое объектно-ориентированное решение должно отвечать на самом высоком уровне.

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

Мировой инженер
источник
1
ООП не всегда все это ...
Работа
При изучении ООП вы уже читали что-нибудь о шаблонах проектирования ?
Зоредаче
1
Я рекомендую вам прочитать книгу Эрика Эвана о доменно-ориентированном проектировании, когда вам трудно создавать модели. Смотрите также ответ @Simon Stellings. Книга освещает этот процесс довольно подробно.
Сокол
@Zoredache Я познакомился с концепцией шаблонов проектирования, а также с несколькими примерами таких, как singleton, factory и сам MVC (который в реализации Zend также является фронт-контроллером). Тем не менее, это был мой следующий шаг, так сказать. Я взял книгу Мартина Фаулера о корпоративных моделях, и пока я прочитал только часть введения. Это понятное, простое для чтения введение, которое вы бы порекомендовали?
@Falcon У меня был вопрос о php / MySQL и форматировании даты на SO на днях, и я бы выбрал ваш ответ, но это был всего лишь комментарий, насколько он того стоит.

Ответы:

10

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

Это было первоначально описано в этой статье Эбботтом и часто упоминается как «текстовый анализ Эбботта».

  1. Напишите простую текстовую спецификацию.
  2. Определите классы: существительные являются хорошими кандидатами.
  3. Найдите атрибуты: прилагательные / наречия - хорошие кандидаты.
  4. Найдите операции: глаголы - хорошие кандидаты.
  5. Найти ассоциации между классами.
  6. Уточнить.

Пример:

Существительные , глаголы и adjectivesпомечены.

Библиотека содержит книги и журналы . Может иметь несколько копий данной книги . Некоторые из книг предназначены только для short-term кредитов . Все остальные книги могут быть заимствованы любым членом библиотеки на три недели. Члены библиотеки могут обычно брать до шести предметов за раз, но сотрудники могут брать до 12 предметов за раз. Только сотрудники могут брать журналы .

Первая итерация анализа даст:

Классы:

  • Библиотека
  • Книга, Журнал
  • копия
  • ссуда
  • Член библиотеки
  • Вещь
  • Штатный сотрудник

С этого момента вы можете подумать, какому классу нужны какие атрибуты и методы для реализации поведения, а затем все больше и больше совершенствовать эту модель.

blubb
источник
1
Хороший ответ. В дополнение к статье Эбботта, я рекомендую книгу Эрика Эвана о доменно-управляемом дизайне . Он учит, как создать вездесущий язык для проекта и как извлечь из него мощную модель.
Сокол
Меня тянет к этому ответу, потому что я немного изучил лингвистику, и это дает мне хороший интуитивный смысл без особых усилий, однако я боюсь его по тем же причинам, потому что я обнаружил, что слишком много аналогий может привести меня в заблуждение ,
@Falcon +1 за рекомендацию книги с обложкой Кандинского.
@ tbj1982: Ты абсолютно прав. Это простая эвристика, и к результатам следует относиться с учетом этого. Это не золотая пуля, но это может быть полезным стартером.
blubb
4

На мой взгляд, подход TDD является естественным и эффективным:

  1. Запишите конкретные требования (данные, когда, затем)
  2. Переведите каждое требование (сначала самое важное) в модульное тестирование.
  3. Напишите наименьшее количество кода, чтобы пройти тест, написанный в # 2.
  4. После прохождения теста проведите рефакторинг вашего кода в соответствии с принципами проектирования SOLIDD.
  5. После # 4 убедитесь, что ваш код все еще проходит все написанные тесты.
  6. Повторите 2-5.

Благодаря этому процессу вы можете постепенно создавать тестируемый код со звуковым оформлением. Сначала вы можете подумать, что тест написания не нужен, но на самом деле это помогает вам построить архитектуру звука.

Тае Сунг Шин
источник
3

Вот шаги, которые я использую в коде C ++:

  1. решить имя класса
  2. решить параметры конструктора и члены данных.
  3. решить имена функций-членов и прототипы
  4. сделать его независимым от других классов
  5. Дизайн сделан, а все остальное - просто реализация.

Причина (1) состоит в том, что он определяет область действия функциональных возможностей класса. Причина (2) состоит в том, что он определяет, как класс общается с внешним миром. Причина (3) состоит в том, что он определяет, как выбрать, какая функциональность класса необходима в каждой ситуации. Причина (4) в том, что он позволяет использовать класс во многих различных ситуациях. Причина (5) заключается в том, что он определяет границу между дизайном и реализацией.

ТР1
источник
+1 за наименование. Удивительно, насколько просто добавление имен может организовать мыслительные процессы, поскольку вы неявно вносите все знания «реального мира» вместе с ним.
Марк Брэкетт