Objektorientierte Programmierung: Erben von 2 Klassen - wie ist korrekte Vorgehensweise?

n0x0n

Mitglied
Hallo!


Dass in Java jede Klasse (außer Object) von genau einer Klasse erbt, weiß ich. Aber wie würde man das folgende Beispiel "richtig" Programmieren? Es bezieht sich auf die objektorientierte Programmierung. Ich hoffe, das ist erlaubt. ^^

Bei dem Beispiel werde ich mich sehr kurz halten und nur die benötigten Methoden aufschreiben um die Übersicht zu bewahren. Insbesondere sinnvolle Konstruktoren seien implementiert.

Die abstrakte Klasse RealFunction beinhaltet funktionen die von einer beliebigen Menge in die reellen Zahlen abbildet. In Java-Worten: von Obejct nach Double.
Java:
public abstract class RealFunction {
public abstract Double valueAt(Object x);
}

Die abstrakte Klasse RealFunction beinhaltet funktionen die von den reellen Zahlen in die reellen Zahlen abbildet. Sie beinhaltet zusätzlich die Methode integral, die die Funktion auf der Menge [lowerBound,upperBound] integriert. (z.B. via Romberg-Integral).
Java:
public abstract class UnivariateRealFunction extends RealFunction {
public Double valueAt(Object x){
if( ! (f instanceof Double) ){
mach irgendwas (z.B. Exception werfen)
}
return this.valueAt( (Double) x );
}
public abstract Double valueAt(Double x);
public Double integral(double lowerBound, double upperBound){ .... }
}


Die Klasse EuklidischeNorm (die die euklidische Norm von Object o darstellt (o muss dazu in einem passenden Format vorliegen) Euklidische Norm ? Wikipedia) würde von RealFunktion erben - denn es ist ja eine reelle Funktion.

Die Klasse Betrag ist eine univariate reelle Funktion. Insbesondere kann das Integral auf einem beschränkten Intervall berechnet werden. -> erbt von UnivariateRealFunction
Auf der anderen Seite ist der Betrag nicht weiter als die euklidische Norm auf den reellen Zahlen -> erbt von EuklidischeNorm.



Mit anderen Worten: die Klasse Betrag soll von 2 Klassen erben?!
Wie würde man dies "richtig/schön" programmieren?


Vielen Dank fürs lesen.
 

Marco13

Top Contributor
Ein Gedanke
Java:
// Interface mit Generics
interface UnivariateRealFunction<T>
{
    Double apply(T t);
}

// Beispiel
UnivariateRealFunction<Double> sine = new UnivariateRealFunction<Double>()
{
    @Override
    public Double apply(Double t) { return Math.sin(t); }
}


// Integral: 
interface Range<T> {
    T min();
    T max();
}

UnivariateRealFunction<Range<Double>> someIntegral = new GeneralDoubleIntegrator(sine, 0.001);
Double value = someIntegral.apply(Range.of(-1.0, 1.0));
Schick?
 

n0x0n

Mitglied
Danke für die Antworten.


Hab mir die deutsche Version angeschaut.^^
Wenn ich das recht verstanden habe, dann lautet deine Antwort: Je nach Problemstellung erbt Betrag entweder von EuklidischeNorm oder von UnivariateRealFunction. Wenn Betrag von EuklidischeNorm erben und das Integral berechnet werden soll, dann muss integral(...) extra implementiert werden.

Ein Gedanke
...
Schick?

Wow, ich versteh gar nichts.^^
Die Konstruktion
Java:
interface Range<T>
(Interface mit <T>) ist mir unbekannt. Kannst du mir vielleicht sagen wo das (auf einfache Art) erklärt wird?
 
Zuletzt bearbeitet:

HimBromBeere

Top Contributor
Generics sind - wie der Name schon sagt - allgemeine Klassen, die in Abhängigkeit eines Datentypes die slebe Sache auf unterschieldiche Art machen. Bsp. reele Zahlen
für jede reele Zahl soll es eine Funktion addiere() geben. Für double-Werte soll eine neue double als Ergebnis entstehen, für ints soll ein int entstehen. Deswegen nun aber eine neue Klasse zu erfinden, nur weil die Datentypen anders sich, wäre aber quatsch, und darum hat man generics erfunden.
Verwendung finden diese übrigens in allen Arten von Listen oder Tabellen (eine Liste ist demnach nichts weiter als eine Sammlung von Daten, welchen Typ die Daten haben, legst du einmal zur Konstrktion fest). Das sieht dann so aus:
Java:
ArrayList<Integer> a = new ArrayList<Integer>();
Schonmal gesehen?
 

Marco13

Top Contributor
Ja, Range<T> bedeutet: Ein Intervall von zwei Elementen vom Typ "T", wobei "T" eben für "Double" stehen könnte, oder für irgendwas anderes, wofür sich "min" und "max" sinnvoll implementieren lassen. (Eigentlich könnte man das T noch durch Comparable einschränken, aber ist wohl nicht so wichtig)

War auch nur ein Gedanke: Ein Integral ist ja auch nur eine Funktion (die eine andere Funktion "enthält", und ein Intervall auf einen Double-Wert abbildet)
 

n0x0n

Mitglied
Jetzt hab ich doch noch eine Frage.

Wenn das Integral als eine eigene Funktion angesehen wird, dann würde ich dasselbe für Summe, Produkt, etc. machen. Am Ende erhalte ich Klassen, die
einen Konstruktor (evtl mehrere) bei dem das Integral/Summe/... berechnet wird und
die Methode zugehörige Methode apply (bzw. valueAt)
enthalten. Mit anderen Worten fokussiere ich mich auf die Prozeduren/Methoden und nicht auf die Objekte. Das ist ja grade nicht Sinn von OOP.

Hab ich irgendetwas falsch verstanden? Was?
 

Marco13

Top Contributor
Nochmal: Das war nur ein spontaner Gedanke. Ob es für deine Zwecke Sinn macht, musst du dir überlegen. Grundsätzlich kann man ja ALLES über Funktionen abbilden (deswegen gibt's auch funktionale Sprachen ;) ). Man könnte auch umgekehrt polemisch sagen: Warum willst du mit einer objektorientierten Sprache Funktionen bauen?

Aber ehrlich gesagt sehe ich nicht, was da dagegen spricht, bzw. was du mit "Prozeduren/Methoden und nicht auf die Objekte fokussieren" meintest, und wo da deine Bedenken liegen.
 

DanZ

Bekanntes Mitglied
Mit anderen Worten fokussiere ich mich auf die Prozeduren/Methoden und nicht auf die Objekte. Das ist ja grade nicht Sinn von OOP./QUOTE]

Methoden gehören genauso zu OOP wie Klassen und Instanzen. Der "Trick" ist immer den richtigen Abstraktionsgrad zu finden, also die verschiedenen Aspekten mit den richtigen Konstrukten(Attribute/Methoden/Klassen/Instanzen etc.) darzustellen. Wie das allgemein geht kann dir niemand in einem Forum erklären. Darüber kann man Bücher schreiben und trotzdem gehört noch eine Menge Kreativität, Fingerspitzengefühl und so dazu, das kommt einfach mit der Zeit.
Für eine konkrete Antwort müsstest du noch mal weitgehender und konkreter beschreiben was du vor hast. Für ein Beispielproblem kann man zwar eine Lösung finden, ob diese Lösung im Gesamtkonzept aber sinnvoll ist weiß man nicht :)
 

Landei

Top Contributor
Wow, ich versteh gar nichts.^^
Die Konstruktion
Java:
interface Range<T>
(Interface mit <T>) ist mir unbekannt. Kannst du mir vielleicht sagen wo das (auf einfache Art) erklärt wird?

In der Java-Welt spricht man zwar von "Generics", du solltest aber auch den allgemeinen Begriff kennen, und zwar "Typ-Polymorphismus". Wikipedia nennt es Parametrische Polymorphie, was es meiner Meinung nach nicht so gut trifft.

Die Grundidee ist einfach: Wenn ich z.B. eine Längen-Funktion für eine Liste schreiben will, ist der Code dafür völlig gleich, egal ob es sich um eine String-Liste, eine Zahlen-Liste oder eine Liste mit grünen Elefanten handelt. Deshalb abstrahiert man vom konkreten Typ, und gibt ihn einfach als eine Art "Argument" (einen Typparameter) für die Klasse oder das Interface mit, während man innerhalb der Klasse nur mit seinem "Variablennamen" hantiert (im obigen Beispiel wäre das [c]T[/c]). Man kann natürlich noch gewisse Einschränkungen machen wie "T muss eine Subklasse von Number sein" oder so.
 
Zuletzt bearbeitet:

n0x0n

Mitglied
Der "Trick" ist immer den richtigen Abstraktionsgrad zu finden, also die verschiedenen Aspekten mit den richtigen Konstrukten(Attribute/Methoden/Klassen/Instanzen etc.) darzustellen. Wie das allgemein geht kann dir niemand in einem Forum erklären. Darüber kann man Bücher schreiben und trotzdem gehört noch eine Menge Kreativität, Fingerspitzengefühl und so dazu, das kommt einfach mit der Zeit.
Ich denke, das trifft es auf den Punkt.

Eine konkrete Anwendug für das Beispiel gibt es nicht. Ich habe eine Übungsaufgabe (schon fertig), bei der ich die abstrakte Klasse RealFunction verwende. Sie steht für Funktionen, die von Double nach Double abbilden. Dieses Konstrukt wollte ich zum besseren Verständnis von OOP/Java (theoretisch) auf beliebe Funktionen erweiteren...

Aber ehrlich gesagt sehe ich nicht, was da dagegen spricht, bzw. was du mit "Prozeduren/Methoden und nicht auf die Objekte fokussieren" meintest, und wo da deine Bedenken liegen.
Ich habe ein Beispiel konstruiert, bei der dieser Stil unangepasst ist und mich zu sehr darauf konzentriert. => Mein Fehler! ^^
Werd wohl einfach noch Üben müssen und Erfahrung sammeln.

Das mit den Generics hab ich auch verstanden. Mal sehen, wann ich das anwenden kann. :D
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Rechnen mit Brüchen - objektorientierte Programmierung Java Basics - Anfänger-Themen 18
D Objektorientierte Programmierung Java Basics - Anfänger-Themen 13
Q Objektorientierte Programmierung Java Basics - Anfänger-Themen 17
T Objektorientierte Programmierung - Kein Plan wieso das nicht funktioniert! Java Basics - Anfänger-Themen 6
W objektorientierte Programmierung Java Basics - Anfänger-Themen 25
W objektorientierte Programmierung - String in andere Klasse übergeben Java Basics - Anfänger-Themen 13
T Objektorientierte Programmierung, わからない です Java Basics - Anfänger-Themen 6
S Objektorientierte Programmierung Java Basics - Anfänger-Themen 21
C Objektorientierte Programmierung Java Basics - Anfänger-Themen 11
X Objektorientierte Java Programmierung - 3 Fragen zum Code Java Basics - Anfänger-Themen 5
M objektorientierte programmierung Java Basics - Anfänger-Themen 5
J Objektorientierte Programmierung Java Basics - Anfänger-Themen 5
B Java Objektorientierte Datenbank - Assoziation Hilfe Java Basics - Anfänger-Themen 4
S OOP Objektorientierte Frage Java Basics - Anfänger-Themen 5
M Java Programmierung Aufgabe Anfänger Java Basics - Anfänger-Themen 1
F Automat-Programmierung Java Basics - Anfänger-Themen 30
N Lambdas, Methodenref, fkt Programmierung ? Java Basics - Anfänger-Themen 10
districon Dynamisch Programmierung/Backtracking/Memoization Java Basics - Anfänger-Themen 3
S Buchstaben Programmierung Bedeutung Java Basics - Anfänger-Themen 4
S Hilfe bei Programmierung einer Hotelabrechnung Java Basics - Anfänger-Themen 5
enjoykimii Strukturierte Programmierung Hilfe Java Basics - Anfänger-Themen 29
A Frage zur programmierung Java Basics - Anfänger-Themen 12
Nerdinfekt Programmieranfänger, Schwierigkeiten mit der Programmierung Java Basics - Anfänger-Themen 6
U Compiler-Fehler Programmierung einer Drehkugel Java Basics - Anfänger-Themen 8
L Programmierung mit Hash Java Basics - Anfänger-Themen 3
C Wie habt Ihr angefangen mit der Java Programmierung, ohne Programmiervorkenntnisse Java Basics - Anfänger-Themen 8
J Problem bei der Programmierung eines Tannenbaums Java Basics - Anfänger-Themen 9
S GUI-Programmierung Sudoku-Rätsel lösen Java Basics - Anfänger-Themen 1
B Fibonacci Zahlen dynamische Programmierung Java Basics - Anfänger-Themen 7
S Programmierung simulieren - aber wie?! Java Basics - Anfänger-Themen 3
H Java Programmierung Java Basics - Anfänger-Themen 3
W Problem bei Programmierung von Monte-Carlo-Integration Java Basics - Anfänger-Themen 12
D Guten Tag mache gerade eine Umschulung zum FiSi war leider jetzt 2 Wochen Krank und wir hatten Prozendurale Programmierung. Java Basics - Anfänger-Themen 3
F Attribute bei Objektorientierter Programmierung Java Basics - Anfänger-Themen 11
F Ich brauche Hilfe bei Objektorientierter Programmierung... Java Basics - Anfänger-Themen 19
F Problem beim entfernen von mehreren Listenelementen auf einmal (Programmierung des Spiels Arschloch) Java Basics - Anfänger-Themen 1
J Texte für Java Programmierung besser verstehen? Java Basics - Anfänger-Themen 2
C GUI Programmierung unter Windows mit Java womit? Java Basics - Anfänger-Themen 11
D Collections Aufgaben Java-Programmierung Überforderung Java Basics - Anfänger-Themen 36
A GUI Programmierung mit Textfield Java Basics - Anfänger-Themen 3
J Programmierung Quiz Spiel Java Basics - Anfänger-Themen 3
J Programmierung Quiz Spiel Java Basics - Anfänger-Themen 2
U Brauche Hilfe bei Programmierung einer Produktdatenbank App Java Basics - Anfänger-Themen 4
L Dynamische Programmierung Java Basics - Anfänger-Themen 0
J Verschieden Fragen über Java Programmierung Java Basics - Anfänger-Themen 3
A Methoden Habe ein Problem bei folgender Programmierung Java Basics - Anfänger-Themen 15
slejden Erste Schritte Frage zur OOP (objektorientierten Programmierung Java Basics - Anfänger-Themen 4
V Threads Nebenläufige Programmierung Java Basics - Anfänger-Themen 6
V Nebenläufige Programmierung Java Basics - Anfänger-Themen 5
Henri Paare Frage über Java Programmierung Java Basics - Anfänger-Themen 10
S Programmierung eines Geldwechselautomaten! Java Basics - Anfänger-Themen 2
R Einige Neulingsfragen (Wrapper, GUI-Programmierung) Java Basics - Anfänger-Themen 4
D JavaBeans und die visuelle Programmierung Java Basics - Anfänger-Themen 2
M Dringend Experten für Scala-Play basierte Programmierung!!!! Java Basics - Anfänger-Themen 0
Z Programmierung eines Stacks Java Basics - Anfänger-Themen 19
A Programmierung herangehensweise Java Basics - Anfänger-Themen 9
G 3D-Spiele-Programmierung Java Basics - Anfänger-Themen 3
I Programmierung-Hausaufgabe: Hilfe benötigt Java Basics - Anfänger-Themen 8
R Kann jemand diese Java Programmierung machen? Versteh ich leider nicht Java Basics - Anfänger-Themen 17
T Nachhilfe JAVA Programmierung Java Basics - Anfänger-Themen 1
R Schaffe es nicht Random-Programmierung zu vollenden. Wo liegt der Fehler in diesem Code? Java Basics - Anfänger-Themen 13
N Socket-Programmierung Java Basics - Anfänger-Themen 4
kaoZ Android Programmierung / Erstellen einer neuen Instanz Java Basics - Anfänger-Themen 2
O OOP Input & Output in der GUI-Programmierung Java Basics - Anfänger-Themen 2
O Java Grafik-Programmierung? Java Basics - Anfänger-Themen 16
F Fehler bei Array und Index Programmierung Java Basics - Anfänger-Themen 18
K Objektorientierten Programmierung Java Basics - Anfänger-Themen 3
R Einstieg in Programmierung Java Basics - Anfänger-Themen 8
W Problem bei MineSweeper Programmierung Java Basics - Anfänger-Themen 10
D Best Practise für Programmierung Java Basics - Anfänger-Themen 7
D Erste Schritte Einstieg in die Java Spiel Programmierung Java Basics - Anfänger-Themen 7
E Algorithmen und Programmierung - Datum und Zeit ausgeben? Java Basics - Anfänger-Themen 8
Grejak OOP Einstieg in Objekt-Orientierte-Programmierung Java Basics - Anfänger-Themen 3
D Frage zu Bit Operatoren in der Programmierung Java Basics - Anfänger-Themen 9
U Geräte-Programmierung ? Java Basics - Anfänger-Themen 15
S 2 kurz Fragen zur Möglichkeit der Programmierung Java Basics - Anfänger-Themen 7
J Allgemeine Fragen zur Programmierung Java Basics - Anfänger-Themen 36
N Grafische Programmierung mit jeweils anderen Bildern bei versch. Ergebnissen Java Basics - Anfänger-Themen 9
M Gui Programmierung Java Basics - Anfänger-Themen 21
J Spielevorschläge für Programmierung Java Basics - Anfänger-Themen 3
O Eisenbahn-Programmierung Java Basics - Anfänger-Themen 8
S Schlechte Programmierung Java Basics - Anfänger-Themen 5
O Probleme bei OO-Programmierung mit Vererbung Java Basics - Anfänger-Themen 18
M Programmierung kürzen??? Java Basics - Anfänger-Themen 5
N Umstieg auf objektorintierte Programmierung Java Basics - Anfänger-Themen 2
N Probleme mit meiner Programmierung Java Basics - Anfänger-Themen 5
M Meine erste Java Programmierung funzt nicht :-( Java Basics - Anfänger-Themen 34
H Programmierung Ampelsteuerung Java Basics - Anfänger-Themen 4
J [Erledigt] Applet Programmierung Java Basics - Anfänger-Themen 4
T Gui Programmierung lernen Java Basics - Anfänger-Themen 3
E Toolkit (Scanner) Programmierung Java Basics - Anfänger-Themen 5
D Programmierung Profi Java Basics - Anfänger-Themen 18
G Problem bei Programmierung Java Basics - Anfänger-Themen 15
G Problem bei Programmierung Java Basics - Anfänger-Themen 2
G thread programmierung für ANFÄNGER Java Basics - Anfänger-Themen 2
S generic programmierung "ne:w T[X]" Java Basics - Anfänger-Themen 2
A Einstieg in die Programmierung Java Basics - Anfänger-Themen 20
I Frage wegen Wörterbuch Programmierung Java Basics - Anfänger-Themen 13
X Programmierung mit geometrischen Figuren Java Basics - Anfänger-Themen 3
G Opjektorientierte Programmierung (OOP). einfach für euch Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben