मैंने C ++ 11 में एक प्रोग्राम लिखना शुरू कर दिया है जो कॉर्ड, स्केल और सामंजस्य का विश्लेषण करेगा। मेरे डिजाइन चरण में सबसे बड़ी समस्या यह है कि नोट 'सी' एक नोट है, एक प्रकार का राग (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
क्लास सी, एक ही समय में ये सभी चीजें नहीं हो सकती हैं। यह प्रासंगिक है, इसके साथ बहुरूपता भी काम नहीं करेगा (यह निर्धारित करने के लिए कि कौन से सुपर तरीकों का प्रदर्शन करना है? हर सुपर क्लास कंस्ट्रक्टर्स को कॉल करना यहां नहीं होना चाहिए)
क्या कोई डिज़ाइन विचार या सुझाव है जो लोगों को पेश करना है? मैं OO के दृष्टिकोण से टोनल सामंजस्य के संबंध में Google पर कुछ भी नहीं खोज पाया। यहाँ सभी अवधारणाओं के बीच अभी बहुत अधिक संबंध हैं।