Introduction to Programming with Java Presented by RA Waraich (adapted from Slides of BJ Vitins) IVT...

Post on 06-Apr-2015

108 views 0 download

Tags:

Transcript of Introduction to Programming with Java Presented by RA Waraich (adapted from Slides of BJ Vitins) IVT...

Introduction to Programming with Java

Presented by RA Waraich (adapted from Slides of BJ Vitins)

IVTETHZürich

September 2014

2

Übersicht

• Klassen, Methoden, Objekte

• Referenzen

• Datentypen und Konventionen

• Pakete und Zugriffe

• Codebeispiele

3

Objekte

• Sind autonome gekapselte Einheiten eines bestimmten Types

• Haben einen eigenen Zustand (= lokale Variablen)

• Besitzen ein Verhalten (wenn sie aktiviert werden)

• Bieten anderen Objekten eine Dienstleistung an• Durchführung von Berechnungen• Änderungen des lokalen Zustandes• Zurückliefern von Variablenwerten oder

Berechnungsergebnissen• Allgemein: “Reaktion” auf Aufruf einer Methode

Que

lle: M

atte

rn (

2010

)

4

Dynamische Klassen und Referenzen

• Erzeugen von dynamischen Klassen geschieht mit

new x();

• Es wird eine Instanz bzw. Objekt der Klasse x erzeugt und eine Referenz (“Zeiger”) darauf zurückgeliefert

• Am besten die Referenz gleich abspeichern: p1 = new x();

• Referenzen sind implementierungstechnisch Adressen• null gehört zum Wertebereich aller Referenztypen

Que

lle: M

atte

rn (

2010

)

5

Erzeugen von Objekten

public class Bicycle {

// the Bicycle class has three fields

public int gear;

public int speed;

public String marke;

}

class Herstellung {

public static void main (String [] args) {

Bicycle f;

f = new Bicycle ();

f.marke = “Scott”;

System.out.println(f.marke)

}

}

Que

lle: n

ach

Ora

cle

(201

4)

6

Programmstruktur (1)

• Mit “import” werden anderweitig vorhandene Pakete von Klassen verfügbar gemacht.

• Der Klassenkörper enthält • Instanzen und Klassenvariablen• Benannte Konstanten• Klassenbezogene “static” Methoden

• Methoden übernehmen die Rollen von Funktionen• Konstruktoren sind spezielle Methoden

(beim Erzeugen aufgerufen)

import

class A {

}

class B {…}

Konstruktur {}

Method_1{}

Method_1{}

Klassenkörper

Que

lle: M

atte

rn (

2010

)

7

Programmstruktur (2)

• Bei eigenständigen Programmen muss es eine “main” – Methode geben, die so aussieht:

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

• Jede Klasse kann eine (einzige) solche “main” – Methode enthalten. Sie wird ausgeführt, wenn der entsprechende Klassenname beim “java” Kommando Zeile genannt wird.

import

class A {

}

class B {…}

Konstruktur {}

Method_1{}

Method_1{}

Klassenkörper

Que

lle: M

atte

rn (

2010

)

8

Beispiel

class Bicycle { private int cadence = 0; private int speed = 0; private int gear = 1; public String marke;

public Bicycle() {System.out.println("Eine Fahrradinstanz wurde generiert");

}void changeCadence(int newValue) {

cadence = newValue; } void changeGear(int newValue) {

gear = newValue; } void speedUp(int increment) {speed = speed + increment; } void applyBrakes(int decrement) { speed = speed - decrement; } void printStates() { System.out.println("cadence:" + cadence + " speed:" + speed + " gear:" + gear); }

}Que

lle: O

racl

e (2

014)

Attribute von aussen nicht mehr sichtbar

Konstruktor besitzt den Klassennamen und hat kein Rückgabetyp

Für die Veränderung der Variablen braucht es eine Methode

9

Anwendung des Beispiels

class BicycleDemo {

public static void main(String[] args) {

// Create two different bicycle objects

Bicycle bike1 = new Bicycle();

// Invoke methods on those objects bike1.changeCadence(50);

bike1.speedUp(10);

bike1.changeGear(2);

bike1.printStates();

}

}

Que

lle: O

racl

e (2

014)

Konstruktor wird aufgerufen

bike1 ist eine Referenz die auf Bicycle Objekte zeigen kann

Bike1 hat auch fünf Methoden, die aufgerufen werden können

10

Ausgabe von Daten in der Kommandozeile

int i = 461012;

System.out.println("The value of i is:”, i);

Zusätzlich wird danach noch ein Zeilenumbruch erzeugt.

11

Konventionen

• kleingeschrieben:• methoden• variablen

• Grossgeschrieben• Klassen• Konstruktor

• Oft beginnen Methoden mit einem Verb

12

Methoden

public double calculateEnergy (double wingSpan, int numberOfEngines, double length, double grossTons) {

double energy;

//do the calculation here

return energy;

}

ModifierReturn Typ, oder void

Methodenname Notwendige Parameter

Que

lle: O

racl

e (2

014)

13

Methoden

public class DataArtist { ... public void draw(String s) {

... } public void draw(int i) {

... } public void draw(double f) {

... } public void draw(int i, double f) {

... }

}Que

lle: O

racl

e (2

014)

14

Information hiding

• Mit bewusst verfügbaren und unsichtbaren Informationen kann ein Missbrauch der Daten verhindert werden.

• Korrektheit kann von den Klassen selber überprüft werden.

• Dadurch wird eine sichere Codeumgebung gewährleistet.• Es können Schnittstellen definiert werden.• Es können Änderungen im Code erfolgen.

Que

lle: M

atte

rn (

2010

)

15

Inheritance

Que

lle: O

racl

e (2

014)

16

Abstrakte Klassen und Methoden

Que

lle: O

racl

e (2

014)

17

Referenzen

18

Gleichheit

78 23 12a1

a2

78 23 12a3

19

Referenzen und Pointer

Bicycle b,c;

b = new Bicycle ();

c Ø

b

Ø

Que

lle: n

ach

Mat

tern

(20

10)

Marke:Cadence:Händler:

b = null;

c Ø

b Ø

Hätte man vorher c = b ausgeführt:

c

b

Ø

Marke:Cadence:Händler:

Dieses Objekt ist nicht mehr zugreifbar und ab sofort endgültig verloren

Marke:Cadence:Händler:

20

Zuweisen von Referenzen

b = new Bicycle();

c = new Bicycle();

b.marke = “Scott”;

c.marke = “Cannondale”;

b

c

Marke: ScottCadence:Händler:

Marke: CannondaleCadence:Händler:

b = c

b

c

System.out.println(b.marke);

System.out.println(c.marke);

ist beides “Cannondale”.

Marke: ScottCadence:Händler:

Marke: CannondaleCadence:Händler:

21

Gleichheit von Objekten

• Referenzvariablen können auf Gleichheit / Ungleichheit mit “==“ bzw. “!=“ verglichen werden

• p == q ist true genau dann wenn die beiden Referenzvariablen auf dasselbe Objekt zeigen (z.B. nach p = q) oder wenn beide null sind.

• p != q wenn zwei verschiedene Objekte auf die p bzw. Q verweisen, die gleichen Werte haben.

Que

lle: M

atte

rn (

2010

)

22

Ungleichheit von Objekten mit gleichen Variablenwerten

b = new Bicycle();

c = new Bicycle();

b.marke = “Scott”;

c.marke = “Scott”;

b

c

b != c

Marke: ScottCadence: 2Händler:

Marke: ScottCadence: 2Händler:

23

Primitive Datentypen

Datentyp Grösse Wertebereich Beschreibung

boolean JVM-Spezifisch true / false Boolescher

Wahrheitswert

char 16 bit 0 ... 65.535 (z. B. 'A') Unicode-Zeichen (UTF-16)

byte 8 bit -128 ... 127 Ganze Zahl

short 16 bit -32.768 ... 32.767 Ganze Zahl

int 32 bit -2.147.483.648 ... 2.147.483.647 Ganze Zahl

long 64 bit -9.223.372.036.854.775.808 ...

9.223.372.036.854.775.807

Ganze Zahl

float 32 bit +/-1,4E-45 ... +/-3,4E+38 Gleitkommazahl

double 64 bit +/-4,9E-324 ... +/-1,7E+308 Gleitkommazahl

24

Arrays

class ArrayDemo {

public static void main(String[] args) {

// declares an array of integers

int[] anArray;

// allocates memory for 10 integers

anArray = new int[10];

// initialize first element

anArray[0] = 100;

// initialize second element

anArray[1] = 200;

// and so forth

anArray[2] = 300;

}

}

Que

lle: n

ach

Mat

tern

(20

10)

25

Matrizen

• double [][] matrix = new double [4][4];

• matrix[3][0] = 18.309823;

• int[][] matrix2 = {{1,2,3}, {4,5,6}};

• Die Grösse der Matrix / des Arrays wird festgelegt.• Einmal festgelegt kann sie sich aber nicht mehr verändern

Zeilenanzahl Spaltenanzahl

26

if - else

void applyBrakes() {

if (isMoving) {

currentSpeed--;

}

else {

System.err.println("The bicycle has already stopped!");

}

}

27

while

class WhileDemo {

public static void main(String[] args){

int count = 1;

while (count < 11) {

System.out.println("Count is: " + count);

count++;

}

}

}

28

for

class ForDemo {

public static void main(String[] args){

for(int i=1; i < 11; i++){

System.out.println("Count is: " + i);

}

}

}

29

Pakete in Java

30

Pakete in Java

• Paket: Zusammengehörte Menge von Klassen

• Hierarchischer Aufbau: Paket “xyz” im Paket “java” → “java.xyz”

• Klassen und Methoden (sowie Attribute von Klassen) sind ohne weitere Angaben nur im eigenen Paket sichtbar und zugreifbar.

• Konvention: kleingeschriebene Namen• Paketdeklaration immer am Anfang einer Datei, z.B. package

xyz;

Que

lle: n

ach

Mat

tern

(20

10)

31

Zugriff auf Klassen und Methoden

package vehicle;

public class Bicycle {

…void changeCadence(int newValue) {

cadence = newValue; }

}• Bicycle kann auch ausserhalb des Paketes verwendet werden. • changeCadence() kann nur innerhalb des package «vehicle»

verwendet werden.• Ein «private» Modifier erlaubt nur Zugriff innerhalb der Klasse

Bicylce.

Que

lle: n

ach

Mat

tern

(20

10)

32

Literatur

Mattern, F. (2010) Informtik II, Departement Informatik, ETH Zürich, Zürich.

Oracle (2014) The java Tutorials, webpage, URL http://docs.oracle.com/javase/tutorial/.