Помогите разобраться с ООП

Помогите разобраться с технологией объектного подхода в PHP

 
Посетитель
small user social cms
МедальКубок зрительских симпатийАвторитет форума
Сообщений: 1224
Добрый вечер помогите разобраться с классами и объектами. Когда писал скрипты использовал метод аналогии, но пришло время переосмыслить и понять технологию работы с классами. Пробывал разобраться http://www.php.su/learnphp/phpoo/ используя это и само систему.
В литературе, что мне попадалось написано почти одно и тоже.
Посетитель
small user social cms
Медаль
Сообщений: 304
Наименование темы очень развеселило:

"ООП" - общепринятое в масс-медиа наименование Организации Освобождения Палестины... v
И призыв с ней "разобраться" звучит весьма двусмысленно rofl
Сейчас набегут желающие...
(прошу отнестись к посту как к вечерне-праздничному флуду... можно и потереть ф топку!)
Сделано на INSTANT - Нижегородская социальная сеть
Реклама
cms
InstantCMS Team
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 4359
Dimitrius, ты бы задавал более конкретный вопрос что ли...
Видео каталог для InstantCMS | Аудио каталог для InstantCMS | Мы Вконтакте | Предложение для спонсоров
Посетитель
small user social cms
Медаль
Сообщений: 127
Dimitrius, PHP (Personal Home Page tools) написан на С - думаю и разобраться проще будет почитав учебники по С, а не PHP
Редактировалось: 2 раз (Последний: 1 мая 2011 в 22:19)
Yandex Деньги 410011070140523
WM Рубли R257029980523
WM $ Z852943902059
WM Euro E309768424084
Помощь только платно!!!

Ростов на Связи
ROSTOV-ON.RU
Посетитель
small user social cms
МедальКубок зрительских симпатийАвторитет форума
Сообщений: 1224
Что дает использование классов?
Чем отличается программа написанная на только на функциях от программы написанной с использованием классов?
Посетитель
small user social cms
Медаль
Сообщений: 127
Dimitrius, Причем ту только фунции и классы =)
Класс это Аля много мерный массив (только может содержать кучу видов объектов + переопределение класса классом)... и пример функция в старом виде без использщования классов, например возращает только 1 значение, а при использовании класса может передавать целый контейнер который содержит класс, причем созхдаваемый динамически, а не предопределнный как ранее
Редактировалось: 1 раз (Последний: 1 мая 2011 в 22:26)
Yandex Деньги 410011070140523
WM Рубли R257029980523
WM $ Z852943902059
WM Euro E309768424084
Помощь только платно!!!

Ростов на Связи
ROSTOV-ON.RU
Посетитель
small user social cms
МедальКубок зрительских симпатийАвторитет форума
Сообщений: 1224
Хеее))) я тут обращался к знакомым студентам програмистами)))Они сказали, что сами его не понимают))) а курсачи у них заказаны)
Хм... по поводу учебника по СИ что-то не возникало надо глянуть будет.
Мой язык до этого был Pascal мы не использовали объектно-ориентированный подход.
Просто из-за этого у меня не складываются отношения и с JavaScript.

Не пониманию в чем смысл этого многомерного массива с объектами...
Посетитель
small user social cms
Медаль
Сообщений: 127
Dimitrius, я сам первое образование получил как программист С, Pascal (92-93 годы)
Согласен там небыло классов максимум - многомерные массивы + паскаль имеет деление на функции и профедуры а в си все функции... тоесть если в си пустая функция без возврата значения (по опрделению паскаля профедура) может стать при определенных условиях фукцией (с возвращаемым значением т.е. не пустой изначально дав ей тип void станет int) в паскале такое ограничение меня отталкнуло и в итоге я ушел в сторону си отбросив паскаль.
Синтаксис JavaScript очень схож с синтаксисом Си. PHP хоть и писался изначально на Си но потом части его были написаны на дргуих языках включая паскаль (в паскале с классами и по сей день много чего не але) в итоге хоть и имеет много схожего с Си но очень далек от него по функционалу и из-за сферы применения и из-за набора библиотек.
Еще момент в классе определения могут оказаться и сами функции в которых они определяются.... - вот в этом и есть очень сильное отличие от многомерного массива + массив не може хранить в себе разнотипные данные и массив не возможно передать с набором значений нужно указать изначально внешний указатель на массив и из функции уже работать с данными через указатель а не напряму как с классами например. ну это основные отличия пожалуй...
Yandex Деньги 410011070140523
WM Рубли R257029980523
WM $ Z852943902059
WM Euro E309768424084
Помощь только платно!!!

Ростов на Связи
ROSTOV-ON.RU
Посетитель
small user social cms
МедальКубок зрительских симпатийАвторитет форума
Сообщений: 1224
Я паскаль изучал на курсах 01-03, после школы ходил. После чего поступил в колледж получил ср. пр. юридическое. Затем высшее тоже гумманитарное. Но вот чувствую, что меня тянет на кодинг. Я от этого удовольствие получаю, есть стремление учится. Для меня это как творчество...
Но после паскаля, всё никак не могу перейти на объектно-ориентированную модель программирования
Посетитель
small user social cms
Медаль
Сообщений: 127
Dimitrius, с си начний smile хотя лучше C# он на данный момент акутальнее и более оплачиваем ))
Yandex Деньги 410011070140523
WM Рубли R257029980523
WM $ Z852943902059
WM Euro E309768424084
Помощь только платно!!!

Ростов на Связи
ROSTOV-ON.RU
Посетитель
small user social cms
МедальКубок зрительских симпатийАвторитет форума
Сообщений: 1224
он похож на делфи?

вижу не похож)))
Редактировалось: 1 раз (Последний: 1 мая 2011 в 23:33)
InstantCMS Team
small user social cms
МедальКубок зрительских симпатийАвторитет форума
Сообщений: 1176
Dimitrius:
Что дает использование классов?
Более логичный и гибкий код, который потом намного проще расширять

Например мы пишем игру, в которой есть два типа монстров, легкие (Lite) и тяжелые (Heavy). Они отличаются, скажем, уровнем брони. То есть удар игрока по легкому монстру снимает с него 10 жизней, а по тяжелому - всего 2. И вот нам нужно написать функцию, которая эти удары обрабатывает:

Код PHP:
  1.  
  2. function hitMonster($monster_type, $monster_health){
  3. if ($moster_type=='Lite') { $monster_health -= 10; }
  4. if ($moster_type=='Heavy') { $monster_health -= 2; }
  5. return $monster_health;
  6. }
  7.  
Получается, что добавляя нового монстра мы должны добавлять новую строчку в эту функцию. В итоге, когда монстров станет много, функция разрастется до безобразия.

Теперь посмотрим как это решается с помощью ООП. Для начала создаем класс монстра:

Код PHP:
  1.  
  2. class Monster{
  3. private $health;
  4. public function __construct() { }
  5. public function hit(){ }
  6. public function getHealth() { return $this->health; }
  7. }
  8.  
Далее создаем класс легкого монстра:
Код PHP:
  1.  
  2. class LiteMonster extends Monster{
  3. public function __construct() { $this->health = 100; }
  4. public function hit(){ $this->health = $this->health - 10; }
  5. }
  6.  
и тяжелого:

Код PHP:
  1.  
  2. class HeavyMonster extends Monster{
  3. public function __construct() { $this->health = 150; }
  4. public function hit(){ $this->health = $this->health - 2; }
  5. }
  6.  
в коде монстры создаются так:

Код PHP:
  1.  
  2. $lite = new LiteMonster();
  3. $heavy = new HeavyMonster();
  4. //ударим легкого
  5. $lite->hit();
  6. echo $lite->getHealth(); //выведет "90"
  7.  
что получаем в итоге:

- чтобы добавить монстра, просто создаем еще один класс;
- каждый монстр описан в собственном классе (в отдельном файле) и никак не смешивается с остальными;
- если надо добавить какую-то функцию всем монстрам сразу - правим родительский класс Monster;

В этом и состоит главное преимущество ООП - удобное разделение кода и его расширяемость.

Например, в ближайших релизах InstantCMS мы будем переводить компоненты на классы. И это даст одно важное преимущество: чтобы что-то изменить в компоненте, достаточно будет создать свой класс, расширяющий базовый компонент, и переопределить в нем только нужный метод. Тогда при обновлении движка мы не будем терять наших изменений.

Надеюсь прояснил хоть что-то :)
Вопросы и ответы
Посетитель
small user social cms
МедальКубок зрительских симпатийАвторитет форума
Сообщений: 1224
Да)))) происходит переосмысление=)
Я буду писать простым языком))) Допустим тут просили сделать мини игры.
Задача сделать ядро(приложение) для гибкого добавления и использования игр.
Что мы делаем в самом начале:
1. определяем самый главный класс InstantGames. Сразу вопрос читал про конструктор. при написании такова имени класса не возникнет конфликтов? Я так понял плагины построены на принцыпе конструктора?
2. дальше мы думаем какие свойства будут обладать наш класс
- он будет добавлять мини игры
- создавать игру
- подключаться к игру
- запрашивать список игр
- запрашивать рейтинг по игре
- запрашивать рейтинг по игроку.

так я понимаю что рейтинг это будет еще один класс?
Как правило выстраивать иерархию?
Много ли может быть вложений классов?
Как выстраивать логику при написании проектана классах?
В инстанте как я понимаю самый главный класс cmsCore ?
Редактировалось: 1 раз (Последний: 2 мая 2011 в 13:14)
Посетитель
small user social cms
МедальКубок зрительских симпатийАвторитет форума
Сообщений: 1224
Эм... темку поднял)
InstantCMS Team
small user social cms
МедальКубок зрительских симпатийАвторитет форума
Сообщений: 1176
вы тут вопросов задали на пару толстых учебников, так что смысла поднимать ее нет :)

могу только посоветовать почитать вот эту книгу, в сети можно найти PDF
Вопросы и ответы
В начало страницы
Предыдущая темаСледующая тема Перейти на форум: