Nr. 3 class Division{ public static void main(String parameter[]){ try{ int a,b,c,rest; a=Integer.parseInt(parameter[0]); b=Integer.parseInt(parameter[1]); c=a/b; rest=a%b; System.out.print(args[0]+" : "+Integer.toString(b)); System.out.print(" = "+Integer.toString(c)+" Rest: "); System.out.println(Integer.toString(rest)); } catch (Exception e) { System.out.println("Folgender Fehler st aufgetreten: "); System.out.print(e.toString()); } // end of catch } // end of main } // end of class Nr. 4 class Division2{ public static void main(String parameter[]){ try{ int a,b,c,rest; a=Integer.parseInt(parameter[0]); b=Integer.parseInt(parameter[1]); if(b==0) { System.out.println("Keine Division durch 0 erlaubt"); } else { c=a/b; rest=a%b; System.out.print(parameter[0]+" : "+parameter[1]); System.out.print(" = "+Integer.toString(c)+" Rest: "); System.out.println(Integer.toString(rest)); } // if(b==0) - else } catch (Exception e) { System.out.print("Folgender Fehler st aufgetreten: "); System.out.println(e.toString()); } // end of catch } // end of main } // end of class 124 Übung auf Seite 46 class Taschenrechner{ public static void main(String parameter[]){ if(parameter.length!=3) { System.out.println("Drei Parameter eingeben"); } else { try{ double a,b,ergebnis=0; String operator; a=Double.parseDouble(parameter[0]); operator=parameter[1]; b=Double.parseDouble(parameter[2]); if(operator.equals("+")) { ergebnis=a+b; } // if + if(operator.equals("-")) { ergebnis=a-b; } // if if(operator.equals("x")) { ergebnis=a*b; } // if * if(operator.equals(":")) { if(b==0) { System.out.print("Keine Division durch"); System.out.println(" 0 erlaubt"); } else { ergebnis=a/b; } // if b==0 } // if : System.out.print(parameter[0]+" "+operator+" "); System.out.print(parameter[2]+" = "); System.out.println(Double.toString(ergebnis)); } catch (Exception e) { System.out.print("Folgender Fehler st aufgetreten: "); System.out.println(e.toString()); } // end of catch } // if parameter== 3 - else } // end of main } // end of class 125 Übungen auf Seite 51 a1) Entwurfsdiagramm Auto nummernschild : TEXT oder Auto ort : TEXT kuerzel : TEXT nr : ZAHL getNummernschild():TEXT Beim Entwurf von UML-Klassendiagrammen gibt es in der Regeln mehrere richtige Möglichkeiten. Es hängt oft vom genauen Einsatzzweck oder dem Auftraggeber ab, welche Möglichkeit am Ende gewählt wird. Am Beispiel von der Klasse Auto werden zwei verschiedene Lösungen gezeigt. Bei den anderen Aufgaben wird jeweils nur eine mögliche Lösung gezeigt. Der Konstruktor und die Standard get- und set-Methoden gehören nicht ins UMLEntwurfsdiagramm. Die Methode getNummernschild() gibt das ganze Nummernschild aus und ist keine Standard get-Methode. a2) Implementationsdiagramm Auto - nummernschild:String + Auto(nummernschild:String) + getNummernschild():String + setNummernschild(nummernschild:String) oder Auto - ort:String - kuerzel:String - nr :int + Auto(ort:String,kuerzel:String,nr:int) + getNummernschild():String + setOrt(ort:String) + setKuerzel(kuerzel:String) + setNr(nr:int) 126 b1)Entwurfsdiagramm Buch titel : TEXT autor : TEXT preis : DEZIMALZAHL b2) Implementationsdiagramm Buch - titel:String - autor:String - preis:double + Buch(titel:String,autor:String,preis:double) + getTitel():String + setTitel(titel:String) + getAutor():String + setAutor(autor:String) + getPreis():double + setPreis(preis:double) c1) Achtung: Umlaute sind in Java- und UML-Implementationsdiagrammen nicht erlaubt! Deshalb wird die Klasse für Schüler in diesem Beispiel absichtlich mit ue geschrieben. Im Entwurfsdiagramm dürfte noch ein ü stehen, aber es macht durchaus Sinn die Umlaute von Beginn an weg zu lassen. Entwurfsdiagramm: Schueler vorname:TEXT nachname:TEXT alter:ZAHL In diesem Beispiel wurde eine sehr schlechte Entscheidung getroffen. Das Alter sollte man besser nicht als Attribut speichern. Schließlich ändert sich das Alter jedes Jahr – und die Klasse wüsste noch nicht mal wann! Besser wäre es gewesen das Geburtsdatum zu speichern. Allerdings gibt es keinen einfachen Datentyp für ein Datum. Wenn man das Datum als String speichert, kann man mit dem Datum aber nicht rechnen (um zum Beispiel das Alter auszurechnen). Besser wäre es geburtsjahr, geburtsmonat und geburtstag als Integer-Wert zu speichern. 127 c2) Implementationsdiagramm Schueler - vorname:String - nachname:String - alter:int + Schueler(vorname:String,nachname:String,alter:int) + getVorname():String + setVorname(vorname:String) + getNachname():String + setNachname(nachname:String) + getAlter():int + setAlter(alter:int) Übungen auf Seite 52 a) Klasse Auto: Konstruktor Auto(String nummernschild) Ein neues Objekt der Klasse Auto wird mit dem angegeben Nummernschild angelegt. Anfrage String getNummernschild() Die Anfrage liefert das Nummernschild des Autos zurück Auftrag void setNummernschild(String nummernschild) Die Methode ändert das abgespeicherte Nummernschild ab. oder für die Alternative: Konstruktor Auto(String ort, String kuerzel, int nr) Ein neues Objekt der Klasse Auto wird mit dem angegeben Nummernschild angelegt. Anfrage String getNummernschild() Die Anfrage liefert das Nummernschild als einen String „MG-OB-123“zurück. Auftrag void setOrt(String Ort) Die Methode setzt den Ort des Nummernschild, z.B. MG, auf einen neuen Wert. void setKuerzel(String kuerzel) Die Methode setzt das mittlere Kürzel, also OB bei MG-OB-123, auf einen neuen Wert. Auftrag Auftrag b) Klasse Buch: Konstruktor 128 void setNr(int nr) Die Methode setzt die Zahl des Nummernschild, also 123 bei MG-OB-123, auf einen neuen Wert. Buch(String titel, String autor, double preis) Ein neues Objekt der Klasse Buch wird angelegt und mit sinnvollen Werten gefüllt. Der Preis wird in Euro mit Nachkommastellen angegeben. Anfrage String getTitel() Die Anfrage liefert den Titel des Buchs als String zurück. Anfrage String getAutor() Die Anfrage liefert den Namen des Autors als String zurück. Anfrage double getPreis() Die Anfrage liefert den Preis in Euro zurück. Auftrag void setTitel(String titel) Der Titel wird auf dem im Parameter angegebenen Wert gesetzt. Auftrag void setAutor(String autor) Der Titel wird auf dem im Parameter angegebenen Wert gesetzt. Auftrag void setPreis(double preis) Der Preis wird in Euro auf dem im Parameter angegebenen Wert gesetzt. Das Beispiel zeigt wie wichtig eigentlich ein konkreter Schazusammenhang zum Modellieren ist. Die Frage ob nur der Nachname des Autors oder der komplette Name des Autors und was gemacht wird wenn mehrere Autoren ein Buch gemeinsam geschrieben haben kann in einer solchen „Pseudoanwendungsaufgabe“ nicht geklärt werden. c) Klasse Schueler: Konstruktor Schueler(String vorname, String nachname, int alter) Ein neues Objekt der Klasse Schüler wird angelegt und mit sinnvollen Werten gefüllt. Anfrage String getVornamen() Die Anfrage liefert den Vornamen des Schülers als String zurück. Anfrage String getNachname() Die Anfrage liefert den Nachnamen des Schülers als String zurück. Anfrage int getAlter() Die Anfrage liefert das Alter des Schülers zurück. Auftrag void setVorname(String vorname) Der Vorname wird auf dem im Parameter angegebenen Wert gesetzt. Auftrag void setNachname(String nachname) Der Nachname wird auf dem im Parameter angegebenen Wert gesetzt. Auftrag void setAlter(int alter) Das aktuelle Alter wird auf dem im Parameter angegebenen Wert gesetzt. 129 Übungen auf Seite 54 a) class Auto { private String nummernschild; public Auto(String nummernschild){ this.nummernschild=nummernschild; } // of Bruch public int getNummernschild(){ return this.nummernschild; } // of getNummernschild public void setNummernschild(String nummernschild){ this.nummernschild =nummernschild; } // of setNummernschild } // of class oder class Auto { private String ort; private String kuerzel; private int nr; public Auto(String ort,String kuerzel, int nr){ this.ort=ort; this.kuerzel=kuerzel; this.nr=nr; } // of Bruch public int getNummernschild(){ return this.ort + “-“ + this.kuerzel+“-“ + Integer.toString(this.nr); } // of getNummernschild public void setOrt(String ort){ this.ort=ort; } // of setort public void setKuerzel(String kuerzel){ this.kuerzel=kuerzel; } // of setort public void setnr(int nr){ this.nr=nr; } // of setNr } // of class 130 b) class Buch{ private String titel; private String autor; private double preis; public Buch(String titel, String autor, double preis){ this.titel=titel; this.autor=autor; this.preis=preis; } // of Bruch public String getTitel(){ return this.titel; } // of getTitel public void setTitel(String titel){ this.titel=titel; } // of setTitel public String getAutor(){ return this.autor; } // of getTitel public void setAutor(String autor){ this.autor=autor; } // of setAutor public double getPreis(){ return this.preis; } // of getPreis public void setPreis(double Preis){ this.preis=preis; } // of setPreis } // of class 131 c) class Schueler{ private String vorname; private String nachname; private int alter; public Schueler(String vorname, String nachname, double preis){ this.vorname=vorname; this.nachname=nachname; this.preis=preis; } // of Bruch public String getVorname(){ return this.vorname ; } // of getVorname public void setVorname(String vorname){ this.vorname=vorname; } // of setVorname public String getNachname(){ return this.nachname ; } // of getTitel public void setNachname(String nachname){ this.nachname=nachname; } // of setAutor public int getAlter(){ return this.alter; } // of getAlter public void setAlter(int alter){ this.alter=alter; } // of setAlter } // of class 132