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 Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Описание: Как избежать использование средств ООП и сохранить объектовую структуру
neolinux
Отправлено: 06 Декабря, 2013 - 15:59:02
Post Id


Новичок


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


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




Всего пару лет назад впервые познакомился с ООП... и сразу отказался. Переписанное приложение загружалось раза в три медленнее. Но как сохранить удобное объектовое представление проекта? При разработке Nawatar DRV, пришло сразу два решения.
Первое наиболее простое и не "тянет" ресурсы: системный массив. Объектовая модель чем-то напоминает JavaScript. Во главе стоит система (например, $SYS). Далее, все элементы массива, являющиеся массивом - объекты, иначе - свойства. Например, объект приложения "wr-forum":
CODE (htmlphp):
скопировать код в буфер обмена
  1. $SYS_NW['drv']['forum']['dir']='programs/wr-forum/';
  2. $SYS_NW['drv']['forum']['file']='index.php'
  3. ....

Здесь объект "wr-forum" принадлежит объекту "drv" (приложение) и имеет свойства "dir" - директория размещения и "file" - исполняемый файл.
Как видите иерархия явно прослеживается. Любая функция обрабатывающая элементы системного массива является классом. Лично я не стал их плодить, чтобы избавить пользователя от длительного изучения мануалов. Основных две:
CODE (htmlphp):
скопировать код в буфер обмена
  1. setsys('drv.forum.dir','programs/wr-forum/') - создает запись в массив
  2. getsys('drv.forum.file') - читает элемент массива

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

Второй аналог ООП менее нагляден и мною не развит: статические переменные в теле функции. Основное назначение функции - выполнение одного или нескольких действий. При определенных условиях функция обрабатывает эти переменные. Здесь менее наглядна иерархия и больше потребление ресурсов. Однако, в некоторых случаях, этот способ более удобен.
Возможно, я не первый, кто это использует? И возможно ли объединить оба метода для построения более мощной объектовой модели? Для примера, прикрепляю файл реестра Nawatar DRV.
Скачать файл: reg.php
Скачан раз: 55
 
 Top
caballero
Отправлено: 06 Декабря, 2013 - 16:24:27
Post Id


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


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


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




Цитата:
Всего пару лет назад впервые познакомился с ООП... и сразу отказался. Переписанное приложение загружалось раза в три медленнее.

надо было выучить а не просто познакомится

Цитата:
Возможно, я не первый, кто это использует?

да, вы не первый кто быдлокодит чтобы "сэкономить на спичках"


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
Ch_chov
Отправлено: 06 Декабря, 2013 - 16:32:51
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008  
Откуда: из города


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




Всякие велосипеды видел и да сам их делал. Но для такого уровня видать фантазии у меня маловато. Улыбка
 
 Top
LIME
Отправлено: 06 Декабря, 2013 - 16:38:50
Post Id


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


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


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




ну просто внутреннее представление классов/экземпляров и смещение данных сами пишем))
хотя я не уверен что вообще понял))
 
 Top
neolinux
Отправлено: 06 Декабря, 2013 - 17:30:50
Post Id


Новичок


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


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




Цитата:
Всякие велосипеды видел и да сам их делал. Но для такого уровня видать фантазии у меня маловато

Кому программировать, кому фантазировать)))

Цитата:
надо было выучить а не просто познакомится

О "тормознутом" ООП в PHP многие авторитетные источники писали. Мне кажется, на данный момент, его удобно использовать с целью создания скриптов мало доступных для редактирования владельцами сайтов.
(Добавление)
Цитата:
Ch_chov

Ежик в тумане?
 
 Top
caballero
Отправлено: 06 Декабря, 2013 - 17:39:31
Post Id


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


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


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




Цитата:
О "тормознутом" ООП в PHP многие авторитетные источники писали.

Фигня.
Проблеммы ООП в PHP разумеется есть, оно не так полноценно как например в яве . Но скорость тут вообще не при чем.


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
LIME
Отправлено: 06 Декабря, 2013 - 17:55:48
Post Id


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


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


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




neolinux пишет:
Переписанное приложение загружалось раза в три медленнее.
пробовал искать узкое место?
уверен что нет
скорее всего узко было в обмене данными с бд или тому подобное
ооп конечно более ресурсоемко чем линейное программирование(и никто последнего не отменял еще)
но это не может быть "заметно глазу"
вывод: сомнение в компетенции ТС
 
 Top
neolinux
Отправлено: 06 Декабря, 2013 - 18:20:20
Post Id


Новичок


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


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




Цитата:
вывод: сомнение в компетенции ТС

Каюсь, не программист я. Соответственно, слабого места не искал. Несколько странно, что PHP позиционируется как средство для "домохозяек", а программист вынужден тратить годы не на его изучение, а быстродействия отдельных функций. Как дилетанту, мне удобнее использовать псевдо ООП на линейном программировании.

Кроме того, краем уха слышал, PHP не полностью поддерживает приемственность в ООП (возможно не точно выразился). В приведенном примере это возможно.

Цитата:
но это не может быть "заметно глазу"

Кто-нибудь проводил подобные эксперименты. Вы, к примеру, можете перевести мои скрипты в ООП и сравнить?
 
 Top
LIME
Отправлено: 06 Декабря, 2013 - 18:26:56
Post Id


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


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


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




neolinux пишет:
Кто-нибудь проводил подобные эксперименты. Вы, к примеру, можете перевести мои скрипты в ООП и сравнить?
100% что причина не в ООП а в кривости переписаного кода
встречал тут случаи когда попытки переписания на ООП вырождались в создание нового соединения с бд на каждый класс/экземпляр
neolinux пишет:
Кто-нибудь проводил подобные эксперименты
кто-нибудь проверял что на такси быстрее чем пешком?
neolinux пишет:
Соответственно, слабого места не искал
но вывод сделал что виновата парадигма
neolinux пишет:
PHP не полностью поддерживает приемственность в ООП
а это что? не слышал
 
 Top
caballero
Отправлено: 06 Декабря, 2013 - 18:29:41
Post Id


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


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


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




Цитата:
Кто-нибудь проводил подобные эксперименты.

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


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
LIME
Отправлено: 06 Декабря, 2013 - 18:38:47
Post Id


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


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


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




добавлю
хотя я достаточно подробно высказался выше но ...об экспериментах
я сейчас вынужден разгребать кучу навоза моего предшественника
все написано линейно
каша из кода php и html
и я начал проект (подобный, с целью потом перехода его бд на мой движок)
и вставил в его код профилирование
его страница отдается за 0.3-0.5 сек...линейно и без классов
моя отдается менее чем за 0.001
вывод: парадигма не важна ...важно откуда руки растут
это можно считать экспериментом?
caballero пишет:
Тут есть люди с многолетним опытом програмирования и десятками проектов. Посему никакие експерименты проводить не нужно.
это аксиоматично
 
 Top
esterio
Отправлено: 06 Декабря, 2013 - 18:46:28
Post Id



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


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


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




neolinux
Не хочу Вас огорчять, но Вы очень завысоко взяли. Начните с чего нибуть попроще. Потом вырастите и поймете все что здесь изложено другимы учасниками форума
 
 Top
LIME
Отправлено: 06 Декабря, 2013 - 18:51:29
Post Id


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


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


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




у меня такой директор раньше был
свято верил что у него супер CMS
заставлял меня подумать как ее защитить и после моего ухода просил ее развивать
хотя гавно страшное
тут у большинства новичков велосипеды получше
но он действительно одно время хотел с этим поделием выходить на ВПО
бррред
тут налицо такаяже шизофрения
 
 Top
EuGen Администратор
Отправлено: 06 Декабря, 2013 - 20:12:33
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


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




Гм, предполагаю, что с точки зрения быстродействия в общем случае в примере первого сообщения всё будет очень - печально.
Например, разыменование вложенных массивов продемонстрировано здесь, параграф "Using the =&-ref-operator" и далее. Точнее сказать нельзя - недостаточно кода. Но, уверен, после просмотра опкодов для ZVM всё встанет на свои места.

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

Такой подход - как компиляция анти-паттернов. Всё перечислить вряд ли представляется возможным, да и незачем. Возможно, автору темы следует изучить основы computer science (не знаю хорошего перевода, все не нравятся), почитать о базовых структурах данных, изучить используемые концепции, подходы. После - уже продвигаться дальше и с имеющейся базой подходить к ООП и ему подобным вещам.

Спойлер (Отобразить)


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
neolinux
Отправлено: 06 Декабря, 2013 - 21:19:28
Post Id


Новичок


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


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




Цитата:
я сейчас вынужден разгребать кучу навоза моего предшественника
все написано линейно
каша из кода php и html
и я начал проект (подобный, с целью потом перехода его бд на мой движок)
и вставил в его код профилирование
его страница отдается за 0.3-0.5 сек...линейно и без классов
моя отдается менее чем за 0.001
вывод: парадигма не важна ...важно откуда руки растут
это можно считать экспериментом?

Насколько я понял, по моей альтернативе ООП вы судите обо всей системе. Она достаточно структурирована. Но вы правы, при недостатке опыта я не могу заглянуть вперед и приходится переделывать. Однако, за четыре модернизации структура лишь улучшилась. Пример:
в ООП
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. $this-->fmmanager_dir='programs/fmmanager/';
  3. $this-->fmmanager_file='index.php';
  4. start('fmmanager');
  5.  

Простите, поленился правильный синтаксис подсмотреть.
У меня
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. setsys('drv.fmmanager.dir','programs/fmmanager/');
  3. setsys('drv.fmmanager.file','index.php');
  4. inc_drv('fmmanager')

Не вижу огорода. Зато четко просматривается структура объекта и пользователь, который только что "взял в руки" скрипт, понимает,о чем идет речь. пять существующих функций работы с массивом не сложно запомнить?
Не помню, $this-->fmmanager в функциях нужно объявлять глобальной? В моем случае, все функции доступны в любой части приложения.
Есть еще один скрытый камешек. Предположим, вы устанавливаете малоизвестную программу. Можно проверить, к каким файлам она обращается. Но как запретить ей получать данные из переменных? В моем случае имя массива может генерировать ядро, а функции - проверять права файла или приложения. Вот вам и дополнительная безопасность.
Думаю, не верно называть говнокодом все, что не попадает под существующие стандарты или наше видение.
Цитата:
Например, разыменование вложенных массивов продемонстрировано здесь, параграф "Using the =&-ref-operator" и далее. Точнее сказать нельзя - недостаточно кода. Но, уверен, после просмотра опкодов для ZVM всё встанет на свои места.

К сожалению не владею английским, не понял о чем речь. Сам проект можно увидеть здесь
 
 Top
Страниц (3): [1] 2 3 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Корзина »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB