Schwerpunkte. 4. Komponentenarten. Imperative und objekt-orientierte Programm-Strukturen: Wirklichkeit

Ähnliche Dokumente
3. Grundlegende Sprachkonstruktionen imperativer Programme

JAVA - Methoden

Repetitorium Informatik (Java)

JAVA - Methoden - Rekursion

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

1.2 Attribute und Methoden Aufbau einer Java-Klasse:

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

Probeklausur: Programmierung WS04/05

II.3.1 Rekursive Algorithmen - 1 -

Java Einführung VARIABLEN und DATENTYPEN Kapitel 2

Objektorientierte Programmierung

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

Welche Informatik-Kenntnisse bringen Sie mit?

Primitive Datentypen

Letztes Mal. static int ggt(int a, int b) { if (a == b) return a; else if (a > b) return ggt(a-b,b); else if (a < b) return ggt(a,b-a);

Algorithmen und Programmierung II

Einführung in die Programmierung mit Java

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

Grundzüge der Wirtschaftsinformatik WS 2002/03. Wiederholung Java. Programmierzyklus. Heiko Rossnagel Problem

J.5 Die Java Virtual Machine

Javakurs 2013 Objektorientierung

Grundlagen der Informatik für Ingenieure I

Einstieg in die Informatik mit Java

1. Typen und Literale (6 Punkte) 2. Zuweisungen (6 = Punkte)

Die Programmiersprache C Eine Einführung

Einführung in die Programmierung mit Java

5. Tutorium zu Programmieren

ihrer Klasse benötigt die Funktion einfuegenan:

Vererbung & Schnittstellen in C#

Probeklausur: Programmierung WS04/05

Distributed Computing Group

Einstieg in die Informatik mit Java

Programmieren 2 Selbststudium Semesterwoche 6

Javakurs für Anfänger

5.5.8 Öffentliche und private Eigenschaften

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

Algorithmen und Datenstrukturen

1 Polymorphie (Vielgestaltigkeit)

Übersicht. Vorstellung des OO-Paradigmas

Einstieg in die Informatik mit Java

6. Iteration (Schleifenanweisungen)

Java Einführung Abstrakte Klassen und Interfaces

Einführung in die Programmierung 1

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

Übersicht. Schleifen. Schleifeninvarianten. Referenztypen, Wrapperklassen und API. 9. November 2009 CoMa I WS 08/09 1/15

AuD-Tafelübung T-B5b

Einführung in die Informatik

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

Einführung Datentypen Verzweigung Schleifen Funktionen Dynamische Datenstrukturen. Java Crashkurs. Kim-Manuel Klein

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

Proseminar: C# und.net. 6. Vortag Generische Klassen. Sebastian Wolf

Informatik ist viel mehr als Delphi-Programmierung!

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

11. Rekursion, Komplexität von Algorithmen

Java - Programmierung - Objektorientierte Programmierung 1

Java Einführung Methoden in Klassen

Musterlösungen zur Klausur Informatik 3

Java Einführung Klassendefinitionen

3 Objektorientierte Konzepte in Java

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

Datenbankanwendungsprogrammierung Crashkurs Java

II.1.1. Erste Schritte - 1 -

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

Einfache Arrays. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Einführung in die Java- Programmierung

Klausur C-Programmierung / / Klingebiel / 60 Minuten / 60 Punkte

Grundzüge der Programmierung. Wiederverwendung VERERBUNG

13 Java 4 - Entwurfsmuster am Beispiel des Rucksackproblems

Klassen mit Instanzmethoden

Objekt-Orientierte Programmierung

Hello World. Javakurs 2014, 1. Vorlesung. Sebastian Schuck. basierend auf der Vorlage von Arne Kappen. wiki.freitagsrunde.org. 3.

Testklausur 1 zur Vorlesung. Modellierung und Programmierung I. Dr. Monika Meiler Zeit: 60 Minuten

Java I Vorlesung Vererbung und Sichtbarkeit

Theorie zu Übung 8 Implementierung in Java

Wiederholung Wozu Methoden? Methoden Schreiben Methoden Benutzen Rekursion?! Methoden. Javakurs 2012, 3. Vorlesung

public class SternchenRechteckGefuellt {

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

3 Objektorientierte Konzepte in Java

Ein erstes Java-Programm

Informatik II Prüfungsvorbereitungskurs

Kurze Einführung in die Programmiersprache C++ und in Root

Vorkurs Informatik WiSe 16/17

12. Rekursion Grundlagen der Programmierung 1 (Java)

Programmieren I + II Regeln der Code-Formatierung

5. Abstrakte Klassen

5.4 Klassen und Objekte

Eine Klasse beschreibt Objekte mit gleichen Attributen und Methoden.

Vererbung. Martin Wirsing. Ziele. Vererbung

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

Einführung in die objektorientierte Programmierung mit Java. Klausur am 19. Oktober 2005

Kapitel 8. Programmierkurs. Methoden. 8.1 Methoden

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

Prof. H. Herbstreith Fachbereich Informatik. Leistungsnachweis. Informatik 1 WS 2001/2002

Dr. Monika Meiler. Inhalt

Einführung Datentypen Verzweigung Schleifen. Java Crashkurs. Kim-Manuel Klein May 4, 2015

Java für Computerlinguisten

Java-Schulung Grundlagen

2. Java Schnellkurs Advanced Programming Techniques. Wintersemester 2009/10 Prof. Dr. Bernhard Humm Hochschule Darmstadt, FB Informatik

Reihungen. Martin Wirsing. in Zusammenarbeit mit Matthias Hölzl und Nora Koch 11/03

Dr. Monika Meiler. Inhalt

Transkript:

Schwerpunkte 4. Komponentenarten Java-Beispiele: Java.lang.Math (Java-API) Stack.java (aus: III.1) Time.java (aus: III.2) Keyboard.java (aus: II.3) TimeC.java (aus: III.3) Ziele: Systematisierung: Aufbau von Klassen Beherrschung des Klassenkonzepts vertiefen Unterschiedliche Einsatzfelder von Klassen aufzeigen Erkennen: Software-Systeme in der Praxis sind aus Klassen unterschiedlicher Art aufgebaut, d.h. es gibt keine "reinen" objekt-orientierten Systeme Version: 9. Dezember 2015 2 Imperative und objekt-orientierte Programm-Strukturen: im Ideal Imperative und objekt-orientierte Programm-Strukturen: Wirklichkeit Imperative Struktur: A1 A2 A3 A4 Objekt-orientierte Struktur: C1 C2 C3 C4 C5 C6 Realität: "Reine e bzw. "reine objekt-orientierte System-Strukturen sind selten bzw. nicht sinnvoll bzw. unmöglich Normalerweise sind die Systeme eine Mischung unterschiedlichster Komponentenarten Reale Strukturen: Komponenten Ai sind : realisieren Algorithmen, z.b. ZeitPlan.java, Hanoi.java Komponenten Ci sind objekt-orientiert: realisieren abstrakte Datentypen, z.b. Time.java, Stack.java A3 C1 C4 C2 Objekt-orientierte Komponente A5 A1 Imperative (algorithmische) Komponente 3 4

Problem: sinnvolle Komponentenarten Klassen und Komponentenarten Klasse = Komponente eines en SW-Systems (in Java, C++, Smalltalk, Simula 67, Eiffel ) Klasse: eine Syntax Sammlung von Variablen und Methoden SW-System: K1 K3 K4 K2 /non- public/private Welche Komponentenarten möglich / sinnvoll? Viele Komponentenarten mit höchst unterschiedlichen Eigenschaften realisierbar (z.b., e Komponenten ). Das Java-Klassenkonzept (auch: C++ u.a.) spiegelt nur ungenügend relevante Arten von Softwarekomponenten wider. Ziel dieses Kapitels: Ordnung hineinbringen (Klassifikation) Orientierung und methodische Hilfe: - Lesen und Verstehen von Programmen - Entwickeln von Programmen 5 6 Klassen und realisierbare Komponentenarten: Überblick Klassen und realisierbare Komponentenarten: Überblick mit Es folgt die Behandlung verschiedener Komponentenarten: Prinzip Syntaktische Realisierung in Java Nutzung Beispiele mit 7 8

Klassen und Komponentenarten: Komponentenart: Menge von verwandten Funktionen ohne gemeinsame Daten (evtl. einige Konstanten) Æ also: Menge unabhängiger Algorithmen nur 'public' ''-Methoden (nur Klassenmethoden) (+ einige 'final' '' - Variablen) Funktions sammlung Æ Daten können nicht dem Austausch von Information zwischen den Funktionen dienen (vgl. Stack) Æ Nutzung: Instanzenbildung nicht sinnvoll mit Beispiel: 9 API-Klasse java.lang.math mathematische Funktionen im Java-API 10 Java-API: public final class Java.lang.Math public final class java.lang.math Auswahl von Methoden: The class Math contains methods for performing basic numeric operations such as the elementary exponential, logarithm, square root, and trigonometric functions. Zwei Konstanten: double abs(double a) float abs (float a) int abs (int a) double asin(double a) double cos(double a) double log(double a) // Basis e double pow(double a, double b) double E double PI 11 12

public final double E The double that is closer than any other to e, the base of the natural logarithm Klassen und Komponentenarten: abstrakter Datentyp public final double PI The double that is closer than any other to pi, public double sin(double a) Returns the trigonometric sine of an angle. Nutzung: ohne Instanzenbildung Math.sin(1.2); Math.PI; mit 13 14 gefährlich! Komponentenart: Ideal einer OO-Komponente: - Menge von verwandten Funktionen mit gemeinsamen versteckten Daten - Neuer nutzerdefinierter Typ definiert: beliebig Instanzenbildungen private non- Variablen (Instanz) public non- Methoden (Instanz) Nutzung: beliebig Instanzen (Objekte) des Typs können erzeugt werden Beispiele: Stack, Time, HashTable Abweichungen: (vgl. Abschnitt III.2) - public-variablen (schneller Zugriff) - private-methoden (Hilfsfunktionen) 15 Beispiel für : Klasse Time class Time { // alles non- private int hour, minute; public Time() public addminutes public printminutes public timeinminutes public printtimeinminutes class Schedule { public main Time t1 = new Time(8,30); Time t2 = new Time(); Time t3, t4; Nutzung: Instanzbildung 16

Klassen und Komponentenarten: Komponentenart: - Wie : Menge von verwandten Funktionen mit gemeinsamen versteckten Daten - Ohne die Möglichkeit der Instanzenbildung (nur ein Exemplar benötigt nur ein Exemplar möglich) Spezialfall eines mit alles Klassenelemente private Variablen public - Methoden Nutzung: keine Instanzenbildung Beispiel: Keyboard (auch: Stack, Time können so realisiert werden) 17 18 Keyboard/Tastatur: Anwendungsprogramm benötigt nur ein Exemplar class Keyboard { private boolean iseof = false; private char c; private BufferedReader input = public int readint () { if (iseof) return 0; System.out.flush(); public char readchar () public double readdouble ( public String readstring () public boolean eof () class Temperature { main tempfahr = Keyboard.readDouble(); Vorteil: keine Instanzenbildung in der Anwendung nötig Vorteil? 19 Stack als : nur eine Instanz? Hier: Stack class Stack { private char [] stackelements; private int top; public void Stack(int n) { stackelements = new char [n]; top = -1; public boolean isempty() { return top == -1; public void push(char x) { top++; stackelements[top] = x; public char top() { if (isempty()) { System.out.println("Stack leer"); return ; else return stackelements [top]; public void pop() { Was ist zu ändern? if (isempty()) System.out.println("Stack leer"); else top--; 20

Stack als : nur eine Instanz class Stack { private char [] stackelements; private int top; public void init(int n) { stackelements = new char [n]; top = -1; public boolean isempty() { return top == -1; public void push(char x) { top++; stackelements[top] = x; public char top() { if (isempty()) { System.out.println("Stack leer"); return ; else return stackelements [top]; public void pop() { if (isempty()) System.out.println("Stack leer"); else top--; 21 Stack als (1): nur e i n e Instanz class Stack { private char [] stackelements; private int top; nicht Konstruktor Stack() public void init(int n) { stackelements = new char [n]; top = -1; Methoden: nur einmal public boolean isempty() { return top == -1; public void push(char x) { top++; stackelements[top] = x; Variablen: existieren nur einmal 22 Stack als (2): nur e i n e Instanz public char top() { if (isempty()) { System.out.println("Stack leer"); return ; else return stackelements [top]; public void pop() { if (isempty()) System.out.println("Stack leer"); else top--; Anwendung: Stack als public void main (String argv[]) { int n; char ch; // moeglich - aber Unsinn : // Instanzenbildung von Stack: // Stack s = new Stack (); Stack.init(n); for (int i = 0; i < n; i++) { ch = Keyboard.readChar(); Stack.push(ch); while (!Stack.isempty()) { System.out.print(Stack.top()); Stack.pop(); Wieso? 23 24

Klassen und Komponentenarten: mit Komponentenart: mit Wie : Menge von verwandten Funktionen mit gemeinsamen versteckten Daten, aber: - einige Variablen / Methoden nur einfach (keine Instanzenbildung) - beliebig Instanzen (Objekte / Variablen) des Typs Variablen als gemeinsamer Speicher aller Instanzen des Typs mit private non- oder Variablen public non- oder Methoden Beispiel: Time mit Klassenvariablen 'noonhour' und Klasenmethode switchtimeformat() TimeC (Kapitel III.3) 25 26 Klassen und Komponentenarten: Komponentenart: en (Datenklassen) Zusammenfassung von sichtbaren Daten zu neuem Typ keine Methoden nur nicht-statische public Daten Nutzung: Instanzenbildung mit Beispiel: Punkt3D wie Pascal-Record (bzw. C-Struct) 27 28

Beispiel: Klassen und Komponentenarten: Punkte im dreidimensionalen Raum bestehen aus drei Werten: x-, y-, z- Koordianten class Punkt3D { double x, y, z; sichtbar im selben Paket class Punkt3D { public double x, y, z; sichtbar in allen Paketen mit 29 30 Komponentenart: Beispiele: class IO_Constants { Zusammenfassung von sichtbaren Konstanten public final char LF = \n, FF = \f, CR = \r ; - keine Methoden - nur public final Variablen public final int DRUCK_BREITE = 80; Nutzung: keine Instanzenbildung Beispiel: Drucksteuerzeichen als Konstanten C, C++:.h-Files: #define LF \n #define FF \f #define CR \r #define DRUCK_BREITE 80 In C, C++: Namen nicht typgebunden reine Textersetzung 31 32

Klassen und Komponentenarten: e Komponenten Komponentenart: e Komponente Komponente, für die Instanzenbildung n i c h t sinnvoll ist Daten und Methoden nur '' Nutzung: keine Instanzenbildung von Klassen Beispiele: Teil II der Vorlesung es kommt auf Algorithmen an mit Sortierverfahren Hanoi.java s.o.: en Main-Klasse: enthält main() niemals Instanzenbildung Main-Klasse immer e Komponente Beginn des Algorithmus 33 34 Beispiel: main-klasse ohne Instanzenbildung Beispiel: Instanziierung einer main-klasse (Quelle: J. Bishop, Java lernen, Addison-Wesley, 2001) public class Echo { class Hallo { public void main(string args[]) { for (int i=0; i < args.length; i++) System.out.println(args[i] + " "); System.out.print("\n"); Hallo() { System.out.println( Hallo!"); public void main (String[] args) { new Hallo(); Wie sieht das erzeugte Bewertung dieses Stils? Objekt aus? Instanzenbildung sinnlos Anm.: auch in: D. Bell, M. Parr: Java for Students, Prentice-Hall 2001 / auch in Deutsch Buch bis zur 3. Auflage nicht zu empfehlen: nur Applet-orientiert, rezepthaft, keine Rekursion u.v.a. 35 36

Klassen und Komponentenarten: e Komponente Komponentenart: e Komponente Komponente, für die Instanzenbildung sinnvoll (notwendig) ist enthält non- Elemente (Instanz-Elemente: Variablen oder Methoden) Nutzung: Instanzenbildung nötig, um Variablen zu erzeugen (Speicherplatz) bzw. Methoden nutzbar zu machen mit Beispiele: - - mit - 37 38 Klassen und Komponentenarten: Komponentenarten: Klassenkonstruktionen - trotz syntaktischer Korrektheit der Klasse Compiler meldet keinen Fehler Alle Elemente (Daten, Methoden): 'private' (alle) Daten: 'public'; alle Methoden: 'private' Alle Elemente der Klasse C: '' + Instanzenbildung new C() mit 39 Variablen: 'private', non-; alle Methoden: '' Alle Variablen: ''; alle Methoden: non- Weitere? 40

Beispiel: alle Elemente 'private' class Time { private int hour, minute; private final int noonhour = 12; Beispiel: (alle) Daten 'public' alle Methoden 'private' class Time { public int hour, minute; public final int noonhour = 12; private addminutes (int m) { Niemand erreichbar private addminutes (int m) { hour = Nutzlose Methoden 41 42 Beispiel: alle Elemente '' + Instanzenbildung Beispiel: Variablen 'private', non- alle Methoden '' class Time { class Time { public int hour, minute; public final int noonhour = 12; public addminutes (int m) { hour = class Apply { Leere Instanzen private int hour, minute; private final int noonhour = 12; public Time() { public addminutes (int m) { Keine Bearbeitung der Instanzvariablen möglich Time t1, t2; public void main() { t1 = new Time (); t2 = new Time (); hour = ok? Klassenmethoden () können Instanzvariablen nicht bearbeiten 43 44

Beispiel: Variablen '' alle Methoden non- Komponentenarten und Programmiersprachen class Time { private int hour, minute; private final int noonhour = 12; Problem: Welche Programmiersprache kann welche Komponentenarten unterstützen? alle Komponentenarten public addminutes (int m) { hour = Time t1, t2; t1 = new Time (); t2 = new Time (); t1.addminutes(20); t2.addminutes(10); Instanzen ohne Daten Methoden aller Instanzen identisch Instanzenbildung sinnvoll Java C++ Smalltalk Delphi-Pascal objektbasiert () Modula-2 Ada Instanzenbildung nicht sinnvoll Pascal Fortran Cobol Basic 45 46 Anwendung: Komponentenarten (Klassifikation) Erkennen der Komponentenart aufgrund syntaktischer Merkmale (private / public / non-) Bedeutung? class Counter { private int x; public Counter () { x = 0; public void count () { x++; Art? Was fehlt der Klasse? Selbstständige Entwicklung sinnvoller Komponenten = die "Kunst" der oo-programmierung (viel Erfahrung!!) 47