Abstrakte Klasse bilden?

Status
Nicht offen für weitere Antworten.

kossy

Bekanntes Mitglied
Hallo nochmal !

Ich habe nochmal eine Frage zu einer anderen Aufgabe. Ich würde gerne wissen, ob mein Lösungsansatz korrekt ist?

Hier ist erstmal der Quellcode:

Java:
public class Funktion1{

       public double f1(double x) {
             return x*x -1;
       }

       public void gebeWertelisteAus(double startpunkt, double endpunkt,
                                                double Schrittweite) {

            System.out.format(" x= f(x) ");

            for (double x = startpunkt; x { endpunkt; x += schrittweite) {
                  System.out.format("%8.2f %8.2f\n", x, f1(x));
            }

       }

}


Java:
public class Funktion2{

         public double f2(double x) {
                return x*x -1;
         }

         public void gebeWertelisteAus(double startpunkt, double endpunkt, 
                                                  double schrittweite) {

                System.out.format(" x= f(x) ");

                for (double x = startpunkt; x { endpunkt; x += schrittweite) {

                      System.out.format("%8.2f %8.2f\n", x, f2(x));
                }

         }

}


Java:
public class Hauptprogramm {

               public static void main (String [] args) {

                     Funktion1 f1 = new Funktion1();
                     Funktion2 f2 = new Funktion2();

                     f1.gebeWertelisteAus(1, 5, 0.2);
                     f2.gebeWertelisteAus(1, 5, 0.2);

              }

}

Meine Aufgabe soll es nun sein, die Klassen zu verbessern. Dabei soll ich in Richtung einer einfachen Erweiterbarkeit (einfacher Einbau einer neuen Funktion) denken.

Mein Lösungsansatz wäre nun, eine abstrakte Oberklasse zu bilden die die Funktion

Java:
public void gebeWertelisteAus(double startpunkt, double endpunkt, 
                                                  double schrittweite) {

                  System.out.format(" x= f(x) ");

                  for (double x = startpunkt; x { endpunkt; x += schrittweite) {
                          System.out.format("%8.2f %8.2f\n", x, f2(x));
                  }
}

dort einzubetten. Diese Funktion sollen dann die Klassen Funktion1 und Funktion2 erben bzw. überschreiben. Kann ich hier sonst noch etwas optimieren? Es macht wohl wenig Sinn auch noch die Methoden f1() und f2() in die abstrakte Klasse mit einzubauen oder? Im übrigen ist das auch wieder son tolles Beispiel aus einer Vorlesung für Javagrundlagen.

Die vollständige Lösung wäre dann:

Java:
abstract class Basisklasse{

                public void gebeWertelisteAus(double startpunkt, double endpunkt, 
                                                         double schrittweite) {

                        System.out.format(" x= f(x) ");

                        for (double x = startpunkt; x { endpunkt; x += schrittweite) {
                               System.out.format("%8.2f %8.2f\n", x, f2(x));
                        }
                }

}

Java:
public class Funktion1 extends Basisklasse{

                public double f1(double x) {
                        return x*x -1;
                }

                public void gebeWertelisteAus(double startpunkt, double endpunkt, 
                                                         double schrittweite) {

                        System.out.format(" x= f(x) ");

                        for (double x = startpunkt; x { endpunkt; x += schrittweite) {
                              System.out.format("%8.2f %8.2f\n", x, f1(x));
                        }
                 }

}


Java:
public class Funktion2 extends Basisklasse{

               public double f2(double x) {
                     return x*x -1;
               }

               public void gebeWertelisteAus(double startpunkt, double endpunkt, 
                                                        double schrittweite) {

                      System.out.format(" x= f(x) ");

                      for (double x = startpunkt; x { endpunkt; x += schrittweite) {
                             System.out.format("%8.2f %8.2f\n", x, f2(x));
                      }

               }

}

Java:
public class Hauptprogramm {

               public static void main (String [] args) {

                      Funktion1 f1 = new Funktion1();
                      Funktion2 f2 = new Funktion2();

                      f1.gebeWertelisteAus(1, 5, 0.2);
                      f2.gebeWertelisteAus(1, 5, 0.2);

               }

}

So ich habe alle Codezeilen nochmal kenntlich gemacht und besser eingerückt. Danke für die Mithilfe!
 
Zuletzt bearbeitet:

ARadauer

Top Contributor
nein so nicht...
fällt dir auf dass du in den drei klassen ziehmlihc viel code verdopplung hast? gebeWertelisteAus ist ja immer gleich...

gebeWertelisteAus aus Funktion1 und Funktion2 raus, und eine
Java:
 public abstrct double f2(double x);
in die Basisklasse rein
 

kossy

Bekanntes Mitglied
Also Du meinst so:

Java:
abstract class Basisklasse{
 
                abstract public double f1(double x);

                abstract public double f2(double x);

                public void gebeWertelisteAus(double startpunkt, double endpunkt, 
                                                         double schrittweite) {

                        System.out.format(" x= f(x) ");

                        for (double x = startpunkt; x { endpunkt; x += schrittweite) {
                               System.out.format("%8.2f %8.2f\n", x, f2(x));
                        }
                }

}

Java:
public class Funktion1 extends Basisklasse{

                public double f1(double x) {
                        return x*x -1;
                }

}


Java:
public class Funktion2 extends Basisklasse{

               public double f2(double x) {
                     return x*x -1;
               }

}

Java:
public class Hauptprogramm {

               public static void main (String [] args) {

                      Funktion1 f1 = new Funktion1();
                      Funktion2 f2 = new Funktion2();

                      f1.gebeWertelisteAus(1, 5, 0.2);
                      f2.gebeWertelisteAus(1, 5, 0.2);

               }

}
 

ARadauer

Top Contributor
ein Beispiel, das ähnlich zu deinem ist:

Java:
package abstracttest;

public abstract class BasisFunktion {
   public abstract double berechne(double d);
   
   public void gibErgebnisAus(double d){
      System.out.println("Ergebnis: "+ berechne(d));
   }   

}
Java:
package abstracttest;

public class MalZweiFunktion extends BasisFunktion{

   @Override
   public double berechne(double d) {
      return d*2;
   }

}
Java:
package abstracttest;

public class MalDreiFunktion extends BasisFunktion{

   @Override
   public double berechne(double d) {
      return d*3;
   }

}
Java:
package abstracttest;

public class Test {

   /**
    * @param args
    */
   public static void main(String[] args) {
      BasisFunktion f1 = new MalZweiFunktion();
      BasisFunktion f2 = new MalDreiFunktion();
      
      System.out.println(f1.berechne(2));
      System.out.println(f2.berechne(2));

   }

}

schau dir das mal genau an... Polymorphismus... sollte man verstehen...
 

ARadauer

Top Contributor
dein Programm dürfte nicht funktionieren, da Funktion1 f2 nicht implementiert und Funktion2 f1...

ausserdem benutzt deine Basisklasse nur die f2... mhn stimmt nicht ganz

der sinn dahinter ist, das man eine abstracte Methode declariert und diese benutzt. Aber was jetzt in dieser Methode konkret passiert (bzw vielmer "wie" etwas passiert) entscheidet die abgeleitete Klasse...

In deinem bestimmten Fall, werden Kurven anhand von Funktionen berechnet und die genaue Funktion wird in jeder abgeleiteten Klasse definiert...
 

kossy

Bekanntes Mitglied
Ich glaube nun habe ich es verstanden, danke für Deine Zeit und Mithilfe !

Java:
abstract class Basisklasse{
 
                abstract public double berechneFunktion(double x);

                public void gebeWertelisteAus(double startpunkt, double endpunkt, 
                                                         double schrittweite) {

                        System.out.format(" x= f(x) ");

                        for (double x = startpunkt; x { endpunkt; x += schrittweite) {
                               System.out.format("%8.2f %8.2f\n", x, f2(x));
                        }
                }

}

Java:
public class Funktion1 extends Basisklasse{

                public double berechneFunktion(double x) {
                        return x*x -1;
                }

}


Java:
public class Funktion2 extends Basisklasse{

               public double berechneFunktion(double x) {
                     return x*x -1;
               }

}

Java:
public class Hauptprogramm {

               public static void main (String [] args) {

                      Funktion1 f1 = new Funktion1();
                      Funktion2 f2 = new Funktion2();

                      f1.gebeWertelisteAus(1, 5, 0.2);
                      f2.gebeWertelisteAus(1, 5, 0.2);

               }

}
 

ARadauer

Top Contributor
perfekt ... fast..

Java:
for (double x = startpunkt; x { endpunkt; x += schrittweite) {
                               System.out.format("%8.2f %8.2f\n", x, berechneFunktion(x));
                        }
 

kossy

Bekanntes Mitglied
schau dir das mal genau an... Polymorphismus... sollte man verstehen...

Ich muss nochmal kurz nachhaken. Unter Polymorphismus versteht man doch, dass Objekte von Subklassen sich genauso verhalten können, wie die Objekte ihrer Basisklassen. Die Subklassen erben alle Datenfelder und Protokolle ihrer Basisklassen.

Ist das so korrekt?
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
E abstrakte Klasse implementiert ein Interface Java Basics - Anfänger-Themen 40
T Abstrakte Klasse und Interfaces Java Basics - Anfänger-Themen 12
D Abstrakte Klasse, Konstruktorkette, Attribute setzen Java Basics - Anfänger-Themen 12
J abstrakte Methode in Klasse mit Rückgabetyp der abgeleiteten Klasse Java Basics - Anfänger-Themen 5
I Abstrakte Klasse - static Attribute deklarieren Java Basics - Anfänger-Themen 14
T Übungsaufgabe abstrakte Klasse Java Basics - Anfänger-Themen 21
kilopack15 Beziehung Interface - (abstrakte) Klasse -Unterklasse Java Basics - Anfänger-Themen 3
K Abstrakte Klasse: vererbte Klasse; instance of? Java Basics - Anfänger-Themen 26
N Vererbung Abstrakte Klasse stateful Java Basics - Anfänger-Themen 3
W Abstrakte Klasse mit Variable? Java Basics - Anfänger-Themen 2
A Vererbung Abstrakte Klasse mit Methode die Objekte der Subklassen benutzt? Java Basics - Anfänger-Themen 7
W Abstrakte und konkrete Klasse Java Basics - Anfänger-Themen 4
F Abstrakte Klasse doch zum "Teil" instanzieren? Java Basics - Anfänger-Themen 4
M Statische Methoden in Interface/Abstrakte Klasse Java Basics - Anfänger-Themen 6
N Datentypen abstrakte Klasse wird instanziert Java Basics - Anfänger-Themen 3
propra Interface - abstrakte Klasse Java Basics - Anfänger-Themen 18
N Abstrakte Klasse Java Basics - Anfänger-Themen 28
L Über abstrakte Klasse auf eine Klasse zugreifen? Java Basics - Anfänger-Themen 6
D Wann genau abstrakte Klasse und wann ein Interface verwenden? Java Basics - Anfänger-Themen 4
StupidAttack Abstrakte Methoden in nicht-abstrakter Methode in abstrakter Klasse Java Basics - Anfänger-Themen 6
T Abstrakte Klasse Java Basics - Anfänger-Themen 3
S Abstrakte Klasse Java Basics - Anfänger-Themen 5
K Abstrakte Klasse vs. Interface Java Basics - Anfänger-Themen 21
S Abstrakte Klasse, festlegen, dass Methode verändert werden muss. Java Basics - Anfänger-Themen 4
H Warum Java? | Abstrakte Klasse = Modul? Java Basics - Anfänger-Themen 20
J abstrakte klasse und methode super Java Basics - Anfänger-Themen 2
H Eine Abstrakte Klasse muss. Java Basics - Anfänger-Themen 7
G Abstrakte Klasse "Point" Java Basics - Anfänger-Themen 2
G Abstrakte Methode in gleicher Klasse aufrufen Java Basics - Anfänger-Themen 5
M abstrakte Klasse Java Basics - Anfänger-Themen 3
F Abstrakte Klasse: Konstruktor vs init() Java Basics - Anfänger-Themen 13
G Abstrakte Klasse (was passiert hier) Java Basics - Anfänger-Themen 3
G Interface oder Abstrakte Klasse? Java Basics - Anfänger-Themen 3
Acha Unterschied Interface - abstrakte Klasse Java Basics - Anfänger-Themen 4
B OOP: abstrakte klasse implementiert interface Java Basics - Anfänger-Themen 3
D Abstrakte Klasse Graphics Java Basics - Anfänger-Themen 3
A Abstrakte Klasse Java Basics - Anfänger-Themen 3
G abstrakte klasse Java Basics - Anfänger-Themen 6
F Abstrakte Klasse Baum Java Basics - Anfänger-Themen 6
J Methodenaufrufe abstrakte Klassen, Interfaces Java Basics - Anfänger-Themen 17
M Abstrakte Klassen - Notation Java Basics - Anfänger-Themen 9
S Vererbung Abstrakte Methoden: Wozu das Ganze?! Java Basics - Anfänger-Themen 7
S abstrakte methoden in subclass? Java Basics - Anfänger-Themen 7
G Abstrakte Klassen Java Basics - Anfänger-Themen 11
G Java Abstrakte Methoden Java Basics - Anfänger-Themen 2
L Abstrakte Typen und Schnittstellen Java Basics - Anfänger-Themen 19
S Abstrakte Methode nutzen Java Basics - Anfänger-Themen 9
J Objekte und Abstrakte Klassen Java Basics - Anfänger-Themen 2
J Java Interface/abstrakte Klassen Java Basics - Anfänger-Themen 2
M Erste Schritte Prüfungsbeispiel: Interface / abstrakte Klassen Java Basics - Anfänger-Themen 8
A Interface Abstrakte Interface Methode kann nicht benutzt werden Java Basics - Anfänger-Themen 10
S Gehaltsberechnung (Vererbung, abstrakte Methoden) Java Basics - Anfänger-Themen 6
S Datentypen Abstrakte Datentypen Java Basics - Anfänger-Themen 0
A Abstrakte Datentypen - Methode delete Java Basics - Anfänger-Themen 6
D Abstrakte Klassen Verständniss Frage Java Basics - Anfänger-Themen 4
D Methoden Abstrakte Methoden Java Basics - Anfänger-Themen 3
D Interface Interfaces und abstrakte Klassen implementieren Java Basics - Anfänger-Themen 4
B Abstrakte Klassen Java Basics - Anfänger-Themen 7
C Abstrakte und virtuelle Methoden in Java Java Basics - Anfänger-Themen 4
E verdeckte abstrakte Methode sinnvoll? Java Basics - Anfänger-Themen 7
S Abstrakte Klassen Java Basics - Anfänger-Themen 2
C Dynamische Referenz & abstrakte Klassen Java Basics - Anfänger-Themen 3
V Interface Interfaces und abstrakte Klassen Java Basics - Anfänger-Themen 3
H Abstrakte Basisklasse Verständnisproblem! Java Basics - Anfänger-Themen 8
G Abstrakte Klassen - theoretische Frage Java Basics - Anfänger-Themen 2
OnDemand Abstrakte Klassen Java Basics - Anfänger-Themen 4
T OOP Abstrakte Klassen und ihre Kinder: wie läuft das? Java Basics - Anfänger-Themen 3
M Abstrakte Klassen Java Basics - Anfänger-Themen 2
J Interfaces Abstrakte Klassen Java Basics - Anfänger-Themen 15
M Interface und Abstrakte Klassen Java Basics - Anfänger-Themen 12
D Methoden abstrakte Methoden und Rückgabewerte Java Basics - Anfänger-Themen 2
B Abstrakte Methode vs. Interface Java Basics - Anfänger-Themen 2
R Namenskonvention abstrakte Klassen Java Basics - Anfänger-Themen 6
C OOP Objektstruktur: abstrakte Klassen Java Basics - Anfänger-Themen 3
V Vererbung Abstrakte Methode Java Basics - Anfänger-Themen 3
T OOP abstrakte klassen - methoden Java Basics - Anfänger-Themen 8
M Abstrakte Klassen Java Basics - Anfänger-Themen 21
J Welchen Sinn haben abstrakte Methoden? Java Basics - Anfänger-Themen 4
D Abstrakte Klassen und Interfaces als Paramter in Funktionen Java Basics - Anfänger-Themen 3
T Interfaces: Braucht man abstrakte Klassen eigentlich noch? Java Basics - Anfänger-Themen 3
T OO, Konstruktor, abstrakte Methoden Java Basics - Anfänger-Themen 13
T Abstrakte Klassen Java Basics - Anfänger-Themen 6
C abstrakte Klassen mögen mich nicht... Java Basics - Anfänger-Themen 2
I Abstrakte Klassen Java Basics - Anfänger-Themen 8
D Zusammenfassung von Klassen (Vererbung? Abstrakte Klass? ...?) Java Basics - Anfänger-Themen 8
G Abstrakte Klassen und Methoden Java Basics - Anfänger-Themen 3
C Schnittstellen und Abstrakte Klassen Java Basics - Anfänger-Themen 3
I Abstrakte Klassen Java Basics - Anfänger-Themen 22
G Abstrakte Klassen ? Java Basics - Anfänger-Themen 9
nadoria abstrakte Klassen Java Basics - Anfänger-Themen 6
M Unterscheid Abstrakte Klassen/Interface Klassen? Java Basics - Anfänger-Themen 7
T abstrakte Klassen? Java Basics - Anfänger-Themen 2
G konkretes beispiel: interface hier besser als abstrakte kl. Java Basics - Anfänger-Themen 4
M abstrakte klassen und interfaces Java Basics - Anfänger-Themen 2
L abstrakte Methode nicht implementiert! Java Basics - Anfänger-Themen 5
M abstrakte klassen / Schnittstellen Java Basics - Anfänger-Themen 4
H abstrakte Klassen, Interfaces Java Basics - Anfänger-Themen 13
R Interfaces durch abstrakte Klassen ersetzbar? Java Basics - Anfänger-Themen 8
A Eine abstrakte Methode static machen? Java Basics - Anfänger-Themen 4
A Abstrakte Klassen und Interfaces Java Basics - Anfänger-Themen 11

Ähnliche Java Themen

Neue Themen


Oben