Я создаю видеоигру. Он имеет персонажей & Предметы. Так как мне нужны символы & Элементы для каждого имеют имя, должен ли я создать другой класс под названием NamedObjects с просто полем имени и иметь символы & Элементы расширяют это? Или это за борт?Ruby Abstract Class Design
ответ
Для чего-то же просто, как имя атрибута, оно не может быть стоит написать модульный код, потому что единственная линия вам может понадобиться это:
attr_accessor :name
Конечно, если вы предвидеть, что названные вещи будут поделитесь большей функциональностью в будущем, ваша озабоченность вполне актуальна. Вместо того чтобы использовать наследование, то лучше использовать модули в Ruby:
module Nameable
attr_accessor :name
# To be expanded.
end
class Item
include Nameable
end
class Character
include Nameable
end
Если все, что они разделяют, - это имя, это, вероятно, перебор.
Классы должны в общем случае использовать базовый класс, если они имеют одинаковое поведение, а не одни и те же данные. ООП всегда должен быть о поведении. Вы также должны подумать о/при создании базовых классов.
Как понятие атрибута аксессоров (который, возможно, будет использоваться для реализации 'name' в данном случае) вписывается в это правило поведения/данных? Кстати, вы можете прояснить связь принципа Лискова с вопросом здесь, я не вижу? –
Вам понадобится зациклиться на связке NamedObjects и отобразить имя? Если это так, вам нужен класс NamedObjects. Если вы этого не сделаете, вы не ...
Вы так же не можете совершить катастрофическую ошибку при такой небольшой проблеме: если вы не делаете базовый класс для имени, и вам это нужно позже «Я просто реструктурирую ваши классы позже, неважно. Если вы добавите базовый класс и на самом деле не нуждаетесь в нем, это не большая проблема, его можно безопасно игнорировать.
В java я бы создал интерфейс NamedObject, как вы сказали. Однако Ruby - это динамический язык с языком. Нет интерфейсов. Поэтому просто определите атрибут имени и используйте его там, где он вам нужен.
- 1. Abstract Class, OOP Design Pattern
- 2. design issue generics/factory/abstract class
- 3. Abstract Factory Design Pattern
- 4. Java abstract class, abstract constructor
- 5. Abstract Factory Design Pattern использовать
- 6. php abstract class property from another abstract class
- 7. Ninject: Abstract Class
- 8. Php abstract class contructor
- 9. Java final abstract class
- 10. @ModelAttribute и abstract class
- 11. abstract-class in java
- 12. Doctrine targetEntity abstract class
- 13. Java abstract class
- 14. jsf inheritance abstract class
- 15. C++ Abstract Template Class
- 16. Generic abstract class constructor
- 17. Scala abstract case class
- 18. interface/abstract class
- 19. Class Design Inheritance/Состав
- 20. Deserializing abstract class Spring mvc
- 21. Java abstract class "переменные экземпляра"
- 22. Scala abstract class function call
- 23. Android Realm Abstract Class Instantiate
- 24. PDO Connection и abstract class
- 25. Php abstract class site configuration
- 26. C# deserialize unknown abstract class
- 27. C++ abstract base class templates
- 28. Java abstract method extend class
- 29. Qt abstract class as interface
- 30. Отсутствует метод body abstract class
Аминь к этому. Использование mixins также предотвратит довольно распространенный случай, когда у вас есть классы 'A',' B' и 'C': допустим,' A' и 'B' имеют общую функциональность' F'' и 'A' и' C' функциональность 'F'''. С наследованием класса вы в значительной степени застряли там. –
@Mladen Jablanović: Наследование Эйфеля прекрасно справится с этой ситуацией, хотя я согласен с тем, что миксины часто являются лучшим решением. – Arkku
+1. Возможно, вы можете расширить этот ответ с помощью нескольких методов в модуле. (Я не могу думать ни о каком банкомате ...) –