IT I - VO 3

Werbung
Organisatorisches
• Folien (u.a.) gibt's auf der
Lva-Homepage zum Download
• Vertretung in den UE
• Neuer Termin Zwischentest
(15.12., 18 bis 20 Uhr)
• Tutorium montags und mittwochs
18.10.2016
IT I - VO 3
1
Wissensüberprüfung
• 16 von 61 Studierenden haben
weniger als 3 Punkte (“negativ”).
• Stoff bisher:
Attribute, Konstruktor,
Methodenaufruf, if
• Mit zunehmendem neuen Stoff
(Schleifen, Vererbung) wird's nicht
leichter.
18.10.2016
IT I - VO 3
2
Wissensüberprüfung
• Wie ruft man set-Methode
public void setBla(int neuerWert)
aus einer Klasse Blabla für ein
Objekt der Klasse Blabla auf?
Blabla dasBlabla = ...;
int a = ...;
dasBlabla.setBla(a);
18.10.2016
IT I - VO 3
3
Wissensüberprüfung
• Der Datentyp der Parameter wird
beim Aufruf einer Methode nicht
wiederholt!
• Vorne steht der Objekt-, nicht der
Klassenname!
18.10.2016
IT I - VO 3
4
Wissensüberprüfung
Weitere Anmerkung:
• Auch parameterlose Methoden
brauchen () !
• == (Vergleich) vs = (Zuweisung)!
• Wenn strukturell nicht klar ist, dass
in jedem Fall return ausgeführt
wird, gibt es Compilerfehler
missing return statement!
18.10.2016
IT I - VO 3
5
Wissensüberprüfung
Weitere Anmerkung:
• Variable können nur verwendet
werden, wenn deklariert bzw. wenn
sie Parameter einer Methode sind.
• Lokale vs. globale Variable
(Gültigkeitsbereich)
18.10.2016
IT I - VO 3
6
Attribute vs. Hilfsvariable
• Attribute stehen für wesentliche
Eigenschaften von Objekten der
Klasse.
• Hilfsvariable sollten möglichst lokal
gespeichert werden (dort, wo sie
zum ersten Mal benötigt werden).
18.10.2016
IT I - VO 3
7
Entwurf von Klassen
• Wie sollen die Klassen für eine
Problemstellung gewählt werden, sodass
die Lösung leicht zu verstehen und zu
verändern ist?
• Merkmale für die Qualität der Lösung:
– Geringes Coupling
– Hohe Cohesion
– Wenig/keine Code duplication
• Vorgehen:
– Responsibility-driven design
– Thinking ahead
– Refactoring
18.10.2016
IT I - VO 3
8
Coupling
• Coupling refers to links between separate
units of a program.
• If two classes depend closely on many
details of each other, we say they are
tightly coupled.
• We aim for loose coupling.
• Loose coupling makes it possible to:
– understand one class without reading others;
– change one class without affecting others.
18.10.2016
IT I - VO 3
9
Cohesion
• Cohesion refers to the number and diversity of
tasks that a single unit is responsible for.
• If each unit is responsible for one single logical
task, we say it has high cohesion.
• We aim for high cohesion.
– A method should be responsible for one and only one
well defined task.
– Classes should represent one single, well defined
entity.
• High cohesion makes it easier to:
– understand what a class or method does,
– use descriptive names,
– reuse classes or methods.
18.10.2016
IT I - VO 3
10
Code duplication
• Code duplication
– is an indicator of bad design,
– makes maintenance harder,
– can lead to introduction of errors
during maintenance.
18.10.2016
IT I - VO 3
11
Responsibility-driven
design
• Question: where should we add a
new method (to which class)?
• Each class should be responsible for
manipulating its own data.
• The class that owns the data should
be responsible for processing it.
• RDD leads to low coupling.
18.10.2016
IT I - VO 3
12
Thinking ahead
• When designing a class, we try to
think what changes are likely to be
made in the future.
• We aim to make those changes
easy.
18.10.2016
IT I - VO 3
13
Refactoring
• When classes are maintained, often
code is added.
• Classes and methods tend to
become longer.
• Every now and then, classes and
methods should be refactored to
maintain cohesion and low coupling.
18.10.2016
IT I - VO 3
14
Refactoring and testing
• When refactoring code, separate the
refactoring from making other
changes.
• First do the refactoring only, without
changing the functionality.
• Test before and after refactoring to
ensure that nothing was broken.
18.10.2016
IT I - VO 3
15
Summary
• Quality of code requires much more than
just performing correct at one time.
• Code must be understandable and
maintainable.
• Good quality code avoids duplication,
displays high cohesion, low coupling.
• Coding style (commenting, naming, etc.)
is also important.
• There is a big difference in the amount of
work required to change poorly
structured and well structured code.
18.10.2016
IT I - VO 3
16
Arrays in Java
• Arrays sind eine Möglichkeit, um mehrere
gleichartige Daten zu verwalten.
• Ein Array stellt eine Liste fixer Größe dar, wobei
die Listenelemente von beliebigem Datentyp
sein können.
• Alle Elemente eines Arrays haben aber
denselben Datentyp.
• Arrays in Java sind eine spezielle Objektart.
• Bei der Erzeugung eines Array-Objekts wird
seine Größe (=Anzahl der Elemente) festgelegt.
• Zum Programmieren mit Arrays gibt es eine
spezielle Notation.
18.10.2016
IT I - VO 3
17
Definition einer
Array-Variablen
Datentyp[] variablenname;
Z.B.:
int[] a;
Auto[] fuhrpark;
• Die Elemente eines Arrays können von
primitiven oder nicht-primitiven Datentyp sein.
• Bei einem nicht-primitiven Datentyp sind die
Elemente des Arrays nicht die Objekte selbst,
sondern Objekt-Referenzen.
18.10.2016
IT I - VO 3
18
Erzeugen eines Array-Objekts
new Datentyp[Größe]
Z.B.:
int[] zahlenliste;
zahlenliste = new int[24];
int n = 100;
Auto[] fuhrpark = new Auto[n];
• Der Aufruf des Konstruktors erzeugt ein
Array-Objekt der angegebenen Größe mit dem
angegebenen Datentyp.
• Die Elemente des Arrays werden mit
Default-Werten initialisiert:
– Objekt-Referenzen werden auf null gesetzt.
– int-, long-, double-Werte werden auf 0 gesetzt.
– boolean-Werte werden auf false gesetzt.
18.10.2016
IT I - VO 3
19
Zugriff auf ein Array-Objekt
• Auf die Elemente eines Arrays kann mit Hilfe ihrer
Nummer zu gegriffen werden:
int[] a = new int[10];
a[5] = 13;
a[6] = 2*a[5];
• In Java sind die Array-Elemente mit 0 beginnend
nummeriert, also 0,1,2,…
• Auf die Größe eines Arrays kann mit
<Array-Variable>.length
zugegriffen werden (z.B. a.length).
• Das letzte Element eines Arrays a hat also den Index
(a.length - 1).
18.10.2016
IT I - VO 3
20
Die while-Schleife in Java
while(Bedingung) {
Anweisungsblock
}
• Die Bedingung ist ein Ausdruck, der true oder
false liefert.
• Der Anweisungsblock der while-Schleife wird
ausgeführt, wenn vor Ausführung des
Anweisungsblocks die <Bedingung> true liefert.
• Nach Ende des Anweisungsblocks wird die
<Bedingung> erneut überprüft, und der
Anweisungsblock nochmals ausgeführt, wenn
die Bedingung true ist.
• Das wiederholt sich, bis die Bedingung false ist.
18.10.2016
IT I - VO 3
21
Die do-while-Schleife in
Java
do{
Anweisungsblock
}while(Bedingung)
• Funktionsweise wie while-Schleife.
• Läuft aber mindestens einmal durch,
weil Überprüfung erst am Ende.
18.10.2016
IT I - VO 3
22
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
23
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
18.10.2016
IT I - VO 3
24
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?
18.10.2016
IT I - VO 3
25
Information Hiding
• Die Klassen-Dokumentation enthält keine
Implementierungsdetails:
– Attribute und Methoden, die private sind.
– Die Implementierung der Methoden.
18.10.2016
IT I - VO 3
26
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!)
18.10.2016
IT I - VO 3
27
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.
18.10.2016
IT I - VO 3
28
Strings in Java
• Strings sind Objekte der Klasse String im
package java.lang.
• Die Klassen von java.lang sind die einzigen
Klassen, die automatisch importiert werden.
• 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.
– Vergleich von Strings mit Methode equals.
18.10.2016
IT I - VO 3
29
Datentyp char
• char ist einer der primitiven Datentypen.
• In Variable vom Typ char kann man ein
einzelnes Zeichen speichern.
Beispiel:
char x = 'u';
• Umwandlung in String funktioniert analog zu
int:
String s = “” + x;
18.10.2016
IT I - VO 3
30
switch
• Mit switch können mehr als zwei Fälle abgefragt
werden (Alternative zu stark verzweigtem if).
Beispiel:
String farbe = einZuckerl.getFarbe();
boolean gefaelltMir;
switch(farbe)
{
case “rot”:
gefaelltMir = false;
break;
case “orange”: gefaelltMir = true;
break;
…
default:
gefaelltMir = false;
}
18.10.2016
IT I - VO 3
31
Herunterladen