আমি সি ++ 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;
যেমন আপনি দেখতে পাচ্ছেন, উদ্ভূত সমস্ত ক্লাস তৈরি করতে (সিএমজোরট্রিড, সি, সিএমজোরস্কেল, সিএমজোরকি, ইত্যাদি) অন্যান্য সমস্ত নোটের পাশাপাশি এনহরমনিক্স সহ হাস্যকরভাবে জটিল হয়ে উঠবে। একাধিক উত্তরাধিকার কাজ করবে না, অর্থাত:
class C : public Note, Triad, Key, Scale
ক্লাস সি, একই সাথে এই সমস্ত জিনিস হতে পারে না। এটি প্রাসঙ্গিক, এছাড়াও এটি দিয়ে পলিমারফিং কাজ করবে না (কোন সুপার পদ্ধতিগুলি সম্পাদন করতে হবে তা কীভাবে নির্ধারণ করবেন? প্রতিটি সুপার ক্লাস কনস্ট্রাক্টরকে কল করা এখানে হওয়া উচিত নয়)
লোকেরা যে কোনও ডিজাইনের ধারণা বা পরামর্শ দিতে পারে? ওও দৃষ্টিকোণ থেকে টোনাল সম্প্রীতির মডেলিংয়ের ক্ষেত্রে আমি গুগলে কিছুই খুঁজে পাচ্ছি না। এখানে সমস্ত ধারণার মধ্যে অনেক বেশি সম্পর্ক রয়েছে।