Programmierparadigmen A01 OOP. Programmierparadigmen

Ähnliche Dokumente
Programmierparadigmen

Objektorientierte Konzepte

Interaktionen zwischen Objekten durch Senden von Nachrichten und Reagieren auf empfangene Nachrichten

Objektorientierte Programmiertechniken WS 12/13 Lukas Kränkl

Kapitel 1 - Widerholungsfragen

Programmierparadigmen

Das Ersetzbarkeitsprinzip

Arten von Klassen-Beziehungen

Untertypen, Vererbung, Sichtbarkeit A01 OOP. Untertypen, Vererbung, Sichtbarkeit

OOP. Tagesprogramm. Beziehungen zwischen Typen Vererbung Sichtbarkeit

Faustregeln zu Zusicherungen

Das Ersetzbarkeitsprinzip

Arten von Klassen-Beziehungen

Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 2. Teil

Praktikum. SEP: Java-Programmierung WS 2018/19. Modularisierung. Thomas Lemberger und Martin Spießl

Objektorientierte Programmierung

Programmieren in Java

OOP. Tagesprogramm. Zusicherungen Zusicherungen und Ersetzbarkeit

OOP und Angewandte Mathematik. Eine Einführung in die Anwendung objektorientierter Konzepte in der angewandten Mathematik

III.1 Prinzipien der funktionalen Programmierung - 1 -

Klassen als Objekte. Smalltalk vs. Objective-C. Self-Nachrichten an Klassen in Objective-C. Klassen als Objekte. Smalltalk: Everything is an object

Inhaltsüberblick. I. Grundbegriffe - Objekte und Klassen. Organisatorisches. I. Grundbegriffe - Objektorientierte Konzepte

OOP12W. Objektorientierte Programmiertechniken. Skriptum zu 185.A01. im Wintersemester 2012/2013. Institut für Computersprachen

5. Im Spannungsfeld welcher widersprüchlichen Ziele befinden sich Programmierparadigmen? Wie äußert sich dieses Spannungsfeld?

Programmieren in Java

1. In welchen Formen (mindestens zwei) kann man durch das Ersetzbarkeitsprinzip Wiederverwendung erzielen?

Ersetzbarkeit und Verhalten

Zusicherungen A01 OOP. Zusicherungen

Gliederung der Folien

Programmiersprachen: Klassifizierung und Methoden. Programmier-Paradigmen. Grundlagen der Programmierung 2 (1.C) - 1 -

Paket umfaßt alle Dateien bzw. Klassen im selben Ordner. Kürzer durch Import-Deklaration (am Dateianfang)

OOP16W. Objektorientierte Programmiertechniken. Skriptum zu 185.A01. im Wintersemester 2016/2017. Institut für Computersprachen

OOP13W. Objektorientierte Programmiertechniken. Skriptum zu 185.A01. im Wintersemester 2013/2014. Institut für Computersprachen

Objektorientierte Sprachen

Konzepte der Programmiersprachen

Client-Server-Beziehungen

Objektorientierte Programmierung. Agenda für heute, 26. März, Eines der drei wichtigsten Programmierparadigmen

Angewandte Mathematik und Programmierung

Inhaltsverzeichnis. 4.9 Aufgaben... 63

Objektorientierte Programmierung (OOP)

Objektorientierte Programmierung OOP

Objekt-Funktionale Programmierung. am Beispiel von SCALA. Thorsten Jolitz

Objektorientierte Programmierung II

Die Klasse Vertiefung

Arten des universellen Polymorphismus

Vorlesung Datenbanken II SS 2006

Objektorientierte Programmierung. Agenda für heute, 1. April, Eines der drei wichtigsten Programmierparadigmen

4. Vererbung. Idee der Vererbung. Wir wollen ein Verwaltungsprogramm für CDs und Videos entwickeln. Wir stellen uns dazu folgende Klassen vor:

Anwendungsentwicklung mit Java. Grundlagen der OOP, Vererbung, Schnittstellen, Polymorphie

n 1. Der Begriff Informatik n 2. Syntax und Semantik von Programmiersprachen - 1 -

Gliederung. Algorithmen und Datenstrukturen II. Java: Objektorientierung. Java: Objektorientierung. Objektorientierung in JAVA. D.

Algorithmen und Datenstrukturen II

Objektorientierte Programmierung III

Java als erste Programmiersprache

Objektorientierte Programmierung

Software-Entwurfsmuster (weitere) A01 OOP. Software-Entwurfsmuster (weitere)

Auf einen Blick. 1 Einleitung Die Basis der Objektorientierung Die Prinzipien des objektorientierten Entwurfs...

Gliederung. n Teil I: Einleitung und Grundbegriffe. n Teil II: Imperative und objektorientierte Programmierung

7. Zusammenfassung (1)

Praxisbuch Objektorientierung

Inhalte des Moduls Programmieren 1

Einführung in die Objektorientierung (OO)

Client-Server Beziehungen

Grundlagen der Informatik 0

TEIL I: OBJEKTORIENTIERUNG UND GRUNDKURS JAVA GRUNDLAGEN DER PROGRAMMIERUNG... 4

IDEE: Paralleles Modellieren von Funktionen (Methoden) und Daten. Ein Objekt ist die softwaretechnische Einheit, die Daten und Funktionen enthält.

Kapitel 8. Programmierkurs. Methoden. 8.1 Methoden

Methoden und Klassen. Silke Trißl Wissensmanagement in der Bioinformatik

Inhaltsverzeichnis 1. Objektorientierung: Ein Einstieg 2. Objekte, Klassen, Kapselung

Silke Trißl, Prof. Ulf Leser Wissensmanagement in der Bioinformatik. Jede Applikation braucht eine Klasse mit einer main-methode

Programmierung in C/C++

Objektorientiertes Programmieren

Beispiele für Ausdrücke. Der imperative Kern. Der imperative Kern. Imperativer Kern - Kontrollstrukturen. Deklarationen mit Initialisierung

Universität Stuttgart Institut für Automatisierungstechnik und Softwaresysteme Prof. Dr.-Ing. M. Weyrich

Manfred Schüttengruber. Objektorientierte Programmierung mit Visual Basic 2005

Inhaltsverzeichnis. Kurseinheit 1. Kurseinheit 2

Ersetzbarkeit und Verhalten

Software Engineering

7. Schnittstellen Grundlagen zu Schnittstellen. 7. Schnittstellen

OOP. Tagesprogramm. Aspekte und Annotationen. Software-Entwurfsmuster. Factory-Method. Prototype

Weitere Beispiele. Beispiel CD-Spieler: Exemplare eines abstrakten Konzepts. 7. Schnittstellen. Schnittstelle: Syntax

Einführung in die Programmierung

Prinzipien der objektorientierten Programmierung (OOP)

Objektorientierte Programmiertechniken Kapitel 1 1. Was versteht man unter einem Programmierparadigma? Unter Programmierparadigma versteht man eine

Polymorphie. 15. Java Objektorientierung II

1 Klassen und Objekte

Grundelemente objektorientierter Sprachen (1)

1 Bindung. 2 Typen. Prof. Dr. Dr. h.c. Gerhard Goos (IPD) Höhere Programmiersprachen Wintersemester 2005/ / 89

Objektorientierte Programmierung OOP

Objekt-orientierte Programmierung

Polymorphie. 15. Java Objektorientierung II

Vorlesung Programmieren

Vorlesung Programmieren. Programmiersprachen-Paradigmen. Programmierparadigmen. Eine Programmiersprache dient dem Aufschreiben von Algorithmen

HSR Rapperswil 2001 Markus Rigling. Programmieren: Vererbung. 1 Variante 2

Kovariante Probleme Beispiel (1)

Das Interface-Konzept am Beispiel der Sprache Java

Objektorientiert in C++

7. Übung Informatik II - Objektorientierte Programmierung

Transkript:

2013-10-09 Programmierparadigmen 1 185.A01 OOP Programmierparadigmen

2013-10-09 Programmierparadigmen 2 OOP Klassische Programmierparadigmen Paradigma = Denkweise oder Art der Weltanschauung klassische Einteilung: Programmiersprache imperativ deklarativ prozedural objektorientiert funktional logisch Zusammenhänge tatsächlich wesentlich komplexer

2013-10-09 Programmierparadigmen 3 OOP Berechnungsmodell formaler Hintergrund (Funktionen, diverse Logiken, Algebren, Automaten, etc.) praktische Realisierung entscheidend: Kombinierbarkeit Konsistenz Abstraktion Systemnähe Unterstützung und Beharrungsvermögen

2013-10-09 Programmierparadigmen 4 OOP Struktur im Kleinen widersprüchlich: flexibel, sicher, verständlich breites Spektrum an Sprachen, Evolution nichtlinear strukturierte Programmierung: Sequenz, Auswahl, Wiederholung Umgang mit Querverbindungen durch Seiteneffekte Seiteneffekte verbieten (funktional) Querverbindungen sichtbar machen (objektorientiert) First-Class-Entities hoher Aufwand, lohnt sich nur für wichtigste Konzepte

2013-10-09 Programmierparadigmen 5 OOP Modularisierungseinheiten Modul (Übersetzungseinheit, zyklenfrei) Objekt (zur Laufzeit) Klasse (Modul und Muster für Objekterzeugung) Komponente (komplexere Initialisierung) Namensraum

2013-10-09 Programmierparadigmen 6 OOP Parametrisierung Befüllen der Löcher zur Laufzeit Konstruktor Initialisierungsmethode zentrale Ablage Generizität (Übersetzungszeit) Annotationen (Parametrisierung optional) Aspekte (Modifikation des Programms)

2013-10-09 Programmierparadigmen 7 OOP Ersetzbarkeit A durch B ersetzbar wenn B überall verwendbar wo A erwartet Schnittstellen von A und B folgendermaßen spezifizierbar: Signatur (einfach, wenig aussagekräftig) Abstraktion (intuitiv, nicht immer zuverlässig) Zusicherungen (manchmal komplex, recht zuverlässig) überprüfbare Protokolle (sehr komplex, nicht verfügbar)

2013-10-09 Programmierparadigmen 8 OOP Aufgabe: Modularisierungseinheiten Warum können Module und Klassen nicht zyklisch voneinander abhängen? A: Zur Erreichung eines hohen Grads an Wiederverwendung. B: Weil es Übersetzungseinheiten sind. C: Weil sich diese Übersetzungseinheiten auf andere Übers.einheiten beziehen. D: Zwecks Ersetzbarkeit.

2013-10-09 Programmierparadigmen 9 OOP Aufgabe: Ersetzbarkeit und Parametrisierung Warum ist Ersetzbarkeit keine Form der Parametrisierung? A: Weil Ersetzbarkeit keine Wiederverwendung unterstützt. B: Weil Ersetzbarkeit keine Löcher füllt. C: Weil für Ersetzbarkeit alle Details von Anfang an definiert sein müssen. D: Weil Ersetzbarkeit nicht mit Generizität kompatibel ist.

2013-10-09 Programmierparadigmen 10 OOP Typisierung statische versus dynamische Typprüfungen = Einschränkungen versus Freiheit = diktierte Disziplin versus freiwillige Disziplin explizit deklarierte Typen verbessern Lesbarkeit Sicherheit (durch Lesbarkeit, nicht Typprüfungen) deklarierte Typen deklarierte Abhängigkeiten frühe Entscheidungen Effizienz

2013-10-09 Programmierparadigmen 11 OOP Abstraktion und Typen struktureller Typ nur Signatur nominaler Typ Typname ermöglicht Abstraktion abstrakter Datentyp (ADT) = nominale Schnittstelle einer Modularisierungseinheit Objekt aus realer Welt Softwareobjekt gemeinsamer Name ADT Denken in Konzepten

2013-10-09 Programmierparadigmen 12 OOP Untertypen Ein Typ U ist Untertyp eines Typs T wenn jede Instanz von U überall verwendbar ist wo eine Instanz von T erwartet wird. für strukturelle Typen eindeutig ohne Deklarationen vom Compiler prüfbar für ADT in der Verantwortung der Programmierer explizite Deklaration von Untertypbeziehungen Zusicherungen als Ergänzung müssen in Untertypbeziehungen berücksichtigt werden

2013-10-09 Programmierparadigmen 13 OOP Gestaltungsspielraum für Typen Typen zeigen Grenzen auf: kovariante Probleme bei Untertypen rekursive Datentypen erfordern induktive Konstruktion Typinferenz mächtig, aber nicht mit Untertypen Typen bieten ungeahnte Möglichkeiten: praktisch alle Eigenschaften statisch propagierbar aber derzeit unzureichend unterstützt

2013-10-09 Programmierparadigmen 14 OOP Objekt kapselt Variablen und Methoden Eigenschaften: Identität (identisch = mehrere Namen für ein Objekt) Zustand (gleich identisch) Verhalten (Reaktion auf Nachrichten) Softwareobjekt (ADT) simuliert, abstrahiert reales Objekt

2013-10-09 Programmierparadigmen 15 OOP Klasse beschreibt Struktur der Objekte Konstruktoren zur Initialisierung aller Objekte gleiche Klasse selbe Schnittstellen und selbes Verhalten jedes Objekt ist Instanz genau einer Klasse

2013-10-09 Programmierparadigmen 16 OOP Polymorphismus Objekt hat gleichzeitig mehrere Typen ( Schnittstellen) Polymorphismus universeller Polymorphismus Ad-hoc- Polymorphismus Untertypen Generizität Überladen Typumwandlung

2013-10-09 Programmierparadigmen 17 OOP Untertypen und Vererbung Untertypen bedingen Ersetzbarkeit Variable hat deklarierten und dynamischen Typ dynamisches Binden Vererbung = Übernehmen von Code aus Oberklasse Praxis: Vererbung als Hilfsmittel für Untertypen

2013-10-09 Programmierparadigmen 18 OOP Erfolg in der OO-Programmierung gezielter Einsatz von Erfahrung erhöht Erfolgsaussichten OOP = viele Möglichkeiten zur Faktorisierung erleichtert gezielten Einsatz von Erfahrung ermöglicht Wiederverwendung durch Ersetzbarkeit überfordert Anfänger OOP gut für große, langlebige Programme OOP schlecht für komplexe Algorithmen

2013-10-09 Programmierparadigmen 19 OOP Verantwortlichkeiten einer Klasse definiert durch drei w-ausdrücke, ich ist Objekt der Klasse: was ich weiß was ich mache wen ich kenne (Zustand der Objekte) (Verhalten der Objekte) (sichtbare Objekte, Klassen) wer Klasse entwickelt ist zuständig für Änderungen in den Verantwortlichkeiten

2013-10-09 Programmierparadigmen 20 OOP Klassen-Zusammenhalt Klassen-Zusammenhalt (class cohesion) = Grad der Beziehungen zwischen den Verantwortlichkeiten der Klasse hoch, wenn Variablen und Methoden eng zusammenarbeiten und durch Klassenname gut beschrieben Klassen-Zusammenhalt soll hoch sein Hinweis auf gute Faktorisierung verringert Wahrscheinlichkeit für nötige Änderungen

2013-10-09 Programmierparadigmen 21 OOP Objekt-Kopplung Objekt-Kopplung (object coupling) = Abhängigkeit der Objekte voneinander stark, wenn viele sichtbare Methoden und Variablen viele Nachrichten im laufenden System viele Parameter in Methoden Objekt-Kopplung soll schwach sein Hinweis auf gute Kapselung weniger unnötige Beeinflussung bei Änderungen

2013-10-09 Programmierparadigmen 22 OOP Frühe Bewertung von Alternativen Klassenzusammenhalt und Objektkopplung hängen oft zusammen (beides gut oder beides schlecht) sind bereits in früher Entwicklungsphase abschätzbar helfen bei der Bewertung von Alternativen

2013-10-09 Programmierparadigmen 23 OOP Refaktorisierung Refaktorisierung = Änderung der Programmstruktur (bei gleicher Funktionalität) in Anfangsphase billig wenige gezielte Refaktorisierungen stabile Faktorisierung