Inventar als einzelne Klassen anlegen?

Grüßt euch alle!

Als Hausarbeit für die Uni möchten wir ein kleines und einfaches Verwaltungstool mit Java realisieren.
Quasi so klein und einfach wie es mit nur 9 Monaten OOP-Erfahrung machbar ist.

Mein Kommilitone und ich sind uns uneinig darüber, ob wir für die Klasse "Warenhaus" Produkttypen wie "Maus", "Monitor", Tastatur" als Unterklassen anlegen sollen.
Alternativ hätten wir alle Attribute der "Maus", "Monitor", Tastatur" in die Klasse "Warenhaus" integriert.

Daher die Frage: Unter welchen Umständen ist es sinnvoll, für die Klasse "Warenhaus" Produkttypen wie "Maus", "Monitor", Tastatur" als Unterklassen anzulegen?
 

httpdigest

Top Contributor
Unter welchen Umständen ist es sinnvoll, für die Klasse "Warenhaus" Produkttypen wie "Maus", "Monitor", Tastatur" als Unterklassen anzulegen?
Wenn du damit meinst, dass Maus, Monitor und Tastatur jeweils Unterklassen von Warenhaus sein sollen, dann: Unter gar keinen Umständen.
Unterklassen drücken eine "ist-ein" Beziehung aus. Und weder eine Maus noch ein Monitor oder eine Tastatur ist ein Warenhaus.

Ein Warenhaus "hat" oder "besteht aus" einer Menge von Mäusen, Monitoren bzw. Tastaturen. Diese Dinge _sind_ aber kein Warenhaus.
 
K

kneitzel

Gast
Und bitte abstrahieren! Das hört sich recht dubios an, was Du da so schreibst. Ich will Waren mit eurer Software verwalten und nun will ich externe USB3 Festplatten mit aufnehmen. Dann muss ich um ein Software Update bitten, damit ihr mir eine neue Version gebt, die dann auch eine Klasse USB3Festplatte enthält?

Was wird denn in einem Warenhaus verwaltet? Das sind doch bestimmt Waren! Also habt ihr eine Klasse Waren. Und so ihr nicht bestimmte Verhaltensweisen benötigt, kann es das schon gewesen sein. Wenn es (für euer Programm) wichtige Verhaltensweisen gibt, dann gibt es neue Unterklassen. Aber auch da bitte abstrahiert! Also keine Klassen Tiefkühlpizza oder so, sondern dann habt ihr Kühlwaren / Tiefkühlwaren und so ...
 

httpdigest

Top Contributor
Ja, was @kneitzel sagt, wäre dann: Wie macht man es denn in der Realität? Und dort möchte man selbstverständlich, wie er schon sagt, Flexibilität haben. Ich kenne aus meinem beruflichen Alltag auch ein Warenwirtschaftssystem und dort gibt es überhaupt keine Klassen für "Ware" oder "Produkt", sondern das ganze ist einfach ein riesen Persistenztopf mit Key-Value-Paaren als Attribute in einer Datenbank. Weil: Ich will ja auch dann meine Software nicht ändern/neu releasen müssen, wenn ein Produktmanager auf die Idee kommt: "Heute brauchen wir mal pro Produkt eine Sternebewertung" oder "Morgen möchte ich pro Produkt noch das Herkunftsland pflegen"... oder oder oder. Also, ich will auch in der Wahl meiner Produktattribute möglichst flexibel sein und eine Produktpflege-Oberfläche haben, in der ich einfach neue Daten pflegen kann.
Flexibilität ist dort absolut essentiell! Und dann ist das ganze System auch noch in mehrere Microservices aufgeteilt, die jeweils für sich noch eine Teildomäne mit eigenem Persistenzmodell abbilden. Da obliegt es natürlich dem jeweiligen Team selbst, hier entsprechende Abstraktionen und Modelle einzuführen.
Aber so wie ich den TE verstanden habe, geht es hier nur um eine "by the book"-OOP-Design Veranstaltung.
Das wahre Leben ist weitaus hässlicher und komplizierter. :)
 
K

kneitzel

Gast
Aber auch bei so einer Veranstaltung sollten die üblichen Regeln gelten.

Was unterscheidet für eure Applikation eine Maus von einer Tastatur? Oder was zeichnet diese aus?

Ihr könnt das gerne bauen. Aber dann wäre meine Erwartungshaltung, dass ihr lauter Klassen habt wir Maus extends Ware, Tastatur extends Ware u.s.w.
Und dann stellt ihr fest: In den Klassen wird keinerlei Spezialisierung durchgeführt. Beides sind einfach Kartons mit einer Größe, einer Beschriftung, ...
Und da es keine Spezialisierung gibt, steht ein Refactoring an. Und schwups: Verschwinden diese Klassen wieder....

Ggf. an dieser Stelle einfach Kent Becks "Test Driven Development: By Example" Buch nehmen und schauen, was ich da meine: Sein Money Beispiel am Anfang: Es gibt Dollar und Franc als Klassen und dann wird es im laufe der Entwicklung alles ersetzt. Denn die konkrete Währung hat nichts, was nicht direkt in Money abgebildet wird. (Wenn man das nicht kennt, dann ist es auch nicht so wild. Ich hoffe, dass ich es halbwegs vernünftig ausdrücken konnte.)
 

httpdigest

Top Contributor
Aber auch bei so einer Veranstaltung sollten die üblichen Regeln gelten.
Ja natürlich. Ich habe ja auch nicht gegen dich argumentiert. Ich wollte nur versuchen, rüberzubringen, dass es eigentlich keine Regeln gibt, ausser: Designe die Anwendung nach dem konkreten Anwendungsfall und den Anforderungen. Wenn Flexibilität eine Anforderung ist, dann mach es so und so. Wenn es keine Anforderung ist, dann mach es nicht.
 
Unterklassen drücken eine "ist-ein" Beziehung aus. Und weder eine Maus noch ein Monitor oder eine Tastatur ist ein Warenhaus.

Ist folgendes legitim: Klasse Politiker ist eine Unterklasse der Klasse Partei. Ich verstehe das nicht ganz.

Was wird denn in einem Warenhaus verwaltet?
Alles was auch Amazon hat. Also Geräte, Bücher, Lebensmittel, Gutscheine

Also wären die Produktkategorien (Geräte, Bücher, Lebensmittel, Gutscheine) in der selben hierarchiestufe wie die Klasse Warenhaus,, obwohl diese sich in dem Warenhaus befinden? Oder soll ich alle Attribute der Produktkategorien (DPI, Auflösung, Gewicht, Gutscheinwert) in die Klasse "Warenhaus" integrieren?
 

httpdigest

Top Contributor
Ist folgendes legitim: Klasse Politiker ist eine Unterklasse der Klasse Partei.
Ist das eine Frage?
Falls ja: natürlich ist ein Politiker keine Partei. Eine Partei besteht aus Politikern.
EDIT: Wieso habe ich hier gerade das Gefühl, dass das eine eigentlich von dir als Hausaufgabe zu beantwortende Frage gewesen ist...., weil die gerade völlig aus dem Kontext gerissen erscheint und einfach nur etwas mit "Vererbung" zu tun hat. :)

Also wären die Produktkategorien (Geräte, Bücher, Lebensmittel, Gutscheine) in der selben hierarchiestufe wie die Klasse Warenhaus
Was? Nein! Produktkategorien haben überhaupt nichts mit Warenhaus zu tun, was Vererbung betrifft.

Oder soll ich alle Attribute der Produktkategorien (DPI, Auflösung, Gewicht, Gutscheinwert) in die Klasse "Warenhaus" integrieren?
Nein, auch nicht. Wie oben schon gesagt wurde, solltest du eine Klasse "Produkt" oder "GelagertesProdukt" machen, wo du alle Attribute eines Produktes aufnimmst, die alle Produktkategorien gemein haben.
 
Zuletzt bearbeitet:

LimDul

Top Contributor
An der Stelle noch ein Ratschlag: Vererbung sehr sehr sparsam einsetzen. In der Regel ist eine Komposition sinnvoller als Vererbung.
Selten ist es sinnvoll eine Vererbungshierarchie von Anfang an zu planen, meist ergibt sich das im Laufe der Zeit, dass man Gemeinsamkeiten aus getrennten Klassen herausextrahiert.
 
K

kneitzel

Gast
Ja natürlich. Ich habe ja auch nicht gegen dich argumentiert. Ich wollte nur versuchen, rüberzubringen, dass es eigentlich keine Regeln gibt, ausser: Designe die Anwendung nach dem konkreten Anwendungsfall und den Anforderungen. Wenn Flexibilität eine Anforderung ist, dann mach es so und so. Wenn es keine Anforderung ist, dann mach es nicht.
So hatte ich das auch nicht verstanden. Mir ging es jetzt auch mehr um die Thematik der Vorlesung / Übung / Praktika / was auch immer der Uni...

Denn der Punkt ist durchaus wichtig: Da kann die Uni tatsächlich irgend etwas fordern, was so wenig Sinn macht aber was klar befolgt werden muss. Also ich erinnere mich an "Software Engineering" - da hatten wir die Booch Method (War ein Vorläufer von UML). Und da war halt die Virgabe, dass alles Interface und Controller haben musste. Da wird nicht nach Sinn gefragt sondern es mussten Formalismen erfüllt werden.

Wenn sowas hier beim TE auch sein sollte, dann kann unsere Hilfe ggf. in die falsche Richtung laufen ...
 
Wieso habe ich hier gerade das Gefühl, dass das eine eigentlich von dir als Hausaufgabe zu beantwortende Frage gewesen ist
Immer diese Panik ihr könntet versehentlich die Hausaufgaben von jemanden machen. Ich kann dich beruhigen: Das ist nicht strafbar.
Ich habe dieses "völlig aus dem Kontext gerissen" Beispiel ausgewählt, damit mein Komillitone und ich besser verstehen können wozu Unterklassen erstellt werden sollten.
Beim Verfassen von Fragen bekomme ich selbst schon das Gefühl ich habe irgendwas verbotenes getan, dank Leuten wie dir!
Und falls es dich beruhigt, du hast uns bei NUR einer Promille des Gesamtprojekts geholfen. Hoffentlich kann sich das mit deinem Gewissen vereinen, dass du uns nicht zu viel geholfen hast. Dein Arbeitgeber möchte ich nicht sein.

An der Stelle noch ein Ratschlag: Vererbung sehr sehr sparsam einsetzen. In der Regel ist eine Komposition sinnvoller als Vererbung.
Selten ist es sinnvoll eine Vererbungshierarchie von Anfang an zu planen, meist ergibt sich das im Laufe der Zeit, dass man Gemeinsamkeiten aus getrennten Klassen herausextrahiert.
So werden wir das machen. Danke.
 

White_Fox

Top Contributor
Immer diese Panik ihr könntet versehentlich die Hausaufgaben von jemanden machen. Ich kann dich beruhigen: Das ist nicht strafbar.
Ich habe dieses "völlig aus dem Kontext gerissen" Beispiel ausgewählt, damit mein Komillitone und ich besser verstehen können wozu Unterklassen erstellt werden sollten.
Beim Verfassen von Fragen bekomme ich selbst schon das Gefühl ich habe irgendwas verbotenes getan, dank Leuten wie dir!
Wir wollen nur, das ihr etwas lernt. Die meisten hier kennen Gestalten die zwar ihr Studium (nicht selten sogar mit guten Noten) bestanden haben, fachlich aber völlige Nieten und eine Schande für den Berufsstand sind.
Wir helfen gerne weiter, wenn jemand Wissen und Kenntnis erlangen will - aber möchten auch eine gewisse Qualität sicherstellen. Niemand will mit Idioten zusammenarbeiten müssen. Also nimm es ihm nicht übel.

Noch etwas Senf zum Thema Vererbung:
Klassen sollen für gewöhnlich genau eine Aufgabe übernehmen. Was hätte 'Warenhaus' in eurem Fall für eine Aufgabe? Was hätte 'Ware' für eine Aufgabe?
Mit Vererbung sorgsam umzugehen ist richtig. Wenn Gemeinsamkeiten nicht sofort ins Auge springen, dann sollte man es lieber lassen.
Und es ist übrigens auch nicht immer gut, gleich eine Klasse zu bilden. Warum sollte z.B. 'Warengruppe' eine Klasse sein, was hätte sie für eine Aufgabe? Was wäre 'Tiefkühlbrötchen' z.B. für eine Warengruppe? Backware oder Tiefkühlware? Ihr könnt natürlich Tiefkühlware von Backware ableiten - was macht ihr dann mit Fischstäbchen? Wenn ihr Fisch in eurem Warenhaus suchen wollt, sollen Fischstäbchen und Heringkonserven in den Suchergebnissen auftauchen? Sollten Fischstäbchen und Heringkonserven zu einer Warengruppe Fisch gehören?
Ich glaube, es gibt da bessere Möglichkeiten.
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
R Inventar und Items auf ein 2D ArrayFeld einfügen Java Basics - Anfänger-Themen 2
N Einzelne Werte aus einem TreeSet auslesen Java Basics - Anfänger-Themen 2
W String einer Textdatei in einzelne Stringobjekte pro Zeile aufteilen Java Basics - Anfänger-Themen 14
E JTable einzelne Zelle färben Java Basics - Anfänger-Themen 2
B Verkettete Liste durchgehen und einzelne Elemente in neue Liste tun Java Basics - Anfänger-Themen 9
X Wie kann ich Zahlen in einzelne Zifferne zerlegen? Java Basics - Anfänger-Themen 3
O Einzelne Bits umwandeln und prüfen Java Basics - Anfänger-Themen 23
C Auf einzelne Werte aus HashSet zugreifen Java Basics - Anfänger-Themen 10
K Einzelne Email verschieben nicht möglich Java Basics - Anfänger-Themen 3
F Arrays Sätze speichern und einzelne Worte mit Index Angabe auslesen Java Basics - Anfänger-Themen 4
M Einzelne Pixel in einem Bild auslesen und bearbeiten Java Basics - Anfänger-Themen 1
B lanterna einzelne Zeichen aus dem Terminal löschen Java Basics - Anfänger-Themen 0
C Matrixmultiplikation ohne einzelne Elemente aufzurufen Java Basics - Anfänger-Themen 2
T JTable einzelne Zeilen löschen Java Basics - Anfänger-Themen 3
A Variablen String Array in einzelne Strings auspalten Java Basics - Anfänger-Themen 4
J Methoden Einzelne Objekte eines Vectors addieren Java Basics - Anfänger-Themen 10
S Einzelne Buchstaben aus Jtextfield in array Java Basics - Anfänger-Themen 2
R Einzelne Zahlen von der Eingabe (Scan) weiterverarbeiten Java Basics - Anfänger-Themen 3
D Kleinere Positionsangabe als einzelne Pixel bei Image? Java Basics - Anfänger-Themen 28
F Einzelne Werte aus einem Array vergleichen? Java Basics - Anfänger-Themen 8
H Input/Output JTextArea einzelne Zeile auslesen Java Basics - Anfänger-Themen 6
X String einzelne Buchstaben ersetzen Java Basics - Anfänger-Themen 4
M Einzelne Zeilen nach Zeichen auslesen Java Basics - Anfänger-Themen 4
T Erste Schritte einzelne Wörter aus textdatei lesen... Java Basics - Anfänger-Themen 4
M JTable einzelne Spalte rechtsbündig Java Basics - Anfänger-Themen 2
M JUnit - nur einzelne Methode testen? Java Basics - Anfänger-Themen 4
S Einzelne Werte von Array-Feld löschen Java Basics - Anfänger-Themen 15
N TextZeile in einzelne Strings teilen, die mit Komma getrennt sind Java Basics - Anfänger-Themen 4
A einzelne Zeichen aus String auslesen Java Basics - Anfänger-Themen 3
J Von einem String einzelne Wörter speichern Java Basics - Anfänger-Themen 6
R einzelne Bits prüfen Java Basics - Anfänger-Themen 12
H String zerlegen in einzelne Buchstaben (char)?? Java Basics - Anfänger-Themen 7
A Einzelne TeilStrings einfärben Java Basics - Anfänger-Themen 3
S mehrere einzelne klassen in eine datei packen Java Basics - Anfänger-Themen 4
K Datentypen Liste: Einzelne Einträge ändern Java Basics - Anfänger-Themen 2
D Einzelne Ziffern aus einem String Java Basics - Anfänger-Themen 10
B Was für Aufgaben haben die einzelne Entwurfsmuster? Java Basics - Anfänger-Themen 9
C Einzelne Werte eines Arrays ausgeben Java Basics - Anfänger-Themen 2
B Laufzeitverschlechterung durch Auslagerung in einzelne Threads Java Basics - Anfänger-Themen 8
MrMilti einzelne Methoden einer Klasse auslagern Java Basics - Anfänger-Themen 6
T Einzelne Ziffer zusammenfügen (ohne Strings oder Arrays) Java Basics - Anfänger-Themen 2
M einzelne Pixel setzen/auslesen Java Basics - Anfänger-Themen 2
N aus HTML einzelne Inhalte (z.B. Tabelleninhalte) auslesen Java Basics - Anfänger-Themen 10
A Nur einzelne Methode einer anderen Klasse starten Java Basics - Anfänger-Themen 2
G Einzelne Datei im jar verändern ? Java Basics - Anfänger-Themen 5
B Einzelne Zellen in JTable markieren Java Basics - Anfänger-Themen 2
C String.split("") einzelne Positionen abfragen Java Basics - Anfänger-Themen 10
ven000m Primzahl.class wie starte ich diese einzelne Datei? Java Basics - Anfänger-Themen 10
R einzelne Zelle einer JTable bearbeiten Java Basics - Anfänger-Themen 2
M Object zu Int Problem, obwohl einzelne Objecte Int sind =( Java Basics - Anfänger-Themen 2
J String - einzelne Zeichen sortieren Java Basics - Anfänger-Themen 14
G Einzelne Zeilen beschreiben Java Basics - Anfänger-Themen 4
E einzelne Zeile mithilfe Steams aus Textdatei überschreiben Java Basics - Anfänger-Themen 23
F einzelne Buchstaben in JTextField ändern Java Basics - Anfänger-Themen 11
S setCellRenderer für EINZELNE Zelle Java Basics - Anfänger-Themen 9
S Zugriff auf einzelne Buchstaben eines String Java Basics - Anfänger-Themen 16
J Jtable - wie einzelne zelle markieren Java Basics - Anfänger-Themen 8
J Methodenaufrufe abstrakte Klassen, Interfaces Java Basics - Anfänger-Themen 17
M Abstrakte Klassen - Notation Java Basics - Anfänger-Themen 9
Detlef Bosau Nachladen von Klassen zur Laufzeit Java Basics - Anfänger-Themen 24
M Anonyme Klassen - Warum wird in der Konsole nichts ausgegeben? Java Basics - Anfänger-Themen 1
MoxMorris Einige Methoden aus verschiedenen Klassen nacheinander auszuführen läuft seltsam Java Basics - Anfänger-Themen 2
I Klassen von einem package laden, Statisches Feld auslesen und Objekt erstellen Java Basics - Anfänger-Themen 8
I 2 verschiedene Klassen mit gleichen Property vergleichen Java Basics - Anfänger-Themen 13
C Array von Klassen Java Basics - Anfänger-Themen 2
monsterherz 2 Klassen daher Probs mit dem Dateinamen Java Basics - Anfänger-Themen 9
C Kommunikation zwischen 2 Klassen Java Basics - Anfänger-Themen 9
I JPA Query für mehrere Klassen Java Basics - Anfänger-Themen 3
I @Entity Klassen, Service Beans etc. aus einem Share Projekt beziehen? Java Basics - Anfänger-Themen 26
S IntelliJ geht alle Klassen durch Java Basics - Anfänger-Themen 9
I Gleiche Klassen und Methoden in unterschiedlichen Projekten nutzen Java Basics - Anfänger-Themen 2
T variablen klassen übergreifend Java Basics - Anfänger-Themen 12
N Klassen Methoden anderer Klassen aufrufen Java Basics - Anfänger-Themen 4
D Klassen Klassen Kommunikation Java Basics - Anfänger-Themen 12
Encera Auf Objekte aus anderer Klassen zugreifen Java Basics - Anfänger-Themen 20
berserkerdq2 Zwei Klassen Erben von der Klasse A, die eine Klasse kann ich an Methoden übergeben, die als Parameter A haben, die andere nicht? Java Basics - Anfänger-Themen 3
M Andere Methoden in anderen Klassen aufrufen Java Basics - Anfänger-Themen 11
L Methoden in anderen Klassen nutzen Java Basics - Anfänger-Themen 6
D Klassen und Vererbung Java Basics - Anfänger-Themen 2
L Best Practice Annotierte Klassen im Classpath herausfinden Java Basics - Anfänger-Themen 1
P Mit dem Scanner Klassen aufrufen Java Basics - Anfänger-Themen 3
O Klassen Zusammenspiel zwischen 2 Klassen Java Basics - Anfänger-Themen 1
K Zweite Ausgabe von vererbten Klassen Java Basics - Anfänger-Themen 3
M Wie können Klassen nicht-materialisierte Attribute haben, die nur über get/ set-Mehoden simuliert sind? Java Basics - Anfänger-Themen 6
Speedrunner klassen aufrufen Java Basics - Anfänger-Themen 41
M Log4J (v2) nachträglich in allen Klassen hinzufügen Java Basics - Anfänger-Themen 9
D importieren eigener Klassen Java Basics - Anfänger-Themen 12
W Wo ist der Wurm in meinem Grundverständnis von Klassen? Java Basics - Anfänger-Themen 22
S Daten/Klassen/Packages richtig updaten!? Java Basics - Anfänger-Themen 2
alice98 Erste Schritte Liste erstellen ohne vorgefertigte Klassen Java Basics - Anfänger-Themen 1
C Archiv für eigene Klassen Java Basics - Anfänger-Themen 9
S Objekte von zwei klassen in zwei verschiedene Textdateien schreiben Java Basics - Anfänger-Themen 5
elsaaaaaa Wochentag als String ausgeben mit JDK Klassen Java Basics - Anfänger-Themen 6
CptK Generics: Klassen die Interface implementieren, aber selbst nicht das Interface sind Java Basics - Anfänger-Themen 8
Z Mehtode bei Start des Programms ausführen (Klassen übergreifend) Java Basics - Anfänger-Themen 12
J Allgemeines Problem mit Klassen Java Basics - Anfänger-Themen 5
TimoN11 Java Klassen Global einbinden Java Basics - Anfänger-Themen 1
G Java Klassen und Instanzmethoden Java Basics - Anfänger-Themen 15
C Kommunikation zwischen 2 Klassen Java Basics - Anfänger-Themen 3
T Vererbung Verschiedene Attribute für vererbte Klassen Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben