Objektorientierte Programmierung 2. Vorlesung Prof. Dr. Peter Knauber Email: P.Knauber@fh-mannheim.de FACHHOCHSCHULE MANNHEIM Hochschule für Technik und Gestaltung Kurzer Vor der Objektorientierung Programmierstile Sprachen Probleme Objektorientierung Begriffe Grundlegende Ideen Notationen Nach der Objektorientierung Literatur Folie 1
Folie 2 The Big Picture: Warum ist Software-Entwicklung ein Thema? Folie 3
Aufgaben für die Software-Entwicklung Mehr Aufwand in die Konzeption/Planung stecken und Verlässliche Schätzmodelle für Aufwand und Kosten entwickeln Auf erprobten und funktionierenden Lösungen (Konzepten) aufbauen: Architektur, Design Erprobte und funktionierende Komponenten wiederverwenden: Baugruppen, Komponenten, Module, Packages Bauklötze, Lego! Wiederverwendung Relation zur Objektorientierung: Die Objektorientierung enthält Konzepte, die als förderlich für Wiederverwendung angesehen werden Auf die Objektorientierung lassen sich relativ gut weiterführende Konzepte / Modelle aufbauen Folie 4 Objektorientierung ein neues Entwicklungsparadigma Hoffnung auf besonders gutes Verhalten objektorientierter Programme Modularität Verständlichkeit ( das Programm ist die Dokumentation ) Wiederverwendbarkeit... Es gab Probleme mit früheren Programmierstilen dazu gleich mehr! Beispiele für frühere Programmierstile Imperative / strukturierte Programmierung Funktionale Programmierung Deklarative Programmierung Folie 5
Folie 6 Sprachen vor der Objektorientierung 1/2 Beispiele für imperative / strukturierte Programmiersprachen Maschinensprache, Assembler Fortran I 95 Algol PL/I Cobol Basic Pascal C Modula-2... Folie 7
Sprachen vor der Objektorientierung 2/2 Beispiele für funktionale / deklarative Programmiersprachen Common Lisp Scheme Haskell Prolog... Folie 8 Exkurs: Abstammung von Programmiersprachen 1957 1960 1965 1970 Lisp Cobol Algol 60 PL/I Algol-W Algol 68 Pascal C Fortran I Fortran IV Basic BCPL 1975 1980 1985 Common Lisp Modula-2 Ada Fortran 77 1990 1995 Ansi-C Fortran 90 Fortran 95 Folie 9
Stile vor der Objektorientierung 1/2 Probleme mit strukturierter Programmierung Anweisungs-orientiert Algorithmus-orientiert Spaghetti-Code Der Problemstellung nicht angemessen, Beispiel: Simulation Bruch zwischen Anforderungsmodellierung (Problemraum) und Realisierung (Lösungsraum)... Folie 10 Stile vor der Objektorientierung 2/2 Probleme mit funktionaler / deklarativer Programmierung Zu wenig Ablaufkontrolle, oft zu langsam Extrem nicht-anweisungs-orientiert Teilweise unverständlich (durch komplexe Konstrukte) Der Problemstellung nicht angemessen... Folie 11
Folie 12 Begriffe der Objektorientierung (nicht vollständig!) Objekte Klassen Instanziierung Vererbung / Inheritance Attribute Polymorphismus Dynamische Bindung Initialisierung Methoden Operationen Mitteilungen / Messages Sichtbarkeit Kapselung Identität von Objekten Struktur und Verhalten Delegation Objektorientierte Analyse (OOA) Objektorientiertes Design (OOD) Objektorientierte Programmierung (OOP) Objektorientiertes Testen Objektorientierte Wartung Folie 13
Ideen der Objektorientierung Software wird gesehen als eine Sammlung diskreter Objekte (entsprechend denen aus der realen Welt) inklusive ihrer (Daten-) Struktur und ihres Verhaltens Das führt zu Datenorientierung (im Unterschied zum imperativen Stil) Programm / Algorithmen sind um Daten gruppiert Daten sind oft Zustandsdaten, das ist sehr gut geeignet für Simulationen: Ursprung von Simula 67 (mehr dazu später) Folie 14 Notationen (und Methoden) für Objektorientierung 1/3 Object-Oriented Specification (OOS), Sidney Bailin, NASA, CACM 1989 Responsibility Driven Design (RDD), Rebecca Wirfs-Brock, Brian Wilkerson, Lauren Wiener, Tektronix, Buch 1990 Object-Oriented Design (OOD), Grady Booch, Rational, Buch 1991 Object-Oriented Analysis (OOA), Peter Coad, Ed Yourdon, Object International, Buch 1990 und 1991 Object-Modeling Technique (OMT), James Rumbaugh, Michael Blaha, Wiliam Premerlani, Frederick Eddy, Wiliam Lorenson, General Electric Research and Development Center, Buch 1991 Object-Oriented System Analysis (OOSA), Sally Shlaer, Stephen Mellor, Project Technology, Bücher 1988 und 1991 Object-Oriented Systems Analysis (OSA), David Emblem, Barry Kurz, Schot Woodfield, Hewlett Packard, Buch 1992 Folie 15
Notationen (und Methoden) für Objektorientierung 2/3 Object-Behavior Analysis (OBA), Keneth Rubin, Adele Goldberg, Parc Place Systems, CACM, 1992 Better Object Notation (BON), Jean-Marc Nerson, Societe des outils du logiciel, CACM 1992 Object-Oriented Software Engineering (OOSE, Objectory), Ivar Jacobson, Schweden, Buch 1992 Object-Oriented Analysis & Design (OOA&D), James Martin, James Odell, USA, Buch 1992 Object-Oriented Analysis, Design & Implementation (OOO), Brian Henderson-Sellers, Julian Edwards, University of New South Wales, CACM 1990, Buch 1992 Folie 16 Notationen (und Methoden) für Objektorientierung 3/3 OMG Unified Modeling Language (UML) Specification, Object Management Group, Version 1.4, 2000 Fusion, Coleman, Arnold, Bodoff, Dollin, Gilchrist, Hayes, Jeremaes, Buch, 1994 Real-Time Object-Oriented Modeling (ROOM), Selic, Gullekson, Ward, Buch 1994Hierarchical Object-Oriented Design (HOOD), Robinson, Buch 1992 OORAM, Reenskaug, Wold, Lehne, Buch 1996 Rational Unified Process (RUP), Jacobson, Booch, Rumbaugh, Buch, 1999 Object-Oriented, Process, Environment, and Notation (OPEN), Graham, Henderson-Sellers, Younessi, Buch 1995 Und natürlich: entsprechende Programmiersprachen! Folie 17
Folie 18 Objektorientierte / hybride Programmiersprachen Simula 67 Smalltalk 80 (aus Simula) CLOS (aus Common Lisp) Oberon-2 (aus Modula-2) C++ (aus C) ObjectPascal (aus Pascal) Delphi (aus Pascal) Ada (aus Pascal und anderen) Eiffel Java (aus C++/C) C# (aus Java) Folie 19
1957 1960 1965 1970 Lisp Exkurs: Abstammung von Programmiersprachen Fortran I Cobol Algol 60 Algol-W Pascal PL/I Algol 68 C Basic BCPL Fortran IV Simula 67 1975 1980 1985 1990 1995 2000 Common Lisp CLOS Modula-2 Ada Delphi Oberon-2 Ada 9x ObjectPascal Folie 20 Ansi-C Java C# C++ Smalltalk 80 Fortran 77 Fortran 90 Fortran 95 Die erste oo Sprache: Simula Simula = SIMUlation LAnguage Simula 67 entstand aus Simula I, um für allgemeine Programmierzwecke tauglich zu werden Ursprung: Für die Simulation wurden unterbrechbare Unterprogramme benötigt, die am Ort der Unterbrechung wieder fortgesetzt werden konnten. Das wurde realisiert in Form von Klassen mit: Hierarchisierung, Vererbung, Initialwerten, Instanziierung Objekten, deren Eigenschaften von Klassen festgelegt werden, mit: lokalen, statischen Daten (bleiben zwischen Zugriffen erhalten) Methoden realisierten die verschiedenen Teile der Unterprogramme Damals waren Abstrakte Datentypen noch kein Begriff (erst ab '72), aber die Mechanismen waren bereits vorhanden! Folie 21
Und was kommt nach der Objektorientierung? Design Pattern Komponenten Architekturen Produktlinien Generierung... Folie 22 Folie 23
Literatur Atkinson, Bayer, Bunse, Kamsties, Laitenberger, Laqua, Muthig, Paech, Wüst, Zettel: Component-based Product Line Engineering with UML ("KobrA"), Addison Wesley Heide Balzert: UML kompakt mit Checklisten, Spektrum Bruce Eckel: Thinking in Java, 2nd Edition, Prentice Hall; http://www.mindview.net/books/tij/ David Flanagan: Java in a Nutshell: A Desktop Quick Reference, 2nd Edition, O Reilly Ivar Jacobsen, Grady Booch, James Rumbaugh: The Unified Software Development Process ("RUP"), Addison-Wesley http://java.sun.com: Java Development Kit 1.4 Dokumentation (API) dazu Tutorials etc. Folie 24