Tach.
kann mir jemand eine vorstellung geben, wie ich plugins für mein "projekt" ermögliche, sodass mein code verändert werden kann und man den code mit skripten in einem plugin-ordner dennoch erweitern kann?
Meiner Ansicht nach schmeißt Du hier zwei Sachen durcheinander: Vererbung und Plugins. Klar, Du kannst natürlich eine Basisklasse für Plugins vorgeben, die dann der Pluginschreiber als Vorlage für sein Plugin benutzt. Irgendeine verbindliche Vorgabe für die Schnittstelle zwischen Hauptprogramm und Plugin ist sogar zwingend notwendig, sonst könnte Dein Programm ja nicht viel damit anfangen. Was Du weiterhin beschreibst, klingt allerdings nicht nach einem Plugin, sondern kommt eher der Änderung Deines "Basiscodes" gleich.
Plugins hingegen klinken sich üblicherweise an definierten Stellen in ein Hostprogramm ein. Welche Stellen das sind und welche Daten das Plugin serviert kriegt, legst Du als Programmierer dieses Programms fest. Beim Starten des Programms werden die Plugins in eine Liste eingetragen, auf die das Hauptprogramm später beim Erreichen der Einklinkpunkte wieder zugreift. Normalerweise läuft das ungefähr so:
Dein Programm stellt eine gewisse Grundfunktionalität zur Verfügung, also meinetwegen das Öffnen und Abspielen einer Audiodatei. Darüber hinaus bietet es Plugins Einstiegspunkte an, an denen sie z. B. die Audiodaten zur Verfügungs gestellt bekommen, um irgendwas damit zu machen. Das Programm startet beispielsweise vor dem Senden der Daten an die Audiohardware nacheinander alle Plugins aus seiner Pluginliste, verarbeitet deren Rückgabewerte, räumt wieder auf und macht dann weiter im normalen Programmablauf. So ein Plugin könnte jetzt z. B. ein Equalizer sein, der die Audiodaten filtert oder ein Spektralanalysator, der sie in den Frequenzbereich transformiert und graphisch darstellt.
Andere Möglichkeiten wären z. B. Einstiegspunkte beim Öffnen der Dateien. Dort könnte ein Plugin die Dateinamen übergeben bekommen und eine Liste der zuletzt geladenen Dateien verwalten. Hier siehst Du auch, daß es sinnvoll sein kann, getrennte Listen für die unterschiedlichen Einstiegspunkte zu verwalten. Der Equalizer soll ja nur gezielt vor der Ausgabe aufgerufen werden, während die Dateiliste mit Audiodaten gar nichts zu schaffen hat.
Um's kurz zu machen: Du bietest in Deinem Programm "Steckplätze" für externe Geräte (die Plugins) an. Falls ein Gerät am Steckplatz angeschlossen ist, sendest Du zum entsprechenden Zeitpunkt Daten, die das Gerät verarbeitet und evtl. verändert zurück an Dein Programm schickt. Das angeschlossene Gerät muß dazu nichts an Deinem Programm ändern; das ist der springende Punkt.
Once is a mistake, twice is Jazz.