IT I - VO 4

Werbung
IT I: Heute
• Nachbetrachtung
Wissensüberprüfung
• Java Klassen verwenden
• Wrapper Klassen
• Speicher und Adressen
• Unit Test
• Projekt Scheduling?
25.10.2016
IT I - VO 4
1
Feedback
Feedback zu folgenden Themen?
• Kaffeemaschine
• Skript
• Vertretung
• Tutorium
25.10.2016
IT I - VO 4
2
Nachbetrachtung
Wissensüberprüfung
• Wieviele Elemente in liste werden
betrachtet?
for(Blabla b:liste){
if(b.hatEigenschaft())
return true;
else
return false;
}
25.10.2016
IT I - VO 4
3
Nachbetrachtung
Wissensüberprüfung
• Wieviele Elemente in liste werden
betrachtet?
for(Blabla b:liste){
if(b.hatEigenschaft())
{
return true;
}
return false;
}
25.10.2016
IT I - VO 4
4
Nachbetrachtung
Wissensüberprüfung
• Konstruktoren:
erschaffen Objekt, indem Attribute
gesetzt werden
• Dazu gibt's mehrere Möglichkeiten:
- Attribut auf Parameterwert setzen
- Attribut auf fixen Wert setzen
25.10.2016
IT I - VO 4
5
Nachbetrachtung
Wissensüberprüfung
• Konstruktoren:
erschaffen Objekt, indem Attribute
gesetzt werden
• Typischwerweise:
Hat der Konstruktor Parameter, so
werden entsprechende Attribute auf
Parameter gesetzt:
this.blablabla = blablabla;
25.10.2016
IT I - VO 4
6
Nachbetrachtung
Wissensüberprüfung
• Konstruktor von ArrayList:
Aufruf von
new ArrayList<Typ>()
erschafft leere Liste:
{}
(nicht null!)
• Aufruf des Konstruktors ist nötig,
bevor mit Methode add Elemente
hinzugefügt werden können.
25.10.2016
IT I - VO 4
7
Nachbetrachtung
Wissensüberprüfung
• Konstruktor mit ArrayList-Parameter
public Blabla(ArrayList<Typ> liste)
{
this.liste = liste;
}
• Das funktioniert nur, wenn es
entsprechendes Attribut liste gibt!
25.10.2016
IT I - VO 4
8
Nachbetrachtung
Wissensüberprüfung
• Was passiert hier?
public Blabla(ArrayList<Typ> liste)
{
this.liste = newArrayList<Typ>();
this.liste = liste;
}
25.10.2016
IT I - VO 4
9
Nachbetrachtung
Wissensüberprüfung
• Initialisierung der Liste ist unnötig:
public Blabla(ArrayList<Typ> liste)
{
this.liste = new ArrayList<Typ>();
this.liste = liste;
}
• Attribut wird ohnehin gesetzt.
25.10.2016
IT I - VO 4
10
Nachbetrachtung
Wissensüberprüfung
• Was passiert hier?
public Blabla(ArrayList<Typ> liste)
{
liste = new ArrayList<Typ>();
this.liste = liste;
}
25.10.2016
IT I - VO 4
11
Nachbetrachtung
Wissensüberprüfung
• Noch schlechter:
public Blabla(ArrayList<Typ> liste)
{
liste = new ArrayList<Typ>();
this.liste = liste;
}
• Überschreibt Parameter, bevor
Attribut auf Parameterwert gesetzt.
25.10.2016
IT I - VO 4
12
Nachbetrachtung
Wissensüberprüfung
• Was passiert hier?
public Blabla(ArrayList<Typ> liste)
{
this.liste =
new ArrayList<Typ>();
}
25.10.2016
IT I - VO 4
13
Nachbetrachtung
Wissensüberprüfung
• Noch schlechter:
public Blabla(ArrayList<Typ> liste)
{
this.liste =
new ArrayList<Typ>();
}
• Initialisiert Attribut,
Parameter nicht verwendet.
25.10.2016
IT I - VO 4
14
Nachbetrachtung
Wissensüberprüfung
• Was passiert hier?
public Blabla(ArrayList<Typ> liste)
{
ArrayList<Typ> liste =
new ArrayList<Typ>();
}
25.10.2016
IT I - VO 4
15
Nachbetrachtung
Wissensüberprüfung
• Noch schlechter:
public Blabla(ArrayList<Typ> liste)
{
ArrayList<Typ> liste =
new ArrayList<Typ>();
}
• Kompiliert nicht, weil Variable liste
bereits existiert.
25.10.2016
IT I - VO 4
16
Aufruf von
Objektmethoden
• Gegeben Klasse Wusch mit Methode
void flitz(String derString).
• Richtiger Aufruf für Wusch-Objekt
derWusch:
derWusch.flitz(einString),
wobei einString ein beliebiger String
ist.
25.10.2016
IT I - VO 4
17
Aufruf von
Objektmethoden
• Überprüfen Sie bei jedem Methodenaufruf
objekt.methode(parameter)
- Wurde objekt initialisiert?
- Gibt's die Methode in der Klasse von objekt?
- Stimmen die Parameter (Anzahl und Typ)?
- Wenn die Methode einen Rückgabewert hat:
Wird der Rückgabewert einer Variable vom
richtigen Typ zugewiesen bzw. passend
verwendet?
25.10.2016
IT I - VO 4
18
Aufruf von
Objektmethoden
• Beispiel:
Krass trara = new Krass(true);
if(trara.bumbum(7,”autsch”))
String x = trara.peng();
• Gibt's Konstruktor in Krass, der boolean als
Parameter nimmt?
• Wurde trara initialisiert?
• Gibt's Methode bumbum() in Krass, die int und
String als Parameter nimmt?
• Hat Methode bumbum() Rückgabewert boolean?
• Gibt's parameterlose Methode peng() in Krass
mit Rückgabewert String?
25.10.2016
IT I - VO 4
19
Aufruf von
Objektmethoden
• Weiteres Beispiel:
ArrayList<Blub> liste = getList();
int x = liste.get(i).drown(-5).haha();
• Gibt's Methode getList() in aktueller Klasse, die
ArrayList von Blub-Objekten zurückgibt?
• Ist i ein int? Wurde i initialisiert?
• Gibt's Methode drown() in Klasse Blub, die
einen numerischen Wert (int, double oder float)
als Parameter nimmt?
• Gibt's in der Klasse, die die Methode drown() als
Rückgabewert hat eine parameterlose Methode
haha(), die einen int zurückgibt?
25.10.2016
IT I - VO 4
20
Klammern sparen
• Geschwungene Klammern können weggelassen
werden, wenn sie nur ein Statement enthalten:
if(i==j)
a++;
else
a--;
oder
for(int i=0; i<10; i++)
for(int j=10; j>0; j--)
System.out.println(i+j);
25.10.2016
IT I - VO 4
21
Vordefinierte Java-Klassen
• Klassen-Bibliotheken
– Sammlungen von nützlichen Klassen, die
nicht selbst programmiert werden müssen.
– In Java sind diese in packages organisiert.
– Für die Java-Programmierung muss man
einige wichtige dieser Klassen kennen.
– Man muss die Klassen-Dokumentation (Class
API) lesen können, um sich über weiter
Klassen informieren zu können.
– API: Applications Programmers Interface
25.10.2016
IT I - VO 4
22
Lesen der
Klassen-Dokumentation
• Die Dokumentation beschreibt in der
Regel nur die Verwendung der Klassen,
nicht wie die Klassen implementiert sind.
• Die Dokumentation liegt in HTML-Format
vor.
• Eine Klassen-Dokumentation enthält:
– Name der Klasse
– Allgemeine Beschreibung der Klasse
– Liste der Konstruktoren und Methoden mit
Parametern und Rückgabewerten
– Eine Beschreibung für jeden Konstruktor und
jede Methode:
• Was bewirkt der Konstruktor oder die Methode?
25.10.2016
IT I - VO 4
23
Information Hiding
• Die Klassen-Dokumentation enthält keine
Implementierungsdetails:
– Attribute und Methoden, die private sind.
– Die Implementierung der Methoden.
25.10.2016
IT I - VO 4
24
Verwendung von
Bibliotheksklassen
• Klassen aus einem Java package müssen
importiert werden, und können dann wie eine
Klasse des eigenen Projektes/Paketes
verwendet werden:
import <Paketname>.<Klassenname>;
• Z.B.:
import java.util.Random;
Dabei ist java.util das Paket, das die Klasse
Random enthält. (Diese Klasse ist für aktuelle
Übungsaufgaben nützlich!)
25.10.2016
IT I - VO 4
25
Die Klasse Random
• Die Klasse Random stellt verschiedene
Methoden zur Erzeugung von Zufallszahlen zur
Verfügung.
• Mit Konstruktor
new Random()
wird ein Zufallszahlengenerator erstellt.
• Mit Methoden
double nextDouble()
int nextInt()
...
werden dann Zufallszahlen erzeugt.
25.10.2016
IT I - VO 4
26
Strings in Java
• Strings sind Objekte der Klasse String im
package java.lang.
• Die Klassen von java.lang sind die einzigen
Klassen, die nicht explizit importiert werden
müssen.
• Vergleich von Strings mit Methode equals
• Besondere Syntax für Strings:
– Automatisches Erzeugen eines String-Objektes durch
Angabe eine Zeichenkette, z.B. "abc".
– Zusammenfügen von Strings durch den Operator +,
z.B. string1 + "abc".
– Datentypen werden automatisch in Strings
umgewandelt, wenn das nötig ist, z.B. "" + 17.
25.10.2016
IT I - VO 4
27
Statische Methoden
• Statische Methoden werden mit dem Wort static
gekennzeichnet, z.B.
public static double sqrt(double a)
• Der Aufruf einer statischen Methode ist an kein
Objekt gebunden und erfolgt über den
Klassennamen, z.B.
Math.sqrt(x*x+y*y);
• Da eine statische Methode nicht an ein Objekt
gebunden ist, kann eine solche Methode auch
nicht unmittelbar auf Objekt-Attribute zugreifen.
25.10.2016
IT I - VO 4
28
Die Klasse Math
• Die Klasse Math in java.lang stellt
ausschließlich statische Methoden
zur Verfügung, die mathematische
Funktionen berechnen.
25.10.2016
IT I - VO 4
29
Statische Attribute
Klassenattribute
• Auch Attribute können statisch (static)
sein.
• Solche Attribute sind nicht einem Objekt
sondern der Klasse zugeordnet.
• Statische Attribute können auch public
oder private sein.
• Auf statische Attribute wird über den
Klassennamen zugegriffen, z.B.
System.out.
• Für die eigene Programmierung haben
statische Attribute nur als Konstanten
eine wichtige Bedeutung.
25.10.2016
IT I - VO 4
30
System.out
• In der Klasse System ist out ein
statisches Attribut vom Datentyp
PrintStream (aus java.util), das public
ist.
public static PrintStream out;
• System ist eine Klasse in java.lang.
• Mit System.out stehen über
Objektmethoden der Klasse PrintStream
einfache Ausgabemöglichkeiten zur
Verfügung.
25.10.2016
IT I - VO 4
31
Konstanten (1)
• Konstanten werden verwendet, um Werten
einen Namen zu geben.
• Dadurch werden Programme leichter lesbar und
leichter veränderbar.
• Die Verwendung von Konstanten ist sehr
empfehlenswert!
• Beispiel: Konstante für die Kapazität des LKW.
• Konstanten sind Attribute, die mit der
Bezeichnung final versehen werden.
• Die Bezeichnung final bedeutet, dass der Wert
des Attributs nicht verändert werden kann, also
konstant ist.
• Weiters sind Konstanten meist statisch, da sich
ihr Wert nicht auf ein einzelnes Objekt bezieht.
25.10.2016
IT I - VO 4
32
Konstanten (2)
• Beispiel:
private static final int LKW_KAPAZITAET = 100;
• Eine Konstante hat immer einen Datentyp und
kann auch public oder private sein.
• Java-Konvention:
– Konstantennamen werden mit Blockbuchstaben
geschrieben, wobei Wort zur besseren Lesbarkeit
durch "_" getrennt werden.
• In der Klasse Math ist z.B. die Konstante
public static final double PI = 3.14…
definiert, auf die mit Math.PI zugegriffen
werden kann.
25.10.2016
IT I - VO 4
33
Die Objekt-Referenz this
• Auf das Objekt, dessen Methode
gerade ausgeführt wird, kann mit
this zugegriffen werden.
• In einem Konstruktor bezeichnet
this das Objekt, das gerade erzeugt
wird.
• Auf Attribute kann eindeutig mit
this.attributname zugegriffen
werden.
18.10.2016
IT I - VO 3
34
Wrapper classes
• Primitive types (int, long, double, …) are
not objects.
• They must be wrapped into an object to
be put into an ArrayList.
• Wrapper classes exist for all primitive
types:
primitive type
int
long
double
...
25.10.2016
IT I - VO 4
wrapper class
Integer
Long
Double
...
35
Autoboxing und Unboxing
• Die Konvertierung von primitiven
Datentypen und Objekten der
Wrapper-Klassen erfolgt in Java (fast
immer) automatisch.
// Integer n = new Integer(42);
Integer n = 42;
// int i = n.intValue();
int i = n;
25.10.2016
IT I - VO 4
36
Autoboxing and unboxing
private ArrayList<Integer> markList;
…
public void storeMark(int mark)
{
markList.add(mark);
}
autoboxing
int firstMark = markList.remove(0);
25.10.2016
IT I - VO 4
unboxing
37
Spezialfall zum
Autoboxing & Unboxing
private ArrayList<Integer> list;
void storeIntegers(){
list.add(42);
list.add(43);
}
void removeAndPrint(){
list.remove(1);
for(Integer i : list){
System.out.println(i);
}
}
25.10.2016
IT I - VO 4
38
Weitere Eigenschaften von
Wrapper-Klassen
• Wrapper-Klassen stellen weitere
Funktionalitäten bereit:
– Enthalten Konstanten
– static Methoden zur Konvertierung, ...
Integer.MAX_VALUE = 231-1
Integer.MIN_VALUE = -231
Double.MAX_VALUE = (2-2-52)·21023
Double.MIN_VALUE = 2-1074
Double.POSITIVE_INFINITY
Double.NEGATIVE_INFINITY
25.10.2016
IT I - VO 4
39
Hardware
• Eingabegeräte: Tastatur, Maus, …
• Ausgabegeräte: Bildschirm, Drucker, …
• Prozessor (CPU): Evt. multi-core, …
– Führt die durch ein Programm festgelegten Schritte
aus.
• Hauptspeicher (RAM)
– Beinhaltet die Daten (und die Programmschritte) die
für die Programmausführung unmittelbar benötigt
werden.
• Externer Speicher: Festplatte, …
– Kann sehr große Datenmengen aufnehmen und
permanent speichern.
25.10.2016
IT I - VO 4
40
Software
• Anwendungsprogramme
– Powerpoint, selbstgeschriebene Programme,
…
• Betriebssystem (Windows, Linux, MacOS)
– Stellt die Basisfunktionen des Computers und
seiner Komponenten zur Verfügung:
•
•
•
•
•
Eingabe
Ausgabe
Zugriffe auf den Haupt- und externen Speicher
Programmstart
…
– In Java stehen diese Basisfunktionen z.B.
über Methodenaufrufe zur Verfügung.
25.10.2016
IT I - VO 4
41
Der Prozessor
• Gängige Prozessoren verstehen nur relativ
einfache Programmschritte:
–
–
–
–
Hole die Daten X aus dem Hauptspeicher
Führe die arithmetische Operation Y aus
Schreibe die Daten in den Hauptspeicher
Wenn das Ergebnis größer als 0 ist, mache an der
Stelle Z des Programms weiter
• Ein Programm in einer höheren
Programmiersprache (wie z.B. Java) muss in
solch einfache Programmschritte umgewandelt
werden.
25.10.2016
IT I - VO 4
42
Compiler
• Um ein Programm in einer höheren
Programmiersprache (z.B. Java) auf einem
Computer auszuführen, wird das Programm in
eine computergerechte Form umgewandelt.
– Komplizierte Anweisungen werden in einfache
Instruktionen für den Prozessor umgewandelt.
– Speicheradressen für Objekte, Attribute, Variablen, …
werden festgelegt.
– Die Werte von Datentypen werden in eine
Binärdarstellung umgewandelt.
• Diese Aufgabe erledigt im wesentlichen der
Compiler.
25.10.2016
IT I - VO 4
43
Speicher und Adressen
• Um Daten im Speicher (Haupt- oder externer
Speicher) abzulegen, muss der genaue Platz im
Speicher, die Adresse, angegeben werden.
• Ebenso muss beim Lesen von Daten aus dem
Speicher die die Adresse angegeben werden.
• In einer höheren Programmiersprache wie Java
werden Adressen meist nicht explizit
angegeben, sondern es werden Variablen- ,
Parameter- und Attributnamen verwendet.
• Diese werden automatisch in die richtigen
Speicheradressen übersetzt.
25.10.2016
IT I - VO 4
44
Speicher und Adressen
• Von jedem Java-Objekt sind die
Datentypen seiner Attribute bekannt.
• Daher kann der Speicherplatzbedarf
berechnet werden.
• Wenn ein neues Objekt angelegt wird,
wird dieser Speicherplatz (an irgendeiner
Stelle des Hauptspeichers) reserviert.
• Der Konstruktor initialisiert dann die
Attributwerte des Objektes.
25.10.2016
IT I - VO 4
45
Primitive vs. Object Types
- Objekt-Referenzen werden verwendet, wenn ein Attribut
(oder lokale Variable) keinen primitiven Datentyp, sondern
ein Objekt bezeichnet.
- Der Wert des Attributs ist dann nicht das Objekt selbst,
sondern eine Referenz auf das Objekt („welches Objekt ist
gemeint?“).
Das hat insbesondere Auswirkungen beim Zuweisen von
Objekten (eigentlich Objekt-Referenzen) und dem Kopieren
von Objekten.
- Nur Attribute (und Variablen) von einem
primitiven Datentyp enthalten den
entsprechenden Wert.
- Alle Attribute von anderem Datentyp
enthalten als Wert nur Objekt-Referenzen.
25.10.2016
IT I - VO 4
46
Primitive types vs.
object types (1)
SomeObject obj;
object type
int i;
primitive type
32
25.10.2016
IT I - VO 4
47
Primitive types vs.
object types (2)
ObjectType a;
ObjectType b;
b = a;
int a;
int b;
32
32
25.10.2016
IT I - VO 4
48
Arrays
25.10.2016
IT I - VO 4
49
Unit Test
• Neben den bisher vorgestellten Möglichkeiten
zum Testen von Programmen, gibt es in Java
eigene Unit Test Klassen.
• Diese erlauben das automatische Anlegen von
Objekten.
• In BlueJ können die in der Unit Test Klasse
angelegten Objekte in die Objektleiste kopiert
werden bzw. umgekehrt.
• Testfälle können durch Objektinteraktion
festgelegt werden.
25.10.2016
IT I - VO 4
50
Herunterladen