Sinnvolles einsetzen von klassen
-
mahlzeit
nur ma ne frage
gibt es richtilinen abwann ein zweite oder dritte {oder mehr} klassen in applikationen sinn machen ?
angenommen da ist ein projekt das hat in einer klasse so 40 - 50 funktionen und genauso oder mehr members
waehre es sinnvoll diese funktionen in "sinnvolle" klassen aufzuteilen ?
klasse holen
klasse setzen
klasse manipulatoren
klasse sonstigesusw ?
ein vorteil denk ich ist die uebersicht - aber weiter ?
gibt es da "richtlinien" ?
was waere eine sinnvolle methode zu bestimmen ab wann es wieviele klassen mit welchen inhalt gibt ?
fals ihr versteht was ich meine {o;waere recht interessant zu wissen was ihr dazu sagt
ich kenns zb von sehen von einen ehemaligen kolegen, der hatte in einer kleinen applikation so 10-20 klassen {schaetzungsweise}
aber ich selber hab in einer propotional groesseren applikation immernoch nur die eine klasse und 30 methoden und 40 membersvor / nachteile ?
danke {o;
-
Das kommt schon mit der Zeit, wenn du dich mit OO befasst, dann merkst du irgendwann automatisch, dass dein derzeitiges "OOD" nicht wirklich oo ist. Aber die Phase macht jeder durch, das nennt sich Lernen

-
mehrere klassen machen in c++ verdammt schnell sinn, da c++ eigentlich dafür gedacht ist viele kleine klassen passend zu kombinieren
wenn klassen soooo riesig sind, das sie mehr als 50 member und 50 methoden aben, hast du es mit einem "Blob" antipattern zu tun
*edit*
Das Blob Antiapttern beschreibt den Umstand, das Daten und Methoden die keinen Bezug haben in der gleichen Klasse sind.
-
Mr Evil schrieb:
waehre es sinnvoll diese funktionen in "sinnvolle" klassen aufzuteilen ?
klasse holen
klasse setzen
klasse manipulatoren
klasse sonstigesObjekte sind keine Aktionen. Mit oder an Objekten führt man Aktionen durch.
-
Klassen sind nich einfach nur die Trennung oder teilung von code.. es ist das objektorientiere denken was klassen effektiv machen!! Ne klasse ist ja nix anderes als ein Muster aus dem ein objekt erzeugt wird, wenn du dir deine anwenudn als zusammen spiel vorstellst, und auch mit objekten aus der realen weltvergeilcht wirst du bald mal das OO denken drauf haben:)
-
FachmannFürObjekte schrieb:
Objekte sind keine Aktionen. Mit oder an Objekten führt man Aktionen durch.
Das kann man so nicht pauschal sagen, man kann auch Aktionen in Klassen kapseln (z.B. Zustände, State-Pattern, usw). Da verpackt die Klasse tatsächlich nur noch eine Aktion, das Objekt entspricht dann dem Zustand, also letztlich der gewollten Aktion.
-
Die Klasse entspricht einem Zustand (State) und man bildet eine Instanz davon und fürhrt mit diesem Objekt die passende Aktion zu diesem Zustand durch.
-
BorisDieKlinge schrieb:
Klassen sind nich einfach nur die Trennung oder teilung von code.. es ist das objektorientiere denken was klassen effektiv machen!! Ne klasse ist ja nix anderes als ein Muster aus dem ein objekt erzeugt wird, wenn du dir deine anwenudn als zusammen spiel vorstellst, und auch mit objekten aus der realen weltvergeilcht wirst du bald mal das OO denken drauf haben:)
was waere denn eine gute moeglichkeit in OOP einzusteigen ? ich hab das bisher zwar schon oefters gehoert - konnte mir aber noch nie genaueres drunter vorstellen - hab auch schon einige sachen darueber gelesen - aber irgendwie hab ich es nicht verstanden - gibts gute lektuere die OOP gut erklaert ?
-
Versuch einfach deine Projekte in Module (UI, Datenbank, Logik, ...) aufzuteilen. Diese Teilst du dann wieder auf (Buttons, Textfelder ...). Nicht nur an die Funktionen und an "if das, dann das" usw. denken, sondern was die einzelnen Teile können sollen und wie sie miteinander kommunizieren.
Und schau dir einfach ein paar Designpattern an, dann bekommst du schon ein paar gute Ideen wie Objekte aussehen und zusammenarbeiten können.
-
Benutze einfach gute OO-Bibliotheken. Dann kann man schon mal sehen wie es andere gemacht haben. Der nächste Schritt kann sein, solche OO-Bibliotheken zu ändern und sich den Code anzuschauen. So war das bei mir damals der Fall, als ich ein PC-Spiel (C++) ändern und erweitern mußte. Irgendwann kam mir dann das "Aha!"-Erlebnis. Davor habe ich zwar C++ Code verstanden und bearbeiten können, aber OOD kam dann erst später von einem Moment auf den anderen.
-
mal ne frage nebenbei
angenommen es geht um eine dialoganwendung
waehre es ratsam die dialog klasse als hauptklasse anzusehen - oder waere es besser die dialogklasse in einer eigenen hauptklasse abzuleiten ?zb es gibt eine klasse die ist fuer eigene string manipulatoren zustaendig, je nachdem was man manipuliert haben will braucht man nur die benoetigte methode aufrufen
dann gibts noch eine klasse die ist fuer erstellen einer logdatei zustaendig, da das selbe
dann eine klasse die die schnittstelle zur gui darstellt (dialog)
und der ganze vorgang wird in der hauptklasse erledigt
nun - da es zb nur ein dialogfeld basierendes project ist, kann/sollte man die dialog klasse als hauptklasse ansehen oder auch diese nur als schnittstelle ?!
-
Eine Klasse ist eine Schablone für Objekte.
Ein Objekt definiert sich durch einen Zustand in dem es sich befindet und einen Satz von Funktionen, die den Zustand abfragbar machen, verändern, verarbeiten, ....
Soweit die Theorie. In der Praxis wird es neben den Klassen, die durch das Design vorgegeben sind noch weitere Klassen geben, die notwendig sind um eine bestimmte Funktionalität in der jeweiligen Programmiersprache abzubilden.
Diese müssen sich nicht zwingend an die Definition halten..
-
Mr Evil schrieb:
angenommen es geht um eine dialoganwendung
waehre es ratsam die dialog klasse als hauptklasse anzusehen - oder waere es besser die dialogklasse in einer eigenen hauptklasse abzuleiten ?Ableiten drückt eine bestimmte Beziehung zwischen zwei Klassen aus. Öffentliche-Ableitung
class A : public B { };bedeutetA IST-EIN B. Du solltest dich also beim ableiten fragen, ob diese Beziehung erfüllt ist. Ansonsten ist die Ableitung falsch!Aus dem Grund sollte man erst einmal die Grundlagen solide lernen, bevor man sich an GUI-Programmierung und Zeugs ran macht.
Tipp: Besorg dir die Bücher Effektiv C++ und Exceptional C++ (bzw. lies http://www.gotw.ca/gotw/index.htm)
-
was ist den mit diesen hier ?
http://www.amazon.de/Effective-Specific-Improve-Programs-Designs/dp/0201310155/sr=8-2/qid=1161972807/ref=sr_1_2/028-9207897-0470142?ie=UTF8&s=software
http://www.amazon.de/Exceptional-C%2B%2B-Engineering-Programming-Solutions/dp/0201615622/ref=sr_11_1/028-9207897-0470142
http://www.amazon.de/More-Exceptional-C%2B%2B-Engineering-Programming/dp/020170434X/ref=sr_11_1/028-9207897-0470142die hab ich geseh hat n bekannter von mir da, muesste den noch ueberreden die mir auszuleihen #gg
-
Ich kenne die neueren Bände zwar nicht. Aber da die ersten mich überzeugt haben, sollten die anderen wohl auch gut sein. Wenn du sie dir eh ausleihen kannst, dann nichts wie ran an die Bücher. Du kannst davon nur profitieren.