Author Topic: GL der Inf II - Übung WW01/WW02  (Read 8238 times)

Daniel L

  • Newbie
  • *
  • Posts: 19
  • Karma: +0/-0
    • View Profile
GL der Inf II - Übung WW01/WW02
« on: June 03, 2010, 01:21:50 pm »
Hallo, hier wie versprochen die Dokumente:

collections_map.zip-> Beispiele für das Erstellen,Befüllen und durchiterieren von Lists,Sets und Maps.(in eclipse: file->import->general->archive file)

entwurf_av.png-> das Klassendiagram der 4.Übung. Dieses mal sind alle Methodenspezifikationen sichtbar. Habe mir aber keine Mühe gemacht, die Assoziationen ordentlich zu machen :whistling:

übersicht_collection_map.jpg-> wie der name schon sagt, eine einfach Übersicht


Wenn es sonstige Fragen zur Übung gibt,können die hier auch rein.(Oder Wünsche was nochmal wiederholt/besprochen werden soll)

tobi0123

  • Full Member
  • ***
  • Posts: 146
  • Karma: +0/-0
    • View Profile
GL der Inf II - Übung WW01/WW02
« Reply #1 on: July 26, 2010, 04:40:55 pm »
@ Daniel
Hey,
ich hab mal die Hausverwaltung aus der letzten Übung in Eclipse erstellt.
Hoffe, dass da nu alles drin ist. :whistling:
Würd' mich freuen, wenn noch mal eine Rückmeldung kommt.


Daniel L

  • Newbie
  • *
  • Posts: 19
  • Karma: +0/-0
    • View Profile
GL der Inf II - Übung WW01/WW02
« Reply #2 on: July 27, 2010, 06:51:36 pm »
Hallo Tobi,

ich habe die Lösung jetzt mal angeschaut und damit würdest du in der Klausur schon einige Punkte bekommen.;)

Jetzt aber zu den Dingen die mir noch aufgefallen sind:

Klasse Mieter:
Es wäre eventuell besser,dass man dem Mieter noch eine Wohnung zuweist. Die Assoziation sagt dies ja auch aus.

In Mehrfamilienhaus:
Ich denke nur ein Schreibfehler,aber dein Attribut heißt whngn anstatt whngen.

Hausverwaltung:
So wie du die Miete von allen Mietverträgen ist es natürlich auch möglich. In dem Fall müsste nur die Sinnfrage der Methode mietberechnung() in den anderen Klassen gestellt werden,wenn du diese nicht aufrufst ;) Versuche also mal über die Häuser die Miete zu berechnen und nicht über die Mietverträge.

Mietvertrag:
Sollen in der Map "miet" wirklich als Values String-Werte gespeichert werden?
Die getMiete() und getNummer() sind in dem Fall zuviel. Jedenfalls steht in der Aufgabenstellung,dass nur in der Klasse Wohnung Getter/Setter implementiert werden müssen. (Falls das Programm laufen soll,müssen diese natürlich vorhanden sein,aber eben nicht in DIESER Klausur)

Ich hoffe ich habe soweit nichts übersehen.
Aber es sieht schon recht gut aus:)


P.S.: Hier nocheinmal die Beschreibung von der "Dreiecksbeziehung" zwischen Hausverwaltung,Mietvertrag und Mieter.
http://de.wikipedia.org/wiki/Assoziationsklasse

tobi0123

  • Full Member
  • ***
  • Posts: 146
  • Karma: +0/-0
    • View Profile
GL der Inf II - Übung WW01/WW02
« Reply #3 on: July 28, 2010, 12:07:13 pm »
Hey Daniel,
danke für die schnelle Antwort. Hab noch mal über deine Anmerkungen nachgedacht.

1. Der Klasse Mieter ein Attribut Wohnung zuweisen, macht natürlich Sinn. Hab mich nur gewundert, warum in der Klasse Wohnung der Attribut Mieter vorhanden ist. Ich meine, bei allen anderen Assoziationen und Aggregationen sind die Attribute gleich an den Verbindungslinien vermerkt.

2. **fehlerteufel**:nudelholz:

3. Methode mietberechnung() in Klasse Hausverwaltung hab ich nun anders implementiert.
Zur Methode mietberechnung() für Mehrfamilienhaus und Hausverwaltung noch eine Frage: Ich muss immer den Umweg über die ketSet() gehen, also mir aus den Keys der Map ein Set mit allen Keys erstellen lassen, und das Set dann mit einer for-Schleife einzeln durchgehe??
Folgendes ist nämlich nicht möglich (Eclipse streikt da bei whngen):

public Integer mietberechnung(){
        Integer sum = 0;
        for (Wohnung w: whngen){
            sum = sum + w.getMiete();
        }
    }

4. Nein, Mieter als Values wären wohl besser. Also private Map miet.
Und die Sache mit der Klasse Mietvertrag als Assoziationsklasse würd' ich so lösen, dass die Klasse Hausverwaltung das Attribut private Map mietvertraege bekommt, und die Klasse Mietvertrag das schon genannte private Map miet.
Damit kennt die Hausverwaltung all ihre Mietverträge, jeder Mietvertrag kennt seine Mieter, und die Hausverwaltung kennt damit (über die Mietverträge) die Mieter. Ich würde der Klasse Mieter auch noch ein Attribut Mietvertrag zuweisen und der Klasse Mietvertrag ein Attribut Hausverwaltung, denn ich versteh das im Beispiel bei Wiki http://de.wikipedia.org/wiki/Assoziationsklasse so, dass das alles ungerichtete Assoziationen sind. Ich bin mir aber nicht sicher, ob das programmiertechnisch sinnvoll ist!?

Also, ich denke/hoffe, ich habe bis auf die Einbeziehug diese Assoziationsklasse soweit alles einigermaßen verstanden :happy:


Daniel L

  • Newbie
  • *
  • Posts: 19
  • Karma: +0/-0
    • View Profile
GL der Inf II - Übung WW01/WW02
« Reply #4 on: July 28, 2010, 12:41:51 pm »
Quote from: tobi0123


1. Der Klasse Mieter ein Attribut Wohnung zuweisen, macht natürlich Sinn. Hab mich nur gewundert, warum in der Klasse Wohnung der Attribut Mieter vorhanden ist. Ich meine, bei allen anderen Assoziationen und Aggregationen sind die Attribute gleich an den Verbindungslinien vermerkt.

So ganz genau kann ich dir das auch nicht sagen. Denke aber,dass an der Beziehung 0..1 bei Mieter liegt. Und dann musst du dir auch nicht den Kopf zerbrechen,ob du den Mieter mit in die Klasse reinnimmst.


Quote
Frage: Ich muss immer den Umweg über die ketSet() gehen, also mir aus den Keys der Map ein Set mit allen Keys erstellen lassen, und das Set dann mit einer for-Schleife einzeln durchgehe??
Es geht auch anders. Du kannst ja mal in der Java Api zur Map reinschauen. Vielleicht findest du ja eine Möglichkeit dir anstatt die Keys die Values zurückgeben zu lassen...
http://java.sun.com/javase/6/docs/api/java/util/Map.html

Quote
Folgendes ist nämlich nicht möglich (Eclipse streikt da bei whngen):
public Integer mietberechnung(){
        Integer sum = 0;
        for (Wohnung w: whngen){
            sum = sum + w.getMiete();
        }
    }
Ja,das kann ja auch nicht wirklich klappen, da eine Map eine andere Struktur als Listen und Sets (Collections) besitzt. Mit w.getMiete() würdest du ja auf 2 Elemente zugreifen wollen. Zum einen auf den Key zum anderen auf den Value. Und woher soll der Compiler wissen,welcher von beiden jetzt diese Methode hat?

Quote

Also, ich denke/hoffe, ich habe bis auf die Einbeziehug diese Assoziationsklasse soweit alles einigermaßen verstanden :happy:
Ich glaube das hattest du doch schon richtig gemacht. Den Link hatte ich eigentlich auch nur als Erinnerungsstütze für diejenigen eingefügt, die hier mitlesen und noch nicht wussten was das ist ;)


P.S.: Genau so wie du es jetzt hast soll die mietberechnung() in der Hausverwaltung funktionieren.

tobi0123

  • Full Member
  • ***
  • Posts: 146
  • Karma: +0/-0
    • View Profile
GL der Inf II - Übung WW01/WW02
« Reply #5 on: July 28, 2010, 04:49:27 pm »
Habe doch tatsächlich noch eine Möglichkeit gefunden, in der for-Schleife direkt durch die Values zu gehen :), z.B. für mietberechnung() in Hausverwaltung:

public Integer mietberechnung(){
        Integer sum = 0;
        for (Haus h: haeuser.values()){
            sum = sum + h.mietberechnung();
        }
        return sum;
}

Nur so der Vollständigkeit halber...


tiefenbass

  • Hero Member
  • *****
  • Posts: 1876
  • Karma: +0/-0
    • View Profile
    • http://www.fjp-media.de
GL der Inf II - Übung WW01/WW02
« Reply #6 on: July 29, 2010, 01:51:56 pm »
Vor dem Aufruf der Methode [FONT="Courier New"]mietberechnung()[/FONT] bei den Wohnungsobjekten solltet ihr unbedingt mit [FONT="Courier New"]isVermietet()[/FONT] prüfen, ob diese vermietet ist, da - je nach Implementierung - die Methode [FONT="Courier New"]mietberechnung()[/FONT] faktisch auch [FONT="Courier New"]null [/FONT](Integer ist eine Klasse!) zurückgeben könnte und dadurch bei Handling mit dem Zeiger eine NullPionterException provoziert werden kann.

LG, Matthias
[align=center]Füllhöhe des Textes technisch bedingt!

----------------------------------------
Matthias Zagermann
Jünger der polyphonen PVC/PVAc-Scheiben

[/align]
 
Quote
Jede Entscheidung ist der Tod von Milliarden von Möglichkeiten

Daniel L

  • Newbie
  • *
  • Posts: 19
  • Karma: +0/-0
    • View Profile
GL der Inf II - Übung WW01/WW02
« Reply #7 on: July 29, 2010, 02:02:00 pm »
@tobi:  genau darauf wollte ich hinaus. jetzt müsste alles soweit komplett sein

@matthias: richtig,aber das wurde in tobis lösung schon berücksichtigt. in der klasse Hausverwaltung wird dies aber nicht benötigt. und das war ja die klasse bzw. die methode der klasse,die er hier geschrieben hat.

marcus666

  • Newbie
  • *
  • Posts: 3
  • Karma: +0/-0
    • View Profile
GL der Inf II - Übung WW01/WW02
« Reply #8 on: August 08, 2010, 01:01:14 am »
Also erst mal danke an alle, die hier gepostet haben, das hat mir echt geholfen. Da ich nicht ganz soo viel Ahnung habe, bitte nicht böse sein, wenn die Frage scheiße ist, aber ich versteh nicht ganz, warum du in der Klasse Mietvertrag eine Map für die Mieter angelegt hast. Ich denke doch, dass zu der Assoziationsklasse Mietvertrag immer nur ein Mieter gehört und dafür beliebig viele Mietverträge von der Hausverwaltung verwaltet werden, oder mach ich in meinen Überlegungen einen Fehler?!?
Allen viel Glück dabei, vor allem denen, die noch bestehen müssen!!

tobi0123

  • Full Member
  • ***
  • Posts: 146
  • Karma: +0/-0
    • View Profile
GL der Inf II - Übung WW01/WW02
« Reply #9 on: August 10, 2010, 02:02:03 pm »
Quote from: marcus666
Ich denke doch, dass zu der Assoziationsklasse Mietvertrag immer nur ein Mieter gehört und dafür beliebig viele Mietverträge von der Hausverwaltung verwaltet werden

So kannst du es wohl auch machen, ist vielleicht verständlicher als in einem Mietvertrag mehrere Mieter zu nennen.


Daniel L

  • Newbie
  • *
  • Posts: 19
  • Karma: +0/-0
    • View Profile
GL der Inf II - Übung WW01/WW02
« Reply #10 on: August 10, 2010, 02:55:52 pm »
Ich denke auch dass beide Varianten OK wären. Aber im "realen" Leben kann es durchaus schon vorkommen, dass mehrere Mieter in einem Mietvertrag stehen (denkt an WGs). Das wäre in dem Fall aber wohl Interpretationssache und nichts woran man sich aufhängen sollte :P

Viel Erfolg morgen