You are not logged in.

hamena314

Zerschmetterling

  • "hamena314" is male

Posts: 2,032

Date of registration: Aug 31st 2003

Location: Hannover

Occupation: Informatikstudent (d'uh)

21

Saturday, June 16th 2007, 9:55pm

Mir ist da noch eine lustige Idee gekommen:
Und zwar möchte ich wieder Code sparen, ich habe (vereinfacht) 3 Klassen.

Vehicle, Bike und Car. Zuerst war in Bike und Car jeweils ein Enum mit einem Fahrzeugtypen (RENNRAD, TANDEM, ... , KLEINWAGEN, MITTELKLASSE, ...) und einer Methode typGenerieren().
Diese Methode weist im Konstruktor der Instanz per Zufall einen Typen zu.
Jetzt ist diese Methode allerdings quasi gleich in Bike und Car, lediglich die Enum-Werte ändern sich. Daher habe ich versucht, sowohl die Enums, als auch die Methode nach Vehicle auszulagern, damit ich sie zentral habe und mir den Mehrfachcode spare.
Mein Problem ist jetzt, dass ich nicht weiss, wie ich die Methode so allgemein schreiben kann, dass man sie quasi beliebig in Bike oder Car benutzen kann.
Also:

Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public class Vehicle{

public enum BikeType{
RENNRAD, TANDEM,...;
}

public enum CarType{
KLEINWAGEN, MITTELKLASSE,...;
}

public [ENUM?] typGenerieren([ENUM?] abc){
int zufall;
zufall = (int)(Math.random()*3) + 1;
if (zufall == 1){
...

------------------------------------------------

public class Bike{

public Bike(){
typGenerieren(Vehicle.BikeType.RENNRAD);
}
}


Hat jemand eine Idee, wie das funktionieren könnte oder einen Anstoss in die richtige Richtung? Hab' schon an Generics gedacht, aber bin mir unsicher, ob das nicht vielleicht noch einfacher geht.

Besten Dank im Vorraus!

HAVE PHUN!
Nicht der Wind bestimmt die Richtung, sondern das Segel! (Lao Xiang, China)

Finn MacCool

Junior Schreiberling

Posts: 195

Date of registration: Oct 7th 2006

22

Sunday, June 17th 2007, 5:35pm

öhmm, mit "Sorgen Sie dann dafür, dass die „Fahrrad“- und „Auto“-
Unterklassen sich in den geerbten Eigenschaften gleichen, aber auch
jeweils mindestens eine zusätzliche spezielle Eigenschaft haben" ist doch
nicht gemeint, dass die eigenschaften die gleichen werte haben
müssen und fahrrad und auto können doch ruhig die gleiche spezielle
eigenschaft haben, wenn sie nur nicht in fahrzeug drin ist, oder?
So berichte uns weiter, sagte Diarmuid Donn, um der Liebe Gottes willen.
Fürwahr, sagte Finn, ich will nicht.

  • "Joachim" is male

Posts: 2,863

Date of registration: Dec 11th 2001

Location: Hämelerwald

Occupation: Wissenschaftlicher Mitarbeiter (Forschungszentrum L3S, TU Braunschweig)

23

Sunday, June 17th 2007, 5:51pm

Quoted

Original von hamena314
Vehicle, Bike und Car. Zuerst war in Bike und Car jeweils ein Enum mit einem Fahrzeugtypen (RENNRAD, TANDEM, ... , KLEINWAGEN, MITTELKLASSE, ...) und einer Methode typGenerieren().
Diese Methode weist im Konstruktor der Instanz per Zufall einen Typen zu.
Jetzt ist diese Methode allerdings quasi gleich in Bike und Car, lediglich die Enum-Werte ändern sich. Daher habe ich versucht, sowohl die Enums, als auch die Methode nach Vehicle auszulagern, damit ich sie zentral habe und mir den Mehrfachcode spare.
Ergänze Vehicle um eine als "static" deklarierte Methode getPossibleTypes(), die das jeweilige Enum-Objekt zurückliefert. Die Methode typGenerieren ruft dann intern this.getPossibleTypes() auf. Die Unterklassen Bike und Car überschreiben getPossibleTypes() dann entsprechend.

Bei dem obigen Vorschlag gehe ich davon aus, daß auch Vehicle über eine Methode typGenerieren() nebst zugehörigem getPossibleTypes() verfügt. Sollte dies nicht erwünscht sein, werden diesen beiden Methoden in einer neu zu erstellenden abstrakten Oberklasse von Bike und Car (und Unterklasse von Vehicle) implementiert.

Vielleicht ist es aber auch schlauer, auf die Enums zu verzichten, und für jeden Typ eine neue Unterklasse anzulegen. Bike und Car ist dann jeweils eine entsprechende Factory-Klasse zugeordnet.
The purpose of computing is insight, not numbers.
Richard Hamming, 1962

This post has been edited 1 times, last edit by "Joachim" (Jun 17th 2007, 5:54pm)


Markus

the one and only Unterstrich!

Posts: 2,571

Date of registration: Oct 9th 2003

24

Sunday, June 17th 2007, 5:53pm

Nein, die gleichen Werte sollen sie natürlich nicht haben, nur die gleichen Variablen.
Und natürlich können Fahrrad und Auto die gleichen Eigenschaften haben, in wie fern das jedoch Sinn macht, hängt von den entsprechenden Eigenschaften ab (Wenn zB die Klassen Fahrrad und Auto beide nur gleiche Eigenschaften etc. aufweisen stellt sich natürlich die Frage, wozu dann zwei Klassen ;) )
Charmant sein? Hab ich längst aufgegeben. Glaubt mir doch eh keiner...

Finn MacCool

Junior Schreiberling

Posts: 195

Date of registration: Oct 7th 2006

25

Sunday, June 17th 2007, 6:29pm

um zu zeigen, dass wir sowas programmieren können, natürlich :D
So berichte uns weiter, sagte Diarmuid Donn, um der Liebe Gottes willen.
Fürwahr, sagte Finn, ich will nicht.

GentleGiant

Hamster Inside(R)

  • "GentleGiant" is male

Posts: 283

Date of registration: Oct 3rd 2006

Location: Bad Oeynhausen

Occupation: Software-Entwickler bei Diamant Software

26

Sunday, June 17th 2007, 8:10pm

Wenn Fahrrad und Auto die gleichen Eigenschaften hätten, könnte man diese in dieser Aufgabe im Zweifelsfall sogar in die Fahrzeugklasse stecken. Das würde mehr Sinn ergeben.
Schwieriger würde es dann aber, wenn man ein Motorrad und ein LKW hat und diese Eigenschaften da nicht vorkommen, dann lässt man das mit der Fahrzeugklasse besser sein.
Bräuchte jetzt aber mal selbst kurz Hilfe. Hab dazu nichts gescheites gefunden. Wohin mit den Konstruktoren und vor allen Dingen für welche Eigenschaften sind die dann jeweils zuständig?

This post has been edited 3 times, last edit by "GentleGiant" (Jun 17th 2007, 8:14pm)


Markus

the one and only Unterstrich!

Posts: 2,571

Date of registration: Oct 9th 2003

27

Sunday, June 17th 2007, 8:29pm

Welche Konstruktoren? In Java kannst du die ja eh nicht vererben...
Charmant sein? Hab ich längst aufgegeben. Glaubt mir doch eh keiner...