코드, 음계 및 하모니를 분석하는 프로그램을 C ++ 11로 작성하기 시작했습니다. 내 디자인 단계에서 가장 큰 문제는 'C'음표는 음표, 코드 형식 (Cmaj, Cmin, C7 등) 및 키 유형 (Cmajor, Cminor의 키)이라는 것입니다. 같은 문제가 간격 (부 3, 3)에서 발생합니다.
프로그램의 모든 '기호'에 대한 기본 클래스 인 기본 클래스 인 토큰을 사용하고 있습니다. 예를 들어 :
class Token {
public:
typedef shared_ptr<Token> pointer_type;
Token() {}
virtual ~Token() {}
};
class Command : public Token {
public:
Command() {}
pointer_type execute();
}
class Note : public Token;
class Triad : public Token; class MajorTriad : public Triad; // CMajorTriad, etc
class Key : public Token; class MinorKey : public Key; // Natural Minor, Harmonic minor,etc
class Scale : public Token;
보시다시피, 모든 파생 클래스 (CMajorTriad, C, CMajorScale, CMajorKey 등)를 생성하는 것은 다른 모든 음표와 화음을 포함하여 엄청나게 복잡해집니다. 다중 상속은 작동하지 않습니다. 즉 :
class C : public Note, Triad, Key, Scale
클래스 C는이 모든 것을 동시에 할 수는 없습니다. 상황에 따라 다형성이 작동하지 않습니다 (수퍼 메소드를 수행하는 방법을 결정하는 방법은 무엇입니까? 모든 수퍼 클래스 생성자를 호출하면 여기서 발생하지 않아야 함)
사람들이 제공해야하는 디자인 아이디어 나 제안이 있습니까? OO 관점에서 색조 조화 모델링과 관련하여 Google에서 아무것도 찾을 수 없었습니다. 모든 개념들 사이에는 관계가 너무 많습니다.