Problem bei OOP
-
Hallo an alle,
ich habe eine Textaufgabe bekommen.
Ich muss in dieser Aufgabe Klassen finden und feststellen:
Welche Klasse als abstrakte Klasse sein könnten?
Welche Klasse abgeleitet sind?
Welches Nachteil ist, wenn eine Klasse abgeleitet ist.Kann mir jemand ein paar gute Tipps geben aus eigener Erfahrung, wie ihr z.B. eine Klasse aus der Aufgabestellung finden könntet u.s.w? Es mussen doch irgendwelche allgemeinen Regeln sein.
Vielen Dank im Voraus
Slawik
-
Ich habe noch vergessen zu sagen, dass ich mit C++ programmiere
-
der gaengige Trick ist folgender:
man schreibt auf was das Programm tun soll, zB so:
Ein Kunde geht in die Videothek und leiht sich ein Video aus.
Dann suchen wir uns alle Hauptwoerter raus und betrachten sie naeher. Die meisten davon sind unsere Klassen:
Kunde - ja, passt
Videothek - naja, zumindest eine art Verwaltung der Videos werden wir brauchen
Video - jagut, wir haben also 3 klassen. das reicht nicht, ist aber mal ein ansatz.
nun gehen wir die verben durch:
gehen - nein, damit koennen wir nichts anfangen
leihen - ja, passtdass ist die funktionalitaet die wir brauchen.
wir haben also folgende sachen:
+------ Videothek --------------+ | Kunde >>> leiht aus >>> Video | +-------------------------------+
jetzt ueberlegt man sich die details.
welche daten muss der kunde haben, wie genau geht das ausleihen vorsich, etc.aber das wichtige ist: durch diese schnelle analyse haben wir eine grobe struktur erstellt.
jetzt koennen wir beziehungen ueberlegen.
in welcher beziehung stehen die sachen zueinander.wir haben zB nicht nur videos sondern dvds, vhs und cds.
ist es nun klug zu sagen dass dies alles "Ausleih-Einheiten" sind? Oder der einfachheit halber "Videos" (wir sehen jetzt mal davon ab dass cds idR musik beinhalten ;)).
ist es klug eine abstrakte klasse "video" zu machen?
nun testen wir mal:Ein Kunde leihnt eine oder mehrere DVDs, CDs und VHSs aus
kann man hier DVD, CD und VHS durch Video ersetzen? ja.
nun fuer eine vererbung muss sich jede DVD, etc. wie ein Video verhalten: das ist in unserem beispiel gegeben (idR sind diese Szenarien dann natuerlich komplexer, so dass es nicht so leicht ist ;)).
ob Video jetzt abstrakt ist oder nicht, kann man IMHO nicht wirklich aus dem Modell ersehen. aber Video fuehlt sich recht abstrakt an. hier fehlen mir dann aber die ratschlaege wie man das rausfinden kann.
abstrakt ist halt alles was keine konkrete manifestation hat - aber wie man das vernuenftig feststellt, keine ahnung.
und was fuer nachteile ableitungen bringen ist mir nicht klar, sorry
-
Klassen sollen ja den Sinn haben, im realen Leben bekannte Vorgänge und Denkstrukturen einfach nachzubilden.
Insofern... Guck Dir an, was dort für Dinge vorkommen, die Ähnlichkeiten aufweisen, z.B. Personen, die sich dadurch gleichen, dass sie etwas gemeinsam haben (z.B. ihr Beruf: Arbeiter oder ähnliches) aber in bestimmten Punkten wieder unterscheiden. Dann wäre z.B. "Arbeiter" eine Klasse, und diese könnte wieder um von einer Klasse "Person" abgeleitet sein. Und so hangelst Du Dich weiter.
Schreib doch mal die Aufgabe hier rein...
edit: okay da ists ja schon ausführlich und besser
-
fand den werkzeug, material, automat ansatz ganz interessant.
materialien sind dinge, die keine eigene funktionalität besitzen. wie beispielsweise eine videokasette. da sind nur daten drauf, die braucht also keine funktionen. ein regal, in dem ein video steht, wäre auch ein material.
ein werkzeug wäre beispielsweise ein etikettenlesegerät. das hat funktionalität. es bekommt als eingabe ein etikett und liefert als ausgabe den titel der videokasette, wer sie ausgeliehen hatte, das genre usw.
ein automat ist etwas, was dinge automatisiert, die ein mensch normalerweise von hand erledigt. also beispielsweise das lesegerät auf die videokassette halten, das genre ablesen und in das enstprechende regal stellen.
wenn man texte unter diesen drei aspekten durchforstet, findet man meistens schnell raus, was einfache datenhalter klassen sind (material), die häufig ein interface als grobe basis besitzen und die einzelnen varianten sind ableitungen, was werkzeuge sind, die teils aufwendige methoden zur verfügung stellen, aber nicht untereinander kommunizieren müssen und wo die automaten sind, die all die ganzen klassen verwalten und verwenden.
-
Vielen Dank an alle