Object Cohesion: Why It Matters

The following text is a partial translation of the original English article, performed by ChatGPT (gpt-3.5-turbo) and this Jekyll plugin:

Вы, скорее всего, знаете о Elegant Objects (EO), альтернативной объектно-ориентированной парадигме, которая утверждает, что объекты должны быть неизменяемыми, не иметь статических методов, никогда не использовать NULL в своем коде, не использовать аннотации и так далее. Мы, сторонники EO, утверждаем многое, но не все верят нам. Те неверующие говорят, что мы - тролли, в лучшем случае. Их основной аргумент таков: каждый работает по-разному, почему мы должны слушать вас? У меня нет ответа на это… ну, раньше не было, пока я не создал jPeek и не начал исследовать сцепление объектов.

Позвольте мне объяснить, как сцепление может помочь нам, сторонникам EO, доказать некоторые из наших предположений.

Сцепление, как характеристика программного модуля, было изобретено Ларри Константином, когда меня еще не существовало, в 1974 году. Вот что это означает; взгляните на этот простой класс на языке Java:

Есть два атрибута и два метода. Метод addTitle() работает с атрибутом titles, в то время как метод addPrice() работает только с атрибутом prices. Когерентность низкая в этом классе, потому что атрибуты titles и prices не связаны друг с другом никаким образом. Мы можем легко разделить этот класс на две части, не потеряв ничего:

Теперь у нас есть два намного более связанных класса: их атрибуты и методы взаимосвязаны друг с другом. Мы больше не можем разделить Books1, так как каждый атрибут нужен каждому методу.

Вот еще один пример высоко связанного класса:

Можем ли мы разделить это на более мелкие части? Нет, мы не можем. Мы не можем вынуть ни одну часть класса. Атрибут titles и оба метода должны оставаться вместе. Это означает, что класс высоко связан.

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

Теперь, если мы можем доказать эмпирически, что, например, классы без статических методов в среднем более связаны, чем их статически насыщенные собратья, мы можем сказать, что утверждение “статические методы - это зло” (постулированное Elegant Objects) научно подтверждено. Мы можем взять большой набор случайных классов на Java и рассчитать их связность. Затем мы можем разделить те, у которых есть статические методы, от тех, у которых их нет. Далее мы можем рассчитать, у какой группы выше средняя связность. Если группа без статических методов побеждает, предположение будет справедливым.

Конечно, другой случайный набор классов на Java может привести к другим результатам, но вот как работает эмпирическая наука: мы не можем доказать теорему, кроме как с помощью некоторых экспериментов.

Я создал свободно распространяемую библиотеку программного обеспечения, чтобы помочь мне проводить эти эксперименты, и назвал ее jPeek.org. Это калькулятор метрик связности для Java кода. Неудивительно, что существует множество метрик, которые мы можем использовать для расчета связности. По крайней мере, тридцать из них опубликованы, в то время как только несколько из них были должным образом реализованы. В jPeek, благодаря его участникам, нам удалось реализовать более десятка.

Используя этот инструмент, мы можем эмпирически доказать некоторые ключевые моменты EO. Например, мы можем доказать, что изменяемые классы менее связаны, аннотации негативно влияют на связность, DTO - низко связанные объекты и многое другое. Таким образом, связность станет тем инструментом, который приведет Elegant Objects к месту, где большинство его утверждений будут научно подтверждены. Дайте нам еще несколько лет, и мы получим очень интересные результаты.

Translated by ChatGPT gpt-3.5-turbo/42 on 2023-11-17 at 14:32

sixnines availability badge   GitHub stars