Inventar als einzelne Klassen anlegen?

  • Themenstarter beginnerproject
  • Beginndatum
B

beginnerproject

Mitglied
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?
 
H

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.
 
Kirby.exe

Kirby.exe

Top Contributor
Man könnte eine Klasse „Gegenstand“ erstellen und diese wäre dann die Oberklasse von Maus und Tastatur etc :)
 
kneitzel

kneitzel

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

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. :)
 
kneitzel

kneitzel

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

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

beginnerproject

Mitglied
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?
 
H

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:
L

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

kneitzel

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

beginnerproject

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

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
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
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 2
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
S Klassen instanziieren und verwenden von Getter und Setter Java Basics - Anfänger-Themen 4
B Variablen Variablen übertragen ohne Klassen Java Basics - Anfänger-Themen 5
C Fernseher-Aufgabe (Methoden, Klassen und Objekte) Java Basics - Anfänger-Themen 63
H Methoden in großen Klassen gruppieren oder auslagern? Java Basics - Anfänger-Themen 10
B Abstrakte Klassen Java Basics - Anfänger-Themen 11
Y Klassen Klassen und Objekte Java Basics - Anfänger-Themen 3
Y Klassen Klassen und Objekte mit set und get Java Basics - Anfänger-Themen 0
A Generischen Klassen Java Basics - Anfänger-Themen 8
A Vererbung Klassen im Bezug auf Auto´s Java Basics - Anfänger-Themen 18
A Generische Klassen/Interface Java Basics - Anfänger-Themen 1
A Klassen Vererbung und zusätzliche Unterklassen Java Basics - Anfänger-Themen 23
J 2 klassen benutzen Java Basics - Anfänger-Themen 5
A Klassen und methoden Java Basics - Anfänger-Themen 15
A Bankweverwaltung mit Klassen und Methoden Java Basics - Anfänger-Themen 14
J Klassen Problem Java Basics - Anfänger-Themen 8
I Java Klassen "Graphics" und "MouseEvent" kombinieren Java Basics - Anfänger-Themen 7
I Klassen als Datentyp nutzen? Java Basics - Anfänger-Themen 11
M Aufsplitten von Methoden in andere Klassen Java Basics - Anfänger-Themen 2
M (Sehr großes Problem) Listen als static in anderen Klassen verwendet Java Basics - Anfänger-Themen 12
C Klassen objektorientiert aufteilen Java Basics - Anfänger-Themen 6
hello_autumn Klassen Anzahl sowie die Anzahl der Junit Tests ermitteln? Java Basics - Anfänger-Themen 8
A Auf Eigenschaften von Objekten anderer Klassen zugreifen Java Basics - Anfänger-Themen 5
F Klassen und Pakete Projektübergreifend (Eclipse) Java Basics - Anfänger-Themen 6
V_Fynn03 Klassen Überweisungen tätigen und einzahlen mit 2 Klassen Java Basics - Anfänger-Themen 1
W Abarbeitungsreihenfolge Anonyme Klassen Java Basics - Anfänger-Themen 2
V_Fynn03 Bruchrechner programmieren (2 Klassen) Java Basics - Anfänger-Themen 9
D OOP- Eine Klasse in mehrere Klassen aufteilen Java Basics - Anfänger-Themen 7
J Problem mit Array: 2 Klassen Java Basics - Anfänger-Themen 2
W Frage zu anonymen Klassen Java Basics - Anfänger-Themen 4
Curtis_MC Parameter-Übergabe bei Klassen und Methoden Java Basics - Anfänger-Themen 12
E Klassen implementieren Java Basics - Anfänger-Themen 94
T Interfaces in erbenden Klassen Java Basics - Anfänger-Themen 2
C Methoden/Klassen Übergabewerte Java Basics - Anfänger-Themen 8
C Java Klassen/Methoden/Übergabeparameter Java Basics - Anfänger-Themen 4
L Wie geht man bei mehreren Action Klassen vor? Java Basics - Anfänger-Themen 0
P Datentypen, Klassen, Operatoren, Wrapperklassen Java Basics - Anfänger-Themen 2
L Wie teilt man ein Programm in vernünftige Klassen ein? Java Basics - Anfänger-Themen 10
T Klassen Denkfehler im Klassen "dynamisch" instanzieren? Java Basics - Anfänger-Themen 4
P Zugriff auf Variablen anderer Klassen in Greenfoot Java Basics - Anfänger-Themen 1
A Methode, Klassen Java Basics - Anfänger-Themen 3
B UML Klassen Diagramm zu Java Code Programmieren und ausführen Java Basics - Anfänger-Themen 21

Ähnliche Java Themen

Anzeige

Neue Themen


Oben