ex10

Toobee
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 225
Registriert: 7. Apr 2011 12:58

ex10

Beitrag von Toobee »

Hi

Aufgabe 2
UML-Diagramme von den (Zwischen)Schritten sind nicht erfordert, oder? Ich frag weil bei 2.1 ein Ergebnis als Liste erwartet wird, aber 2.2-2.4 im Grund nur im Code stattfinden?!

Bei 2.1,
mit "stabil" ist was genau gemeint?

Dann bei 2.4, der letzte Satz:
"Sollte Sie Fragen haben, können Sie " - ja, kann man was :-)

Dann noch die Frist: "Alle Aufgaben sind bis Montag, den 25.01.2010, 23:59 Uhr" - Naja, wir hatten ja eine faire Chance ;-)

marcel_b
Nerd
Nerd
Beiträge: 600
Registriert: 31. Okt 2006 17:04
Kontaktdaten:

Re: ex10

Beitrag von marcel_b »

> Zu Aufgabe 2 "UML Diagramme nicht gefordert"
Steht nicht in Aufgabenstellung. Also nein. Hier gehts um eine handvoll Zeilen Quellcode. Da ist ein UML Diagramm wenig hilfreich.

> Was ist "stabil"?
siehe "Frozen Spots" in einem Framework.

> "Sollte Sie Fragen haben, können Sie ..."
Jetzt nicht mehr :) Es gelten die üblichen "Vereinbarungen": Forum, Tutorensprechstunden.

> die Frist ...
wurde "großzügig" auf den üblichen Termin festgesetzt..

Thx

Toobee
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 225
Registriert: 7. Apr 2011 12:58

Re: ex10

Beitrag von Toobee »

Also mit stabil sollen die Klassen benannt werden, die wir wohl nicht ändern werden müssen? Während die Variabilitätsklassen die sind, wo wir für die Injektion den Code ändern müssen?!

Im Ordner "Builder" ist ein Sourcefile wo drin steht, dass man es nicht anfassen soll - wozu ist es dann da, oder was soll uns das sagen?

marcel_b
Nerd
Nerd
Beiträge: 600
Registriert: 31. Okt 2006 17:04
Kontaktdaten:

Re: ex10

Beitrag von marcel_b »

> Also mit stabil sollen die Klassen benannt werden, die wir wohl nicht ändern werden müssen?
Klassen für die es wohl keine Erweiterungen gibt.

> File im Builder Verzeichnis:
Ihr dürft hier alles anfassen. Die Zeile hat dort nicht viel verloren und wurde gelöscht.

Toobee
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 225
Registriert: 7. Apr 2011 12:58

Re: ex10

Beitrag von Toobee »

Ok.

Bei der 2.1 soll ja low/high-level Zuordnung gemacht werden. Eine Klasse muss doch prinzipell high oder low level sein, oder? High ist, wenn die Klasse im Grunde nur mit abstrakten Begriffen arbeiten, also keinen direkten Contextbezug hat. Low-level, wenn sie context/domänen spezifische Begriffe nutzt.
Demnach dürfte es ja keine Klassen geben, die weder high noch low sind?!

Als was sind Klassen zu definieren, die im Grunde high-level sind, durch schlechte Benennung wie low-level aussehen und zudem redundant vorhanden sind? Imo sind das immer noch high-levels?

marcel_b
Nerd
Nerd
Beiträge: 600
Registriert: 31. Okt 2006 17:04
Kontaktdaten:

Re: ex10

Beitrag von marcel_b »

Andere Meinungen? Was sagt dein Teamkollege dazu?

Toobee
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 225
Registriert: 7. Apr 2011 12:58

Re: ex10

Beitrag von Toobee »

Hi,

Aufgabe 2.4 soll unabhängig von 2.3 gemacht werden, oder?

Es geht einfach nur darum, dass man die entzerrten Klassen aus 2.2 jetzt mit Guice verwendet, um einen Emailer zu erstellen?

PaddyG
Mausschubser
Mausschubser
Beiträge: 50
Registriert: 9. Okt 2009 10:29

RE: ex10

Beitrag von PaddyG »

Hi,

wenn wir schon so kleinlich sind, dann bitte auch zu 100%:

1. Der Link zum Video führt zu einem 404 Error, wahrsch. sind die "---" im Link nicht beabsichtigt.

2. ... die erste Hälfte des Demovideos... (ich hab zumindest nur eins gefunden ;))

3. ... Demovideos auf http://code.google.com/p/google-­‐guice/ an.

4. Der Begriff „dependent-­‐on Components“ taucht in den Folien zur Übung 1 gar nicht auf.

Lass mich raten, war spät am Dienstag Abend, Marcel? :mrgreen:

Gruß

marcel_b
Nerd
Nerd
Beiträge: 600
Registriert: 31. Okt 2006 17:04
Kontaktdaten:

Re: ex10

Beitrag von marcel_b »

Jungs, ihr macht mich fertig... :)

zu 1,2,3:
Der Link ist beim Export nach PDF in der Tat kaputt gegangen. Ich vertraue hier auf eure Kombinationsgabe, dass ihr das Video auf der Google Guice Startseite trotzdem findet. Falls es hierbei zu größeren Problemen kommen sollte, kommt vorbei - ich führe eure Maus gerne auf die richtigen Seiten... Für alle anderen noch mal die URL http://code.google.com/p/google-guice/

Zu 4:
"DOC (dependent-on- component)" auf Folie 32. (https://cage.st.informatik.tu-darmstadt ... esting.pdf)

marcel_b
Nerd
Nerd
Beiträge: 600
Registriert: 31. Okt 2006 17:04
Kontaktdaten:

Re: ex10

Beitrag von marcel_b »

Toobee hat geschrieben:Hi,

Aufgabe 2.4 soll unabhängig von 2.3 gemacht werden, oder?

Es geht einfach nur darum, dass man die entzerrten Klassen aus 2.2 jetzt mit Guice verwendet, um einen Emailer zu erstellen?
Wenn du es smart machst, sind alle dinge wiederzuverwenden bis auf die Klassen, die das System zusammen stöpseln... Also: Ja.

PaddyG
Mausschubser
Mausschubser
Beiträge: 50
Registriert: 9. Okt 2009 10:29

Re: ex10

Beitrag von PaddyG »

Zu 4:
Womit wir bei welcher Übung wären? (Tipp: Steht im Dateinamen ;))

Anyway, 2 Fragen zu den Guice Slides von Google, die sind mir durch das Video nicht wirklich klar geworden:

1.
Auf Folie 24 sind 2 binds (Tweeter.class, Shortener.class). Wenn ich das richtig verstanden habe, wird also jeder Injector, der mit diesem Module konfiguriert wurde, die Abhängigkeiten von diesen beiden Klassen zu SmsTweeter.class und TinyUrlShortener.class auflösen, egal an welcher Stelle im Code (Im Bsp.: der Constructor von Tweetclient) diese beiden Klassen benötigt werden, solange dort das @Inject vorhanden ist?

Wenn ja, dann stellen sich mir 2 Fragen:

Was passiert, wenn ich z.B. Tweeter.class mit 2 konkreten implementierungen "überlade", also zweimal bind verwende?

Wozu wird dann auf Folie 31 bind(TweetClient.class); benötigt? Ist das nicht ein leichter Overkill? Was verändert sich dadurch konkret im Verhalten vom TweeterClient

2.
Aufrufe wie bind(Integer.class).annotatedWith(Port.class).toInstance(8080); bewirken also, dass jede Abhängigkeit von Integer.class zu Port.class (erbt dementsprechend von Integer) mit der 8080 als Wert für den Konstruktor aufgelöst werden? Ist das nicht ziemlich umständlich, Port.class macht für mich irgendwie wenig Sinn, eine eigene Klasse für genau einen Wert? Gibt es eine Möglichkeit, das einfacher zu machen?

Allgemein geht Guice (bzw. DI) wohl ziemlich in Richtung AOP, nur irgendwie in eine OOP Form gezwängt.
Mächtig ist das auf jeden Fall, wirklich Smart sieht das mMn. mit den ganzen .class Anweisungen aber irgendwie nicht aus.

Gruß
Zuletzt geändert von PaddyG am 4. Jul 2011 14:15, insgesamt 2-mal geändert.

Toobee
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 225
Registriert: 7. Apr 2011 12:58

Re: ex10

Beitrag von Toobee »

Wegen dem differenzierten injecten bin auf das hier gestoßen, ist nur copy/paste info, habs nicht ausprobiert:

Du kannst mit @Named("1") Klassen annotieren und dann so etwas machen:

Code: Alles auswählen

bind(x.class).annotatedWith(Names.named("1").to(x1_imp.class);
bind(x.class).annotatedWith(Names.named("2").to(x2_imp.class);
An der Klasse die Injected werden soll, sieth das dann so aus:

Code: Alles auswählen

class InjectTarget{
  @Inject
  public InjectTarget(@Named("1") x varName) {
    ...
  }
}

marcel_b
Nerd
Nerd
Beiträge: 600
Registriert: 31. Okt 2006 17:04
Kontaktdaten:

Re: ex10

Beitrag von marcel_b »

[quote="PaddyG"]
> Zu 4:
>1.
>Auf Folie 24 sind 2 binds (Tweeter.class, Shortener.class). Wenn ich das richtig verstanden habe, wird also jeder Injector, der mit diesem Module konfiguriert wurde,
> die Abhängigkeiten von diesen beiden Klassen zu SmsTweeter.class und TinyUrlShortener.class auflösen, egal an welcher Stelle im Code (Im Bsp.: der
> Constructor >von Tweetclient) diese beiden Klassen benötigt werden, solange dort das @Inject vorhanden ist?

Ja.

> Wenn ja, dann stellen sich mir 2 Fragen:
> Was passiert, wenn ich z.B. Tweeter.class mit 2 konkreten implementierungen "überlade", also zweimal bind verwende?

Du hast es bestimmt schon ausprobiert, oder? Wenn es zwei verschiedene Implementierungen sind, gibt es eine Exception das der Type schon gebunden wurde. Es gibt spezielle Möglichkeiten frühere Bindungen zu überschreiben. Aber dafür müsste ich nachschauen.

> Wozu wird dann auf Folie 31 bind(TweetClient.class); benötigt? Ist das nicht ein leichter Overkill? Was verändert sich dadurch konkret im Verhalten vom TweeterClient

Auch das hast du bestimmt schon ausprobiert, oder? Aus den Bauch heraus nichts. Es nimmt nur eine Verständnisfalle raus - scheinbar um dafür einen neue einzubauen :)

> Aufrufe wie bind(Integer.class).annotatedWith(Port.class).toInstance(8080); bewirken also, dass jede Abhängigkeit von Integer.class zu Port.class (erbt
> dementsprechend von Integer) mit der 8080 als Wert für den Konstruktor aufgelöst werden? Ist das nicht ziemlich umständlich, Port.class macht für mich irgendwie
> wenig Sinn, eine eigene Klasse für genau einen Wert? Gibt es eine Möglichkeit, das einfacher zu machen?

Hast du schon mit Named bzw. generell mit Annotations gearbeitet? Port wäre eine Annotation (kein Integer) und für alle Integers, die den Port repräsentieren wäre der entsprechende Paramter mit @Port annotiert. Oder siehe den Beitrag unten.

> Allgemein geht Guice (bzw. DI) wohl ziemlich in Richtung AOP, nur irgendwie in eine OOP Form gezwängt.

Das steckt noch kein AOP drinnen. Also wirklich noch gar keins... Es hat IMHO nicht wirklich was mit den Konzepten von AOP zu tun. Es ist einfach nur ein cleveres Werkzeug für Software Engineers.

> Mächtig ist das auf jeden Fall, wirklich Smart sieht das mMn. mit den ganzen .class Anweisungen aber irgendwie nicht aus.
Die Alternative sind Textdateien und Strings ohne Semantic bzw. Struktur. Das smarte an Guice ist auch das Konfigurationssystem. Fehler in der Konfiguration können direkt vom Compiler erkannt und dem Entwickler angezeigt werden noch bevor der Code ausgeführt wird. Das ist eigentlich sehr elegant :)

CallForSanity
Windoof-User
Windoof-User
Beiträge: 27
Registriert: 17. Okt 2007 20:45

Re: ex10

Beitrag von CallForSanity »

Das steckt noch kein AOP drinnen. Also wirklich noch gar keins... Es hat IMHO nicht wirklich was mit den Konzepten von AOP zu tun. Es ist einfach nur ein cleveres Werkzeug für Software Engineers.
Nein gar nicht. Google hat sich wohl geirrt.
http://code.google.com/p/google-guice/wiki/AOP

marcel_b
Nerd
Nerd
Beiträge: 600
Registriert: 31. Okt 2006 17:04
Kontaktdaten:

Re: ex10

Beitrag von marcel_b »

Um das vielleicht etwas klarer zu machen:

AOP ist eine optionale Komponenten von Guice. Für eine Liste von Funktionen, die nur mittels AOP zur Verfügung stehen (bzw. was alles geht ohne AOP) schaut einfach hier nach: http://code.google.com/p/google-guice/wiki/OptionalAOP

Kurz zusammengefasst: Method Interceptors gehen nur mit AOP. Zusätzlich werden noch ein paar Convenience-Funktionen angeboten wie Zeilen für Fehlermeldungen etc. Das Basissystem von Guice läuft jedoch ohne AOP.

Mein Punkt: Bitte setzt DI nicht unmittelbar mit AOP gleich. Das ihr AOP dafür nehmen könnt, ist unumstritten. Aber notwendig ist es nicht.

Viele Grüße
Marcel

Antworten

Zurück zu „Archiv“