Vererbung Ueben mit kleiner Datenstruktur von Räumen

ocsme

Top Contributor
Guten Tag,

hab mal wieder eine Frage :p
Ich habe ein paar Klassen geschrieben (Räume). Es sind folgende Räume:
Raum, Seminarraum, Hörsaal, Professorbüro, Büro und Rechnerraum.

Nun möchte ich eine Main schreiben in der ich per Zufall Räume erstelle und dann diese Räume mit Sitzplätzen initialisiere. Doch es dürfen nur Seminarraum, Hörsaal, Professorbüro Sitzplätze bekommen. Das ganze klappt auch soweit doch muss ich das ganze wirklich so umständlich machen?
In der Klasse Raum von denen ich die andere Räume ableite habe ich nur ein int wert drin

Java:
public class Raum {
    int nummer;
//    public abstract void setSitze(int sitze);
//    public abstract int getSitze();
   
}

In den anderen Klassen stehen nur getter und setter drin :)

so sieht meine Main Klasse aus:
Java:
public class MainRaueme {
   
    public static Raum[] befuehllenZufall(Raum[] raum) {
        for(int i=0;i<raum.length;i++) {
            int k=(int)(Math.random()*5+1);
            if(k==1)
                raum[i]=new Seminarraum();
            else if(k==2)
                raum[i]=new Hoersaal();
            else if(k==3)
                raum[i]=new Buero();
            else if(k==4)
                raum[i]=new Rechnerraum();
            else if(k==5)
                raum[i]=new Professorbuero();
        }
       
        return raum;
    }
   
    public static void main(String[] args) {
       
        Raum[] raum = new Raum[10];
        befuehllenZufall(raum);
       
        for(int i=0;i<raum.length;i++) {
            System.out.println(raum[i].toString());
            if(raum[i] instanceof Seminarraum) {
                int k=(int)(Math.random()*50+1);
                ((Seminarraum) raum[i]).setSitze(k);
            }
            else if(raum[i] instanceof Hoersaal) {
                int k=(int)(Math.random()*50+1);
                ((Hoersaal) raum[i]).setSitze(k);
            }
            else if(raum[i] instanceof Professorbuero) {
                int k=(int)(Math.random()*50+1);
                ((Professorbuero) raum[i]).setSitze(k);
            }
        }
       
        int anzahl=0;
        for(int i=0;i<raum.length;i++) {
            if(raum[i] instanceof Seminarraum) {
                Seminarraum tmp = (Seminarraum) raum[i];
                System.out.println(tmp.toString()+" "+tmp.getSitze());
                anzahl+=tmp.getSitze();
            }
            else if(raum[i] instanceof Hoersaal) {
                Hoersaal tmp = (Hoersaal) raum[i];
                System.out.println(tmp.toString()+" "+tmp.getSitze());
                anzahl+=tmp.getSitze();
            }
            else if(raum[i] instanceof Professorbuero) {
                Professorbuero tmp = (Professorbuero) raum[i];
                System.out.println(tmp.toString()+" "+tmp.getSitze());
                anzahl+=tmp.getSitze();
            }
        }
        System.out.println(anzahl);
       
       
    }

}

Die Klasse ist noch nicht aufgeräumt die zwei schleifen kommen noch in jeweils 1 Methode :)

Meine Frage ist eigentlich nur ob die "if-kaskeden" in meinen Schleifen nicht schöner/besser gehen oder muss man das so umständlich machen?
Ich hatte erst angefangen in der Klasse Raum jede Methode rein zu packen und die Klasse dann einfach abstract gemacht doch das wird eine Fette Basisklasse oder eben eine Unvollständige Klasse.
Ich würde sie gerne so lassen ;) also Standard Klasse :)

LG
 

L0oNY

Bekanntes Mitglied
Die Vererbung macht an dieser Stelle keinen Sinn, denn alle deine Unterklassen haben die gleichen Eigenschaften (Anzahl der Sitze). Warum dann vererben und in allen Klassen die Methoden zu wiederholen, wenn man sie einmal in der Oberklasse definieren kann?

Was ist für dich der Sinn einer Vererbung?
 

mrBrown

Super-Moderator
Mitarbeiter
Ich hatte erst angefangen in der Klasse Raum jede Methode rein zu packen und die Klasse dann einfach abstract gemacht doch das wird eine Fette Basisklasse oder eben eine Unvollständige Klasse.
Ich würde sie gerne so lassen ;) also Standard Klasse :)
Und was spricht gegen eine fette Basisklasse?

Aktuell hast du eine Klasse ohne Methoden, etwas, was man generell vermeidet.
Und zusätzlich hast du Klassen, die zwar Methoden haben (und zwar alle genau identische), aber keine eigenen Felder - auch etwas, was man vermeidet.


Dein Weg, alles in die eine Klasse zu packen, ist schon richtig - nur der Schluss daraus nicht.
Anstatt dann Code in Unterklassen zu kopieren, kann man diese einfach löschen, sie haben offensichtlich keinen Grund, als Klasse zu existieren.
 

ocsme

Top Contributor
Und was spricht gegen eine fette Basisklasse?

unser Prof meinte das sollte man vermeiden.
Soll ich mal alle Klassen Posten. Da sind auch noch 3 Interfaces dabei :D
Also haben die Klassen schon Methoden die aus den Interfaces :)

Ich denke aber ihr habt recht ich packe das abrufen der sitze und der gleichen in die Räume Klasse doch wie frage ich dann später ab ob ein Raum überhaupt Sitzplätze hat denn ich will die Summe aller Sitzplätze später erhalten :)

Das Klappt bei mir ja auch :) nur eben denke ich mal wieder nicht schön :D

LG
 

mrBrown

Super-Moderator
Mitarbeiter
unser Prof meinte das sollte man vermeiden.
Gab's auch ne Begründung dafür?

Also ja, fette Klassen an sich sind immer doof - aber die Methoden dann einfach in jede Unterklasse kopieren ist das absolute Gegenteil von sinnvoll ;)

Ich denke aber ihr habt recht ich packe das abrufen der sitze und der gleichen in die Räume Klasse doch wie frage ich dann später ab ob ein Raum überhaupt Sitzplätze hat denn ich will die Summe aller Sitzplätze später erhalten :)
Naja, entweder er hat 0 oder eben N Sitzplätze...
 

ocsme

Top Contributor
so bevor wir aneinander vorbei reden hier mal die aufgabenstellung:
Entwerfen Sie eine objektorientierte Datenstruktur zur Verwaltung von Räumen. Bei
einer zuvor durchgeführten Analyse wurden bereits folgende Eigenschaften für die
verschiedenen Räume ermittelt:
 Jeder Raum wird durch seine Nummer gekennzeichnet.
 Ein Seminarraum ist ein Raum, der sich durch die Fläche seiner Tafel
auszeichnet. Außerdem ist für einen Seminarraum relevant, ob dort ein
Beamer vorhanden ist.
 Ein Hörsaal ist ein Raum, für den neben der Fläche der Tafel auch die Anzahl
der Sitzreihen wichtig ist.
 Neben den Räumen mit Tafel gibt es auch Räume, die als Büros genutzt
werden. Für diese Räume ist ein wichtiges Attribut, auf welcher Etage sie sich
befinden.
 Ein Professorenbüro ist ein Büro, für das der Name des Professors wichtig ist.
 Ein Rechnerraum ist ein Büro, das mit einer bestimmten
Datenübertragungsrate an das Netzwerk der Fachhochschule angeschlossen
ist.
 Alle Räume mit Tafeln sind entweder Seminarräume oder Hörsäle. Es kann
aber Büros geben, die weder Professorenbüros noch Rechnerräume sind.
 Man kann sowohl Professorenbüros als auch Räume mit Tafeln als
Prüfungsräume nutzen. Es ist nicht immer leicht zu erkennen, wie viele Plätze
man bei einer Prüfung in dem jeweiligen Raum verwenden kann. Daher stellen
diese Räume eine Methode zur Verfügung, mit der man die Anzahl der Plätze
berechnen kann, die in einer Prüfung verwendet werden können.
 

ocsme

Top Contributor
Hast recht doch ich Poste mal grade die Klassen ich fahre gleich nach Hause vielleicht kann in der Zeit jemand drüber schauen und ich hab später eine Antwort von euch :)
Wie gesagt es klappt ja so :D hihi =) bin ich ja schon mal froh es überhaupt hinbekommen zu haben :p


Java:
public class Seminarraum extends Raum implements Beamer, Sitze, Tafel{
    private boolean beamer;
    private double flaeche;
    private int sitze;
   
   
    public boolean hasBeamer() {
        return beamer;
    }

    public double getFlaeche() {
        return flaeche;
    }
   
    public int getSitze() {
        return sitze;
    }
   
    public void setBeamer(boolean beamer) {
        this.beamer=beamer;
    }
   
    public void setFlaeche(double flaeche) {
        this.flaeche=flaeche;
    }
   
    public void setSitze(int sitze) {
        this.sitze=sitze;
    }
   
    public String toString() {
        return "Seminarraum";
    }
   

}

Java:
public class Hoersaal extends Raum implements Sitze, Tafel {
    private int sitze;
    private double flaeche;
   
    public double getFlaeche() {
        return flaeche;
    }

    public int getSitze() {
        return sitze;
    }
   
    public void setSitze(int sitze) {
        this.sitze=sitze;
    }
   
    public void setFlaeche(double flaeche) {
        this.flaeche=flaeche;
    }
   
    public String toString() {
        return "Hoersaal";
    }

}

Java:
public class Professorbuero extends Buero implements Sitze {
   
    private String name;
    private int sitze;
   
    public String getName() {
        return name;
    }
   
    public int getSitze() {
        return sitze;
    }
   
    public void setName(String name) {
        this.name=name;
    }
   
    public void setSitze(int sitze) {
        this.sitze=sitze;
    }
   
    public String toString() {
        return "Professorbuero";
    }

}

Java:
public  class Raum {
    int nummer;
//    public abstract void setSitze(int sitze);
//    public abstract int getSitze();
   
}

Java:
public interface Sitze {
    public int getSitze();

}

Java:
public interface Tafel {
    public double getFlaeche();
}

Java:
public interface Beamer {
    public boolean hasBeamer();
   

}

Java:
public class Rechnerraum extends Buero {
    private int datenRate;
   
    public int getDatenRate() {
        return datenRate;
    }
   
    public void setDatenRate(int datenRate) {
        this.datenRate=datenRate;
    }
   
    public String toString() {
        return "Rechnerraum";
    }
   

}

Java:
public class Buero extends Raum {
    private int stockwerk;
   
    public int getStockwerk() {
        return stockwerk;
    }
   
    public void setStockwerk(int stockwerk) {
        this.stockwerk=stockwerk;
    }
   
    public String toString() {
        return "Buero";
    }
}
 

ocsme

Top Contributor
Das mit den Settern und Gettern habe ich auch nur so gemacht um eben auf die INSGESAMTE ANZAHL DER SITZPLÄTZE zu kommen :)
Hier nochmal die Main :D
Java:
public class MainRaueme {
   
    public static Raum[] befuehllenZufall(Raum[] raum) {
        for(int i=0;i<raum.length;i++) {
            int k=(int)(Math.random()*5+1);
            if(k==1)
                raum[i]=new Seminarraum();
            else if(k==2)
                raum[i]=new Hoersaal();
            else if(k==3)
                raum[i]=new Buero();
            else if(k==4)
                raum[i]=new Rechnerraum();
            else if(k==5)
                raum[i]=new Professorbuero();
        }
       
        return raum;
    }
   
    public static void main(String[] args) {
       
        Raum[] raum = new Raum[10];
        befuehllenZufall(raum);
       
        for(int i=0;i<raum.length;i++) {
            System.out.println(raum[i].toString());
            if(raum[i] instanceof Seminarraum) {
                int k=(int)(Math.random()*50+1);
                ((Seminarraum) raum[i]).setSitze(k);
            }
            else if(raum[i] instanceof Hoersaal) {
                int k=(int)(Math.random()*50+1);
                ((Hoersaal) raum[i]).setSitze(k);
            }
            else if(raum[i] instanceof Professorbuero) {
                int k=(int)(Math.random()*50+1);
                ((Professorbuero) raum[i]).setSitze(k);
            }
        }
       
        int anzahl=0;
        for(int i=0;i<raum.length;i++) {
            if(raum[i] instanceof Seminarraum) {
                Seminarraum tmp = (Seminarraum) raum[i];
                System.out.println(tmp.toString()+" "+tmp.getSitze());
                anzahl+=tmp.getSitze();
            }
            else if(raum[i] instanceof Hoersaal) {
                Hoersaal tmp = (Hoersaal) raum[i];
                System.out.println(tmp.toString()+" "+tmp.getSitze());
                anzahl+=tmp.getSitze();
            }
            else if(raum[i] instanceof Professorbuero) {
                Professorbuero tmp = (Professorbuero) raum[i];
                System.out.println(tmp.toString()+" "+tmp.getSitze());
                anzahl+=tmp.getSitze();
            }
        }
        System.out.println(anzahl);
       
       
    }

}
 

ocsme

Top Contributor
werde alles mal in die Raum Klasse Packen :)
dann schau ich mal wie die Main dann aussieht :)
Danke nochmals :)
Poste später alles hab noch zu tun! :D

LG
 
Zuletzt bearbeitet:

ocsme

Top Contributor
Entschuldigung ich glaube ich war vorhin "betrunken"! :(
So geht es ja viel leichter :D
Nochmals Danke für die Klasse Idee :)
Hier jetzt die 2 Klassen:
Raum:
Java:
public  class Raum {
    protected int nummer;
    protected int sitze;
   
//    public abstract void setSitze(int sitze);
//    public abstract int getSitze();
   
    public int getSitze() {
        return sitze;
    }
   
    public void setSitze(int sitze) {
        this.sitze=sitze;
    }
   
}

Und die Main:
Java:
public class MainRaueme {
   
    public static Raum[] befuehllenZufall(Raum[] raum) {
        for(int i=0;i<raum.length;i++) {
            int k=(int)(Math.random()*5+1);
            if(k==1)
                raum[i]=new Seminarraum();
            else if(k==2)
                raum[i]=new Hoersaal();
            else if(k==3)
                raum[i]=new Buero();
            else if(k==4)
                raum[i]=new Rechnerraum();
            else if(k==5)
                raum[i]=new Professorbuero();
        }
       
        return raum;
    }
   
    public static void sitzeFuellen(Raum[] raum) {
        for(int i=0;i<raum.length;i++) {
            if(raum[i] instanceof Seminarraum || raum[i] instanceof Hoersaal || raum[i] instanceof Professorbuero) {
                int k=(int)(Math.random()*50+1);
                raum[i].setSitze(k);
            }
        }
    }
   
    public static int anzahlSitze(Raum[] raum) {
        int anzahl=0;
        for(int i=0;i<raum.length;i++) {
            if(raum[i] instanceof Seminarraum || raum[i] instanceof Hoersaal || raum[i] instanceof Professorbuero)
                anzahl+=raum[i].getSitze();
           
        }
        return anzahl;
    }
   
    public static void main(String[] args) {
       
        Raum[] raum = new Raum[10];
        befuehllenZufall(raum);
        sitzeFuellen(raum);
        System.out.println(anzahlSitze(raum));
       
       
    }

}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
imocode Vererbung Problem mit Vererbung Java Basics - Anfänger-Themen 2
M Vererbung - Polymorphie Java Basics - Anfänger-Themen 37
L Java- Vererbung Java Basics - Anfänger-Themen 4
ineedhelpinjava Vererbung Java Basics - Anfänger-Themen 12
ineedhelpinjava Vererbung Java Basics - Anfänger-Themen 1
I JSON / XML Struktur mit Vererbung / Interfaces Java Basics - Anfänger-Themen 0
M Interface oder Vererbung? Java Basics - Anfänger-Themen 12
M Vererbung Java Basics - Anfänger-Themen 6
M Designentscheidung von Attributen/Methoden im Falle von Vererbung Java Basics - Anfänger-Themen 8
M Generics Vererbung Listen Java Basics - Anfänger-Themen 2
A Methoden Vererbung und Interface Java Basics - Anfänger-Themen 14
D Klassen und Vererbung Java Basics - Anfänger-Themen 2
U Vererbung Java Basics - Anfänger-Themen 7
D Vererbung Java Basics - Anfänger-Themen 3
K Schleife berechnet kein Ergebnis (Vererbung) Java Basics - Anfänger-Themen 6
00111010101 Objektorientiertes Programmieren mit Vererbung (Zahlen in Array verschwinden) Java Basics - Anfänger-Themen 3
W Zur Vererbung: Wann und wie? Java Basics - Anfänger-Themen 35
H Datenkapselung, Vererbung und UML Java Basics - Anfänger-Themen 16
districon Super-Stichwort/ Vererbung Java Basics - Anfänger-Themen 3
YaU Vererbung erstellt NullPointerException? Java Basics - Anfänger-Themen 4
1 Vererbung Klassenattribute Java Basics - Anfänger-Themen 9
TimoN11 Frage zu Java-Vererbung (Cast) Java Basics - Anfänger-Themen 5
N Thema Vererbung Java Basics - Anfänger-Themen 31
A Vererbung Vererbung Übung Java Basics - Anfänger-Themen 5
B Vererbung - Sichtbarkeitsmodifikation - protected Java Basics - Anfänger-Themen 10
B Best Practice Unschlüssig ob Vererbung oder Interface Java Basics - Anfänger-Themen 2
G Java Vererbung Java Basics - Anfänger-Themen 8
Y Vererbung Konto - Anfangsprobleme Java Basics - Anfänger-Themen 7
A Vererbung Klassen im Bezug auf Auto´s Java Basics - Anfänger-Themen 18
A Klassen Vererbung und zusätzliche Unterklassen Java Basics - Anfänger-Themen 23
M Vererbung mit Enums Java Basics - Anfänger-Themen 8
Kirby.exe Vererbung im Detail erklärt? Java Basics - Anfänger-Themen 9
N Modellierung, vererbung, Java Basics - Anfänger-Themen 163
M Fehlendes Verständnis für dynamische Bindung und Vererbung Java Basics - Anfänger-Themen 13
W OOP Vererbung im Computerspiel Java Basics - Anfänger-Themen 7
J Probleme mit Vererbung Java Basics - Anfänger-Themen 4
I Vererbung Java Basics - Anfänger-Themen 13
W OOP Vererbung und Problem bei Zählschleife in einer Methode Java Basics - Anfänger-Themen 10
W Methoden Verständnisfrage Vererbung von Methoden Java Basics - Anfänger-Themen 14
V Vererbung Java Basics - Anfänger-Themen 2
J Frage zur Vererbung Java Basics - Anfänger-Themen 1
J Vererbung Java Basics - Anfänger-Themen 3
U Was löst meine NullPointerException aus? (Vererbung) Java Basics - Anfänger-Themen 12
O Umgang mit Vererbung verstehen Java Basics - Anfänger-Themen 4
A Vererbung/Interfaces/Generics Java Basics - Anfänger-Themen 12
O Vererbung änderung des Konstruktors Java Basics - Anfänger-Themen 8
L Vererbung Java Basics - Anfänger-Themen 5
E HashMap+Vererbung Java Basics - Anfänger-Themen 11
E Vererbung super-Methoden Aufruf Java Basics - Anfänger-Themen 3
B Java Vererbung Fragen (zu Code Beispiel) Java Basics - Anfänger-Themen 3
A Objekterstellung bei der Vererbung Java Basics - Anfänger-Themen 7
P Vererbung Warum funktioniert die Vererbung hier nicht Java Basics - Anfänger-Themen 14
S Vererbung Java mehrfach Java Basics - Anfänger-Themen 10
B Objekte zählen/ Vererbung/ Kopplung/ Interface/ Abstract Class Java Basics - Anfänger-Themen 5
A Klassen Vererbung privater Methoden und Member Java Basics - Anfänger-Themen 12
A Konstruktoren Vererbung Java Basics - Anfänger-Themen 3
ReinerCoder Vererbung von JFrame in einer Klasse entfernen Java Basics - Anfänger-Themen 5
W Vererbung, abstract und Konstruktoren Java Basics - Anfänger-Themen 30
J Vererbung und Methodenaufruf Java Basics - Anfänger-Themen 11
G Polymorphie, Vererbung, statischer Typ, Laufzeittyp Java Basics - Anfänger-Themen 2
H Vererbung mit private instanzvariablen Java Basics - Anfänger-Themen 9
S Vererbung Funktionsweise Code zur Vererbung Java Basics - Anfänger-Themen 1
C Methoden Vererbung private Attribute/public Methoden Java Basics - Anfänger-Themen 4
S Verständnis Vererbung Java Basics - Anfänger-Themen 3
D JavaFX Vererbung Java Basics - Anfänger-Themen 2
U Vererbung Generizität und Vererbung Java Basics - Anfänger-Themen 4
A Vererbung bei Klassen mit Objekt der Klasse im Konstruktor Java Basics - Anfänger-Themen 4
K Vererbung Octagon von Circle Java Basics - Anfänger-Themen 0
B Hilfe bei Vererbung Java Basics - Anfänger-Themen 2
D Vererbung Frage zum Klassenaufbau mit Vererbung Java Basics - Anfänger-Themen 1
T Vererbung und interface. Java Basics - Anfänger-Themen 1
S Gehaltsberechnung (Vererbung, abstrakte Methoden) Java Basics - Anfänger-Themen 6
S Vererbung Java Basics - Anfänger-Themen 1
F Vererbung in zwei Richtungen? Java Basics - Anfänger-Themen 14
D Vererbung / Polymorphie Java Basics - Anfänger-Themen 5
O Vererbung Java Basics - Anfänger-Themen 5
MiMa Vererbung Theorie OK, Praxis ?? Java Basics - Anfänger-Themen 4
Arif Vererbung Vererbung Variablen überschreiben Java Basics - Anfänger-Themen 1
C Vererbung - Ausgaben bestimmen Java Basics - Anfänger-Themen 6
S Vererbung Java Basics - Anfänger-Themen 10
L Setter und Getter/Vererbung Java Basics - Anfänger-Themen 6
C Konstruktoren und Vererbung Java Basics - Anfänger-Themen 2
J Kleinere Frage zur Vererbung/Objekterzeugung Java Basics - Anfänger-Themen 2
G Vererbung Java Basics - Anfänger-Themen 12
J Vererbung privater Variablen Java Basics - Anfänger-Themen 7
J Vererbung Vererbung von Methoden Java Basics - Anfänger-Themen 6
B Vererbung Java Basics - Anfänger-Themen 12
K Vererbung (super) Java Basics - Anfänger-Themen 2
A ArrayQueue mit Exceptions und Vererbung Java Basics - Anfänger-Themen 3
J Java: static bei Vererbung Java Basics - Anfänger-Themen 5
C Vererbung Java Basics - Anfänger-Themen 4
L Vererbung Java Basics - Anfänger-Themen 3
J Klassenorganisation | Vererbung Java Basics - Anfänger-Themen 1
B Vererbung Vererbung Java Basics - Anfänger-Themen 2
N Generics Vererbung Wildcard Interface Java Basics - Anfänger-Themen 8
A Benötige Hilfe bei Vererbung Java Basics - Anfänger-Themen 1
M Anfängerprobleme mit Vererbung Java Basics - Anfänger-Themen 27
J Vererbung Java Basics - Anfänger-Themen 9
F Vererbung von Attributen zwischen zwei Klassen Java Basics - Anfänger-Themen 6
J Konstruktor Problem bei Vererbung Java Basics - Anfänger-Themen 1

Ähnliche Java Themen

Neue Themen


Oben