Java Grundlagen – Block3 (Java advanced) – Tag 3 - Interfaces

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:

main java  P roj«t  App  de  firnu  utility Math e sum  Si p.jm s  package ae.firma.utility;  public interface mathe  pun tic aostract int (int x,  public abstract int diff(int X,  int  int y);  SingeltonApp  Singleton  v de.frrna.util*y  O Mathe

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

H2
H3
H4
3 columns
2 columns
1 column
Join the conversation now
Logo
Center