Author Topic: Übung Gruppe CIW 02, MB 14, MB 17 & VT 03  (Read 6502 times)

tiefenbass

  • Hero Member
  • *****
  • Posts: 1876
  • Karma: +0/-0
    • View Profile
    • http://www.fjp-media.de
Übung Gruppe CIW 02, MB 14, MB 17 & VT 03
« on: July 07, 2009, 06:53:03 pm »
Guten Abend,
wir versprochen hier ein Diagramm (als Dateianhang) und den dazugehörigen Code zur 5. und 6. Übung. Wie bereits gesagt, es gibt mehrere Lösungsmöglichkeiten, die der gestellten Aufgabe gerecht werden (z.B. bei den genutzten Klassen der Collection-Framework [ausser bei Fahrzeuge: diese sollen explizit ein einer [FONT="Courier New"]List[/FONT] organisiert werden]) ;)

Autovermietungsfirma
Code: [Select]
package av1;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Autovermietungsfirma {
 
private Map kunden;

private List vermietungsstationen;

public Autovermietungsfirma(){
this.kunden=new HashMap();
this.vermietungsstationen=new ArrayList();
}

public Map getKunden() {
return this.kunden;
}

public void setKunden(Map kunden) {
this.kunden = kunden;
}

public List getVermietungsstationen() {
return this.vermietungsstationen;
}

public void setVermietungsstationen(
List vermietungsstationen) {
this.vermietungsstationen = vermietungsstationen;
}

}


Buchung
Code: [Select]
package av1;

import java.util.Date;

public class Buchung {
 
private final Date buchungsdatum;

private final Kunde kunde;

private final Fahrzeug fahrzeug;

public Buchung(Kunde kunde, Fahrzeug fahrzeug){
this.buchungsdatum=new Date();
this.fahrzeug=fahrzeug;
this.kunde=kunde;
}

public Date getBuchungsdatum() {
return this.buchungsdatum;
}

public Kunde getKunde() {
return this.kunde;
}

public Fahrzeug getFahrzeug() {
return this.fahrzeug;
}

}


Fahrzeug
Code: [Select]
package av1;

import java.util.Date;

public abstract class Fahrzeug {
 
private String polKennzeichen;

private String typ;

private Date baujahr;

private Kategorie kategorie;

public String getPolKennzeichen() {
return this.polKennzeichen;
}

public void setPolKennzeichen(String polKennzeichen) {
this.polKennzeichen = polKennzeichen;
}

public String getTyp() {
return this.typ;
}

public void setTyp(String typ) {
this.typ = typ;
}

public Date getBaujahr() {
return this.baujahr;
}

public void setBaujahr(Date baujahr) {
this.baujahr = baujahr;
}

public Kategorie getKategorie() {
return this.kategorie;
}

public void setKategorie(Kategorie kategorie) {
this.kategorie = kategorie;
}

}


Kategorie
Code: [Select]
package av1;

import java.util.HashMap;

public enum Kategorie {
BILLIG,MODERAT,TEUER;

private int mietpreis;

private HashMap fahrzeuge = new HashMap();

public int getMietpreis() {
return this.mietpreis;
}

public void setMietpreis(int mietpreis) {
this.mietpreis = mietpreis;
}

public Map getFahrzeuge() {
return this.fahrzeuge;
}

public void setFahrzeuge(Map fahrzeuge) {
this.fahrzeuge = fahrzeuge;
}

}


Kunde
Code: [Select]
package av1;

public class Kunde {
 
}


LKW
Code: [Select]
package av1;

public class LKW extends Fahrzeug {
 
private float maxNutzlast;

public float getMaxNutzlast() {
return maxNutzlast;
}

public void setMaxNutzlast(float maxNutzlast) {
this.maxNutzlast = maxNutzlast;
}

}


PKW
Code: [Select]
package av1;

public class PKW extends Fahrzeug {
 
}


Vermietungsstation
Code: [Select]
package av1;

import java.util.List;
import java.util.ArrayList;

public class Vermietungsstation {

private List fuhrpark;

private List buchungen;

public Vermietungsstation () {
this.fuhrpark = new ArrayList();
this.buchungen = new ArrayList();
}

public Fahrzeug ausleihen(String polKennzeichen, Kunde kunde) {
for (Fahrzeug fz : fuhrpark) {
if (fz.getPolKennzeichen().equals(polKennzeichen)) {
buchungen.add(new Buchung(kunde, fz));
fuhrpark.remove(fz);
return fz;
}
}
return null;
}

public void zurueckgeben(Fahrzeug fahrzeug) {
fuhrpark.add(fahrzeug);
}

public List getFuhrpark() {
return fuhrpark;
}

public void setFuhrpark(List fuhrpark) {
this.fuhrpark = fuhrpark;
}

public List getBuchungen() {
return buchungen;
}

}


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

tiefenbass

  • Hero Member
  • *****
  • Posts: 1876
  • Karma: +0/-0
    • View Profile
    • http://www.fjp-media.de
Übung Gruppe CIW 02, MB 14, MB 17 & VT 03
« Reply #1 on: July 07, 2009, 07:06:08 pm »
Hier der Code für die Kategorie als normale Klasse
Code: [Select]

package av1;

import java.util.HashMap;

public class Kategorie {

public static Kategorie BILLIG = new Kategorie();

public static Kategorie MODERAT = new Kategorie();

public static Kategorie TEUER = new Kategorie();

private final int nummer;

private int mietpreis;

private HashMap fahrzeuge;

private static int nextNummer=0;

private Kategorie() {
this.nummer = nextNummer++;
this.fahrzeuge = new HashMap();
this.mietpreis = 0;
}

public int getMietpreis() {
return this.mietpreis;
}

public void setMietpreis(int mietpreis) {
this.mietpreis = mietpreis;
}

  public Map getFahrzeuge() {
return this.fahrzeuge;
}

public void setFahrzeuge(Map fahrzeuge) {
this.fahrzeuge = fahrzeuge;
}

public int getNummer() {
return this.nummer;
}

}


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

the_hat

  • Newbie
  • *
  • Posts: 3
  • Karma: +0/-0
    • View Profile
Übung Gruppe CIW 02, MB 14, MB 17 & VT 03
« Reply #2 on: July 07, 2009, 09:38:38 pm »
Code: [Select]
public Fahrzeug ausleihen(String polKennzeichen, Kunde kunde) {
        for (Fahrzeug fz : fuhrpark) {
            if (fz.getPolKennzeichen().equals(polKennzeichen)) {
                buchungen.add(new Buchung(kunde, fz));
                fuhrpark.remove(fz);
                return fz;
            }
        }
        return null;
    }

Wie funktioniert deine Schleife da genau? Du erstellst ein Objekt fz und lässt es durch deine List fuhrpark durchlaufen. Wie ist da die Austrittsbedingung? Wenn die List zuende ist? Ich kenne das nur so
Code: [Select]
for(int i=0; i<=fuhrpark.size();i++){...}

tiefenbass

  • Hero Member
  • *****
  • Posts: 1876
  • Karma: +0/-0
    • View Profile
    • http://www.fjp-media.de
Übung Gruppe CIW 02, MB 14, MB 17 & VT 03
« Reply #3 on: July 08, 2009, 03:47:29 pm »
Hallo the_hat,
eines vorweg: deine Lösung ist ebenfalls machbar... und man kann es auch mittels einer while-Schleife lösen. Drei verschiedene Ansätze für dasselbe Ergebnis ;)

Zu deiner Frage:
diese Art von FOR-Schleife kann man für alle Typen benutzen, die das Interface [FONT="Courier New"]Iterable[/FONT] implementieren.
Funktioniert folgendermaßen: die for-Schleife geht vom ersten bis zum letzten Element des [FONT="Courier New"]Iterable[/FONT]-Objektes (also von [FONT="Courier New"]0 [/FONT]bis [FONT="Courier New"](size()-1)[/FONT] )durch. Bei jedem Durchgang durch die Schleife wird die Objektreferenz des jeweiligen Elementes, bei dem es gerade ist, der Variable [FONT="Courier New"]fz[/FONT] zugewiesen. Da das [FONT="Courier New"]Iterable[/FONT]-Objekt ja nur Elemente vom Typ [FONT="Courier New"]Fahrzeug [/FONT]enthält,  wurde die Variable [FONT="Courier New"]fz [/FONT]ebenfalls als Typ [FONT="Courier New"]Fahrzeug [/FONT]deklariert.
Somit hast du innerhalb der Schleife auf [FONT="Courier New"]fz [/FONT]die Referenz zu dem Objekt, für den der Schleifendurchgang gerade gilt (bei deiner for-Schleife würdest du dir die Referenz separat mit[FONT="Courier New"] fuhrpark.get(i)[/FONT] holen).

Das Attribut [FONT="Courier New"]fuhrpark [/FONT]ist ja ein Objekt vom Typ [FONT="Courier New"]List[/FONT], welches wiederum als Superinterface [FONT="Courier New"]Iterable [/FONT]hat. [FONT="Courier New"]List [/FONT]erbt also von [FONT="Courier New"]Iterable [/FONT]und ist somit auch ein spezieller Typ [FONT="Courier New"]Iterable[/FONT].

Der Rest ist schnell erklärt: Wenn das passende [FONT="Courier New"]Fahrzeug[/FONT] gefunden wurde, wird eine [FONT="Courier New"]Buchung [/FONT]erstellt, das [FONT="Courier New"]Fahrzeug [/FONT]aus der Liste [FONT="Courier New"]fuhrpark [/FONT]entfernt (ich vermeide dadurch Doppelbuchungen,  d.h. zwei verschiedene Kunden haben dasselbe Fahrzeug zur gleichen Zeit) und von der Methode zurückgegeben.

... eine [FONT="Courier New"]Map [/FONT]ist kein [FONT="Courier New"]Iterable[/FONT], deshalb könnt ihr da nicht mit dieser [FONT="Courier New"]Iterable[/FONT]-for-Schleife durchlaufen. Es gibt übrigens noch mehr solch spezieller for-Schleifen, aber es gehören dazu immer spezielle Bedingungen. All diese Spezialfälle können immer durch die "normale" for-Schleife ersetzt werden :happy:

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

eXc!teR

  • Jr. Member
  • **
  • Posts: 52
  • Karma: +0/-0
    • View Profile
Übung Gruppe CIW 02, MB 14, MB 17 & VT 03
« Reply #4 on: August 01, 2011, 12:30:37 am »
Hi, war die Aufgabe nur das Diagramm in Java umwandeln? Oder woher soll ich wissen das ich einen Array oder ne Hashmap verwenden soll..

Danke

essenfeger

  • Jr. Member
  • **
  • Posts: 77
  • Karma: +0/-0
    • View Profile
Übung Gruppe CIW 02, MB 14, MB 17 & VT 03
« Reply #5 on: August 01, 2011, 07:29:14 am »
Quote from: eXc!teR
Hi, war die Aufgabe nur das Diagramm in Java umwandeln? Oder woher soll ich wissen das ich einen Array oder ne Hashmap verwenden soll..

Danke
Wenn keine Vorgabe da ist, such es dir aus. Die verwendete Datenstruktur sollte aber die Multiplizitäten abbilden können die vorgegeben sind und -wenn vorgegeben- Randbedingungen genügen.
armselig != arm x selig

Ich hab schon Kugeln umkippen sehen. Mitten im kartesischen Raum.