MezData-Logo

Lösung 2019-Wi-FIA-A1

KlassendiagrammZum Überblick: Klassendiagrammsicht mit BlueJ

In der Aufgabe sollte ein Klassendiagramm implementiert werden.

Von der Gewichtung dürfte ein Schüler 45min zur Lösung der Aufgabe benötigen.

Ich wäre gespannt, wie lange der Aufgabenersteller zur Erstellung einer Lösung dieser Komplexität in einer Prüfungssituation benötigen würde.

Auch wenn ich gerne Java im Unterricht verwende, würde ich es vermeiden in einer Prüfung Java spezifische Konstruktionen zu verwenden. Es soll ja noch Leute geben, die Delphi, C++ usw. verwenden.

So kann die Verwendung des List-Interface bei ObjektArrays für nicht Java-Kenner schon verwirrend sein. Eine Programiersprachen unabhängigeres Klassendiagramm wie z.B ein nach dieser ITG-Formelsammlung erstelltes wäre wünschenswert.

1.1 Patient und Behandlung

Quellcode [MundK/Patient.java]
public class Patient{ // 1.1
  private String kvNummer;
  private String name;
  private String vorname;
 
  public Patient(){}
 
  public Patient(String kv, String n, String v){
    kvNummer=kv;
    name=n;
    vorname=v;
  }
  public String getKvNummer(){
    return kvNummer;
  }
  public String getName(){
    return name;  
  }
 
  public String getVorname(){
    return vorname;  
  }
}
Quellcode [MundK/Behandlung.java]
public abstract class Behandlung{ // 1.1
  private String kvNummer;
  private String beschreibung;
  private double kostensatz;
 
  public Behandlung(){}
 
  public Behandlung(String kv, String b, double k){
    kvNummer=kv;
    beschreibung=b;
    kostensatz=k;
  }
  public String getKvNummer(){
    return kvNummer;  
  }
  public String getBeschreibung(){
    return beschreibung;  
  }
  public double getKostensatz(){
    return kostensatz;  
  }
  public abstract double getKosten();
}

1.2 Standardbehandlung und Physiobehandlung

Quellcode [MundK/Standardbehandlung.java]
public class Standardbehandlung extends Behandlung{ // 1.2
  public Standardbehandlung(String kv, String b, double k){
    super(kv,b,k);  
  }
  /* @Override: Damit können Methoden gekennzeichnet werden,
   * die die Methode ihrer Oberklasse überschreiben sollen.
   * Der Compiler gibt dann einen Fehler aus,
   * wenn die Methode in der Oberklasse nicht existiert.
   */ 
  @Override 
  public double getKosten(){
    return getKostensatz();  
  }
}
Quellcode [MundK/Physiobehandlung.java]
public class Physiobehandlung extends Behandlung{ // 1.2
  /*public Physiobehandlung(){
    super();
  }*/
 
  public Physiobehandlung(String kv, String b, double k){
    super(kv,b,k);  
  }
  @Override
  public double getKosten(){
    return 1.5 * getKostensatz();  
  } 
}

1.3 Praxis

Quellcode [MundK/Praxis.java]
import java.util.ArrayList; // ArrayList Klasse
import java.util.List;  // List Interface
 
public class Praxis{ // 1.3
  private List<Behandlung> behandlungen = new ArrayList<Behandlung>();
  private List<Patient> patienten = new ArrayList<Patient>();
 
  public List<Patient> getPatient(String name){
    List<Patient> erg = new ArrayList<Patient>();
    for (int i=0; i<patienten.size(); i++){
      Patient p = patienten.get(i);
      if (p.getName().equals(name)){
        erg.add(p);  
      }
    }
    return erg;
  }
  public List<Behandlung> getBehandlungen(String kvNummer){
    List<Behandlung> erg = new ArrayList<Behandlung>();
    for (int i=0; i<behandlungen.size(); i++){
      Behandlung b = behandlungen.get(i);
      if (b.getKvNummer().equals(kvNummer)){
        erg.add(b);  
      }
    }
    return erg;
  }
 
  public int anzBehandlungen(String kvNummer){
    return getBehandlungen(kvNummer).size();
  }
 
  public String zeigePatienten(int anzBehandlungen){
    String erg = "";
    for(int i=0; i< patienten.size();i++){
      Patient p = patienten.get(i);
      if (anzBehandlungen(p.getKvNummer()) >= anzBehandlungen){
        erg += p.getName() + "; ";  
      }
    }
    return erg;
  }
 
  public void addBehandlung(Behandlung b){
    behandlungen.add(b);  
  }
 
  public double ermittleKosten(){
    double erg = 0;
    for(int i = 0; i< behandlungen.size();i++){
      erg += behandlungen.get(i).getKosten();
    }
    return erg;
  }
}

1.4 PraxisTest

Quellcode [MundK/PraxisTest.java]
public class PraxisTest{  // 1.4
  public static void main(String[] args){
    Praxis praxis = new Praxis();
    praxis.addBehandlung(new Physiobehandlung("A12345","Chirogymnastik",12.87));
    praxis.addBehandlung(new Physiobehandlung("A12345","Wärmebehandlung",4.23));
    praxis.addBehandlung(new Standardbehandlung("A12345","Arthrose",45.12));
    praxis.addBehandlung(new Standardbehandlung("A12345","Ultraschall",26.80));
    System.out.println("Gesamtkosten: " + praxis.ermittleKosten());
  }
}