Что такое разделение операндов? - PullRequest
0 голосов
/ 13 июня 2018

Я недавно читал, что разделение опций-операндов - это принцип, который был введен в языке Eiffel (я никогда не использовал Eiffel).

Из статьи Википедии :

[Опция-разделение операндов] гласит, что аргументы операции должны содержать только операнды - понимаемые как информация, необходимая для ее работы - а не опции - понимаемые как вспомогательная информация.Опции должны быть установлены в отдельных операциях.

Означает ли это, что функция должна содержать только «существенные» аргументы, которые являются частью ее функциональности, и что не должно быть никаких аргументов, которые изменяютфункциональность (которая должна быть отдельной функцией)?

Может ли кто-нибудь объяснить это просто, желательно с примерами псевдокода?

1 Ответ

0 голосов
/ 14 июня 2018

Да, это идея: аргументы не должны использоваться для выбора конкретного поведения.Вместо этого следует использовать разные методы (особенности в терминах Эйфеля).

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

move (coordinate_1, coordinate_2: REAL_64; is_polar: BOOLEAN)
    -- Move the figure to the position (coordinate_1, coordinate_2)
    -- using polar system if is_polar is True, and Cartesian system otherwise.

В соответствии с принципом, лучше определить две функции:

cartesian_move (x, y: REAL_64)
    -- Move the figure to the position with Cartesian coordinates (x, y).

polar_move (rho, phi: REAL_64)
    -- Move the figure to the position with polar coordinates (rho, phi).

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...