Generische Klasse



  • @Swordfish sagte in Generische Klasse:

    sein? Entweder ist es ein Vektor oder eine Liste.
    ist nicht C++.

    Pseudocode, wie oben geschrieben.



  • Dir stellt man eine solche Aufgabe, und alles, was du liefern kannst, sind ein paar Zeilen Pseudocode?



  • @DocShoe

    Er ist doch gar nicht der Aufgabensteller. Wem auch immer dieser Pseudo-code etwas bringen sollte.


  • Mod

    @Schlangenmensch sagte in Generische Klasse:

    @manni66 ich finde die Aufgabe gar nicht so schlecht. Wenn ich die richtig verstehe, soll std::vector bzw std::list rudimentär nachgebaut werden. Das finde ich fürs Verständnis ganz gut und sogar besser als viele Aufgaben, die wir hier sonst so zu sehen bekommen.

    Die Aufgabe ist halt auch absoluter Schrott, was das Design angeht. Eine Klasse zum Sortieren und Speichern? Gleich mal schön Single Responsibility verletzt. Zudem: Sortieren? Speichern? Das sind Vorgänge, keine Dinge. Das gehört überhaupt gar nicht in eine Klasse, sondern in eine Funktion. Mit dieser Aufgabe bekommt man nur beigebracht alles zwanghaft in eine Klasse zu stopfen. Dieses Antipattern ist sowohl recht häufig als auch eines mit ziemlich konkreten Nachteilen. Daher wäre eine gute Aufgabe eigentlich das Gegenteil von dieser, wo man die beiden Vorgänge schön in eigene Funktionstemplates packt und dann sieht, wie schön super wiederverwendbar und testbar das Ergebnis ist.



  • @SeppJ Wie es halt in std::list vorgemacht wird. Ein Container der irgendwelche Objekte verwaltet (aka speichert, so zumindest meine Interpretation von "speichern" in der Aufgabe) und unter anderem die Möglichkeit bietet die Datenstruktur zu sortieren.


  • Mod

    @Schlangenmensch sagte in Generische Klasse:

    @SeppJ Wie es halt in std::list vorgemacht wird. Ein Container der irgendwelche Objekte verwaltet (aka speichert, so zumindest meine Interpretation von "speichern" in der Aufgabe) und unter anderem die Möglichkeit bietet die Datenstruktur zu sortieren.

    List ist … sehr speziell. Du hast technisch gesehen Recht, dass sie über ihre Primäraufgabe hinausgehend noch eine Sortierfunktion anbietet. Aber der Grund dafür ist nicht, dass sie ein Container zum "Speichern und Sortieren" sein will. In einer perfekten Welt wäre List wirklich nur zum Halten der Objekte da und hätte keine eigene Sortierfunktion. Nun gibt es halt algorithmische Gründe, wieso std::list doch eine eigene Sortierfunktion braucht (Für die, die es nicht wissen: Allgemeine Sortieralgorithmen brauchen random access, den verkettete Listen nicht bieten können. Aber wenn man ganz speziell eine verkettete Liste vorliegen hat, kann man die Standardalgorithmen leicht abwandeln und diese Listen doch effizient sortieren. Das geht halt nur für verkettete Listen, nicht für allgemeine bidirektionale Container. Daher gibt es eine spezielle Sortierfunktion für std::list, aber keine allgemeine Sortierfunktion für Container ohne Random Access). Da kann man nun streiten, ob man diesen Spezialfall lieber hinter einer Wand von Template- und Überladungsmagie hätte verstecken sollen, oder ob es besser ist, es wie hier explizit sichtbar machen sollte, dass ein Sonderfall vorliegt. Aber auf jeden Fall sollte die Lehre aus solch einem absoluten Sonderfall nicht sein, dass man Single Responsibility ohne guten Grund aufgeben sollte. Wenn man zu einem spezielle Fall einen kleinen Aufsatz über die genauen Gründe schreiben kann (so wie ich das hier getan habe), dann kann man mal eine Ausnahme machen. Aber der allgemeine Fall ist, dass man das Prinzip unbedingt einhalten sollte. Und ganz gewiss sollte man dies auch einem Anfänger so beibringen.



  • @Schlangenmensch sagte in Generische Klasse:

    @manni66 ich finde die Aufgabe gar nicht so schlecht. Wenn ich die richtig verstehe, soll std::vector bzw std::list rudimentär nachgebaut werden.

    SeppJ hat ja schon einges dazu gesagt. Ergänzend: die Augabenstellung ist sehr schwammig. Du sagst ja selbst "Wenn ich die richtig verstehe". Was soll denn

    um die entsprechenden Objekte zu speichern und zu verwalten

    bedeuten?

    Die Sortierungen werden als Listen zurückgegeben

    Wo kommen die denn jetzt her? std::list? Warum wird nicht der "Container" sortiert?

    Ist das jetzt eine Aufgabe um Sortieralgorithmen zu untersuchen oder um dich mit "Containern" zu beschäftigen?

    Was soll das UML-Diagramm in der Aufgabenstellung? Da wird ja nicht viel bei rumkommen.



  • Dieser Beitrag wurde gelöscht!


  • Ist Copy&Paste die ganze Aufgabe?
    Hast du schon die UML-Diagramme?
    Abseits von der Diskussion über den Sinn der Aufgabe und std::list gab es ja den ein oder anderen Hinweis und Ansatz den man verfolgen könnte, hast du schon irgendwas probiert?

    Hast du überhaupt schon mal programmiert? Wie wäre es, wenn du anfängst Zahlen zu sortieren, ganz ohne "generisch". Dann könntest du schonmal deine Performancevergleiche machen und anfangen zu schreiben.



  • @Schlangenmensch also das UML diagramm hab ich versucht zu erstellen. Ich hab bis gestern nicht mal gewusst das es Listen gibt. Natürlich habe ich schon programmiert aber nicht auf den Level.



  • Da die Aufgabenstellung so unscharf ist, ignoriere mal das Wort "Liste" und nehm eine Struktur, in die du mehrere Zahlen schieben kannst (z.B. ein vector 😉 )

    Worum es mir eigentlich geht: Zeig was du gemacht hast. Hier wird wahrscheinlich niemand hingehen und dir den Code für die Aufgabe schreiben, aber wenn du dir einen Startpunkt suchst und anfängst zu programmieren, bekommst du bestimmt Hilfe.

    Vielleicht kannst du ja auch bei dem Prof noch mal bei Unklarheiten nachfragen. Das Anforderungen unklar sind, kommt in der Praxis häufiger mal vor, dann muss man nachfragen, was genau gewünscht ist, bevor man am Ende alles umschmeißen muss.



  • @Hans1989
    Wann ist der Abgabetermin?


  • Mod

    Das kann schon so gemeint sein, dass das Wort "Liste" nicht die Datenstruktur "list" meint, sondern das allgemeine Konzept von Dingen in einer bestimmten Reihenfolge. Das ist durchaus so üblich, wenn man abstrakt die Eigenschaften einer Datenstruktur beschreibt. Ob man das dann als verkette Liste, Array oder ganz anders umsetzt ist ein technisches Detail.

    Siehe:
    https://en.wikipedia.org/wiki/List_(abstract_data_type)



  • @TauCeti sagte in Generische Klasse:

    Pseudocode, wie oben geschrieben.

    Sorry, der Rest hat einfach zu sehr nach C++ ausgesehen.

    @Hans1989 sagte in Generische Klasse:

    EIne generische Klasse soll zum Speichern und Sortieren von Objekten entworfen werden. Die
    Klassen habe Methoden

    Ist das wirklich der Plural von "Klasse" im zweiten Satz? // edit: Kann natürlich auch so gemeint sein, daß es ein Klassentemplate ist und der Aufgabensteller hier von den Instanzen desselben spricht.
    Und ich weiß nicht ob Du das schon beantwortet hast: Ist das wirklich die Aufgabenstellung im Wortlaut?

    Es wäre auch interessant Deine Vorlesungsunterlagen zu sehen um erahnen zu können, auf welchem Level sich das abspielen soll.



  • Ich kann mir nicht vorstellen, dass hier Template-Klassen gemeint sind. Beliebte Vorlesungsthemen sind doch Sortier-Algorithmen, und da wird der Fokus drauf liegen.
    Du solltest also mit der Programmierung der drei Sortier-Algorithmen beginnen, im zweiten Schritt Zufallszahlen reingeben.



  • @TauCeti Wie interpretierst Du dann "generisch" in

    @Hans1989 sagte in Generische Klasse:

    EIne generische Klasse soll zum Speichern und Sortieren von Objekten entworfen werden.

    ?

    Auf jeden Fall sollte zumindest geklärt werden, ob "Liste" nun tatsächlich eine verkettete Liste meint oder irgendein Dingsti das irgendwie sortierte Daten halten kann.


  • Mod

    TauCeti hat aber sicher Recht: Der Hauptfokus der Aufgabe liegt beim Sortieren und bei der Komplexitätsfrage. Der Fragesteller verrennt sich gerade in unwichtigen Detailfragen. Wenn der Fragesteller nur die drei geforderten Sortierfunktionen implementiert, zur Not auch nur für Integervectoren, und dann noch die Komplexitätsanalyse durchführt, hat er 90% der Dinge gelernt, die hier gelernt werden sollen. Ein vernünftiger Lehrer wird das auch entsprechend bewerten.

    Das ist natürlich der wesentlich schwierigere Teil der Aufgabe und der Threadersteller scheint schon Probleme damit zu haben, überhaupt irgendwie anzufangen. Da muss er sich ordentlich ranhalten, wenn er das noch über das Wochenende schaffen will. Grundsatzfragen über den Wortlaut der Aufgabenstellung sind dabei sicher nicht hilfreich.

    Das Schöne ist auch, dass wenn man erst einmal die Sortierfunktionen hat, dann ist es hinterher auch keine große Herausforderung, diese als Template, Klasse, oder was immer hier gemeint ist zu verpacken. Sobald man denn entschlüsselt hat, was hier gemeint ist. Aber die Hauptschwierigkeit liegt erst einmal beim Entwickeln dieser Funktionen.



  • @SeppJ

    @Hans1989 sagte in Generische Klasse:

    Die Klassen habe Methoden, um die entsprechenden Objekte zu speichern und zu verwalten.

    lässt mich vermuten, daß das vielleicht weniger Gewicht hat als die Sortiererei, aber doch ein wesentlicher Teil der Aufgabe ist. Aber das kann schlussendlich nur @Hans1989 beantworten.


Anmelden zum Antworten