Objektorientierte Programmierung OOP

Prüfungsvorbereitung: Verständnisfragen

Prüfungsvorbereitung: Verständnisfragen


S. H.
Diese Lernkarten bieten eine grundlegende Einführung in die objektorientierte Programmierung (OOP) und decken Themen wie Klassen, Objekte, Methoden, Vererbung, und Polymorphie ab. Sie behandeln auch komplexe Datenstrukturen wie Bäume und Listen, sowie deren Implementierung und Auswertung in Java. Diese Lernkarten sind ideal für Anfänger, die die Grundlagen der OOP verstehen und praktische Beispiele in Java nachvollziehen möchten.
Flashcards
62
Students
10
Language
German
Category
Computer Science
Created / Updated
26.01.2013 / 14.04.2024

Flashcards

double a = y[i];

 

double[] y = { 3.4, 3, 7, 9.8, 12.9 };

Welcher Wert muss in i gespeichert sein, damit nach der Ausführung der folgenden Anweisung in a der Wert 12.9 gespeichert ist?

 

4

public class A {private int a;public int b;private int g() {a++;b++;return a + b;}public void h(B obj) {obj.c += a;obj.d++;obj.i();}}public class B {private int c;public int d;public int i() {c++;d++;return d + c;}private void k(A obj) {obj.a += c;obj.b = obj.g();}}
1  package a;
2  3  public class A {45public int w;6protected int x;7int z;8private int y;910}
1  package a;
23 class B {45public int a;6private int b;7protected int c;8int d;9public b.D e;1011public void nix() {12b.C cc = null;13}14}
1 package b;
23 public class C {45public int e;6protected int f;7int g;8private int h;910public int foo(C x, D y) {11int z = x.h;12z += y.t;13z += y.s;14z += y.o;15a.B b = new B();16return z;17}18}
1 package b;
23 class D extends a.A{45public int m;6int w;7protected int s;8private int t;910int bar(a.A a, D d) {11int k = w;12k += super.w;13k += x;14k += a.x;15k += d.t;16k += m;17k += y;18k += z;19return k;20}2122}

A F H I O R S

class A {public void foo() {System.out.print("A");}public static void bar() {System.out.print("L");}public void nix() {System.out.print("X");}}class B extends A {public void foo() {System.out.print("B");}public static void bar() {System.out.print("K");}public void all() {super.foo();}}

 

A a1 = new A();A a2 = new B();B b1 = new B();a1.foo();a2.bar();b1.foo();B.bar();a2.foo();b1.all();a1.nix();A.bar();b1.nix();a1.bar();b1.bar();

Gegeben sei die folgende Klassendeklaration:

public class GefaehrlicheKlasse {    public static void a(int x) throws Exception {        b(x);    }    public static void b(int x) throws Exception {        if (x < 10) {            d(x, x);        } else {            try {                c(-x);            } catch (RuntimeException e) {                throw new IllegalArgumentException();            }        }    }    private static void c(int i) throws Exception {        try {            e(2 * i, i - i);        } catch (Exception e) {            throw new Exception("Fehler!");        }    }    private static int e(int i, int j) {        return i / j;    }    private static void d(int x, int i) {        int[] f = new int[i];        for (int k = 0; k <= x; k++) {            f[k] = i;        }    }}

Welche Ausnahme wird an den Aufrufer von GefaehrlicheKlasse.a(10) weitergereicht?

public class GefaehrlicheKlasse {

    public static void a(int x) throws Exception {        b(x);    }    public static void b(int x) throws Exception {        if (x < 10) {            d(x, x);        } else {            try {                c(-x);            } catch (RuntimeException e) {                throw new IllegalArgumentException();            }        }    }    private static void c(int i) throws Exception {        try {            e(2 * i, i - i);        } catch (Exception e) {            throw new Exception("Fehler!");        }    }    private static int e(int i, int j) {        return i / j;    }    private static void d(int x, int i) {        int[] f = new int[i];        for (int k = 0; k <= x; k++) {            f[k] = i;        }    }}

Welche Ausnahme wird an den Aufrufer von GefaehrlicheKlasse.b(7) weitergereicht?

Welche der folgenden Aussagen sind korrekt? 

Gegeben sei die folgende Methode:

int a(int x, int y) {if (x <= 0 || y < 0) {return x - y + 2;}if (x % 2 == 0) {return a(x / 2, y) + a(x, y - 1);}return a(x - 1, y - 2);}

Vervollständigen Sie nun den Aufrufbaum für a(6, 3) aus Abbildung 1 . Die Wurzel stellt dabei den Aufruf a(6,3) dar. Die Kinder eines Knoten sind die jeweils auftretenden Methodenaufrufe bei der Ausführung des Elternknotens.

Aufrufbaum für a(6, 3)

Wie oft wird die Methode a insgesamt aufgerufen? Der Aufruf a(6, 3) zählt auch dazu.

22

Gegeben sei die folgende Methode:

int a(int x, int y) {if (x <= 0 || y < 0) {return x - y + 2;}if (x % 2 == 0) {return a(x / 2, y) + a(x, y - 1);}return a(x - 1, y - 2);}

Vervollständigen Sie nun den Aufrufbaum für a(6, 3) aus Abbildung 1 . Die Wurzel stellt dabei den Aufruf a(6,3) dar. Die Kinder eines Knoten sind die jeweils auftretenden Methodenaufrufe bei der Ausführung des Elternknotens.

Aufrufbaum für a(6, 3)

Wie viele Blätter hat der Aufrufgraph?

8

Gegeben sei die folgende Methode:

int a(int x, int y) {if (x <= 0 || y < 0) {return x - y + 2;}if (x % 2 == 0) {return a(x / 2, y) + a(x, y - 1);}return a(x - 1, y - 2);}

Vervollständigen Sie nun den Aufrufbaum für a(6, 3) aus Abbildung 1 . Die Wurzel stellt dabei den Aufruf a(6,3) dar. Die Kinder eines Knoten sind die jeweils auftretenden Methodenaufrufe bei der Ausführung des Elternknotens.

Aufrufbaum für a(6, 3)

Wie lautet das Ergebnis des Methodenaufrufs?

41

Arithmetische Ausdrücke lassen sich auch als Bäume darstellen. So kann der Ausdruck:
7 * 2 + (5 + 4) * 3 
durch den Baum in Abbildung 1 repräsentiert werden. 

 

Darstellung eines arithmetischen Ausdrucks in Form eines Baums



Dabei speichert jeder Knoten entweder ein Operanden oder einen Operator. Die Blattknoten enthalten dabei die Operanden. Klammern werden nicht explizit im Baum gespeichert, da ihre Bedeutung durch die Struktur des Baumes repräsentiert wird. Die Wurzel enthält dabei immer den zuletzt angewendeten Operator.
Gegeben sei der folgende arithmetische Ausdruck:
9 + ( 3 * 5 - 4) + (7 * 2 / (8 * 4 - 2) + 4) * 5
Erstellen Sie hierzu nun einen binären Baum wie in Abbildung 1 .
Es soll dabei die Java-Auswertungsreihenfolge verwendet werden.

Wie viele Blätter hat der Baum?

11

Arithmetische Ausdrücke lassen sich auch als Bäume darstellen. So kann der Ausdruck:
7 * 2 + (5 + 4) * 3 
durch den Baum in Abbildung 1 repräsentiert werden. 

 

Darstellung eines arithmetischen Ausdrucks in Form eines Baums



Dabei speichert jeder Knoten entweder ein Operanden oder einen Operator. Die Blattknoten enthalten dabei die Operanden. Klammern werden nicht explizit im Baum gespeichert, da ihre Bedeutung durch die Struktur des Baumes repräsentiert wird. Die Wurzel enthält dabei immer den zuletzt angewendeten Operator.
Gegeben sei der folgende arithmetische Ausdruck:
9 + ( 3 * 5 - 4) + (7 * 2 / (8 * 4 - 2) + 4) * 5
Erstellen Sie hierzu nun einen binären Baum wie in Abbildung 1 .
Es soll dabei die Java-Auswertungsreihenfolge verwendet werden.

Welche Höhe besitzt der Baum?

7

Arithmetische Ausdrücke lassen sich auch als Bäume darstellen. So kann der Ausdruck:
7 * 2 + (5 + 4) * 3 
durch den Baum in Abbildung 1 repräsentiert werden. 

 

Darstellung eines arithmetischen Ausdrucks in Form eines Baums



Dabei speichert jeder Knoten entweder ein Operanden oder einen Operator. Die Blattknoten enthalten dabei die Operanden. Klammern werden nicht explizit im Baum gespeichert, da ihre Bedeutung durch die Struktur des Baumes repräsentiert wird. Die Wurzel enthält dabei immer den zuletzt angewendeten Operator.
Gegeben sei der folgende arithmetische Ausdruck:
9 + ( 3 * 5 - 4) + (7 * 2 / (8 * 4 - 2) + 4) * 5
Erstellen Sie hierzu nun einen binären Baum wie in Abbildung 1 .
Es soll dabei die Java-Auswertungsreihenfolge verwendet werden.

Durchlaufen Sie den Baum jeweils mit dem angegebenen Verfahren und geben Sie den Inhalt der Knoten (ohne Leerzeichen, Komma und Klammern, also nur Operatoren und Operanden) an:

in-order:  
pre-order:  
post-order:  
level-order:

– in-order: 9+3*5-4+7*2/8*4-2+4*5

– pre-order: ++9-*354*+/*72-*84245

– post-order: 935*4-+72*84*2-/4+5*+

– level-order: ++*9-+5*4/435*-72*284

Einfache Kettenbrüche besitzen die folgende Form:

Dabei sind alle b positive ganze Zahlen. Abgekürzt lässt sich ein Kettenbruch folgendermaßen schreiben: [b0, b1, b2, b3, ...] 

Mit Hilfe dieser Form lassen sich Kettenbrüche leichter darstellen und auch automatisch auswerten. Bevor wir uns jedoch in der folgenden Aufgabe der Implementierung zuwenden, vorab noch ein paar theoretische Aufgaben.

Wie lautet der Dezimalwert des Kettenbruchs [2, 4, 2, 4]?

Manche irrationalen Zahlen, lassen sich gut als Kettenbruch darstellen, da sie ein bestimmtes Muster aufweisen. So lässt sich beispielsweise die Wurzel von 2 folgendermaßen darstellen: [1, 2, 2, 2, 2, 2,...]. Die eulersche Zahl e weist hingegen dieses Muster auf: [2, 1, 2, 1, 1, 4, 1, 1, 6, 1, 1, 8, 1, 1, 10, 1, ...]

2.225

Einfache Kettenbrüche besitzen die folgende Form:

Dabei sind alle b positive ganze Zahlen. Abgekürzt lässt sich ein Kettenbruch folgendermaßen schreiben: [b0, b1, b2, b3, ...] 

Mit Hilfe dieser Form lassen sich Kettenbrüche leichter darstellen und auch automatisch auswerten. Bevor wir uns jedoch in der folgenden Aufgabe der Implementierung zuwenden, vorab noch ein paar theoretische Aufgaben.

Vervollständigen Sie die Folge von e: 

[2, 1, 2, 1, 1, 4, 1, 1, 6, 1, 1, 8, 1, 1, 10, 1,,,,,,,...]

 

 

[2; 1; 2; 1; 1; 4; 1; 1; 6; 1; 1; 8; 1; 1; 10; 1;1, 12, 1, 1, 14, 1; :::

Einfache Kettenbrüche besitzen die folgende Form:

Dabei sind alle b positive ganze Zahlen. Abgekürzt lässt sich ein Kettenbruch folgendermaßen schreiben: [b0, b1, b2, b3, ...] 

Mit Hilfe dieser Form lassen sich Kettenbrüche leichter darstellen und auch automatisch auswerten. Bevor wir uns jedoch in der folgenden Aufgabe der Implementierung zuwenden, vorab noch ein paar theoretische Aufgaben.

Bei Kettenbrüchen handelt es sich um eine rekursive Struktur. Versuchen Sie diese ähnlich wie die Datenstruktur Liste auf Seite 400 in KE 6 zu definieren.

 

 

 

Ein Kettenbruch kann folgendermaßen rekursiv definiert werden: Kettenbruch = Zahl | Zahö + 1 / Kettenbruch

Welchen der folgenden Ausnahmetypen müssen nicht explizit behandelt oder weitergereicht werden?

Welche Schnittstellen implementiert die Klasse java.io.PrintStream?

Welche der folgenden Aussagen sind richtig?

1   java.util.List<Integer> list = new java.util.LinkedList<Integer>();2   int a = 10;3   Integer b = 20;4   String c = "10";5   list.add(a);6   list.add(b);7   list.add(c);8   list.add(a + b);9   list.add(b + c);10 a = list.remove(0);11 b = list.remove(0);12 c = list.remove(0);

 

java.util.Map<String,Integer> m = new java.util.HashMap<String,Integer>();String s = "Hallo";int x = 10;m.put(s,x);m.put(s + s, x + x);m.put(s, m.get(s+s));int y = m.get(s); x = m.size();

Welchen Wert enthält die Variable x nach der Ausführung dieser Anweisungen?

2

java.util.Map<String,Integer> m = new java.util.HashMap<String,Integer>();String s = "Hallo";int x = 10;m.put(s,x);m.put(s + s, x + x);m.put(s, m.get(s+s));int y = m.get(s); x = m.size();

Welchen Wert enthält die Variable y nach der Ausführung dieser Anweisungen?

20

Study