Inhaltsverzeichnis
12. Objektorientierte Programmierung (OOP)
- Themen
- Motivation: Warum objektorientiert programmieren?
- Paradigmenwechsel: strukturiert zu objektorientiert
- Grundlagen: Konzepte der objektorientierten Programmierung
- Ausblick: objektorientiertes Design
- Glossar
- Kapitel bei Springer
- https://link.springer.com/chapter/10.1007/978-3-662-71607-6_12
Zentrale Aspekte
- OOP ist eine Abstraktion, die die Abbildung realer Probleme
auf Code stark vereinfachen kann. - OOP erfordert ein grundlegendes Umdenken
verglichen mit anderen Programmierparadigmen. - Richtig eingesetzt erleichtert OOP die Erstellung
modularen, robusten und wiederverwendbaren Codes. - Objektorientierte und strukturierte Programmierung
schließen sich nicht gegenseitig aus. - Die Kernaspekte von OOP sind
Kapselung, Vererbung und Polymorphie.
Zusammenfassung
Viele Wissenschaftlerinnen und Wissenschaftler, die eher nebenher etwas Programmieren gelernt haben, kommen spät oder gar nicht mit der objektorientierten Programmierung (OOP) in Berührung. Das ist schon deshalb schade, weil ihnen dadurch viele Möglichkeiten und Konzepte entgehen, die sich sehr gut einsetzen lassen, um den Anforderungen wissenschaftlicher Software zu genügen: modularer, robuster, wiederverwendbarer Code, der auch noch ausreichend getestet und testbar ist.
Dieses Kapitel liefert nur einen ersten Einstieg in die Thematik und stellt die grundlegenden Konzepte der OOP vor: Kapselung, Vererbung, Polymorphie und Zusammensetzung. Gleichzeitig versucht es zu motivieren, warum sich die Beschäftigung mit der OOP gerade auch für die wissenschaftliche Softwareentwicklung lohnt. Wichtig ist dabei: OOP erfordert eine grundlegend andere Art zu denken als rein strukturierte Programmierung. Und diesen Paradigmenwechsel erfolgreich zu meistern setzt eigene aktive Programmierarbeit, Neugier und Investition voraus.
Fragen zur Vertiefung und Wiederholung
Diese Fragen dienen der persönlichen Beschäftigung mit der Thematik, es werden aber keine Antworten zur Verfügung gestellt.
- Warum kann objektorientierte Programmierung sehr hilfreich sein, um die eingangs im Buch aufgestellten Kriterien für Programme zur wissenschaftlichen Datenverarbeitung zu erfüllen?
- Was sind die Kernaspekte objektorientierter Programmierung?
- Was ist der Unterschied zwischen Vererbung und Zusammensetzung? Welche Vor- und Nachteile bieten beide Konzepte?
- Warum können zu tiefe Vererbungshierarchien zu einem Problem werden?
- Nennen Sie drei allgemein anwendbare Grundprinzipien für objektorientiertes Design.
Weiterführende Literatur
Eine kommentierte und handverlesene Liste mit weiterführender Literatur zum Thema. Die Auswahl ist zwangsläufig subjektiv.
Eines der wenigen Bücher, die sich darum bemühen, das Paradigma der objektorientierten Programmierung allgemein und möglichst unabhängig von der konkreten Implementierung in einer Programmiersprache darzustellen, ist [Weisfeld, 2013Weisfeld, Matt (2013): The Object-Oriented Thought Process, Addison-Wesley, Upper Saddle River, New Jersey]. Sehr auf Beispiele aus dem wissenschaftlichen Kontext und auf Python als Programmiersprache zugeschnitten ist [Scopatz, 2015Scopatz, Anthony; Huff, Kathryn D. (2015): Effective Computation in Physics, O'Reilly, Sebastopol], Kapitel 6. Allgemein und kurz ist Kapitel 23 in [Passig, 2013Passig, Kathrin; Jander, Johannes (2013): Weniger schlecht programmieren, O'Reilly, Heidelberg].
Ein Klassiker der „Einführung“ in die objektorientierte Programmierung, wenn auch nur noch antiquarisch zu erwerben und eher dick (knapp 1200 Seiten), ist [Meyer, 1997Meyer, Bertrand (1997): Object-Oriented Software Construction, Prentice Hall PTR, Upper Saddle River, New Jersey]. Auch hier liegt der Fokus nicht auf einer konkreten Sprache, sondern auf den allgemeinen Prinzipien.
Weiterführende Bücher, die objektorientiertes Design (OOD) und objektorientierte Architektur (OOA) in größerem Detail vorstellen, sind jene von Evans [Evans, 2004Evans, Eric (2004): Domain-Driven Design, Addison Wesley, Boston], Fowler [Fowler, 2003Fowler, Martin (2003): Patterns of Enterprise Application Architecture, Addison Wesley, Boston] und Larman [Larman, 2005Larman, Craig (2005): Applying UML and Patterns, Prentice Hall, Upper Saddle River, New Jersey]. Sie weisen bereits weit hinaus zu Entwurfsmustern (design patterns, Kapitel 17) und in die Software-Architektur (Kapitel 22). Viele hilfreiche Details zu diesem gesamten Themenkonplex finden sich auch überall in McConnell [McConnell, 2004McConnell, Steve (2004): Code Complete. A practical handbook of software construction, Microsoft Press, Redmond, Washington].
- Evans, Eric (2004): Domain-Driven Design, Addison Wesley, Boston
- Fowler, Martin (2003): Patterns of Enterprise Application Architecture, Addison Wesley, Boston
- Larman, Craig (2005): Applying UML and Patterns, Prentice Hall, Upper Saddle River, New Jersey
- McConnell, Steve (2004): Code Complete. A practical handbook of software construction, Microsoft Press, Redmond, Washington
- Meyer, Bertrand (1997): Object-Oriented Software Construction, Prentice Hall PTR, Upper Saddle River, New Jersey
- Passig, Kathrin; Jander, Johannes (2013): Weniger schlecht programmieren, O'Reilly, Heidelberg
- Scopatz, Anthony; Huff, Kathryn D. (2015): Effective Computation in Physics, O'Reilly, Sebastopol
- Weisfeld, Matt (2013): The Object-Oriented Thought Process, Addison-Wesley, Upper Saddle River, New Jersey
