1. Grundlegende Datentypen 2. Modellierung

Werbung
Grundwissen 10. Klasse
16.08.2011
1. Grundlegende Datentypen
a) Wichtige Datentypen
ℝ
double
int
ℤ
Wahrheitswerte
boolean
Zeichen
char
Rundungsfehler!
1.42 oder 2E+2
maximal ± 2 Milliarden
2374
true oder false
Unicodezeichen
b) Wichtige Klassen
String
Zeichenketten
'A'
"Hallo, Welt"
Math
Mathematische Funktionen Math.sin( ) Math.cos( ) Math.sqrt( )
Random
Zufallszahlen, Achtung nur ein einziges Objekt erzeugen!
System
Ausgaben an die Konsole, Beenden eines Programms
Grundwissen 10. Klasse
2. Modellierung
a) Warum modelliert man Programme?
• Für die Kommunikation zwischen Entwicklern und dem Kunden
•
Um festzulegen was überhaupt realisiert werden soll
•
Um Fehlentwicklungen zu vermeiden
•
Um Kosten zu sparen
b) UML Unified Modelling Language Diagramme
• Klassendiagramme, Objektdiagramme
•
Zustandsdiagramme
•
Aktivitätsdiagramme (Automaten)
•
Sequenzdiagramme
c) UML Schreibweisen
•
[Voraussetzung]
Voraussetzung/Bedingung die erfüllt sein muss.
•
{Beschränkung}
Einschränkung auf einen Teil der möglichen Werte z.B. radius{>0}.
Grundwissen 10. Klasse
3. Variablen
a) Variablen
Variablen werden deklariert durch
<Typ> <Name>;
Abhängig von der Position wird es ein Attribut (Klassenrumpf) oder eine lokale
Variable (Methodenrumpf). Alle Variablen gelten nur innerhalb der sie umgebenden { }.
b) Zuweisung
Zuweisungen werden mit = durchgeführt. Nicht zu verwechseln mit == welches Vergleichen
bedeutet.
<Ziel> = <Term>
Die Ziel Variable, Attribut wird überschrieben.
Beispiel
a = a + 1;
alternativ a++
a wird um eins erhöht
int i = 0;
Die Variable i wird definiert und gleichzeitig mit einem Wert befüllt.
Grundwissen 10. Klasse
{ Anfang des Methodenrumpfes
4. Methoden
<Ergebnistyp> <Name>( <Parameter> ) {
…
return <Ergebnis> ;
double max( double a, double b) {
if ( b > a ) { return b; }
Methodenrumpf
}
return a;
}
} Ende des Methodenrumpfes
Mit return legt man das Ergebnis der Methode fest und beendet sie.
Gibt es kein Ergebnis so lautet der Ergebnistyp void, in diesem Fall darf return entfallen.
Jede Methode gehört zu einem Objekt, dieses Objekt kann man mit this ansprechen, solange der
Name eindeutig ist darf this weggelassen werden.
Die Methode main ist die erste Methode die in einem Programm ausgeführt wird. Sie lautet immer
public static void main (String[] args) { … }
Beispiel
public static void main(String[] args) {
System.out.println(“Hello World!“);
}
Grundwissen 10. Klasse
5. Umwandlung von Klassendiagrammen zu Java Klassen
+ public
# protected
– private
class Bankkonto {
private long betrag;
private String eigentuemer;
private long dispo;
public long einzahlen(long betrag) { … }
public long abheben(long betrag) { … }
}
Die Methodenrümpfe können dem Klassendiagramm nicht entnommen werden.
Grundwissen 10. Klasse
6. Zustandsdiagramm
Jede Belegung der Attribute eines Objekts kann als Zustand interpretiert werden. Jede Zuweisung
ist ein Übergang zwischen zwei solchen Zuständen.
Beispiel
Ein Ampel hat 4 gültige Zustände. Hierbei werden 4 ungültige Zustände weggelassen.
Das Diagramm erlaubt es übersichtlich darzustellen, wie sich Daten ändern.
Grundwissen 10. Klasse
7. Objektlebenszyklus
a) Objekterzeugung
Objekte werden erzeugt durch den Befehl new.
new Kreis(10, 7, 5);
Es wird ein leeres Objekt erzeugt und der passende Konstruktor aufgerufen.
Kreis(double x, double y, double radius) {
this.x = x;
this.y = y;
this.radius = radius;
}
Konstruktoren erkennt man daran, dass sie keinen Ergebnistyp haben und genauso heißen wie die
Klasse.
b) Garbage Collection
Ein Objekt wird vom Garbage Collector gelöscht, wenn dieser feststellt, dass es keine Referenz
mehr auf dieses gibt. Also es keine Möglichkeit mehr gibt auf das Objekt zuzugreifen.
Es ist in Java nicht möglich Objekte explizit zu zerstören.
Grundwissen 10. Klasse
8. Bedingte Anweisung (if, else)
if ( <Bedingung> ) {
if ( <Bedingung> ) {
…
…
}
} else {
…
}
Die Bedingung muss den Typ boolean liefern. Also true oder false. Möglichkeiten hierfür sind:
Methode
Variable
Vergleiche
Logik
boolean <name>(<parameter>)
boolean <name>
<, <=, ==, >=, >
kleiner, kleiner gleich, gleich, größer gleich, größer
|, &, !
oder, und, nicht
Beispiel
boolean werktag; long betrag;
if (konto.istGedeckt( ) & (betrag < 1000 | werktag) ) { … }
Das Konto muss gedeckt sein und am Wochenende muss der Betrag kleiner als 1000 sein.
Grundwissen 10. Klasse
9. Schleifen (for, while, do while)
for (<Deklaration>; <Bedingung>; <Iteration> ) {
…
}
Es wird in der Deklaration eine
lokale Variable definiert.
Die Bedingung wird am Anfang
jedes Durchgangs geprüft.
- meist in der Form for (int i = <Anfang>; i < <Ende>; i++) { … }
Am Ende jedes Durchgangs wird die
Iteration ausgeführt.
do {
while ( <Bedingung> ) {
…
…
} while ( <Bedingung> );
}
Ist die Bedingung wahr wird der Schleifenrumpf ausgeführt. Die beiden while Schleifen
unterscheiden sich darin, dass do-while das erste mal immer ausgeführt wird.
Beispiel
for (int i = 5; i < 10; i++) {…}
while( i < 10) {…}
do {…} while (i < 10)
5 Schleifendurchgänge für i = 5 bis 9, bei 10 endet die Schleife.
Die Schleife wird ausgeführt solange i < 10 ist.
Die Schleife wird einmal ausgeführt, danach solange i < 10 ist.
Grundwissen 10. Klasse
10.
Felder ( [ ] )
Felder benötigt man wenn man mehrere Objekte der selben Klasse verwalten will.
<Typ>[ ] <name>
double[] werteTabelle
Hierbei darf die Anzahl auch erst zur Laufzeit feststehen, daher muss das Feld wie ein Objekt
erzeugt werden.
<name> = new <Typ>[<Anzahl>]
werteTabelle = new double[100];
Man kann nun die einzelnen Elemente des Feldes wie normale Variablen verwenden.
<name>[<index>]
werteTabelle[0] = 12.5; …
Die Anzahl der Elemente kann über das Attribut length abgefragt werden.
werteTabelle.length
Verwendung in einer Schleife
for ( int i = 0; i < werteTabelle.length; i++) {
System.out.println(werteTabelle[i]);
}
Grundwissen 10. Klasse
11.
Aktivitätsdiagramm / Automaten
Mit Automaten modelliert man die verschiedenen Phasen die ein Algorithmus durchläuft. Im
Unterschied zum Zustandsautomaten wird angegeben, welche Aktion einen Übergang auslöst
(auslösende Aktion) und welche Aktion ausgelöst wird (ausgelöste Aktion).
Beispiel
Eine Stoppuhr läuft
(L), hält (S) oder ist
aus (A).
Um zu vermeiden,
dass man die Uhr
aus Versehen direkt
wieder stoppt, geht
dies erst nach 1sec.
auslösende Aktion [Bedingung] / ausgelöste Aktion
Grundwissen 10. Klasse
12.
Fallunterscheidung (switch, case)
Fallunterscheidungen erlauben es bei Zahlwerten (byte, char, short, int) direkt zu springen ohne
Kaskaden von bedingten Anweisungen (if's) schreiben zu müssen.
switch (<Zahl>) {
switch (phase) {
case 0: //Ei
case <konstante Zahl>:
zeichneEi( );
<Anweisungssequenz>
break;
case 1: //Huhn
break;
zeichneHuhn( );
…
break;
case
2:
//Chicken Nuggets
default:
zeichneNuggets( );
<Anweisungssequenz>
break;
default:
}
zeichneFehler( );
}
Abhängig von der <Zahl> wird zum passenden case gesprungen. Das break beendet den Fall.
default wird angesprungen, wenn es keinen passenden Fall gibt.
Grundwissen 10. Klasse
13.
Design und Programmierung eines Automaten
Der aktuelle Zustand wird in einem Attribut
gespeichert. Jede Aktion wird eine eigene Methode.
Alternativ kann die auslösende Aktion auch als
Parameter übergeben werden, was jedoch eine
zusätzliche Fallunterscheidung notwendig macht.
In der Methode für die auslösende
Aktion, wird zuerst nach dem Zustand
eine Fallunterscheidung gemacht
(if, switch).
Man prüft ob die Bedingung erfüllt ist,
dann wird die Methode die zur
ausgelösten Aktion gehört aufgerufen.
public void knopfStartStop( ) {
switch (zustand) {
case 'L':
if (zeit > 1) {
uhrStoppen( );
zustand = 'S';
}
Und am Ende der neue Zustand
gesetzt.
Hinweis: Buchstaben sind Zahlen
(Unicode!), daher ist switch erlaubt.
break;
case 'S':
uhrStarten( );
zustand = 'L';
break;
}
}
Grundwissen 10. Klasse
14.
Sequenzdiagramm
Um konkrete Aufrufsequenzen darzustellen verwendet man Sequenzdiagramme. Hier steht die
zeitliche Abfolge im Vordergrund.
Der Kopf ist ein Objektdiagramm, welches die Erzeugung
des Objekts markiert (new). Die Lebenslinie stellt die
Existenz dar. Ein Kreuz steht für die Zerstörung des
Objektes. Für jede aktive Methode des Objektes wird ein
Balken über die Lebenslinie gelegt. Welcher beim Aufruf
beginnt und beim Methodenende aufhört. Methodenaufrufe
werden durch Pfeile dargestellt.
Beispiel
class A {
void h( ) {
B b = new B( );
b.f( );
b.g( );
}
}
Grundwissen 10. Klasse
15.
Assoziation
Die Beziehungen zwischen Klassen lassen sich grob in
drei Kategorien aufteilen.
•
Referenz, es werden Objekte der anderen Klasse
verwendet. (Lose Beziehung)
•
Aggregation, es gibt Attribute die Referenzen
auf Objekte der anderen Klasse enthalten. Diese
Objekte können aber noch von anderen Objekten
referenziert sein. (Geteilte Objekte)
•
Komposition, wie Aggregation nur das die
referenzierten Objekte ausschließlich von
diesem Objekt referenziert werden. (Exklusive
Objekte)
Aggregation Referenz
Komposition
Die Zahlen haben die selbe Bedeutung wie beim ER Diagramm (9. Klasse)
Wir kennen bisher drei Arten Attribute. Daten, Zustand, Aggregation/Komposition.
Grundwissen 10. Klasse
16.
Vererbung
Klassen können andere Klassen erben. Hierdurch übernimmt die
Klasse alle Methoden und Attribute der Oberklasse. Die
Unterklasse kann nun neue Methoden definieren oder bestehende
Überlagern. Um explizit auf die Oberklasse zuzugreifen
verwendet man den Bezeichner super (analog zu this).
Methoden können abstrakt sein, dann besitzen sie keinen
Methodenrumpf mehr sonder überlassen dies der Unterklasse.
Eine Klasse die nur abstrakte Methoden besitzt nennt man
Interface (Schnittstelle).
Eine Unterklasse kann wie ihre Oberklasse verwendet werden. Umgekehrt ist dies nicht möglich.
Beispiel
Punkt p = new Kreis( ); // ist erlaubt
Figur f = new Kreis( ); // ist erlaubt
f = p; // wäre in dieser Konstellation zwar richtig muss aber mit einem Cast erzwungen werden
f = (Kreis)p;
Kreis k = new Punkt(); // ist nicht erlaubt
Grundwissen 10. Klasse
17.
Polymorphie
Polymorphie bedeutet, dass beim Methodenaufruf noch nicht feststeht welcher Code ausgeführt
wird. Sobald Vererbung ins Spiel kommt kann jedes Objekt auch ein Objekt einer beliebigen
Unterklasse sein, welche komplett andere Implementationen einer Methode besitzen kann.
Dies erlaubt polymorphe Algorithmen zum Beispiel zum Sortieren. Eine Klasse deren Objekte
sortierbar sein sollen, muss dann lediglich eine Methode kleiner besitzen. Wie diese arbeitet ist für
das Sortieren nicht von Bedeutung.
Beispiel BubbleSort
interface Sortierbar { abstract boolean kleiner(Sortierbar s); }
void bubbleSort(Sortierbar[ ] werte) {
boolean sortiert = false; Sortierbar temp = null;
while (!sortiert) {
for(int i = 1; i < werte.length; i++) {
sortiert = true;
if( werte[i].kleiner(werte[i-1]) ) {
Arrays.swap(werte, i, i-1); sortiert = false;
}
}
}
Grundwissen 10. Klasse
18.
Projektphasen
a) Anforderungsanalyse
Es wird grundsätzlich festgelegt was das Programm machen soll.
Hierfür gibt es viele Möglichkeiten.
•
Handbuch erstellen
•
Use-Cases schreiben. Use-Cases sind kleine Geschichten die beschreiben wie ein
Anwender bestimmte Probleme löst.
•
Zeichnungnen, Texte usw.
b) Systemdesign
Der Aufbau und die Struktur des Programms wird festgelegt. Hierzu verwendet man UML
Diagramme und Texte. Es wird der grobe Aufbau festgelegt.
c) Programmierung
Der Entwurf wird in Programmcode übersetzt.
d) Test
Die Anwendung wird anhand der Anforderungsanalyse getestet.
Software
IDE
integrated development environment
JDK
java development kit
JRE
java runtime environment
Entwurf Dia
http://dia-installer.de/
integrierte Entwicklungsumgebung
Java Entwicklungs Werkzeuge
Java Laufzeitumgebung
Freeware
IDE
Eclipse http://www.eclipse.org/
Freeware
IDE
BlueJ
http://www.bluej.org/
Freeware
JDK
Java
http://www.oracle.com/technetwork/java/javase/downloads
Freeware
Herunterladen