Aufagabenstellung unklar

Nummer11

Mitglied
Lerne gerade für meine Klausur und versuche mich gerade an einer Aufgabe zum Thema OOP.
Leider verstehe ich nicht genau was in Teilaufgabe a) gemeint ist. Zu der Aufagabe gab es auch noch einen Code mit den drei Klassen: Hausmeister, Lehrer, Schüler. Ich schick diesen sicherheitshalber auch mal rein.
Aufgabe lautet:

Verbessere die folgende Klassenstruktur mithilfe der Möglichkeiten, die du in der Vorlesung gelernt hast. Befolge dabei folgende Aufgaben:
a) Entwickle eine geeignete Klassenhierarchie unter Nutzung aller Kniffe (Vererbung, Super-Konstruktoren, Polymorphismus, Abstrakte Klassen…)
b) Erstelle ein UML-Diagramm basierend auf den Ergebnissen aus a).
c) Übersetze das UML-Diagramm 1:1 in Quellcode und überprüfe, ob deine Verbesserungen das Klassen-Modell wie gewünscht verbessert haben.
d) Erweitere das Modell geeignet um die Aspekte: a) Schulleiter b) Klasse/Stufe c) Unterrichtsfach d) Schuleiter

Wie genau sieht eine Klassenhierarchie aus? Ist das Code oder eine Art Zeichnung?
Es scheint ja kein Code zu sein, da man ja danach ein UML Diagramm zeichnen soll und daraus dann einen Code.

Java:
public class Hausmeister {

    protected int alter;
    public String name;
   
    public void arbeiten(){
        System.out.println(name + " repariert alles.");
    }
}


public class Lehrer {
    protected int alter;
    public String name;
    private String fach;
    private boolean istNett;
   
    public void arbeiten(){
        System.out.println(fach+"unterricht!");
    }
   
    public boolean gibtHausaufgaben(){
        return !istNett;
    }
   
    public void setFach(String fach){
        this.fach=fach;
    }
   
    public String getFach(){
        return fach;
    }
}



public class Schueler {
    protected int alter;
    public String name;
    protected String[] lieblingsfach;
   
    public void lernen(String fach){
        for(String s : lieblingsfach)
            if(s.equals(fach))
                System.out.println(name + " lernt " + fach);
    }

    public boolean magLehrer(Lehrer l) {
        if(l.gibtHausaufgaben() == false)
            return true;
        else {
            for(String s : lieblingsfach)
                if(l.getFach().equals(s))
                        return true;
                return false;
        }
    }
}
 
Wenn du dir die drei Klassen anguckst siehst du dass sie teils gemeinsame Eigenschaften und Methoden haben, tiels aber auch speziell. Aufgabe war vermutlich eine geeignet Superklasse zu definieren in der die gemeinsamen Anteil enthalten sind und die als abstarkte Klasse die Methoden definieren die in den Subklassen dann spezifisch zu implementieren sind. Name der Superklasse z.B. "Person"
 
Also das mit der Superklasse "Person" habe ich schon gemacht:

Java:
public class Person {
    protected int alter;
    public String name;
  
  
}

Du sagtest was von einer abstrakten Klasse um die Methoden "zusammenzufassen" jedoch, wenn ich eine abstrakte klasse dafür nehme kann ich doch die anderen Klassen davon nicht mehr erben lassen, weil dann z.B Lehrer sowohl von Person als auch von der abstrakten Klasse erben müsste. Und soweit ich weiss kann eine Klasse immer nur von EINER Klasse erben.
Dem entsprechen wäre also ein Interface angebracht, oder?

Zu c) hätte ich auch noch eine Verständnisfrage:
Was ist mit "und überprüfe, ob deine Verbesserungen das Klassen-Modell wie gewünscht verbessert haben. " gemeint?
Ist die Antwort vllt: Nein, weil der der Rumpf bei jeder Methode fehlt, wenn man das Programm 1:1 vom UML Diagramm aus programmiert?
Verstehe nicht genau was hier mit "Verbesserungen" und "wie gewünscht" gemeint ist...
 
Ich meinte die Klasse Person abstrakt und vielleicht ein Interface mit der Methode arbeiten. Und mit wie gewünscht heisst ob nun alles was gemeinsam ist auch tatsächlich in der Superklasse ist. Bzw. in dem Interface.
 
Ahh ok ich verstehe, das mach Sinn. Hab die Klasse "Person" jetzt abstract gemacht und ein Interface für die Methode "arbeiten" gemacht.

Also wäre die Antwort auf die Frage in c): "ja, weil die Gemeinsamkeiten in der Superklasse "Person" zusammengefasst wurden" ?

Könntest du mir bitte auch noch eben be der d) helfen ? 🙂
Da sollte ich mein UML Diagramm um die Aspekte: Schulleiter, Klasse/Stufe, Unterrichtsfach, Schule ergänzen.
(habe im ersten Post aus versehen 2 mal Schulleiter gepostet)
Habe das jetzt so gelöst, weiss aber nicht womit ich "Schule" verbinden soll? Eig müsste ich einen Pfeil von "Schule" nach "Hausmeister", "Unterrichtsfach" und "Klasse" ziehen aber das geht ja nicht, weil die Klasse Schule dann 3 Superklassen hätte... Wie mach ich das also?
Hab bei meiner Zeichnung jetzt die Methoden und Variablen weggelassen.
 

Anhänge

  • UML Diagramm d).png
    UML Diagramm d).png
    23,1 KB · Aufrufe: 25
Was sollen die Pfeile in deinem Diagramm denn darstellen ? Vererbungsbeziehungen ? Dann sind sie falsch.
Schulleiter ist ja ein spezieller Lehrer, d.h. erbt davon plus einige Besonderheiten die er als Schulleiter hat. Schule, Klasse und Unterrichtsfach erben aber von keiner der anderen Klassen. Sollst du in dem UML-Diagramm nur die Vererbungshierarchie darstellen ?
 
Also soll ich das so zeichnen? Das sieht irgendwie komisch aus, wenn 3 der 4 neuen Klassen einfach so da sind ohne jeglichen Zusammenhang.

Ja, ich denke ich ich soll nur die Vererbung darstellen.
 

Anhänge

  • UML Diagramm d).png
    UML Diagramm d).png
    12 KB · Aufrufe: 26
Also wenn es die Vererbungsbeziehungen darstellen soll ist es so richtig. Vererbung bedeutet ja immer " ... ist ein ... "
Und eine Schule ist nun mal keine Person bzw. kein Lehrer etc. Stell dir einfach für jedn Pfeil vor dass er bedeutet " .. ist ein ... " überprüfe dein Diagramm damit und du wirst sehen dass es so stimmt.
 

Neue Themen


Zurück
Oben