myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Rund um die Programmierung » Wie schaffe ich es OOP zu begreifen und zu lernen?
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Wie schaffe ich es OOP zu begreifen und zu lernen?

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
PierreDole
myCSharp.de-Mitglied

Dabei seit: 10.07.2017
Beiträge: 21


PierreDole ist offline

Wie schaffe ich es OOP zu begreifen und zu lernen?

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Moin,
ich bin auf der Suche nach guter Lektüre zum Thema Code-Gestaltung. Ich sags mal direkt: ich hasse meinen Code. Ich habe die prozedurale Programmierung gelernt (angefangen in den 90ern und Mitte der 2000er aufgehört) und tue mir heute mit der OOP schwer. Ich komme irgendwie nicht aus der Denkweise / den Mustern der damals erlernten prozeduralen Programmierung heraus. Ich neige dazu alles in einer langen Klasse zu schreiben, und wenn ich eine zweite erstelle, dann wird die genauso lang. 80% der Zeit bin ich am Überlegen, wie ich den Code besser gestalten kann, anstatt zu programmieren. Wie verschachtele ich die Klassen? Wie spreche ich sie an? Von außen! Nein, lieber eine Methode in der Klasse, die mir das fertige Ergebnis der Klasse liefert..... ist zum Verzweifeln

Ich habe schon viele Anläufe hinter mir OOP zu verinnerlichen, komme aber nicht über diese eine Schwelle. Zum einen sind Tutorials sehr demotivierend, da sie immer mit dem Basics anfangen (Was sind Klassen? Was ist Vererbung? usw.) und ich das schon alles kenne (habe allen Ernstes mal ein Java Zertifikat gemacht). Zum anderen finde ich nichts, was mir eben diese eine Frage verständlich beantwortet.
Ich habe mein Projekt ruhen lassen und einige Artikel zum Thema Software Architecture gelesen, die zwar interessant waren, aber auch nur Allgemeinplätzchen gewesen sind.

Und ganz ehrlich, ich weiß nicht mal wonach ich suche. Suche ich nach Software Architecture, nach Design Pattern, Clean Code, oder was ganz anderen?

Ich hoffe, jemand kennt paar Antworten.
01.12.2019 11:50 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
chilic
myCSharp.de-Poweruser/ Experte

Dabei seit: 12.02.2010
Beiträge: 2.017


chilic ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Du suchst *Beispiele* für OOP.

Was willst du mit Patterns und sonstigen Architektur Tipps, wenn du nicht weißt warum und wie du das ganze Konzept überhaupt machen sollst.

Als nächstes brauchst du ein Projekt in dem sich OOP wirklich lohnt. Wenn du mit aller Kraft versuchst in einem Miniprogramm alle OOP Dinge umzusetzen die du kennst, wird das auf dich völlg unsinnig wirken.
Das ist das Problem vieler Beispiele. Da wird eine Basisklasse erstellt und erweitert, ohne dass irgendein tieferer Sinn dahinter steckt. Dass da niemand ruft "aha dazu brauche ich das also" ist kein Wunder. Viel eher ist zu erwarten "wo ist jetzt der Mehrwert in diesem Beispiel?".

Am besten wäre es zu wissen was dein aktuelles Projekt macht. Da wäre ein Aha-Effekt vielleicht am schnellsten zu erreichen.

Dieser Beitrag wurde 3 mal editiert, zum letzten Mal von chilic am 01.12.2019 12:15.

01.12.2019 12:09 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.236
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Du wirst weder ein Buch noch ein Tutorial finden, das genau auf Deinem Wissensstand aufbaut.
Lektüren und Videos setzen sich eine Zielgruppe; und das sind i.d.R. bei OOP einfach die Beginner.
Daher natürlich auch: Was ist eine Klasse?

Letzten Endes ist Software Architektur vor allem eines: Erfahrung.
Du kannst Dir soviel Basics wie Du willst reinziehen - und das solltest Du auch tun - ohne Erfahrung wirst Du die Theorie leider nicht anwenden können.
Merkt man auch immer wieder auf entsprechenden Konferenzen / Vorträgen, wenn ein Sprecher nur theorietisches und kein praktisches Wissen hat.
Und ohne Anwendung wirst Du niemals ein guter Architekt, egal ob Infrastruktur Architekt, Software Architekt oder gleich Solution Architekt.

Bücher, die ich generell empfehle:Letzten Endes bleibt es aber immer: Verständnissache.
Dir wird all das Zeug nichts bringen, wenn Du die Konzepte nicht verstehst; dann kannst auch einfach Code aus Beispielen kopieren.

An Deiner Stelle würde ich auch nicht so arrogant (bewusst das Wort gewählt) an ein Buch gehen und sagen: das demotiviert mich, weil ich "es schon kenne" - ich lese ab und zu bewusst Einsteigerlektüren und denk mir: wtf, wieso wusste ich das nicht?
01.12.2019 12:15 Beiträge des Benutzers | zu Buddylist hinzufügen
PierreDole
myCSharp.de-Mitglied

Dabei seit: 10.07.2017
Beiträge: 21

Themenstarter Thema begonnen von PierreDole

PierreDole ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Ja, genau, das erlebe ich sehr oft. Ich sehe Beispiele, die vereinfacht einen Aufbau darstellen und ich mich dann nur frage: wie wende ich das jetzt auf meinen Code an?

Ich habe ein Hud für iRacing erstellt, welcher einige Telemetriedaten anzeigt. Geschwindigkeit, RPMs, Fuel level, Laps, usw. Das Ding berechnet auch die Schaltpunkte und hat einen Spotter (Anzeige, die mir Bescheid gibt wenn ein Auto neben mir fährt, damit ich ihn nicht überm Haufen fahre).
Das ist tatsächlich ein sehr kleines Projekt, da ich alle Daten von einem Wrapper bekomme und sie quasi nur formatiert anzeigen lassen muss. Paar Berechnungen und "Spielereien" sind noch drin und das wars dann auch. Eigentlich wollte ich noch viel mehr reintun, aber dann habe ich die Lust dran verloren, eben wegen dem Code.
Sicherlich könnte man hier vieles in andere Klassen auslagern, mit fehlen aber halt die Ideen und Ansätze wie ich das machen könnte. Ich meine, ich könnte es machen, aber das bringt mich nicht weiter, da ich mich dann frage, ob es in der Form richtig ist oder ich totalen Unsinn fabriziert habe.

Es war nicht arrogant gemeint, vielleicht habe ich mich unglücklich ausgedrückt. Ich habe bei meinen Versuchen über die besagte Sehwelle zu kommen, einige solcher Tutorials angefangen zu lesen. Es kam nur Frust auf.
Ich bin am Programmieren und merke ich komme so nicht weiter, bzw, das ist nicht gut, wie ich es mache und versuche dann Informationen zu finden, die mir weiterhelfen. Wenn ich dann seitenweise lese, was nicht einmal annähend in die Richtung geht, wo sich mein Problem befindet, und ich schon erahne, daß die nächsten zig Seiten auch nicht in diese Richtung gehen werden, dann wird es mit der Zeit für mich demotivierend. Da denk ich mir auch nur: nee, das ist nicht das, was ich suche. Und stelle mir vor, daß es irgendwo im Netz einen Artikel geben muss, der sich genau mit diesem Problem auseinandersetzt. Ich meine, ich bin bestimmt nicht der einzige damit.
01.12.2019 14:07 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.236
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat von PierreDole:
Ja, genau, das erlebe ich sehr oft. Ich sehe Beispiele, die vereinfacht einen Aufbau darstellen und ich mich dann nur frage: wie wende ich das jetzt auf meinen Code an?

Du musst aber auch von der Erwartung wegkommen, dass Du Code einfach übernehmen kannst.
Deswegen heisst der Beruf auch "Entwickler" oder je nachdem auch Ingenieur, weil man selbst überlegen, adaptieren und umsetzen muss.
Ansonsten wäre unser Job sinnfrei.

Zitat von PierreDole:
Sicherlich könnte man hier vieles in andere Klassen auslagern, mit fehlen aber halt die Ideen und Ansätze wie ich das machen könnte.

Basierend auf der Aussage deutet aber vieles darauf hin, dass Du den Sinn von Klassen eben nicht verstanden hast.

Zitat von PierreDole:
aber das bringt mich nicht weiter, da ich mich dann frage, ob es in der Form richtig ist oder ich totalen Unsinn fabriziert habe.

Aus Fehlern lernt man.

Zitat von PierreDole:
Ich habe bei meinen Versuchen über die besagte Sehwelle zu kommen, einige solcher Tutorials angefangen zu lesen. Es kam nur Frust auf.

Was meinst Du wie mir es geht, wenn ich was neues lerne, zB. eine neue Sprache.
Ich muss dann auch vor Frust eine Pause machen - und dann nochmal ansetzen.

Aber den eigenen Antrieb können wir Dir halt auch nur schlecht beibringen.

Zitat von PierreDole:
Wenn ich dann seitenweise lese, was nicht einmal annähend in die Richtung geht, wo sich mein Problem befindet, und ich schon erahne, daß die nächsten zig Seiten auch nicht in diese Richtung gehen werden, dann wird es mit der Zeit für mich demotivierend.

Würde jetzt mal in Raum werfen, dass das auch unmöglich ist.
Du wirst selten einen Treffer finden, der Dein aktuelles Problem löst - das sieht man hier im Forum auch oft.

Oft ist das im Endeffekt ein Folgefehler eines völlig falschen Ansatzes, weil man Konzepte nicht verstanden hat.
Und da helfen dann durchaus grundlegende Artikel, die eben Dein spezifisches Problem nicht lösen - aber Dein generelles.
01.12.2019 14:49 Beiträge des Benutzers | zu Buddylist hinzufügen
MrSparkle MrSparkle ist männlich
myCSharp.de-Team

avatar-2159.gif


Dabei seit: 16.05.2006
Beiträge: 5.241
Herkunft: Leipzig


MrSparkle ist online

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Für die erste grobe Übersicht bezüglich der Strukturierung ist evtl. dieser Artikel hilfreich:
 [Artikel] Drei-Schichten-Architektur

Wenn du den Code schreibst, solltest du auch gleich Unit-Tests mit anlegen. Das hilft, weil du dadurch gezwungen bist, deinen Code richtig zu strukturieren, damit er überhaupt ohne größeren Aufwand testbar ist.
 [Artikel] Unit-Tests: Einführung in das Unit-Testing mit VisualStudio

Ansonsten, wie meine Vorredner sagen: Erfahrung. Man lernt immer aus den Fehlern des vorherigen Projektes, um dann neue Fehler im nächsten Projekt zu machen.

Und ich finde es auch wichtig, ein Projekt zu planen, bevor man anfängt zu programmieren. Man kann sich vorher überlegen, was schief gehen könnte, und dann eine Lösung dafür finden, bevor man tausende Zeilen Code geschrieben hat.

Trotzdem muß man hin und wieder bereits geschriebenen Code wegschmeißen und neu schreiben. Da hilft es, wenn er gut strukturiert ist, und man nur das neu schreiben muß, was nicht funktioniert, und nicht gleich den gesamten Code.
01.12.2019 16:12 Beiträge des Benutzers | zu Buddylist hinzufügen
Coder007
myCSharp.de-Mitglied

Dabei seit: 05.08.2006
Beiträge: 1.206


Coder007 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Ich möchte mal zwei Punkte aus eigener Erfahrung anbringen.

1. Was mich hier seinerzeit weitergebracht hatte, waren tatsächlich Designpatterns. Ich hatte Delphi programmiert, OOP "verstanden", aber den Nutzen nicht erkannt, deswegen zu 90% prozedural programmiert. Erst als ich das Design Patterns Buch von der GoF gelesen habe, habe ich mir öfter gedacht, cool, so hätte ich das auch machen können. Und dann hätte das auch plötzlich Sinn ergeben, von vornherein Klassen zu haben, und nicht Listen von Structs.
2. Du schreibst, dass das was du findest, sich nicht direkt auf dein Problem anwenden lässt. Das ist zwar sehr oft richtig, und du musst vor allem lernen zu abstrahieren. Aber auch hier habe ich die Erfahrung gemacht, dass man für erstaunlich viele Probleme tatsächlich fertige Lösungen findet, evtl. muss man dafür nur umdenken und seinen Code umstrukturieren. Nur als Beispiel, ich hatte an etwas gebastelt, bei dem ich Undo/Redo haben wollte und hätt nie gedacht, dass ich dafür etwas finde, ist doch etwas sehr spezielles, wie das bei mir aufgebaut ist (Google war damals noch fast ein Geheimtipp, so leicht ist man nicht an Informationen gekommen). Ich war dann recht erstaunt, dass es dafür ganz einfache Patterns gibt, die auch bei mir problemlos funktioniert hätten.
01.12.2019 17:25 Beiträge des Benutzers | zu Buddylist hinzufügen
chilic
myCSharp.de-Poweruser/ Experte

Dabei seit: 12.02.2010
Beiträge: 2.017


chilic ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat:
Eigentlich wollte ich noch viel mehr reintun, aber dann habe ich die Lust dran verloren, eben wegen dem Code.

Da wäre interessant was für ein Code das ist, was du an ihm warum ändern willst.

Wenn du 10 Datenfelder zum Thema Geschwindigkeit und Drehmoment usw hast, und 8 Datenfelder zu Temperatur, dann noch einiges zur Position anderer Fahrzeuge etc, dann könntest du diese Felder in separate einzelne Klassen packen. Das *kann* hilfreich sein, wenn du dadurch mehr Übersicht bekommst. Code der die Daten umrechnet wie deine genannten Berechnungen und Spielereien kommt dann in die Klasse zu den Daten die er bearbeitet.

Kann aber auch völlig nutzlos sein.
Du schreibst es geht nur um die Anzeige verschiedener Datenfelder.
Wenn du dir jetzt denkst, ich übernehme ein Datenfeld einmal vom Wrapper und dann lese ich es an einer anderen Stelle einmal wieder aus, mehr passiert da nicht, also wozu soll ich das in verschiedene Codeteile aufsplitten... dann kann das durchaus auch ein Argument sein.
Schön brav - und sinnlos, grundlos - alles umzusetzen was man hört, ist nicht ratsam. Dann hast du am Ende zig Codedateien und Klassen mit nur wenig Inhalt, nutzt Interfaces "wegen der Erweiterbarkeit" weil du das mal wo gelesen hast - ohne Plan was bei dir überhaupt erweiterbar sein könnte usw.

Zitat:
Wenn ich dann seitenweise lese, was nicht einmal annähend in die Richtung geht, wo sich mein Problem befindet

Wo befindet es sich denn?
Ich habe das Gefühl du willst gerade irgendetwas anders machen, hast aber keine Idee wie anders und nicht mal warum es überhaupt anders gemacht werden soll. Und nachdem von uns anderen niemand weiß was du bisher machst, stoßen wir mit Tips natürlich spätestens jetzt an eine Grenze.
Kannst du ein Beispiel zeigen wie es jetzt ist, sowie was dir daran nicht gefällt?
02.12.2019 06:28 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Taipi88 Taipi88 ist männlich
myCSharp.de-Mitglied

avatar-3220.jpg


Dabei seit: 02.02.2010
Beiträge: 988
Entwicklungsumgebung: VS 2010
Herkunft: Mainz


Taipi88 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hi,

kann mich zwar sicher nicht als Profi bezeichnen - auf der anderen Seite:
Wenn dir dein eigener Code nicht gefällt ist das wichtigste Grundkriterium doch erfüllt.

Ich mach das häufig, dass ich Projekte die ich vor längerer Zeit erstellt hatte öffne. In vielen Fällen kann ich die Dinger nicht mehr zumachen ohne zu korrigieren was mir nun schon peinlich ist. (Und in vielen Fällen zieht das auch einen Neustart des Projekts nach sich...)

Kann dir nur empfehlen dir immer wieder Artikel über DesignPattern anzuschauen - schau dir auch andere Projekte auf GitHub an - arbeite dich in die Klassenstrukturen anderer rein und versuche tiefgreifende Funktionen zu verstehen und ggf. abzuändern - gerade in komplexeren Systemen.

LG
02.12.2019 06:56 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
M.L.
myCSharp.de-Mitglied

Dabei seit: 26.09.2006
Beiträge: 201
Entwicklungsumgebung: VS Community '19


M.L. ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

OOP ist ein Ansatz die Erfahrungen/ Beobachtungen/... der menschlichen analogen Welt auf die Welt des Rechners (Strom fliesst oder fliesst nicht) zu übertragen. WIE man die Software zusammenstellt / modelliert oder die Sinnhaftigkeit derselben ist dem Rechner (im Ggs. zum Menschen) dabei egal. Aber siehe noch den einen Beitrag von  java-forum.org .
02.12.2019 07:24 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Peter Bucher Peter Bucher ist männlich
myCSharp.de-Poweruser/ Experte

avatar-4103.jpg


Dabei seit: 17.03.2005
Beiträge: 5.883
Entwicklungsumgebung: VS 2017 / VS Code
Herkunft: Zentralschweiz


Peter Bucher ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo PierreDole

Du kannst als Praxisübung auch ein kleines Projekt durchführen. Für mich war früher ein Snake sehr geeignet. Einmal so wie gewohnt, prozedural. Und dann versucht per OOP umzusetzen.

Das geht gut, weil du die einzelnen Teile in Klassen modelieren kannst. Ich fand das eine gute Übung.


Gruss Peter
03.12.2019 11:07 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
FZelle
myCSharp.de-Poweruser/ Experte

Dabei seit: 23.04.2004
Beiträge: 9.816


FZelle ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Wau Peter, Dich gibt es noch ;-)
03.12.2019 21:19 Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum
Antwort erstellen


© Copyright 2003-2019 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 07.12.2019 18:15