Grundsätzliche Fragen zu OOP

Nu gut ich mache es nun so:

Code:
public class NotenBlatt extends JPanel  {
 // der ist fürs Zeichen zuständig und holt sich die Daten aus der LiedList
}

public class LiedList {

    private ArrayList<NoteData> lieddata = new ArrayList<NoteData>();
    private int index;
    private long lasttick = 0;
    private String noart = "-XY-L---Q-------I---------------O";
    private String avnote = "SCDEFGAH";

    
    void midi2Note() {
        // wenn Note On neue Note anlegen mit dauer 0
        // wenn Note Off .. entsprechende Note rückwärtssuchen und dauer eintragen
        // wenn dauer zu gross - split also noch eine Note anlegen mit haltebogen 
    }
    
    void text2Note() {
        // sting auswerten und in die Liste anfügen
    }
    
    void setIndex (int pos) {
        index = pos;
    }
    
    NoteData getnextNote() {  // hole die Note von aktueller Pos in der List ; pos++
        index++;
        return lieddata.get(index-1);
    }
    
    boolean hasmoreNotes() {
        return (index < lieddata.size());
    }

}

public class NoteData {
    private String cnoten = "SCDEFGHA";
    char art;
    int octave, note;  // octave 10 ist Sonderzeichen note 1 ist C usw
    int zeile,slot; // grafische Pos relativ
    long tick; // pos zeitlich
    boolean is, extend, halten;
    
   
    boolean string2note(String ntxtin) {
        boolean syntax = ntxtin.matches("[0-8][SCDEFGHA][OIQLY]#?\\.?U?" );
        // aus einem String die Note ermitteln
        return syntax;
    }
    
    String note2string () {
        String temp = Integer.toString(octave) + Character.toString(cnoten.charAt(note)) + Character.toString(art);
        if (is) {
            temp = temp + "#";
        }
        if (extend) {
            temp = temp + ".";
        }
        if (halten) {
            temp = temp + "U";
        }
        return temp;
    }
    
    void midiEvent2note( javax.sound.midi.MidiEvent midiev ) {
        tick = midiev.getTick();
        byte[] block = midiev.getMessage().getMessage();
        int cmd = (int)(block[0] & 0x70);
        if (block.length  == 3 & cmd == 0x80) {
            byte zwert = block[1];
            octave = ((int) zwert / 12) - 1;
            note = ((int) zwert % 12 ) + 1;
            if (block[2] > 0) {
                art = '+';
            } else {
                art = '-';
            }    
        } else {
            art = '?';
        }    
    }
    
    MidiEvent note2midiEventOn() {
        ShortMessage  msg = new ShortMessage(); 
        try {
          msg.setMessage(ShortMessage.NOTE_ON, 0, octave * 12 + note - 1, 64);
        } catch (InvalidMidiDataException e)  {
          // fehlerbehandlung  
        }
        MidiEvent erg = new MidiEvent(msg,tick);  
        return  erg;
    }
    
    MidiEvent note2midiEventOff() {
        ShortMessage  msg = new ShortMessage(); 
        try {
          msg.setMessage(ShortMessage.NOTE_OFF, 0, octave * 12 + note - 1, 0);
        } catch (InvalidMidiDataException e)  {
          // fehlerbehandlung  
        }
        MidiEvent erg = new MidiEvent(msg,tick);  // noch länge hinzu
        return  erg;
    }
    

}

ist zwar immer noch nicht OOP conform aber so habe ich den wenigsten Aufwand
So wie ich das festgestellt habe werde ich das OOP Prinzip nie verinnerlichen ich denke zu sehr in Eigenschaften / Functionen :-(

Die Noten class ist zwar immer noch nicht nach OOP - aber sie kann nun als Eingabe/Ausgabe String und Midi
Midi als Ausgabe halt 2 Functionen weil eine Note immer 2 MIDI Events sind. und beim Erstellen aus Midi muss ich halt mit Sonderzeichen arbeiten die dann bei der LiedList ausgewertet werden muss
In LiedList werde ich dann auch die nötigen Pausenzeichen ermitteln und die NotenSchlüssel usw in der List verwalten
Die class Editor und class NotenBlatt bekommen dann die class Note zugeschoben um "Ihr Ding" damit zu machen

und die class Notenzeichen die fürs Zeichen zuständig ist bleibt auch so, da ich ja die Fuctionen ein Mal bei der EditorClasse brauche und beim NotenBlatt

wie weit ich da noch mit Interfaces arbeiten kann / muss ist mir noch nicht klar - schaun wer mal
 
Zuletzt bearbeitet:
Zurück