Покинул форум
Сообщений всего: 16
Дата рег-ции: Март 2012 Откуда: Россия, Пермь
Помог: 0 раз(а)
Доброго всем времени суток.
Занимаюсь активным внедрением ООП в свой мозг и столкнулся с вот какой проблемой. Как правильно организовать вызов тех или иных методов к-либо класса?
Приведу пример. Класс User в котором есть методы регистрации, авторизации, редактирования и удаления пользователя (к примеру). Есть 4 формы соответственно для регистрации, авторизации, редактирования ну и типа удаления.
Классический вариант для процедурного программирования когда в форме стоит
action="test.php?act=register",
action="test.php?act=login" и тд. В файле test.php мы пользуем switch и запускаем ту или иную функцию. Здесь все предельно ясно. Но вот как быть с ООП? Пользоваться ли switch и если "да", то где его пользовать? После создания экземпляра класса или в теле класса, передавая туда $act? Или всеже есть другой способ? Спасибо.
caballero
Отправлено: 06 Марта, 2012 - 19:24:53
Активный участник
Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011 Откуда: Харьков
Помог: 126 раз(а)
Дергать статические функции классов точно так же как и в процедурном стиле.
Потому как ООП здесь и не пахнет.
Покинул форум
Сообщений всего: 16
Дата рег-ции: Март 2012 Откуда: Россия, Пермь
Помог: 0 раз(а)
caballero пишет:
Потому как ООП здесь и не пахнет.
А можно про запахи поподробнее?
Bio man
Отправлено: 06 Марта, 2012 - 19:55:18
Постоянный участник
Покинул форум
Сообщений всего: 2751
Дата рег-ции: Июль 2010 Откуда: Даугавпилс, Латвия
Помог: 52 раз(а)
spirit пишет:
А можно про запахи поподробнее?
ну для начала стоит понять, что ООП стоит на 3 китах: наследование, инкапсуляция и полиморфизм. при отсутствии одного или более из китов это уже не ООП. в ООП все есть объект а объект это переменная определенного типа (в ООП под типом часто подразумевают класс). у объекта есть поведение (методы) и состояние (свойства)
DeepVarvar
Отправлено: 06 Марта, 2012 - 19:59:08
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
Чем пахнет?
----------------------------- spirit вместо switch можете посмотреть в сторону method_exists (Добавление)
((мы мягко подойдем к осознанию того, кто такие роутер и контроллер))
Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011 Откуда: Харьков
Помог: 126 раз(а)
Цитата:
ну для начала стоит понять, что ООП стоит на 3 китах: наследование, инкапсуляция и полиморфизм. при отсутствии одного или более из китов это уже не ООП.
Неверно. Суть ООП - это инкапсуляция. Остальное -удобные фишки.
Покинул форум
Сообщений всего: 16
Дата рег-ции: Март 2012 Откуда: Россия, Пермь
Помог: 0 раз(а)
DeepVarvar, все, понял, но caballero прав -
caballero пишет:
в данном случае не имеет смысла -методы все известны наперед.
меня просто беспокоит вот что. У меня весь код внутри классов и switch там же а в обычном файле только автолоад, создание экземпляра и вызов метода в котором лежит switch:
class.test.php
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
caballero, а я считаю что всегда нужно проверять есть ли метод,
даже когда они известны.
И если метода нет - бросать исключение.
Пусть для данной ситуации их четыре.
Но доступных контроллеров/методов может быть и десятка два-три..
И чтобы не лазить больше никуда и не переписывать/дописывать,
лучше сразу сделать не-свитч.
Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008 Откуда: Москва
Помог: 57 раз(а)
Bio man пишет:
при отсутствии одного или более из китов это уже не ООП
Нуу это спорно. Например, я считаю, что главный кит - инкапсуляция, потому что грамотная инкапсуляция в первую очередь позволяет снизить сложность проекта.
Чрезмерное наследование - наоборот увеличивает сложность (правда, без него никак не обойтись). Но обходиться на маленьких задачах без него вполне можно. (Добавление)
caballero пишет:
Суть ООП - это инкапсуляция. Остальное -удобные фишки.
О, я не один так считаю (Добавление)
DeepVarvar пишет:
ще бы объяснить доходчиво, что это за "инкапсуляция" такая..
Попробую. Есть логика. Например, логика того, как мы идем вечером с работы домой.
1. Сохранить наделанное.
2. Надеть куртку.
3. Идти, идти, пока не придешь.
Это три функции. Разберем, например, вторую. Ее реализация будет примерно такой:
2.1. Поднять руку, снять ее с вешалки, повернуть к себе нужной стороной, сунуть в нее руки, проверить, вошли ли руки удачно (если не удачно, то бросить ексепшн и попробовать заново), застегнуть.
Вот функция НадетьКуртку инкапсулировала в себя сложный процесс. Вся эта сложная вещь скрыта в том, что описано в 2.1 (это приватные методы класса. Ими не положено пользоваться из вне и о них не нужно даже думать), а мы беззаботно пользуемся публичным методом НадетьКуркту нашего класса.
А как разработчик класса, мы можем менять, оптимизировать эти приватные методы, инкапсулированные от пользователя класса, никак не мешая ему пользоваться старыми добрыми публичными методами, которые мы ему дали.
Часто мы можем сами выступать и как разработчик класса, и как пользователь, инкапсулировав его сложность на этапе разработки и дальше беззаботно пользоваться его интерфейсом(его публичными методами).
Вот. Это конечно неполное такое описание, но какое-то накатал
DeepVarvar
Отправлено: 07 Марта, 2012 - 10:01:43
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
Champion пишет:
Попробую
А я добавлю еще так:
Инкапсуляция:
Есть объект "машина" и объект "водитель". И вот водителю (блондинке),
совершенно не нужно знать как работает двигатель внутреннего сгорания.
Она просто давит на педали (у нее АКПП) и крутит руль.
Вот раньше чтобы быть водителем нужно было знать как там все внутри работает,
сейчас уже нет.
----------
Не правильное наследование:
Никогда не было так, чтобы машина стала думать за водителя.
Ну положим в настоящее время некоторые зачатки "автопилота" уже существуют.
Но вот чтобы человек пил бензин, прогревался зимой, тарахтел под окнами (бабушки на лавочках не в счет) и "делал ноги колесом" - точно никогда не будет.
Если взялись наследовать, нужно подумать а нужно ли это.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.