2010-04-07 9 views
2

나는 비디오 게임을 만들고 있습니다. 그것에는 문자 &이 있습니다. 이후로 내가 원하는 문자 & 각 항목에는 이름이 있습니다. 이름 필드와 함께 NamedObjects라는 또 다른 클래스를 만들고 문자를 사용합니다. & 항목이 확장됩니까? 아니면 배가 갈거야?루비 추상 클래스 디자인

답변

3

,이 모듈 코드를 작성하는 가치가 없을 수 있습니다 물론

attr_accessor :name 

당신이 예상하는 경우, 그 이름 일 것입니다 미래에 더 많은 기능을 공유한다면, 귀하의 우려는 확실히 유효합니다. 오히려 상속을 사용하는 것보다, 그것은 루비에서 모듈을 사용하는 것이 좋습니다 :

속성 접근의 개념 (즉, 아마이 경우`name`을 구현하기 위해 사용됩니다) 어떻게
module Nameable 
    attr_accessor :name 

    # To be expanded. 
end 

class Item 
    include Nameable 
end 

class Character 
    include Nameable 
end 
+0

아멘. 믹스 인을 사용하면 A, B, C 클래스가있을 때 공통적 인 경우를 막을 수 있습니다 : A와 B는 공통 기능인 F와 A와 C를 공유한다고 가정 해 봅시다. 기능 'F'''. 클래스 상속을 사용하면 꽤 많이 붙어 있습니다. –

+0

@Mladen Jablanović : 상속 에펠 (Eiffel)은 믹스 인이 종종 더 나은 솔루션이라고 여겨지 긴하지만, 그 상황을 아주 잘 처리 할 것입니다. – Arkku

+0

+1. 모듈의 몇 가지 방법으로이 대답을 확장 할 수 있습니다. (나는 ATM을 생각할 수 없다. ...) –

2

그들이 공유하는 모든 것이 이름이라면 과장 될 수 있습니다.

2

클래스는 동일한 데이터가 아니라 동일한 동작을하는 경우 일반적으로 기본 클래스를 공유해야합니다. OOP는 항상 행동에 관한 것이어야합니다. 기본 클래스를 만들 때 Liskov substitution principle에 대해서도 생각하고/공부해야합니다.

+0

는 행동/데이터 규칙에 맞는? BTW, Liskov 원칙과 여기에있는 질문의 관계를 명확히 할 수 있습니까? –

0

여러 NamedObject를 반복하여 이름을 표시해야합니까? 그렇다면 NamedObjects 클래스가 필요합니다. 그렇지 않다면 ...

어쨌든 작은 문제에 대해서는 재앙적인 실수를 할 수 없습니다. 이름에 대한 기본 클래스를 만들지 않고 나중에 필요하면 나중에 수업을 재구성하면됩니다. 기본 클래스를 추가하고 실제로 필요하지 않은 경우 큰 문제는 아니며 무시해도됩니다.

1

java에서 당신이 말한 것처럼 NamedObject 인터페이스를 만들 것입니다. 그러나 Ruby는 동적 인 ducked-typed 언어입니다. 인터페이스가 없습니다. 따라서 이름 속성을 정의하고 필요한 곳에 사용하십시오. 당신이해야 할 수있는 유일한 라인이기 때문에

이름 속성 같은 간단한 들어