как организовать классы в ruby, если они буквальные подклассы - PullRequest
2 голосов
/ 17 июня 2010

Я знаю, что название не имеет смысла, извините!Трудно сказать, что я пытаюсь спросить.У меня были проблемы с поиском в Google по той же причине.

Так что это даже не относится к Ruby, но я работаю в ruby ​​и я новичок в этом, так что терпите меня.

Итак, у вас есть класс, который является документом.Внутри каждого документа у вас есть предложения, а в каждом предложении есть слова.Слова будут иметь свойства, такие как «существительное» или счетчик того, сколько раз они используются в документе и т. Д.

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

Теперь, если вы думаете буквально - предложения в документах, а слова в предложениях.

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

Или все должно быть отдельным и ссылаться друг на друга?Как словесный класс будет находиться вне класса предложений, но класс предложений сможет создавать и работать со словами?

Это основной вопрос ООП, я полагаю, и я полагаю, вы могли бы поспорить, чтобы сделать это в любом случае.Что, вы парни, думаете?

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

Я не хочу закодировать себя здесь в угол, вот почему я спрашиваю, плюс я удивлялся этому раньше в других ситуациях.

Спасибо!

Ответы [ 3 ]

2 голосов
/ 17 июня 2010

Похоже, вы смешиваете 2 понятия: вложенные объекты и вложенные классы. Это разные вещи. Ваши объекты, скорее всего, должны быть вложенными. Тем не менее, ваши классы не должны быть вложенными. Они могут, но это вопрос стиля (а некоторые языки вообще не допускают вложенные классы). Также это зависит от того, как вы планируете использовать эти классы. Например, в вашем случае слова имеют значение как отдельное понятие? не только как часть предложения? Если это так, я бы определил Word как отдельный класс.

1 голос
/ 17 июня 2010

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

0 голосов
/ 17 июня 2010

Вы можете создать анонимный класс . Возможно, вы даже сможете контролировать, кто имеет доступ к этим анонимным классам, используя контроль доступа для метода, который создает / возвращает анонимный класс - я не знаю. Но я не думаю, что это то, что вам действительно нужно.

Вместо того, чтобы полностью запрещать другим классам использовать эти классы, было бы лучше просто задокументировать, что они предназначены только для внутреннего использования. Один из способов указать, что они предназначены для внутреннего использования, - это использовать пространства имен .

Если класс называется DocumentParser, то это звучит как класс, который может использовать каждый. Однако, если у вас есть что-то с именем DocumentParser::Noun или DocumentParser::Sentence, они могут понять, что могут использовать детали реализации, на которые не следует полагаться.

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