Vorlesung Programmieren. Hauptaufgabe des Programmierers. Maschinensprache Beispiel für x86 PCs. Zusammenfassung

Ähnliche Dokumente
Vorlesung Programmieren. Hauptaufgabe des Programmierers. Maschinensprache Beispiel für x86 PCs. Zusammenfassung

Vorlesung Programmieren

Vorlesung Programmieren. Bisher: Klassen und Objekte. Was ist mit ähnlichen Klassen? Vererbung und Polymorphismus

Vorlesung Programmieren

Vorlesung Programmieren

Programmierkurs Java. Vererbung. Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck

Vorlesung Programmieren

Vorlesung Programmieren. Agenda. Dezimalsystem. Zahlendarstellung. Zahlendarstellung. Oder: wie rechnen Computer?

Programmierkurs C++ Abstrakte Klassen und Methoden

Programmieren. Kapitel 3: Wie funktioniert ein moderner Computer? Wintersemester 2008/2009. Prof. Dr. Christian Werner

Vorlesung Programmieren

Programmierkurs Java

Einstieg in die Informatik mit Java

Kapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen

Repetitorium Informatik (Java)

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

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

Algorithmen und Datenstrukturen 06

3 Objektorientierte Konzepte in Java

Beispiel: Zwischen der Oberklasse und der abgeleiteten Klasse besteht eine ist ein Beziehung. Eine abgeleitete Klasse stellt eine Spezialisierung der

Grundzüge der Programmierung. Wiederverwendung VERERBUNG

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

Innere Klassen. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java

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

Vorlesung Programmieren

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

1. Abstrakte Klassen

Java Vererbung. Inhalt

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

Kapitel 6. Vererbung

Kapitel 6. Vererbung

Kapitel 6. Vererbung

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

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

Programmieren in Java

Kapitel 8. Programmierkurs. Methoden. 8.1 Methoden

Kapitel 4: Klassen und Unterklassen

Einstieg in die Informatik mit Java

6. Globalübung (zu Übungsblatt 8)

Einstieg in die Informatik mit Java

Übersicht. Vorstellung des OO-Paradigmas

Probeklausur: Programmierung WS04/05

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Wiederholung: Gerüstbeispiel. Vererbungshierarchie: Typ 0

Einstieg in die Informatik mit Java

Teil 2: OOP und JAVA (Vorlesung 11)

3 Objektorientierte Konzepte in Java

Programmieren 2 Java Überblick

1 Abstrakte Klassen, finale Klassen und Interfaces

10. Programmierungs-Phase: Objektorientierung Software Engineering

7. Schnittstellen Grundlagen zu Schnittstellen. 7. Schnittstellen

Java: Vererbung. Teil 3: super()

Objektorientierte Programmierung. Kapitel 12: Interfaces

Eine Klasse beschreibt Objekte mit gleichen Attributen und Methoden.

Java I Vorlesung Vererbung und Sichtbarkeit

Algorithmen und Datenstrukturen 07

Zahlensysteme. Digitale Rechner speichern Daten im Dualsystem 435 dez = binär

Einstieg in die Informatik mit Java

3. Klassen Statische Komponenten einer Klasse. Klassenvariablen

Javakurs für Anfänger

5.6 Vererbung. Vererbung

Präsentation Interfaces

Einstieg in die Informatik mit Java

2.13 Vererbung. Rainer Feldmann Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/ Article

Programmieren II. Innere Klassen. Heusch 10, Ratz 5.2.1, Institut für Angewandte Informatik

Informationsmenge. Maßeinheit: 1 Bit. 1 Byte. Umrechnungen: Informationsmenge zur Beantwortung einer Binärfrage kleinstmögliche Informationseinheit

Programmieren in Java

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

Die einfachsten Anweisungen

Einführung in die Programmierung

Programmieren I. Kapitel 8. Vererbung

Java, OO und UML Fortsetzung

Vererbung. Was versteht man unter dem Begriff Vererbung?

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

Algorithmen und Programmierung II

Java Einführung Methoden in Klassen

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

1 Polymorphie (Vielgestaltigkeit)

Probeklausur: Programmierung WS04/05

Vererbung & Schnittstellen in C#

Vererbung. Martin Wirsing. Ziele. Vererbung

Wiederholung zur Vorlesung Programmieren

Objektorientierte Programmierung

Arten von Klassen-Beziehungen

Prof. W. Henrich Seite 1

Einführung in die Programmierung für NF. Vererbung

5. Abstrakte Klassen

Vorlesung Datenstrukturen

Programmieren in Java

Einführung in die Informatik

Kapitel 9: Klassen und höhere Datentypen. Klassen und höhere. Objekte, Felder, Methoden. Küchlin/Weber: Einführung in die Informatik

Java I Vorlesung 6 Referenz-Datentypen

Info B VL 8: Abstrakte Klassen & Interfaces

Übung Praktische Informatik II

Javakurs für Anfänger

Java: Der Einstieg. Algorithmen und Datenstrukturen II 1

Programmieren I. Überblick Objektorientierung Heusch 12 Ratz 7. Institut für Angewandte Informatik

Einführung in die Programmierung 1

Einstieg in die Informatik mit Java

Ein erstes Java-Programm

2.5 Primitive Datentypen

Transkript:

Vorlesung Programmieren Zusammenfassung Dr. Dennis Pfisterer Institut für Telematik, Universität zu Lübeck http://www.itm.uni-luebeck.de/people/pfisterer Hauptaufgabe des Programmierers Der Maschine beibiegen, was sie tun soll Problem: Computer sind dumm Security - 04 Cryptology #2 Maschinensprache Beispiel für x86 PCs 00000000: EA 05 00 C0 07 B4 00 CD 16 2C 30 00 C0 04 30 88 00000010: C1 B4 0E BB 07 00 B0 0D CD 10 B0 20 CD 10 CD 10 00000020: B0 0D CD 10 88 C8 3C 30 72 DB 3C 3A 72 0C 3C 45 00000030: 73 D3 B0 31 CD 10 88 C8 2C 0A CD 10 EB C7 00 00 Problem: Maschinensprache ist (für Menschen) schwer verständlich Daher: Speziell ausgebildete Fachkräfte, die Maschinensprache fehlerfrei erzeugen können Diese heißen Programmierer 1-3 1

Darstellung von Zahlen im Binärsystem Analog zum Dezimalsystem Beispiel 101 2 Basis 10: 1 2 2 + 0 2 1 + 1 2 0 Basis 2: 1 10 10 + 0 10 1 + 1 10 0 Diese Darstellung erlaubt einfaches Umrechnen in andere Zahlensysteme Basis 2 Basis 10 Basis 2 1 2 0 10 0 10 2 1 10 1 100 2 2 10 10 1000 2 3 10 11 10000 2 4 10 100 100000 2 5 10 101 Security - 04 Cryptology #4 Umrechnung: Binär- nach Dezimalsystem Beispiel: 1110 2 3 1 2 + 2 1 2 + 1 1 2 + 0 0 2 = 14 10 Beispiel: 10010111 2 7 1 2 + 6 0 2 + 5 0 2 + 4 1 2 + 3 0 2 + 2 1 2 + 1 1 2 + 0 1 2 = 151 10 5 Umrechnung: Dezimal- nach Binärsystem Horner-Schema 14 2 = 7R0 Least significant bit (LSB) 7 2 = 3R1 3 2 = 1R1 1 2 = 0R1 Most significant bit (MSB) 1110 MSB LSB 6 2

Hexadezimalsystem (zur Basis 16) Neben dem Binärsystem gibt es für den Programmierer noch ein weiteres wichtiges Zahlensystem Das Hexadezimalsystem, kurz: hex 16 Ziffern: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f a bis f stehen für die Zahlen 10 bis 15 Groß-/Kleinschreibung unerheblich (a = A) Umrechnung zwischen Dezimal und Hex analog zum Binärsystem 7 Rechnen mit binären Zahlen Alle Grundrechenarten funktionieren auch im Binärsystem Natürlich auch in allen anderen Zahlensystemen Insbesondere auch im Hexadezimalsystem Bisher: Nur positive ganze Zahlen Wie geht man mit vorzeichenbehafteten ganzen Zahlen um? Wie stellt man -7 im Computer dar? 8 Negative Binärzahlen im Einerkomplement Zur Vorzeichenumwandlung (+ - bzw. - +) wird jedes Bit invertiert Beispiel: -7 10 Darstellung als 4-Bit Binärzahl: -0111 2 Bitweise invertiert: 1000 2 Erstes Bit 1: negative Zahl Zahlenwert bestimmen: Invertieren 1000 2-0111 2-7 10 Security - 04 Cryptology #9 3

Addition im Einerkomplement: 4+(-2) Problem bei Addition: Round Carry Übertrag! 0100 + 1101 (1)0001 + 0001 0010 10 Negative Binärzahlen im 2er-Komplement Alternative zum 1er-Komplement Vorzeichenumwandlung Invertiere bitweise und addiere 1 Alternativ: 1er-Komplement + 1 Beispiel: -7 10-0111 2 invertiere(0111 2 ) +1 2 1000 2 + 1 2 1001 2 Security - 04 Cryptology #11 Addition im 2er-Komplement Beispiel: 4+(-2) Als 4-Bit Zahl 4 10 = 0100 2-2 10 = 1110 2 2er-Komplementdarstellung ist sehr praktisch! Moderne Rechner arbeiten mit dieser Darstellung 0100 + 1110 10010 0010 Übertrag kann ignoriert werden 12 4

32-Bit-Fließkommazahlen nach IEEE 754 Rechner verwenden Darstellung nach IEEE 754 IEEE 7534 verwendet Platzspartrick Mantisse beginnt immer mit einer 1 (außer bei der Zahl 0) Durch Weglassen dieser Ziffer gewinnt man ein Bit Format einer 32-Bit IEEE 754-Fließkommazahl V Exponent (8 Bit) Mantisse (23 Bit, Nachkommateil) 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 Vorzeichen (1-Bit) 13 32-Bit-Fließkommazahlen nach IEEE 754 Wert des Exponenten e effektiv definiert als e effektiv = e 01111111 2 (= e - 127 10 ) Dadurch gilt e = 0000 0001 (1-127 = -126) e effektiv = -126 e = 0111 1111 (127 127 = 0) Komma nicht verschoben e = 1111 1110 (254 127 = 127) e effektiv = +127 V Exponent e (8 Bit) Mantisse m (23 Bit, Nachkommateil) 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 14 32-Bit-Fließkommazahlen nach IEEE 754 Binärer Wert g einer Fließkommazahl (für e 0 und m 0) v g = ( 1) (1, m) 10 e 01111111 Problem: Darstellung der 0 (1,m x immer ungleich 0) Daher Sonderfälle e=0 und m 0 Zahl ist denomalisiert (0,M) e=0 und m=0 Darstellung der Zahl 0 e=1111 1111 und m 0 NaN (Not a Number) e=1111 1111 und m=0 Unendlich (Infinity, je nach Vorzeichen +/-) V Exponent e (8 Bit) Mantisse m (23 Bit, Nachkommateil) 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 15 5

Umrechnung IEEE 754 Dezimalzahl Mantisse und Exponent in Dezimalzahlen umrechnen Damit folgende Formel benutzen g dezimal M v 23 edezimal 127 = ( 1) (1,0 + dezimal / 2 ) 2 Beispiel: 0100 0000 0010 0000 0000 0000 0000 0000 v=0 0 10 e=1000 0000 2 7 10128 10 m= 010 0000 0000 0000 0000 0000 2 21 10 2097152 10 0 21 23 128 127 = ( 1) (1,0 + 2 / 2 ) 2 g dezimal 2 1 = 1 (1 + 2 ) 2 = 1,25 * 2 = 2,5 16 Dezimalzahl IEEE 754 (am Bsp. für 14,1) Zwischenergebnis v=0 e= 1000 0010 m=110 0001 1001 1001 1001 1001 Darstellung nach IEEE 754 Ergebnis 0 100 0001 0110 0001 1001 1001 1001 1001 Wirklichkeit 0 100 0001 0110 0001 1001 1001 1001 1010 ( komplizierte Rundungsregeln, ignorieren wir) 17 Von-Neumann-Architektur: Komponenten Auch: ALU (Arithmetic Logic Unit) Addition, etc Steuert Programmfluss Sagt Rechenwerk was zu tun ist. Verbindet Daten (Quelle und Ziel) mit ALU Steuert Übertragung (zur Ein- und Ausgabe) von Daten Interaktion mit Peripherie: Lochstreifenleser, Bildschirm, Keyboard, Speichert Daten und Programm (RAM) 18 6

Central Processing Unit (CPU) Agiert in Takten Gegeben durch Taktfrequenz Hat interne Speicher: Register Arbeitet in vier Schritten 1. Fetch Befehl und Daten aus Speicher holen CPU Steuerwerk Befehls-/Register-Speicher Programmzähler Befehlsdekoder steuert Rechenwerk (Rechen-)Registerspeicher Rechenschaltungen 2. Decode Befehl decodieren und Steuersignal an das Rechenwerk (ALU) anlegen 3. Execute Berechnung ausführen 4. Store Ergebnis in Speicher schreiben 19 Algorithmen Ausgangspunkt: Spezifikation eines zu lösenden Problems Algorithmus: Handlungsvorschrift zur Lösung des Problems Keine Kenntnis des Problems mehr notwendig Viele Algorithmen für ein Problem möglich Unterscheiden sich möglicherweise in der Effizienz Programmiersprachen: Aufschreiben von Algorithmen sodass ein Computer sie versteht Compiler übersetzen von Programmier- in Maschinensprache Security - 04 Cryptology #20 Algorithmen Erforderliche Sprachmerkmale Elementare Rechenoperationen (Addition, Subtraktion, ) Sequenz (Hintereinander-Ausführung) Bedingte Ausführung (If-Anweisung) While-Anweisung 7

Eigenschaften von Algorithmen Algorithmen kann man nach verschiedenen Eigenschaften beurteilen Terminierend Vollständigkeit Determiniert Deterministisch Effizienz Security - 04 Cryptology #22 Programmiersprachen-Paradigmen Eine Programmiersprache dient dem Aufschreiben von Algorithmen Ein Compiler übersetzt in Maschinensprache Die Art und Weise des Aufschreibens unterscheidet sich je nach Programmiersprache sehr deutlich Verschiedene Paradigmen existieren Bisher: Imperative Programmierung Security - 04 Cryptology #23 Unterschiedliche Sprachenkonzepte Imperative Programmiersprachen Grundprinzip: Folge von Variablenzuweisungen Wesentlich: Prozedurale Programmierung Beispiele: Algol, Fortran, Cobol, Pascal, C, Basic Spezialfall: Objektorientierte Programmierung Grundprinzip: Interaktionen zwischen Objekten Beispiele: SmallTalk, Java, C++ Funktionale Programmiersprachen Grundprinzip: Term-Ersetzung Beispiele: Lisp, HOPE, Miranda, SML, Haskell Logikbasierte Programmiersprachen Grundprinzip: Prädikatenlogik Beispiel: Prolog 5-24 8

Prozedurale Programmierung Zerlegung von Programmen in kleinere, wiederverwendbare Einheiten sog. Prozeduren Vorteile Kapselung einzelner Funktionalitäten Monolithisches Programm Bessere Wiederverwendbarkeit Lesbarerer Code Was tut er? (z.b. Zeichen zählen) statt Wie tut er es? (die ganzen Instruktionen) Fehlerbehebung an einer Stelle #25 Prozedur (auch: Funktion) Eingabeparameter Übergabe von Werten an die Funktion Definiert als Menge von Variablen mit bestimmtem Datentyp Rückgabe Wert mit einem bestimmten Datentyp Spezieller Datentyp für keine Rückgabe: void Beispiele für Deklarationen (sog. Signatur) void main(string[] args); int zaehleleerzeichen(char[] text); char[] rueckwaerts(char[] text); boolean istleerzeichen(char zeichen); boolean istkontogedeckt(int konto, int blz); Eingabewerte Prozedur / Funktion (Black Box) Ausgabewert #26 Funktionale Programmierung Inspiriert von mathematischen Funktionen Wir besprechen hier nur die Grundidee Funktionale Programmierung ist viel mehr Es gibt auch funktionale Programmiersprachen Security - 04 Cryptology #27 9

Funktionale Programmierung Mathematische Funktionen sind wie eine große Tabelle Abhängig von den Parametern, findet man das (immer konstante) Ergebnis in einer Tabelle Wichtiges Prinzip: Termersetzung f(2) 4 f(4) 16 Security - 04 Cryptology #28 Funktionale Programmierung Vereinfacht dargestellt ist funktionale wie prozedural ohne globale Variablen Denkweise ist sehr wichtig für gut testbare und wartbare Programme Security - 04 Cryptology #29 Definition: Objekt Repräsentation eines Gegenstandes/Sachverhalts der realen Welt oder eines rein gedanklichen Konzepts Gekennzeichnet durch Eindeutige Identität (Unterscheidung von anderen Objekten) (Dieser Punkt vs. der andere Punkt) Zustand (in Form von Attributen) (also z.b. x- und y-wert) Methoden (bisher: Funktionen bzw. Prozeduren) (Manipulation des Zustands; definiert das Verhalten) (Beispiel: verschiebe und rotiere) 5-2-30 10

Beispiel: Objekt Punkt Besteht aus Zustand (Attributen) und Verhalten (Methoden) Zustand eines Punktes Definiert durch aktuelle x- und y- Werte Punkt Attribute: - double x = 1; - double y = 3; Methoden: - void setze(double x, double y); - void verschiebe(double dx, double dy); - void rotiere(double radians); Verhalten eines Punktes Definiert durch seine Methoden z.b. Setzen der x- und y-werte, verschieben, rotieren Security - 04 Cryptology #31 Methoden Können Zustand eines Objektes verändern Also die Werte der Attribute verändern Beispielsweise verändert die Methode rotieren die Werte der Attribute x und y Natürlich können auch Methoden wie Funktionen Parameter haben Punkt Attribute: - double x; - double y; Methoden: - void setze(double x, double y); - void verschiebe(double dx, double dy); - void rotiere(double radians); Security - 04 Cryptology #32 Objekte und Klassen Muss jedes Objekt immer neu implementiert werden? Nein, man fasst ähnliche Objekte zu einer Klasse zusammen Klasse: Abstrakte Definition der Attribute und Methoden einer Menge ähnlicher Objekte Objekte Klasse Punkt X 2 y 2 Attribute: - double x; - double y; X 1 y 1 X 3 y 3 Methoden: - voidsetze(double x, double y); - voidverschiebe(double dx, double dy); - voidrotiere(double radians); Security - 04 Cryptology #33 11

Instanzen Anstelle von Objekten spricht man oft von Instanzen Instanzen sind Realisierungen einer Klasse Instanzen existieren im Arbeitsspeicher Klassen sind nur abstrakte Definitionen Beispiele Punkte vs. Dieser Punkt Lampen vs. Diese Wohnzimmerlampe Auto vs. Mein 3er BMW Mensch vs. Ich Instanzen der Klasse Punkt X 1 X 2 X 3 y 1 y 2 y 3 Instanzen der Klasse Lampe Instanzen der Klasse Mensch Security - 04 Cryptology #34 Gesamtbeispiel Es werden 2 Instanzen der Klasse Punkt erzeugt (p1 und p2) Es werden Werte an p1.x, p1.y, p2.x und p2.y zugewiesen und dann ausgegeben Auf dem Objekt p1 werden rotiere und verschiebe aufgerufen Alle Werte werden erneut ausgegeben Es haben sich nur die Attribute von p1 geändert 5-2-35 Überladen von Methoden Mehrere Methoden gleichen Namens in einer Klasse erlaubt Prinzip der sog. Überladung eines Identifiers / Namens Gleicher Rückgabetyp, aber unterschiedliche Parameter Beispiel void gebeaus(int i); void gebeaus(string s); void gebeaus(double d); gebeaus(1); //Aufruf von void gebeaus(int i); gebeaus( Hallo ); //Aufruf von void gebeaus(string s); gebeaus(2.098); //Aufruf von void gebeaus(double d); 12

Konstruktoren: Umsetzung in Java Konstruktoren: Methoden mit speziellem Namen und Rückgabetyp Name der Methode: Klassenname Rückgabetyp: Keiner, nicht einmal void Konstruktor sollte alle Attribute initialisieren (guter Stil) Syntax: Klassenname(Typ1 Name1, Typ2 Name2, ) { } Beispiel: Punkt(double x, double y) {} Eine Klasse kann mehrere Konstruktoren haben Gleiches Prinzip wie Überladen von Methoden Ein Konstruktor kann als erstes anderen Konstruktor aufrufen Syntax: this(parameter); Statische Methoden und Attribute Schlüsselwort static (unabhängig von Klasseninstanzen) Es gibt keine this -Referenz (keine Instanz verfügbar) Statische Elemente können nur andere statische Elemente verwenden Aufruf anderer statischer Methoden oder verwenden statischer Variablen Statische Methoden Definition: static void statischemethode() {} Verwendung: Klassenname.methodenname(Parameter) Statische Attribute Definition: static int statischesattribut; Verwendung: Klassenname.attributname; 5-3-38 Packages Es ist üblich, Klassen in Packages zu gruppieren Bessere Übersichtlichkeit Vorbeugung von Namenskonflikten Zusammengehörige Klassen kennzeichnen Analogie Klassennamen sind vergleichbar mit einem Vornamen Package-Name entspräche dann dem Familiennamen Package-Namen: Gleiche Einschränkungen wie Identifier z.b. kein - erlaubt Konvention: Kleinschreibung (also mathe statt Mathe ) 13

Vererbung Man versucht, zu ähnlichen Klassen eine gemeinsame Oberklasse zu finden Fasst Ähnlichkeiten zusammen In Form von Attributen, Verhalten (Methoden), Beziehungen zu anderen Klassen Ergänzt in den Unterklassen lediglich die Unterschiede Ergänzende Attribute, Methoden, Beziehungen zu anderen Klassen 5-2-40 Vererbung Gemeinsamkeiten ähnlicher Klassen werden zu einer Oberklasse zusammengefasst Gemeinsame Fahrzeug hersteller: String wechselintervall: int km_gefahren: int baujahr: int oelwechsel() Oberklasse Bus hersteller: String wechselintervall: int km_gefahren: int baujahr: int toilette: boolean oelwechsel() toiletteleeren() Gemeinsamkeiten PKW hersteller: String wechselintervall: int km_gefahren: int baujahr: int Bauart: String oelwechsel() cabriodach() : boolean 5-2-41 Vererbungshierarchie Vererbung kann auch über mehrere Hierarchiestufen erfolgen Vererbung von Attributen und Methoden erfolgt transitiv Gegenstand Beispiel Fahrzeug erbt alles von Gegenstand Bus und PKW erben alles von Fahrzeug und damit auch alles von Gegenstand Fahrzeug Umsetzung in Java class Fahrzeug extends Gegenstand {} class Bus extends Fahrzeug {} class PKW extends Fahrzeug {} Bus PKW 5-2-42 14

Vererbung in Java In Java gibt es eine Oberklasse aller Klassen java.lang.object Wenn keine Oberklasse angegeben ist, wird Object automatisch zur Oberklasse Konsequenz: java.lang.object ist Oberklasse jeder Klasse Vielleicht nicht direkt, aber irgendwann auf jeden Fall Object Gegenstand Fahrzeug Dies ist nicht in allen Programmiersprachen so z.b. nicht in C++ Bus PKW Security - 04 Cryptology #43 Vererbung und Instanzen Von jeder Klasse können Instanzen erzeugt werden Diese können ganz normal verwendet werden Beispiele Fahrzeug f = new Fahrzeug(); f.oelwechsel(); Bus b = new Bus(); b.oelwechsel(); b.toiletteleeren(); Fahrzeug PKW p = new PKW(); p.oelwechsel(); p.cabriodach(); Bus PKW Security - 04 Cryptology #44 Vererbung und Instanzen Merkregel: Vererbungsbeziehung drückt eine ist ein Beziehung aus Beispiel: Ein PKW ist ein Fahrzeug Aber: Nicht jedes Fahrzeug ist ein PKW Variablen der Basisklasse können auf Referenzen der Subklassen verweisen Fahrzeug f = new Fahrzeug(); Fahrzeug f1 = new PKW(); Fahrzeug f2 = new Bus(); Bus b = new Bus(); Fahrzeug f3 = b; Fahrzeug Aber nicht umgekehrt Bus b = new Fahrzeug(); //Fehler Bus PKW Security - 04 Cryptology #45 15

Schlüsselwort super Jede Instanz hat eine Referenz auf Ober-Instanz z.b. um Attribute und Methoden explizit zu referenzieren Diese heißt super super Gegenstand Erfüllt ähnlichen Zweck zum Zugriff auf Elemente der Oberinstanz wie this für die aktuelle Instanz super Fahrzeug Bus PKW super Kann nicht wie this ausgegeben werden (zeigt auf dieselbe Instanz) Security - 04 Cryptology #46 Aufruf des super -Konstruktors Aufruf des Konstruktors der Oberklasse Nur aus Konstruktor möglich Muss erster Aufruf im Konstruktor sein Syntax: super( evtl. Parameter ) class Fahrzeug { Fahrzeug(int i) { /* Code des Konstruktors */ } } class Bus extends Fahrzeug { Bus() { super(1); } } Security - 04 Cryptology #47 Aufruf der Super-Methode Ruft Methode der Oberklasse auf Nur möglich im Konstruktor und in Methoden Ohne super würde die Methode der aktuellen Klasse aufgerufen Syntax super.methodenname( evtl. Parameter ) Security - 04 Cryptology #48 16

Modifier Klasse Package Unterklasse Überall public (komisch) protected* Keine Angabe: package private private* *) Nicht für Klassen (nur für Attribute, Konstruktoren und Methoden) Polymorphismus Methoden von Oberklassen können in Unterklassen redefiniert werden Überladen (Overloading) Methode mit gleichem Namen und unterschiedlichen Parametern Rückgabetyp bleibt gleich Überschreiben (Overriding) Polymorphismus Gleiche Signatur einer Methode in einer Unterklasse Nach außen gleiches Interface, aber anderes Verhalten Klasse Obst Methode gibt Fehler (-1) zurück Das abstrakte Konzept Obst kostet ja nichts Public, damit sie von außen aufgerufen werden kann Security - 04 Cryptology #51 17

Klasse Apfel Attribute Gewicht double gewichtinkg; Preis pro kg double preisprokg; Methoden double getpreisineuro(); Berechnet Preis basierend auf Gewicht und Gewicht pro kg Apfel(double gewichtinkg, double preisprokg) Konstruktor mit gewichtinkg und preisprokg Initialisiert die Attribute Abstrakte Klassen und Methoden Man kann Klassen und Methoden als abstrakt kennzeichnen Bedeutung: Von abstrakten Klassen können keine Instanzen erzeugt werden Ist mindestens eine Methode einer Klasse abstrakt, so ist auch die Klasse abstrakt Security - 04 Cryptology #53 Beispiel: Abstrakte Klasse Obst Abstrakte Klassen: Keyword abstract Syntax: abstract class XXX {} Beispiel: Security - 04 Cryptology #54 18

Erzwingen der Implementierung von Methoden Wie kann man nun erzwingen, dass in Unterklassen bestimmte Methoden implementiert werden? Lösung: durch abstrakte Methoden public abstract double getpreisineuro(); Nur Signatur (wg. ; am Ende) aber keine Implementierung Enthält eine Klasse mindestens eine abstrakte Methode, so muss die Klasse auch abstrakt sein D.h. es muss abstract class Obst heißen Existenz mindestens einer abstrakten Methode: es können von dieser Klasse auch keine Instanzen erzeugt werden Security - 04 Cryptology #55 Interfaces Können Klassen auch von mehreren Oberklassen erben? Sogenannte Mehrfachvererbung Prinzipiell ja (z.b. in C++), in Java jedoch nicht Es können Konflikte entstehen, deren Auflösung kompliziert sein kann Java bietet ähnliche Funktionalität über einen Trick Neben echten Oberklassen gibt es sog. Interfaces Ein Interface enthält lediglich Methodensignaturen D.h. keine Methodenimplementierung / kein Code Vergleichbar mit Klassen, die nur abstrakte Methoden enthalten 5-2-56 Abstrakte Klasse vs. Interface Abstrakte Klasse abstract class Obst { public abstract double getpreisineuro(); } Interface interface Obst { double getpreisineuro(); } Abstract wird implizit für Klasse und Methoden angenommen und muss daher nicht explizit auftauchen Methoden eines Interfaces sind immer public 19

Abstrakte Klasse vs. Interface Abstrakte Klassen können auch normale Methoden enthalten (mit Implementierung) abstract class Obst { public void gebeaus() { } OK public abstract double getpreisineuro(); } Bei Interfaces ist dies nicht erlaubt interface Obst { void gebeaus() { } nicht möglich double getpreisineuro(); } Interfaces: Type Identification Woran erkennt man Typ einer Instanz? Obstbeispiel: Woran erkennt man, dass ein Objekt das Interface Herkunftsland implementiert? Java bietet Operator instanceof Syntax: instanz instanceof Klasse Liefert einen Booleschen Wert zurück Sogenannte Run-time type identification Man kann zur Laufzeit des Programms feststellen, von welchem Typ eine Instanz ist 5-2-59 Finalisieren: Methoden, Klassen, Attribute Überschreiben von Methoden in Unterklassen verhindern Deklarieren von Methoden als final final void myfinalmethod() { } Verhindern, dass Unterklassen zu einer Klasse gebildet werden final class MyFinalClass { } Alle Methoden dieser Klasse sind dann ebenfalls final Attribute können ebenfalls final sein Wert kann nur einmal gesetzt werden (Deklaration oder Konstruktor) final int myfinalint = 7; 20

Modellierung einer Klasse in UML Klasse ohne Attribute, Methoden, etc. Klasse mit einem Attribut Klasse mit einer Methode Klasse mit einem Attribut und einer Methode Security - 00 Layout Master #61 Zugriffssteuerung (Methoden & Attribute) + für public # für protected - für private ~ ~ für package private Nur in wenigen Programmiersprachen verfügbar (Java, C#) Security - 00 Layout Master #62 Modellierung von Interfaces in UML Interfaces markiert durch <<interface>> Security - 00 Layout Master #63 21

Modellierung einer Klasse in UML Statische Elemente Markiert durch Unterstreichung Abstrakte Elemente Markiert durch kursive Schrift Security - 00 Layout Master #64 Vererbung Security - 00 Layout Master #65 Vererbung Vererbung + Implementieren von Interfaces Security - 00 Layout Master #66 22

Instanzen von Klassen in UML Notation eines Objekts Beispiel objektname: Klasse attributname = wert p : Person name = "Walter" geburtsdatum = "12.12.1922" 23