Страницы

Поиск по вопросам

воскресенье, 31 марта 2019 г.

ООП - Есть ли смысл писать класс, в котором нет свойств, но есть метод?

Есть ли смысл писать класс, в котором нет свойств, но есть метод? Или же в этом случае достаточно воспользоваться пользовательской функцией?
class Text { public function MultiColor(){ static $a = null; $a ++; return $a; } } echo Text::MultiColor();


Ответ

Давайте разберемся.
Во-первых, сама по себе парадигма ООП не предполагает использование других парадигм. Это не запрет на их совместное использование, однако парадигма сама по себе самодостаточна, хоть и реализуется зачастую не в чистом виде (функции в PHP и Python, примитивы в Java и C#), а частичное замещение прадигмы приведет к уменьшению консистентности (единообразности) кода.
Парадигма ООП включает в объект две составляющие: поведение (методы) и состояние (свойства). В данном случае обсуждается поведение без состояния (что, на самом деле, неправда - $a относится к состоянию, т.к. сохраняется между вызовами), и это действительно немного смущающий момент, однако не позвольте ему обмануть себя. ООП позволяет включить в объекты и поведение, и состояние, но не запрещает исключить что-то из этого из объекта; другими словами, класс, объявляющий функционал без состояния, равно как и объекты, просто переносящие данные (Business Object, Data Transfer Object) - это абсолютно валидные единицы программы.
И, конечно, необходимо сказать пару слов про статику. Сама парадигма не подразумевает существование классов и статических методов. Однако, методам, которые работают без состояния, самое место в статичных - во-первых, им не нужен лишний экземпляр объекта для работы, во-вторых, таким образом подчеркивается отвязанность метода от состояния. Однако будьте осторожны: объявление статичных переменных обычно говорит о том, что пора создавать обычный объект с состоянием; единственный действительно рациональный пример, который я могу привести для сохранения чего-либо в статичной переменной - это логгер в Java. Сам я, правда, ярый противник статики в принципе, но это совсем отдельная тема для разговора.
И, наконец: хорошая парадигма не запрещает пользователю ничего. Она лишь описывает концепты, в рамках которых пользователю должно быть удобно выстроить проект.
Резюмируя: да, использовать методы без состояния - это абсолютно легально, однако опасайтесь переноса в статику того, что должно лежать в обычных методах.

Комментариев нет:

Отправить комментарий