Seite 1 von 1
Was ist ein Framework?
Verfasst: Freitag 23. Januar 2009, 19:30
von Dr.Miles
Hallo,
ich habe gerade die etwas rekursive Definition von Framework auf Wikipedia gelesen:
Ein Framework (engl. für „Rahmenstruktur, Fachwerk“) ist ein Programmiergerüst,
welches in der Softwaretechnik, insbesondere im Rahmen der objektorientierten Softwareentwicklung
sowie bei komponentenbasierten Entwicklungsansätzen, verwendet wird.
Wenn ich bei Wikipedia Programmiergerüst eingebe, dann werde ich zu Framework weitergeleitet...
Also nach dem was ich rauslese/denke ist ein Framework sowas wie eine Sammlung von Funktionen/Objekten/Methoden, ja?
Falls ja, ist doch die Python-standard-library auch ein Framework oder?
Gruß
Dr.Miles
Verfasst: Freitag 23. Januar 2009, 19:45
von Leonidas
Framework ist etwas unscharf definiert, da es ja doch recht Buzzwort-lastig ist.
Für mich ist ein Framework etwas, dass meine App und deren Hooks aufruft, eine Library ist etwas was ich selbst aufrufe ("they call me" vs. "I call them"). So gesehen ist zum Beispiel Werkzeug eine Library und als solches ist es auch gedacht.
Verfasst: Freitag 23. Januar 2009, 19:52
von Dauerbaustelle
Ein Framework würde ich (mal nicht von der tief-technischen Seite gesehen) als einen Rahmen definieren, der mir die Bewerkstelligung einer oder mehrerer gleichartiger Aufgaben erleichtert und häufig benutzte bzw. nützliche Features bietet, sodass der Aufwand, den ich als Entwickler betreiben muss, um mein Programm die Aufgabe(n) erfüllen zu lassen, minimiert wird.
Verfasst: Freitag 23. Januar 2009, 20:36
von Dr.Miles
Leonidas hat geschrieben:Für mich ist ein Framework etwas, dass meine App und deren Hooks aufruft
Tut das nicht der Interpreter?
Dauerbaustelle hat geschrieben:Ein Framework würde ich (mal nicht von der tief-technischen Seite gesehen) als einen Rahmen definieren, ...
Das liest sich für mich genau(bis auf den Rahmen) wie die Definition einer Library....
Was ist mit diesem "Rahmen" genau gemeint?
Verfasst: Freitag 23. Januar 2009, 20:40
von Leonidas
Dr.Miles hat geschrieben:Leonidas hat geschrieben:Für mich ist ein Framework etwas, dass meine App und deren Hooks aufruft
Tut das nicht der Interpreter?
Jein. Der Interpreter führt nur einen Hook aus, das Framework, welches wiederrum die App aufruft.
Verfasst: Freitag 23. Januar 2009, 20:49
von BlackVivi
Für mich ist'n Framework'ne krassere Abstraktion um bestimmte Probleme zu lösen.
Webframework für Webapplikationen, GUI-Framework für Gui Applikationen... Gibt ja auch CMS-Frameworks, DB-Frameworks und was weiß ich. Dort wird's eben noch mehr abstrahiert und nimmt einen viel lästige Arbeit ab.
Verfasst: Freitag 23. Januar 2009, 21:13
von Dr.Miles
Leonidas hat geschrieben:Jein. Der Interpreter führt nur einen Hook aus, das Framework, welches wiederrum die App aufruft.
Also nach dem was ich gelesen habe, ist ein Hook eine Schnittstelle, wo du Code "drankleben" (So stell ich mir das irgendwie vor) kannst der dann ausgeführt wird, wenn ein bestimmtes ereignis eintritt. Aber vllt. kannst du/jemand anderes mir eine kurze erklärung geben(oder dt. Link) . Gibt es für jeden Interrupt einen Hook?
Bisher habe ich nur im Zusammenhang von Keyloggern davon gehört (Und im PyKeylogger Quelltext davon gelesen - aber nicht verstanden)
Aber sonst habe ich deinen Satz auch nicht ganz verstanden...
Meinst du:Der Interpreter führt einen Hook aus, der das Framework aufruft, woraufhin das Framework das Programm aufruft?
BlackVivi hat geschrieben:Für mich ist'n Framework'ne krassere Abstraktion um bestimmte Probleme zu lösen.Webframework für Webapplikationen, GUI-Framework für Gui Applikationen... Gibt ja auch CMS-Frameworks, DB-Frameworks und was weiß ich. Dort wird's eben noch mehr abstrahiert und nimmt einen viel lästige Arbeit ab.
Also sowas wie eine Library mit Zusatzfunktionen? Kann ich mir das so vorstellen?
Verfasst: Freitag 23. Januar 2009, 21:24
von Dauerbaustelle
Eine Library ist nur dazu da, eine Aufgabe zu erfüllen. Ein Framework ist, wenn du so willst, ein (hoffentlich) gut gemixter Verband aus vielen Libraries, um einen Themenbereich abzudecken.
Beispiel:
Library: sqlalchemy, regular expressions, jinja
Framework: django (sqlalchemy=DB-Abstraktion, regular expressions fürs url-handling, jinja fürs Templating*; wobei das natürlich nicht alle Bestandteile sind :))
* Mir ist bewusst, dass django kein Jinja nutzt, aber es ist ähnlich und sieht besser aus als "die-template-engine-von-django" ;)
Verfasst: Freitag 23. Januar 2009, 21:30
von Dr.Miles
Dauerbaustelle hat geschrieben:Eine Library ist nur dazu da, eine Aufgabe zu erfüllen. Ein Framework ist, wenn du so willst, ein (hoffentlich) gut gemixter Verband aus vielen Libraries, um einen Themenbereich abzudecken.
Danke, das war einleuchtend.
Re: Was ist ein Framework?
Verfasst: Freitag 23. Januar 2009, 21:32
von Darii
Dr.Miles hat geschrieben:Hallo,
ich habe gerade die etwas rekursive Definition von Framework auf Wikipedia gelesen:
Die Beschreibung die *danach* in der Wikipedia steht deckt sich mit dem hier gesagten auch recht gut.
Falls ja, ist doch die Python-standard-library auch ein Framework oder?
Kann man natürlich so sehen
Code: Alles auswählen
$ ls /System/Library/Frameworks/ | grep Python
Python.framework
(das ist mal Apples Meinung zu dem Thema, wobei hier eher Python insgesamt gemeint ist)
Verfasst: Freitag 23. Januar 2009, 23:44
von BlackJack
Die Unterscheidung "eine Aufgabe" und "Themenbereich" finde ich nicht gut, denn Themenbereiche können auch Bibliotheken abdecken.
Bibliotheken werden von Code verwendet den man schreibt, während man bei Rahmenwerken Code schreibt, der dann vom Rahmenwerk verwendet wird.
Beispiel `easygui` (Bibliothek) vs. `Tkinter` (Rahmenwerk). Bei `easygui` schreibt man Code der die Bibliothek benutzt und dort nur die Funktionen aufruft. Bei `Tkinter` schreibt man Code, der bei bestimmten Ereignissen ausgeführt werden soll, und dann gibt man die Kontrolle an `Tkinter` ab und das ruft dann je nach Ereignis den selbstgeschriebenen Code auf.
Framework
Verfasst: Montag 26. Januar 2009, 18:42
von farid
BlackJack hat geschrieben:Bibliotheken werden von Code verwendet den man schreibt, während man bei Rahmenwerken Code schreibt, der dann vom Rahmenwerk verwendet wird.
In dem Sinne waere dann auch der X Server, oder das Aequivalent bei Windows ein Framework, denn es ruft ja die Hooks der GUI-Anwendung auf... und es bietet eine Library (API) fuer die Anwendung an (fuer die andere Richtung).

Verfasst: Montag 26. Januar 2009, 20:51
von str1442
Bei einem Framework arbeitet man in einem bestimmten Gerüst. Die Kontrolle hat dann dasjenige, das den Rahmen zur Verfügung stellt, das eigentliche "Framework". Eine Library dagegen ist vollkommen ohne eigene Kontrolle. Also ja, im Grunde Inversion of Control vs Control, imho.
Verfasst: Montag 26. Januar 2009, 21:21
von DasIch
Eine Library stellt etwas zu Verfügung dass ich für was auch immer nutzen kann.
Ein Framework stellt auch etwas zu Verfügung aber mit dem Fokus auf ein ganz bestimmtes Ziel. Django ist z.B. ein Framework für Webanwendungen und dementsprechend stellt es dafür schon alles aufeinander abgestimmt bereit.
Werkzeug hingegegen ist eher sowas wie eine WSGI Library + etwas Spielzeug für Webanwendungen, damit kann ich zwar theoretisch auch schon eine Webanwendung schreiben aber in der Realität fehlt dann eben doch eine Templateengine, ORM und eventuell etwas für Forms.
Verfasst: Montag 26. Januar 2009, 23:47
von BlackJack
@farid: Das X-Server-Beispiel verstehe ich nicht. Wo gibt's da Hooks? Der X-Server und die Bibliothek stellen soweit ich weiss nur Aufrufe zur Verfügung. Die Ereignisse muss man sich aktiv selber aus der Warteschlange holen. Rückruffunktionen registrieren ist auf der Ebene nicht möglich. Das bieten dann erst die Rahmenwerke wie Gtk, Qt, ….
Verfasst: Mittwoch 28. Januar 2009, 10:57
von sma
Hier ist die Daumenregel: Don't call us, we call you.
Java-Applets benötigen z.B. ein Rahmenwerk, denn eine Applet-Klasse ist alleine nicht lauffähig. Sie hat nur einige Methoden, die dann, zur passenden Zeit, vom Rahmenwerk aufgerufen werden.
Meistens werden Rahmenwerke aber Rahmenwerke, weil das cooler klingt. Eigentlich sind das in Regel nur Funktionsbibliotheken oder meinenwegen Klassenbibliotheken.
Stefan