私は音楽作品を表す3つの非静的クラスを持っています。これらは、スコア、パート、およびノートのクラスです。
スコアにはArrayList<Part>
、スコアの複数の楽器パートを表すインスタンス変数が含まれ、パートにはArrayList<Note>
、ノートシーケンスを表すインスタンス変数が含まれます。
public class Score {
private ArrayList<Part> parts;
private int resolution;
public Score(int resolution) {
parts = new ArrayList<Part>();
this.resolution = resolution;
}
public void addPart(Part part) {
parts.add(part);
}
public ArrayList<Part> getParts() {
return parts;
}
public int getResolution() {
return resolution;
}
}
public class Part {
private ArrayList<Note> notes;
public Part() {
notes = new ArrayList<Note>();
}
public void addNote(Note note) {
notes.add(note);
}
public ArrayList<Note> getNotes() {
return notes;
}
}
public class Note() {
private long startStamp;
private long endStamp;
private int resolution;
public Note(long startStamp, long endStamp, int resolution) {
this.startStamp = startStamp;
this.endStamp = endStamp;
this resolution = resolution;
}
public double getDuration() {
int duration = (double) (getEndStamp() - getStartStamp()) / resolution;
return duration;
}
}
各ノートの長さは、スコア解像度を使用して計算されます。特定のスコアインスタンスの解決は、ノートがインスタンス化されるたびにノートコンストラクターを通過します。ArrayList<Note> notes
次に、対応するPartインスタンスにメモが追加されArrayList<Part> parts
、Scoreインスタンスにパーツが追加されます。
同じスコアに属する多くのノートがあるため、ノートコンストラクターパラメーターとして使用する私のソリューションはint resolution
エレガントではないようです。つまり、解像度はノートの属性ではなくスコアの属性です。
Noteクラスのコンストラクター、またはおそらく他のソリューションを介して解決を渡す代わりに、Noteクラス内から対応するScoreオブジェクトを参照することによって解決を取得する方法はありますか?