Страницы

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

четверг, 19 декабря 2019 г.

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

#php #ооп


Есть ли смысл писать класс, в котором нет свойств, но есть метод? Или же в этом случае
достаточно воспользоваться пользовательской функцией?


 class Text {
    public function MultiColor(){
       static $a = null;
       $a ++;
       return $a;
    }
 }
 echo Text::MultiColor();

    


Ответы

Ответ 1



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

Ответ 2



Можно и так и так. Только зачем городить огород с классом для одной функции? Если только его будут наследовать другие классы...

Ответ 3



Если вы используете функции, то получается не чистый ООП. В некоторых строгих ООП языках запрещены функции без классов (java, c#). В любом случае лучше придерживаться принятых гайдлайнов (основная библиотека языка или рабочий проект). Использование классов для таких функций помогает объединить схожие функции в обин "модуль".

Ответ 4



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

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

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