Wie schreibt man beliebig erweiterbare/anpassbare Software?

Kamikatze

Captain
Registriert
Okt. 2004
Beiträge
3.708
Ich glaube das Thema ist ganz interessant und der Siegeszug von Software, die sich den persönlichen Ansprüchen nahezu grenzenlos anpassen und erweitern lässt ist ja wohl unverkennbar - und der Trend geht ja auch immer mehr zu einer solchen Konzeption, denke man nur an Programme wie Firefox, Miranda, foobar, ...

Doch wie konzipiert und schreibt man an besten/einfachsten solche Programme? Gibt es da evtl. Tutorials bzw. Hilfestellungen dazu?

Ist die Möglichkeit bei Webprojekten (derzeit Java-Servlets & JSP, später AJAX) gleichermaßen "leicht" zu realisieren wie in "normalen" Programmen?

Wir werden nämlich nächstes Schuljahr unsere Online Schüler Lernplattform als Diplomarbeit weiterentwickeln (Umstellung auf AJAX-Technologie, da derzeit sehr träge) und mein Traum wäre es eben, ein Firefox-ähnliches Erweiterungssystem zu integrieren, mit welcher man diese Plattform den schuleigenen Bedürfnissen selbst perfekt zusammenbasteln kann. :)

Aber auch für allgemeine Programme würde ich weitere Informationen zu diesem Thema sehr interessant und hilfreich empfinden!

Vllt. hat ja hier schon jemand Erfahrung mit diesem Thema! :)

Danke schon einmal!
 
Zuletzt bearbeitet: (Satz "deutscher" gemacht...)
Hm, ich bin mir nicht ganz sicher was du mit "beliebig erweiterbar" meinst, ich denke aber der Grundstein für eine erweiterbare Software liegt zunächst einmal in der Softwarearchitektur und damit einer sinnvollen Unterteilung in Kommunikations-, Anwendungs- und Datenhaltungsteil. Darauf aufbauend können dann z.B. Fachklassendiagramm, Schichten- und Komponentenmodell wie es die UML (aktuell 2.1) vorschlägt entwickelt werden.

Am besten hälst du dich da an die UML (unified modeling language). Was es da an Literatur im Netz gibt weiß ich nicht. Es lohnt allerdings auch nicht sich die teuren Bücher dafür anzuschaffen, da die UML immer wieder großen und kleineren Änderungen unterworfen ist. Ich habe hier "Analyse und Design mit UML 2.1 - Objektorientierte Softwareentwicklung" von Bernd Oestereich liegen. Ein Werk das mich teilweise in den Wahnsinn getrieben hat.

Mit der UML durchläufst du die Phasen Analyse und Design des Softwareentwicklungsprozesses. Es handelt sich dabei um die ersten Phasen (von der Projektplanung die für dich wohl unwichtig ist mal abgesehen).

Eine komponentenbasierte Software könnte das sein was du suchst. Eine vernünftige Komponentenwahl und Softwarearchitektur vorausgesetzt sollte eigentlich jede Software beliebig erweiterbar sein. So der Held bin ich auf dem Gebiet aber auch nicht...


Ach ja, nicht ganz unproblematisch ist dabei die Wahl der Software. Ich weiß nicht was es an open source Software so gibt. Je nach Größe des Projekts kann man die in Analyse und Design anzufertigenden Modelle und Diagramme auch auf dem Papier erstellen (was natürlich einige Nachteile, insbsondere was die spätere Codegenerierung angeht, hat). Wir haben für unsere Projekte IBM Rational Software Architect benutzt, der auf Eclipse basiert. Das Ding ist nur schweine teuer, da ist ein Visual Studio nichts gegen.

Ich hoffe ich bringe dich hier nicht auf eine völlig falsche Fährte...


Gruß,

Patrick
 
Zuletzt bearbeitet:
OK, vllt. hab ich mich etwas unklar ausgedrückt.
Ich spreche nicht von der Erweiterbarkeit/Wartbarkeit zur Entwicklungszeit (obwohl das natürlich auch und sowieso wichtig ist), sondern wie man ein "fertiges" Produkt dann beliebig erweitern kann - Beispiel Firefox.

Mit den Extensions lassen sich ja praktisch fast alles realisieren - haben also irgendwie fast unbeschränkten Zugriff auf Firefox selbst und können das Verhalten des Hauptprogramms beliebig ändern/anpassen.

Oder wie es auch mit Miranda möglich ist.

Neue Funktionalitäten usw. eben nahtlos über eine bestimmte Schnittstelle in das bestehende Programm integrieren - alles als unabhänige Module voneinander.

Ich glaub ich lass es jetzt weiter mit meinen kläglichen Erklärversuchen und bleib einfach beim Beispiel Firefox - ich glaub so kann man sich am besten darunter vorstellen, was ich meine.

Das Hauptprogramm (die Basis) soll nur aus dem Nötigsten bestehen - dem Grund- bzw. Backbone-System und dann über Schnittstellen (natürlich nur fast) beliebig erweiterbar sein.

Aber trotzdem schon einmal danke für die Antwort! :)
 
Zuletzt bearbeitet:
welche art von software enstehen soll ist für so ein vorhabden relativ egal. wichtig ist nur das die verwendeten bibliotheken eine solche nutzung zulassen(vorallem bei gui bibliotheken muss man da drauf achten. bei einigen ist es nämlich recht kompliziert hinterher noch andere elemente in guis einzufügen etc.).


allerdings gibt es da kein algemein gültiges grundkonzept was du verfolgen kannst. du musst dir halt überlegen welche dinge wie sinnvoll ausgelagert werden können.

wenns um webanwendungen geht solltest du dir aufjedenfall mal ruby on rails angucken. auch wenn du es hinterher vielleicht nicht benutzen willst. das design von rails ist genau für schnelle erweiterbarkeit ausgelegt.

ansonsten legt dir mal ein buch über design patterns zu. da gibt es einige die genau dafür gedacht sind. wie z.b. listener oder model/view/controller. einige davon wirst du auch in rails finden.


wichtig ist letztenendes das du erstmal die grundbausteine selbst sehr modular programmierst. und dann müssen einfach genug hooks da sein um vorhandene elemente zu verändern oder neue hinzuzufügen. wie das dann genau aussehen sollte hängt von deinem programm ab. aber wiegesagt, für webanwendungen sollte rails in jedem fall eine inspiration sein.
 
Gibts denn da gar nix? Keine (Grund-)Ideen? Mini-Beispiel-Projekte? Irgendetwas, das den Einstieg zumindest ein bisschen vereinfachen könnte?
 
Rukola hat da schon das richtige Thema angesprochen. Eine einfach erweiterbare Software wie du es meinst, bedingt zwangsweise auch eine dahinterstehende Softwarearchitektur die das unterstützt. Ohne die passende Infrastruktur in der Software geht es nicht.

Auch wenn sich das für Dich sicher erstmal sehr abstrakt anhört. Ein guter Weg ist es, sich mit UML vertraut zu machen.
Das Buch Designpatterns kann auch helfen. Da sind auch Beispiele drin.

Wenn Du hohe Ansprüche stellst, musst Du auch bereit sein Arbeit in das Vorhaben zu investieren.

Und wenn es für eine Diplomarbeit ist halte ich den Ansatz auch für sinnvoll. Eine Diplomarbeit wird auch zu einem guten Prozentsatz nach dem wissenschaftlichen Ansatz benotet, nicht nur danach ob die Software funktioniert :-).

MfG

Arnd
 
Zuletzt bearbeitet:
Das eigentliche Ziel der Diplomarbeit ist auch nur die Umstellung der ganzen Seite auf AJAX - und das dürfen wir auch mit dem Google Web Toolkit machen - die ganze Sache wird also recht unkompliziert. Vllt. hätte ich dazu sagen sollen, dass es sich um die Diplomarbeit für die HTL-Matura handelt (Unterrichtsgegenstand Projektentwicklung) - also nichts besonders Aufregendes - es gibt auch keine besonderen Anforderungen, nur der Umfang des Projekts sollte reichen um ein Jahr damit mindestens 10 Stunden/Woche daran arbeiten zu können.

Ich würde mich dafür prinzipiell interessieren und ein solches System in die Seite zu integrieren wäre auch nicht viel mehr als freiwillige zusätzliche Arbeit. :)

Aber trotzdem schon mal danke auch für die Antwort.

PS: Uml haben wir im letzten Jahrgang bereits gelernt... wie ich damit jetzt aber ein Plugin-fähiges Programm konzipieren soll... irgend ein kleiner Anstoß wäre halt ganz nett... aber mich in den Source von Miranda/Firefox usw. einzuarbeiten... das ist mir dann doch zu viel Arbeit.
 
was ist dir denn noch unklar? vielleicht können wir dann besser helfen.

das problem ist eben das das ganze von program zu pogramm sehr unterschiedlich ist.

in ereignissbasierten programmen wie normalen gui apps reicht schon eine starke nutzung des ereignisssystems(messages queues, listener) um erweiterbarkeit zu gewehrleisten. dann muss sich ein plugin nur für die passenden ereignisse eintragen und schon kann das programm erweitert werden.

ein blick in die firefox sourcen wird dir also nichts nützen, schließlich sind webanwendungen in der regel nicht ereignissbasiert, sondern dokumentbasiert(ganz abgesehen davon das die firefox sourcen absolut grauenhaft sind, und wirklich niemandem zu empfehlen ist diese durchzusehen...). genau für solche zwecke ist das model/view/controller pattern gedacht.

im grunde wirst du also nicht drumrum kommen ein buch über design patterns zu lesen. und lies dir ein paar tutorials zu rails durch (oder such dir einen java rails klon, falls dir ein paar brocken ruby lernen zu anstregend ist). da solltest du schnell begreifen wie man erweiterbare dokumentbasierte programme schreiben kann.
 
Zuletzt bearbeitet:
Ich würde sage eine Programmierschnittstelle innerhalb der Software würde die Erweiterbarkeit sehr vereinfachen.
 
Also, ich weis jetzt auch nicht was du nicht genau verstanden hast, liegt vllt daran das ich weis was ich machen müsste :P

Aber an sich "reicht" für deine Software eine eigene Implementierte Scriptsprache, die wird dann von deinem Programm duch Scanner,Parser, Compiler, ... geleitet und das was dann rauskommt soll dein prog ausführen... (wie das System in mIRC). Dabei ist denke ich das größte prob dass man eine Sprache haben will die viel ermöglicht, nur je mehr Features du einbaust, je komplizierter und umfangreicher wird es.

Ein kleines Beispiel für eine WebSite wäre z.B. das sich der User per zusammenklicken eine "personalisierte" Startseite erstellen kann.


Hoffe mal das es dir weiterhilft ...

MFG
- booZy
 
Zurück
Oben