Как начать мыслить классами (сущностями) ?

Smacker

Новичок
Программирую с горем пополам пару-тройку лет больше как хобби + делаю утилиты для личного использования и автоматизации различных процессов

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

ООП в теории в контексте языка знаю. но применять абсолютно не умею, ибо мыслю действиями, а не сущностями!

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

Как вы пришли к мышлению классами?
 

zerkms

TDD infected
Команда форума
Какого плана ответ вы ожидаете услышать?

Писали много кода, читали много кода. Что-то в итоге научились делать.
 

С.

Продвинутый новичок
Как вы пришли к мышлению классами?
Мы пришли к этому еще в средней школе, изучая родной язык. Там были: подлежащее, сказуемое, определение. Это ООП почти в чистом виде.
 

A1x

Новичок
Как вы пришли к мышлению классами?
может все таки не классами а объектами? не зря же это называется Объектно Ориентированное П
классы это всего лишь типы объектов - эта мысль почему-то трудно дается пхпшникам, не знавшим других языков
Хотя в общем то понятно почему
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Архитектура решения проектируется не объектами, а классами, вызовы часто статические.
В реальном мире у нас нет ни наследования, ни интерфейсов, ни передачи по ссылке, а нарушить инкапсуляцию невозможно. Из общего только полиформизм.
Так что аналогия с объектами реального мира неуместна, а популярные примеры с аналогиями типа автомобиль/лифт вредны.
 

Period

Новичок
Вы сразу на вершине хотите оказаться. Так не получится. Придётся взбираться.

Начните просто юзать в коде объекты. Там где реально сами понимаете, что вот эта сущность просто напрашивается стать объектом, а не набором переменных с кучей функций, которым они передаются. Типа $user или $article. Без взяких наследований, интерфейсов, инкапсуляций, клонирований и т.д. Там, где не понимаете, лучше делать так, как хорошо получается.

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

По одному шагу. Если пытаться сразу всё применить, что бывает в ООП, то получится гораздо хуже, чем в процедурном виде.
 

Krishna

Продался Java
PHP вообще крайне не подходящий язык для постижения ООП. Вовсе не потому, что язык плох, или ограничен в ООП средствах, а потому, что в большинстве типовых для него задач выгоды ООП неочевидны. Это связанно со спецификой веб-проектов, составляющих основную область применения ООП.
А проще всего постигать ООП там, где очевидна выгода применения OOП-дизайна.

Я ООП постигал в универе на С++. Проникся делая лабу, частично придуманную преподом, частично собой, про мир в реальном времени, где росла трава, бегали коровы и волки, поедая друг друга. В пхп же в основном специфика веба, применения СУБД и пр не даёт так просто понять бонусы ООП, а потому осваивать ООП на пхп плохая идея.

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