Info 2 Klausur

Antworten
LR03
Beiträge: 3
Registriert: 18.07.2008 12:43

Info 2 Klausur

Beitrag von LR03 » 08.08.2010 17:10

kann mal bitte jemand eine Vorschlag machen für die Methode exmatrikulationErforderlich()
zu der Klausur von 2007
download/file.php?id=2181

phreax
Beiträge: 6
Registriert: 06.11.2009 20:10
Geschlecht: männlich
Studienrichtung: Informatik
Matrikel: 2009
Angestrebter Abschluss: Dipl-Ing.

Re: Info 2 Klausur

Beitrag von phreax » 08.08.2010 19:37

getippt, nicht getestet:

Code: Alles auswählen

public boolean exmatrikulationErforderlich()
{
  Iterator it = this.leistungen.iterator();
  while (it.hasNext())
  {
    Leistung leistung = (Leistung) it.next();
    if(!leistung.wiederholbar() && !leistung.benstanden())
    {
        return true;
    }
  }
  return false;
}
HTH phreax

tom-8-o
Beiträge: 57
Registriert: 21.05.2008 11:00

Re: Info 2 Klausur

Beitrag von tom-8-o » 09.08.2010 08:53

Aufgabe 7:

a) nein , cast-operator verwandelt in subtyp
b) ja , werden durch namen bzw. parameter unterschieden
c) nein , tritt auch bei interfaces auf
d) nein , interfaces enthalten keine konstruktoren
e) ja
f) nein , private können nur von ihrer klasse benutzt werden
g) nein , werden wie bei konstruktoren durch ihre parameter unterschieden
h) nein , da bim erstellen einer Sammlung auch der Elementtyp mit angegeben werden muss
i) nein, in java interfaces statt mehrfachvererbung
j) ja

Aufgabe 6:

berechne (1,4): sum=7
berechne (3,5): sum=4

Aufgabe 4:

pchein 11=new proseminar(); //geht, da proseminar nicht abstract und subklasse
praktikum 12=new benotet; //geht nicht, da benotet superklasse
leistung 13=new schein(); //geht nicht, da schein abstract
..........14................; //geht, da prüfung nicht abstract und subklasse
..........15................; //geht, da prüfung nicht abstract und subklasse
..........16................; //geht, da proseminar nicht abstract und subklasse

methodenaufrufe:

.....11....; // bestanden() wird in proseminar gefunden
.....12....; // geht nicht, da objekt nicht erzeugt wurde, siehe oben
.....13....; // geht nicht, da objekt nicht erzeugt wurde, siehe oben
.....14....; // bestanden() wird in prüfung gefunden
.....15....; // bestanden() wird in prüfung gefunden
.....16....; // bestanden() wird in proseminar gefunden

Aufgabe 2:

this.strings=strings //punkt statt pfeil

mehr habe ich bis jetzt nicht gefunden

Aufgabe 5:

a) beobachter ?

kann jemand die ergebnisse bestätigen?
wäre schön wenn jemand noch vorschläge zur aufgabe 2, 3c und 5 hätte, da weiß ich nicht wirklich weiter.

Benutzeravatar
laces
Beiträge: 121
Registriert: 13.10.2009 12:58
Geschlecht: männlich
Studienrichtung: Elektrotechnik
Matrikel: 2009
Angestrebter Abschluss: Dipl-Ing.
Wohnort: Dresden

Re: Info 2 Klausur

Beitrag von laces » 09.08.2010 09:48

Aussage: Methodennamen dürfen innerhalb einer Klasse nur einmal verwendet werden.


1. g) nein , werden wie bei konstruktoren durch ihre parameter unterschieden (Klausur von 2007, s.o.)

2. h)Eine Methode darf nicht mehr als einmal mit dem gleichen Namen in einer Klasse existieren
(von LoveBuzz Informatik 2 - 6.08.2008, unter Dateien>Info2>klausuren)

mit name bei 2. ist dann wohl gleiche signatur gemeint, also auch gleiche parameter. sonst wären die beiden aussagen ja gegensinnig

rambo
Beiträge: 49
Registriert: 16.07.2009 14:54

Re: Info 2 Klausur

Beitrag von rambo » 09.08.2010 10:21

-erledigt-

phreax
Beiträge: 6
Registriert: 06.11.2009 20:10
Geschlecht: männlich
Studienrichtung: Informatik
Matrikel: 2009
Angestrebter Abschluss: Dipl-Ing.

Re: Info 2 Klausur

Beitrag von phreax » 09.08.2010 10:31

@laces

Eine Methode kann bliebig oft mit gleichem Namen vorkommen, nur Anzahl und/oder Typ der Parameter muss unterschiedlich sein

@tom

Aufgabe 7:

zu b) Kann man nicht durch den Namen unterscheiden da sie gleich heißen müssen -> Nur Parameter
zu e) nein, RuntimeExceptions sollten nicht im Kopf deklariert werden
zu h) nicht korrekt: durch Variablenpolymorphie können durchaus andere Typen enthalten Sein (List<Object> kann jede beliebige Klasse enthalten da alle davon erben).

Aufgabe 4:
12: new Benotet() geht nicht weil Benotet ein Interface ist
15: nicht Subklasse sondern Implementierer

Methodenaufrufe:
15: nicht mögl. da Interface Benotet keinen Zugriff auf die Methode bestanden bietet

Aufgabe 5:
b) Die Methode setzeErgebnis muss verändert werden
Die Methoden Konstruktor, beobachterHinzufuegen, beobachterEntfernen müssen hinzugefügt werden
c) Der Konstruktor initialisiert die BeobachterListe
Die Methode beobachterHinzufuegen fügt einen Beobachter der liste Hinzu
Die Methode beobachterEintfernen entfernt einen Beobachter der liste Hinzu
Die Methode setzeErgebnis benachrichtigt die Beobachter über eine Änderung
Nutzer dieser Klasse müsen daher ein Interface implementieren das die Methode ergebnisGeaendert() einführt

Aufgabe 2:
imports: fehlende ";" (könnte auch Abschreibefehler sein)
Klasse: falsche Klassendefinition, falsch formulierter Konstruktor

containsAllOrTrimmed: Fehlendes return Statement;
(Falscher return Typ, könnte aber implizit gecastet werden)
Am Ende sinds glaube ich noch ein Paar "}" zu viel...
mehr sehe ich gerade auch nicht.

der Rest schien zu Stimmen

HTH phreax

tom-8-o
Beiträge: 57
Registriert: 21.05.2008 11:00

Re: Info 2 Klausur

Beitrag von tom-8-o » 09.08.2010 11:03

@preax:
- hast du für "e) nein, RuntimeExceptions sollten nicht im Kopf deklariert werden"
irgendwas im skript oder woanders gefunden was das belegt? ich habe dazu nämlich auch schon viele unterschiedliche meinungen gelesen. im skript kap.3 seite 133 steht halt drin: "Alle geworfenen Exceptions müssen im
Methodenkopf deklariert werden"


- "zu h) nicht korrekt: durch Variablenpolymorphie können durchaus andere Typen enthalten Sein (List<Object> kann jede beliebige Klasse enthalten da alle davon erben)."

heißt das, dass wenn ich eine sammlung erstelle deren Elemente vom Typ einer Superklasse sind,(also z.bsp.: ArrayList<"Superklasse"> a) dass dann die Elemente alle Typen der Subklassen annehmen können?



- "15: nicht mögl. da Interface Benotet keinen Zugriff auf die Methode bestanden bietet"

aber es wird doch zuerst in Prüfung nach der methode gesucht und da sie dort vorhanden ist wird sie doch auch dort gefunden oder? oder wird der Zugriff, dadurch dass Prüfung ein Implementierer von Benotet ist der Zugriff gesperrt?
dann wäre praktikum ja theoretisch auch gesperrt!?

michl
Beiträge: 53
Registriert: 04.11.2009 17:19
Matrikel: 2009

Re: Info 2 Klausur

Beitrag von michl » 09.08.2010 12:12

Hallo,

also die 5) würde mich auch mal interresieren.
a) Beobachter.
b) verändert werden müssen setzeErgebniss()? -> muss da nicht zusätzlich der Beobachter informiert werden?
zusätzlich würde ich die Metodhen addBeobachter() und removeBeobachter()?

kann das so stimmen? Mann ich hoffe es kommt Singleton...
„Man geht nicht nach dem Klettern zum Kaffeetrinken, Kaffeetrinken ist integraler Bestandteil des Kletterns.“
– Wolfgang Güllich

michl
Beiträge: 53
Registriert: 04.11.2009 17:19
Matrikel: 2009

Re: Info 2 Klausur

Beitrag von michl » 09.08.2010 12:22

ach da oben steht ja schon was.hab ich überlesen. Sorry
„Man geht nicht nach dem Klettern zum Kaffeetrinken, Kaffeetrinken ist integraler Bestandteil des Kletterns.“
– Wolfgang Güllich

ben0225
Beiträge: 53
Registriert: 29.07.2009 06:52
Studienrichtung: Elektrotechnik
Matrikel: 2014
Angestrebter Abschluss: Dipl-Ing.

Re: Info 2 Klausur

Beitrag von ben0225 » 09.08.2010 13:15

@ tom-8-o:
im Skript Kap.3 S.130:Methoden, die geprüfte Exceptions werfen können,müssen das im Methodenkopf ankündigen. Ist auch für ungeprüfte Exceptions möglich (wird aber nicht empfohlen)

phreax
Beiträge: 6
Registriert: 06.11.2009 20:10
Geschlecht: männlich
Studienrichtung: Informatik
Matrikel: 2009
Angestrebter Abschluss: Dipl-Ing.

Re: Info 2 Klausur

Beitrag von phreax » 09.08.2010 13:32

@tom-8-0
nachdem das mit den Excpetions geklärt ist, noch zum Thema Polymorphie:
Man kann sich das so vorstellen: Der statische Typ gibt erstmal an, auf was für Methoden und Felder Du überhaupt zugreifen kannst. Dazu guckst du einfach in die Definition des statischen Typen da steht bei
Benotet (ist hier der statische Typ) nur public int gibNote();
D.h. es sind nur Zugriffe auf gibNote() zulässig sonst nichts, auch kein bestanden() oder sonstwas.

Hier mal ein Beispiel wo das funktioniert:

Code: Alles auswählen

Listung l = new Prüfung();
l.bestanden();
Statischer Typ: Leistung
Dynamsicher Typ: Prüfung

Schauen wir uns die Methoden des statischen Typen an:

Code: Alles auswählen

abstract boolean bestanden();
abstract boolean wiederholbar();
-> Aufruf von bestanden() möglich.

Jetzt beginnt erst die Methodensuche und zwar zuerst beim dynamischen Typen:
überschreibt Prüfung bestanden()? -> wenn ja aufrufen (ist hier der Fall)
Wäre das nicht der Fall, wird zu Superklasse gegangen und da geschaut und ggf. aufgerufen
usw. usw. bis eine Methode gefunden wurde.

HTH phreax

tom-8-o
Beiträge: 57
Registriert: 21.05.2008 11:00

Re: Info 2 Klausur

Beitrag von tom-8-o » 09.08.2010 13:57

ah, ok. danke für die infos. wenn ich es richtig verstanden habe muss die gesuchte methode also im statischen typ vorhanden sein, damit die methodensuche überhaupt möglich ist. also wäre die Nr.11 auch nicht möglich, weil bestanden() nicht im statischen Typ Schein vorhanden ist?

Benutzeravatar
laces
Beiträge: 121
Registriert: 13.10.2009 12:58
Geschlecht: männlich
Studienrichtung: Elektrotechnik
Matrikel: 2009
Angestrebter Abschluss: Dipl-Ing.
Wohnort: Dresden

Re: Info 2 Klausur

Beitrag von laces » 09.08.2010 14:10

doch, weil schein von leistung erbt und leistung die methode bestanden besitzt

phreax
Beiträge: 6
Registriert: 06.11.2009 20:10
Geschlecht: männlich
Studienrichtung: Informatik
Matrikel: 2009
Angestrebter Abschluss: Dipl-Ing.

Re: Info 2 Klausur

Beitrag von phreax » 09.08.2010 14:14

Mist zu kurz gedacht, das kommt davon wenn man eher Praktiker als Theoretiker ist, danke fürs drauf hinweisen:
Hier die angepasste Theorie: Es gibt statische und dynamische Methodensuche:
Die statische Suche beginnt beim statischen Typen und sucht, falls nicht gefunden bei bei allen Vorfahren/Superklassen nach der Methode. Ist sie vorhanden, dann beginnt die dynamische Methodensuche, die beginnt beim dynamischen Typen und sucht falls nicht gefunden bei den Vorfahren/Superklassen weiter. Diese Methode wird dann aufgerufen.

Es folgt: Da Schein von Leistung erbt , findet die statische Methodensuche von Schein ausgehend die Methode bestanden().
Es kann also weitergehen und die Dynamische Suche beginnt dann beim Proseminar...

HTH phreax

Edit: Ich hab mal die Programmierlösung zum spielen angehängt
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

LR03
Beiträge: 3
Registriert: 18.07.2008 12:43

Re: Info 2 Klausur

Beitrag von LR03 » 09.08.2010 15:34

zu 4: leistung 13=new schein(); //geht das ? würde nein sagen da schein abstract

phreax
Beiträge: 6
Registriert: 06.11.2009 20:10
Geschlecht: männlich
Studienrichtung: Informatik
Matrikel: 2009
Angestrebter Abschluss: Dipl-Ing.

Re: Info 2 Klausur

Beitrag von phreax » 09.08.2010 15:37

@LR03
Genau, Schein ist abstrakt, es kann keine Instanz erzeugt werden, du kannst das auch mit den Sourcen aus meinem letzten Beitrag ausprobieren.

HTH phreax

tom-8-o
Beiträge: 57
Registriert: 21.05.2008 11:00

Re: Info 2 Klausur

Beitrag von tom-8-o » 09.08.2010 15:38

genau, das müsste so stimmen

Benutzeravatar
meda
Beiträge: 6
Registriert: 05.01.2010 19:20
Geschlecht: männlich
Studienrichtung: Informatik
Matrikel: 2009
Angestrebter Abschluss: Dipl-Ing.

Re: Info 2 Klausur

Beitrag von meda » 09.08.2010 17:48

@phreax:
das mit der statischen und dynamischen Methodensuche ist noch ein wenig anders.

statische methodensuche ist nur zur Compile-zeit relevant. Das heißt, der Compiler führt die statische Methodensuche durch. Schlägt diese fehl, bricht der Compiler ab und spuckt einen Fehler aus.

Bei programmausführung wird ausschließlich die dynamische Methodensuche durchgeführt, es sei denn die Funktion wird als private, static oder final deklariert. in diesen Fällen entscheidet bereits der Compiler, welche Methode aufgerufen werden soll. Macht das Programm dann natürlich auch etwas schneller ;)

Antworten

Zurück zu „2. Semester: Diskussionen“