2010-07-13 17 views
5

Von MasterExam:java IS-A-Beziehung Prüfung Frage Verwirrung

Welche Aussagen wahr sind? (Wählen Sie alle zutreffenden )

A. ist-eine Beziehung immer auf Vererbung
B verlassen. ist-eine Beziehung immer auf Instanzvariablen
C verlassen. ist-eine Beziehung immer erforderlich bei mindestens zwei Klassenarten
. ist eine Beziehung immer auf Polymorphismus
E verlassen. ist-ein-Beziehung sind immer fest

Richtige Antworten gekoppelt: A, C, D

Ich sehe nicht, wie jeder von A, C oder D korrekt sind.

Ein Objekt Objekt IS-A Objekt. Ein String-Objekt IS-A String. Es gibt nur einen Klassentyp in jeder dieser Anweisungen und keine Vererbung oder Polymorphie.

Ist meine Begründung falsch oder sind die Antworten falsch?

+1

Gibt der Kontext, in dem dies angezeigt wird, eine Beziehung zwischen Klassen an? –

+0

Was ich eingegeben habe, ist die ganze Frage, Anfang bis Ende. – CodeClimber

+0

@ck - vielen Dank für diesen hilfreichen Beitrag – CodeClimber

Antwort

1

Ihre Begründung ist leicht aus, da diese Beziehung für Klassen, nicht für Objekte gilt.

Ein String IS-A Objekt seit String erbt von Object. Ähnlich ist ein FileOutputStream IS-A OutputStream IS-A Object.

IS-A ist eine Beziehung zwischen Klassen, keine zwischen Klassen und Objekten.

+0

Können Sie es ausarbeiten? Ich sehe die Relevanz der Unterscheidung zwischen Klassen und Objekten nicht. Ein FileOutputStream IS-A OutputStream IS-A-Objekt - Vererbung. Auch ein FileOutputStream IS-A FileOutputStream - keine Vererbung. Antwort A besagt: "ist-eine Beziehung IMMER auf Erbschaft verlassen". – CodeClimber

+1

@dairemac: Eine 'IS-A'-Beziehung wird beispielsweise zwischen Entitäten in einem ER-Diagramm modelliert - diese Beziehungen * werden immer * Vererbung, wenn sie z. UML. Sie zeichnen in diesem Diagramm keine Kreise und deklarieren alles als eigene Unterklasse. In Bezug auf Loskovs Substitutionsprinzip kann es sinnvoll sein, es beim Programmieren so zu behandeln, aber keine Klasse erbt von sich selbst. Deshalb ist »Foo IS-A Foo« rein unsinnig. Außerdem sollte die Unterscheidung zwischen Klassen und Objekten schon zu Beginn Ihrer OOP-Klassen deutlich gemacht worden sein. – Joey

+0

Danke für die Antwort Johannes. Sie setzen IS-A mit der Vererbung gleich, wobei ich IS-A mit allem, was true zurückgibt, mit dem Schlüsselwort instanceof gleichgesetzt hätte. Vielleicht hast du Recht. Ich bin mir natürlich der Unterscheidung zwischen Klassen und Objekten durchaus bewusst - ich habe lediglich die Relevanz der Unterscheidung zu dieser Frage abgefragt. – CodeClimber

4

"Beziehung" bezieht sich auf eine Beziehung zwischen zwei Klassen. Eine is-a-Beziehung ist eine Art von Beziehung, die Vererbung verwendet (im Gegensatz zu beispielsweise has-a, die Komposition verwendet). Zum Beispiel ist ein String ein Objekt. Eine Klasse kann nicht von sich selbst erben, was C bedeutet. Als Randnotiz könnte eine Klasse eine Zusammensetzung (has-a) mit sich selbst haben. Z.B. Eine Person könnte eine andere Person als Mutterfeld haben.

Bei jeder Vererbung kann eine Instanz der Unterklasse als Instanz der Oberklasse verwendet werden. Das ist Polymorphismus, was bedeutet, dass D auch richtig ist.

+0

Vielleicht haben Sie Recht, das wichtige Wort hier ist "Beziehung", die zwei verschiedene Klassen vorschlägt. Ich bin immer noch nicht 100% überzeugt, aber ich werde dies als die akzeptierte Antwort bezeichnen. Wir sagen also: Ein Hund IS-A Dog - wahr. Ein Hund ist ein Tier - wahr. Ein Hund hat eine IS-A-Beziehung mit Hund - falsch. Ein Hund hat eine IS-A-Beziehung mit Animal - True. Nebenbei, meine Kommentare erscheinen ohne die Zeilenumbrüche, die ich eingegeben habe, warum ist das? – CodeClimber

+0

@dairemac - bezogen auf die Kommentare line-break, das ist nur, wie es ist ... – cjk

+0

Wie unten angegeben - ich ändere mein Verständnis von IS-A. Zuvor hätte ich eine IS-A-Beziehung mit dem Schlüsselwort "instanceof" gleichgesetzt, d. H. Wenn (d-Instanz von Hund) dann d's-Klasse IS-A-Hund ist. Ich sage jetzt, dass dies nicht unbedingt der Fall ist. Ich werde nun IS-A mit Vererbung gleichsetzen. Früher hätte ich gesagt, dass "Dog IS-A Dog" wahr ist, aber von nun an werde ich sagen, dass das falsch ist. Danke für das Feedback. – CodeClimber

1

Sie müssen es ein bisschen sehen anders aus:

  • Eine Katze ist-ein Tier
  • Ein Auto hat-a Motor
  • A String ist-ein Objekt
  • Ein String hat eine Char-Array

Versuchen Sie es so zu sehen, es sollte jetzt klarer werden.

+0

Nicht überzeugt, um ehrlich zu sein. 1. Eine Katze ist ein Tier. 2. Eine Katze ist eine Katze. Option A besagt, dass "ist-eine Beziehung IMMER auf Vererbung beruhen". Vererbung gilt in 1, aber nicht in 2. – CodeClimber

+0

Für die Zusammensetzung ist dies möglich: ein Vater ** hat-a ** Vater. Aber für die Vererbung (is-a) berücksichtigen wir nur verschiedene Typen. ** ist-ein ** mit gleichen Typen ist immer wahr und vielleicht, in der Theorie, erbt jeder Typ sich. –

+0

"in der Theorie, jeder Typ erbt sich" - meiner Meinung nach falsch. "is-a mit den gleichen Typen ist immer wahr" - das ist genau das, was ich sage! – CodeClimber

0

Entschuldigung, Ihre Rationale ist falsch. Sie sprechen über zwei verschiedene Klassen. Zum Beispiel ist ein String ein Objekt.

3

A. Dass ein String ein String ist, ist ... eine Tautologie, die offensichtlich ist. Wenn Sie sich jedoch die API-Dokumentation ansehen, finden Sie, dass ein java.lang.String auch ein java.lang.Object ist. Tatsächlich erben alle Java-Klassen von java.lang.Object. Sie erben grundlegende Eigenschaften von Object und fügen einige eigene hinzu. Genau darum geht es bei der Beziehung "Ist-Eine".

C. Wieder ist die Tautologie über jedes Objekt selbst von Interesse für Zen-Buddhisten, aber nicht für Sprachdesigner und andere Computerwissenschaftler. Um eine "ist-a" -Beziehung zu haben, brauchen Sie zwei verschiedene Klassen.

D. Ich bin mir nicht so sicher hier. Wenn ich gefragt würde, würde ich sagen, Polymorphismus hängt von der "ist-a" -Beziehung ab, nicht umgekehrt.

+0

Zen-Buddhisten sind mehr an einem Objekt interessiert als an sich selbst :-) –

+0

Ich musste "Tautologie" im Wörterbuch nachschlagen! Eine Definition ist "eine Aussage, die IMMER WAHR ist". Die Prüfungsfrage fragt, welche Antworten TRUE sind und die gelieferten Antworten enthalten das Wort IMMER. Als Computerwissenschaftler benutze ich Logik und Logik diktiert, dass, wenn etwas offensichtlich wahr ist, es immer noch wahr ist! Wie in einer anderen Antwort hier angegeben, ist vielleicht das Schlüsselwort hier "Beziehung", die zwei verschiedene Klassen impliziert, aber es ist nicht 100% klar. Danke für die Rückmeldung. – CodeClimber

+0

Dennoch ist Informatik keine Philosophie. Dass eine Katze eine Katze ist, ist vom Standpunkt der Software aus nicht relevant/interessant/signifikant. Oder anders gesagt: Richtig zu sein hilft dir nicht, wenn dein Prof sich entscheidet, deine Antwort nicht anzunehmen. –

1

Ich denke, die Punkte A & C sind jetzt ziemlich klar ... in Bezug auf D.through kann es technisch möglich sein, eine Klasse ohne Instanzverhalten oder Eigenschaft zu erweitern .. (leer oder vielleicht nur mit statischen Elementen). ..aber das im Prinzip den Zweck der "Erweiterung" von Klassen besiegt, wie Sie Verhalten/Funktionalität von Klassen weiter oben im Vererbungsbaum erben wollen. Also würde ich sagen Option D. ist richtig (fast) :) (wenn wir nicht zu technisch gehen) .btw kann dies eine interessante Diskussion sein.