Generische Klasse



  • This post is deleted!


  • @Hans1989 sagte in Generische Klasse:

    ch weiß nicht mal wo ich anfangen soll

    Na, das steht doch in der Aufgabe:

    @Hans1989 sagte in Generische Klasse:

    Starten Sie Ihre Entwicklung systematisch mit der Erstellung entsprechender UML-Diagramme.

    Die Aufgabe ist absoluter Schrott! Wo kommt die her, warum machst du das?



  • Als erster Rahmen schon mal ein wenig Pseudocode:

    class Generic
    {     
      public:   
    	VectorList ExecuteBubblesort( Input: Zahlen);
    	VectorList ExectueSelectionsort (Input: Zahlen);	  
    }; 
      
    int main() { 
      
        VectorList list = ErzeugeZufallszahlen();
         Generic genericClass;
         genericClass.ExecuteBubblesort(list);
         genericClass.ExecuteSelectionsort(list);
    	
        return 0; 
    }
    


  • @Hans1989 sagte in Generische Klasse:

    Bitte erzeugen Sie in einem solchen Mainprogramm im Bezug auf den Umfang aussagekräftige Listen von Zufallszahlen

    Mit

    @Hans1989 sagte in Generische Klasse:

    EIne generische Klasse

    ist wohl ein Klassentemplate gemeint.

    Was soll eine

    @TauCeti sagte in Generische Klasse:

     VectorList
    

    sein? Entweder ist es ein Vektor oder eine Liste.

    @TauCeti sagte in Generische Klasse:

    Input: Zahlen
    

    ist nicht C++.



  • @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.

    @Hans1989 Es gab ja schon ein paar Tipps hier. Also, "Generische Klasse" was heißt das denn nach C++ übersetzt? Was könnte das in Kombination mit einer Liste bedeuten? Wie sieht überhaupt eine Liste aus (allgemein und speziell in C++). Ich würde fast darauf wetten, dass du auch schon Aufgaben im Bezug zur generischen Programmierung mit C++ hattest, vlt kannst du da sogar Sachen wieder verwenden.



  • @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.



  • This post is deleted!


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


Log in to reply