Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Зачем нужны объекты? О_о
Форумы портала PHP.SU » » Объектно-ориентированное программирование » Зачем нужны объекты? О_о

Страниц (2): [1] 2 »
 

1. Botkin - 13 Ноября, 2013 - 18:25:52 - перейти к сообщению
Всем привет ) У меня такая проблема: теорию ооп я конечно знаю не идеально, но чтото да понимаю) Пишу я на мвц фреймворке (codeigniter), где контроллеры и модели представляют собой классы. Реализации же этих классов явно не показаны. Сейчас читаю литературу и просто не могу перестроиться на представление ооп вне этого контекста. Паттерны даются с трудом, и не могу получить полное их понимание изза этого момента. Подскажите пожалуйста, зачем таки нужны объекты, и дайте плз пример простого приложения, иллюстрирующего их применение. Естественно вне мвц )) Надеюсь на понимание ))
2. esterio - 13 Ноября, 2013 - 18:37:14 - перейти к сообщению
Ну смотрите есть у наз автомобиль, он умеет ехать, тормозить, стоять.
В процедурном стиле вам бы пришлось писать следующие функции
PHP:
скопировать код в буфер обмена
  1. function drive(){}
  2. function stop(){}
  3. function stand(){}

А теперь представим что нужно совершать действия с конкретным автомобилем. Ваши действия выше

теперь то же самое в ООП
PHP:
скопировать код в буфер обмена
  1. class Driving
  2. {
  3.         public $car;
  4.        
  5.         public function __construct($car)
  6.         {
  7.                 $this->car = $car;
  8.         }
  9.        
  10.         public function drive()
  11.         {
  12.                 //$this->car //do somesing
  13.         }
  14.         public function stop(){}
  15.         public function stand(){}
  16. }
  17.  
  18. $driving = new Driving($car);
  19. $driving->drive();


Как видим все намного проще. Но тут есть у наз автобус который имеет автоматические двери, которые надо открить.
PHP:
скопировать код в буфер обмена
  1. class Bus extends Driving
  2. {
  3.         public function open()
  4.         {
  5.                 //$this->car //open the door
  6.         }
  7. }

Все и надалее просто
3. DelphinPRO - 13 Ноября, 2013 - 18:38:50 - перейти к сообщению
Botkin пишет:
Зачем нужны объекты?

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

Короче, если прямо отвечать на поставленный вопрос - для облегчения труда программиста Улыбка
4. Botkin - 15 Ноября, 2013 - 12:48:47 - перейти к сообщению
Спасибо за ваши ответы! ) Наверное стало немножко легче ) Но вопрос грамотного применения всеравно остался... Можно попросить написать еще один маленький пример кода с объектами в контексте веб-приложения? Например использование объектов в написании блога или новостей там ) Буду очень благодарен )
5. caballero - 15 Ноября, 2013 - 13:23:34 - перейти к сообщению
Цитата:
Но вопрос грамотного применения всеравно остался.

грамотное применение приходит с опытом. Как и грамотное програмирование вообше. других вариантов нет.
6. Botkin - 15 Ноября, 2013 - 17:32:10 - перейти к сообщению
caballero пишет:
грамотное применение приходит с опытом. Как и грамотное програмирование вообше. других вариантов нет.


Так случилось, что этот момент в МВЦ не очень раскрыт, и манипулировать приходится с классами... ) вот и прошу простой примерчик для понимания )
7. esterio - 15 Ноября, 2013 - 17:36:41 - перейти к сообщению
тут простым примерчиком не обойдешся. либо полностю система, что собственно для Вас ничего не даст. Либо Вы пойдете тем же путем что и все - набивание собственных шышек. и MVC здесь вовсе не при делах.
8. Botkin - 15 Ноября, 2013 - 18:20:39 - перейти к сообщению
esterio, вот в том то и дело, что не при делах. Так как, если мне надо вынести какойто кусок кода в метод - просто добавляется метод в модель, или даже в хелпер... А потом модель подключается там, где надо. При такой архитектуре мне и непонятно, зачем вообще нужны объекты и как их применять. Я всего то прошу простой пример, на уровне того что приводили выше, но в вебе. Целые системы расписывать не надо )
9. caballero - 15 Ноября, 2013 - 18:22:29 - перейти к сообщению
Цитата:
Я всего то прошу простой пример, на уровне того что приводили выше, но в вебе

простым примерам все равно в вебе они или нет
10. Botkin - 15 Ноября, 2013 - 18:33:11 - перейти к сообщению
caballero пишет:
простым примерам все равно в вебе они или нет


Позволю себе не согласиться ) Машина едет, дерево растет, дом стоит - с примерами из жизни все просто и понятно ) С вебом интересней в плане того, какие сущности Вы бы выделили в объекты и какими методами их наделили )
11. caballero - 15 Ноября, 2013 - 18:38:44 - перейти к сообщению
Цитата:
Позволю себе не согласиться

напрасно себе такое позволяете. не сочетается с вопросом с которым вы сюда пришли.

если я работаю с бизнес-данными то нет разницы веб это или нет. А если речь о логике работы веба то тут уже стоит вопрос об архитектуре сайта а значит простых примеров не бывает. Просто потому что нет практического смысла.
12. _Dark_ - 15 Ноября, 2013 - 18:49:21 - перейти к сообщению

caballero прав.
13. Zerrata - 20 Ноября, 2013 - 11:04:30 - перейти к сообщению
Я сама только недавно стала постигать все премудрости ООП + МВЦ, но возможно смогу подсказать Вам на примере.
Самый простой пример - текстовая статья. Пусть она имеет такие свойства как автор и содержание. Также статья имеет методы которые помещают ее в базу данных (новая статья) и извлекают из базы для показа посетителям сайта.
Код для контроллера будет примерно такой:
PHP:
скопировать код в буфер обмена
  1.  
  2. class Controller
  3. {
  4.         public $author;
  5.         public $content;
  6.        
  7.        public function showArticle() {
  8.                 $model=new Model();  // обращаемся к модели, т.к. она заведует данными
  9.                 $news=$model->getArticle(); // получаем из базы статью
  10.                 // здесь правильней было бы вызвать вид для показа статьи,
  11.                 // но я решила чуть схалтурить для упрощения кода
  12.                 $this->author=$news['author'];
  13.                 $this->content=$news['content'];
  14.                 // ну и отобразим их сразу
  15.                 echo $this->author . ' <br/>' . $this->content;
  16.                  
  17.         }
  18.         public function addArticle(){}
  19.        
  20. }
  21.  
  22. $controller = new Controller();
  23. $controller->showArticle();
  24.  


Прошу сильно не пинать - сама только разбираюсь. За объяснения что не так и почему - буду очень благодарна
14. esterio - 20 Ноября, 2013 - 16:41:26 - перейти к сообщению
В плане парадигме MVC (а название Controller об етом намекает) такое не приемлимо. Контроллер знать не знает о хранилищах данных(более того о базе). Для етого существуют модели. Вы как раз ее и описали практически. Только вместо прямого вывода в браузер идет return. А контроллер отдает ети данные во вюху, которая и делает echo
15. caballero - 20 Ноября, 2013 - 17:11:13 - перейти к сообщению
Цитата:
А контроллер отдает ети данные во вюху

Спорный вопрос

в класической парадигме представление само обращается к модели за теми данными которые ему нужны для рендеринга.
Контроллер только указывает какое представление должно быть показано.

 

Powered by ExBB FM 1.0 RC1