# Was ist ein Framework?



## BlubBlub (5. Okt 2010)

Hi, 

ich wollte mal genauer wissen was ein Framework ist?
Dazu hab ich mir einen Artikel bei Wikipedia durchgelesen.
Nun steht dort, dass ein Framework ein Programmiergerüst ist.
Versteht man unter einem Framework also ein fast fertiges Programm,
dessen Funktionen und Prozeduren nur noch mit Inhalt gefüllt werden müssen?

Ich wollte mir mal ein verständliches Beispiel für ein Framework anschauen,
leider konnte ich kein solches Beispiel finden.


----------



## maki (5. Okt 2010)

Inversion of Control Containers and the Dependency Injection pattern

Da wirrd der Unterschied zwischen "Inversion of Control" - dem Merkmal eines jeden Frameworks - zu "Dependency Injection" erklärt, mit Beispiel.


----------



## DerEisteeTrinker (5. Okt 2010)

Also ein fast fertiges Programm ist zu viel gesagt. In einem Framework werden sinnvolle Programmieransätze, Hilfsalgorithmen und Unterstützungen zusammengefasst. Es ist keine Anwendung im eigentlichen Sinne, sondern du kannst es dir wie eine Werkzeugkiste vorstellen. Wo du das Werkzeug findest, dass du zum Hausbau brauchst. Mit diesem Werkzeug sparst du dir die Entwicklung des Betons, weil sich da schon mal wer den Kopf drüber zerbrochen hat 

Es gibt aber viele verschiedene Frameworks und jedes hat seine Vor- und Nachteile. Du als Programmierer musst halt immer entscheiden, welches für die Aufgabe am Besten geeignet ist.

Als Beispiel für ein Framework, wären für mich die commons-lang von Apache. Da hast du viele Klassen, z.Bsp. die Stringutils, die dir unter Umständen viel Arbeit und Zeit sparen.


----------



## maki (5. Okt 2010)

@DerEisteeTrinker

commons-lang ist kein Framework, sondern nur eine Lib, kein IoC


----------



## DerEisteeTrinker (5. Okt 2010)

@maki

Wo liegt dann der Unterschied zwischen Framework und Lib? Ich persönlich würde Lib als eine besondere Art des Framework sehen.


----------



## maki (5. Okt 2010)

DerEisteeTrinker hat gesagt.:


> @maki
> 
> Wo liegt dann der Unterschied zwischen Framework und Lib? Ich persönlich würde Lib als eine besondere Art des Framework sehen.


Umgekehrt wird ein Schuh draus 

Ein Framework ist auch eine Lib, aber nicht jede Lib ein Framework 
Wie gesagt, IoC ist das Zauberwort, steht sowol im Fowler Artikel, als auch im Wiki Artikel.

Eine Lib ist nichts weiter als eine Sammlung von Klassen/Methoden, die du als Entwickler aufrufst wenn du sie nutzen möchtest, Beispiel commons-lang.
Ein Framework dagegen ruft *deine* Klassen auf(die "invertierte Kontrolle" eben), welche entweder durch Annotationen/Vererbung/Interface Implementierung/sonstige Konfiguration in das Framework eingehängt werden, Beispiel struts/JSF/Hibernate/iBatis/Spring/EJBs.


----------



## FArt (5. Okt 2010)

maki hat gesagt.:


> Wie gesagt, IoC ist das Zauberwort, steht sowol im Fowler Artikel, als auch im Wiki Artikel.



Das sehe ich nicht ganz so. Kannst du die entsprechenden Stellen mal zitieren, die genau diese Aussage stützen?

Fowler z.B. verwendet den Begriff Framework auch ohne Hinblick auf IoC. Und das würde ich auch tun.
Beispiel:
MF Bliki: HarvestedFramework ff


----------



## maki (5. Okt 2010)

FArt hat gesagt.:


> Das sehe ich nicht ganz so. Kannst du die entsprechenden Stellen mal zitieren, die genau diese Aussage stützen?


Klar.
MF Bliki: InversionOfControl


> *Inversion of Control is a common phenomenon that you come across when extending frameworks. Indeed it's often seen as a defining characteristic of a framework.*
> ......
> *
> These are complicated cases of inversion of control, but you run into this effect in much simpler situations. A template method is a good example: the super-class defines the flow of control, subclasses extend this overriding methods or implementing abstract methods to do the extension. So in JUnit, the framework code calls setUp and tearDown methods for you to create and clean up your text fixture. It does the calling, your code reacts - so again control is inverted.
> ...



Inversion of Control Containers and the Dependency Injection pattern


> Inversion of Control
> 
> When these containers talk about how they are so useful because they implement "Inversion of Control" I end up very puzzled. *Inversion of control is a common characteristic of frameworks*, so saying that these lightweight containers are special because they use inversion of control is like saying my car is special because it has wheels.
> ...



In einem seinem Bücher sagt es das nochmals, detailierter, weiss aber nicht mehr in welchem...



> Fowler z.B. verwendet den Begriff Framework auch ohne Hinblick auf IoC. Und das würde ich auch tun.


Natürlich, der Begriff Framework impliziert IoC, wozu also redundant Framework & IoC sagen, wenn das eine das andere beinhaltet.


----------



## FArt (5. Okt 2010)

Dann passt es wieder. es heißt dort "often" und "common" und dies relativiert die Aussage damit wieder.



maki hat gesagt.:


> Ein Framework ist auch eine Lib, aber nicht jede Lib ein Framework
> Wie gesagt, IoC ist das Zauberwort, steht sowol im Fowler Artikel, als auch im Wiki Artikel.



Ich wäre mir nicht sicher, ob ich eine API in den Adelstand des Frameworks erheben könnte, indem ich lediglich z.B. einen Observer- oder Callbackmechnismus hinzufüge. Also als einziges Merkmal für und wider Library oder Framework finde ich IoC nicht geeignet.


----------



## maki (5. Okt 2010)

FArt hat gesagt.:


> Dann passt es wieder. es heißt dort "often" und "common" und dies relativiert die Aussage damit wieder.
> 
> Ich wäre mir nicht sicher, ob ich eine API in den Adelstand des Frameworks erheben könnte, indem ich lediglich z.B. einen Observer- oder Callbackmechnismus hinzufüge. Also als einziges Merkmal für und wider Library oder Framework finde ich IoC nicht geeignet.


Ja, wohl etwas zu Absolut dargestellt von mir, der engl. Wikipedia Artikel defniert noch 3 weitere Eigenschaften eines Frameworks.
Software framework - Wikipedia, the free encyclopedia


> ...
> Software frameworks have these distinguishing features that separate them from libraries or normal user applications:
> 
> 1. inversion of control - In a framework, unlike in libraries or normal user applications, the overall program's flow of control is not dictated by the caller, but by the framework.[1]
> ...


Aber jedes Framework bietet IoC, dabei bleibe ich (erstmal)


----------



## imho1001 (5. Okt 2010)

Aha. Also:
In Soviet Russia JPanel calls _you_. Oder wat?!


----------



## tfa (5. Okt 2010)

Was hat JPanel mit Frameworks zu tun? Sag nicht, Swing wäre eins.


----------



## imho1001 (5. Okt 2010)

Und die "Kategorie:GUI-Framework" (die auch Swing benennt) in Wikipedia ist wohl Zufall oder was?


----------



## Gast2 (5. Okt 2010)

imho1001 hat gesagt.:


> Und die "Kategorie:GUI-Framework" (die auch Swing benennt) in Wikipedia ist wohl Zufall oder was?



Swing ist eine Grafiklib ein Toolkit genauso wie SWT... Beides sind keine Frameworks...


----------



## maki (5. Okt 2010)

Klar sind Swing & SWT Frameworks, denkt einfach nur mal an die Listener & sonstige Anonymen Klassen die vom Framework bei Events aufgerufen werden.
Das war übrigens Fowlers (klassisches) Beispiel das ich nciht mehr finde.
Der Vergleich war zu früheren konsolenbasierten Programmen, in dem man von der Ausgabe, refresh & Verarbeitung der Eingaben alles selber machen musste.

Wenn man aber die letzten 10+ Jahre keine Konsolenanwendungen mehr geschrieben hat, fällt einem das wohl ncht mehr so krass auf 

Nachtrag:
Hab was gefunden unter dem IoC Artikel


> The question, is what aspect of control are they inverting? When I first ran into inversion of control, it was in the main control of a user interface. Early user interfaces were controlled by the application program. You would have a sequence of commands like "Enter name", "enter address"; your program would drive the prompts and pick up a response to each one. With graphical (or even screen based) UIs the UI framework would contain this main loop and your program instead provided event handlers for the various fields on the screen. The main control of the program was inverted, moved away from you to the framework.


----------



## Gast2 (5. Okt 2010)

maki hat gesagt.:


> Klar sind Swing & SWT Frameworks, denkt einfach nur mal an die Listener & sonstige Anonymen Klassen die vom Framework bei Events aufgerufen werden.



Dann wäre wohl der Unterschied zwischen Toolkit und GUI Framework interessant ...

Da auf den beiden wiki Seiten nur von Toolkits und Grafiklibs aber nicht von Frameworks die Rede ist.
Swing (Java) ? Wikipedia
Standard Widget Toolkit ? Wikipedia


----------



## maki (5. Okt 2010)

SirWayne hat gesagt.:


> Dann wäre wohl der Unterschied zwischen Toolkit und GUI Framework interessant ...
> 
> Da auf den beiden wiki Seiten nur von Toolkits und Grafiklibs aber nicht von Frameworks die Rede ist.
> Swing (Java) ? Wikipedia
> Standard Widget Toolkit ? Wikipedia


Sieh dir die englischen Artikel an, da kommt auch Framework vor, aber abgesehen davon ist WikiPedia keine "akademische" Quelle 

"ToolKit" ist wohl eine abgeschwächte Form von Framework aber mehr als eine Lib, was auch immer das heissen mag *g*


----------



## tfa (5. Okt 2010)

Wo hilft mir denn das Swing-Framework beim Injizieren von Abhängigkeiten mittels IoC?


----------



## Gast2 (5. Okt 2010)

Swing hab ich mir jetzt nich durchgelesen. Aber SWT hört sich für mich immer noch mehr als GrafikLib an. 



> SWT exposes developers to more low level details than Swing. This is because SWT is technically just a layer over native library provided GUI functionality – that said, exposing the programmer to native GUI code seems to be part of the design intent of SWT: "Its goal is not to provide a rich user-interface design framework but rather the thinnest possible user-interface API that can be implemented uniformly on the largest possible set of platforms while still providing sufficient functionality to build rich graphical user interface (GUI) applications."


----------



## ARadauer (5. Okt 2010)

haben wir nicht schon mal 20 Seiten darüber gestritten was ein Server ist... ist doch Ansichtsache!


----------



## maki (5. Okt 2010)

tfa hat gesagt.:


> Wo hilft mir denn das Swing-Framework beim Injizieren von Abhängigkeiten mittels IoC?


IoC hat gar nix mit Dependency Injection zu tun 
Umgekehrt ist eine Dependency Injection _Framework_ aber IoC, darum ging es in meinem allerersten lLink in diesem Thread, Fowler erklärt die Begriffe/Unterschiede/Zusammenhänge.
Dependency Injection geht ja auch ohne Framework (Setter- und Methodparameter Injection).

Spring hat eben einfach den falschen Begriff für die ihre Lib verwendet, DI wäre "richtiger" (weil  genauer) gewesen.



SirWayne hat gesagt.:


> Swing hab ich mir jetzt nich durchgelesen. Aber SWT hört sich für mich immer noch mehr als GrafikLib an.


Wenn man sich die Definition von Framework durchliest, ist es ein Framework, glasklar 



ARadauer hat gesagt.:


> haben wir nicht schon mal 20 Seiten darüber gestritten was ein Server ist... ist doch Ansichtsache!


Naja, man kann auch darüber streiten was ein Programm ist... es gibt immer Einzelmeinungen, vor allem hat die IT aber ein generelles Problem was Terminologie betrifft, Marketingschlampen sorgen schon dafür dass neue Buzzwords Uralte Konzepte verschleiern.
Trotzdem finde ich dass "alles Ansichtsache" das Problem nicht vereinfacht, sondernd as Gegenteil erreicht.


----------



## tfa (5. Okt 2010)

@maki:
Dann hatte ich dein erstes Posting falsch interpretiert. Der Framework-Begriff ist dann aber trotzdem ziemlich weit gefasst. Demnach sind commons-collection und java.util auch welche.


----------



## Sonecc (5. Okt 2010)

maki hat gesagt.:


> Wenn man sich die Definition von Framework durchliest, ist es ein Framework, glasklar



Meine Rede... Hab ich in nem anderen Thema vor kurzem schon erläutern wollen.

Btw. Warum werden Zitate nicht verschachtelt? Wenn ich wen zitiere, der wen zitiert hat, geht das zitat verloren von dem der zitiert wurde. (geiler satz :rtfm


----------



## Gast2 (5. Okt 2010)

maki hat gesagt.:


> Wenn man sich die Definition von Framework durchliest, ist es ein Framework, glasklar



Naja glasklar finde ich es jetzt nicht ...

Es gibt ja extra ein Swing Apllication Framework
https://appframework.dev.java.net/


----------



## maki (5. Okt 2010)

tfa hat gesagt.:


> @maki:
> Dann hatte ich dein erstes Posting falsch interpretiert. Der Framework-Begriff ist dann aber trotzdem ziemlich weit gefasst. Demnach sind commons-collection und java.util auch welche.


Ja, "Framework" ist auch ziemlich weit gefasst, es heisst ja auch das "Java Collections Framework".
IMHO unterscheidet eben das IoC (und anch verbreiteter Meinung auch andere Kriterien) "Framework" von "Lib/API", und letzteres ist wirklich "alles" wenn man so will.

Fowler geht soweit das er sogar dem "Template Pattern" IoC unterstellt


----------



## Gast2 (5. Okt 2010)

Gut dann kann man fast soweit gehen, dass jede lib die eine Schnittstelle anbietet ein Framework ist.


----------



## tfa (5. Okt 2010)

SirWayne hat gesagt.:


> Gut dann kann man fast soweit gehen, dass jede lib die eine Schnittstelle anbietet ein Framework ist.



Bis auf die, die nur einfache Utility-Methoden anbieten wie commons-lang.


----------



## Atze (5. Okt 2010)

SirWayne hat gesagt.:


> Gut dann kann man fast soweit gehen, dass jede lib die eine Schnittstelle anbietet ein Framework ist.



ich habs so verstanden, das libs/apis passiv sind (funktionen bieten, in welcher form auch immer) und frameworks aktiv! nicht jede lib, in der ich ein paar klassen zusammengefasst habe, ist ja gleich ein framework, oder?


----------



## Gast2 (5. Okt 2010)

tfa hat gesagt.:


> Bis auf die, die nur einfache Utility-Methoden anbieten wie commons-lang.



Util Methoden sind ja auch keine Schnittstellen. Die benutzt du einfach und gut ist. 
Eine Schnittstelle anbietet heißt für mich, ich mache eine Implentation und das "Framework" benutzt diese.
z.B. die Schnittstelle List... Kannst deine eigene Liste machen die den größten Schwachsinn macht, aber das Collection Framework verwendet diese.

Das heißt jede lib, die eine Art Listener oder Schnittstellen Konzept anbietet ist ein Framework, da das Framework deine eigenen Implentationen benutzt...


----------



## FArt (5. Okt 2010)

ARadauer hat gesagt.:


> haben wir nicht schon mal 20 Seiten darüber gestritten was ein Server ist... ist doch Ansichtsache!



Hier wird nicht gestritten sondern diskutiert.

Ich bin ganz froh, dass in diesem Forum endlich mal wieder nicht nur das alte Fragen-Antwort-Spiel gespielt wird.

Dieser Thread ist mit Sicherheit für viele interessanter und lehrreicher als die Lösung zu einem von tausend warum-geht-mein-programm-nicht Threads.

Die hier vorgetragenen Meinungen haben durchaus alle ihre Berechtigung und sind es wert diskutiert zu werden. Auch die Meinung von maki, der mit Martin Fowler verwandt sein muss ;-)

Ich zumindest habe heute ausgehend von diesem Thread und dem Thema ein paar interessante Sachen im Netz gelesen...


----------



## Atze (5. Okt 2010)

SirWayne hat gesagt.:


> Das heißt jede lib, die eine Art Listener oder Schnittstellen Konzept anbietet ist ein Framework, da das Framework deine eigenen Implentationen benutzt...



ja, es BENUTZT, also aktiv -> framework. passive libs sind einfach nur ansammlungen von klassen, imho.


----------



## Jango (5. Okt 2010)

FArt hat gesagt.:


> Auch die Meinung von maki, der mit Martin Fowler verwandt sein muss ;-)



:lol:

Ja, weiter bitte...

Aber ich will mal net so sein:

Ein Framework beinhaltet Feature, die für die Programmierung notwendig sind. 
Das .NET Framework beinhaltet so ziemlich alles - ein Framework für viele Dinge.
Java braucht viele viele Frameworks, um auf den selben Stand zu kommen.

Frage beantwortet?


----------



## Gast2 (5. Okt 2010)

Atze hat gesagt.:


> ja, es BENUTZT, also aktiv -> framework. passive libs sind einfach nur ansammlungen von klassen, imho.



hab ich dagegen was gesagt Oo...


----------



## Gast2 (5. Okt 2010)

Jango hat gesagt.:


> Das .NET Framework beinhaltet so ziemlich alles - ein Framework für viele Dinge.
> 
> Frage beantwortet?



Aber auch nur ziemlich...


----------



## Atze (5. Okt 2010)

SirWayne hat gesagt.:


> hab ich dagegen was gesagt Oo...



ich wollte dich ja auch nur bestätigen!  war kein gegenargument!


----------



## Gast2 (5. Okt 2010)

Aso ok^^...


----------



## BlubBlub (7. Okt 2010)

danke für die zahlreichen antworten


----------

