Ich nehme derzeit an einer Akademie zum Java Fullstack Software Engineer teil. In den kommenden Wochen möchte ich hier meine Mitschrift, so gut es geht, aufzeichnen und mitteilen. Hier ist das, was ich vom dritten Tag in Block 3 gelernt und behalten habe:
Nachtrag - Dynamische Listen
Folgendes Bild ist von unserem Kollegen Michael Schneider:
Blau: Interfaces, Grün: maps
Collection ist wie ein Array: Auflistung von Objekten. Map hat Key und Value Paare
Aus dem Internet:
Interfaces
Wir bauen unser eigenes Mathe-Interface:
Wir erhalten vom Product Owner oder Architekten eine Vorgabe, wie etwas zu implementieren ist:
Wie wir es umsetzen, bleibt uns überlassen. Daher ist diese Übergabe eine Schnittstelle -> Interface. Sie werden mit dem Implementierungspfeil dargestellt:
Wir erstellen eine Klasse, die von der Haupt-Klasse Implementiert:
... und noch eine, die es etwas anders tut:
Wir erstellen jetzt eine InterfaceApp Klasse:
Sinnvoller Einsatz von Interfaces:
Die Datentypen von Person und Hotel sind unterschiedlich. Daher ist es sinnvoll ein Interface "Adressierbar" zu erstellen.
Hotel und Personen Implementieren die Methode "getAdresse" vom selben Typ String.
Die Klasse "Adressbuch" benutzt (uses) das Interface.
Person.java
package de.firma.personen;import de.firma.orga.Adressierbar;
import java.time.LocalDate;
public class Person extends Object implements Adressierbar {
// Eigenschaften private String vname; private String nname; private String strasse; private String plz; private String ort; private double gewicht; private char geschlecht; // wWmMdD private LocalDate gebdate; // Konstruktor public Person() { super(); // Aufruf des Konstrutors der Oberklasse -> Object() this.vname = "Max"; this.nname = "Mustermann"; this.strasse = "Musterweg 123"; this.plz = "12345"; this.ort = "Musterstadt"; this.gewicht = 75; this.geschlecht = 'd'; this.gebdate = LocalDate.now(); } public Person(String vname, String nname) { //super(); // Aufruf des Konstrutors der Oberklasse -> Object() this(); // Aufruf des Konstrutors mit der Signatur () -> Person() this.vname = vname; this.nname = nname; //.toLowerCase(); } public Person(String vname, String nname, String strasse, String plz, String ort, double gewicht, char geschlecht, LocalDate gebdate) throws GenderException {
// super();
// this.vname = vname;
// this.nname = nname;
this(vname,nname); // Aufruf des Konstrutors mit der Signatur (String,String)this.strasse = strasse; this.plz = plz; this.ort = ort; this.gewicht = gewicht; //this.geschlecht = geschlecht; this.setGeschlecht(geschlecht); this.gebdate = gebdate; } // Getter- und Setter-Methoden public String getVname() { return vname; } public void setVname(String vname) { this.vname = vname; } public String getNname() { return nname; } public void setNname(String nname) { this.nname = nname; } public String getStrasse() { return strasse; } public void setStrasse(String strasse) { this.strasse = strasse; } public String getPlz() { return plz; } public void setPlz(String plz) { this.plz = plz; } public String getOrt() { return ort; } public void setOrt(String ort) { this.ort = ort; } public double getGewicht() { return gewicht; } public void setGewicht(double gewicht) { this.gewicht = gewicht; } public char getGeschlecht() { return geschlecht; } public void setGeschlecht(char geschlecht) throws GenderException { if (geschlecht != 'm' && geschlecht != 'M' && geschlecht != 'w' && geschlecht != 'W' && geschlecht != 'd' && geschlecht != 'D' ) { throw new GenderException("Unbekanntes Geschlecht"); } this.geschlecht = geschlecht; } public LocalDate getGebdate() { return gebdate; } public void setGebdate(LocalDate gebdate) { this.gebdate = gebdate; } //BusinessLogik public String vorstellen() { return this.vname + " " + this.nname +" "+ this.gebdate +" "+ getClass().getSimpleName() ; } public String toCSV() { return this.toCSV(','); } public String toCSV(char delimiter) { StringBuilder sb = new StringBuilder(50); sb.append(this.vname); sb.append(delimiter); sb.append(this.nname); sb.append(delimiter); sb.append(this.strasse); sb.append(delimiter); sb.append(this.plz); sb.append(delimiter); sb.append(this.ort); sb.append(delimiter); sb.append(this.gewicht); sb.append(delimiter); sb.append(this.geschlecht); sb.append(delimiter); sb.append(this.gebdate); return sb.toString(); } @Override public String getAdresse() { return this.vname +" " + this.nname +" " + this.strasse +" " + this.plz +" " + this.ort; }
}
Hotel.java
package de.firma.gebaede;import java.util.ArrayList;
import de.firma.orga.Adressierbar;
import de.firma.personen.Angestellter;
import de.firma.personen.Person;public class Hotel implements Adressierbar {
// Eigenschaften private String hotelname; private String str; private String nr; private String plz; private String standort; private short bewertung; private String vorwahl; private String hauptnummer; private ArrayList<Person> gaeste; private ArrayList<Angestellter> mitarbeiter; // Konstruktoren public Hotel(String hotelname, String str, String nr, String plz, String standort) { //super(); this.hotelname = hotelname; this.str = str; //this.nr = nr; this.setNr(nr); this.plz = plz; this.standort = standort; this.gaeste = new ArrayList<Person>(); this.mitarbeiter = new ArrayList<Angestellter>(); } public Hotel(String hotelname, String str, String nr, String plz, String standort, String vorwahl, String hauptnummer,short bewertung) { this(hotelname,str,nr,plz,standort); this.vorwahl = vorwahl; this.hauptnummer = hauptnummer; this.bewertung = bewertung; } //Getter- und Setter-Methoden public String getHotelname() { return hotelname; } public void setHotelname(String hotelname) { this.hotelname = hotelname; } public String getStr() { return str; } public void setStr(String str) { this.str = str; } public String getNr() { return nr; } public void setNr(String nr) { this.nr = nr; } public String getPlz() { return plz; } public void setPlz(String plz) { this.plz = plz; } public String getStandort() { return standort; } public void setStandort(String standort) { this.standort = standort; } public String getVorwahl() { return vorwahl; } public void setVorwahl(String vorwahl) { this.vorwahl = vorwahl; } public String getHauptnummer() { return hauptnummer; } public void setHauptnummer(String hauptnummer) { this.hauptnummer = hauptnummer; } public ArrayList<Person> getGaeste() { return gaeste; } // Bussines-Logik public void einchecken(Person gast) throws GastAllReadyInHotelException { if(this.gaeste.contains(gast)) { throw new GastAllReadyInHotelException("Gast bereits eingecheckt"); } this.gaeste.add(gast); } public String getInfo() { StringBuilder sb = new StringBuilder(); sb.append("Hotelinfo" + "\n"); sb.append("Hotelname: " + this.hotelname + "\n"); sb.append("-------\n"); sb.append("Gaeste\n"); for(Person gast : this.gaeste) { sb.append(gast.vorstellen() + "\n"); } return sb.toString(); } @Override public String getAdresse() { return this.hotelname +" " + this.str +" " + this.nr +" " + this.plz +" " + this.standort; }
}
Adressierbar.java (Interface)
package de.firma.orga;public interface Adressierbar {
/**
* @return gib eine postalisch adressierbare Adresse aus
*/// Ein Interface hat keine Eigenschaften public String getAdresse(); // Hier gibt es keine Implementierung public default void drucke() { //System.out.println("Ja ich drucke !!!!!"); System.out.println(this.getAdresse()); }
}
Adressbuch.java
package de.firma.personen;import de.firma.orga.Adressierbar;
import java.time.LocalDate;
public class Person extends Object implements Adressierbar {
// Eigenschaften private String vname; private String nname; private String strasse; private String plz; private String ort; private double gewicht; private char geschlecht; // wWmMdD private LocalDate gebdate; // Konstruktor public Person() { super(); // Aufruf des Konstrutors der Oberklasse -> Object() this.vname = "Max"; this.nname = "Mustermann"; this.strasse = "Musterweg 123"; this.plz = "12345"; this.ort = "Musterstadt"; this.gewicht = 75; this.geschlecht = 'd'; this.gebdate = LocalDate.now(); } public Person(String vname, String nname) { //super(); // Aufruf des Konstrutors der Oberklasse -> Object() this(); // Aufruf des Konstrutors mit der Signatur () -> Person() this.vname = vname; this.nname = nname; //.toLowerCase(); } public Person(String vname, String nname, String strasse, String plz, String ort, double gewicht, char geschlecht, LocalDate gebdate) throws GenderException {
// super();
// this.vname = vname;
// this.nname = nname;
this(vname,nname); // Aufruf des Konstrutors mit der Signatur (String,String)this.strasse = strasse; this.plz = plz; this.ort = ort; this.gewicht = gewicht; //this.geschlecht = geschlecht; this.setGeschlecht(geschlecht); this.gebdate = gebdate; } // Getter- und Setter-Methoden public String getVname() { return vname; } public void setVname(String vname) { this.vname = vname; } public String getNname() { return nname; } public void setNname(String nname) { this.nname = nname; } public String getStrasse() { return strasse; } public void setStrasse(String strasse) { this.strasse = strasse; } public String getPlz() { return plz; } public void setPlz(String plz) { this.plz = plz; } public String getOrt() { return ort; } public void setOrt(String ort) { this.ort = ort; } public double getGewicht() { return gewicht; } public void setGewicht(double gewicht) { this.gewicht = gewicht; } public char getGeschlecht() { return geschlecht; } public void setGeschlecht(char geschlecht) throws GenderException { if (geschlecht != 'm' && geschlecht != 'M' && geschlecht != 'w' && geschlecht != 'W' && geschlecht != 'd' && geschlecht != 'D' ) { throw new GenderException("Unbekanntes Geschlecht"); } this.geschlecht = geschlecht; } public LocalDate getGebdate() { return gebdate; } public void setGebdate(LocalDate gebdate) { this.gebdate = gebdate; } //BusinessLogik public String vorstellen() { return this.vname + " " + this.nname +" "+ this.gebdate +" "+ getClass().getSimpleName() ; } public String toCSV() { return this.toCSV(','); } public String toCSV(char delimiter) { StringBuilder sb = new StringBuilder(50); sb.append(this.vname); sb.append(delimiter); sb.append(this.nname); sb.append(delimiter); sb.append(this.strasse); sb.append(delimiter); sb.append(this.plz); sb.append(delimiter); sb.append(this.ort); sb.append(delimiter); sb.append(this.gewicht); sb.append(delimiter); sb.append(this.geschlecht); sb.append(delimiter); sb.append(this.gebdate); return sb.toString(); } @Override public String getAdresse() { return this.vname +" " + this.nname +" " + this.strasse +" " + this.plz +" " + this.ort; }
}
Ergebnis:
——————
Disclaimer
Alles was ich mitschrieb und verstanden habe ist ohne Gewähr.
Besten Dank an unseren sehr empfehlenswerten
Trainer: Hans-Joachim Blanke blanke@4point.de
Mehr dazu im nächsten Blog von mir.
Gruß, Achim Mertens