Forum: PC-Programmierung OOP Literatur: Wie anfangen?


von mongo (Gast)


Lesenswert?

Mal so oberflächlich wurde die selbe Frage hier ja schon unzählige Male 
gestellt, aber nicht von mir ^^ .

Auf Arbeit kommen immer mehr Kollegen auf mich zu, die sich gerne in 
VB.NET bzw. C# einarbeiten würden. Allerdings: nach dem einwöchigen Kurs 
hier wissen sie zugleich alles und nichts. Bücher wie die "Von Kopf bis 
Fuß" Reihe sind zwar ein netter Einstieg um mal mit einem konkreten 
Anwendungsbeispiel durchzusteigen, und die Bücher von Galileo Computing 
sind als Referenzhandbücher ganz nützlich...

Aber ich merke, dass da der theoretische Unterbau fehlt. Im Prinzip das, 
was man im Studium vermittelt kriegt. Die Leute kommen aus solchen 
Aktionen mit vollen Köpfen raus, setzen sich an ihre 
Entwicklungsumgebung dran, und scheitern spätestens an der fünften 
Codezeile, weil ihnen halt der Blick fürs große Ganze fehlt, und wie man 
Probleme abstrahiert. Dass man nicht mit zwei Büchern drei, vier Jahre 
Studium ersetzen kann ist mir klar. Aber irgendwo muss man ja mal 
anfangen.

Deshalb: was ich suche, wäre ein Buch was mal tatsächlich auf die 
Theorie eingeht: was sind Klassen, was Objekte? Wann lädt die Runtime 
was? Was ist der Unterschied zwischen Methoden, Properties und Feldern, 
und wann benutzt man welche? Was sind Iteratoren, was ist lazy 
Evaluation? Was sind Value und Reference Types, und wann nimmt man 
welche? Was heißt Call-By-Value in .NET?
Noch besser wären methodische Fragen, also z.B. wie nähere ich mich 
einer großen Implementierung Stück für Stück an? Sozusagen TDD für 
Dummies. Wie komme ich an Informationen ran die mir fehlen?

Klar kann man sich das auch alles aus der MSDN zusammenstückeln, aber es 
ist für einen Anfänger kaum bewältigbar, weil ohne Erfahrung weiß man ja 
gar nicht wo man suchen soll, und nach was. Kennt zufällig jemand von 
euch geeignete Literatur? Im Zweifel auch gerne von anderen modernen 
Hochsprachen, also z.B. Java, Python etc. , damit ich mal vergleichen 
kann.
Wenn es was taugt, darf es auch durchaus Geld kosten, hier geht es 
nunmal nicht um Freizeitaktivitäten.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

mongo schrieb:
> weil ihnen halt der Blick fürs große Ganze fehlt,
> und wie man Probleme abstrahiert

Das ist aber nichts was man an Büchern oder einer konkreten 
Programmiersprache lernt. Alle Theorie kann die Praxis nicht ersetzen 
(auch ein Studium nicht), man muss einfach mal "machen".

Dann wird man auf Probleme stoßen, und diese Probleme kann man dann 
versuchen mit neuen Konzepten (z.B. OOP) zu lösen, am besten indem man 
das alte Wegwirft und nochmal neu macht.

mongo schrieb:
> was sind [...]

Ich glaub jedes Buch erklärt was der Begriff bedeutet, was "das" 
wirklich ist erkennt man aber erst viel später.

Also was genau ist dir Unklar? Viele deiner W-Fragen sind auch
a) uninterresant für das Verständnis OOP
b) an eine konkrete Sprache gebunden

von Ulli N. (Gast)


Lesenswert?

mongo schrieb:
> Deshalb: was ich suche, wäre ein Buch was mal tatsächlich auf die
> Theorie eingeht: was sind Klassen, was Objekte? Wann lädt die Runtime
> was? Was ist der Unterschied zwischen Methoden, Properties und Feldern,
> und wann benutzt man welche? Was sind Iteratoren, was ist lazy
> Evaluation? Was sind Value und Reference Types, und wann nimmt man
> welche? Was heißt Call-By-Value in .NET?

Das steht in jedem Buch drin. Das Problem ist, daß es einem erst richtig 
klar wird, wenn man etwas damit macht. Abgesehen davon ist das 
Wichtigste, daß man die Klassenbibliothek mit der man arbeitet, 
mindestens so gut kennt, wie seine Frau. Ergo: Softwareentwicklung ist 
reine Erfahrungssache.

von Rene H. (Gast)


Lesenswert?

Meiner  Meinung nach, kann man OOP nicht für sich alleine lernen wenn 
man keine OO Erfahrungen hat.

Ich denke da gehört auch Software Engineering und OOA dazu, erst dann 
kommt der Sinn von OOP richtig zur Geltung und der Kreis schliesst sich.

Demnach würde ich folgendes Buch empfehlen:

http://www.amazon.de/Objektorientierte-Softwareentwicklung-Analyse-Modeling-Language/dp/3486255738

Oder eine sauber Weiterbildung (kein Kurs).

Grüsse,
René

von rrrr (Gast)


Lesenswert?

Entwickler die danach Fragen wie sie etwas lernen und Entwickler die 
Galileo Computer Bücher benutzen.

Möchtest du den Namen deiner Firma nennen? Dann weiß ich wo ich mich auf 
jedenfall nicht bewerbe.

von Purzel H. (hacky)


Lesenswert?

Das Ganze OOP ist relativ trivial. Vorher hatte man globale Variablen 
und globalre Proceduren die darauf was machten.

Mit OOP fasst man zusammengehoerige Strukturen zusammen. Also Proceduren 
und Daten zusammen ergeben ein Objekt.
Die Bauvorschrift fuer ein Objekt nennt sich Klasse. Resp eine Instanz 
einer Klasse nennt man Objekt.
Die Proceduren, die zu einer Klasse gehoeren, nennt man 
Memberfunktionen.
Nach aussen sichtbaren Daten eines Objektes nennt man Eigenschaften 
(Properties).

Ein paar Begriffe.

Encapsulation. man definiert objektinterne Procedure als privat, die 
sind von ausserhalb nicht sichtbar und auch nicht ausfuehrbar.

Vererbung. Beginnend mit einer einfachen Klasse kann man weitere Klassen 
bilden, indem man der Vorgaengerklasse zusaetzliche Eigenschaften 
(Daten) sowie zusaetzliche Funktionalitaet (Procedure, Memberfunktionen) 
verpasst.

Es gibt dann auch noch befreundete Klassen usw.

von Yalu X. (yalu) (Moderator)


Lesenswert?

Um aus der OOP Nutzen ziehen zu können, muss man sich erst einmal klar
machen, worin dieser Nutzen überhaupt besteht. Sonst läuft es darauf
hinaus, dass man (wie viele) OOP um der OOP Willen macht, und man steckt
jede Menge Energie hinein, ohne dass ein wirklicher Gewinn dabei
herausspringt.

Die meisten Programmierparadigmen sind mit dem Ziel entwickelt worden,
die Produktivität bei der Softwareentwicklung zu erhöhen durch

- gute Beherrschbarkeit auch großer Softwareprojekte,

- leichte Wiederverwendbarkeit von Softwareteilen und

- Beseitigung häufiger Fehlerquellen.

OOP hat sich vor allem die ersten beiden Punkte (Beherrschbarkeit und
Wiederverwendbarkeit) auf die Fahnen geschrieben und kann dabei
tatsächlich eine große Hilfe darstellen. Leider vermitteln die meisten
OOP-Bücher dem Anfängere den Eindruck, die Beherrschbarkeit und die
Wiederverwendbarkeit würden durch OOP automatisch verbessert.

Ausgehend von dieser falschen Prämisse stellen diese Bücher im
Wesentlichen eine Anleitung dafür dar, wie die zu entwickelnde Software
in irgendeiner Weise mit einer OO-Struktur versehen werden kann.
Inwieweit diese Struktur tatsächlich dem Wunsch nach besserer
Beherrschbarkeit und Wiederverwendbarkeit entgegenkommt, scheint dabei
oft zweitrangig zu sein.

Es gibt ein paar Probleme, auf die man früher oder später stößt und die
ein wenig an der reinen OO-Lehre zerren, weswegen sie in der Literatur
gerne unter den Teppich gekehrt werden. Beispiele:

- Leichte Beherrschbarkeit und Wiederverwendbarkeit widersprechen sich
  oft. Man muss sich dann bei der Festlegung der Softwarestruktur
  entscheiden, welchem der beiden Aspekte man den Vorzug gibt.

- Gewisse Aufgabenstellungen lassen sich von ihrer Natur her nicht
  sinnvoll in ein OO-Korsett zwängen. Es ist dann nicht falsch, sondern
  sogar klug, die entsprechenden Programmteile mit prozeduralen
  Elementen zu implementieren.

Diese Probleme wären gar keine, wenn sie in der Literatur zusammen mit
Entscheidungshilfen zu deren Lösung offen auf den Tisch gelegt würden.

Ich möchte die OOP-Literatur aber nicht schlecht reden, man sollte sie
nur nicht überbewerten. Zudem kenne ich kein Buch zu dem Thema, das ich
guten Gewissens als so eine Art Bibel empfehlen könnte.

Man kann sich aber durchaus so ein Buch schnappen (am besten kein allzu
dickes, damit man mit dem Lesen auch irgendwann wieder fertig wird ;-))
und sich darin die Grundbegriffe und ein paar Grundtechniken erarbeiten.

Dann kommt aber kein zweites Buch, sondern der Schritt in die Realität.
Dieser sieht so aus, dass man sich Code von anderen anschaut und die
konzeptionellen Rosinen herauspickt. Das läuft bei mir oft
folgendermaßen ab:

Ich möchte an irgendeiner riesigen Open-Source-Anwendung kleine
Änderungen vornehmen, finde mich in dieser Software wider Erwarten
sofort zurecht, und habe die Änderungen in erstaunlich kurzer Zeit
erledigt.

Oder ich stelle fest, dass es da eine Open-Source-Bibliothek gibt, die
ich immer wieder gerne in ganz unterschiedlichen Projekten verwende,
weil deren Datentypen und Funktionen/Methoden an vielen Stellen nahtlos
in meinen eigenen Code passen.

In beiden Fällen sage ich mir: Genauso wie die Entwickler dieser
Anwendung bzw. der Bibliothek will ich es auch können und versuche durch
Analyse der Softwarestruktur, der APIs, der Datentypen und ggf. auch der
einzelnen Funktionen und Methoden das Geheimnis zur ergründen, warum ich
mit der Software so gut zurecht komme. Die zugrundeliegenden Ideen
verwende ich dann zukünftig auch in meinen eignenen Softwareprojekten.

von Stefan R. (srand)


Lesenswert?

Siebzehn mal Fuenfzehn schrieb:
> Mit OOP fasst man zusammengehoerige Strukturen zusammen. Also Proceduren
> und Daten zusammen ergeben ein Objekt.

In CLOS ist das anders.

von Purzel H. (hacky)


Lesenswert?

Die Schwierigkeiten beim weiterfuehrenden Einsatz von OOP sind die 
Libraries. Die vorgeferigten Klassen kommen mit einem ueberladen 
erscheinenden Funktionssatz daher.

zB Image1.Canvas.Pen.Color:=clBlack;
Das ist ein List von angeflanschten Eigenschaften, die alle etwas 
bedeuten.


Da muss man sich eben einarbeiten. In die Library. Wenn dieselbe 
Funktionalitaet als Vor-OOP daherkaeme, waere sie um Groessenordnungen 
unuebersichlicher.
Als Beispiel mag die MFC : Microsoft Foundation Class dienen, aus der 
WinNT Zeit.
Deren Standardinterface war LParam : pointer; LCount:integer; Da kann 
man alles anflanschen. Theoretisch. Das Falsche hat einfach nicht 
funktioniert.
Delphi hat dann MFC auf OOP umgebogen. Und das wurde dann spaeter duch 
Dot-Net abgekupfert, resp verschlechtert.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.