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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Зачем нужны объекты? О_о

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Описание: не кидайте камнями ) Лучше помогите изменить мышление
Botkin
Отправлено: 13 Ноября, 2013 - 18:25:52
Post Id


Новичок


Покинул форум
Сообщений всего: 31
Дата рег-ции: Нояб. 2013  


Помог: 0 раз(а)




Всем привет ) У меня такая проблема: теорию ооп я конечно знаю не идеально, но чтото да понимаю) Пишу я на мвц фреймворке (codeigniter), где контроллеры и модели представляют собой классы. Реализации же этих классов явно не показаны. Сейчас читаю литературу и просто не могу перестроиться на представление ооп вне этого контекста. Паттерны даются с трудом, и не могу получить полное их понимание изза этого момента. Подскажите пожалуйста, зачем таки нужны объекты, и дайте плз пример простого приложения, иллюстрирующего их применение. Естественно вне мвц )) Надеюсь на понимание ))

(Отредактировано автором: 13 Ноября, 2013 - 18:26:35)

 
 Top
esterio
Отправлено: 13 Ноября, 2013 - 18:37:14
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


Помог: 127 раз(а)




Ну смотрите есть у наз автомобиль, он умеет ехать, тормозить, стоять.
В процедурном стиле вам бы пришлось писать следующие функции
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. }

Все и надалее просто
 
 Top
DelphinPRO
Отправлено: 13 Ноября, 2013 - 18:38:50
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




Botkin пишет:
Зачем нужны объекты?

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

Короче, если прямо отвечать на поставленный вопрос - для облегчения труда программиста Улыбка


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
Botkin
Отправлено: 15 Ноября, 2013 - 12:48:47
Post Id


Новичок


Покинул форум
Сообщений всего: 31
Дата рег-ции: Нояб. 2013  


Помог: 0 раз(а)




Спасибо за ваши ответы! ) Наверное стало немножко легче ) Но вопрос грамотного применения всеравно остался... Можно попросить написать еще один маленький пример кода с объектами в контексте веб-приложения? Например использование объектов в написании блога или новостей там ) Буду очень благодарен )
 
 Top
caballero
Отправлено: 15 Ноября, 2013 - 13:23:34
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




Цитата:
Но вопрос грамотного применения всеравно остался.

грамотное применение приходит с опытом. Как и грамотное програмирование вообше. других вариантов нет.


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
Botkin
Отправлено: 15 Ноября, 2013 - 17:32:10
Post Id


Новичок


Покинул форум
Сообщений всего: 31
Дата рег-ции: Нояб. 2013  


Помог: 0 раз(а)




caballero пишет:
грамотное применение приходит с опытом. Как и грамотное програмирование вообше. других вариантов нет.


Так случилось, что этот момент в МВЦ не очень раскрыт, и манипулировать приходится с классами... ) вот и прошу простой примерчик для понимания )
 
 Top
esterio
Отправлено: 15 Ноября, 2013 - 17:36:41
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


Помог: 127 раз(а)




тут простым примерчиком не обойдешся. либо полностю система, что собственно для Вас ничего не даст. Либо Вы пойдете тем же путем что и все - набивание собственных шышек. и MVC здесь вовсе не при делах.
 
 Top
Botkin
Отправлено: 15 Ноября, 2013 - 18:20:39
Post Id


Новичок


Покинул форум
Сообщений всего: 31
Дата рег-ции: Нояб. 2013  


Помог: 0 раз(а)




esterio, вот в том то и дело, что не при делах. Так как, если мне надо вынести какойто кусок кода в метод - просто добавляется метод в модель, или даже в хелпер... А потом модель подключается там, где надо. При такой архитектуре мне и непонятно, зачем вообще нужны объекты и как их применять. Я всего то прошу простой пример, на уровне того что приводили выше, но в вебе. Целые системы расписывать не надо )
 
 Top
caballero
Отправлено: 15 Ноября, 2013 - 18:22:29
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




Цитата:
Я всего то прошу простой пример, на уровне того что приводили выше, но в вебе

простым примерам все равно в вебе они или нет


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
Botkin
Отправлено: 15 Ноября, 2013 - 18:33:11
Post Id


Новичок


Покинул форум
Сообщений всего: 31
Дата рег-ции: Нояб. 2013  


Помог: 0 раз(а)




caballero пишет:
простым примерам все равно в вебе они или нет


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


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




Цитата:
Позволю себе не согласиться

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

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


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
_Dark_
Отправлено: 15 Ноября, 2013 - 18:49:21
Post Id


Частый гость


Покинул форум
Сообщений всего: 231
Дата рег-ции: Окт. 2011  


Помог: 5 раз(а)

[+]



caballero прав.
 
 Top
Zerrata
Отправлено: 20 Ноября, 2013 - 11:04:30
Post Id



Новичок


Покинул форум
Сообщений всего: 20
Дата рег-ции: Июль 2013  


Помог: 0 раз(а)




Я сама только недавно стала постигать все премудрости ООП + МВЦ, но возможно смогу подсказать Вам на примере.
Самый простой пример - текстовая статья. Пусть она имеет такие свойства как автор и содержание. Также статья имеет методы которые помещают ее в базу данных (новая статья) и извлекают из базы для показа посетителям сайта.
Код для контроллера будет примерно такой:
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.  


Прошу сильно не пинать - сама только разбираюсь. За объяснения что не так и почему - буду очень благодарна
 
 Top
esterio
Отправлено: 20 Ноября, 2013 - 16:41:26
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


Помог: 127 раз(а)




В плане парадигме MVC (а название Controller об етом намекает) такое не приемлимо. Контроллер знать не знает о хранилищах данных(более того о базе). Для етого существуют модели. Вы как раз ее и описали практически. Только вместо прямого вывода в браузер идет return. А контроллер отдает ети данные во вюху, которая и делает echo
 
 Top
caballero
Отправлено: 20 Ноября, 2013 - 17:11:13
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




Цитата:
А контроллер отдает ети данные во вюху

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

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


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Объектно-ориентированное программирование »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB