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;
        }
    }
}
 

JStein52

Top Contributor
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"
 

Nummer11

Mitglied
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...
 

JStein52

Top Contributor
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.
 

Nummer11

Mitglied
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

JStein52

Top Contributor
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 ?
 

Nummer11

Mitglied
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

JStein52

Top Contributor
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.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
W Umgang mit Graphics unklar : Erstellung u Uebergabe an Funktion Java Basics - Anfänger-Themen 18
J Fehlermeldung unklar. non-static variable player0 cannot be referenced from a static context Java Basics - Anfänger-Themen 4
B Code Zeile unklar Java Basics - Anfänger-Themen 9
A Nächstes Datum ausgeben, if-Schleife unklar Java Basics - Anfänger-Themen 6
J Methoden Math.random unklar Java Basics - Anfänger-Themen 4
M Javaklasse unklar Java Basics - Anfänger-Themen 3
A Fehlermeldung Unklar, google hilft auch nicht weiter Java Basics - Anfänger-Themen 2
A Fehlermeldung Unklar. Java Basics - Anfänger-Themen 1
M Throws Anweisung innerhalb eines Methodenkopfes unklar Java Basics - Anfänger-Themen 4
M This Methode unklar Java Basics - Anfänger-Themen 2
M Arithemtischer Ausdruck unklar Java Basics - Anfänger-Themen 2
K Maven Dependency unklar Java Basics - Anfänger-Themen 5
K .Class Operator unklar Java Basics - Anfänger-Themen 3
K Schnittstelle - Interface unklar Java Basics - Anfänger-Themen 4
D Klasseninitialisierung unklar Java Basics - Anfänger-Themen 3
B Funktionsweise Iterator unklar Java Basics - Anfänger-Themen 7
T Collections Java Anfänger - Array-Struktur vollkommen unklar Java Basics - Anfänger-Themen 2
C funktion-ausgabe unklar Java Basics - Anfänger-Themen 10
C Ausgabe unklar Java Basics - Anfänger-Themen 5
R Basics unklar.. Java Basics - Anfänger-Themen 13
S Fehlermeldung bei switch unklar Java Basics - Anfänger-Themen 19
T BufferedReader unklar Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben