Korrekte Modellierung + Implementation



  • Okay, gerne auch std::vector oder evt. unordered_set, da sich die Fenster anhand der ID sicher hashen lassen können.

    Aber zum Rest?



  • Der Großteil deiner Frage hat nichts mit C++ zu tun sondern mit Programmdesign im Allgemeinen. Ich sehe nicht, wie man das in zwei oder drei Sätzen beantworten soll.

    Zum C++ Teil: Smartpointer lösen ein Problem: wer ist für das Aufräumen verantwortlich. Das Problem hast du nicht, da deine Fenster im Listenelement verwaltet werden. Smartpointer sind kein genereller Ersatz für Pointer. An den Pointercontainern ist also nichts falsch.



  • Das sehe ich allerdings anders. Das generelle Design ist ja wie im obigen Post beschrieben fix.

    Nur nicht, wie ich das schön löse. Und das ist C++-spezifisch. Container mit Zeigern/Smartpointern wirds wohl. Ich hab überlegt ob ich die Fenster-Liste(o.ä.) mit unique_pointern-Implementiere und Desktops kriegen nur Rawpointer (um "dürfen lesen/schreiben, ohne Garantie" zu implementieren).

    Oder Container mit Smartptr, und Desktops kriegen nur weak_ptr.

    Oder ich habe überlegt, dass Desktops authoritativ für Fenster sind, weil in meinem Modell kein Fenster ohne Desktop existiert. Dann müsste ich aber gesondert die Fenster-Liste benötigen, denn Events kriege ich für Fenster, nicht für Desktops. Könnte ich aber lösen durch klassenstatischen Container in der Fenster-Klasse die implizit Buch führt.

    Oder ich nehme doch nur einen Container mit Fenstern und lasse Fenster auf ihren Desktop zeigen. Dann könnte ich einen Container mit std::reference_wrapper verwenden, denn ich kann garantieren, dass die Existenz der Desktops eine Invariante in meinem Window Manager (also offensichtlich) sind.

    Eigentlich ist das Problem 90% C++ weil die Umsetzung die später auch praktisch sein soll die Crux ist, nicht das Design, das ist mehr oder weniger one-to-many und damit geklärt.



  • Kleiner Einschub zu der Conatiner-Frage:
    Ich hab den original Beitrag hier leider nicht gefunden. Es wurde allerdings mal auf ein Entscheidungsbaum verwiesen, wann sich welcher Container eignet.
    Ich finde die Übersicht ganz cool.

    Hier der Link:
    http://stackoverflow.com/questions/471432/in-which-scenario-do-i-use-a-particular-stl-container
    --> http://i.stack.imgur.com/G70oT.png



  • Wenn ich alles richtig interpretiert habe käme set raus, passt zum obigen Vorschlag für unordered_set, seh ich ein, ist aber eher ein Randproblem, weil mir vorerst nicht so wichtig ist, wie viel Overhead ich habe.

    Im Endeffekt verwalte ich wenn es hoch kommt 50 Fenster, da schenken sich vermutlich alle Container kaum Kilobytes 😉



  • Das sehe ich allerdings anders.

    Möglicherweise hast du deswegen immer die Schwierigkeiten.



  • Nun gehört jedes Fenster auf genau einen Desktop (kann den aber wechseln), ein Desktop kann mehrere Fenster haben, Fenster sollen ihren Desktop kennen, und ich möchte unabhängig von Desktops über alle Fenster die es gibt iterieren können.

    Die einzig relevante Design-Angabe hier lautet, dass jedes Fenster auf genau einen Desktop gehört, den aber wechseln kann.
    Wozu ein Fenster seinen Desktop "kennen" soll, ist mir nicht klar. Was heißt überhaupt kennen? Nur seinen Namen? Dann braucht es keine Referenz auf einen Desktop. Soll jedes Fenster seinen Desktop auch steuern können? Wozu das? Und was macht ein Desktop mit seinen Fenstern?

    Vielleicht brauchst du nur so etwas:

    vector<unique_ptr<Window>> windows;
    vector<unique_ptr<Desktop>> desktops;
    //...
    for (auto&& window: filter(windows, some_property)) 
      draw(some_desktop, window); //Fenster "gehört auf" (?) genau einen Desktop
    


  • Ich bin begeistert, was für ein Haufen arroganter, überhabender Leute hier unterwegs sind.

    Typisch Internetforum.

    Da wäre einmal manni66, der augenscheinlich alles besser weiß, aber aus genau dem Grund kein hilfreiches Wort zu viel schreiben möchte, und stattdessen nur darauf bedacht ist, hilfesuchende wissen zu lassen, dass sie scheinbar Idioten sind.

    Und dann wäre da dove, das typische Internetarschloch, das nicht die Frage beantworten will, sondern wie üblich die Rahmenbedingungen anzweifelt.

    Für dove: Das kann dir am Arsch vorbeigehen, wieso ich sage, dass der Client seinen Desktop kennen muss. Ich will aber mal nicht so sein, und es dir verraten, damit du wieder ruhig schlafen kannst: Der Client ist später dafür zuständig, sich beim Desktop zu registrieren/löschen, deshalb muss er den kennen. Ob das für Eure Majestät nun akzeptabel ist, interessiert mich einen Scheißdreck.

    Ist mir jetzt aber auch egal, ich hab keine Lust mit einem Haufen elitärer Wichser zu diskutieren. 👎


  • Mod

    Jetzt komm mal runter, süßer. Wenn du das Gefühl hast, dass gewisse Beiträge dir nicht weiterhelfen, ignoriere sie. Du musst dann nicht zum Schlagabtausch ausholen, den kann man gegen elitäre Wichser sowieso nur verlieren.



  • Arcoth schrieb:

    Jetzt komm mal runter, süßer[<- c'mon]. Wenn du das Gefühl hast, dass gewisse Beiträge dir nicht weiterhelfen, ignoriere sie. Du musst dann nicht zum Schlagabtausch ausholen, den kann man gegen elitäre Wichser sowieso nur verlieren.

    Das ist tatsächlich der beste Weg, sich in diesem Forum zu verhalten.
    Hier zweifelt jeder immer gerne erstmal grundsätzlich an, was man so gemacht / geplant hat. Warum das so ist, weiß ich auch nicht. Muss wohl an der Natur der Thematik legen. Bei soviel Freiheit, die man durch eigene Erfahrung / Ideen gestalten muss, bildet halt jeder ein großes Selbstvertrauen in die eigenen Ansichten und dann ist Dein Ansatz halt erstmal doof.
    Zugegeben ist es aber bei gerade der Thematik auch nicht einfach - die Leute finden deinen Dilemma-Situation wohl komisch und wehren sich zunächst gegen den Gedanken, überhaupt in dieses Dilemma gekommen zu sein.
    Nur hilft das leider auch nicht so wirklich.

    Wenn du aber ruhig bleibst und mit viel Geduld an die Sache rangehst, dann kommt halt doch sehr oft nach ein bisschen rumposten Konstruktives bei raus, weil sich das Problem weiter kristallisiert und andere Leute doch etwas Input geben.



  • Naja, Beiträge von manni66 und/oder dove würde ich nicht ignorieren und schon gar nicht als "nicht hilfreich" abstempeln. Wer das macht, ist selbst schuld.

    Außerdem muss, übertrieben gesagt, auf die Frage "Wie schlage ich mit einen Nagel in den Fuß?" die Antwort "Mach das lieber nicht, schlage den Nagel lieber in die Wand!" erlaubt sein, während hier manche scheinbar glauben, die einzig erlaubten Antworten müssten im Stil von "Nimm Nagel, nimm Hammer, setze Nagen an Fuß, schlage mit Hammer drauf" sein.

    Schon komisch, Leute, die gute und fachlich fundierte Tipps geben, hier mit Fäkalsprache zu beleidigen.



  • Ist mir doch jetzt Wurst, ob das zum Ziel führt oder nicht. Ich hab hier eh schon abgehakt, ne brauchbare Antwort zu kriegen.

    Wenn jemand offensichtlichen Blödsinn macht und man dann eher den zugrunde liegenden Irrtum beheben möchte, anstatt zu helfen, den Blödsinn umzusetzen - klar, und das versteh ich doch auch.

    Aber das war hier nicht der Fall. Einer meint ich sei quasi zu blöd mein Problem zu erkennen ("Design, nicht Sprache"), der andere meint, er müsste dann daran zweifeln, dass das was ich vorhabe einen Sinn hat.

    Wisst ihr, ich hatte einen erfahrenen Programmierer als Kollegen, den konnte man sowas fragen. Wenn man Unsinn machen wollte, hat er das gesagt. Und ansonsten geholfen, das Problem an sich zu lösen. Aber in Internetforen sind erfahrungsgemäß nur Arschkrampen unterwegs.

    Mag ja sein, dass mein Problem unverständlich ist. Ich war der Meinung, die Essenz verständlich dargelegt zu haben, aber wenn dem nicht so war, ja meine Fresse dann fragt halt nach. Sind denn alle kommunikationsbehindert hier oder was.

    Wie gesagt, ist mir nun auch Schnuppe, macht den Thread von mir aus zu und löscht meinen Account, geht ja anscheinend auch nicht in diesem Saftladen.



  • sdaf schrieb:

    Ist mir doch jetzt Wurst, ob das zum Ziel führt oder nicht. Ich hab hier eh schon abgehakt, ne brauchbare Antwort zu kriegen.

    Und deswegen schreibst du hier immer noch? Oder geht es dir nur um dein angeknackstes Ego? Also ich glaube, es geht um dein angeknackstes Ego. Das merkt man schon daran, dass du mit Fäkalsprache um dich wirfst, anstatt direkt den Punkt zu nennen, der dich stört.

    sdaf schrieb:

    Wisst ihr, ich hatte einen erfahrenen Programmierer als Kollegen, den konnte man sowas fragen. Wenn man Unsinn machen wollte, hat er das gesagt. Und ansonsten geholfen, das Problem an sich zu lösen. Aber in Internetforen sind erfahrungsgemäß nur Arschkrampen unterwegs.

    Du verkennst den Nutzen eines Internetforums: man will nicht nur (ausgerechnet dir) helfen. Man will auch irgendwann mal was mitnehmen. Wenn man irgendwann selbst ein Problem hat und Google bedient und auf einen solchen Thread verwiesen wird, dann ist es für den Leser interessanter, sich zumindest einmal alle Seiten angehört zu haben. Vielleicht möchtest du gerade Unsinn machen, aber das gilt eventuell nicht für Leute, die in zwei Jahren ihre eigene Desktopverwaltung schreiben wollen.

    Deswegen sagen die Leute direkt an, was schlecht ist. Wenn du gute Gegenargumente hast, immer her damit. Dass man auch nachfragt, ist natürlich. Braucht ein Fenster zu wissen, auf welchem Desktop es läuft? Allein schon die Antwort auf eine solche Frage determiniert das Design für eine Desktopverwaltung. Ich sage: ja, es kann von Vorteil sein, weil man sich so eventuell Locks und Unlocks spart, wenn stattdessen ein Funktionsaufruf erst mal Parameterprüfung machen muss. Aber dann sag sowas direkt an, und nicht stattdessen "Aber ich will Unsinn machen, deswegen sagt mir, wie ich Unsinn mache". Damit ist vielleicht dir geholfen, aber nicht anderen Leuten, die diesen Thread lesen.

    sdaf schrieb:

    Mag ja sein, dass mein Problem unverständlich ist. Ich war der Meinung, die Essenz verständlich dargelegt zu haben, aber wenn dem nicht so war, ja meine Fresse dann fragt halt nach. Sind denn alle kommunikationsbehindert hier oder was.

    Nö, wir gehen davon aus, dass du ein vernunftbegabtes Wesen bist, welches sich darüber im Klaren ist, wie Hilfeforen funktionieren. Wenn dem nicht der Fall ist, verzeih' uns, und wir werden in Einigkeit deine Intelligenz anzweifeln und dir gar nicht mehr antworten. 🙂



  • Auf den ersten Blick sehen die Beiträge von manni66 wirklich so aus, als wolle er nur besserwisserisch daherkommen. Aber er möchte dich dazu bringen, dir die Frage zu stellen, warum du Dinge so machst und dann selbst zu erkennen, wo der Fehler liegt (jedenfalls glaube ich das :D). Das muss man aber auch erkennen können, was zugegebenermaßen, schwierig ist, wenn man neu im Forum ist.

    Manchmal ist man in seinem Ansatz festgefahren, da kann es schon hilfreich sein zu fragen, ob ein anderer nicht besser ist. Wenn du von deinem Ansatz nicht abweichen willst dann stell das halt klar. Ansonsten hör dir doch erst ein Mal an, wie andere dein Problem angehen würden, dann kannst du immer noch entscheiden, wie du vorgehen möchtest.

    Die Leute, die hier im Forum posten, tun das in ihrer Freizeit und freiwillig, ohne dafür einen Gegenleistung zu erhalten. Du kannst ja mal in der Fußgängerzone einer beliebigen Großstadt fragen, ob dir jemand freiwillig und ohne Entgelt helfen möchte. Bin sehr gespannt, was du da zu hören kriegst.
    Wenn du mit manchen Antworten nicht zufrieden bist dann ignorier´ sie. Aber ausfallend zu werden und sprachlich in die unteren Schubladen zu greifen hilft keinem weiter, am wenigsten dir. Machst du das bei deinen Arbeitskollegen auch?



  • Haha was für ein Haufen heißer Dampf hier von sich gegeben wird ist zum brüllen. Für jeden Außenstehenden sind die Leute die hier "geholfen" haben offensichtlich die mit den Egoproblemen, anders kann ich mir die Autistenreaktionen hier nicht erklären.

    Aber noch besser, jetzt werden mir auch noch Internetforen erklärt, der Thread ist gold. Bisher hat quasi keiner hier irgendein wertvollen, relevanten Tipp gegeben Herr Dachschaden (Name ist Programm, find ich gut).

    Und ob das bekackte Fenster jetzt den Desktop anfassen darf, spielt noch immer keine Rolle. Ich habs Gefühl hier will jeder nur mal seinen Schwanz auspacken, und weil nix Relevantens einfällt schlägt man halt auf Randbedingungen ein, die völlig belanglos für die gestellte Frage sind.

    Und was jetzt in einem Fachforum um Rat bitten mit Fußgängerbelästigung zu tun hat, ist mir auch ein Rätsel, ich fürchte ich bin noch nicht lange genug sozial isoliert wie der Rest hier.

    Ich hab mal in einem Kinderzeichentrick gelernt: "Wenn man nichts Gutes zu sagen hat, sollte man lieber einfach still sein", das trifft auf mich zu, und auf quasi alle die hier "geholfen" haben.

    Ich find euch unterhaltsam, leider auch nicht mehr.



  • Naja, was soll man da noch sagen... selbst einfachste Dinge nicht verstanden. Viel Erfolg bei deinem Projekt.



  • Endlich nach langen Jahren der Traurigkeit mal ein Troll hier im Forum. 👍



  • Ach, ich seh das positiv. Pfuscher wie der TE sichern mir den Lebensabend. 😋



  • Hähä ne, ich bin Hobbyfrickler, wenn ich Murks zusammenschuster stört nur mich das und bringt dir kein Geld.

    Ich hatte ja gehofft, dass die Götter hier im Forum sich erbarmen würden, mich etwas in die richtige Richtung zu leiten, aber die Wege der Herren sind unergründlich und ich bin leider nicht würdig.

    Ich bin froh, dass es solche Bastionen der Überheblichkeit noch gibt. Anderswo sind die meisten Communities weiter und sind sogar wirklich hilfbereit, das nervt auf Dauer, wenn man auf Erfahrung von anderer bauen kann.

    In einem Punkt muss ich aber doch Kritik üben - Linuxcommunities im IRC sind noch eine Ecke asozialer als ihr, da ist also definitiv noch Luft nach oben!



  • @therapy
    Das Problem ist dass du das was du da "modellieren" möchtest nicht klar definiert hast. Nicht nur hier im Forum nicht klar beschrieben, sondern auch dass du selbst keinen echten Plan hast was du eigentlich modellieren willst.

    Da stellen sich Fragen wie
    - Wem gehören die Fenster? (Wer hat "ownership" - also wer bestimmt wann ein Fenster zerstört wird?)
    - Ist es möglich/erlaubt dass es nicht-besitzende Referenzen auf Fenster gibt, die erhalten bleiben können/dürfen nachdem ein Fenster zerstört wurde?
    - Wenn ja, wie soll das System reagieren wenn versucht wird so eine "verwaiste" Referenz zu verwenden?
    usw.

    Das sind Dinge die erstmal mit C++ nichts zu tun haben. (Die aber geklärt sein sollten bevor man versucht zu entscheiden wie man das jetzt vernünftig in C++ umsetzen kann.) Und die man auch nicht in 2-3 Sätzen erklären kann. Das hat manni66 vermutlich mit seinem Beitrag gemeint.

    Das will dir aber in den Kopf nicht rein. Du bist einfach zu sehr davon überzeugt zu wissen worum es geht, zu wissen dass das eigentliche Problem nur deine beschränkten C++ Kenntnisse sind, und nicht etwa grundlegendere Überlegungen usw.

    Wenn du weiterhin der Meinung sein willst der Grund für das offensichtliche Kommunikationsproblem hier wäre auf "unserer" Seite und nicht auf deiner, bitte gern. Mach dir ruhig selbst vor was auch immer du dir vormachen willst.


Anmelden zum Antworten