Optimierung: Lieber mehr Klassen oder?

  • zweimenschen schrieb:

    3. Derart marginal... lol. Verstehe. Du sprichst von deinem Gästebuch mit 5 Einträgen im Jahr. Verstehe. Ich aber spreche von problematischen Festplattenzugriffen und deren Optimierung in PHP, dass das ganze dann noch vorkompiliert werden im Cache sein kann ist eine andere Sache.
    Ich bin gerade etwas hin- und hergerissen: einerseits juckt es mich in den Fingern, auf Deine Hybris und Deine Argumentation einzugehen, andererseits machst Du den Eindruck, dass Du auch mein zweites Posting nicht richtig liest oder nicht verstehst. Also würde ich sagen, ich lasse es dabei und erspare Dir, Dich auf mein Niveau herablassen zu müssen.

    Carsten
  • gritsch schrieb:

    du kannst auch alle klassen in eine einzige datei packen.
    dass alles in eine datei zusammencompiliert wird weist du ja.
    also auf was willst du raus? um geschwindigkeit gehts dir ja anscheined nicht (hast ja gesagt). sonst wäre obj-c auch nicht das richtige.
    also warum stellst du solche fragen überhaupt und willst antworten dazu?
    @Gritch: Vielen herzlichen Dank für deine Antwort. Warum war das so schwierig und kompliziert?

    Du fragst, worauf ich hinaus wollte. Ich war mir nicht sicher, ob dem tatsächlich so ist. Ich wollte nur Wissen, ob ich da richtig liege.

    Das Beispiel mit dem kack Button sollte nur dazu dienen, um zu klären, ob es wirklich völlig egal ist, ob man für jeden noch so unwichtigen Button eine einzelne Klasse erstellt oder alles in eins macht.
    Das ich natürlich nicht mit 2000 Klassen arbeiten will hätte ja wohl jedem klar sein müssen. Es ging nur um das Prinzip.


    Noch gebe ich die Hoffnung in diesem Forum nicht auf. Ich bin lernfähig, kann mit Google umgehen, mich einlesen.
    Und irgendwann kann ich auch mal eine Frage beantworten. Bis dahin hoffe ich auf konstruktive Antworten. Wenn ich mal was total doofes Frage, dann liegt das vielleicht daran, dass ich noch nicht in Objektive-C denke und ihr mittendrin steckt. Also bedenkt dies bitte.
  • BlueM schrieb:


    Ich bin gerade etwas hin- und hergerissen: einerseits juckt es mich in den Fingern, auf Deine Hybris und Deine Argumentation einzugehen, andererseits machst Du den Eindruck, dass Du auch mein zweites Posting nicht richtig liest oder nicht verstehst. Also würde ich sagen, ich lasse es dabei und erspare Dir, Dich auf mein Niveau herablassen zu müssen.
    Ich würde Dir schon gern helfen.

    Aber es geht nicht darum. 3 Einfach Fragen, und es hat lange gedauert, bis vernünftige Antworten kamen.
  • zweimenschen schrieb:

    Es geht hierbei um ein Objekt, mit einer bestimmten simplen Funktion. Wenn ich dieses Objekt 2 Mal benötige (und vielleicht noch später in einem anderen Projekt), dann ist meine Frage (im Hinblick, dass es vermutlich für das fertige Programm uninteressant ist, wieviel Klassen verwendet wurden) ob das ruhig in eine eigene Klasse kann, weil man dann diese Funktion/Methode einfacher übertragen kann.

    Wenn Du ein Objekt mit gleicher Funktionalität mehrfach brauchst, dann nimmt man in Objective-C eine Klasse und erzeugt entsprechend viele Instanzen.

    Michael
  • Michael schrieb:

    zweimenschen schrieb:

    Es geht hierbei um ein Objekt, mit einer bestimmten simplen Funktion. Wenn ich dieses Objekt 2 Mal benötige (und vielleicht noch später in einem anderen Projekt), dann ist meine Frage (im Hinblick, dass es vermutlich für das fertige Programm uninteressant ist, wieviel Klassen verwendet wurden) ob das ruhig in eine eigene Klasse kann, weil man dann diese Funktion/Methode einfacher übertragen kann.
    Wenn Du ein Objekt mit gleicher Funktionalität mehrfach brauchst, dann nimmt man in Objective-C eine Klasse und erzeugt entsprechend viele Instanzen.

    Michael
    In PHP auch...
  • chrizke schrieb:

    Michael schrieb:

    zweimenschen schrieb:

    Es geht hierbei um ein Objekt, mit einer bestimmten simplen Funktion. Wenn ich dieses Objekt 2 Mal benötige (und vielleicht noch später in einem anderen Projekt), dann ist meine Frage (im Hinblick, dass es vermutlich für das fertige Programm uninteressant ist, wieviel Klassen verwendet wurden) ob das ruhig in eine eigene Klasse kann, weil man dann diese Funktion/Methode einfacher übertragen kann.
    Wenn Du ein Objekt mit gleicher Funktionalität mehrfach brauchst, dann nimmt man in Objective-C eine Klasse und erzeugt entsprechend viele Instanzen.

    Michael
    In PHP auch...

    Das Wort „Instanz“ ist aber in diesem Thread bisher noch nicht einmal aufgetaucht.

    Michael
  • Du meine Güte... PHP und OOP sind weit voneinander entfernt, wie mir scheint.
    Schade, ab PHP 5 gab es wirklich gute OOP-Ansätze. Wurden die etwa nicht weiter geführt? Oder von den Programmierern nur einfach nicht ernst genommen?

    Beitrag 1
    Frage 1: Ja, die Aussage ist so korrekt.

    Frage 2: Nein, jeder Screen ist die Instanz einer Klasse. Und wenn du drei Screens mit je einem TableView hast, hast du trotzdem nur eine TableView Klasse. Natürlich solltest du drei TableViewDelegates und gegebenenfalls auch drei TableViewDatasources besitzen.

    Frage 3: Der Button ist eine Klasse, das Fenster ist eine Klasse, du hast jeweils eine Instanz davon. Und nicht eine einzige Klasse selbst gemacht, weil sie ja im Framework vorhanden sind.
    Wenn du den Button aber silber statt blau haben möchtest und dafür eine Klasse NSSilverButton ableitest, hast du gewisse Konzepte der OOP nicht verstanden.

    Beitrag 2
    Frage 1: Der Vergleich ist fürn Poppes. Du vermischt kompilierte und interpretierte Sprachen. Das ist sinnlos. Ja, unter PHP hast du mehr Festplattenzugriffe. Es gibt genug Tools, die aus lesbarem Vielklassen-PHP-Code einen unleserlichen Matsch basteln, der schnell interpretiert wird. Das Einzige, was du dir bei Objective-C mit einem einzelnen unleserlichen Matsch sparst, ist Kompilierzeit. Ohne Tests gemacht zu haben halte ich die Einsparung für vernachlässigbar. Anstatt Energie in hässlichen Klumpencode zu stecken solltest du lieber Geld in eine SSD packen - das reduziert die Kompilierzeit nämlich nachhaltig und bei jedem Projekt.

    Frage 2: Die kurze Antwort ist doch offensichtlich. Wüsstest du, wovon du sprichst, müsstest du die Fragen 2 und 3 nicht stellen.

    Frage 3: Auch diese Frage fußt auf eine Annahme, die du als gegeben ansehen würdest, wüsstest du wovon du sprichst.
    Aber ich fasse es dir gern zusammen: DRY KISS.
    (Don't Repeat Yourself, Keep It Small'n'Simple)
    Jede Klasse hat genau EINE Aufgabe. Wenn Aufgaben öfter verwendet werden, pack sie in eine Klasse. Wenn mehrere ähnliche Aufgaben auftauchen, abstrahiere sie in eine Klasse.
    Warum reitest du auf den Nachteilen einer Interpretersprache rum und nimmst diese als Gegenargument für die Verwendung in einer Kompiliersprache?

    Beitrag 3
    Frage 1: Sowohl als auch, da genannte Mechanismen (XCache, APC) die von dir in PHP genutzte Generic-Klasse-Strategie obsolet macht. Damit sind dann automatisch auch alle Bedenken bezüglich Objective-C/Cocoa vom Tisch.

    Frage 2: Ein bis ins letzte Atom durchnormalisiertes Buch dürften auch schneller zu lesen sein als fünf Bände bestehend aus diversen Querverweisen. Allerdings hat ein Buch genausowenig mit einer Datenbank zu tun wie eine Datenbank mit einer Programmiersprache. Egal ob diese Sprache kompiliert oder interpretiert ist. Warum vergleichst du Dinge miteinander, die nichts miteinander zu tun haben? Im Übrigen ist der Geschwindigkeitsunterschied bei einer bis ins letzte Atom durchnormalisierten multidimensionalen Datenbank kaum messbar größer als bei einer 'Eines-in-Allem'-Lösung. Sie ist ja auch keine relationale Datenbank.

    Frage 3: Sprichst du jetzt von PHP oder Xcode? Unter Xcode ist es völlig wurscht, weil kompiliert wird. Und mit dem Ajax-Dreck isses auch völlig egal. Das, was an Ausführzeit des Skriptes durch das Zusammenknüllen gespart wird, warte ich an der Downloadzeit dieses Codebrockens.

    Beitrag 4
    Frage 1: Ja, immer noch.

    Beitrag 5
    Frage 1: Ja, immer noch. Solange du dieses Objekt, welches du da zwei mal benötigst, in eine Klasse packst und anschließend zwei mal instanziierst.

    Beitrag 6
    Frage 1: Ja, natürlich. Alle Antworten, die dir das Gegenteil mitteilen, scheinen dir ja nicht zu gefallen.

    Beitrag 7
    Frage 1: Wieso schwierig und kompliziert? Du weißt, dass es korrekt ist. Gritsch weiß, dass es korrekt ist. Gritsch Aussage 'Lern erst mal OOP' weist darauf hin, dass es korrekt ist. Mehrere Leute erklären dir, dass es korrekt ist. Warum fragst du immer weiter nach?

    zweimenschen schrieb:

    Aber es geht nicht darum. 3 Einfach Fragen, und es hat lange gedauert, bis vernünftige Antworten kamen.

    Deine konstruierten Fragen mit den Nummern #2 und #3 im Beitrag #1 lassen schlichtweg daran zweifeln, dass du überhaupt weißt, was du eigentlich fragen willst.
    Dementsprechend finde ich die Reaktionen auch gar nicht so verwunderlich. Zumal du permanent Gegenargumente aus völlig unterschiedlichen Anwendungsgebieten bringst.
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P
  • Also die Antwort von Lucas de Vil sollte jetzt eigentlich reichen, da alles gesagt bzw. beantwortet wurde, was man wissen wollte.

    Welcher jetzt der bessere Weg ist oder nicht, sollte jeder für sich entscheiden, ob man alles in Klassen aufteilt oder eher zusammenfasst. Da ich mich zurzeit auch in Objectiv-C einarbeite hab ich mal irgendwo gelesen, dass Programmieren so eine art Kunst ist. Unter Kunst verstanden die damals, das jeder seinen Code schreiben kann wie er will. Nur der Entwickler und evtl. andere sollten später das Kunstwerk auch verstehen können.

    gruß
  • trublu schrieb:

    Da ich mich zurzeit auch in Objectiv-C einarbeite hab ich mal irgendwo gelesen, dass Programmieren so eine art Kunst ist. Unter Kunst verstanden die damals, das jeder seinen Code schreiben kann wie er will. Nur der Entwickler und evtl. andere sollten später das Kunstwerk auch verstehen können.

    Ich persönlich sehe das Ganze eher als etwas ganz Besonderes an.
    Denn im Gegensatz zu einem künstlerischen Stück, aber auch zu einem Handwerksstück wird Software niemals fertig werden.
    Auch wird Software niemals kaputt gehen und ist entgegen diverser blendender Versprechungen auch nicht wartbar.

    Es ist also weder sinnvoll 'künstlerisch tätig' zu werden (denn es wird nie ein finales Gesamtkunstwerk geben) noch handwerklich gute Tricks und Kniffe zur Wartbarkeit anzuwenden (weil nix kaputt gehen kann, kann auch nicht proaktiv geflickt werden. Oder hat man schon mal davon gehört, dass das Umbenennen einer Variable im Code im Vorfelde einen Programmfehler ausschließen konnte?)

    Code sollte für jeden übersichtlich, strukturiert und logisch sein. Denn auch der größte Künstler erinnert sich nach einem Jahr nicht mehr an sein tolles Kunststück, dass er da fabriziert hat.
    Insofern ist es einfach logisch, dass man bei Anpassungen im Fenster 'About' einfach nur einmalig die Klassen 'AboutWindow*' anfassen muss statt an 17 unterschiedlichen Stellen in 'CommonWindows' rumzufuhrwerken.

    Die Grundidee finde ich hier sehr schön zusammengefasst:
    clean-code-developer.de/
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P
  • @Lucas de Vil: Danke, dass Du Dir noch einmal Zeit genommen hast und für die ausführliche Antwort.

    Deswegen möchte ich auch noch kurz meine Anmerkungen Dir mitteilen.

    Es wär insgesamt wesentlich einfacher gewesen, wenn man einfach meinen ersten Beitrag "normal" beantwortet hätte. Stattdessen wurde über alles mögliche gesprochen und sich gestritten. Was hier in diesem Form übrigens öfter passiert (bin auf ähnliche Theras gestoßen).

    Zu dem Datenbankbeispiel. Hier ging es mir nur darum, dass man manchmal nicht alles bis ins letzte Detail NORMALISIERT, obwohl es laut Schulwissen möglich und korrekt wäre.
    Genauso verhält es sich mit Klassen, man kann auch mal mit 1er arbeiten, obwohl man es laut Schulbuchwissen auftrennen könnte.

    Beim PHP ist es einfach ein zusätzlicher Festplattenzugriff (und erzählt mir nichts von Cache, Vorkompilierung; ich nutze zum Beispiel ionCode (Hauptzweck: Verschlüsselung), aber letztendlich ist es ein Festplattenzugriff mehr).
    Bei Objectiv-C könnte man sich (das Schreibe ich jetzt mit meinem neuen Wissen) dazu entscheiden, manche Methoden in eine Klasse zu "werfen", weil das Auftrennen einfach mehr Zeit kostet und das Programm so klein/übersichtlich ist, dass es sich nicht lohnt)

    Zu deiner Anmerkung es sind sowieso alles Klassen/Instanzen davon... Ja selbst NSString. Ja! Du hast vollkommen Recht (das war mir so gar nicht zu diesem Zeitpunkt bewußt). Mit dieser Antwort hätten sich ALLE meine Fragen SOFORT erledigt.