• Keine Ergebnisse gefunden

Programmiertechnik Klassen

N/A
N/A
Protected

Academic year: 2022

Aktie "Programmiertechnik Klassen"

Copied!
26
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Programmiertechnik

Klassen

Prof. Dr. Oliver Haase

(2)

Motivation

Aufgabe: Programm zur Adressverwaltung (20 Adressen)

 Adresse besteht aus:

Name

Adresse (Straße und Wohnort)

Postleitzahl

Email

Kommentar

(3)

Motivation

 1. Ansatz:

String[] name = new String[20];

String[] strasse = new String[20];

String[] wohnort = new String[20];

int[] plz = new int[20];

String[] email = new String[20];

String[] kommentar = new String[20];

(4)

Motivation

 Eintragen einer neuen Adresse:

name[2] = "Klausi Klausenbacher";

strasse[2] = "am Hutzenweg 23";

wohnort[2] = "Musterbach";

plz[2] = 12345;

email[2] = "klausen@bacher.de";

kommentar[2] = "Schwippschwager 2. Grades";

 Aber:

 es wäre schön, wenn man alle Daten, die zu einer Adresse gehören, zusammenfassen könnte zu einem Datentyp, anstatt sie auf 6

verschiedene Felder zu verteilen.

(5)

Was ist eine Klasse?

selbstdefinierter Datentyp

 geeignet, neue Strukturen zu modellieren

 Kernkonzept objektorientierter (OO) Programmierung

 Sammlung von Variablen (Attributen) und Methoden

 Variablen (und Methoden) einer Klasse heißen Komponenten der Klasse.

 Konkrete Instanz einer Klasse heißt Objekt.

(6)

Äußere und innere Klassen

Klassen können auf zwei Arten definiert werden:

äußere Klasse: Die Klasse wird in einer eigenen Datei definiert.

Die Datei mit der Definition der Klasse MyClass hat den Namen MyClass.java ( diese Variante wird im folgenden verwendet).

innere Klasse: Die Klasse wird innerhalb einer anderen Klasse

definiert.

(7)

Klassenbeispiel - Adresse

graphische Darstellung einer Klasse  Klassendiagramm. (Beachte: der untere, leere Teil wird später Methodenbeschreibungen enthalten.)

Adresse

name: String strasse: String postleitzahl: int wohnort:

String

email: String

kommentar: String

(8)

Klassendefinition in Java

public class <KlassenName> { // äußere Klasse <VariablenDeklaration>

<VariablenDeklaration>

}

Syntaxregel

 Für jetzt steht der Ausdruck <VariablenDeklaration> für die Deklaration einer öffentlichen Variablen:

public <Typ> <VariablenName>;

Syntaxregel

(9)

Adressenbeispiel in Java

public class Adresse { public String name;

public String strasse;

public int postleitzahl;

public String wohnort;

public String email;

public String kommentar;

}

(10)

Instantiierung (Objekterzeugung)

<InstanzName> = new <KlassenName>();

Syntaxregel

Adresse myAddress;

myAddress

myAddress = new Adresse();

name strasse postleitzahl

Beispiel:

Adresse myAddress = new Adresse();

oder zusammengefasst:

(11)

Komponentenzugriff

Beispiel:

<InstanzName>.<KomponentenName>;

Syntaxregel

adresse.wohnort = "Musterbach";

oder auch:

System.out.println(adresse.strasse);

(12)

Beispiel – Adressbuch

public class Adressbuch_v1 {

public static void main(String[] args) { // benoetigte Variablen

java.util.Scanner scanner =

new Java.util.Scanner(System.in);

Adresse adr = new Adresse();

boolean fertig=false;

// Schleifenbeginn while (!fertig) { // Menue

System.out.print("1 = Adresseingabe\n" + "2 = Adressausgabe\n" + "3 = Programm beenden\n" +

(13)

Beispiel – Adressbuch

// Fallunterscheidung switch(auswahl) {

case 1: // Adresse eingeben System.out.print("Name:");

adr.name = scanner.next();

System.out.print("Strasse:");

adr.strasse = scanner.next();

System.out.print("PLZ:");

adr.postleitzahl = scanner.nextInt();

System.out.print("Wohnort:");

adr.wohnort = scanner.next();

System.out.print("Email:");

adr.email = scanner.next();

System.out.print("Kommentar:");

(14)

Beispiel – Adressbuch

case 2: // Adresse ausgeben

System.out.println("---");

System.out.println(adr.name);

System.out.println(adr.strasse);

System.out.println(adr.postleitzahl+" "+adr.wohnort);

System.out.println("E-Mail: "+adr.email);

System.out.println("KOMMENTAR: "+adr.kommentar);

System.out.println("---");

break;

case 3: // Programm beenden fertig = true;

break;

default: // Falsche Zahl eingegeben

System.out.println("Eingabefehler!");

}

} // Schleifenende

(15)

Klassen als Referenzdatentypen

Beispiel:

Adresse adresse1 = new Adresse();

Adresse adresse2;

adresse1.name = "Karla Musterfrau";

adresse2 = adresse1;

adresse2.name = "John Doe";

System.out.println("Name von Adresse 1: "

+ adresse1.name);

Welche Bildschirmausgabe erwarten Sie?

(16)

Klassen als Referenzdatentypen

adresse1

name

strasse hausnummer

Adresse adresse1 = new Adresse();

adresse2

Adresse adresse2;

adresse1.name = "Karla Musterfrau";

Karla Musterfrau

(17)

Klassen als Referenzdatentypen

adresse1

name

strasse hausnummer postleitzahl wohnort email

Adresse adresse1 = new Adresse();

adresse2

Adresse adresse2;

adresse1.name = "Karla Musterfrau";

adresse2 = adresse1;

Karla Musterfrau

adresse2.name = "John Doe";

John Doe

(18)

Felder von Klassen

Aufgabe: Erweitere Adressprogramm von 1 auf mehrere (20) Adressen.

Ansatz: Verwende Feld von Adressen.

Adresse[] adressen = new Adresse[20];

adressen

adressen[0]

adressen[1]

adressen[2]

Der Komponententyp eines Feldes kann auch eine Klasse sein!

Beachte: Da die Klasse Adresse ein

Referenzdatentyp ist, werden bei der

Felderzeugung erst die Referenzen,

und nicht die eigentlichen Adress-

Objekte erzeugt!

(19)

name strasse hausnummer

name strasse hausnummer postleitzahl

name strasse hausnummer postleitzahl wohnort email kommentar

name strasse hausnummer postleitzahl wohnort email kommentar

Felder von Klassen

 Erzeugung der 20 Adress-Objekte:

for (int i = 0; i < adressen.length; i++) { adressen[i] = new Adresse();

}

adressen

adressen[0]

adressen[1]

adressen[2]

adressen[18]

adressen[19]

name strasse postleitzahl wohnort email kommentar

(20)

erweitertes Adressbuch

public class AdressBuch_v2 {

public static void main(String[] args) { // Benoetigte Variablen

java.util.Scanner scanner =

new Java.util.Scanner(System.in);

boolean fertig = false;

Adresse adressen[] = new Adresse[20];

for ( int i = 0; i < adressen.length; i++ ) { adressen[i] = new Adresse();

}

Adresse adr = adressen[0];

(21)

Beispiel – Adressbuch

// Schleifenbeginn while (!fertig) { // Menue

System.out.print("1 = Adresseingabe\n" + "2 = Adressausgabe\n" +

"3 = Adressindex wechseln\n" + "4 = Programm beenden\n" +

"Ihre Wahl:");

int auswahl = scanner.nextInt();

(22)

Beispiel – Adressbuch

switch(auswahl) {

case 1: // Adresse eingeben System.out.print("Name:");

adr.name = scanner.next();

System.out.print("Strasse:");

adr.strasse = scanner.next();

System.out.print("PLZ:");

adr.postleitzahl = scanner.nextInt();

System.out.print("Wohnort:");

adr.wohnort = scanner.next();

System.out.print("Email:");

adr.email = scanner.next();

(23)

Beispiel – Adressbuch

case 2: // Adresse ausgeben

System.out.println("---");

System.out.println(adr.name);

System.out.println(adr.strasse);

System.out.println(adr.postleitzahl+" "+adr.wohnort);

System.out.println("E-Mail: "+adr.email);

System.out.println("KOMMENTAR: "+adr.kommentar);

System.out.println("---");

break;

case 3: // Adressindex wechseln

int index = GraphicIO.readInteger("Neuer Adressindex:");

adr = adressen[index];

break;

case 4: // Programm beenden fertig = true;

break;

default: // Falsche Zahl eingegeben

System.out.println("Eingabefehler!");

}

(24)

Kopieren

Aufgabe: Kopiere Feld von Adressen, adressen , in ein zweites Feld von Adressen, mehrAdressen :

Adresse[] mehrAdressen = new Adresse[20];

Lösung: (zuerst selbst probieren ):

(25)

Kopieren

Aufgabe: Kopiere Feld von Adressen, adressen , in ein zweites Feld von Adressen, mehrAdressen :

Adresse[] mehrAdressen = new Adresse[20];

Lösung: (zuerst selbst probieren ):

Adresse[] mehrAdressen = new Adresse[adressen.length];

for ( int i = 0; i < mehrAdressen.length; i++ ) { mehrAdressen[i] = new Adresse();

mehrAdressen[i].name = adressen[i].name;

mehrAdressen[i].strasse = adressen[i].strasse;

mehrAdressen[i].postleitzahl = adressen[i].postleitzahl;

mehrAdressen[i].wohnort = adressen[i].wohnort;

mehrAdressen[i].email = adressen[i].email;

(26)

Vergleich von Objektreferenzen

Welche Ausgabe erzeugt folgendes Programm und warum?

Adresse adresse1 = new Adresse();

// initialisierung von adresse1 Adresse adresse2 = new Adresse();

adresse2.name = adresse1.name;

adresse2.strasse = adresse1.strasse;

adresse2.postleitzahl = adresse1.postleitzahl;

adresse2.wohnort = adresse1.wohnort;

adresse2.email = adresse1.email;

adresse2.kommentar = adresse1.kommentar;

if ( adresse1 == adresse2 ) {

System.out.println("Gleichheit");

Referenzen

ÄHNLICHE DOKUMENTE

Dreieck BRA gleichschenklig mit Basis BR ist. Wie lauten die Koordinaten von R?.. Dieses Aufgabenblatt muss zusammen mit der Arbeit abgegeben werden. a) Im Koordinatensystem ist

e) Eine dritte Perlenkette ist ebenfalls symmetrisch aufgebaut mit der grössten Perle in der Mitte. Auch bei ihr ist der Durchmesser jeder Perle 10 % kleiner als derjenige der

b) Nach der Reflexion im Punkt A (siehe Teilaufgabe a)) fliegt der Ball weiter und trifft im Punkt B(2/ 8 /10) auf die Deckfläche des Quaders. Weisen Sie rechnerisch nach,. c)

[r]

eine Geschichte am Computer tippen Kennt Resi auch schon alle Buchstaben..

In jedem steht ein Wort oder sogar ein Teil eines Satzes.. Schreib die Sätze aus dem Hüpfdiktat in

Fremd-.

Der rabattierte Preis wird Ihnen an der Kasse angezeigt | Die Euro-Preise gelten in der Bundesrepublik Deutschland | Preise freibleibend, Stand 1.1.2022 | Es gelten unsere