Basisklassen entwerfen



  • Hallo zusammen,

    wer kann mir bei folgender Aufgabe helfen. Ich weiß nicht wie das geht.

    Entwerfen Sie drei Basisklasse Ellipse, Rechteck, Dreieck! Entwickeln Sie zu den Basisklassen geeignete abgeleitete Klassen, wie Kreis, Quadrat, gleichseitiges Dreieck, gleichschenkliges Dreieck! Zu den drei Basisklassen ist eine abstrakte Basisklasse "Figur" festzulegen. In dieser Basisklasse sind geeignete rein virtuelle Methoden als Schnittstelle für die gesamte Klassenhierarchie zu definieren.Entsprechend der Schnittstelle sind dann in allen abgeleiteten Klassen geeignete Methoden zu definieren. In der Klasse "Figur" ist eine Methode "Druck" zu definieren. "Druck" soll zwei weitere Methoden "Fläche" und "Daten" aufrufen, die virtuell angelegt sein sollen, sodass bei Aufruf von Druck mit einem bestimmten Objekt jeweils die richtigen "Daten"-Angaben sowie die richtige Fläche berechnet werden. Testen Sie Ihren Entwurf mit einem geeigneten Hauptprogramm!

    Gruß

    Stefan



  • Was hast Du bereits geschafft? Kannst Du bereits mit C++ programmieren? Wenn ja, wie gut? Wofür brauchst Du das?

    Fragen über Fragen...



  • Was hast du schon? Wo kommst du nicht weiter? Hier wird dir niemand eine Komplettlösung liefern. Du musst zeigen, dass du dich mit der Theorie befasst hast und auch bereit bist zu lernen, dann wird dir gerne geholfen.

    P.S.: Immer diese langweiligen Formen, die nicht mal ein gutes Beispiel für Vererbung sind...



  • Ich kann noch nicht in C++ programmieren, aber die notwendige Software habe ich. Ich benutze Notepad ++ und Borland. Muss diese Aufgabe aber in der nächsten Woche in der Schule abgeben. Wir sollen uns das selber aneignen. Voll ätzend.



  • Stefan31 schrieb:

    Ich kann noch nicht in C++ programmieren, aber die notwendige Software habe ich.

    Immerhin eine gute Voraussetzung. :p

    Stefan31 schrieb:

    Wir sollen uns das selber aneignen. Voll ätzend.

    Bist du sicher? Das kann ich mir nicht wirklich vorstellen. Gerade weil Vererbung und Polymorphie sehr viel Grundverständnis erfordern, und du kennst dich mit C++ kein bisschen aus. Hattet ihr keine Einführung? Oder irgendein Buch/Skript, indem ihr das nachlesen müsst?

    Eine Woche ist mit Sicherheit zu wenig, als dass man das alles lernen und auch beherrschen könnte. Abgabe der Übung ist dann wieder ein anderes Thema... Naja, didaktisch wahnsinnig sinnvoll. 🙄



  • Nexus schrieb:

    P.S.: Immer diese langweiligen Formen, die nicht mal ein gutes Beispiel für Vererbung sind...

    Na, das ist aber jetzt sehr höflich ausgedrückt!

    @Stefan31

    Vielleicht klappt's ja, wenn du dir vorstellst, was die drei Klassen Ellipse, Rechteck, Dreieck gemeinsam haben. Diese Gemeinsamkeiten kommen in die Basisklasse Figur, während deren Unterklassen nur solche Eigenschaften haben, wie sie für die jeweilige Klasse spezifisch sind. Wenn du erst einmal diese vier Klassen hast, leite die restlichen Klassen ab und stelle dir dieselbe Frage. Verschiebe ggf. Eigenschaften die Klassenhierarchie hinauf oder hinunter, bis du mit dem Design zufrieden bist. Dies kannst du auch zunächst mal auf einem Blatt Papier machen, wenn dir das leichter fällt.

    Ein gutes Qualitätskriterium für Vererbung ist die Frage:

    Wenn B von A erbt, kann ich dann (in jeder Hinsicht) sagen: B ist ein A?

    Ach ja, und wie Nexus es so treffend formuliert hat ist die Aufgabe Mist. Du wirst es kaum sinnvoll hinkriegen, dass bei Quadrat, falls es von Rechteck erbt die Frage mit Ja beantwortet werden kann. Am besten wechselst du den Lehrer 😉

    Stefan.



  • Mir würde es schon helfen, wenn ich ein ähnliches Beispiel sehen würde.



  • DStefan schrieb:

    Nexus schrieb:

    P.S.: Immer diese langweiligen Formen, die nicht mal ein gutes Beispiel für Vererbung sind...

    Na, das ist aber jetzt sehr höflich ausgedrückt!

    Wie bitte? Das ist kein bisschen gegen den Threadersteller gemeint, er kann ja für die Themenwahl nichts dafür. Und etwas später bestätigst du mich trotzdem wieder... Wie ist das jetzt zu verstehen? 😕

    Stefan31 schrieb:

    Mir würde es schon helfen, wenn ich ein ähnliches Beispiel sehen würde.

    Ein von mir aus gesehen besseres Beispiel sind die Fahrzeuge (zwar auch ein Standardbeispiel, aber immerhin zeigt es den Sachverhalt meines Erachtens besser auf). Dafür solltest du wissen, was eine Klasse ist, aber kurz gesagt ist es die Zusammenfassung gewisser Eigenschaften und Konzepte zur Beschreibung eines Objekts.

    Es gibt Fahrzeuge, davon können Schiffe, Autos und Fahrräder erben. Bei den Autos gibt es die abgeleiteten Klassen Peugeot, BMW und Ford. Diese können wiederum genauer unterteilt (spezialisiert) werden, was eben der Vererbungshierarchie entspricht. Ein Ford ist ein Auto und ein Auto ist ein Fahrzeug. Nach "oben", also in Richtung Fahrzeug, abstrahierst du immer mehr; es gibt immer weniger gemeinsame Eigenschaften. Autos haben Hubraum und Gewicht als Eigenschaft. Während bei zunehmender Abstraktion (Fahrzeug) Gewicht immer noch Sinn macht, ist die Eigenschaft Hubraum nicht mehr vorhanden (ein Fahrrad hat zum Beispiel keinen).

    Mag vielleicht etwas verwirrend klingen, aber das Konzept der Objektorientierung ist auch nicht schnell, schnell erklärt. Ich hoffe, ich konnte dennoch einen kurzen Überblick verschaffen. Wie auch immer, ohne Anwendung ist dieses Wissen nicht viel wert. Du kannst dir wahrscheinlich auch einiges nicht vorstellen, wenn du noch nie C++ programmiert hast.

    Umso schneller solltest du damit anfangen. 😉



  • Nexus schrieb:

    DStefan schrieb:

    Nexus schrieb:

    P.S.: Immer diese langweiligen Formen, die nicht mal ein gutes Beispiel für Vererbung sind...

    Na, das ist aber jetzt sehr höflich ausgedrückt!

    Wie bitte? Das ist kein bisschen gegen den Threadersteller gemeint, er kann ja für die Themenwahl nichts dafür. Und etwas später bestätigst du mich trotzdem wieder... Wie ist das jetzt zu verstehen? 😕

    Ach, so hatte ich das gar nicht gemeint. Ich finde deinen Einwand höflich ausgedrückt und hätte es drastischer formuliert. Manchmal frage ich mich angesichts solcher Aufgaben, unter welchen Steinen bloß solche "Lehrer" ausgebuddelt werden. Also: Ich stimme völlig mit dir überein und du kannst dein 😕 wieder zurück nehmen 😉 😉

    Stefan.



  • Ah, okay. Hmm, manchmal bin ich vielleicht etwas zu kritisch. Mich hat halt verwirrt, das da kein Smiley danach steht, und manchmal bin ich in diesem Forum nicht sicher, ob etwas ironisch gemeint ist oder nicht.

    Aber dann ist ja alles gut. 🙂





  • Hallo,

    Du brauchst als erstes mal die Basisklasse 'Figur', die alle gemeinsamen Eigenschaften und Werte enthält:

    (Achtung nur ein Ansatz und kein Codevorschlag)

    Figur:
        Druck, Fläche, Daten
    

    Dann die drei Klassen die jeweils von Figur erben:

    Ellipse:
        - hier speziellere Eigenschaften der Ellipse
    Rechteck:
        - hier speziellere Eigenschaften der Rechtecke
    Dreieck:
        - ...
    

    Wie schon vor mir erläutert wurde, wird nach 'unten' immer mehr spezifiziert:

    Figur
            /         |           \
       Ellipse    Rechteck      Dreieck
    ...
    

    ... so das man sagen kann eine Ellipse/Rechteck/Dreieck ist eine Figur, aber nich umgekehrt

    Ein Quadrat ist ein Rechteck aber ein Rechteck ist nicht zwingend ein Quadrat, usw.

    Du musst dir also erst überlegen was die drei Klassen gemeinsam haben dann erstellst du die Basisklasse daraus ...

    Gruß Simon


Anmelden zum Antworten