Aufgabe 1: Nassi-Shneiderman-Diagramm eines Programmes mit

Werbung
Block 4, Aufgabe 1: Vererbung
Leiten Sie die Klasse Student von der Klasse Person ab. Die Klasse Student
soll zusätzlich zu den Eigenschaften der Klasse Person noch das Attribut
matrikelnummer haben. Die Methode print() der Klasse student soll
zusätzlich zur Methode print() der Klasse person auch die matrikelnummer
ausgeben.
Fehlende Stellen im Programm sind durch ... gekennzeichnet. Ergänzen Sie die fehlenden Stellen.
import java.io.*;
class Person
{
private String name;
private String vorname;
public Person()
{
System.out.print("\n\nGeben Sie den Nachnamen ein (Ende mit Strg+z) : ");
name = input();
System.out.print("\n\nGeben Sie den Vornamen ein (Ende mit Strg+z) : ");
vorname = input();
}
public String input()
{
String line="";
int c=0;
try
{
while( (c = System.in.read())!=-1)
{
line = line + (char)c;
}
}
catch (IOException e)
{
System.out.println("Lesefehler");
}
return line;
}
public void print()
{
System.out.print("\nNachname: "+name);
System.out.print("\nVorname: "+vorname);
}
}
public class Student . . . . .
{
private String matrikelnummer;
public Student()
{
. . . . ./* Aufruf des Konstruktors der Vaterklasse */
Lösungen Java-Kurs Block 4, SS 2002
1
System.out.print("\n\nGeben Sie die Matrikelnummer ein (Ende mit Strg+z) : ");
matrikelnummer = input();
}
public void print()
{
. . . . ./* Aufruf der Methode print der Vaterklasse */
System.out.print("\nMatrikelnummer : "+matrikelnummer);
}
public static void main(String args[])
{
System.out.print("\nStart des Programms");
System.out.print("\n\nPerson");
Person pers1 = new Person();
System.out.print("\n\nStudent");
Student stud1 = new Student();
System.out.print("\n\nAusgabe Person");
pers1.print();
System.out.print("\nAusgabe Student");
stud1.print();
}
}
Die Lösung ist:
public class Student extends Person2
{
private String matrikelnummer;
public Student()
{
super();
System.out.print("\n\nGeben Sie die Matrikelnummer ein (Ende mit Strg+z) :
");
matrikelnummer = input();
}
public void print()
{
super.print();
System.out.print("\nMatrikelnummer : "+matrikelnummer);
}
}
Block 4, Aufgabe 2: Polymorphismus. Dynamische Bindung
Überall, wo ein Objekt einer Klasse stehen kann, kann in Java auch ein Objekt einer
abgeleiteten Klasse eingesetzt werden. Zeigt eine Referenz Vater auf ein Objekt einer
abgeleiteten Klasse Sohn, so wird beim Aufruf einer Methode Vater.methode()
tatsächlich die Methode der abgeleiteten Klasse aufgerufen. Demonstrieren Sie dies, indem
Sie in der Methode main() des folgenden Programms eine Referenz auf ein Objekt der
Klasse Person erzeugen und ihm ein auf dem Heap erzeugtes Objekt der Klasse
Studiosus zuweisen und anschließend für die Referenz die Methode print() aufrufen.
Lösungen Java-Kurs Block 4, SS 2002
2
Die Lösung ist:
import java.io.*;
class Person
{
private String name;
private String vorname;
public Person()
{
try
{
byte[] eingabe = new byte [80];
System.out.print("\nGeben Sie den Nachnamen ein: ");
System.in.read(eingabe);
name = new String(eingabe);
eingabe = new byte[80];
System.out.print("\nGeben Sie den Vornamen ein: ");
System.in.read(eingabe);
vorname = new String(eingabe);
}
catch (IOException e)
{
System.out.println (e.toString());
System.exit(1);
}
}
public void print()
{
System.out.print("\nNachname: "+name);
System.out.print("\nVorname: "+vorname);
}
}
public class Studiosus extends Person
{
private String matrikelnummer;
public Studiosus()
{
super();
try
{
byte[] eingabe = new byte[80];
System.out.print("\nGeben Sie die Matrikelnummer ein: ");
System.in.read(eingabe);
matrikelnummer = new String(eingabe);
}
catch (IOException e)
{
System.out.println (e.toString());
System.exit(1);
}
}
public void print()
{
super.print();
Lösungen Java-Kurs Block 4, SS 2002
3
System.out.print("\nMatrikelnummer: "+matrikelnummer);
}
public static void main(String args[])
{
System.out.print("\nStart des Programms");
System.out.print("\n\nPerson");
Person pers1 = new Studiosus();
// eine Referenz kann auf
// ein Objekt einer abgelei// teten Klasse zeigen
System.out.print("\n\nAusgabe\n");
pers1.print();
//
//
//
//
Es wird die Methode nicht
der Referenz, sondern des
abgeleiteten Objekts aufgerufen
}
}
Block 4, Aufgabe 3: Reihenfolge von Konstruktoraufrufen
Die Klasse TestKonstruktoren soll zum Test der Reihenfolge von Konstruktoraufrufen
bei abgeleiteten Klassen dienen.
//Datei TestKonstruktoren
class TestKonstruktoren
{
public static void main (String[] args)
{
System.out.println ("Exemplar von A wird angelegt");
A aRef = new A();
System.out.println();
System.out.println ("Exemplar von B wird angelegt");
B bRef = new B();
System.out.println();
System.out.println ("Exemplar von C wird angelegt");
C cRef = new C();
System.out.println();
}
}
Schreiben Sie 3 Klassen A, B und C, welche jeweils nur einen Konstruktor ohne Parameter
enthalten. Im Konstruktor der Klasse A soll ausgegeben werden:
System.out.println("Klasse A - Konstruktor ohne Parameter");
Entsprechendes gilt für die Klassen B und C. Beachten Sie, dass B von A und C von B
abgeleitet sein soll.
Die Lösung ist:
//Datei A.java
class A
{
A()
{
System.out.println("Klasse A - Konstruktor ohne Parameter");
}
}
Lösungen Java-Kurs Block 4, SS 2002
4
//Datei B.java
class B extends A
{
B()
{
System.out.println ("Klasse B - Konstruktor ohne Parameter");
}
}
//Datei C.java
class C extends B
{
C()
{
System.out.println("Klasse C - Konstruktor ohne Parameter");
}
}
Die Ausgabe ist:
Exemplar von A wird angelegt
Klasse A - Konstruktor ohne Parameter
Exemplar von B wird angelegt
Klasse A - Konstruktor ohne Parameter
Klasse B - Konstruktor ohne Parameter
Exemplar
Klasse A
Klasse B
Klasse C
von C wird angelegt
- Konstruktor ohne Parameter
- Konstruktor ohne Parameter
- Konstruktor ohne Parameter
Block 4, Aufgabe 4: Vernichtung von Objekten
Schreiben Sie eine Klasse Alpha. Die Zahl der erzeugten Objekte von Alpha soll im
Konstruktor hochgezählt werden. Im Konstruktor soll der folgende Text ausgegeben werden:
ObjektX erzeugt
X soll dabei die Nummer des jeweiligen Objektes sein. In der finalize()-Methode der
Klasse Alpha soll ausgegeben werden:
ObjektX wurde geloescht
Zum Testen soll die Klasse TestGarbage dienen. Beginnen Sie beim Erzeugen mit wenig
Objekten und steigern Sie die Objektanzahl, bis der Garbage Collector tätig wird.
Lösungen Java-Kurs Block 4, SS 2002
5
//Datei TestGarbage.java
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
// Bitte ignorieren
class TestGarbage
{
static public void main (String[] args)
{
int n = 0;
/* Anzahl zu erzeugender Objekte
int zahl = 0;
/* Zahl
*/
*/
InputStreamReader inp = new InputStreamReader (System.in);
BufferedReader buffer = new BufferedReader (inp);
try
{
String eingabeN;
System.out.println ("Gib die Anzahl zu erzeugender Objekte ein: ");
eingabeN = buffer.readLine();
try
{
n = Integer.parseInt(eingabeN);
}
catch (NumberFormatException nFExcept)
{
System.out.println (nFExcept.toString());
System.exit(1);
}
}
catch (IOException ioexcept)
{
System.out.println (ioexcept.toString());
System.exit(1);
}
for (int lv = 0; lv < n; lv++)
{
Alpha alphaRef = new Alpha();
}
}
}
Die Lösung ist:
//Datei: Alpha.java
class Alpha
{
static int objektanzahl = 0;
int nummer;
Alpha()
{
objektanzahl++;
nummer = objektanzahl;
System.out.println ("\nObjekt" + nummer + " erzeugt");
}
protected void finalize() throws Throwable
{
System.out.print ("\nObjekt" + nummer + " wurde geloescht");
}
}
Lösungen Java-Kurs Block 4, SS 2002
6
Herunterladen