[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Не могу понять ООП
mrBroot
Покажите путь истинный, изучаю php, много чего уже вышло из под моего пера, в основном небольшие скрипты на фрилансе... и везде я использовал процедурный подход... Сейчас начал изучать ООП, и вот незадача... я знаю как создавать классы, как наследоваться, что такое методы поля и свойства, что такое экземпляр класса, представляю что такое паттерны проектирования... но вот как правильно, как это должно выглядеть? Как правильно пользоваться всем вот этим... где можно посмотреть? Вообщем не хватает какой-то мелочи в моих знаниях...
Valick
mrBroot, этого многим не хватает smile.gif
где-то давно в книге читал что РНР не удачный вариант для постижения парадигмы ООП.

_____________
Стимулятор ~yoomoney - 41001303250491
twin
На это многие хотели бы взглянуть... Если найдешь, покажи нам тоже.

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

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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
paul85
Лично я использую ООП в PHP больше для абстракции. В качестве обертки для некой сущности с раздельными областями видимости. Ну как ящички, в которых лежат разные штуки - не мешаются и не путаются друг с другом.

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

И вообще, ООП создавался больше для написания библиотек.

ИМХО.
Invis1ble
Я думаю тут серебряной пули нет, поэтому это вопрос достаточно непростой. На мой взгляд: нужно научиться декомпозировать систему на объекты, свойства и методы.
Например:

классы для форума:
- топик
- комментарий
- юзер (абстрактный класс либо интерфейс, наследниками будут зарегистрированные юзеры и гости)
и т.д.

свойства топика:
- дата создания
- автор (это отдельный объект класса юзер со своим набором свойств и методов)
- текст
и т.д.

Всё это приходит с опытом через практику, и я не удивлюсь, если я и сам неправильно или не до конца понимаю суть smile.gif

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

Valick
Согласен с Invis1ble.
ООП начинается задолго до начала написания самого кода. Нужно смоделировать всю систему целиком оперируя понятиями сущности.


_____________
Стимулятор ~yoomoney - 41001303250491
Invis1ble
Прикол в том, что гуру не сильно спешат делиться опытом в этой области. У меня 3 версии, почему это происходит:
1. боятся конкуренции.
2. боятся, что кто-то (более гуристый гуру) раскритикует их мнение в пух и прах.
3. им некогда этим заниматься или попросту лень smile.gif

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

sergeiss
Цитата (Invis1ble @ 8.04.2014 - 20:33)
У меня 3 версии, почему это происходит:

Я добавлю 4-ю версию:
4. Никто так и не понял суть ООП, поэтому и не могут объяснить wink.gif

Лично я использую объекты, но это не полноценное ООП.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
linker
Кто действительно не понимает, кто-то не до конца, но ООП - это тема, которую не объяснить на пальцах, поэтому создаётся впечатление, что никто не может вообще объяснить, что такое ООП.

_____________
Gear Framework
Gear Framework на Github
mrBroot
Я вопрос задал, с целью хотя бы представить, как все это должно выглядеть... можно на обычном примере, авторизация пользователя... как я это представляю:

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

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

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

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

Но вот если пароли не совпадают, нам нужно вывести сообщение об этом, в админке оно будет просто выводится, распарсив HTML шаблон и заменив текст в поле <legend> филдсета самой формы авторизации... а вот как сделать на сайте... нужно чего то подменять.. как правильно????

Надеюсь понятно описал, моменты с исключениями проверками на ошибки и все такое опустил!!!
Valick
mrBroot, наследование, инкапсуляция - это все понятно. На мой взгляд вам не хватает абстракции. Лично я постоянно испытываю нехватку абстракции.
Трудно создать модель абстрагировавшись от своих знаний, в частности РНР, и оперировать понятиями конкретной задачи, а не конструкциями языка.

_____________
Стимулятор ~yoomoney - 41001303250491
bestxp
Хе хе, крутая тема, вставлю своё ИМХО для этого.

ООП это такая крутая штука стоящая на трех столпах ( Полиморфизм, Инкапсуляция и Наследования) всем оно известно и думаю на практике тоже. А вот дальше после теории наступает тихий ужас, первое прочитать прочитали, а как применять, и начинают лепить кучу огромную кучу лапшекода, изучив пару паттернов, при использовании они становятся Молотками Маслоу ( золотыми молотками см вики )

После я бы посоветовал изучить значение аббревиатур SOLID DRY KISS GRASP всё есть в вики.
Понимание их приведет как раз вас к clean code , то есть чистому и качественному коду.
Как пример, у класса должна быть только одна ответственность, например Если это модель данных, в которой описана работа автомобиля, то он не должен знать как он хранится в бд, абсолютно никак, для получения и записи в бд у нас отдельный механизм(сервис)


и после этого вы сможете придти уже к самому верху мастерства DDD (domain driven design)
постигнув его, вы уже не будете задавать вопросы что такое ООП и что такое взаимодействие внутри классов, и как отделять бизнес логику от логики инфраструктуры
mrBroot
bestxp

вот почти то чего я и хотел прочитать... подробней бы
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.