• Keine Ergebnisse gefunden

252-0027 Einführung in die Programmierung 4.0 Klassen und Objekte

N/A
N/A
Protected

Academic year: 2022

Aktie "252-0027 Einführung in die Programmierung 4.0 Klassen und Objekte"

Copied!
94
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

252-0027

Einführung in die Programmierung 4.0 Klassen und Objekte

Thomas R. Gross

Department Informatik ETH Zürich

1

(2)

4.0 Klassen und Objekte

§ 4.4 Attribute

§ 4.5 Methoden

§ 4.6 Konstruktoren

§ 4.7 Sichtbarkeit von Attributen

§ 4.8 static Methoden und Variablen

2

(3)

4.7 Sichtbarkeit für Attribute

61

(4)

Attribute für Person

public class Person { String name;

int id;

double hourlyRate;

double[] hours;

double[] overtime;

// various methods

}

§ Wenn wir für jede Person den Stundenlohn festhalten

wollen können wir ein Attribut hinzufügen

62

(5)

Zugriff auf Attribute

§ Jeder Klient kann (bisher) auf alle Attribute eines Objektes zugreifen (lesen und/oder modifizieren)

§ Accessor und Mutator Methoden strukturieren den Code aber Zugriff ist noch immer möglich

§ Dies ist nicht immer gewünscht

§ Sonst könnte jeder hourlyRate verändern … public void myFriend(Person p) {

p.hourlyRate = p.hourlyRate * 2.0;

}

63

(6)

Zugriff auf Attribute

§ Jeder Klient kann (bisher) auf alle Attribute eines Objektes zugreifen (lesen und/oder modifizieren)

§ Wie können wir Objektexemplare so konstruieren dass (manche/alle) Attribute "geschützt" sind?

§ Grundproblem der Abkapselung ("Encapsulation")

64

(7)

"Encapsulation" (Datenkapselung)

§ Bisher: Definition von Variablen in Methoden

§ … und in Blöcken innerhalb von Methoden

§ Regel: keine Doppeldefinitionen

§ Jetzt: Objekte haben einen Zustand (Objektattribute)

§ Variable ausserhalb von Methoden deklariert

§ Zugriff (Dot-Notation) mittels Referenzvariable

§ Klassen als Mechanismus der Abkapselung

§ "Encapsulation" (manchmal Datenkapselung)

(8)

67

Point int x;

int y;

public class Point { int x;

int y;

}

Point

int x;

int y;

Point int x;

int y;

(9)

Encapsulation

§ Idee: Verstecken der Details der Implementation einer Klasse vor den Klienten der Klasse

§ Encapsulation zwingt zur Abstraktion.

§ Trennung von Verhalten (extern sichtbar) und Zustand (intern)

§ Schützt die Daten eines Objektes vor unbeabsichtigten oder unerwünschten Operationen

§ Encapsulation erlaubt Anpassung(en) der Implementation ohne

Änderungen der Klienten Programme

(10)

Abstraktion und Datenkapselung

§ iPod Verhalten festgelegt durch (zugängliche) Schalter/Regler sowie Steuerfunktionen

§ Hersteller (des iPods) kann Implementation ändern (schnellerer Prozessor, mehr Speicher)

§ … und der Hersteller (der Boards) kann andere Speicherchips einsetzen

69

(11)

Encapsulation

§ Bei der Definition eines Attributes können wir dessen Sichtbarkeit angeben

§ Attribute die nur intern (d.h. von Methoden der Klasse) geändert bzw gelesen werden können

§ Attribute auf die "von aussen" (d.h. aus Methoden anderer Klassen – d.h. extern) zugegriffen werden kann

§ Zugriff mit Dot Notation

§ Bisher in unseren Klassen verwendet um nicht zuviel auf einmal erklären zu müssen

§ Später lernen wir noch andere Möglichkeiten kennen, interne und externe Attribute zu trennen

70

(12)

Private Attribute

Ein Attribut ("field") auf das nicht von ausserhalb der Klasse zugegriffen werden kann

§ Syntax:

private type name ;

§ Beispiele (alles Attribute einer Klasse!)

private int id;

private String name;

(13)

Private Attribute

public class Person {

private String name;

private int id;

private double hourlyRate;

private double[] hours;

private double[] overtime;

// various methods

public double computePay() { ...

for (int i = 0; i < hours.length; i++) ...

}

} § Direkter Zugriff auf Attribute in Methoden der Klasse

72

(14)

Person Objekte mit Methode computePay

public class Person { private String name;

private int id;

private double hourlyRate;

private double[] hours;

private double[] overtime;

// Computes wages, 25% overtime supplement public double computePay() {

double sumStd = 0;

double sumOvt = 0;

for (int i = 0; i < hours.length; i++) { sumStd += hours[i];

}

for (int i = 0; i < overtime.length; i++) { sumOvt += overtime[i];

}

return sumStd * hourlyRate + sumOvt * hourlyRate * 1.25;

}

} 73

(15)

Private Attribute

// irgendwo in einem Klienten

Person myRecord = …; // set to my Person object

myRecord.hourlyRate = 50;

§ Klienten Programm wird nicht übersetzt wegen unerlaubten Zugriffs auf privates Attribut:

PersonExample.java:17: hourlyRate has private access in Person

myRecord.hourlyRate = 50;

74

public class Person { ...

private double hourlyRate;

...

// various methods

}

(16)

Zugriff auf private Attribute

§ Nur Methoden die in der Klasse definiert sind können auf private Attribute zugreifen

§ Siehe Methode computePay

§ Wenn Zugriff von extern erlaubt sein soll dann muss die Klasse dafür Methoden zur Verfügung stellen

§ Accessor Methode(n)

§ Mutator Methode(n)

75

(17)

Zugriff auf den privaten Zustand

// A "read-only" access to the hourlyRate field // ("accessor")

public int getHourlyRate() { return hourlyRate;

}

// Allows clients to change the hourlyRate field // ("mutator")

public void setHourlyRate (int newRate) { hourlyRate = newRate;

}

(18)

Zugriff auf den privaten Zustand, im Klienten

§ Das Klientenprogramm sieht dann so aus :

System.out.println(myRecord.getHourlyRate());

myRecord.setHourlyRate(40);

77

(19)

Vorteile Mutator/Accessor Methode

§ Methoden können zusätzliche Kontrollen vornehmen

§ Check Recht eine Änderung vorzunehmen

§ Log aller Änderungen

§ Methoden können Transformationen vornehmen

78

(20)

Point class

// A Point object represents an (x, y) location.

public class Point { private int x;

private int y;

public Point(int initialX, int initialY) { x = initialX;

y = initialY;

}

public int getX() { return x;

}

public int getY() { return y;

}public void setX (int newX){

x = newX;

}public void setY (int newY) { ...

public double distanceFromOrigin() { return Math.sqrt(x * x + y * y);

}

public void setLocation(int newX, int newY) { setX(newX);

setY(newY);

}

public void translate(int dx, int dy) { setLocation(x + dx, y + dy);

} }

(21)

Vorteile der Encapsulation

§ Abstraktion des Objektes und des Klienten

§ Objekt: stellt Methoden zur Verfügung, "verheimlicht"

Implementation

§ Klient: ruft Methoden auf, keine Annahmen über die Implementation

§ Schutz vor unerwünschtem Zugriff

§ Accessor/Mutator Methoden sind optional

§ Beispiel: Person ohne setHourlyRate Methode

§ Objekt kann (z.B.) ein Protokoll der Zugriffe anlegen

§ Wann wurde hourlyRate geändert

§ Objekt kann weitere Kontrollen durchführen (Erlaubnis …)

80

(22)

Vorteile der Encapsulation

§ Objekt kann die Implementation verändern

§ Beispiel: Klasse Point könnte Polarkoordinaten (r, θ) verwenden – Namen der Methoden sind gleich aber die

Implementation ändert sich

§ Beispiel: Klasse Person unterscheidet zwischen Normalzeit, Überzeit und Überstunden

§ Können den Zustand eines Objektes weiteren Beschränkungen unterwerfen

§ Beispiel: hourlyRate muss positiv sein

§ Ein Datum muss einen Monat von 1 bis 12 enthalten etc

81

(23)

Encapsulation (Hinweis)

§ Nicht nur Attribute können private sein, auch Methoden

§ Nicht-öffentliches Verhalten

§ Sinnvoll wenn wir aus Methoden gemeinsame Anweisungen herausnehmen wollen (und in einer eigenen Methode

zusammenfassen) aber sicher stellen wollen, dass diese Methode nicht von einem Klienten direkt aufgerufen wird

§ Syntax:

private type name ( parameters ) { statements ;

}

82

(24)

Enkapsulation

§ Bisher: Variable (oder Parameter) in Methode geschützt

§ Deklariert Variable für Block (bzw Parameter für Body der Methode)

§ Kein Zugriff von aussen

§ Jetzt: Attribute deklarieren Variable für die Methoden der Klasse

§ Attribut geschützt wenn sie private sind

§ Verantwortung der Entwickler

§ Was passiert bei Namenskonflikten?

83

(25)

85

(26)

Encapsulation und Namensräume

§ Sie erinnern sich an den Konstruktor für Point Objekte:

public Point(int initialX, int initialY) { x = initialX;

y = initialY;

}

§ Parameter definiert eine Variable für den Rumpf der Methode

§ Regel gilt auch für Konstruktoren

§ Was passiert wenn wir x und y als Namen für die Parameter verwenden (wollen)?

86

(27)

88

(28)

90

(29)

Encapsulation und Namensräume

§ Konstruktor für Point Objekte:

public Point(int x, int y) { this.x = x;

this.y = y;

}

§ Der Parameter verdeckt (shadows) das Attribut der Klasse Point

§ Müssen daher mittels this auf das x-Attribut bzw y-Attribut der Klasse zugreifen

91

(30)

this

§ this verweist also auf den impliziten Parameter einer Methode

§ this kann auch verwendet werden um einen anderen Konstruktor aufzurufen (später mehr)

§ Ein Konstruktor ruft einen anderen auf:

this(parameters);

§ Klammern ( und ) wichtig

§ Beispiel für sinnvollen Einsatz später

93

(31)

Verdecken von Variablen ("shadowing")

§ shadowing: Zwei Variable mit dem selben Namen die beide sichtbar sind.

§ Normalerweise in Java illegal – Ausnahme wenn eine der Variablen ein Attribut ("field") einer Klasse ist.

§ x und y beziehen sich auf die Attribute

§ Wenn eine Methode x und y als Parameter hat, dann beziehen sich x und y auf die Parameter.

§ Wenn eine Methode x und y als Variable deklariert dann beziehen

sich x und y auf die Variable

(32)

Verdecken von Variablen ("shadowing")

public class Point { private int x;

private int y;

void method1() {

// x bezieht sich auf Attribut x }

void method2(int x) {

// x bezieht sich auf Parameter x }

void method3() { int x;

// x bezieht sich auf Variable x }

}

96

(33)

Verdecken von Variablen ("shadowing")

public class Point { int x;

int y;

void method1() {

// x bezieht sich auf Attribut x }

void method2(int x) {

// x bezieht sich auf Parameter x }

void method3() { int x;

// x bezieht sich auf Variable x }

}

97

(34)

Shadowing Probleme vermeiden

public class Point { private int x;

private int y;

...

public void setLocation(int x, int y) { this.x = x;

this.y = y;

} }

Innerhalb von setLocation,

§ Um sich auf das Attribut ("field") x zu beziehen: verwende this.x

§ Um sich auf den Parameter x zu beziehen: verwende x

(35)

Einen anderen Konstruktor aufrufen

public class Point { private int x;

private int y;

public Point() { x = 0;

y = 0;

public Point(int x, int y) { } this.x = x;

this.y = y;

}

} ...

(36)

Einen anderen Konstruktor aufrufen

public class Point { private int x;

private int y;

public Point() {

this(0, 0); // calls (x, y) constructor public Point(int x, int y) { }

this.x = x;

this.y = y;

}

} ...

(37)

Einen anderen Konstruktor aufrufen

§ Vermeidet Redundanz zwischen Konstruktoren

§ Nur ein Konstruktor kann einen anderen Konstruktor aufrufen

§ Eine Methode kann nicht einen Konstruktor aufrufen!

103

(38)

4.8 static Methoden und Variablen

105

(39)

Kurze Geschichte der Methoden

die wir in der Vorlesung kennen gelernt hatten

§ public static void main(String[] args) {… }

§ public static void name () { … }

§ public static void name ( type name ) { … }

§ public static type name ( type name ) { … }

§ public type name ( type name ) { … }

§ private type name ( type name ) { … }

106

(40)

Was bedeutet static wirklich?

die wir in der Vorlesung kennen gelernt hatten

§ public static void main(String[] args) {… }

§ public static void name () { … }

§ public static void name ( type name ) { … }

§ public static type name ( type name ) { … }

§ public type name ( type name ) { … }

§ private type name ( type name ) { … }

107

(41)

Vom Programm zum (Software)System

§ Fast alle Software Systeme bestehen aus vielen Klassen.

§ Eine Hauptklasse ruft Methoden anderer Klassen auf

§ Hauptklasse hat eine Anfangsmethode

public static void main (String[] args)

)

Main Class #1 main

method1 method2

Class #2 method3

method5

Class #3 method4

method6

§ Vorteile:

§ Code Wiederverwendung

§ Gliedert das Programm in überschaubare Teile

108

(42)

Ein Programm mit Redundanz, Aufgabe 1

// This program sees whether some interesting numbers are prime.

public class Primes1 {

public static void main(String[] args) {

int[] nums = {1234517, 859501, 53, 142};

for (int i = 0; i < nums.length; i++) { if (isPrime(nums[i])) {

System.out.println(nums[i] + " is prime");

} }

}

// continued on next slide

109

(43)

Ein Programm mit Redundanz, Aufgabe 1, Teil 2

// Returns the number of factors of the given integer.

public static int countFactors(int number) { int count = 0;

for (int i = 1; i <= number; i++) { if (number % i == 0) {

count++;

// i is a factor of the number

} }

return count;

}

// Returns true if the given number is prime.

public static boolean isPrime(int number) { return countFactors(number) == 2;

}

}

110

(44)

Ein Programm mit Redundanz, Aufgabe 2

// This program prints all prime numbers up to a maximum.

public

class Primes2 {

public static void main(String[] args) {

Scanner console = new Scanner(System.in);

System.out.print("Max number? ");

int max = console.nextInt();

for (int i = 2; i <= max; i++) { if (isPrime(i)) {

System.out.print(i + " ");

} }

System.out.println();

}

// continued on next slide

111

(45)

Ein Programm mit Redundanz, Aufgabe 2, Teil 2

// Returns true if the given number is prime.

public static boolean isPrime(int number) { return countFactors(number) == 2;

}

// Returns the number of factors of the given integer.

public static int countFactors(int number) { int count = 0;

for (int i = 1; i <= number; i++) { if (number % i == 0) {

count

++; // i is a factor of the number

} }

return count;

}

}

112

(46)

Redundanz in Programmen

§ Wir möchten die gemeinsamen Methoden nur einmal schreiben

§ … nur einmal dokumentieren

§ ... nur einmal testen

§ ... (später) nur einmal verändern (falls nötig)

§ Klassen geben uns die Möglichkeit gemeinsames Verhalten (von Objekten) zusammenzufassen.

113

(47)

Klassen als Module

§ Modul: wiederverwendbare Software, in einer Klasse abgelegt.

§ Beispiele von Modulen (Klassen): Math, Arrays, System

§ Legen wir die gemeinsamen Methoden in einer Klasse Factors ab

114

(48)

Klassen als Module

// This class is a module that contains useful methods // related to factors and prime numbers.

public class Factors {

// Returns the number of factors of the given integer.

public static int countFactors(int number) { int count = 0;

for (int i = 1; i <= number; i++) { if (number % i == 0) {

count++; // i is a factor of the number }

}

return count;

}

115

(49)

Klassen als Module

// Returns true if the given number is prime.

public static boolean isPrime(int number) { return countFactors(number) == 2;

}

} // Factors

116

(50)

Module

§ Ein Modul ist Teil eines Programms, nicht ein vollständiges (ausführbares) Programm.

§ Es gibt keine main Methode. Der Code kann nicht direkt ausgeführt werden..

§ Module sollen von Klienten Programmen (bzw. Klienten Klassen) verwendet werden.

§ Syntax:

class.method(parameters);

§ Beispiel: int factorsOf24 = Factors.countFactors(24);

117

(51)

static Variable und Methoden

§ static : ist Teil einer Klasse, nicht Teil (Attribut) eines Objektes.

§ Klassen können static Methoden und Variable ("fields") haben.

§ Eine static Variable existiert nur einmal – Methoden aller Exemplare der Klasse können auf diese zugreifen

§ Eine static Variable wird nicht (wie ein Attribut) für jedes Objekt geschaffen.

§ static Variable und Methoden sollten die Ausnahme sein

§ Im "Normalfall" verwenden wir Objektattribute

118

(52)

119

class C state:

private static int staticFieldA private static String staticFieldB private int field1;

private double field2;

behavior:

public static void someStaticMethodC() public static void someStaticMethodD() public void method3()

public int method4()

object #1 state:

int field1 double field2 behavior:

public void method3() public int method4()

object #2 state:

int field1 double field2 behavior:

public void method3() public int method4()

object #3 state:

int field1 double field2 behavior:

public void method3() public int method4()

(53)

120

class C state:

private static int staticFieldA private static String staticFieldB private int field1;

private double field2;

behavior:

public static void someStaticMethodC() public static void someStaticMethodD() public void method3()

public int method4()

object #1 state:

int field1 double field2 behavior:

public void method3() public int method4()

object #2 state:

int field1 double field2 behavior:

public void method3() public int method4()

object #3 state:

int field1 double field2 behavior:

public void method3() public int method4()

Typ "C" – Exemplare mit Zustand und Verhalten

(54)

§ Eine static Methode ist eine Methode für die Klasse

§ Eine static Methode kann ohne eine Referenz auf ein Exemplar aufgerufen werden.

class . method ( parameters );

§ Deshalb haben wir z.B . Arrays.toString(…) oder Math.abs(... ) aufrufen können.

121

(55)

Beispiel, Teil 1

// This program sees whether some interesting numbers are prime.

public class Primes {

public static void main(String[] args) {

int[] nums = {1234517, 859501, 53, 142};

for (int i = 0; i < nums.length; i++) { if (Factors.isPrime(nums[i])) {

System.out.println(nums[i] + " is prime");

} }

} }

122

(56)

Beispiel, Teil 2

// This program prints all prime numbers up to a given maximum.

public class Primes2 {

public static void main(String[] args) {

Scanner console = new Scanner(System.in);

System.out.print("Max number? ");

int max = console.nextInt();

for (int i = 2; i <= max; i++) { if (Factors.isPrime(i)) {

System.out.print(i + " ");

} }

System.out.println();

} }

123

(57)

static Variable

§ static Variable (“field”): Mit der Klasse gespeichert, nicht mit jedem Objektexemplar

§ Alle Methoden einer Klasse können auf eine static Variable zugreifen

§ Gemeinsame ("shared") Variable für alle Exemplare

§ Kann von allen gelesen und modifiziert werden

§ Insbesondere Modifikationen sind kritisch

§ Leicht die Übersicht zu verlieren

§ Vorsicht bei static

124

(58)

Module in Java Bibliotheken

// Java's built-in Math class is a module public class Math {

public static final double PI = 3.14159265358979323846;

...

public static int abs(int a) { if (a >= 0) {

return a;

} else {

return -a;

} }

public static double toDegrees(double radians) { return radians * 180 / PI;

}

}

125

(59)

126

(60)

static Variable

private static type name;

private static type name = value;

oder

static type name;

static type name = value;

§ Beispiel:

private static int theAnswer = 42;

128

(61)

Zugriff auf static Variable

§ Innerhalb der Klasse in der die Variable deklariert wurde:

fieldName // get the value

fieldName = value; // set the value

§ Aus einer anderen Klasse:

ClassName.fieldName // get the value ClassName.fieldName = value; // set the value

129

(62)

Zugriff auf static Variable

§ Im Normalfall sind static Variable private es sei denn sie sind final

§ final: Wert kann nicht geändert warden

§ Damit auf ( static ) Variable in anderen Klassen zugegriffen werden kann müssen diese Variablen public sein

§ Also (in einer Klasse)

public static type name;

public static type name = value ;

§ Keyword public erlaubt überall Zugriff

130

(63)

Zugriff auf static Variable

§ Aus einer anderen Klasse (wenn die Variable public ist):

ClassName . fieldName // get the value ClassName.fieldName = value; // set the value

§ … doch public static sollte final sein!

131

(64)

Übung

§ Erweitern Sie die Klasse Person so, dass jedes neue Objekt eine eindeutige ID für die neue Person erhält

§ Altes Design hatte einen Konstruktor der die ID als Parameter übernahm Person employee1 = new Person("Paula", 123);

Person employee2 = new Person("Erich", 123);

§ Wir wollen jetzt die ID in der Klasse verwalten/zuweisen

132

(65)

public class Person { String name;

int id;

double hourlyRate;

double[] hours;

double[] overtime;

// Constructs a Person with given name and Id public Person(String firstname, int uniqueId) {

name = firstname;

id = uniqueId;

}

// Methods ...

}

134

(66)

public class Person {

private static int uniqueId = 0;

String name;

int id;

double hourlyRate;

double[] hours;

double[] overtime;

// Constructs a Person with given name and assigns ID public Person(String firstname) {

name = firstname;

id = uniqueId++;

}

// Methods ...

}

135

(67)

136

(68)

static Methoden

// das selbe Format das wir zuerst gesehen haben

public static type name ( parameters ) { statements ;

}

§ static Methode: In der Klasse gespeichert.

§ Gemeinsam für alle Exemplare, nicht für jedes Exemplar kopiert.

§ Es gibt keinen impliziten Parameter this

§ Daher kann eine solche Methode nicht auf den Zustand eines Objekts zugreifen, d.h. (Objekt)Attribute können nicht gelesen oder geschrieben

werden.

138

(69)

Übung

§ Erweitern Sie die Klasse Person um eine Methode die die Anzahl der bisher erstellten Person Objekte zurückgibt.

139

(70)

public class Person {

private static int uniqueId = 0;

String name;

int id;

double hourlyRate;

double[] hours;

double[] overtime;

// Constructs a Person with given name and assigns ID public Person(String firstname) {

name = firstname;

id = uniqueId++;

}

// Methods

numberEmployees( ) { }

}

140

(71)

public class Person {

private static int uniqueId = 0;

String name;

int id;

double hourlyRate;

double [] hours;

double [] overtime;

// Constructs a Person with given name and assigns ID public Person(String firstname) {

name = firstname;

id = uniqueId++;

}

// Methods

public static int numberEmployees( ) { return uniqueId;

}

}

141

(72)

Zusammenfassung Java Klassen

§ Eine Klasse kann in einem grossen Software System:

1. Ein Program enthalten

2. Eine Objekt Klasse (d.h. Typ) definieren

3. Ein Modul definieren

(73)

Zusammenfassung Java Klassen

§ Eine Klasse kann in einem grossen Software System:

1. Ein Program enthalten: Hat eine public static main Methode und ggf. andere static Methoden.

§ Normalerweise ohne static Variable (ausser sie sind final)

§ Implementiert einen Service für Benutzer

(74)

Zusammenfassung Java Klassen

§ Eine Klasse kann in einem grossen Software System:

2. Einen Typ definieren: Die Objekt Klasse beschreibt neuen Typ von Objekten (Werte und Verhalten)

§ Deklariert Objektattribute, Konstruktoren, und Methoden

§ Deklariert möglicherweise static Variable oder Methoden, aber diese spielen i.A. eine untergeordnete Rolle

§ Ist abgekapselt ("encapsulated") – alle Attribute und static Variablen sind private

§ Beispiel von Objekt Klassen:

Point, Person, File, Random

(75)

Zusammenfassung Java Klassen

§ Eine Klasse kann in einem grossen Software System:

3. Ein Modul definieren: Wiederverwendbarer Code der durch static Methoden implementiert ist

§ Beispiel: Math, Arrays

147

(76)

Wo stehen wir?

§ Kernkonzepte für einfache Programme

§ if-else, if-else-if

§ Schleifen: for, while, do … while

§ Ausdrücke (einschliesslich Zuweisungen)

§ Änderungen der Ausführungsreihenfolge durch Methodenaufruf

§ Strukturierung in Methoden

§ Parameter

§ Rückgabewerte

148

(77)

Wo stehen wir?

§ Entwurf (einfacher) Klassen

§ Attribute

§ Erste Schritte mit Java System

§ Scanner, Math, File, PrintStream, Random

149

(78)

Wo stehen wir?

§ Deklaration von Variablen eines Basistyps

§ Deklaration von Variablen eines Referenztyps

150

(79)

Wenn Sie mehr lesen wollen

§ (und das sollten Sie …)

§ Lehrbücher

§ Java Dokumentation

151

(80)

152

S. Reges und M. Stepp, Building Java

Programs: A Back to Basics Approach, 4th Edition, Pearson, ISBN 978-0-13-432276-6.

R. Sedgewick und K. Wayne, Einführung in die Programmierung mit Java, 2011,

(Deutsch) ISBN 978-3-86894-0476-3.

(81)

153

R. Sedgewick und K. Wayne, Introduction to Programming in Java: An Interdisciplinary Approach (2nd Edition) , 2017, Addison- Wesley, ISBN 978-0-67-233784-0

S. Reges und M. Stepp, Building Java

Programs: A Back to Basics Approach, 4th

Edition, Pearson, ISBN 978-0-13-432276-6.

(82)

Java Lehrbücher

§ Es gibt viele (in vielen Sprachen)

§ Werfen Sie einen Blick auch in andere Bücher

§ Manche Bücher sind auch online verfügbar

154

(83)

Java Informationen

§ Online gibt es die Sprachbeschreibung sowie die Dokumentation der APIs

§ Wir werden im Laufe des Semesters einige Bibliotheken (und weitere Klassen) kennenlernen

§ Nutzen Sie die online Informationen

155

(84)

156

(85)

252-0027

Einführung in die Programmierung 5.0 Input/Output

Thomas R. Gross

Department Informatik ETH Zürich

157

(86)

Übersicht

§ 5.1 Output in Fenster

§ 5.2 Arbeiten mit Dateien

§ 5.3 Scanner im Einsatz/Beispiele

158

(87)

Input (soweit mit Scanner)

§ Folge von Zeichen die der Scanner liest: Token

§ Input Element

§ Erwartete Zeichen hängen von Methode (z.B. nextDouble()) ab

§ Scanner zerlegt den Inhalt einer File in Tokens

159

(88)

Input Tokens

§ Wenn eine Input File diese Zeichen (Buchstaben) enthält:

23 3.14

"John Smith"

§ Dann kann der Scanner die Tokens als Input verschiedener Typen interpretieren:

Token Type(s)

23 int, double, String

3.14 double, String

"John String

Smith" String

161

(89)

Files und der Input Cursor (Zeiger)

§ Nehmen wir an, eine Datei weather.txt enthält diesen Text:

16.2 23.5

19.1 7.4 22.8

18.5 -1.8 14.9

§ Für den Scanner ist jeder Input eine Folge von Buchstaben:

16.2 23.5\n19.1 7.4 22.8\n\n18.5 -1.8 14.9\n

^

§ ^ ist der input cursor: die augenblickliche Position des Scanners.

162

(90)

Verarbeiten einer Input File

§ Der Scanner identifiziert ein Token

§ Das Token wird gelesen und an den Aufrufer des Scanners abgeliefert

§ Annahme: keine Fehler

§ Dabei wird der Cursor über die gelesenen Buchstaben geführt

§ Wir sagen der Scanner konsumiert das Token

163

(91)

Konsumieren von Input

§ Konsumieren von Tokens: Input lesen und dabei Cursor weiter bewegen

§ Aufruf von nextInt , nextDouble , etc. bewegt den Cursor hinter das aktuelle Token.

16.2 23.5\n19.1 7.4 22.8\n\n18.5 -1.8 14.9\n

^

§ Die Datei wird dabei nicht verändert

164

(92)

Konsumieren von Input, Teil 2

§ Aufruf von nextInt, nextDouble, etc. bewegt den Cursor hinter das aktuelle Token.

16.2 23.5\n19.1 7.4 22.8\n\n18.5 -1.8 14.9\n

^

double d = input.nextDouble(); // 16.2

16.2 23.5\n19.1 7.4 22.8\n\n18.5 -1.8 14.9\n

^

String s = input.next(); // "23.5"

16.2 23.5\n19.1 7.4 22.8\n\n18.5 -1.8 14.9\n

^

165

(93)

File Input Aufgabe

§ Zurück zur File mit Wetter Daten

§ Schreiben Sie ein Programm das den Temperaturunterschied

zwischen zwei aufeinander folgenden Tagen berechnet.

16.2 23.5

19.1 7.4 22.8

18.5 -1.8 14.9

16.2 to 23.5, change = 7.3 23.5 to 19.1, change = -4.4 19.1 to 7.4, change = -11.7 7.4 to 22.8, change = 15.4 22.8 to 18.5, change = -4.3 18.5 to -1.8, change = -20.3 -1.8 to 14.9, change = 16.7166

(94)

File Input Antwort

// Displays changes in temperature from data in an input file.

import java.io.*; // for File import java.util.*; // for Scanner

public class Temperatures {

public static void main(String[] args) throws FileNotFoundException {

Scanner input = new Scanner(new File("weather.txt"));

double prev = input.nextDouble(); // fencepost for (int i = 1; i <= 7; i++) {

double next = input.nextDouble();

System.out.println(prev + " to " + next +

", change = " + (next - prev));

prev = next;

} }

}

167

Referenzen

ÄHNLICHE DOKUMENTE

§ Eine Referenzvariable (“reference type variable”, Variable eines Referenztyps) erlaubt den Zugriff auf einen Array (ein Objekt)..

§ Wir wollen einer Methode erlauben, einen Array (oder ein Objekt) als Parameter zu erhalten ohne dass die.. Arrayelemente kopiert

Eine Programmiersprache sollte es möglichst einfach machen, ein Programm zu lesen. Was ist

§ Variable müssen deklariert sein bevor sie verwendet werden können.

§ Wenn eine Methode einen Parameter erwartet dann muss dieser auch übergeben werden. printPunkte(); // ERROR: parameter value

!  Wenn eine Variable als Operand in einer Zuweisung erscheint dann wird der Array nicht kopiert sondern beide Variable beziehen sich nun (verweisen nun) auf den selben Array..

§ Wenn wir einen String P haben und noch 0 Zeichen (aus dem unverarbeiteten Rest) dazu fügen müssen, dann haben wir ein Teilfolge mit j Zeichen gefunden. § Wir fangen an mit P

3.)  Den  parameterlosen  default  Konstruktor  verwenden  wenn   andere  Konstruktoren  definiert  wurden  und  kein  . parameterloser  Konstruktor