# Verständigungsproblem einer Angabe



## Shizmo (16. Jan 2016)

Hallo ich hab hier mal einen Teil einer Aufgabe, mein Problem ist, dass ich nicht mal die Angabe verstehe.



Spoiler: Aufgabe



Es ist eine Klasse VectorSet zu erstellen, die mehrere Vector-Objekte enthält. Diese Objekte können vom Typ Vector2D oder vom Typ DNA sein, wobei davon ausgegangen werden kann, dass in ein VectorSet-Objekt immer nur Objekte _eines_ Typs eingefügt werden. Die Klasse Vector als Oberklasse ist vorgegeben:

public class Vector
{
  public Vector ()  {}
  public Vector add (Vector v)  {return v;}
  public Vector div (int n)  {return new Vector();}
  public double distance (Vector v)  {return 0;}
}

*Teil 1*
Nun sind davon die zwei Klassen Vector2D und DNA abzuleiten, die Methoden zu überschreiben, geeignete Konstruktoren zu erstellen und toString zu überschreiben, sodass folgende Anweisungsfolge

    Vector v = new Vector ();
    v = v.add (new Vector2D (1, 2));
    v = v.add (new Vector2D (2, 3));
    System.out.println (v.div (2));
    v = new DNA ("CCCCGGGGAAAATTTT");
    v = v.add (new DNA ("CGATCGATCGATCGAT"));
    System.out.println (v.div (2));

folgende Ausgabe erzeugt:

(1.5,2.5)
CCCCCGGGCGAACGAT

Bei Vector2D soll add die zwei Komponenten eines 2-dimensionalen Vektors einfach addieren, also (1,2)+(2,3)=(1+2,2+3)=(3,5) und div den Vektor dividieren, also (3,5)/2=(3/2,5/2)=(1.5,2.5)


Also die Vector-Klasse ist genau so vorgegeben. Heißt das, dass ich daran nichts ändern, hinzufügen darf?

Dann erstelle ich eine Klasse Vector2D mit extends Vector, so dass sie eine Unterklasse ist.
In dieser Klasse brauch ich dann zwei Instanzvariablen und einen Konstruktor der die "befüllt", zB x und y.

Okay hier mein Problem:
v = v.add (new Vector2D (1, 2));

Hier wird ein Objekt Vector2D erstellt mit x=1 und y=2
Wie überlade ich jetzt das add? Da das v ja ein Vector ist und kein Vector2D, muss ich die add in Vector überladen oder kann ich dass auch irgendwie in der Unterklasse. Vielleicht hat jemand ein Beispiel.

Und das Ergebnis wird dann im Objekt Vector v gespeichert und dann kommt nochmal ein:
v = v.add (new Vector2D (2, 3));
Das heißt v wird erweitert? Also am besten ein Array? Darf ich die Vector Klasse anrühren, wenn die ja schon so vorgegeben ist?

Und warum Vector2D ? Warum 2Dimensional?

LG


----------



## kneitzel (16. Jan 2016)

So richtig viel Sinn macht das alles irgendwie nicht. Meine Vermutung wäre, dass die erste Zeile diese hätte sein sollen:


```
Vector v = new Vector2D ();
```

Ansonsten würden ja immer die Funktionen von Vector ausgeführt, die ja nicht angepasst werden sollen.

Konrad


----------



## Shizmo (17. Jan 2016)

Nein das mit der ersten Zeile passt schon so. Dadurch wird das Vector Object ein Vector2D Object. Aber wenn ich 2mal die Methode add aufrufe, dann sind das ja zwei verschiedene Objekte (Zeile 2 & 3), wie kann ich die dann wieder gemeinsam dividieren, wo und wie werden die gespeichert?


----------



## kneitzel (17. Jan 2016)

Ich denke wir reden aneinander vorbei. In der Aufgabe ist als Code vorgegeben

```
Vector v = new Vector ();
v = v.add (new Vector2D (1, 2));
v = v.add (new Vector2D (2, 3));
System.out.println (v.div (2));
v = new DNA ("CCCCGGGGAAAATTTT");
v = v.add (new DNA ("CGATCGATCGATCGAT"));
System.out.println (v.div (2));
```

Und da die erste Zeile erzeugt ein Vector Objekt und das kann nicht richtig sein. Aber da Du hier von der Erstellung eines Vector2D Objekts redest, wirst Du Dich wohl schlicht verschrieben haben.

Denn die erste Zeile muss ein Vector2D Objekt erstellen und kein Vector Objekt.

Und Du kannst in den Methoden doch machen was Du willst. Du kannst die Werte des Vector2D, die Du erstellt hast, ja anpassen. Du kannst aber auch wieder ein neues Vector2D Objekt erstellen und zurückgeben. Da hast Du volle Handlungsfreiheit.

Konrad


----------



## Tarrew (17. Jan 2016)

Das passt schon mit der ersten Zeile. In der zweiten Zeile wird dann ein Vector2D Objekt zurückgegeben und von da an wird immer die add-Methode der Klasse Vector2D aufgerufen.

Hab das auch mal probiert und sieht alles richtig aus:


----------



## Shizmo (17. Jan 2016)

Ja, mein add funktioniert mittlerweile auch, so gehts weiter:

Die Methode _distance_ soll die euklidische Distanz berechnen, also:





Woher nimmt dann die Methode distance wieder die Werte? Die aktuellen sind (3,5), dass ist klar, aber (1,2)? Soll man den allerersten Wert zwischenspeichern oder um was geht es da?


----------



## kneitzel (17. Jan 2016)

Ach so, stimmt. Die add Methode ist ja als public Vector add (Vector v) {return v;} definiert. Das hatte ich übersehen.


----------



## Tarrew (17. Jan 2016)

Du nimmst die Werte vom this-Objekt und von dem Objekt das du an die Methode übergibst.


----------



## Shizmo (17. Jan 2016)

Hab übersehen, dass ja ein Parameter mit übergeben wird.

Also ich hab soweit alles und bin nun bei Teil2.

Hier mal die ganze Angabe: Klick

Es geht um einen Clustering-Algorithmus.
Hier hab ich momentan mal gar keine Idee mehr, wie ich das anfangen soll.
Freue mich über jeden Tipp.


----------

