ExBB Community ExBB Community
 Сайт проекта ExBB Общение объединяет!
Войдите на форум при помощиВойти через loginza
 Чат на форуме      Помощь      Поиск      Пользователи     BanList BanList


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

> Описание: Спрашиваю, как человек далёкий от классических теорий ООП
NordWest
Отправлено: 2 января 2014 — 10:21
Post Id



Пользователь
Super Member


Покинул форум
Сообщений всего: 994
Дата рег-ции: Дек. 2011  
Откуда: Северо-Запад
Репутация: 76




Суть такая.
В процессе копания в коде ExBB я неоднократно задавал себе вопрос а зачем в коде движка применяются классы?

Я так понимаю класс - это объект с набором свойств и методов. Оформлять что-то в виде класса имеет смысл только тогда, когда в процессе работы могут понадобиться как минимум несколько объектов этого класса. В нашем случае имеем класс FM. Но в процессе работы (если я правильно понимаю) мы создаем только один объект этого класса. Тогда нафига козе баян?

Я понимаю, что вероятно необходимость есть - просто я чего-то не учитываю. Буду признателен, если кто подскажет... Растерялся
 
 
CAB
Отправлено: 2 января 2014 — 14:33
Post Id



Пользователь
Super Member


Покинул форум
Сообщений всего: 629
Дата рег-ции: Февр. 2011  
Откуда: Москва
Репутация: 30




Я нашёл только этот ответ http://tvoyweb.ru/forums/topic.p...27566#1185527566
Посмотри там же, может ещё что нароешь.
 
 
NordWest
Отправлено: 2 января 2014 — 15:30
Post Id



Пользователь
Super Member


Покинул форум
Сообщений всего: 994
Дата рег-ции: Дек. 2011  
Откуда: Северо-Запад
Репутация: 76




CAB
Спасибо за ссылку, но утверждение Юры, что
Цитата:
вместо функций теперь используются классы. Благодаря этому повысилась скорость работы и безопасность.
меня не в чём не убеждает. Я просто не понимаю (вполне вероятно ошибочно), как использование классов может автоматом повысить скорость выполнения и безопасность.

Вот что мы видим сейчас...
Ядро движка подключается через common.php
Из common.php вызывается библиотека с функциями lib.php а уже из этого файла подключается класс fm.class.php. Я пытаюсь понять по какому критерию часть функций расположена в lib.php а другая часть упакована в класс fm.class.php.
 
 
1Bot
Отправлено: 2 января 2014 — 18:30
Post Id



Пользователь
Super Member


Покинул форум
Сообщений всего: 773
Дата рег-ции: Апр. 2009  
Откуда: Днепропетровск
Репутация: 69




NordWest пишет:
Суть такая.
В процессе копания в коде ExBB я неоднократно задавал себе вопрос а зачем в коде движка применяются классы?

Я так понимаю класс - это объект с набором свойств и методов. Оформлять что-то в виде класса имеет смысл только тогда, когда в процессе работы могут понадобиться как минимум несколько объектов этого класса. В нашем случае имеем класс FM. Но в процессе работы (если я правильно понимаю) мы создаем только один объект этого класса. Тогда нафига козе баян?

Я понимаю, что вероятно необходимость есть - просто я чего-то не учитываю. Буду признателен, если кто подскажет... Растерялся


Вы серьёзно не знаете, для чего нужны классы? Попробуем разобраться.

Давайте подумаем: что такое программирование? Программирование - это производство. Я имею в виду реально большие проекты. В которых не так уж часто встречаются особо умные куски кода, зато функциональности много, она не обязательно логично устроена (особенно часто такое бывает, если вы конструируете интерфейс пользователя), и, что немаловажно, проект поддерживают обычные программисты.

Это значит, что большая часть времени жизни кода уйдёт на его поддержку, а не начальную разработку.

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

У программиста при виде сложных функций начинает болеть голова. Он не может держать в голове сразу много понятий и зависимостей! И тут внезапно на помощь приходят классы. Классы позволяют уменьшить сложность. Когда программист разрабатывает класс, он думает обо всём классе и держит в голове весь класс. Но когда он разрабатывает другие классы, он думает больше не в терминах "я вызову функцию X, и она установит переменную Y", а в терминах классов: "я беру возраст пользователя", "я рисую эту картинку". Теперь голова болит гораздо меньше: вместо того, чтобы думать о всех функциях в проекте одновременно, программист думает только о немногих публичных функциях немногих публичных интерфейсов. Таким образом, в его коде меньше зависимостей: он не должен думать (вернее должен не думать!) о конкретной реализации возраста пользователя или там отрисовки картинки, он может про это забыть. Его код становится проще, этот код легче понимать, тестировать и поддерживать.

Кроме того, он больше не должен думать что-то типа "я добавляю пользователя в список модераторов, для этого мне надо обновить вот этот массив, вот ту хэш-таблицу, поставить флаг для обновления базы данных и не забыть ещё увеличить счётчик версий". Он просто говорит: "таблица модераторов, добавь в себя вот этого пользователя!". То есть теперь можно думать не в терминах внутренних структур данных, а в терминах семантики: программист пишет прямо то, что он хочет выразить, несмотря на то, что в языке не было раньше конструкций для выражения его мыслей. Мы видим, что программист на самом деле расширяет язык под свою предметную область, и может легко и адекватно выражать своё намерение. Такой код не только легче писать, но и легче поддерживать.

При этом эффективность кода может падать по сравнению кодом, учитывающим особенности реализации других классов, но мы сознательно идём на эту жертву: наша цель - чтобы код стал проще, яснее, чтобы он говорил сам за себя!

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

Кроме того, ООП даёт другие преимущества в виде наследования и полиморфизма, которые по мне концептуально менее важны. Хотя и очень приятны в использовании.

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

Резюме: классы нужны, чтобы абстрагироваться от сложности разработки.
 
 
NordWest
Отправлено: 2 января 2014 — 20:15
Post Id



Пользователь
Super Member


Покинул форум
Сообщений всего: 994
Дата рег-ции: Дек. 2011  
Откуда: Северо-Запад
Репутация: 76




1Bot
Спасибо за пояснение - ваши посты всегда интересно читать. Улыбка
Хотя то, что вы написали я в общих чертах понимал и сам. Меня же интересует реализация класса именно в коде ExBB. Именно реализация. Ведь по сути объект этого класса создается всегда один. В этом случае я не вижу особых плюсов от создания класса перед чисто процедурными методами. Растерялся
 
 
EgorViktorovich
Отправлено: 3 января 2014 — 01:00
Post Id


Пользователь
Newbie


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

[+]


Цитата:
Резюме: классы нужны, чтобы абстрагироваться от сложности разработки.


Каким образом в ехвв? Если бы использовались просто функции, то они имели бы те же названия Улыбка Для внутренних функций не нужно было бы вызывать классы через глобал. Все функции находились бы в одном файле lib, а класс (функции?) загрузки файлов вызывался бы напрямую, без предварительной обработки в fm (кстати, догадываюсь, что именно этот "замечательный" ход с fm и не позволил "разработчику" догадаться как сделать мультизагрузку, наипростейшую по исполнению).

Ну, разве что можно вставлять в файлы .tpl, применение которых весьма спорно, ланги в виде {$fm->LANG['.........']}. Наверное это круче, чем <?=$lang['.........']?>.

Обычный набор функций был переведён в классы. Дальше со скриптом ничего не делалось. Узнал "разработчик" про классы, вот и впендюрил их. Узнал про константы - получите в нагрузку. Нужны ли, нет ли...

Всё, что сделано в ехвв, сделано для того, чтобы усложнить жизнь разработчику, а не наоборот, увы. И "абстрагироваться" от этого прелестного кода никак не возможно.
 
 
CAB
Отправлено: 3 января 2014 — 08:29
Post Id



Пользователь
Super Member


Покинул форум
Сообщений всего: 629
Дата рег-ции: Февр. 2011  
Откуда: Москва
Репутация: 30




EgorViktorovich пишет:
И "абстрагироваться" от этого прелестного кода никак не возможно.
Ну почему же? Берёте оригинальную версию ExBB 1.9.1 и пользуете её.
EgorViktorovich пишет:
Узнал "разработчик" про классы, вот и впендюрил их. Узнал про константы - получите в нагрузку. Нужны ли, нет ли...
ExBB изначально создавался как игрушка для программиста. Ребята играют, пока не надоест, и бросают. Другой кто-то подбирает и играет. Поэтому какие-либо претензии неуместны априори. К тому же у всех у них были какие-то планы на развитие проекта, вот и закладывали что-то для этого в код.
 
 
1Bot
Отправлено: 3 января 2014 — 10:16
Post Id



Пользователь
Super Member


Покинул форум
Сообщений всего: 773
Дата рег-ции: Апр. 2009  
Откуда: Днепропетровск
Репутация: 69




NordWest пишет:
Меня же интересует реализация класса именно в коде ExBB. Именно реализация. Ведь по сути объект этого класса создается всегда один. В этом случае я не вижу особых плюсов от создания класса перед чисто процедурными методами.

Для случая этого форума имеем основной класс FM и единственный его экземпляр - переменную $fm.

Лучше бы конечно для этого использовать один из порождающих шаблонов проектирования Singlton - это гарантирует, что у класса есть только один экземпляр, и предоставляет к нему глобальную точку доступа. Но. видимо, разработка велась в эпоху PHP4, когда ООП был менее развит.

Т.е. везде вместо использования $GLOBALS['fm'] или global $fm; можно было бы просто работать с единственным экземпляром класса, например так $fm1 = new FM(); и нет привязки к идентификатору переменной, в которой хранится экземпляр класса, но гарантированно есть только один экземпляр независимо от того, сколько идентификаторов на него ссылаются.
 
 
Страниц (1): [1]
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« PHP/Perl »

> Похожие темы: Какая необходимость использовать "классы" в коде ExBB
Темы Форум Информация о теме Обновление
Баннерокрутилка для FM1.0
Можно ли ее использовать?
Обсуждение Ответов: 26
Автор темы: mastersound
24 октября 2011 — 09:14
Автор: roma1
Ошибка при добавлении подфорума
связано с модом "Спонсор раздела"
Решение проблем Ответов: 6
Автор темы: Zeg
26 января 2010 — 16:19
Автор: BBcod
Канонический адрес
Яндекс понимает link rel="canonical"
Обсуждение Ответов: 24
Автор темы: alexvod
31 марта 2014 — 14:27
Автор: electron
А если С Чужого компьютера?!
Если человек с чужого компа на форум зашел
Уязвимости Ответов: 8
Автор темы: sergan
8 ноября 2009 — 14:28
Автор: sergan
Мод: Похожие темы
Совместимость: ExBB FM 1.0 (версии: RC1, RC2 )
Модификации и дополнения Ответов: 37
Автор темы: Иван Петров
8 сентября 2012 — 14:27
Автор: wasp
 



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




Яндекс.Метрика   

Powered by ExBB
ExBB FM 1.0 RC1 by TvoyWeb.ru
InvisionExBB Style converted by Markus®

[Script Execution time: 0.1284]     [ ]