Научиться мыслить объектно-ориентированным способом - PullRequest
41 голосов
/ 22 апреля 2010

Я программист, пытающийся научиться кодировать в объектно-ориентированной парадигме ... Я в основном работаю с PHP, и я подумал об изучении Zend Framework ... Итак, я почувствовал, что мне нужно научиться кодировать в OO PHP ....

Проблема в том, что, занимаясь кодом с использованием функций в течение достаточно долгого времени, я просто не могу заставить себя мыслить ОО ....

Также чувствовал, чтовозможно, я не единственный, кто сталкивался с этой проблемой с начала времен ...

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

Есть ли хорошие справочные книги или сайты, где можно найти помощь ... ??

Спасибо, что поделились своими знаниямии переживания ...

Ответы [ 3 ]

47 голосов
/ 26 апреля 2013

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

Я бы порекомендовал использовать следующие приемы, которые, если их применять свободно, заставят вас использовать ОО-приемы, даже если вы еще не знаете о них.

  1. Не копируйте и не вставляйте код - никогда.
  2. Создание классов, представляющих то, о чем вы говорите, когда говорите о функциональности - например, система ввода заказов будет иметь Заказы, Клиентов, Счета, OrderItems, InventoryItems и т. Д.
  3. При создании этих классов НЕ кодируйте общедоступный набор и не получите методы для доступа к членам данных класса.
  4. Добавьте методы к этим классам модели предметной области, которые выполняют работу с данным объектом. Order.invoice (), account.close (), InventoryItem.decrement (). Отсутствие открытых методов get покажет вам правильное местоположение кода (где данные - в соответствующем доменном объекте). Помните, что объект - это данные, и код, который на них воздействует - все, кроме обоих, не является объектом.
  5. В конечном итоге вы обнаружите, что вам нужно добавить несколько открытых методов get для некоторых учеников, и это нормально, просто подождите, пока вас не заставят это сделать. Неохотно добавляйте публичные методы get.
  6. На уровне приложения, почти каждая строка кода должна двигаться горы. Другими словами, большинство строк кода на уровне приложения должны вызывать методы модели предметной области.
  7. Поместите все функциональные возможности в объекты модели домена, а затем предоставьте эти функциональные возможности в приложении, подключив его к пользовательскому интерфейсу. Повторяю, функциональность заложена в модель предметной области, а не в приложение.

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

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

Удачи!

13 голосов
/ 22 апреля 2010
  1. Читайте чужой код - люди, которых вы знаете, хорошие разработчики
  2. Книги / статьи, которые преподают «идиоматическое использование» языка
  3. (Избегайте всего, что написано "через 21 день")
5 голосов
/ 22 апреля 2010

Требуется время.

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

  • Узнайте об основах ООП и продолжайтессылаясь на них для начала.
  • Чтение ОО-кода - существует множество проектов с открытым исходным кодом, которые вы можете попробовать.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...