else

Werbung
•10.06.01
OO-Programmausführung
Die OOP betrachtet eine Programmausführung als ein
System kooperierender Objekte
O1
O3
O2
Speicher
Konzepte objektorientierter
Programmierung
•
•
•
•
Objekte
Klassen
Nachrichten
Kapselung
• Vererbung
• Polymorphismus
Einführung
später!
•1
•10.06.01
OOP: Das Grundmodell
• Objekte haben einen lokalen Zustand
• Objekte empfangen und bearbeiten Nachrichten
Ein Objekt kann
– seinen Zustand ändern,
– Nachrichten an andere Objekte verschicken,
– neue Objekte erzeugen oder existierende Objekte löschen.
• Objekte sind grundsätzlich selbständige Ausführungseinheiten,
die unabhängig voneinander und parallel arbeiten können.
Was ist ein Objekt ?
Ein Objekt ist ein Softwarebündel
aus Variablen und mit diesen
Variablen zusammenhängende
Methoden.
Ein Objekt ist eine konkrete Ausprägung bzw. eine
Instanz einer Klasse.
dynamisch!
•2
•10.06.01
Objekt
Buch
Attribute:
- Eigenschaft 1
- Eigenschaft 2
. . . .
Verhalten:
- Methode 1
- Methode 2
- Methode 3
. . . .
Eigenschaften:
Harry Potter
- Titel
- Autor
- Verlag
. . . . .
J.K. Rowling
Bloomsbury
Verhalten:
- getAutor( )
- getInhaltsverzeichnis ( )
- suche ( Schlüsselwort )
- setTitel( Titel )
- setVerlag( Verlag )
. . .
statisch!
Was ist eine Klasse
?
Eine Klasse ist ein Bauplan,
um Objekte einer bestimmten
Sorte zu erzeugen.
Ohne Klassen gibt es keine Objekte in Java!
Klassen besitzen den Vorzug der Wiederverwendbarkeit.
•3
•10.06.01
Rechteck-Objekte
(x, y)
•
Höhe
Fläche
Umfang
verkleinern
Breite
vergrößern
verschieben
klonen
Klasse
Klasse Rechteck
Rechteck_A
x=0
y=0
höhe = 10
breite = 10
Verkleinern
Fläche
Schieben
x
Equal
y
getX
höhe
Rechteck
getY
breite
Rechteck
Umfang
Koordinaten
Rechteck_B
x=0
y=0
höhe = 10
breite = 10
Rechteck_C
x = 33
y = 45
höhe = 15
breite = 15
•4
•10.06.01
public class Rechteck {
// Attributen
int x;
Klasse Rechteck
int y;
int width;
int height;
// Konstruktoren
public Rechteck() {
x = 0;
y = 0;
width = 10;
public class Main {
height = 10;
}
// Main-Methode
public static void main( String[] args ) {
// Methoden
Rechteck r1 = new Rechteck();
public int umfang() {
Rechteck r2 = new Rechteck();
return 2*(width + height);
int u = r1.umfang();
}
int f = r2.flaeche();
}
public int flaeche() {
} // end of class Main
return (width * height);
}
} // end of class Rechteck
Was sind Nachrichten ?
Methodenaufrufe
-Empfänger
- Name der auszuführenden Methode
- Parameter
B.doSomething( args );
A
B
Attri..1
Attri..3
.......
Attri..1
Attri..3
.......
C.doThis( args );
return 345;
Attri..1
Attri..3
.......
C
•5
•10.06.01
Nachrichten
person1.equal(person2)
Empfänger
Nachricht
Argumente
Achtung!
Bevor ich eine Nachricht zu einem Objekt schicke, muss
dieses Empfängerobjekt im Speicher existieren.
Was ist Kapselung ?
Die Einschränkung des Zugriffs auf die Instanzvariablen eines
Objektes durch Objekte anderer Klassen
Man spricht von einer Kapselung des Objektzustands.
Attribut 1
Attribut 2
usw . . . .
Privater Zustand
Öffentliche Methoden (API)
API Application Programming Interface.
Kapselung schützt so den Objektzustand vor “unsachgemäßer”
Änderung und unterstützt Datenabstraktion.
•6
•10.06.01
Kapselung
Vorteile von Objekten sind ihre Modularität und die Möglichkeit,
Information zu verbergen.
Person
Attributen:
- private Name
- private Vorname
- private Geburtsdatum
. . . . .
Verhalten:
- getName ( )
- getVorname ( )
- setGeburtsdatum( newDatum )
- setName ( newName )
. . .
Argumente
Syntax & Semantik
•
Die Syntax (“Satzbau”) einer Programmiersprache beschreibt,
welche Zeichenfolgen gültige Programme bilden.
• Die Semantik einer Programmiersprache definiert die
genaue “Bedeutung” von Programmen in dieser Sprache.
Natürliche Sprachen
Syntaktisch korrekte sprachliche Äußerungen können
mehrere Bedeutungen haben,
Beispiel
"Er sieht das Mädchen mit dem Fernrohr.”
- syntaktisch korrekt
- aber mehrere Bedeutungen
•7
•10.06.01
Java-Anwendung
Rechteck.java
class Rechteck {
// Feldvariablen
Kreis.java
class Geometrie {
class Kreis {
// Konstruktoren
....
// Konstruktoren
// Methoden
....
// Feldvariablen
// Feldvariablen
....
....
Geometrie .java
....
....
// Konstruktoren
....
// Methoden
....
....
// Methoden
....
....
....
}
}
. . ( . . . . ) {. .}
. . .. . main
start
}
Java-Programme
• Java-Programme bestehen aus einer oder mehreren Klassen
• Eine Klasse ist in der Regel in einer eigenen, gleichnamigen
Datei mit der Endung .java definiert, z. B.
MyFirstProgram.java
• Die Programmausführung beginnt mit der Methode main
einer Klasse.
•8
•10.06.01
Beispiel
/* Ein einfaches aber vollständiges
Java-Programm */
public class MyFirstProgram {
public static void main(String[] args) {
System.out.println( "Es läuft !");
}
} // end of class MyFirstProgram
Java-Programme
Imperative
Programmierung
Objektorientierte
Programmierung
•9
•10.06.01
Imperative Grundbestandteile von Java
Vergessen wir für eine Weile die objektorientierte Verpackung!
Machen wir einen Zoom in den Rumpf einer Methode, wo
die Welt noch schön und sequenziell ist.
1. Was ist eine Variable ?
2. Primitive Datentypen in Java
3. Deklaration von Variablen (OOP)
4. Ausdrücke in Java
5. Die vielen Operatoren von Java
6. Einfache Anweisungen
7. Anweisungen zur Ablaufsteuerung
Literale (explizite Wertangabe)
- Zahlen
-Ganze Zahlen
-Reelle Zahlen
7, -13
0.5, 1.0
- Zeichen
-sichtbar
-unsichtbar
‘a‘, ‘2‘, ‘!‘
‘\n‘ ‘\t‘
- Wahrheitswerte
true,
- Strings (Zeichenketten):
false
"text"
•10
•10.06.01
Primitive Datentypen in Java
Java legt für jeden primitiven Datentyp eine feste Speichergröße
und damit einen festen Zahlenbereich fest.
Typ
byte
short
int
long
float
double
boolean
char
Bits
Zahlenbereich
init.
8
-128 . . . 127
0
16
-32.768 . . 32.767
0
32
-231 . . . 231-1
0
63
63
64
-2 . . . 2 -1
0
32
ca. 3.402*1038 . . 1.402*10-45
0.0
308
-324
64
ca. 1.798*10 . . 4.94*10
0.0
1
true, false
false
16
Unicode
\u0000
Variablen
•
Variablen sind Stellen im Speicher, in denen Werte abgelegt werden
können. Sie sind ausgezeichnet durch Namen, Typ und Wert.
•
Variablen müssen vor der erstmaligen Benutzung deklariert werden.
•
Variablen können fast überall deklariert werden.
Ihr Gültigkeitsbereich erstreckt sich von der Stelle ihrer Deklaration bis
zum Ende des Blocks, in dem sie deklariert wurden.
{
Variablendeklaration
Gültigkeitsbereich bis Ende des Blockes
}
Änderung des Wertes einer Variablen geschieht durch Wertzuweisung ( = ).
•11
•10.06.01
Variablendeklaration
Modifizierer
Datentyp
Name
Wert
int
breite ;
int
hoehe = 10 ;
float
radius = 0.0 ;
Semikolon
public
Strings
private
String
sprache
= "java";
String
name
= "" ;
Namen von Variablen
beginnen immer mit
– einem Buchstaben
– oder ´_´
– keine Sonderzeichen dazwischen
– kein reserviertes java-Wort
a2345, andreas
_zahlen, _100
wie +, =,& usw.
int, boolean, true
Konventionen
Variablennamen werden klein geschrieben
große Buchstaben dazwischen
oder „underlines“ dazwischen
umfang
penColor
pen_color
•12
•10.06.01
Variablen
Instanzvariablen
(Feldvariablen,
Attribute)
Variablen, in denen die Eigenschaften
von Objekten gespeichert werden
Lokale Variablen
Hilfsvariable für Berechnungen,
Lebenszeit: nur solange das Objekt
existiert.
die in den Methoden deklariert werden
Lebenszeit: nur solange die
Methode ausgeführt wird.
Beispiel
public class Time {
// Instanzvariablen oder Eigenschaften
private int hours ;
private int minutes ;
private int seconds ;
public int toSeconds( ) {
// Lokale Variablen
int temp ;
temp = seconds + minutes*60 + hours*3600;
return temp;
}
....
} // Ende der Klassedeklaration
•13
•10.06.01
Erste Klassedeklaration
Kopf
public class Time
{ // Attribute
private int hours ;
private int minutes ;
private int seconds ;
// Konstruktor
public Time( ) {
hours = 0;
minutes = 0;
Rumpf
seconds = 0;
}
.
.
.
Time zeit;
zeit = new Time ();
zeit.setSeconds( 10 );
// Methoden
public void getSeconds( ) {
return seconds;
}
.
.
.
public void setSeconds( int secs ) {
if ( secs>0 || secs<60 )
{ seconds=secs; }
}
} // Ende der Time-Klasse
Weitere Konventionen
Variablennamen
Beginnen mit Kleinbuchstaben
myName
Klassennamen
Beginnen mit Großbuchstaben
Rechteck
Konstanten
nur Großbuchstaben
BLAU
Methoden
Beginnen mit Kleinbuchstaben
setColor ( BLAU )
•14
•10.06.01
Ausdrücke
Ein Ausdruck ist eine Folge von Variablen, Operatoren und
Methodenaufrufen, der zu einem einzelnen Wert ausgewertet
wird.
Ein Ausdruck besteht aus:
Operanden
Variablen
Konstanten
Methodenaufrufe
Operatoren
unäre
binäre
ternäre
Klammern
Rundeklammern ( )
Bestimmen die Reihefolge
der Auswertung
Arithmetische Operatoren
unär
Operator
Zeichen
Beispiel
positives Vorzeichen
negatives Vorzeichen
+
-
+3
-x
binär
Operator
Zeichen
Beispiel
Multiplikation
*
a*b
Division
/
3/ 5
Rest
%
6 % PI
Addition
+
10 + 3
Subtraktion
-
10 - 3
•15
•10.06.01
Die arithmetischen Operationen in Java sind teilweise polymorph
Beispiele
x + a
float
Spezialfall:
float
Ergebnis
double
int
x / a
float
Ergebnis
double
Konkatenation von Strings mit +
"Hallo " + " Leute ! "
Ergebnis
"Hallo Leute ! "
+ Operator mit String
Ist der Operand kein String, wird er implizit konvertiert:
Beispiele:
int x = 30 ;
String hello = "Der Wert von x ist" + x ;
gefährliche Beispiele:
String str1 = "text " + 2 + 3; // "text 23"
String str1 = 2 + 3 + " text "; // "5 text"
String str1 = 2 +( 3 + " text "); // "23 text"
•16
•10.06.01
Vergleichs- und Bedingungsoperatoren
unär
Operator
Zeichen
Beispiel
logische Negation
!
!a
binär
Vergleiche
<,>,<=,>=
a <= b
Gleichheit
==
3 == x
Ungleichheit
!=
min != max
bedingt UND
&&
a && b
bedingt ODER
||
a || b
Beispiele:
boolean w1 = false;
boolean w2, w3;
w2 = !w1;
w1 = 6%3 == 0;
w2 = w1 || w2;
w1 = (6<7) && (7<6);
w3 = w1 != w2;
Die Vergleichsoperatoren können nur mit den primitiven Datentypen
von Java operieren und produzieren immer einen Wahrheitswert.
Die Bedingungsoperatoren operieren nur mit Wahrheitswerten.
•17
•10.06.01
Anweisungen zur Ablaufsteuerung
Einzelne Anweisungen (statements)
werden mit einem Semikolon abgeschlossen:
Anweisungen werden durch geschweifte
Klammern zu Blöcken zusammengefasst:
a = b * c;
{ a = b * r;
x = a + z/a; }
Die Abarbeitungsreihenfolge der Anweisungen verläuft
normalerweise von oben nach unten und von links nach rechts.
Die Anweisungen zur Ablaufsteuerung verändern diese
Reihenfolge der Abarbeitung.
if-else-Anweisung
if ( Ausdruck )
{ Anweisungen }
else
{ Anweisungen }
verzweigt abhängig von einer Bedingung in einen von
zwei Fällen
•18
•10.06.01
if(a < b)
{ max = b;}
else
{ max = a;}
if(count == b)
{ count = 0; }
nextHour()-Methode
der
Time-Klasse
public void nextHour()
{
if ( hours < 23 )
{ hours = hours + 1; }
else
{ hours = 0; }
}
weiter mit if-else-Anweisung
if( punkte >= 90 )
{ note = 1; }
else { if ( punkte >= 80 )
{ note = 2; }
else { if ( punkte >= 70 )
{ note = 3; }
else { if ( punkte >= 60 )
{ note = 4; }
else
{ note = 5;}
}
}
}
•19
•10.06.01
Methoden
• Die Funktionalität einer Klasse von Objekten, bzw. deren
Verhalten wird durch Methoden implementiert.
• Methoden enthalten den ablauffähigen Programmcode.
• Es gibt keine Methoden außerhalb von Klassen.
• Jede Deklaration einer Methode kann eine Folge einzelner
Parameter enthalten, die für die Berechnungen innerhalb der
Methode notwendig sind.
• Methoden dürfen nicht geschachtelt werden.
Deklaration einer Methode
Modifizierer Rückgabetyp Methodenname ( Parameterliste )
{
Methodenrumpf
}
Beispiel:
public void setTime( int h, int m, int s ) {
if ( (s > 59) || (s < 0) || (m > 59) || (m< 0) || (h > 23) || (h < 0) )
{ System.out.println( "Falsche Zeitangabe:"+h+":"+m+":"+s); }
else
{ hours = h;
minutes = m;
seconds = s; }
}
•20
•10.06.01
return-Anweisung
public int fakultaet ( int zahl ) {
int fak = 1;
if ( ( zahl == 0 ) || ( zahl == 1 ) )
return fak ;
else {
while ( zahl > 1 ) {
fak = fak*zahl;
zahl = zahl + 1;
}
return fak ;
}
} // end of factorial
Die return-Anweisung
beendet den Lauf der
Funktion (Methode)
und sorgt für
die Übergabe des
Ergebnis.
return-Anweisung
Die return-Anweisung beendet frühzeitig die Ausführung
einer Methode.
In einer Methode kann es mehrere return-Anweisungen
geben.
Methoden, die als Funktionen definiert sind, d.h. ein
Ergebnis liefern, müssen durch eine return-Anweisung dieses
Ergebnis übergeben.
Wenn eine Methode kein Ergebnis zurückgibt, wird das
Schlüsselwort void als Rückgabetyp verwendet und eine
return-Anweisung ist nicht erforderlich.
•21
•10.06.01
6. Übungsblatt
public class Main {
public static void main( String[] args ) {
ClockFrame cf = new ClockFrame();
Timer clock = new Timer(cf);
clock.start();
}
} // end of class Main
time.nextSecond();
oder
time.previousSecond();
Timer
•22
Herunterladen