40
Software Entwicklung 1 Annette Bieniusa / Arnd Poetzsch-Heffter AG Softech FB Informatik TU Kaiserslautern

Software Entwicklung 1 - softech.cs.uni-kl.de · 19 System.out.println("UeberlaufbeiAddition"); 20} 21} 22} Bieniusa/Poetzsch-He ter Software Entwicklung 1 28/ 40. Checked und Unchecked

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Software Entwicklung 1 - softech.cs.uni-kl.de · 19 System.out.println("UeberlaufbeiAddition"); 20} 21} 22} Bieniusa/Poetzsch-He ter Software Entwicklung 1 28/ 40. Checked und Unchecked

Software Entwicklung 1

Annette Bieniusa / Arnd Poetzsch-Heffter

AG SoftechFB Informatik

TU Kaiserslautern

Page 2: Software Entwicklung 1 - softech.cs.uni-kl.de · 19 System.out.println("UeberlaufbeiAddition"); 20} 21} 22} Bieniusa/Poetzsch-He ter Software Entwicklung 1 28/ 40. Checked und Unchecked

Subtyping revisited

Bieniusa/Poetzsch-Heffter Software Entwicklung 1 2/ 40

Page 3: Software Entwicklung 1 - softech.cs.uni-kl.de · 19 System.out.println("UeberlaufbeiAddition"); 20} 21} 22} Bieniusa/Poetzsch-He ter Software Entwicklung 1 28/ 40. Checked und Unchecked

Subtyping und Vererbung I

Wir betrachten im Folgenden nochmals den Zusammenhang zwischenSubtypbildung und Vererbung.

Fur Java ist das insbesondere der Zusammenhang von

Schnittstellentypen

Klassentypen

Die Deklaration eines Typs T legt dabei die direkten Supertypen von T fest.

Bieniusa/Poetzsch-Heffter Software Entwicklung 1 3/ 40

Page 4: Software Entwicklung 1 - softech.cs.uni-kl.de · 19 System.out.println("UeberlaufbeiAddition"); 20} 21} 22} Bieniusa/Poetzsch-He ter Software Entwicklung 1 28/ 40. Checked und Unchecked

Subtypbildung in Java: Klassen I

Syntax der Klassendeklaration:

<Modifikatorenliste > class <Klassenname >

[ extends <Klassenname > ]

[ implements <Liste von Schnittstellennamen > ]

{

<Liste von Attribut -,

Konstruktor -,

Methodendeklaration >

}

Eine Klassen erweitert eine direkte Superklasse und implementiert ggf.mehrere Schnittstellentypen.

Bieniusa/Poetzsch-Heffter Software Entwicklung 1 4/ 40

Page 5: Software Entwicklung 1 - softech.cs.uni-kl.de · 19 System.out.println("UeberlaufbeiAddition"); 20} 21} 22} Bieniusa/Poetzsch-He ter Software Entwicklung 1 28/ 40. Checked und Unchecked

Subtypbildung in Java: Klassen II

Gibt es keine extends-Klausel, ist Object die direkte Superklasse.

Andernfalls ist die in der extends-Klausel genannte Klasse die direkteSuperklasse.

Die in der implements-Klausel genannten Schnittstellentypen mussenimplementiert werden.

Die Superklasse und alle implementierten Schnittstellentypen sindSupertypen der deklarierten Klasse.

Bieniusa/Poetzsch-Heffter Software Entwicklung 1 5/ 40

Page 6: Software Entwicklung 1 - softech.cs.uni-kl.de · 19 System.out.println("UeberlaufbeiAddition"); 20} 21} 22} Bieniusa/Poetzsch-He ter Software Entwicklung 1 28/ 40. Checked und Unchecked

Subtypbildung in Java: Interfaces

Syntax der Interface-Deklaration:

<Modifikatorenliste > interface <Schnittstellenname >

[ extends <Liste von Schnittstellennamen > ]

{

<Liste von Konstanten und Methodensignaturen >

}

Bei einer Schnittstellendeklaration gilt Folgendes:

Gibt es keine extends-Klausel, ist Object der einzige Supertyp.

Andernfalls sind die in der extends-Klausel genanntenSchnittstellentypen die direkten Supertypen.

Bieniusa/Poetzsch-Heffter Software Entwicklung 1 6/ 40

Page 7: Software Entwicklung 1 - softech.cs.uni-kl.de · 19 System.out.println("UeberlaufbeiAddition"); 20} 21} 22} Bieniusa/Poetzsch-He ter Software Entwicklung 1 28/ 40. Checked und Unchecked

Substituierbarkeit

Prinzip der Substituierbarkeit (Liskovsches Substitutionsprinzip):

Sei S ≤ T ; dann ist an allen Programmstellen, an denen ein Objekt vom TypT zulassig ist, auch ein Objekt vom Typ S zulassig.

Konsequenzen:

⇒ Subtypobjekte mussen alle Eigenschaften des Supertyps aufweisen.

Bieniusa/Poetzsch-Heffter Software Entwicklung 1 7/ 40

Page 8: Software Entwicklung 1 - softech.cs.uni-kl.de · 19 System.out.println("UeberlaufbeiAddition"); 20} 21} 22} Bieniusa/Poetzsch-He ter Software Entwicklung 1 28/ 40. Checked und Unchecked

Realisierung von Klassifikationen

Die Klassen bzw. Begriffe in einer Klassifikation konnen im Programm durchSchnittstellen- oder Klassentypen realisiert werden.

Wir betrachten die Klassifikation aus Abschnitt 13 bestehend aus:

Person, Printable, Student, Angestellte,WissAngestellte und VerwAngestellte,RegulaererStudent und AustauschStudent.

Bieniusa/Poetzsch-Heffter Software Entwicklung 1 8/ 40

Page 9: Software Entwicklung 1 - softech.cs.uni-kl.de · 19 System.out.println("UeberlaufbeiAddition"); 20} 21} 22} Bieniusa/Poetzsch-He ter Software Entwicklung 1 28/ 40. Checked und Unchecked

Variante 1

Nur die Blatter der Klassifikation (RegulaererStudent, AustauschStudent,

WissAngestellte,VerwAngestellte) werden durch Klassen realisert, alleanderen durch Schnittstellen.

interface Printable {void print();

}

interface Person {String getName ();String getBirthdate ();

}

interface Angestellte extends Person , Printable { ... }interface Student extends Person , Printable { ... }

class WissAngestellte implements Angestellte { ... }class VerwAngestellte implements Angestellte { ... }class RegulaererStudent implements Student { ... }class AustauschStudent implements Student { ... }

Bieniusa/Poetzsch-Heffter Software Entwicklung 1 9/ 40

Page 10: Software Entwicklung 1 - softech.cs.uni-kl.de · 19 System.out.println("UeberlaufbeiAddition"); 20} 21} 22} Bieniusa/Poetzsch-He ter Software Entwicklung 1 28/ 40. Checked und Unchecked

Aufgabe: Visualisieren Sie die entsprechende Typhierarchie!

Bieniusa/Poetzsch-Heffter Software Entwicklung 1 10/ 40

Page 11: Software Entwicklung 1 - softech.cs.uni-kl.de · 19 System.out.println("UeberlaufbeiAddition"); 20} 21} 22} Bieniusa/Poetzsch-He ter Software Entwicklung 1 28/ 40. Checked und Unchecked

2. Variante

Bis auf den Typ Printable realisieren wir alle Typen durch Klassen:

interface Printable { ... }

class Person { ... }

class Student extends Person implements Printable { ... }class Angestellte extends Person implements Printable { ... }

class WissAngestellte extends Angestellte { ... }class VerwAngestellte extends Angestellte { ... }

class RegulaererStudent extends Student { ... }class AustauschStudent extends Student { ... }

Bieniusa/Poetzsch-Heffter Software Entwicklung 1 11/ 40

Page 12: Software Entwicklung 1 - softech.cs.uni-kl.de · 19 System.out.println("UeberlaufbeiAddition"); 20} 21} 22} Bieniusa/Poetzsch-He ter Software Entwicklung 1 28/ 40. Checked und Unchecked

Klassendiagramm zur 2. Variante

Bieniusa/Poetzsch-Heffter Software Entwicklung 1 12/ 40

Page 13: Software Entwicklung 1 - softech.cs.uni-kl.de · 19 System.out.println("UeberlaufbeiAddition"); 20} 21} 22} Bieniusa/Poetzsch-He ter Software Entwicklung 1 28/ 40. Checked und Unchecked

Diskussion

Verwendung von Schnittstellen in Java:

nur wenig uber den Typ bekannt

keine Festlegung von Implementierungsteilen

als Supertyp von Klassen mit mehreren Supertypen

Verwendung von Klassen in Java:

Objekte sollen von dem Typ erzeugt werden

Vererbung an Subtypen soll ermoglicht werden

Bieniusa/Poetzsch-Heffter Software Entwicklung 1 13/ 40

Page 14: Software Entwicklung 1 - softech.cs.uni-kl.de · 19 System.out.println("UeberlaufbeiAddition"); 20} 21} 22} Bieniusa/Poetzsch-He ter Software Entwicklung 1 28/ 40. Checked und Unchecked

Das Quadrat-Rechteck-Problem

Bieniusa/Poetzsch-Heffter Software Entwicklung 1 14/ 40

Page 15: Software Entwicklung 1 - softech.cs.uni-kl.de · 19 System.out.println("UeberlaufbeiAddition"); 20} 21} 22} Bieniusa/Poetzsch-He ter Software Entwicklung 1 28/ 40. Checked und Unchecked

Die Rectangle- und Square-Klasse

class Rectangle extends AFigure {

private double length;

private double width;

...

double area() {

return length * width;

}

}

class Square extends AFigure {

private double length;

...

double area() {

return length * length;

}

}

Bieniusa/Poetzsch-Heffter Software Entwicklung 1 15/ 40

Page 16: Software Entwicklung 1 - softech.cs.uni-kl.de · 19 System.out.println("UeberlaufbeiAddition"); 20} 21} 22} Bieniusa/Poetzsch-He ter Software Entwicklung 1 28/ 40. Checked und Unchecked

Das Quadrat-Rechteck-Problem

Wie sollte die Vererbungs-/Typrelation zwischen diesen beiden Klassenaussehen?

Bieniusa/Poetzsch-Heffter Software Entwicklung 1 16/ 40

Page 17: Software Entwicklung 1 - softech.cs.uni-kl.de · 19 System.out.println("UeberlaufbeiAddition"); 20} 21} 22} Bieniusa/Poetzsch-He ter Software Entwicklung 1 28/ 40. Checked und Unchecked

Variante 1: Square als Superklasse von Rectangle I

class Square extends AFigure {

private double length;

...

double area() {

return length * length;

}

}

class Rectangle extends Square {

private double width;

...

double area() {

return length * width;

}

}

Bieniusa/Poetzsch-Heffter Software Entwicklung 1 17/ 40

Page 18: Software Entwicklung 1 - softech.cs.uni-kl.de · 19 System.out.println("UeberlaufbeiAddition"); 20} 21} 22} Bieniusa/Poetzsch-He ter Software Entwicklung 1 28/ 40. Checked und Unchecked

Variante 1: Square als Superklasse von Rectangle II

Vererbung des length-Attributs moglich

Methoden mussen uberschrieben werden

Ein Rechteck ist aber im allgemeinen kein Quadrat...

Bieniusa/Poetzsch-Heffter Software Entwicklung 1 18/ 40

Page 19: Software Entwicklung 1 - softech.cs.uni-kl.de · 19 System.out.println("UeberlaufbeiAddition"); 20} 21} 22} Bieniusa/Poetzsch-He ter Software Entwicklung 1 28/ 40. Checked und Unchecked

Variante 2: Rectangle als Superklasse von Square I

class Rectangle extends AFigure {

private double length;

private double width;

Rectangle (CartPt loc , double length , double width) {

super(loc);

this.length = length;

this.width = width;

}

double area() {

return length * width;

}

}

class Square extends Rectangle {

Square (CartPt loc , double length) {

super(loc , length , length);

}

}

Bieniusa/Poetzsch-Heffter Software Entwicklung 1 19/ 40

Page 20: Software Entwicklung 1 - softech.cs.uni-kl.de · 19 System.out.println("UeberlaufbeiAddition"); 20} 21} 22} Bieniusa/Poetzsch-He ter Software Entwicklung 1 28/ 40. Checked und Unchecked

Variante 2: Rectangle als Superklasse von Square II

Methoden mussen nicht uberschrieben werden, aber spezialisierteMethoden konnten effizienter sein

Square-Objekte haben nicht verwendbare, unnotige Attribute

Invariante length == width muss fur Square-Objekte immersichergestellt sein!

Bieniusa/Poetzsch-Heffter Software Entwicklung 1 20/ 40

Page 21: Software Entwicklung 1 - softech.cs.uni-kl.de · 19 System.out.println("UeberlaufbeiAddition"); 20} 21} 22} Bieniusa/Poetzsch-He ter Software Entwicklung 1 28/ 40. Checked und Unchecked

Weitere Varianten

Verzicht auf Vererbungsbeziehung

Code-DuplikationKeine Subtyp-Polymorphie anwendbar

Einfuhrung einer zusatzlichen gemeinsamen Superklasse, die dieGemeinsamkeiten abstrahiert

Unnotiges Aufblahen der KlassenhierarchieKeine Subtyp-Polymorphie anwendbar zwischen Quadrat und Rechteck

Bieniusa/Poetzsch-Heffter Software Entwicklung 1 21/ 40

Page 22: Software Entwicklung 1 - softech.cs.uni-kl.de · 19 System.out.println("UeberlaufbeiAddition"); 20} 21} 22} Bieniusa/Poetzsch-He ter Software Entwicklung 1 28/ 40. Checked und Unchecked

Mehrfachvererbung I

Ubernimmt eine Klasse Programmteile von mehreren anderen Klassen sprichtman von Mehrfachvererbung (engl. multiple inheritance).

Object

...

Clickable

enabled : boolean

onClick()

Rectangle

length, width : double

draw()

Button...

Bieniusa/Poetzsch-Heffter Software Entwicklung 1 22/ 40

Page 23: Software Entwicklung 1 - softech.cs.uni-kl.de · 19 System.out.println("UeberlaufbeiAddition"); 20} 21} 22} Bieniusa/Poetzsch-He ter Software Entwicklung 1 28/ 40. Checked und Unchecked

Mehrfachvererbung II

Da in Java (bis Version 1.7) Mehrfachvererbung nicht moglich ist, muss mandie Modellierung durch Einfachvererbung und mehrfache Subtypbildungumsetzen.

Seit Java 8 konnen Interfaces default-Implementierungen von Methodenenthalten. Dadurch kann eine Art von Mehrfachvererbung umgesetzt werden.

Bieniusa/Poetzsch-Heffter Software Entwicklung 1 23/ 40

Page 24: Software Entwicklung 1 - softech.cs.uni-kl.de · 19 System.out.println("UeberlaufbeiAddition"); 20} 21} 22} Bieniusa/Poetzsch-He ter Software Entwicklung 1 28/ 40. Checked und Unchecked

Exceptions

Bieniusa/Poetzsch-Heffter Software Entwicklung 1 24/ 40

Page 25: Software Entwicklung 1 - softech.cs.uni-kl.de · 19 System.out.println("UeberlaufbeiAddition"); 20} 21} 22} Bieniusa/Poetzsch-He ter Software Entwicklung 1 28/ 40. Checked und Unchecked

Objekt-orientierte Ausnahmebehandlung in Java

Ausnahmen werden in Java durch Objekte reprasentiert; d.h. wenn eineAusnahme auftritt, wird ein entsprechendes Ausnahmeobjekt erzeugt.

Ausnahmen konnen entweder sprachdefiniert sein oder durch einethrow-Anweisung ausgelost werden.

Die throw-Anweisung verlangt eine Referenz auf ein Objekt vom TypThrowable.

Bieniusa/Poetzsch-Heffter Software Entwicklung 1 25/ 40

Page 26: Software Entwicklung 1 - softech.cs.uni-kl.de · 19 System.out.println("UeberlaufbeiAddition"); 20} 21} 22} Bieniusa/Poetzsch-He ter Software Entwicklung 1 28/ 40. Checked und Unchecked

Die Klassenhierarchie der Exceptions (Ausschnitt)

Throwable

Error

...

Exception

RuntimeException ...IOException ParseException

NullPointerException ... IndexOutOfBoundsException

ArrayIndexOutOfBoundsException StringIndexOutOfBoundsException

Bieniusa/Poetzsch-Heffter Software Entwicklung 1 26/ 40

Page 27: Software Entwicklung 1 - softech.cs.uni-kl.de · 19 System.out.println("UeberlaufbeiAddition"); 20} 21} 22} Bieniusa/Poetzsch-He ter Software Entwicklung 1 28/ 40. Checked und Unchecked

Klassifizierung von Ausnahmen und Fehlern

Die Klasse Throwable aus dem Packet java.lang ist die Superklasse allerAusnahmen- und Fehlerklassen in Java.

Errors sind schwerwiegende Fehler, die in der Regel nicht vomProgramm abgefangen und behandelt werden sollten.

Exceptions sollten vom Programm abgefangen und geeignet behandeltwerden.

Bieniusa/Poetzsch-Heffter Software Entwicklung 1 27/ 40

Page 28: Software Entwicklung 1 - softech.cs.uni-kl.de · 19 System.out.println("UeberlaufbeiAddition"); 20} 21} 22} Bieniusa/Poetzsch-He ter Software Entwicklung 1 28/ 40. Checked und Unchecked

Beispiel: Ausnahmebehandlung1 public class UeberlaufException extends RuntimeException {}

2

3 public class ExceptionTest {

4 public static void main(String [] args) {

5 try {

6 int ergebnis = 0;

7 int m = Integer.parseInt(args [0]);

8 int n = Integer.parseInt(args [1]);

9 long aux = (long) m + (long) n;

10 if (aux > Integer.MAX_VALUE) {

11 throw new UeberlaufException (); // selbstdefiniert

12 }

13 ergebnis = (int) aux;

14 } catch (IndexOutOfBoundsException e) {

15 System.out.println("Zuwenig Argumente");

16 } catch (NumberFormatException e) {

17 System.out.println("Parameter ist keine int -Konstante");

18 } catch (UeberlaufException e) {

19 System.out.println("Ueberlauf bei Addition");

20 }

21 }

22 }

Bieniusa/Poetzsch-Heffter Software Entwicklung 1 28/ 40

Page 29: Software Entwicklung 1 - softech.cs.uni-kl.de · 19 System.out.println("UeberlaufbeiAddition"); 20} 21} 22} Bieniusa/Poetzsch-He ter Software Entwicklung 1 28/ 40. Checked und Unchecked

Checked und Unchecked Exceptions

In Java zeigt die throws-Klausel in einer Methodensignatur an, dass eineMethode Exceptions auslost bzw. weitergibt, ohne sie selbst abzufangen.

Checked Exceptions mussen, wenn sie in einer Methode geworfenwerden, entweder dort in einem Exception Handler behandelt werden,oder aber in einer throws-Klausel in der Methodensignatur angegebenwerden. Dies wird vom Compiler uberpruft.

Unchecked Exceptions mussen nicht entsprechend deklariert werden.Nur Exceptions vom Typ RuntimeException und Error sind unchecked.

Bieniusa/Poetzsch-Heffter Software Entwicklung 1 29/ 40

Page 30: Software Entwicklung 1 - softech.cs.uni-kl.de · 19 System.out.println("UeberlaufbeiAddition"); 20} 21} 22} Bieniusa/Poetzsch-He ter Software Entwicklung 1 28/ 40. Checked und Unchecked

Beispiel: Checked Exceptions3 public static void main(String [] args) throws Exception {

4 double [] a = {};

5 System.out.println("avg = " + average(a));

6 }

7 static double average(double [] a) throws Exception {

8 checkPreconditions(a);

9 int sum = 0;

10 for (int i = 0; i < a.length; i++) {

11 sum += a[i];

12 }

13 return sum / a.length;

14 }

15 static void checkPreconditions(double [] a) throws Exception {

16 if (a == null) {

17 throw new Exception("Array darf nicht null sein");

18 }

19 if (a.length == 0) {

20 throw new Exception("Array darf nicht leer sein");

21 }

22 }

Bieniusa/Poetzsch-Heffter Software Entwicklung 1 30/ 40

Page 31: Software Entwicklung 1 - softech.cs.uni-kl.de · 19 System.out.println("UeberlaufbeiAddition"); 20} 21} 22} Bieniusa/Poetzsch-He ter Software Entwicklung 1 28/ 40. Checked und Unchecked

Reihenfolge der Exception-Handler

Ein Handler fur Exceptions einer Klasse X behandelt auch Exceptionsaller von X abgeleiteten Klassen (Stichwort: Subtyp-Polymorphie).

Die Reihenfolge der catch-Blocke ist daher relevant bei derAusnahmebehandlung.

Zunachst mussen die Handler fur die am meisten spezialisierten Klassenaufgelistet werden und dann mit zunehmender Generalisierung dieHandler fur die entsprechenden Superklassen. Dies wird vom Compileruberpruft.

Bieniusa/Poetzsch-Heffter Software Entwicklung 1 31/ 40

Page 32: Software Entwicklung 1 - softech.cs.uni-kl.de · 19 System.out.println("UeberlaufbeiAddition"); 20} 21} 22} Bieniusa/Poetzsch-He ter Software Entwicklung 1 28/ 40. Checked und Unchecked

Beispiel: Reihenfolge der Exception-Handler I

3 public class MyException extends Exception {

4 MyException () {

5 super("Ueberlauf bei der Integer -Addition");

6 }

7 }

Der Exception-Konstruktor kann einen String-Parameter nehmen, dereine Beschreibung des Fehlers enthalt.

Die Fehlerbeschreibung kann durch die Methode getMessage() in derFehlerbehandlung ausgelesen werden.

Bieniusa/Poetzsch-Heffter Software Entwicklung 1 32/ 40

Page 33: Software Entwicklung 1 - softech.cs.uni-kl.de · 19 System.out.println("UeberlaufbeiAddition"); 20} 21} 22} Bieniusa/Poetzsch-He ter Software Entwicklung 1 28/ 40. Checked und Unchecked

Beispiel: Reihenfolge der Exception-Handler II

3 public static void main(String [] args) {

4 try {

5 int ergebnis = 0;

6 int m = Integer.parseInt(args [0]);

7 int n = Integer.parseInt(args [1]);

8 long aux = (long) m + (long) n;

9 if (aux > Integer.MAX_VALUE) {

10 throw new MyException (); // selbstdefiniert

11 }

12 ergebnis = (int) aux;

13 } catch (ArrayIndexOutOfBoundsException e) {

14 System.out.println("Zuwenig Argumente");

15 } catch (Exception e) {

16 System.out.println("Ein Fehler ist aufgetreten");

17 e.getMessage ();

18 }

19

20 }

Bieniusa/Poetzsch-Heffter Software Entwicklung 1 33/ 40

Page 34: Software Entwicklung 1 - softech.cs.uni-kl.de · 19 System.out.println("UeberlaufbeiAddition"); 20} 21} 22} Bieniusa/Poetzsch-He ter Software Entwicklung 1 28/ 40. Checked und Unchecked

Klassenattribute und -methoden

Bieniusa/Poetzsch-Heffter Software Entwicklung 1 34/ 40

Page 35: Software Entwicklung 1 - softech.cs.uni-kl.de · 19 System.out.println("UeberlaufbeiAddition"); 20} 21} 22} Bieniusa/Poetzsch-He ter Software Entwicklung 1 28/ 40. Checked und Unchecked

Klassenattribute

Die Deklaration eines Klassenattributs liefert eine klassenlokale Variable.Klassenattribute/-variablen werden haufig auch als statischeAttribute/Variablen bezeichnet.

Syntax:

static <Typausdruck > <Attributname > ;

Die Variable kann innerhalb der Klasse mit dem Attributnamen, außerhalbmittels

<Klassenname > . <Attributname >

angesprochen werden.

Bieniusa/Poetzsch-Heffter Software Entwicklung 1 35/ 40

Page 36: Software Entwicklung 1 - softech.cs.uni-kl.de · 19 System.out.println("UeberlaufbeiAddition"); 20} 21} 22} Bieniusa/Poetzsch-He ter Software Entwicklung 1 28/ 40. Checked und Unchecked

Lebensdauer von Klassenattributen

Die Lebensdauer der Variablen entspricht der Lebensdauer der Klasse.Sie werden beim Laden der Klasse initialisiert.

Bemerkung:Klassenvariablen verhalten sich ahnlich wie globale Variablen in derprozeduralen Programmierung.

Bieniusa/Poetzsch-Heffter Software Entwicklung 1 36/ 40

Page 37: Software Entwicklung 1 - softech.cs.uni-kl.de · 19 System.out.println("UeberlaufbeiAddition"); 20} 21} 22} Bieniusa/Poetzsch-He ter Software Entwicklung 1 28/ 40. Checked und Unchecked

Beispiel: Klassenvariablen

class Uebungsgruppe {

static int maxTeilnehmer = 30;

private String name;

private int teilnehmer;

Uebungsgruppe(String name){

this.name = name;

this.teilnehmer = 0;

} ...

}

...

public static void main (String [] args) {

Uebungsgruppe u = new Uebungsgruppe("Montagsgruppe");

String s = u.getName ();

int i = Uebungsgruppe.maxTeilnehmer;

}

Bieniusa/Poetzsch-Heffter Software Entwicklung 1 37/ 40

Page 38: Software Entwicklung 1 - softech.cs.uni-kl.de · 19 System.out.println("UeberlaufbeiAddition"); 20} 21} 22} Bieniusa/Poetzsch-He ter Software Entwicklung 1 28/ 40. Checked und Unchecked

Klassenmethode

Die Deklaration einer Klassenmethode entspricht der Deklaration einerProzedur. Sie werden haufig auch als statische Methoden bezeichnet.

Klassenmethoden besitzen keinen impliziten Parameter.

Sie konnen nur auf Klassenattribute, Parameter und lokale Variable zugreifen.

Syntax:

static <Methodendeklaration >

Klassenmethoden werden mit folgender Syntax aufgerufen:

<Klassenname > . <Methodenname > ( ... )

Innerhalb der Klasse kann der Klassenname entfallen.

Bieniusa/Poetzsch-Heffter Software Entwicklung 1 38/ 40

Page 39: Software Entwicklung 1 - softech.cs.uni-kl.de · 19 System.out.println("UeberlaufbeiAddition"); 20} 21} 22} Bieniusa/Poetzsch-He ter Software Entwicklung 1 28/ 40. Checked und Unchecked

Beispiel: Klassen-, statische Methoden

Deklaration:

class String {

...

static String valueOf( long l ) { ... }

static String valueOf( float f ) { ... }

...

}

Anwendung/Aufruf:

String.valueOf( (float)(7./9.) )

liefert die Zeichenreihe: ”0.7777778"

Bieniusa/Poetzsch-Heffter Software Entwicklung 1 39/ 40

Page 40: Software Entwicklung 1 - softech.cs.uni-kl.de · 19 System.out.println("UeberlaufbeiAddition"); 20} 21} 22} Bieniusa/Poetzsch-He ter Software Entwicklung 1 28/ 40. Checked und Unchecked

Beispiele: Klassenattribute, -methoden

Charakteristische Beispiele fur Klassenattribute und -methoden liefert dieKlasse System, die eine Schnittstelle von Programmen zur Umgebungbereitstellt:

class System {

final static InputStream in = ...;

final static PrintStream out = ...;

static void exit(int status) { ... }

static long currentTimeMillis () { ... };

}

Die Klasse PrintStream besitzt Methoden print und println:

System.out.print("Das erklaert die Syntax");

System.out.println(" von Printaufrufen");

Bieniusa/Poetzsch-Heffter Software Entwicklung 1 40/ 40