Post on 06-Apr-2015
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/.