Що таке об'єктно-орієнтований процес мислення? [зачинено]


9

Я вивчав OOP спільно з впровадженням Zend MVC протягом останніх кількох місяців. Я, як правило, новачок у програмуванні, але відчуваю, що мені слід навчитися речам «правильно», що для мене означає переконатися, що я розумію, чому все робиться так, як є. Тобто, я виявив, що, навчившись робити щось (що завгодно, скажімо, музика), найкращий спосіб навчитися щось робити - це знати в першу чергу, чому це робиться саме так.

У будь-якому разі, я дуже важко намагаюся зрозуміти, як розвивати власні бізнес-моделі (тобто, M MVC), і я вирішив, що це не тому, що я взагалі не розумію ООП, тому що вивчав його протягом кількох місяців, і я не думаю, що поняття дуже важко зрозуміти. Я знаходжу факти, які я вивчав, дуже інтуїтивно. Проблема для мене, я думаю, полягає в перетворенні власних проблем на об'єктно-орієнтовані рішення. Приклади в книгах (які я читав до цих пір) занадто очевидні, тому процес перекладу проблеми на об’єкти не дуже складний. Те, що я думаю, що я можу бракувати, - це абстрагований процес високого рівня. Якийсь перелік кроків або питань, на які кожне об’єктно-орієнтоване рішення повинно відповісти на найвищому рівні.

Якби вам довелося описати такий процес не більше ніж за п’ять кроків, якими вони були б і чому? Який найбільш ефективний процес перетворення будь-якої проблеми в об'єктно-орієнтоване рішення?


1
OOP завжди не все, що ...
Робота

Ви вивчали OOP, чи читали ви ще про дизайнерські шаблони ?
Зоредаче

1
Я рекомендую вам прочитати книгу Еріка Евана про дизайн, керований доменом, коли вам важко створювати моделі. Дивіться також відповідь @Simon Stellings. Книга висвітлює цей процес досить докладно.
Сокіл

@Zoredache Я натрапив на концепцію дизайнерських моделей, а також на кілька прикладів таких, як синглтон, фабрика та сам MVC (який у реалізації Zend також є переднім контролером). Однак це був мій наступний крок, так би мовити. Я взяв книгу Мартіна Фаулера про моделі підприємств, і до цього часу я прочитав лише частину вступу. Яке вступ ясний, простий у читанні, який ви б рекомендували?

@Falcon У мене було запитання щодо php / MySQL та форматування дат на SO тому дня, і я вибрав би вашу відповідь, але це був лише коментар, для чого це варто.

Відповіді:


10

Пошук підходящої моделі не завжди прямо вперед. Саме одна з цих речей потребує більше досвіду, ніж простого знання. Однак наступний простий рецепт може допомогти вам подолати початковий ментальний блок.

Він був спочатку описаний у цій роботі Абботтом і його часто називають "текстовим аналізом Абботта".

  1. Напишіть специфікацію простого тексту.
  2. Визначте класи: Іменники - хороші кандидати.
  3. Знайдіть атрибути: Прикметники / прислівники - хороші кандидати.
  4. Знайдіть операції: Дієслова - хороші кандидати.
  5. Знайдіть асоціації між класами.
  6. Уточнити.

Приклад:

Іменники , дієслова і adjectivesпозначаються.

Бібліотека містить книги та журнали . Це може бути кілька примірників даної книги . Деякі книги призначені лише для short-term позик . Усі інші книги можуть бути запозичені будь-яким членом бібліотеки протягом трьох тижнів. Зазвичай члени бібліотеки можуть позичати до шести предметів одночасно, але члени колективу можуть позичати до 12 предметів одночасно. Журнали можуть позичати лише члени персоналу .

Перша ітерація аналізу дасть:

Класи:

  • Бібліотека
  • Книга, журнал
  • Скопіювати
  • Позика
  • Член бібліотеки
  • Пункт
  • Співробітник

З цього моменту ви можете подумати, який клас потребує, які атрибути та методи реалізувати поведінку, а потім все більше вдосконалювати цю модель.


1
Хороша відповідь. Окрім статті Ебботта, я рекомендую книгу Еріка Евана про доменний дизайн . Це вчить, як створити всюдисущу мову для проекту та як відгоняти потужну модель з нього.
Сокіл

Мене привертає ця відповідь, тому що я вивчив лінгвістику трохи, і це робить для мене добрий інтуїтивний сенс без особливих зусиль, однак я боюся цього з тих же причин, тому що я виявив, що занадто багато аналогій може звести мене з глузду .

@Falcon +1 за те, щоб рекомендувати книгу з обкладинкою Кандинського.

@ tbj1982: Ви абсолютно праві. Це проста евристика, і результати слід враховувати це на увазі. Це не золота куля, але це може бути корисним початком.
блека

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 для називання. Дивовижно, наскільки просто додавання імен може організувати мислені процеси, оскільки ви неявно привносите в нього всі знання про "реальний світ".
Марк Брекетт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.