Как определить необходимые классы и модули программного обеспечения Ruby? - PullRequest
3 голосов
/ 31 января 2012

Скажите, что я пишу рубиновый камень.Я хочу разработать классы и модули, которые будут использоваться.

  1. Как их идентифицировать?
  2. Где мне нужны классы и где мне нужны модули?

Ответы [ 3 ]

2 голосов
/ 31 января 2012

Ваш вопрос касается одной из главных особенностей дизайна языка Ruby.

По сути, вы можете видеть модуль как набор инструментов, а класс - как набор объектов, которые могут смешиваться с этими инструментами.

Ruby faq говорит о модулях:

Модули - это наборы методов и констант.Они не могут генерировать экземпляры.

Если вы хотите предоставить что-то , вам понадобится класс.Вы можете сделать MyClass.new, вы не можете с модулем: MyModule.new не будет работать.

С другой стороны:

Классы могут генерировать экземпляры (объекты) и иметь состояние для каждого экземпляра (переменные экземпляра).

Если вы хотите предоставить способ что-то сделать , вам понадобится модуль.Вы можете сделать MyModule.doSomething(SomeParams).Вы также можете сделать это с помощью методов класса, но вы не сможете с ним что-то смешать.

Более подробный ответ см. в этом FAQ .

0 голосов
/ 02 февраля 2012

Я использую, чтобы рассматривать Модули строго как капсулы поведения, а Классы как капсулы состояния и поведения (из инкапсуляции).

Итак, если вы хотите инкапсулировать поведение, используйте модуль. В противном случае используйте класс.

0 голосов
/ 31 января 2012
  1. Это задача объектно-ориентированного проектирования, если вы действительно новичок в этом, я бы порекомендовал изучить книгу типа Head First, объектно-ориентированный анализ и проектирование . Я обычно стараюсь определить основных действующих лиц / концепций в бизнес-модели, чтобы выяснить, какие классы мне нужны.

  2. Основное правило - использовать классы, когда вам нужно поддерживать некоторые состояния, и модули, когда нет необходимости поддерживать состояния. У Ruby есть несколько применений для модулей Ruby, в блоге Practicing Ruby есть несколько статей на эту тему: часть 1 , часть 2 , часть 3 , часть 4

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