OOP casting/get & set Methoden

DonPablo

Mitglied
Hallo, ich bin gerade dabei eine Aufgabe zu bearbeiten, in der ich eine Klasse zur Berechnung einer kubischen Funktion schreiben soll.

Die Aufgabe: "Es soll eine Klasse geschrieben werden, die eine kubische Funktion a*x^3 + b* x^2 + c*x + d verwaltet. DieKlasse soll die folgende Schnittstelle implementieren:

Java:
package belegdrei;

public interface KubFunktion {
	public void init (double a, double b, double c, double d);
	public double funktionswert (double x);
	public int berechneNullstellen (double xunten, double xoben);
	public double nullstelleNr (int i);
	public KubFunktion differenziere();
	public KubFunktion addiere(KubFunktion f);
}

Ein Testprogramm könnte wie folgt aussehen:

Java:
package belegdrei;

public class Testprogramm {
	public static void main (String[] args) {
			KubFunktion f=new Kub_name();
			f.init(0,1,2,1);
			
			int anz = f.berechneNullstellen(-2,10); // anz=1
			double nullst=f.nullstelleNr(1); //nullst=1.0
			KubFunktion g=f.differenziere();
			double y=g.funktionswert(5); // y =12.0
			//Ausgabe folgt...
	}
}

Mit der Berechnung an sich habe ich eigentlich keine Probleme, allerdings verstehe ich zum Einen nicht, warum die Funktion f als Objekt der Schnittstelle KubFunktion und nicht direkt als Objekt der Klasse Kub_name initialisiert wird (was bringt das?) und zum Anderen muss ich da ja irgendetwas "casten" damit diese Zuweisung überhaupt klappt. Das muss ich sicher in der von mir geschriebenen Klasse machen, doch wie geh ich da vor? Ich hab auch gelesen, dass ich bei sowas get/set Methoden verwenden muss, kann mir jemand in diesem Zusammenhang erklären, wozu ich die brauche?

Wenn die Funktion "normal" initialisiert würde, wär das alles gar nicht so umständlich...

P.S.: Bisher sieht meine Klasse so aus:

Java:
package belegdrei;

public class Kub_name {

	private double a,b,c,d;
	
	public Kub_name(double a, double b, double c, double d) {
		
		this.a=a;
		this.b=b;
		this.c=c;
		this.d=d;		
	}
	
	public double funktionswert (double x) {
		return (this.a*x*x*x+this.b*x*x+this.c*x+this.d);
	}
	
	public int berechneNullstellen (double xunten, double xoben) {
		return 0;
	}
	
	public double nullstelleNr (int i) {
		return 0;
	}
	
	public KubFunktion differenziere() {
		return null;
	}
	
	public KubFunktion addiere(KubFunktion f){
		return f;
	}
	
	public double getA() {
		return this.a;
	}
	
	public double getB() {
		return this.b;
	}
	
	public double getC() {
		return this.c;
	}
	
	public double getD() {
		return this.d;
	}
	
}
 
Zuletzt bearbeitet:

eRaaaa

Top Contributor
Mit der Berechnung an sich habe ich eigentlich keine Probleme, allerdings verstehe ich zum Einen nicht, warum die Funktion f als Objekt der Schnittstelle KubFunktion und nicht direkt als Objekt der Klasse Kub_name initialisiert wird (was bringt das?)

Man sollte immer gegen das Interface programmieren! Wieso weshalb, lässt sich leicht ergooglen !

und zum Anderen muss ich da ja irgendetwas "casten" damit diese Zuweisung überhaupt klappt.

Nein, deine Klasse Kub_name muss einfach das Interface implementieren (implements KubFunktion)
 
T

Tomate_Salat

Gast
Ein Testprogramm könnte wie folgt aussehen:

Java:
package belegdrei;

public class Testprogramm {
	public static void main (String[] args) {
			KubFunktion f=new Kub_name();
                        // hab das mal gekürzt
	}
}

Mit der Berechnung an sich habe ich eigentlich keine Probleme, allerdings verstehe ich zum Einen nicht, warum die Funktion f als Objekt der Schnittstelle KubFunktion und nicht direkt als Objekt der Klasse Kub_name initialisiert wird (was bringt das?)

Hier hast du recht, es bringt nicht wirklich viel, dass ganze ist aber richtig, so wie es da steht. Ein praktisches Beispiel ist in diesem Post enthalten. Dabei wird einfach vorrausgesetzt dass eine Klasse bestimmte Methoden haben muss, welche dann angesprochen werden.

und zum Anderen muss ich da ja irgendetwas "casten" damit diese Zuweisung überhaupt klappt. Das muss ich sicher in der von mir geschriebenen Klasse machen, doch wie geh ich da vor?

nein, du musst nich extra casten. Casten ginge in diesem falle so

Java:
KubFunktion f = (KubFunktion) new Kub_name();

Ich hab auch gelesen, dass ich bei sowas get/set Methoden verwenden muss, kann mir jemand in diesem Zusammenhang erklären, wozu ich die brauche?

Getter und Setter brauchst du, wenn du private Objekte/Variablen hast, die du zurückliefern oder neu setzen willst. Du brauchst Sie vor allem bei Vererbungen, da Private nicht mitvererbt werden. Damit du dennoch deren Werte ändern kannst, greifst du auf Getter und Setter zurück.

Wenn die Funktion "normal" initialisiert würde, wär das alles gar nicht so umständlich...
Diese initalisierung macht hier wirklich keinen Sinn, aber Sie macht nichts umständlich. Du hast vorgegeben welche Methoden du nehmen sollst und diese rufst du dann einfach auf.

Edit

Man sollte immer gegen das Interface programmieren! Wieso weshalb, lässt sich leicht ergooglen !

ich habs mal gegoogelt und das gefunden: Link (beispiel ist weiter unten angebracht)

Man hätte es aber auch einfach schreiben können: Bei Mehrfachvererbung(Schnittstellen!) :

Initalisierst du auf eine Schnittstelle, die Klasse implementiert aber mind. 2, so stehen nicht die Methoden der anderen Schnittstellen zur verfügung. Dies passiert nicht wenn du auf die Klasse initalisierst.

MFG

Tomate_Salat
 
Zuletzt bearbeitet von einem Moderator:

stareagle

Mitglied
Hallo,

interessant wird das Programmieren gegen Interface eigentlich erst, wenn man Dependency Injection oder Service Fabriken nutzt. Wie sowas aussehen kann, ist z.B. hier nachzulesen: Java ist auch eine Insel, Kapitel 7.3 Service-Factory. Ein relativ bekanntes Bespiel für ein solches Vorgehen ist die Java Persistence API (JPA), aber auch viele andere der im Java Community Process definierten APIs. Der JPA-Standard definiert einen Satz von Interfaces, die Implementierungen stellen dann die eigentliche Funktionalität bereit. Die bekannteste Implementierung der JPA ist z.B. Hibernate, es gibt aber auch Implementierungen von Oracle (TopLink) und Apache (OpenJPA).

Der Vorteil an diesem auf den ersten Blick komplizierten Vorgehen ist, dass du die Implementierung später relativ einfach austauschen kannst. Zum Beispiel wäre es im Falle der JPA kein großes Problem, die genutzte Implementierung von Hibernate auf TopLink umzustellen oder umgekehrt.

In dem Beispiel (Aufgabe in der Schule oder Uni?) kommt das natürlich nicht so richtig rüber. In diesem Fall geht es auch darum, sich von Anfang an einen sauberen Programmierstil anzugewöhnen.

Gruß

Stareagle
 
T

Tomate_Salat

Gast
Nun ja, ich würde normal auf das Objekt initalisieren. Außer wenn ich es z.B. nicht kennen würde (oder halt die ServiceFactory). Vor allem dann, wenn ich mind. 2 implementierungen benutze und jede Methode nutzen will. Weshalb ich hier die initalisierung auf das Interface auch unnötig finde.
 

DonPablo

Mitglied
Okay, vielen Dank schonmal, ich hab tatsächlich vergessen die Schnittstelle zu implementieren, jetzt ist auch die Type-Mismatch Fehlermeldung weg.

Da ich in der Schnittstelle ja eine init Methode vorgegeben habe, muss ich die also auch in meiner Klasse einbauen, ersetzt diese dann den herkömmlichen Konstruktor, den ich bisher immer benutzt habe um die mit übergeben Werte zu verarbeiten? (Das hab ich jetzt den Fehlermeldungen von Eclipse entnommen)
Bei mir sähe das jetzt so aus:

Java:
	public void init(double a, double b, double c, double d) {
		this.a=a;
		this.b=b;
		this.c=c;
		this.d=d;		
	}

Ich werde dann mal sehen wie weit ich damit jetzt komme.
 
T

Tomate_Salat

Gast
wieso sollte die deinen Konstruktor überschreiben? Was passiert wenn Interface und Klasse gleich heisen....ka, aber das passiert ja eigentl. nicht. Du solltest halt aufpassen, dass du in deiner Klasse nicht eine methode so benennst wie die im Interface, wie die prioritätenverteilung ist kann ich dir leider auch nicht sagen. Aber ansonsten erbt einfach deine Klasse die Methode [c]init(...);[/c] und zwingt die Klasse dazu, diese iwie zu deklarieren.

Mfg

Tomate_Salat
 

DonPablo

Mitglied
Okay, sieht ganz gut aus. Ich hab eine set und eine get Methode nur gebraucht, weil es eine Methode addiere() geben soll, mit der eine andere Funktion zu der aktuellen hinzuaddiert werden soll. Da musste ich also eine initiieren und die Koeffizienten auslesen und nach der Addition eben auch ändern können. Unser Professor hat die Angewohnheit Aufgabenstellungen und Sachverhalte nicht richtig zu erläutern sondern einfach "in den Raum zu werfen", das hat mich alles ganz schön verwirrt.

Mittlerweile läft die Klasse aber und es werden alle Nullstellen berechnet und auch korrekt ausgegeben. Bleibt mir nur zu hoffen, dass ich auch alle Szenarien abgedeckt habe.

Vielen Dank nochmal für die Hilfestellung.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Überschreiben von Methoden beim Casting Java Basics - Anfänger-Themen 7
C Casting Java Basics - Anfänger-Themen 8
F Interface Casting Java Basics - Anfänger-Themen 13
N Generics und Casting eines Objekts Java Basics - Anfänger-Themen 1
temi (Down-)Casting Problem Java Basics - Anfänger-Themen 5
X Datentypen Casting?! Java Basics - Anfänger-Themen 7
P Casting Warning bei Iterator Java Basics - Anfänger-Themen 32
H Datentypen Casting objects Java Basics - Anfänger-Themen 29
S Class Casting Allgemein Java Basics - Anfänger-Themen 3
Unsympath OOP Up- und Down-Casting Java Basics - Anfänger-Themen 3
R Casting Problem Java Basics - Anfänger-Themen 15
D Arry Casting Java Basics - Anfänger-Themen 30
B Anfängerprobleme (Casting,...) Java Basics - Anfänger-Themen 5
W Generische Klassen und Casting Java Basics - Anfänger-Themen 6
J Type-Casting Java Basics - Anfänger-Themen 8
T Casting von Objekten Java Basics - Anfänger-Themen 2
G Casting, Ordinalzahl eines Buchstabens? Java Basics - Anfänger-Themen 4
P Casting von Object zu (String || Integer) Java Basics - Anfänger-Themen 8
B Casting variabel gestalten. Java Basics - Anfänger-Themen 9
U casting: ArrayList to String[] Java Basics - Anfänger-Themen 10
DrahtEck Methoden Methoden und Werte Java Basics - Anfänger-Themen 10
emreiu Methoden Rekursive Methoden Runter- & Hochzählen Java Basics - Anfänger-Themen 2
U Funktionale Interfaces mit mehreren abstrakten Methoden? Java Basics - Anfänger-Themen 8
MoxMorris Einige Methoden aus verschiedenen Klassen nacheinander auszuführen läuft seltsam Java Basics - Anfänger-Themen 2
J Argumente in Methoden übergeben Java Basics - Anfänger-Themen 1
XWing Methoden rückgabe Problem? Java Basics - Anfänger-Themen 6
Say Class scope und Instance scope und Getter nur selbstgeschrieben Methoden Java Basics - Anfänger-Themen 11
I Gleiche Klassen und Methoden in unterschiedlichen Projekten nutzen Java Basics - Anfänger-Themen 2
N Klassen Methoden anderer Klassen aufrufen Java Basics - Anfänger-Themen 4
Renjiroo Java Bmi Rechner mit Methoden Java Basics - Anfänger-Themen 4
frager2345 Thread - Methoden synchronized deklarieren Java Basics - Anfänger-Themen 10
M Designentscheidung von Attributen/Methoden im Falle von Vererbung Java Basics - Anfänger-Themen 8
berserkerdq2 Findet eine parallele Verarbeitung in Java bei Threads erst statt, wenn man die Methoden auch synchronized? Und wie sieht bei Conditions aus? Java Basics - Anfänger-Themen 8
Alen123 Erstes Arbeiten mit Methoden. Java Basics - Anfänger-Themen 5
berserkerdq2 Zwei Klassen Erben von der Klasse A, die eine Klasse kann ich an Methoden übergeben, die als Parameter A haben, die andere nicht? Java Basics - Anfänger-Themen 3
M Andere Methoden in anderen Klassen aufrufen Java Basics - Anfänger-Themen 11
L Methoden in anderen Klassen nutzen Java Basics - Anfänger-Themen 6
D Gerade oder ungerade Zahl mittels Methoden Java Basics - Anfänger-Themen 13
M Erklärung von Ausnahmebehandlung in Methoden Java Basics - Anfänger-Themen 13
S Methoden 2 non-static Methoden, trotzdem Fehler "non static method can not be referenced from a static context" Java Basics - Anfänger-Themen 9
L Rekursive Methoden Java Basics - Anfänger-Themen 14
X Wie erreiche ich, dass ein Robot weitere Attribute hat, die nicht materialisiert sind, sondern nur über get/ set-Methoden simuliert sind? Java Basics - Anfänger-Themen 1
C Problem mit mehreren Methoden + Scanner Java Basics - Anfänger-Themen 5
R Frage zu Methoden (Rückgabewert u. ohne.) Java Basics - Anfänger-Themen 2
W Verschiedene Methoden in einer Klasse in der Main aufrufen? Java Basics - Anfänger-Themen 8
W Methoden aufrufen - auch klassenübergreifend? Java Basics - Anfänger-Themen 9
Kotelettklopfer Methoden nicht aufrufbar Java Basics - Anfänger-Themen 34
R Schulaufgabe, Bruache Hilfe mit non-static Methoden Java Basics - Anfänger-Themen 2
S Vererbung Abstrakte Methoden: Wozu das Ganze?! Java Basics - Anfänger-Themen 7
S abstrakte methoden in subclass? Java Basics - Anfänger-Themen 7
S Methoden - Warum int wenn auch void? Java Basics - Anfänger-Themen 3
H Kann man Methoden öfter aufrufen? Java Basics - Anfänger-Themen 2
CptK Interface Functional interface mit mehreren Methoden Java Basics - Anfänger-Themen 6
P Objekt in mehreren Methoden verwenden. Java Basics - Anfänger-Themen 3
M Aufruf von statischen Methoden einer anderen Klasse Java Basics - Anfänger-Themen 15
lougoldi Verkettung von Methoden und Konstruktoren Java Basics - Anfänger-Themen 4
Zeppi OOP Methoden mit einander Verknüpfen Java Basics - Anfänger-Themen 6
A Löschen von Leerzeichen in einem char array ohne methoden Java Basics - Anfänger-Themen 6
A Parametar übergabe zwischen Methoden Java Basics - Anfänger-Themen 26
D Methoden nach einer bestimmten Reihenfolge ausführen. Java Basics - Anfänger-Themen 20
P Wie rufe ich Methoden mit einer Referenz auf eine Klasse||Objekt auf Java Basics - Anfänger-Themen 4
O Attribute die Methoden zählen Java Basics - Anfänger-Themen 5
M Bräuchte Hilfe bei diesen Methoden Java Basics - Anfänger-Themen 4
G Methoden Methoden mit versch. Datentypen Java Basics - Anfänger-Themen 1
T Ich habe eine Variabel die nicht Methoden übergreifend ist. Kann mir jemand Helfen :) Java Basics - Anfänger-Themen 5
Junger_Basileus Celsius -> Fahrenheit / Strukturierung in statischen Methoden Java Basics - Anfänger-Themen 7
J Verschachtelte Methoden Java Basics - Anfänger-Themen 9
H Methoden in anderen Methoden aufrufen Java Basics - Anfänger-Themen 6
Kawastori Hilfe bei Methoden Übung Java Basics - Anfänger-Themen 6
veryck Methoden Rekursive Methoden mit Rückgabeparameter Java Basics - Anfänger-Themen 9
C Methoden können nicht auf Instanzvariable der Klasse zugreifen Java Basics - Anfänger-Themen 3
P Methoden aufrufen - Fehler Java Basics - Anfänger-Themen 20
M konzeptuelle Frage: In welcher Klasse definiert man am Besten Methoden, die die Kommunikation mit dem User regeln? Java Basics - Anfänger-Themen 8
C eigene Methoden erstellen (Instanzmethoden) Java Basics - Anfänger-Themen 7
P Klasse hat keinen Zugriff auf getter/setter-Methoden eines Objektes Java Basics - Anfänger-Themen 9
B Methoden Methoden haben kein Zugriff auf variablen Java Basics - Anfänger-Themen 4
M Gettter/Setter Methoden Klassenfelder kapselung und zugriff? Java Basics - Anfänger-Themen 1
C Fernseher-Aufgabe (Methoden, Klassen und Objekte) Java Basics - Anfänger-Themen 63
C Taschenrechner (switch) in Taschenrechner mit Methoden umwandeln Java Basics - Anfänger-Themen 115
H Methoden in großen Klassen gruppieren oder auslagern? Java Basics - Anfänger-Themen 10
G Generics Methoden Java Basics - Anfänger-Themen 7
L Test-Methoden schreiben Java Basics - Anfänger-Themen 13
S throws bei Methoden Java Basics - Anfänger-Themen 4
L Best Practice Code Refactoring für Methoden mit fast gleicher Aufbau Java Basics - Anfänger-Themen 6
I Greedy Methode Methoden nutzen Java Basics - Anfänger-Themen 3
C Methoden-Parameter ist Interface Java Basics - Anfänger-Themen 5
A Klassen und methoden Java Basics - Anfänger-Themen 15
S Übergabe von Arrays an Methoden Java Basics - Anfänger-Themen 20
L Methoden Wie Löse ich ext Methoden Aufruf Fehler? Java Basics - Anfänger-Themen 3
A Bankweverwaltung mit Klassen und Methoden Java Basics - Anfänger-Themen 14
B Methoden Ausgeben Aufgabe Java Basics - Anfänger-Themen 15
M Aufsplitten von Methoden in andere Klassen Java Basics - Anfänger-Themen 2
T Methoden Verständnis Java Basics - Anfänger-Themen 14
M Feste Reihenfolge von dem Ablauf von Methoden Java Basics - Anfänger-Themen 7
G Java Abstrakte Methoden Java Basics - Anfänger-Themen 2
N Klassen Warum kann meine Klasse nicht auf Methoden der anderen Klasse zugreifen? Java Basics - Anfänger-Themen 6
Ich lerne Java. Methoden Mehrere Methoden mit Punkt Java Basics - Anfänger-Themen 45
Kirby.exe Methoden Aufrufe Java Basics - Anfänger-Themen 4
G Objekte in Methoden? Java Basics - Anfänger-Themen 13
W OOP Warenlager mit Array(Konstruktor, Methoden) Java Basics - Anfänger-Themen 39

Ähnliche Java Themen

Neue Themen


Oben