Покинул форум
Сообщений всего: 26
Дата рег-ции: Дек. 2013
Помог: 0 раз(а)
Всего пару лет назад впервые познакомился с ООП... и сразу отказался. Переписанное приложение загружалось раза в три медленнее. Но как сохранить удобное объектовое представление проекта? При разработке Nawatar DRV, пришло сразу два решения.
Первое наиболее простое и не "тянет" ресурсы: системный массив. Объектовая модель чем-то напоминает JavaScript. Во главе стоит система (например, $SYS). Далее, все элементы массива, являющиеся массивом - объекты, иначе - свойства. Например, объект приложения "wr-forum":
Здесь объект "wr-forum" принадлежит объекту "drv" (приложение) и имеет свойства "dir" - директория размещения и "file" - исполняемый файл.
Как видите иерархия явно прослеживается. Любая функция обрабатывающая элементы системного массива является классом. Лично я не стал их плодить, чтобы избавить пользователя от длительного изучения мануалов. Основных две:
setsys('drv.forum.dir','programs/wr-forum/')- создает запись в массив
getsys('drv.forum.file')- читает элемент массива
При необходимости возможно организовать и наследование свойств. Однако, это уже "потянет" ресурсы. У меня была задача - максимальное быстродействие.
Второй аналог ООП менее нагляден и мною не развит: статические переменные в теле функции. Основное назначение функции - выполнение одного или нескольких действий. При определенных условиях функция обрабатывает эти переменные. Здесь менее наглядна иерархия и больше потребление ресурсов. Однако, в некоторых случаях, этот способ более удобен.
Возможно, я не первый, кто это использует? И возможно ли объединить оба метода для построения более мощной объектовой модели? Для примера, прикрепляю файл реестра Nawatar DRV.
Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008 Откуда: из города
Помог: 90 раз(а)
Всякие велосипеды видел и да сам их делал. Но для такого уровня видать фантазии у меня маловато.
LIME
Отправлено: 06 Декабря, 2013 - 16:38:50
Активный участник
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Помог: 322 раз(а)
ну просто внутреннее представление классов/экземпляров и смещение данных сами пишем))
хотя я не уверен что вообще понял))
neolinux
Отправлено: 06 Декабря, 2013 - 17:30:50
Новичок
Покинул форум
Сообщений всего: 26
Дата рег-ции: Дек. 2013
Помог: 0 раз(а)
Цитата:
Всякие велосипеды видел и да сам их делал. Но для такого уровня видать фантазии у меня маловато
Кому программировать, кому фантазировать)))
Цитата:
надо было выучить а не просто познакомится
О "тормознутом" ООП в PHP многие авторитетные источники писали. Мне кажется, на данный момент, его удобно использовать с целью создания скриптов мало доступных для редактирования владельцами сайтов. (Добавление)
Цитата:
Ch_chov
Ежик в тумане?
caballero
Отправлено: 06 Декабря, 2013 - 17:39:31
Активный участник
Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011 Откуда: Харьков
Помог: 126 раз(а)
Цитата:
О "тормознутом" ООП в PHP многие авторитетные источники писали.
Фигня.
Проблеммы ООП в PHP разумеется есть, оно не так полноценно как например в яве . Но скорость тут вообще не при чем.
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Помог: 322 раз(а)
neolinux пишет:
Переписанное приложение загружалось раза в три медленнее.
пробовал искать узкое место?
уверен что нет
скорее всего узко было в обмене данными с бд или тому подобное
ооп конечно более ресурсоемко чем линейное программирование(и никто последнего не отменял еще)
но это не может быть "заметно глазу"
вывод: сомнение в компетенции ТС
neolinux
Отправлено: 06 Декабря, 2013 - 18:20:20
Новичок
Покинул форум
Сообщений всего: 26
Дата рег-ции: Дек. 2013
Помог: 0 раз(а)
Цитата:
вывод: сомнение в компетенции ТС
Каюсь, не программист я. Соответственно, слабого места не искал. Несколько странно, что PHP позиционируется как средство для "домохозяек", а программист вынужден тратить годы не на его изучение, а быстродействия отдельных функций. Как дилетанту, мне удобнее использовать псевдо ООП на линейном программировании.
Кроме того, краем уха слышал, PHP не полностью поддерживает приемственность в ООП (возможно не точно выразился). В приведенном примере это возможно.
Цитата:
но это не может быть "заметно глазу"
Кто-нибудь проводил подобные эксперименты. Вы, к примеру, можете перевести мои скрипты в ООП и сравнить?
LIME
Отправлено: 06 Декабря, 2013 - 18:26:56
Активный участник
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Помог: 322 раз(а)
neolinux пишет:
Кто-нибудь проводил подобные эксперименты. Вы, к примеру, можете перевести мои скрипты в ООП и сравнить?
100% что причина не в ООП а в кривости переписаного кода
встречал тут случаи когда попытки переписания на ООП вырождались в создание нового соединения с бд на каждый класс/экземпляр
neolinux пишет:
Кто-нибудь проводил подобные эксперименты
кто-нибудь проверял что на такси быстрее чем пешком?
neolinux пишет:
Соответственно, слабого места не искал
но вывод сделал что виновата парадигма
neolinux пишет:
PHP не полностью поддерживает приемственность в ООП
а это что? не слышал
caballero
Отправлено: 06 Декабря, 2013 - 18:29:41
Активный участник
Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011 Откуда: Харьков
Помог: 126 раз(а)
Цитата:
Кто-нибудь проводил подобные эксперименты.
Тут есть люди с многолетним опытом програмирования и десятками проектов. Посему никакие експерименты проводить не нужно.
ООП - это последнее что влияет на быстродействие скрипта. Просто примите это как факт, тем более что честно признали себя дилетантом.
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Помог: 322 раз(а)
добавлю
хотя я достаточно подробно высказался выше но ...об экспериментах
я сейчас вынужден разгребать кучу навоза моего предшественника
все написано линейно
каша из кода php и html
и я начал проект (подобный, с целью потом перехода его бд на мой движок)
и вставил в его код профилирование
его страница отдается за 0.3-0.5 сек...линейно и без классов
моя отдается менее чем за 0.001
вывод: парадигма не важна ...важно откуда руки растут
это можно считать экспериментом?
caballero пишет:
Тут есть люди с многолетним опытом програмирования и десятками проектов. Посему никакие експерименты проводить не нужно.
это аксиоматично
esterio
Отправлено: 06 Декабря, 2013 - 18:46:28
Активный участник
Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012 Откуда: Украина, Львов
Помог: 127 раз(а)
neolinux
Не хочу Вас огорчять, но Вы очень завысоко взяли. Начните с чего нибуть попроще. Потом вырастите и поймете все что здесь изложено другимы учасниками форума
LIME
Отправлено: 06 Декабря, 2013 - 18:51:29
Активный участник
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Помог: 322 раз(а)
у меня такой директор раньше был
свято верил что у него супер CMS
заставлял меня подумать как ее защитить и после моего ухода просил ее развивать
хотя гавно страшное
тут у большинства новичков велосипеды получше
но он действительно одно время хотел с этим поделием выходить на ВПО
бррред
тут налицо такаяже шизофрения
EuGen
Отправлено: 06 Декабря, 2013 - 20:12:33
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
Гм, предполагаю, что с точки зрения быстродействия в общем случае в примере первого сообщения всё будет очень - печально.
Например, разыменование вложенных массивов продемонстрировано здесь, параграф "Using the =&-ref-operator" и далее. Точнее сказать нельзя - недостаточно кода. Но, уверен, после просмотра опкодов для ZVM всё встанет на свои места.
Кроме того, если нужно будет использовать код где-нибудь ещё, его нужно будет копировать. А если в одном из скопированных мест забыть изменить функционал при, например, расширении возможностей приложения, то будет очень сложно найти, почему всё работает не так, как планировалось.
Такой подход - как компиляция анти-паттернов. Всё перечислить вряд ли представляется возможным, да и незачем. Возможно, автору темы следует изучить основы computer science (не знаю хорошего перевода, все не нравятся), почитать о базовых структурах данных, изучить используемые концепции, подходы. После - уже продвигаться дальше и с имеющейся базой подходить к ООП и ему подобным вещам.
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
neolinux
Отправлено: 06 Декабря, 2013 - 21:19:28
Новичок
Покинул форум
Сообщений всего: 26
Дата рег-ции: Дек. 2013
Помог: 0 раз(а)
Цитата:
я сейчас вынужден разгребать кучу навоза моего предшественника
все написано линейно
каша из кода php и html
и я начал проект (подобный, с целью потом перехода его бд на мой движок)
и вставил в его код профилирование
его страница отдается за 0.3-0.5 сек...линейно и без классов
моя отдается менее чем за 0.001
вывод: парадигма не важна ...важно откуда руки растут
это можно считать экспериментом?
Насколько я понял, по моей альтернативе ООП вы судите обо всей системе. Она достаточно структурирована. Но вы правы, при недостатке опыта я не могу заглянуть вперед и приходится переделывать. Однако, за четыре модернизации структура лишь улучшилась. Пример:
в ООП
Не вижу огорода. Зато четко просматривается структура объекта и пользователь, который только что "взял в руки" скрипт, понимает,о чем идет речь. пять существующих функций работы с массивом не сложно запомнить?
Не помню, $this-->fmmanager в функциях нужно объявлять глобальной? В моем случае, все функции доступны в любой части приложения.
Есть еще один скрытый камешек. Предположим, вы устанавливаете малоизвестную программу. Можно проверить, к каким файлам она обращается. Но как запретить ей получать данные из переменных? В моем случае имя массива может генерировать ядро, а функции - проверять права файла или приложения. Вот вам и дополнительная безопасность.
Думаю, не верно называть говнокодом все, что не попадает под существующие стандарты или наше видение.
Цитата:
Например, разыменование вложенных массивов продемонстрировано здесь, параграф "Using the =&-ref-operator" и далее. Точнее сказать нельзя - недостаточно кода. Но, уверен, после просмотра опкодов для ZVM всё встанет на свои места.
К сожалению не владею английским, не понял о чем речь. Сам проект можно увидеть здесь
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.