Software-Entwicklung: Konzepte der Objektorientierung



Ähnliche Dokumente
Objektorientierte Programmierung OOP

Softwaretechnik (Allgemeine Informatik) Überblick

3. Konzepte der objektorientierten Programmierung

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 22

EinfÅhrung in die objektorientiere Programmierung (OOP) unter Delphi 6.0. EDV Kurs 13/2

Klassendiagramm. Kurzer Überblick über UML - Stand BlaBla

Fachdidaktik der Informatik Jörg Depner, Kathrin Gaißer

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

5. Abstrakte Klassen. Beispiel (3) Abstrakte Klasse. Beispiel (2) Angenommen, wir wollen die folgende Klassenhierarchie implementieren:

5. Abstrakte Klassen

OO Softwareentwicklung

Objektorientierte Programmierung

Grundzüge der Programmierung. Konzepte der objektorientierten Programmierung (oop) OBJEKTE - KLASSEN

Java Einführung Umsetzung von Beziehungen zwischen Klassen. Kapitel 7

Unified Modeling Language (UML)

Objektorientierung. Objekte

SEP 114. Design by Contract

Lösungen zu Übung 3 Objektorientierte Modellierung - Statisches Modell

Vorkurs C++ Programmierung

Drei-Schichten-Architektur. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 16: 3-Schichten-Architektur 1 Fachkonzept - GUI

Übungen zur Softwaretechnik

Programmiersprache 2 (C++) Prof. Dr. Stefan Enderle NTA Isny

Vorlesung Programmieren. Unified Modeling Language (UML) Unified Modeling Language (UML) Unified Modeling Language (UML)

Vorlesung Programmieren

Diplomarbeit. Konzeption und Implementierung einer automatisierten Testumgebung. Thomas Wehrspann. 10. Dezember 2008

7. Objektorientierte Softwareentwicklung/3. Informatik II für Verkehrsingenieure

Prinzipien Objektorientierter Programmierung

Objektorientierter Software-Entwurf Grundlagen 1 1. Analyse Design Implementierung. Frühe Phasen durch Informationssystemanalyse abgedeckt

Java: Vererbung. Teil 3: super()

Dr. Hanno Schauer Mons-Tabor-Gymnasium Montabaur. UML-Klassendiagramme als Werkzeug im Unterricht

Fassade. Objektbasiertes Strukturmuster. C. Restorff & M. Rohlfing

Objektorientierte Programmierung. Kapitel 12: Interfaces

SWE5 Übungen zu Software-Engineering

Prüfungszeuch im Fach Objektorientierte Programmierung WS 2000

Software Engineering Klassendiagramme Assoziationen

Assoziation und Aggregation

Objektorientierte Programmierung für Anfänger am Beispiel PHP

Techniken der Projektentwicklungen

EINFÜHRUNG IN DIE WIRTSCHAFTSINFORMATIK -ÜBUNGEN- Marina Tropmann-Frick

Kapitel 6. Vererbung

Kapitel 2: Der Software-Entwicklungsprozess

Grundlagen von Python

Objektorientierte Softwareentwicklung

Client-Server-Beziehungen

Klassenentwurf. Wie schreiben wir Klassen, die leicht zu verstehen, wartbar und wiederverwendbar sind? Objektorientierte Programmierung mit Java

Kapitel 6. Vererbung

Proseminar: Website-Managment-System. NetObjects Fusion. von Christoph Feller

Vermeiden Sie es sich bei einer deutlich erfahreneren Person "dranzuhängen", Sie sind persönlich verantwortlich für Ihren Lernerfolg.

Objektorientierte Konzepte und Notation in UML. Objekt Klasse Attribut Operation

Klassendiagramm. (class diagram)

Fachgebiet Informationssysteme Prof. Dr.-Ing. N. Fuhr. Programmierung Prof. Dr.-Ing. Nobert Fuhr. Übungsblatt Nr. 6

Programmieren II Vererbung. Programmieren II Vererbung. Programmieren II Vererbung. Programmieren II Vererbung. Einleitende Bemerkungen

Code wiederverwenden: Objektorientierte Programmierung (OOP) sinnvoll nutzen Roland Wagner Automatisierungstreff IT & Automation 2015

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

Einführung in die Programmierung mit Java. Hörsaalübung

Software Engineering. Zur Architektur der Applikation Data Repository. Franz-Josef Elmer, Universität Basel, HS 2015

Probeklausur Softwareengineering SS 15

Prof. Dr. Uwe Schmidt. 21. August Aufgaben zur Klausur Objektorientierte Programmierung im SS 2007 (IA 252)

SharePoint Demonstration

7. Analyse-Phase: Datenmodellierung Software Engineering

Autorisierung. Sicherheit und Zugriffskontrolle & Erstellen einer Berechtigungskomponente

1 Mathematische Grundlagen

Java lernen mit BlueJ

THEMA: "SAS STORED PROCESSES - SCHNELL GEZAUBERT" HELENE SCHMITZ

Daniel Warneke Ein Vortrag im Rahmen des Proseminars Software Pioneers

Willkommen zur Vorlesung. Objektorientierte Programmierung Vertiefung - Java

Objektorientierte Programmierung

Programmieren in Java

PHP Aufbaukurs. Tag 3. PHP5 & Klassen

Objektorientierung: Klassen und Objekte

Software Engineering Interaktionsdiagramme

SEQUENZDIAGRAMM. Christoph Süsens

Software Engineering Klassendiagramme weiterführende Konzepte

Ordner Berechtigung vergeben Zugriffsrechte unter Windows einrichten

Handbuch ECDL 2003 Basic Modul 5: Datenbank Grundlagen von relationalen Datenbanken

Individuelle Formulare

Einführung in die Programmierung für NF

Objektorientierte Programmiersprachen

VBA-Programmierung: Zusammenfassung

Barrierefreie Webseiten erstellen mit TYPO3

Abamsoft Finos im Zusammenspiel mit shop to date von DATA BECKER

Einführung in die Programmierung

Lösungen zu Übung 3 Objektorientierte Modellierung - Statisches Modell

Kapitel 6. Vererbung

Prüfung Software Engineering I (IB)

Fachbericht zum Thema: Anforderungen an ein Datenbanksystem

Xcode/Cocoa/Objective-C Crashkurs Programmieren unter Mac OS X

Agile Vorgehensmodelle in der Softwareentwicklung: Scrum

Vererbung & Schnittstellen in C#

Objektbasierte Entwicklung

OOD. Objektorientiertes Design. Peter Coad und Edward Yourdon. Prentice Hall Verlag

Informatik für Schüler, Foliensatz 21 Objektorientierte Programmierung

Ein Blick voraus. des Autors von C++: Bjarne Stroustrup Conrad Kobsch

Workshop 6. Einführung in die objektorientierte Programmierung. Teil: Java mit BlueJ

Einführung in die Java- Programmierung

Eine Klasse beschreibt Objekte mit gleichen Attributen und Methoden.

Inhalt. 1 Einleitung AUTOMATISCHE DATENSICHERUNG AUF EINEN CLOUDSPEICHER

Grundkonstrukte der Objektorientierung in Java, C# und C++

Innere Klassen in Java

Im Original veränderbare Word-Dateien

Transkript:

Software-Entwicklung: Konzepte der Objektorientierung 1

Übersicht Objektorientierte Softwareentwicklung Klasse und Objekt Attribut und Operation Schnittstelle Taxonomie und Vererbung Weitere Begriffe 2

Softwareentwicklung Die Entwicklung hochwertiger Software ist aufwändig und wird immer aufwändiger... Ein paar Gründe: Umfang der zu erstellenden Applikationen Grafische Benutzeroberflächen (GUIs) Verteilte Applikationen Verteilte Datenhaltung... 3

Soziale Komplexität Software-Entwicklung ist nicht ausschliesslich eine technische Aufgabe, sondern auch ein komplexer sozialer Prozess Softwaresysteme sind (in unterschiedlichem Masse) in ein soziales Umfeld eingebettet Bei der Entwicklung solcher Systeme spielt auch linguistisches und psychologisches Wissen sowie kommunikative Fähigkeiten eine wichtige Rolle 4

Abstraktion Die Geschichte der Software- Entwicklung ist verbunden mit einer kontinuierlichen Steigerung der Abstraktion Bitmuster Makrobefehle Prozeduren Abstrakte Datentypen Objekte Frameworks Entwurfsmuster Komponenten? 5

Objektorientierung Eine bestimmte Art, Software zu organisieren Integration von Daten und Prozeduren in Form von Objekten im Vordergrund Objektorientiert: Resultierende Softwaresysteme Herangehensweisen bei der Softwareentwicklung Die verwendeten Programmiersprachen und Entwicklungsumgebungen 6

Begriffe und Abkürzungen OOA/OOD: Object-Oriented Analysis and Object-Oriented Design: Untersuchung eines Problembereichs und Entwickeln eines Modells auf der Grundlage objektorientierter Konzepte OOP: Object-Oriented Programming OOSE: Object-Oriented Software-Engineering OOPL: Object-Oriented Programming Language: Programmiersprache, die Konzepte der Objektorientierung wie Abstraktion, Kapselung, hierarchische Strukturen und Vererbung unterstützt; Beispiele: Smalltalk, C++ und Java 7

Analyse und Design Jeder Anwendungsrealisierung sollte unabhängig von der Art der Realisierung eine Planungsphase vorausgehen Es gibt verschiedene Methoden, Notationen und Werkzeuge, die diese Planungsphase zum Gegenstand haben Ziel ist es, die Komplexität, mit der man es bei der Entwicklung grosser Software-Systeme zu tun hat, beherrschbar zu machen 8

Notation UML: Unified Modelling Language Grady Booch, James Rumbaugh, Ivar Jacobson Object Management Group (OMG) als Standardisierungsgremium Die UML ist im wesentlichen eine Vereinheitlichung der grafischen Darstellung und Semantik der Modellierungselemente Es wird dadurch keine Methodik vorgegeben 9

Methodik Mit der UML ist eine Notation festgelegt Unabhängig davon existieren verschiedene Ansätze zur Entwicklungsmethodik (auch: Prozess, Vorgehensmodell) Beispiele: Unified Process (UP) Object Engineering Process (OEP) Rational Unified Process (RUP) 10

Werkzeuge Die UML ist ausdrucksstark und detailreich Die auf ihr basierenden Methoden sind oft für grösste Entwicklungsprojekte ausgelegt Es existieren leistungsfähige Werkzeuge, die Notation und Methodik unterstützen Aber: Das Zusammenspiel zwischen UML, Werkzeug und Methodik ist alles andere als trivial 11

Werkzeuge Im Normalfall muss Methodik und Werkzeugeinsatz daher an die Erfordernisse des Projekts angepasst werden Werkzeuge können dabei helfen, die Komplexität beherrschbar zu machen Aber: Werkzeuge können die fachlichen und methodischen Fehler ihrer Anwender nicht ausgleichen 12

Objektorientierte SwE Merkmale des objektorientierten Ansatzes: Ganzheitliche Arbeitsgegenstände: Einheit von Daten und Operationen (Klassenkonzept) statt deren Trennung Bessere Abstraktionsmöglichkeiten: Modellierung stärker vom Lösungs- in den Problembereich verschoben Methodische Durchgängigkeit: Ergebnisse können in die nachfolgenden Phasen übernommen werden 13

Abstraktion Alle Programmiersprachen unterstützen Abstraktionen, allerdings in unterschiedlichem Ausmass Je nach Art und Qualität der Abstraktionsmöglichkeiten lassen sich Probleme geringerer oder höherer Komplexität lösen Assemblersprachen bieten nur eine geringe Abstraktion der jeweiligen Maschinensprachen Sprachen wie Fortran, BASIC, und C sind Abstraktionen von Assemblersprachen 14

Abstraktion Bestimmte Sprachen unterstützen weitergehende Abstraktion, aber beschränkt auf bestimmte Problemklassen: Lisp: Listen als zentrale Datenstruktur Prolog: Folge von Entscheidungen und ein Backtracking-Algorithmus Objektorientierung: Nähe zwischen Problem- und Lösungsbereich abzubildende Elemente des Problembereichs können als Objekte beschrieben werden 15

Abstraktionsmittel Teil-Ganzes-Beziehung Ein Objekt besteht aus Teilen, es hat Teile Ein Auto besteht aus (hat) Motor, Karosserie, Sitzen In Programmiersprachen gibt es dafür Strukturen Oberbegriff-Beziehung Fasst mehrere Arten unter einem Begriff zusammen Ein Cabriolet ist ein Auto; Ein Auto ist ein Fahrzeug Nur in objektorientierten Programmiersprachen unterstützt 16

Methodische Durchgängigkeit Entwickler: Anwender: Entwickler: Anwender: "Was ist Euch wichtig?" "Der Kunde." "Was ist ein Kunde, welche Merkmale sind für Euch relevant?" "Der Kunde hat einen Namen, eine Anschrift, und eine Bonität, die wir überprüfen." 17

Methodische Durchgängigkeit "Der Kunde." Kunde name "Der Kunde hat einen Namen, eine Anschrift, und eine Bonität, die wir überprüfen." anschrift bonitaet bonitaetpruefen() Klasse 18

Methodische Durchgängigkeit Kunde name anschrift class Kunde { String name; Anschrift anschrift; Bonitaet bonitaet; bonitaet bonitaetpruefen() } public void bonitaetpruefen() {... } 19

Objektorientierte SwE Vorteile objektorientierter Software-Entwicklung: Nähe zum Problembereich: erleichtert Kommunikation zwischen Entwicklern und Experten Methodische Durchgängigkeit (s.o.) Objektorientierte Modelle sind änderungsfreundlicher, da Änderungen häufig lokal begrenzt möglich sind Abstraktionsmöglichkeiten ermöglichen bessere Wiederverwendbarkeit Aber: Auch mit diesem Ansatz ist es problemlos möglich, sehr schlechte Ergebnisse zu erzielen 20

Übersicht Objektorientierte Softwareentwicklung Klasse und Objekt Attribut und Operation Schnittstelle Taxonomie und Vererbung Weitere Begriffe 21

Modellbildung Objekte entstehen durch Zusammenfassung von Daten und zugehörigen Prozeduren Sie werden üblicherweise verwendet, um bestimmte Gegenstände oder abstrakte Konzepte des Aufgabenbereichs zu modellieren Dabei werden die Gegenstände vereinfacht, es wird von Details abstrahiert (Modellbildung) Strukturelle Ähnlichkeit zwischen Modell und modelliertem Bereich kann das Erarbeiten und Verstehen eines Modells vereinfachen 22

Klasse und Objekt Aus: Bernd Österreich Objektorientierte Softwareentwicklung 23

Klasse und Objekt Eine Klasse beschreibt die Struktur und das Verhalten einer Menge gleichartiger Objekte Ein Objekt ist eine zur Ausführungszeit vorhandene und für ihre Instanzvariablen Speicher belegende Instanz, die sich entsprechend dem Protokoll ihrer Klasse verhält Statt Objekt oder Instanz wird auch die Bezeichnung Exemplar verwendet 24

Klassen und Objekte Aus: Bernd Österreich Objektorientierte Softwareentwicklung 25

Klassen und Objekte Klasse «instance of» Objekt Kuh «instance of» Elsa 26

Übersicht Objektorientierte Softwareentwicklung Klasse und Objekt Attribut und Operation Schnittstelle Taxonomie und Vererbung Weitere Begriffe 27

Eigenschaften Objekte lassen sich folgendermaßen charakterisieren: Sie befinden sich in einem Zustand Sie zeigen ein bestimmtes Verhalten Zustand und Verhalten beschrieben durch: Attribute und Operationen Ausserdem spielen eine Rolle: Zusicherungen und Beziehungen 28

Eigenschaften Attribute In einem Objekt enthaltene Informationen bzw. Daten Operationen Beschreiben das Verhalten der Objekte (auch Methoden genannt) Zusicherungen Bedingungen, die Objekte erfüllen müssen Beziehungen Beziehungen zu anderen Klassen (Oberbegriff- Beziehung, Assoziation,...) 29

Klasse Notationselemente für Klassen Aus: Bernd Österreich Objektorientierte Softwareentwicklung 30

Klasse class Kreis { int radius; Point mittelpunkt; public void setradius(int neuerradius) { if (neuerradius > 0) { // Zusicherung radius = neuerradius;... } } public void setposition(point pos) {...} public void anzeigen() {...} public void entfernen() {...} } 31

Objekt Notationselemente für Objekte Aus: Bernd Österreich Objektorientierte Softwareentwicklung 32

Terminologie Der Zustand von Softwareobjekten wird beschrieben durch die im Objekt gespeicherten Daten Allgemein: Smalltalk: C++: Attribute Instanzenvariablen Elementdaten (member data) Das Verhalten der Objekten wird in Prozeduren beschrieben: Allgemein: Smalltalk: C++: Methoden, Operationen Methoden Elementfunktionen (member functions) 33

Klasse und Objekt: Abgrenzung Die Abgrenzung von Klassen und Objekten ist nicht immer ganz eindeutig Oft werden auch die Klassen zu den Objekten gezählt oder es gibt wie in den Delegation Languages überhaupt keine Unterscheidung zwischen Klassen und Instanzen In einigen Ansätzen lassen sich auch Klassen zu so genannten Metaklassen zusammenfassen; die Instanzen solcher Meta-klassen sind dann selbst Klassen 34

Nachrichtenaustausch Objekte senden sich gegenseitig Nachrichten zu Die Nachrichten führen dazu, dass Operationen ausgeführt werden Ein Objekt versteht genau die Nachrichten, zu denen es Operationen besitzt KreisEck setradius() Kreis 35

Nachrichtenaustausch Einem Objekt eine Nachricht schicken: Die zugehörige Operation für ein bestimmtes Objekt ausführen: einkreis setradius: 17. einkreis.setradius(17); "Smalltalk" // C++, Java Objektattribute sind gewöhnlich gekapselt und nur über entsprechende Operationen zugänglich Eine Nachricht kann von einem Objekt nur interpretiert werden, wenn es eine passende Operation besitzt 36

Spezielle Nachrichten Selektoren greifen auf den Zustand eines Objekts zu, ändern diesen aber nicht Konstruktoren erzeugen Instanzen von Klassen Destruktoren werden beim Löschen von Objekten aktiv Iteratoren erlauben den Zugriff auf Teilobjekte zusammengesetzter Objekte 37

Übersicht Objektorientierte Softwareentwicklung Klasse und Objekt Attribut und Operation Schnittstelle Taxonomie und Vererbung Weitere Begriffe 38

Kapselung und Schnittstelle Klassen fassen Attribute und Operationen zu einer Einheit zusammen Attribute sind nur i.a. indirekt über die Operationen der Klasse zugänglich (Datenkapselung) Die Schnittstelle legt fest, welche Operationen die Objekte einer Klasse ausführen können Die Implementierung realisiert die in der Schnittstelle festgelegten Operationen 39

Kapselung und Schnittstelle 40

Kapselung und Schnittstelle Die Trennung von öffentlicher Schnittstelle und interner Implementierung hat folgende Vorteile Die Schnittstelle dient zur Verwendung einer Klasse; sie versteckt alle für die Verwendung nicht relevanten Details und dient somit auch der Übersichtlichkeit Wenn die Schnittstelle stabil bleibt, kann die Implementierung einer Klasse modifiziert werden, ohne Einfluss auf andere Programmteile, die diese Klasse benutzen 41

Übersicht Objektorientierte Softwareentwicklung Klasse und Objekt Attribut und Operation Schnittstelle Taxonomie und Vererbung Weitere Begriffe 42

Taxonomie und Vererbung Vererbung, Generalisierung/Spezialisierung Klassen können Spezialisierungen anderer Klassen darstellen, d.h. Klassen können hierarchisch angeordnet werden Dabei übernehmen (erben) sie die Eigenschaften der ihnen übergeordneten Klassen Diese Eigenschaften können sie bedarfsweise spezialisieren (überschreiben) aber nicht eliminieren 43

Taxonomie und Vererbung Oberklasse Basisklasse Superklasse Unterklasse Subklasse Aus: Bernd Österreich Objektorientierte Softwareentwicklung 44

Taxonomie und Vererbung Substitution Objekte von Unterklassen müssen jederzeit auch anstelle von Objekten ihrer Oberklasse(n) eingesetzt werden können Mehrfachvererbung Wenn eine Klasse mehr als eine Oberklasse besitzen kann, spricht man von Mehrfachvererbung Warnung Man solle Vererbung vermeiden, wenn es Alternativen gibt 45

Strukturierung von Eigenschaften Jede Klasse soll für genau einen (sachlogischen) Aspekt des Gesamtsystems verantwortlich sein Die in diesem Verantwortlichkeitsbereich liegenden Eigenschaften sollen in einer Klasse zusammengefasst werden Eine Klasse soll keine Eigenschaften enthalten, die nicht zu diesem Verantwortungsbereich gehören Kohärenzprinzip 46

Strukturierung von Eigenschaften Aus: Bernd Österreich Objektorientierte Softwareentwicklung 47

Strukturierung von Eigenschaften Anzeigen und Entfernen sind gemeinsame Eigenschaften aller geometrischen Figuren Sie müssen aber individuell, abhängig von den Eigenschaften der Subklassen, realisiert werden In der Klasse GeomFigur sind die Operationen anzeigen() und entfernen() daher abstrakte Operationen 48

Strukturierung von Eigenschaften class GeomFigur extends Object { int x, y; boolean sichtbar; public abstract void anzeigen(); public abstract void entfernen(); public void setposition(int x, y) { if (sichtbar) { entfernen(); this.x = x; this.y = y; anzeigen(); } else { this.x = x; this.y = y; } } } 49

Strukturierung von Eigenschaften class Rechteck extends GeomFigur { int a, b; public void anzeigen() {... } public void entfernen() {... } public void seta(int a) { if (a > 0) { this.a = a; } } public void setb(int b) { if (b > 0) { this.b = b; } } } 50

Abstrakte Klassen Klassen, von denen keine konkreten Exemplare erzeugt werden können, bezeichnet man als abstrakte Klassen Abstrakte Klassen werden durch den Eigenschaftswert {abstact} unterhalb des Klassennamens oder durch kursiv gesetzten Klassennamen gekennzeichnet Im Beispiel wird es nur Objekte der Klassen Kreis, Rechteck und Dreieck geben, nicht aber von GeomFigur 51

Abstrakte Klassen Aus: Bernd Österreich Objektorientierte Softwareentwicklung 52

Übersicht Objektorientierte Softwareentwicklung Klasse und Objekt Attribut und Operation Schnittstelle Taxonomie und Vererbung Weitere Begriffe 53

Objektidentität Jedes Objekt ist per Definition unabhängig von seinen konkreten Attributwerten von allen anderen Objekten eindeutig zu unterscheiden Zu diesem Zweck werden künstlich erzeugte Schlüssel verwendet, die keinen inhaltlichen Bezug zu den Eigenschaften der Objekte haben In einem Programm aktive Objekte werden gewöhnlich durch ihre Speicheradresse identifiziert 54

Objektidentität Aus: Bernd Österreich Objektorientierte Softwareentwicklung 55

Sammlungen (Collections) Sammlungen (auch: Behälterklassen oder Containerklassen) sind Klassen, deren Objekte eine Menge von Objekten verwalten können Sammlungen sind in der Regel in Standardklassenbibliotheken definiert Sie verfügen unter anderem über Operationen zum Anfügen und Entfernen von Objekten Es gibt verschiedene Arten von Sammlungen grundsätzlich lassen sich sequentielle und assoziative Sammlungen unterscheiden 56

Sammlungen (Collections) Sammlungsklassen einer Smalltalk-Bibliothek Aus: Bernd Österreich Objektorientierte Softwareentwicklung 57

Polymorphie Polymorphie: Eine Operation kann sich (in unterschiedlichen Klassen) unterschiedlich verhalten Statische Polymorphie: Bereits zur Übersetzungszeit eines Programms, wird entschieden, welche Ausprägung einer Operation aufgerufen wird ("frühes Binden") Dynamische Polymorphie: Der genaue Speicherort einer Funktion wird erst ermittelt, wenn der Aufruf stattfindet, also dynamisch zur Laufzeit des Programms ("spätes Binden") 58

Dynamische Polymorphie Aus: Bernd Österreich Objektorientierte Softwareentwicklung 59

Dynamische Polymorphie void dostuff(shape& s) { s.erase(); //... s.draw(); } Circle c; Triangle t; Line l; dostuff(c); dostuff(t); dostuff(l); 60