Krautkanal.com

Veröffentlicht am 2015-05-02 18:11:0 in /prog/

/prog/ 7046: Was macht man bei Java wenn im Gang Of Four Buch Mixins...

horaciobella Avatar
horaciobella:#7046

Was macht man bei Java wenn im Gang Of Four Buch Mixins erwähnt werden? Also ohne die Mehrfachvererbung

bighanddesign Avatar
bighanddesign:#7047

>>7046
Interfaces nutzen.

posterjob Avatar
posterjob:#7049

Wo werden in GoF denn Mixins erwähnt?

mr_arcadio Avatar
mr_arcadio:#7050

>>7049
Laut Index auf Seite 16, 16c 361.
35. Druck von 2007

Extra für dich nachgeschlagen.

krdesigndotit Avatar
krdesigndotit:#7051

>>7050
Ok, da hätte Bernd auch selbst drauf kommen können. Allerdings wird auf beiden Seiten kein bestimmtes Pattern behandelt. Deswegen nochmals an OP die Frage, für was genau er denn Mixins verwenden will.

hota_v Avatar
hota_v:#7052

Static Imports wären in manchen Fällen noch eine Idee.

Das Problem mit Interfaces ist natürlich, dass man eben nur das Interface bekommt und nicht gleich schon Programmlogik mitgeliefert. Wie nah sich die beiden Konzepte aber letztlich sind, sieht man schön daran, dass in JRuby das Implementieren von Java-Interfaces syntaktisch genauso funktioniert wie das Inkludieren von Modulen (=Mixins).

marciotoledo Avatar
marciotoledo:#7053

>>7052
>nicht gleich schon Programmlogik mitgeliefert
Sehe das Problem nicht. Mann kann die Logik ja einfach aus den Eltern nehmen. Bsp:


class SomeObject implements IMixin1, IMixin2 {
Mixin1 m1 = new Mixin1();
Mixin2 m2 = new Mixin2();

void funtion1(){ m1.funtion1(); }
void funtion2(){ m1.function2(); }
void functionXYZ(){ m2.functionXYZ(); }
}


Wenn man an private Funktionalität möchte und die Innereien der Mixins manipulieren möchte, dann sollte man sich lieber Überlegen ob man da nicht gerade einen Wartungsalptraum produziert.

anaami Avatar
anaami:#7054

>>7053
Ah ah ah, bei Vererbung aufpassen: Wartungsalptraum ist vorprogrammiert wenn Vererbung verwendet wird um Code zu sparen. Korrekterweise verwendet man extends bei eines "is a" Relation. Für alles andere gibt es Interfaces. Mit Java 8 können diese sogar eine Defaultimplementierung mitbekommen. Interfaces vererben generell nichts. Man soll sie sich eher vorstellen wie einen Club, für den man bestimmte Anforderungen erfüllen muss - und dann wird man ohne Betrachtung der Person reingelassen. void funtion2(){ m1.function2(); } wird so auch nicht funktionieren, da eine überschreibende Funktion die eventuelle default überschreibt und ein Interface per se keine Implementierung hat.

sgaurav_baghel Avatar
sgaurav_baghel:#7056

>>7046
Den vierer gangbang vergessen. Auch schon 20 Jahre alt

salleedesign Avatar
salleedesign:#7057

>>7056
Nur weil etwas alt ist wird es nicht automatisch schlecht. Grundlagen sind nun mal Grundlagen.

polarity Avatar
polarity:#7080

>wie werden Mixins in einer Programmiersprache ohne Mehrfachvererbung benutzt?

Vielleicht einfach gar nicht? In Java 8 gibt es Interfaces mit Default-Methoden, vielleicht ist da ja ein möglicher Ansatz.

Ansonsten kann man in JRuby Mixins und meines Erachtens in Scala und ähnlichem Traits benutzen.

kurafire Avatar
kurafire:#7081

Mehrfachvererbung ist aus gutem Grund ausgestorben. Diamantstrukturen sind nicht nur für den Compiler weitgehend unlösbar, auch für das Gehirn sind die nicht gut.

Wenn du feststellst, dass dir Interfaces nicht genügen und du trotzdem permanent Codeduplikation hast, dann solltest du eventuell dein Design nochmal überdenken. Oft lässt sich durch ordentliche Komposition und Delegation viel umschichten.

>>7057
Sicher ist alt nicht schlecht. Allerdings haben sich gewisse Herangehensweisen als nicht unbedingt vorteilhaft herausgestellt. Denk dran, Programmierung ist eine recht junge Kunst.

samihah Avatar
samihah:#7093

>>7081
>Wenn du feststellst, dass dir Interfaces nicht genügen und du trotzdem permanent Codeduplikation hast, dann solltest du eventuell dein Design nochmal überdenken. Oft lässt sich durch ordentliche Komposition und Delegation viel umschichten.
Dies.
Bau dir eine Komponente und lass sie dir injizieren von Spring oder sonstwas.. Problem gelöst.

seanwashington Avatar
seanwashington:#7094

So nehme er eine Komposition. Teilweise ist es sogar genau das was man will wenn man nach einer Mehrfachvererbung strebt. Nur schöner.

safrankov Avatar
safrankov:#7103

Halt dich von dem Quatsch fern. "Gang of Four" und so sind Leute, die lieber Diagramme malen und Stundenlang auf Patterns wichsen als zu programmieren.

Man kann ihnen zugute halten, dass sie dem was jeder vernünftige Programmierer tut Namen geben kann.
Aber auf der anderen Seite wollen sie dann lieber Interfaces für Abstrakte Klassen für Mehrfachvererbung mit bla bla bla bauen wo keiner mehr durchblickt was da genau passiert, nur weil es irgendwelchen Designrichtlinien entspricht.

Neuste Fäden in diesem Brett: