Saya sudah mulai menulis sebuah program dalam C ++ 11 yang akan menganalisis akord, skala, dan harmoni. Masalah terbesar yang saya miliki dalam fase desain saya, adalah bahwa not 'C' adalah not, jenis akor (Cmaj, Cmin, C7, dll), dan jenis kunci (kunci Cmajor, Cminor). Masalah yang sama muncul dengan interval (minor ke-3, ke-3 utama).
Saya menggunakan kelas dasar, Token, itu adalah kelas dasar untuk semua 'simbol' dalam program. jadi misalnya:
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;
Seperti yang Anda lihat, untuk membuat semua kelas turunan (CMajorTriad, C, CMajorScale, CMajorKey, dll) akan dengan cepat menjadi sangat rumit termasuk semua catatan lainnya, serta enharmonics. multiple inheritance tidak akan berfungsi, yaitu:
class C : public Note, Triad, Key, Scale
kelas C, tidak bisa semuanya pada saat yang bersamaan. Itu kontekstual, juga polymorphing dengan ini tidak akan bekerja (bagaimana menentukan metode super untuk melakukan? Memanggil setiap konstruktor kelas super tidak boleh terjadi di sini)
Apakah ada ide atau saran desain yang ditawarkan orang? Saya belum dapat menemukan apa pun di Google dalam hal memodelkan harmoni tonal dari perspektif OO. Ada terlalu banyak hubungan di antara semua konsep di sini.