Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ООП и php - практическая необходимость 
:(
    Опции темы
realPROme
Дата 21.12.2008, 20:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 123
Регистрация: 20.12.2006

Репутация: нет
Всего: нет



народ, прогаю лет около 10, начинал с бэйсков и паскалей... в общем, я очень консервативен и до сих пор принимаю только структурное программирование, хоть потихоньку начинаю применять и классы... собственно, как-то слепо... мне не совсем понятен их смысл... просьба привести конкретные примеры ситуаций, когда ООП имеет явные преимущества перед структурным программированием
благодарю smile
PM MAIL   Вверх
skyboy
Дата 21.12.2008, 20:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



навряд ли такое возможно. в смысле - примеры привести. 
по скорости разработки ООП вполе может превзойти процедурное, но только если:
- все участники процесса не понаслышке знакомы с ООП: если ты только вчера использовал функции и переменные переменных типов, то у других будут проблемы с твоим кодом(не соответствует идеологии: не переносимый и расширяемый), а у тебя - с пониманием чужого кода;
- задача действительно оправдывает применение ООП: к примеру, программы для контроллеров можно и на С++ писать, но если контроллер работает только с машинными кодами(пока что контроллеры, принимающие python-код редкость), то такой подход себя н оправдает.
по скорости работы и занимаемой памяти машинный код, полученный компиляцией ООП вполне может проиграть коду, полученному из процедурно-стилевого кода(таблицы виртуальных функций и т.п.), но несильно.
так что не совсем понятно, какого рода "преимущества" ожидаются.
да, если все участники знакомы с ООП, то преимущества вполне могут быть в:
а) скорости разработки
б) простоте отладки(пр правильном подходе имеем слабую межмодульную взаимосвязь и сильную внутримодульную - компоненты можно отлживать независимо)
в) простоте поддержки(модификация и коррекция)
г) расширяемость
д) повышенная повторная применимость
PM MAIL   Вверх
NLspieler
Дата 21.12.2008, 21:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 619
Регистрация: 13.10.2008
Где: Берлин

Репутация: 16
Всего: 19




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

Или в чем я не прав?
 
Пытаясь читать про ООП, ничего не понимаю,  smile 
может быть кто-либо из форумчан сможет лучше объяснить на примитивных примерах?  smile 
 

    

PM MAIL   Вверх
igm
Дата 21.12.2008, 21:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 28.2.2008

Репутация: нет
Всего: -2



а Вы попробуйте поработать с классами, это как пересесть на Мерседес с Жигулей, трудно потом отказаться.
PM MAIL WWW   Вверх
source777
Дата 21.12.2008, 21:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: 2
Всего: 56



Цитата
Или в чем я не прав?
Не прав в методике сравнения, с тривиальных позиций ООП рассматривать нельзя.

Цитата
может быть кто-либо из форумчан сможет лучше объяснить на примитивных примерах?
Именно в этом и вся загвоздка, применять ООП на примитивных примерах глупо и никаких преимуществ видно не будет. Смысл ООП поймёшь, когда начнёшь работать с проектами от 2-5 тыс. строк кода и более...
А когда встретишься с проектами, в которых и 10 kLOC не предел, тут уж и всю мощь АОП осознаешь...

Это сообщение отредактировал(а) source777 - 21.12.2008, 21:56


--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
realPROme
Дата 22.12.2008, 00:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 123
Регистрация: 20.12.2006

Репутация: нет
Всего: нет



Цитата(igm @  21.12.2008,  21:34 Найти цитируемый пост)
а Вы попробуйте поработать с классами, это как пересесть на Мерседес с Жигулей, трудно потом отказаться

да я вот пробую... загвоздка в том, что разницы не чувствую... smile 
а все вокруг за ООП только и говорят... вот и непонятно мне

Цитата(source777 @  21.12.2008,  21:55 Найти цитируемый пост)
на примитивных примерах глупо и никаких преимуществ видно не будет

дайте не примитивный пример

Цитата(source777 @  21.12.2008,  21:55 Найти цитируемый пост)
Смысл ООП поймёшь, когда начнёшь работать с проектами от 2-5 тыс. строк кода и более...

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

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


skyboy, очень благодарен за Ваш пост, чувствуется, что писали по опыту, я в команде не работал и работать не собираюсь, это не по мне, привык все сам, так что данный пункт соответственно и упустил...
PM MAIL   Вверх
bars80080
Дата 22.12.2008, 00:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



Цитата(igm @  21.12.2008,  20:34 Найти цитируемый пост)
а Вы попробуйте поработать с классами, это как пересесть на Мерседес с Жигулей, трудно потом отказаться.
не знаю. сам использую классы в случаях, когда самому писать долго и малопонятно, зато есть чужая наработка. а вот самого себя заставить написать не могу. нет понимая нужды в них.
впрочем, до 1000 строк на модуль не добирался

Цитата(realPROme @  21.12.2008,  23:00 Найти цитируемый пост)
а все вокруг за ООП только и говорят... вот и непонятно мне

воооот, такая же фигня. впрочем, слышал я такую весчь, что это своего рода склад мышления. т.е. есть люди которым ООП бесмысленен, а есть которым он незаменим. и перестроится с одного на другое можно только с сильным перестроением хода мыслей в голове
PM MAIL WWW   Вверх
skyboy
Дата 22.12.2008, 01:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



Цитата(bars80080 @  21.12.2008,  23:09 Найти цитируемый пост)
впрочем, слышал я такую весчь, что это своего рода склад мышления. т.е. есть люди которым ООП бесмысленен, а есть которым он незаменим.

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

window.width= 255;
wndow.height= 654;
window.show();

Цитата(bars80080 @  21.12.2008,  23:09 Найти цитируемый пост)
впрочем, до 1000 строк на модуль не добирался

тут не обязательно дело в объеме кода. 
представим, что надо отрисовать на экране средставми openGL прямоугольник. 
стадия 1. создаем функцию. в неё пихаем 20 параметров: параметры отрисовыаемого прямоугольника(цвет, толщина линий, размеры), парамерты отрисовки(расположение прямоугольника на отрисовываемом пространства), параметры "полотна"(например, идентификатор окна в windows) и параметры инициализации openGL(около десятка). Вся работа - внутри единственной функции. Естетвенно, работать сложно. Изменять код - ещё сложнее. итак,
стадия 2. инициализацию openGL, подготовку контекста отрисовки и саму отрисовку выносим в разные фунцкии. в нашу "первоначальную функцию" все ещё передаются двадцать параметров, но внутри - только вызов трех других функций с передачей им соответствующих данных.
стадия 3. отделяем параметры друг от друга: группируем парамерты по смыслу, выделяя однотипные параметры(параметры иницциалзации openGL, параметры отрисовки, параметры отрисовываемого) в отдельные записи(в PHP для этой цели использовались бы ассоциативные массивы). теперь вместо кучи параметров в фунцкию передаются всего три. пусть, сложных, но управляться с ними будет проще. 
стадия 4. надо передать в функцию какую-то функцию. к примеру, чтоб при отрисовке каждой новой стороны использовать не один и тот же статически заданный цвет, а взывать определенную функцию, чтоб она уже генерировала цвет очередной стороны. и - стоп! у нас же ожидается в параметрах функции именно цвет, а не имя другой функции! Как же делать? Писать ещё одну функцию, которая ожидает в качестве параметра "цвет обводки" имя фунцкии, а не число? Или расширять имеющуюся функцию при помощи if'ов, чтоб шла проверка: если существует функция с таким именем, то вызывать фунцкию, нет - пытаться использовать как строку с заданием цвета? А если кадый параметр может стать динамически генерируемым? тогда как - писать под все возможные комбинации статически заданных и динамически генерируемых данных разные функции? или наплодить дерево if'ов, а затем повеситься с горя? 
итак, ООП:
Код

class Rectangle { // это не более, чем основной класс - только для объявления, какие данные/фунцкии он реализует
function getColor() {
return 0;
}
}
class fixedRectangle extends Rectangle { // данный класс не сам по себе, а продолжает славное дело класса rectangle - то есть наследует все его методы-функции и поля-данные
$color;
fucntion fixedRectangle($__color) {
$this->color= $__color;
}
function getColor() {
return $this->color;
}
}
class dynamicRectangle extends Rectangle {
function getColor() {
return rand() * 0xFFFFFF;
}
}
function draw(Rectangle $rect) {
// в функции для определения цвета будет обращение к методу $rect->getColor, вне зависимости от того, какого типа цвет - статически заданный. динамически генерируемый, или получаемый из БД
}
$fixed= new FixedRectangle(0x459878);
$dynamic= new DynamicRectangle();
draw($fixed);
draw($dynamic);

естественно, может показаться, что всего-то надо было изначально договориться, что  в фунцкию в любом случае будут уходить не значения, а имена фунцкий-оберток, которые в случае фиксированных значений выглядели бы просто вот так:
Код

function getColor003456967() {
return 0x45987F;
}

но это ж сколько функций надо было бы создать! smile
PM MAIL   Вверх
gibbzy
Дата 22.12.2008, 05:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 97
Регистрация: 25.1.2008

Репутация: нет
Всего: 3



Плюс ко всему многие фреймворки используют ООП например Zend Framework.
И достаточно удобно структурировать код и разделять логики модель - вид - контроллер. 
А просто так этому не научишься. Мне понадобилось полтора года чтобы понять что к чему и то сейчас я допускаю ошибки в проектировке проектка.
Для страждущих к знаниям советую читать Гради Буча обьектно ориентированный анализ и проектирование потихоньку и помаленьку за 2 дня этому не научишься, а так же применительно к пхп есть книги PHP для профессионалов и ещё нашол такую книгу
http://www.softtime.ru/php5/?id_article=112
ничего сказать не могу потому что заказал ещё не пришла 
и такая 
http://www.ozon.ru/context/detail/id/3452954/ 
книга тоже есть
. 
http://taop.rpod.ru/rss.xml
вот ещё подкасты есть.
PM MAIL WWW ICQ   Вверх
solenko
Дата 22.12.2008, 07:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1473
Регистрация: 15.1.2006
Где: Украина

Репутация: 34
Всего: 67



skyboy, вы наговорили кучу страшного и в итоге привели код, котрый и десятой части это всего не делает. В итоге вывод -- ООП позволяет делать меньше! Передергиваете, однако.
Код


function rectangle($params) {
  $default_params = array(...);
  $params = merge_params($params, $default_params);
  ...
  $color = getColor($params);
  ...
}

function getColor($params) {
  if (array_key_exists('color', $params)) {
    return $params['color'];
  }else{
    return rand() * 0xFFFFFF;
  }
}



--------------------
Ла-ла-ла-ла
Заметьте, нет официального подтверждения, что это не просто четыре слога.
PM MAIL WWW ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.2349 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.