나는 비디오 게임을 만들고 있습니다. 그것에는 문자 &이 있습니다. 이후로 내가 원하는 문자 & 각 항목에는 이름이 있습니다. 이름 필드와 함께 NamedObjects라는 또 다른 클래스를 만들고 문자를 사용합니다. & 항목이 확장됩니까? 아니면 배가 갈거야?루비 추상 클래스 디자인
답변
,이 모듈 코드를 작성하는 가치가 없을 수 있습니다 물론
attr_accessor :name
당신이 예상하는 경우, 그 이름 일 것입니다 미래에 더 많은 기능을 공유한다면, 귀하의 우려는 확실히 유효합니다. 오히려 상속을 사용하는 것보다, 그것은 루비에서 모듈을 사용하는 것이 좋습니다 :
속성 접근의 개념 (즉, 아마이 경우`name`을 구현하기 위해 사용됩니다) 어떻게module Nameable
attr_accessor :name
# To be expanded.
end
class Item
include Nameable
end
class Character
include Nameable
end
그들이 공유하는 모든 것이 이름이라면 과장 될 수 있습니다.
클래스는 동일한 데이터가 아니라 동일한 동작을하는 경우 일반적으로 기본 클래스를 공유해야합니다. OOP는 항상 행동에 관한 것이어야합니다. 기본 클래스를 만들 때 Liskov substitution principle에 대해서도 생각하고/공부해야합니다.
는 행동/데이터 규칙에 맞는? BTW, Liskov 원칙과 여기에있는 질문의 관계를 명확히 할 수 있습니까? –
여러 NamedObject를 반복하여 이름을 표시해야합니까? 그렇다면 NamedObjects 클래스가 필요합니다. 그렇지 않다면 ...
어쨌든 작은 문제에 대해서는 재앙적인 실수를 할 수 없습니다. 이름에 대한 기본 클래스를 만들지 않고 나중에 필요하면 나중에 수업을 재구성하면됩니다. 기본 클래스를 추가하고 실제로 필요하지 않은 경우 큰 문제는 아니며 무시해도됩니다.
java에서 당신이 말한 것처럼 NamedObject 인터페이스를 만들 것입니다. 그러나 Ruby는 동적 인 ducked-typed 언어입니다. 인터페이스가 없습니다. 따라서 이름 속성을 정의하고 필요한 곳에 사용하십시오. 당신이해야 할 수있는 유일한 라인이기 때문에
이름 속성 같은 간단한 들어- 1. 추상 클래스 디자인
- 2. 추상 메서드가없는 추상 클래스
- 3. Java 추상 클래스 또는 정적 유틸리티 클래스 디자인 선택
- 4. 추상 디자인/패턴 질문
- 5. 추상 클래스
- 6. 추상 클래스 매개 변수를 사용하여 추상 메서드가있는 Java 추상 클래스
- 7. 나는 추상 클래스가 추상 클래스
- 8. OO 디자인 : 루비 클래스를위한 다중 퍼시스턴스 디자인
- 9. 추상 기본 클래스 또는 클래스?
- 10. C# 클래스 디자인 - 정적 추상 대신 사용할 수있는 클래스는 무엇입니까?
- 11. C++ 다른 클래스의 추상 클래스 객체를 사용하기위한 디자인 패턴
- 12. VS2005를 사용하여 추상 양식 디자인
- 13. 추상 팩토리 디자인 패턴 C#
- 14. 추상 클래스 캐스트 연산자
- 15. 공유 라이브러리의 추상 클래스
- 16. 추상 클래스 생성자
- 17. 추상 클래스 명명 규칙
- 18. 추상 클래스와 익명 클래스
- 19. 추상 클래스 및 인터페이스
- 20. 추상 클래스와 익명 클래스
- 21. Android 라이브러리의 추상 클래스
- 22. 오류 LNK2019 추상 클래스
- 23. C에서 추상 클래스 확장하기 #
- 24. QPointer 추상 기본 클래스
- 25. 추상 클래스 참조
- 26. quartz.net 추상 기본 클래스
- 27. PHP로 추상 클래스 사용하기
- 28. 추상 클래스 및 생성자
- 29. java의 추상 클래스
- 30. 추상 클래스 컴파일러 오류
아멘. 믹스 인을 사용하면 A, B, C 클래스가있을 때 공통적 인 경우를 막을 수 있습니다 : A와 B는 공통 기능인 F와 A와 C를 공유한다고 가정 해 봅시다. 기능 'F'''. 클래스 상속을 사용하면 꽤 많이 붙어 있습니다. –
@Mladen Jablanović : 상속 에펠 (Eiffel)은 믹스 인이 종종 더 나은 솔루션이라고 여겨지 긴하지만, 그 상황을 아주 잘 처리 할 것입니다. – Arkku
+1. 모듈의 몇 가지 방법으로이 대답을 확장 할 수 있습니다. (나는 ATM을 생각할 수 없다. ...) –