Laden...

Suche C# Projekt das Objektorientierung verdeutlicht?

Erstellt von Bunnychecker vor 13 Jahren Letzter Beitrag vor 13 Jahren 1.811 Views
B
Bunnychecker Themenstarter:in
224 Beiträge seit 2009
vor 13 Jahren
Suche C# Projekt das Objektorientierung verdeutlicht?

Hi.

Jetzt wo ich mich recht viel mit Objektorientierung auseinander setze und mein Kopf schon langsam anfängt zu qualmem, weil ich schon wieder 10 Schritte weiter denke, bin ich auf die Idee gekommen, mir ein Beispielprojekt zu suchen, wodie Möglichkeiten einer OO aufgezeigt werden und ich mal schön durchdebuggen kann.

Soll heißen, ich weiß wie man die Dinge der OO verwendet(abstract, virtual, Vererbung, Properties,...), aber der richtige Sinn, der dahinter steckt, ist mir oftmals nicht wirklich geläufig.

Ich stehe gerade vor einem Projekt und merke halt beim coden, das dies und jenes nicht schön ist und merke dann erst, ah das kannst du auslagern und das ist dann wohl bessere OO.

Ein Beispiel aus meinem Projekt wäre, dass ich eine abstrakte Elternklasse mit einer Methode Start() habe und jedes Kind hat auch diese Startmethode, die aber bei jedem Kind anders ist. Also was macht es für einen Unterschied, ob ich nun in der Elternklasse eine abstracte Start() schreibe und dann bei jedem Kind überschreibe, oder ob ich einfach die Methode in der Elternklasse weglasse und jedes Kind seine eigene Start() hat, weil sie ja sowieso komplett anders ist.

Vielleicht ein Projekt, dass auch Fehler aufzeigt, wenn z.B. ein public Field anstelle einer Property darstellt und all solche Dinge.

Gibt es sowas? Ich habe mir schon diverse Source von Programm heruntergeladen, aber die sind ja meist so derbe überfüllt, dass der Lerneffekt = 0 ist.

Klar, selbst coden könnte einer mir jetzt empfehlen, aber wenn man nicht weiß, wie es wirklich richtig gemacht wird, und was alles möglich ist, bleibe ich bei einem Level hängen wo ich nichts mehr dazulerne.

MfG Bunny

6.911 Beiträge seit 2009
vor 13 Jahren

Hallo,

das Galileo Computing :: Objektorientierte Programmierung - Das umfassende Handbuch ist hierzu ganz empfehlenswert und beinhaltet kleinere Beispiel zur Verdeutlichung. "Musterbeispiele" findest du teilweise auch schon im Programmier-Spiel (je nach Aufgabe bzw. Lösung mal mehr und mal weniger 😉)

Beispiele gibt es sonst sicher auch genug aber es wäre leichter wenn du etwas einschränkst zB auf MVP-Projekte o.ä. Sonst entspricht ein gutes OO-Buch eher dem was du forderst.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

1.044 Beiträge seit 2008
vor 13 Jahren

Hallo Bunnychecker,

erstmal ist es wichtig, dass du weißt, wie OOP funktioniert. Die Grundlagen musst du mitbringen. Den Sinn und Zweck lernst du mit "learning by doing". Du wirst eine Zeit lang wohl nicht-OOP programmieren. Irgendwann wirst du die Vorteile erkennen und OOP richtig einsetzen können.

Folgendes Buch kann ich dir empfehelen O´Reilly: Entwurfsmuster von Kopf bis Fuß. Voraussetzung sind die Grundlagen der Programmiersprache C# und OOP.

zero_x

S
902 Beiträge seit 2007
vor 13 Jahren

Folgendes Buch kann ich dir empfehelen
>
. Voraussetzung sind die Grundlagen der Programmiersprache C# und OOP.

zero_x

da das buch in Java ist, ist c# nicht zwangsläufig eine vorraussetzung =)

mfg
serial

B
Bunnychecker Themenstarter:in
224 Beiträge seit 2009
vor 13 Jahren

Beispiele gibt es sonst sicher auch genug aber es wäre leichter wenn du etwas einschränkst zB auf MVP-Projekte o.ä. Sonst entspricht ein gutes OO-Buch eher dem was du forderst.

Wenn du mir sagst, was MVP ist, gebe ich gerne mehr Infos :]

Galileo OO:
Das Buch habe ich schon einmal angefangen zu lesen, fande es aber sehr zäh und hab dann auch irgendwann aufgehört weiter zu lesen. Vielleicht muss ich mir das nochmal zu Gemüte führen.

6.911 Beiträge seit 2009
vor 13 Jahren

Hallo,

Wenn du mir sagst, was MVP ist, gebe ich gerne mehr Infos

Mecklenburg-Vorpommern 😁
Nein hier ist Model-View-Presenter als Entwurfsmuster gemeint und kann zB für WinForms verwendet werden um die Daten von der Anzeige zu trennen und die Testbarkeit zu erhöhen. Hierzu gibt es v.a. im vorigen Link ein paar gute Ansätze die zeigen wie OO hierfür eingesetzt wird.

Wegen des unbekannten Begriffs schlage diese bitte selber nach 😉

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

1.044 Beiträge seit 2008
vor 13 Jahren

Hallo serial,

ich habe da Buch selber gelesen, ohne Grundkennisse von Java zu haben. Das war absolut kein Problem. In den ersten Seites des Buches steht auch, dass man als nicht-Java-Programmierer das Buch auch lesen kann. Desweiteren steht dort, dass die Grundlagen von C# reichen. Das ist also absolut kein Problem. Desweiteren finden sich auf den Internetseiten alle Codebeispiele in C#.

zero_x

S
902 Beiträge seit 2007
vor 13 Jahren

Hallo,

c# ist aber keine vorraustzung, wie du geschrieben hast.

mfg
serial

Hinweis von gfoidl vor 13 Jahren

Welche Voraussetzung für das Buch gilt wurde jetzt zur Genüge behandelt 😉
Kommt wieder zum Thema. Danke.

H
116 Beiträge seit 2008
vor 13 Jahren

Moin Moin.

Soll heißen, ich weiß wie man die Dinge der OO verwendet(abstract, virtual, Vererbung, Properties,...), aber der richtige Sinn, der dahinter steckt, ist mir oftmals nicht wirklich geläufig.

Das sind letztlich nur technische Details.

Ein Beispiel aus meinem Projekt wäre, dass ich eine abstrakte Elternklasse mit einer Methode Start() habe und jedes Kind hat auch diese Startmethode, die aber bei jedem Kind anders ist. Also was macht es für einen Unterschied, ob ich nun in der Elternklasse eine abstracte Start() schreibe und dann bei jedem Kind überschreibe, oder ob ich einfach die Methode in der Elternklasse weglasse und jedes Kind seine eigene Start() hat, weil sie ja sowieso komplett anders ist.

Denke nicht im Source, denke im Objekt. Nimm zum Beispiel ein Auto: Das hat eine Farbe (Eigenschaft, üblicherweise enum), eine Anzahl von Türen (Eigenschaft, nur lesen [nachträglich kann man keine Türen einbauen... na ja, mit der Flex geht's]), einen Motor (Eigenschaft, wobei Motor wiederum ein Objekt ist [Diesel, Benziner]) usw. Und dann kann man mit dem Auto was machen (wobei die Einzelteile am Ende machen), z.B. Auto.Start() (was dann zu Auto.Motor.Start() führt).

Diese Abstraktion kann ich mit allem machen, was als Software umgesetzt werden soll: Ein Buch hat Seiten, eine Waschmaschine hat Waschgänge, ein Herd hat Kochplatten, ein Hund hat ein Fell usw.

Ein Objekt: Es hat etwas (Farbe -> Eigenschaft), es tut etwas (Methode) und ich merke es (Event) oder es geht kaputt (Exception).

Hinrich

6.911 Beiträge seit 2009
vor 13 Jahren

Hallo,

Ein Objekt: Es hat etwas (Farbe -> Eigenschaft), es tut etwas (Methode) und ich merke es (Event) oder es geht kaputt (Exception).

Noch als Ergänzung: Neben Zustand und Verhalten hat jedes Objekt auch eine Identität.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

49.485 Beiträge seit 2005
vor 13 Jahren

Hallo Bunnychecker,

wo die Möglichkeiten einer OO aufgezeigt werden und ich mal schön durchdebuggen kann.

das zeigt sehr schön noch die alte/falsche Denkweise. Debuggen konzentriert sich auf die Funktionen und den Ablauf. Darum geht es bei OOP gerade nicht. Am Ablauf wird man ein objektorientieres Programm (der Begriff ist im Grunde ein Widerspruch in sich) nicht verstehen. Wie schon hinrich gesagt hat und wie der Name Objektorientierung andeutet, geht es in erster Linie um die Objekte. Zu den Objekten gehören die Daten und die Operationen. Die Operationen gruppieren sich um die Daten herum. Der Kern der Objekte sind also die Daten. Daher sollte man sich aus diese konzentrieren, wenn man sich der Objektorientierung nähern will.

Das Thema wurde aber sowieso schon x-mal ausführlich im Forum besprochen. Es versteht sich ja von selbst, dass du nicht der erste bist, der vor dem Problem steht. Bitte benutze die Forumssuche und poste die besten Treffer hier. Vielen Dank!

Zum Beispiel
OOP Schachprogramm: Herangehemsweise/Klassendesign
Fragen zum allgemeinen Stil in OOP
OOP Design, gibt es Regeln?
In welchem Zeitraum lernt man, sinnvoll, gescheit und ordentlich mit OOP umzugehen/programmieren?

herbivore

L
667 Beiträge seit 2004
vor 13 Jahren

Ein Beispiel aus meinem Projekt wäre, dass ich eine abstrakte Elternklasse mit einer Methode Start() habe und jedes Kind hat auch diese Startmethode, die aber bei jedem Kind anders ist. Also was macht es für einen Unterschied, ob ich nun in der Elternklasse eine abstracte Start() schreibe und dann bei jedem Kind überschreibe, oder ob ich einfach die Methode in der Elternklasse weglasse und jedes Kind seine eigene Start() hat, weil sie ja sowieso komplett anders ist.

Ein offensichtlicher Vorteil wäre, dass der konkrete Typ des Kindes dem Aufrufer zunächst nicht bekannt sein muss, da er mit dem Eltern-Typ arbeiten kann.

Stell die Vor, du hast 20 verschiedene Kinder und irgendwo eine Kontrollklasse, die mit den Kindern arbeiten muss. Hättest Du jetzt keine Elternklasse mit einer abstrakten Start()-Methode, müsstest Du in der Kontrollklasse jeweils für alle 20 Kinder eine eigene Behandlung zum Aufruf von Kind1.Start(), Kind2.Start() usw. bereitstellen.
Deine Eltern-Klasse mit der abstrakten Methode stellt dagegen einen allgemeingültigen Vertrag / Contract / Schnittstelle für alle abgeleiteten Typen bereit, so dass es deiner Kontrollklasse egal sein kann, ob sich dahinter nun konkret Kind1, Kind2 oder Kind20 verbirgt.

Google mal nach Contract-First Design, ich denke, da wirst Du genug finden, was Dir das Ganze deutlicher macht.

"It is not wise to be wise" - Sun Tzu

B
Bunnychecker Themenstarter:in
224 Beiträge seit 2009
vor 13 Jahren

Vielen Dank.

Schon sehr hilfreiche Tipps dabei auch Lynix für die Erläuterung meines Beispieles.

Eine weitere Frage wäre, wenn 90% meiner Kinder eine Property haben, die restlichen 10% diese Property aber nicht besitzen/brauchen, sollte dann bei schöner OO, meine Elternklasse trotzdem diese Property führen oder sind schon dise 10% ausreichend dafür, dass sie eigentlich keine Kinder der Elternklasse mehr sind?

49.485 Beiträge seit 2005
vor 13 Jahren

Hallo Bunnychecker,

seine Frage ist schon recht speziell und passt nicht mehr wirklich zum Titel. Deshalb nur kurz und abschließend: Vererbung in OOP bedeutet Spezialisierung im Sinne von Erweiterung, nicht im Sinne von Einschränkung. Eine Methode oder Property der Basisklasse ist also automatisch in allen Unterklassen vorhanden und sollte auch in allen Unterklassen korrekt funktionieren. Es ist eine Unsitte, eine überschriebene Methode und Property in der Unterklasse nicht oder falsch zu implementieren oder gar eine NotImplementedException werfen zu lassen. Zu den Hintergründen siehe Liskovsches Substitutionsprinzip.

herbivore

B
Bunnychecker Themenstarter:in
224 Beiträge seit 2009
vor 13 Jahren

Interessanter Wikiartikel, wirklich gut :]