2.4 Datenabstraktion und Objektorientierung Datenabstraktion in Programmiersprachen

Ähnliche Dokumente
2.4.3 Polymorphie (Wiederholung von Alp2)

Kapitel 6. Vererbung

Kapitel 6. Vererbung

Kapitel 6. Vererbung

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

Probeklausur: Programmierung WS04/05

VIII: Vererbung. Unterklassen einer Klasse. Vererbung von Methoden und Instanzvariablen. Überschreiben von Methoden

Vererbung. Vererbung von Methoden und Instanzvariablen. Vererbung als Realisierung einer is-a Beziehung.

Java für Computerlinguisten

Objektorientierte Programmierung. Kapitel 12: Interfaces

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

Vererbung & Schnittstellen in C#

Type Erasure in Java 5. Helmi Jouini Institut für Theoretische Informatik Universität Karlsruhe

1 Polymorphie (Vielgestaltigkeit)

KV Software Engineering Übungsaufgaben SS 2005

Datenbankanwendungsprogrammierung Crashkurs Java

Typumwandlungen bei Referenztypen

Programmieren in Java

3 Objektorientierte Konzepte in Java

Client-Server-Beziehungen

3. Konzepte der objektorientierten Programmierung

Java Einführung Abstrakte Klassen und Interfaces

Einführung in die. objektorientierte Programmierung

Java-Schulung Grundlagen

PIWIN I. Praktische Informatik für Wirtschaftsmathematiker, Ingenieure und Naturwissenschaftler I. Vorlesung 3 SWS WS 2008/2009

EINI I. Einführung in die Informatik für Naturwissenschaftler und Ingenieure. Vorlesung 2 SWS WS 10/11

5.6 Vererbung. Vererbung

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

Programmieren - Vererbung & Polymorphie

Java: Vererbung. Teil 3: super()

Objektorientierte Programmierung

Einführung in Java. PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005

Java Schulung (Java 2 Java Development Kit 5 / 6)

Prinzipien Objektorientierter Programmierung

1. Grundzüge der Objektorientierung 2. Methoden, Unterprogramme und Parameter 3. Datenabstraktion 4. Konstruktoren 5. Vordefinierte Klassen

Algorithmen und Datenstrukturen 07

Software Engineering Klassendiagramme Einführung

Bachelor-Klausur im WiSe 2013 / Grundlagen der Informatik

Grundlagen der Informatik für Ingenieure I

Kapitel 1: Anforderungen an moderne Software und ihre Umsetzung in Java

Abteilung Informatik, JFC/Swing 2004 Diego Schmidlin V2.2

Praktikum Informatik II Prof. Dr. Martin Trauth, Dr. Michael Männel

Programmieren in Java

Übersicht. Informatik 2 Teil 3 Anwendungsbeispiel für objektorientierte Programmierung

3 Objektorientierte Konzepte in Java

Objektorientierte Programmierung mit Python Polymorphismus und Vererbung. Eltern

Repetitorium Informatik (Java)

Objects First With Java A Practical Introduction Using BlueJ. Mehr über Vererbung. Exploring polymorphism 1.0

C++ - Einführung in die Programmiersprache Polymorphismus und Vererbung. Eltern

Programmentwicklung I für Hörer anderer Fachrichtungen -Wintersemester 2003/04- Abschlussklausur

Klassenbeziehungen & Vererbung

Informatik ist viel mehr als Delphi-Programmierung!

Abstrakte Datentypen.

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

Java Schulung. Objektorientierte Programmierung in Java Teil V: Die Java Collection Klassen. Prof. Dr. Nikolaus Wulff

Java Einführung Collections

XML-Frameworks in verschiedenen Programmiersprachen Proseminar Textkodierung und Auszeichnung

Institut fu r Informatik

Kapitel 19: Klassen und Unterklassen

Übung 1 mit C# 6.0 MATTHIAS RONCORONI

Testen mit JUnit. Apcon Workplace Solutions Member of itelligence. Testen von Java-Code mit JUnit. ÿstruktur eines Testfalls

Kapitel 14. Systemarchitektur

Abschnitt 9: Schnittstellen: Interfaces

Programmieren I. Strategie zum Entwurf von Klassen. Beispiele. Design von Klassen. Dr. Klaus Höppner. Beispiel: Bibliothek

Programmieren 2 Selbststudium Semesterwoche 6

PIWIN I. Praktische Informatik für Wirtschaftsmathematiker, Ingenieure und Naturwissenschaftler I. Vorlesung 3 SWS WS 2007/2008

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

equals und hashcode SortedSet NavigableSet Assoziative Container Programmieren II Dr. Klaus Höppner Hochschule Darmstadt Sommersemester / 32

Kapitel 2. Java: Der Einstieg. 2.1 Grundlegendes zu Java Historisches Eigenschaften von Java

5.5.8 Öffentliche und private Eigenschaften

Objektorientierte Programmierung

Java - Programmierung - Objektorientierte Programmierung 1

Teilprüfung Software- und Internettechnologie Programmierkurs 1 Wintersemester 2005/2006

Prüfungszeuch im Fach Objektorientierte Programmierung WS 2000

Java: Eine Übersicht. Dennis Giffhorn. Lehrstuhl für Programmierparadigmen Universität Karlsruhe

Nathan Burgener. Design by Contract. Modul SWE

Grundlagen der Programmierung Prof. H. Mössenböck. 11. Objektorientierung

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

Aufgabenblatt Nr. 5 Generizität und TicTacToe

Objektbasierte Entwicklung

Java Generics & Collections

Java Einführung Methoden in Klassen

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

Objektorientierte Programmierung

Musterlösung zur Vorlesung Modellbasierte Softwareentwicklung Wintersemester 2014/2015 Übungsblatt 9

Algorithmen und Datenstrukturen

Invarianten und sichere Vererbung

EINI WiMa/LW. Einführung in die Informatik für Naturwissenschaftler und Ingenieure. Vorlesung 2 SWS WS 11/12

// Zeigt den insgesamt einbezahlten Betrag auf der Bank. // Muss 1600 GE sein. System.out.println("Current Bank balance: " + b.

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

Javakurs 2013 Objektorientierung

Test zu Grundlagen der Programmierung Leitung: Michael Hahsler. 21. November 2003

Rekursion. Was heißt "rekursiv" Page 1. Eine Methode m() heißt rekursiv, wenn sie sich selbst aufruft. Beispiel: Berechnung der Fakultät (n!

Software Engineering. 6. Klassendiagramme. Franz-Josef Elmer, Universität Basel, HS 2012

Folge 18 - Vererbung

Schnittstellen implementieren am Beispiel Suchbaum

Vorlesung im Herbstwintersemester Autorisierte studentisch Lösungen zu Aufgabenblatt 2

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12. Kapitel 8. Arrays. Arrays

OO Softwareentwicklung

Eine Klasse beschreibt Objekte mit gleichen Attributen und Methoden.

Transkript:

2.4 Datenabstraktion und Objektorientierung 2.4.1 Datenabstraktion in Programmiersprachen Datenabstraktion: zur Beherrschung von Komplexität unerlässlich. In jeder Programmiersprache kann man gemäß den Prinzipien der Datenabstraktion entwickeln. Programmiersprachen bieten unterschiedliche Sprachkonzepte zur Unterstützung: keine: alles eine Frage der Programmierdisziplin Modularisierungskonzepte Objektorientierung hs / fub alp3 8-ADT-6 1 Modula-2 2 (Nikolaus Wirth, ~ 1980) DEFINITION MODULE Queues; TYPE Queue; PROCEDURE append(x: String; q: Queue); PROCEDURE remove(q: Queue): String; END Queues. IMPLEMENTATION MODULE Queues; TYPE Queue = POINTER TO Qrep; Qrep = RECORD. END;(* data representation *) PROCEDURE append(x: String; q: Queue);. (* procedure code *) END Queues. hs / fub alp3 8-ADT-6 2 1

Modula-2 2 Klientenprogramm MODULE Tststckm; FROM StckMod IMPORT StackT,CreateSt CreateSt,Push,Pop,Top,,Push,Pop,Top,IsEmpty,IsFull, PrintStack,Size; FROM InOut IMPORT WriteLn, WriteInt, WriteString,, Read, ReadInt; FROM TModule IMPORT ElemT,, Input, PrintElem, MapElem; VAR s StackT; BEGIN s := CreateSt(); LOOP.. CASE command OF '+': WriteString(' Integer to put on Stack >'); ReadInt(n); s := Push(s,n); '-':' ': s := Pop(s); PrintStack(s); WriteLn;. END Tststckm. hs / fub alp3 8-ADT-6 3 Haskell Datenabstraktion in Haskell module Queues(Queue, emptyq, append, ) where data Queue t = Qrep[t] -- Qrep NOT exported Keine physische Trennung von module QueueTest import Queues append x q Klient Spezifikation und Implementierung hs / fub alp3 8-ADT-6 4 2

Objektorientierte Sprachen, speziell Java Datenabstraktion durch Klassen und Modifikatoren class Queue { //Overview:.. private int head, length; // Methods public void append(entry item)throws QueueOverflow { //requires..... Klassen definieren. Queue q = new Queue(); Typ (mit seiner Implementierung) Queue ist abstrakter Datentyp (abstract data type, ADT) q: Queue verweist auf abstraktes Datenobjekt (ADO) hs / fub alp3 8-ADT-6 5 Sichtbarkeit sichtbar in public protected (empty) private gleicher Klasse ja ja ja ja anderswo in gleichem Paket ja ja ja nein Unterklasse in anderem Paket ja ja nein nein anderswo in anderem Paket ja nein nein nein hs / fub alp3 8-ADT-6 6 3

Modularisierung durch Bibliotheksorganisation ( z.b. Pakete) // Datei Queue.java package datastructures.queues;.. // weiterer Java-Code // Datei QueueImpl.java package datastructures.queues;.. // weiterer Java-Code // Datei Test.java package datastructures.queuetest; import datastructures.queues.*;.. // weiterer Java-Code hs / fub alp3 8-ADT-6 7 Interface Datenabstraktion durch Schnittstellenspezifikation public interface IntSet { // model: math. sets like {x,y,z, all elements // have the same type // boolean isempty(); // pre: true // result: if return true else return false.. hs / fub alp3 8-ADT-6 8 4

Abstrakte Klasse Abstrakte Klassen in Java enthalten Signaturen - genau wie Interfaces und implementierte Methoden Klassenvariablen Zu abstrakten Klassen können keine Objekte erzeugt werden: keine Konstruktoren. Mischform zwischen Interface und Class Vorteil: Partielle Implementierung Beispiel: abstract class Stack {.. public abstract int size(); public static Stack getstack(){ return (new StackArray()); hs / fub alp3 8-ADT-6 9 2.4.2 Objektorientierung (kurze Wiederholung) "Objektorientierung = Datenabstraktion und Vererbung" Vererbung in Java: "Single inheritance" für Klassen " Multiple Inheritance" für Interfaces hs / fub alp3 8-ADT-6 10 5

Klassen Unterklassen übernehmen automatisch die Eigenschaften ihrer Oberklassen und fördern so die Wiederverwendung. Unterklassen können ererbte Eigenschaft redefinieren und erweitern und fördern so die Erweiterbarkeit. class List // model: [Int] // inv: {private Node head; public Object first(){.. public Object next(){.. public void put (Object x){.. class OrderedList extends List // model: ordered [Int] // inv: { public Object min(){ return first(); public void put (Object x){.. // redefine "put.list" public int somethingelse(){.. Klassen Ober- und Unterklasse Fachliche Sicht Ausgehend von gemeinsamen Eigenschaften bestimme Ähnlichkeiten zwischen Begriffen. Diese Gemeinsamkeit generalisierend in einem Oberbegriff ausdrücken Durch solche Generalisierung oder Klassifikation entstehen Begriffshierarchien (Taxonomien). Sie sind Grundlage der Aufteilung in Ober- und Unterklassen. hs / fub alp3 8-ADT-6 12 6

Klassen Technische Sicht Alle Beschreibungen der Oberklasse sind durch Vererbung zunächst auch Beschreibungen ihrer Unterklassen In Unterklasse können geerbten Beschreibungen spezialisiert werden. Dabei werden Operationen redefiniert, wenn eine neue Implementation in der Unterklasse eine vorliegende Implementation in Oberklasse ersetzt (überschreibt, verdeckt). hinzugefügt, wenn noch keine namensgleiche Operation in einer Oberklasse existiert. definiert (oder implementiert), die in Oberklassen nur spezifiziert sind. Auch Attribute können in Unterklassen hinzugefügt werden. hs / fub alp3 8-ADT-6 13 "Single Inheritance" In Java nur einfache Vererbung B C B2 B1 C1 class Lkw {. class Produkt { int pid; double weight();. class Liefertour extends Lkw, Produkt { int pid;. hs / fub alp3 8-ADT-6 14 7

«interface» X «interface» Y D Oberklasse ist eindeutig B «interface» A C Aber: Interface kann von verschiedenen Interfaces erben B2 B1 C1 «interface» Verkäuflich preis(), «interface» Verpackung gewicht().. Fotos «interface» A VerkäuflichUndTransportabel Kamera Teleskop Beispiel: Mehrfachvererbung von Interfaces Digitalkamera Spezial OO-Sprachen ohne Interface: Mixins: Klassen mit mehreren Oberklassen, von denen nie Objekte erzeugt werden 8

Klassen Nochmal: Generalisierung Konto gibsaldo auszahlen einzahlen Sparbuch gibsaldo auszahlen einzahlen gibzinssatz berechnezinsen Girokonto gibsaldo auszahlen einzahlen gibdispokredit gibstichtag istplussparer überweisen hs / fub alp3 8-ADT-6 17 Klassen und Vererbung public class Konto { public Konto() { ; public void einzahlen(float b){ public float gibsaldo(){ public float auszahlen(float b){ protected float saldo; ; public class Sparbuch extends Konto { public Sparbuch(Zinssatz z){ public Zinssatz gibzinssatz(){; public void berechnezinsen(){saldo = saldo +..;; public void überweisen(float b, Konto z){; protected Zinssatz zinssatz; ; hs / fub alp3 8-ADT-6 18 9

Verwendung von Klassen Ein Objekt der Klasse Sparbuch kann neben allen Operationen der Klasse Sparbuch auch alle Operationen der Klasse Konto verwendet werden. Sparbuch einsparbuch = new Sparbuch(3.0); einsparbuch.einzahlen(1000); einsparbuch.berechnezinsen(); if (einsparbuch.gibsaldo()) > 500) { einsparbuch.auszahlen(500); System.out.print( Der neue Saldo beträgt ); System.out.println(einSparbuch.gibSaldo()); hs / fub alp3 8-ADT-6 19 10