OOP Optimales Zusammenspiel von 3 Klassen?

LILA

Aktives Mitglied
Hallo Forum,

ich habe 3 Klassen. Eine "Basisklasse", von der meine "EinlesenKlasse" erbt. Meine dritte Klasse heisst "ObjektBilden". In dieser Klasse möchte ich von der "EinlesenKlasse" eine Instanz bilden.

Der Sinn der Sache: In der Basisklasse wird allgemein der Zugriff auf Excel-Files mit der JExcel-API geregelt. In der "EinlesenKlasse" spezifiere ich den Zugriff genauer und in der "ObjektBilden"-Klasse bilde ich ein Objekt von der "EinlesenKlasse" und sage, wieviele Spalten eingelesen werden sollen und aus welcher Datei. Nach dem Start des Programms sollen dann die in der "ObjektBilden"-Klasse festgelegten Spalten in der Konsole dargestellt werden.

Bisher habe ich noch Probleme die Modifizierer optimal zu setzen, bzw. auf Variablen in anderen Klassen optimal zuzugreifen. Brauche ich da immer Getter und Setter, auch wenn ich von der Klasse erbe ("EinlesenKlasse" erbt ja von "Basisklasse"). Wie könnte ich dieses kleine Programm verbessern?
Welche Modifizierer nutze ich wann am Besten?

Besonders wichtig wäre mir, aus diesen Klassen ein Beispiel für das optimale Zusammenspiel verschiedener Klassen in der objektorientierten Programmierung (also Vererbung; Kapeselung...) zu erhalten.

Vielen Dank mal im Voraus für alle, die schon mehr Know-How im Zusammenhang der Objektorientierten Programmierung haben.

Hier mal meine Klassen:

Basisklasse:
Java:
//In dieser Klasse wird generell der Zugriff auf Excel-Dokumente geregelt.
//Eine bestimmte Anzahl an Excel-Zellen wird in einen String geschrieben

package beispiel;

import java.io.IOException;
import jxl.*;
import java.io.File;
import jxl.read.biff.BiffException;

public class Basisklasse 
{
    private Workbook exceldateiEingabe;
    
        public void readExceldatei() throws IOException, BiffException
        {
            //Workbook erstellen
            exceldateiEingabe = Workbook.getWorkbook(new File(datei));
      
        }

        public void closeExceldatei()
        {
            exceldateiEingabe.close();
        }
}

EinlesenKlasse:
Java:
package beispiel;

import java.io.IOException;
import jxl.*;
import java.io.File;
import jxl.read.biff.BiffException;

public class EinlesenKlasse extends Basisklasse
{
    //Anzahl der Spalten die eingelesen werden sollen
    private int var1;
    //Datei die eingelesen werden soll
    private String datei;

    //parameterloser Standardkonstruktor
    public EinlesenKlasse()
    {
    }

    //Konstruktor
    public EinlesenKlasse(int varA, String varB)
    {
        this.var1 = varA;
        this.datei = varB;
    }

    //Set-Methoden
    public void setVar1(int varA)
    {
        this.var1 = varA;
    }

    public void setVar2(String varB)
    {
        this.datei = varB;
    }

    //Get-Methoden
    public int getVar1()
    {
        return var1;
    }

    public String getDatei()
    {
        return datei;
    }

    //Hier wird die Funktion der Basisklasse überschrieben
    public void readExceldatei()
    {
            //Festlegen welches Tabellenblatt verwendet werden soll
            Sheet tabelle = exceldateiEingabe.getSheet(0);

            //Gesamte Spalte durchlaufen und Werte in String schreiben
            for (int y = 0; y < tabelle.getRows(); y++)
            {
                String a = tabelle.getCell(0, y).getContents();
                String b = tabelle.getCell(1, y).getContents();
                System.out.println(a + " | " + b);
            }
    }
}

ObjektBilden:
Java:
package beispiel;

import java.io.IOException;
import jxl.read.biff.BiffException;

public class ObjektBilden
{
    //Hauptmethode eines Java-Programms = Startpunkt für Programm
    public static void main(String[] args) throws IOException, BiffException
    {
        //paarameterloser Standardkonstruktor wird aufgerufen
        //EinlesenKlasse einlesen = new EinlesenKlasse();
        
        //Konstruktor mit Parametern wird aufgerufen
        EinlesenKlasse einlesen2 = new EinlesenKlasse(2, "C:/.../einfacheExcelDatei.xls");
        einlesen2.readExceldatei();
        einlesen2.closeExceldatei();
    }
}
 

Ein Keks

Bekanntes Mitglied
naja mach das ganze doch erstmal lauffähig...
[JAVA=53]Sheet tabelle = exceldateiEingabe.getSheet(0);[/code]
exceldateiEingabe ist null und nicht sichtbar in EinlesenKlasse also vorher noch
Code:
super.readExceldatei()
aufrufen und für exceldateiEingabe einen getter erstellen und benutzen

desweiteren wäre es ganz sinnvoll gescheite Namen zu benutzen und nicht var1, varA oder ähnliches

ach und wenn du ne methode überschreibst kann es ganz nützlich sein ein @Override drüber zu schreiben das verrät dir manchmal noch ein paar fehler ;)

ob Basisklasse so wirklich einen Sinn hat ist allerdings etwas fragwürdig
 

LILA

Aktives Mitglied
Hallo Keks,

du hast mir wirklich sehr geholfen. Irgendwie stand ich am Schlauch.

Noch ein paar Fragen:

Dieses
Java:
super....();
brauche ich immer wenn ich eine Funktion überschreibe, oder um die Methode wie sie bisher war aufzurufen, oder?

Was genau sind deine Bedenken, dass du dir überlegst, ob "Basisklasse" einen Sinn macht? Ich wollte dieses ganze Beispiel nur machen, um mir selbst mehr Klar darüber zu werden, was es mir objektorientierter Programmierung auf sich hat.
Meinst du sie macht jetzt Sinn?

So habe ich meine Klassen jetzt abgeändert:
Meinst du sie entsprechen nun den Richtlinien objektorientierter Programmierung?
Könnte ich noch irgendwas verbessern. Ich denke die Kapselung passt.
Brauche ich vielleicht noch einen Konstruktor in der Basisklasse?

Basisklasse:
Java:
//In dieser Klasse wird generell der Zugriff auf Excel-Dokumente geregelt.
//Eine bestimmte Anzahl an Excel-Zellen wird in einen String geschrieben

package beispiel;

import java.io.IOException;
import jxl.*;
import java.io.File;
import jxl.read.biff.BiffException;

public class Basisklasse 
{
    private String datei;
    private Workbook exceldateiEingabe;

    //Getter für die Exceldatei
    public Workbook getExceldateiEingabe()
    {
        return exceldateiEingabe;
    }

    //Getter für Datei die eingelesen werden soll
    public String getDatei()
    {
        return datei;
    }

    //Setter für Datei die eingelesen werden soll
    public void setDatei(String datei)
    {
        this.datei = datei;
    }

    public void readExceldatei() throws IOException, BiffException
    {
        //Workbook erstellen
        exceldateiEingabe = Workbook.getWorkbook(new File(datei));
    }

    public void closeExceldatei()
    {
        exceldateiEingabe.close();
    }
}

EinlesenKlasse:
Java:
package beispiel;

import java.io.IOException;
import jxl.*;
import java.io.File;
import jxl.read.biff.BiffException;

public class EinlesenKlasse extends Basisklasse
{
    //Anzahl der Spalten die eingelesen werden sollen
    private int spaltenAnz;

    //parameterloser Standardkonstruktor
    public EinlesenKlasse()
    {
    }

    //Konstruktor
    public EinlesenKlasse(int spaltenAnz)
    {
        this.spaltenAnz = spaltenAnz;
    }

    //Setter
    public void setSpaltenAnz(int spaltenAnz)
    {
        this.spaltenAnz = spaltenAnz;
    }

    //Getter
    public int getSpaltenAnz()
    {
        return spaltenAnz;
    }

    //Hier wird die Funktion der Basisklasse überschrieben
    @Override
    public void readExceldatei() throws IOException, BiffException
    {
        //Macht die Methode sichtbar
        super.readExceldatei();

            //Festlegen welches Tabellenblatt verwendet werden soll
            Sheet tabelle = getExceldateiEingabe().getSheet(0);

            //Gesamte Spalte durchlaufen und Werte in String schreiben
            for (int y = 0; y < tabelle.getRows(); y++)
            {
                for (int x = 0; x < this.getSpaltenAnz(); x++)
                {
                    String a = tabelle.getCell(x, y).getContents();
                    System.out.print(a);
                    System.out.print(" | ");
                }

                System.out.println(" ");
            }
    }
}

ObjektBilden
Java:
package beispiel;

import java.io.IOException;
import jxl.read.biff.BiffException;

public class ObjektBilden
{
    //Hauptmethode eines Java-Programms = Startpunkt für Programm
    public static void main(String[] args) throws IOException, BiffException
    {
        //paarameterloser Standardkonstruktor wird aufgerufen
        //EinlesenKlasse einlesen = new EinlesenKlasse();
        
        //Konstruktor mit Parametern wird aufgerufen
        EinlesenKlasse einlesen2 = new EinlesenKlasse(2);
        einlesen2.setDatei("C:/.../einfacheExcelDatei.xls");
        einlesen2.readExceldatei();
        einlesen2.closeExceldatei();
    }
}
 
Zuletzt bearbeitet:

Ein Keks

Bekanntes Mitglied
LILA hat gesagt.:
Dieses
Code:
super....();
brauche ich immer wenn ich eine Funktion überschreibe, oder um die Methode wie sie bisher war aufzurufen, oder?
ja
Code:
super.methode
dient dazu die Methode wie sie bisher war aufzurufen wenn du sie überschreibst.

Was genau sind deine Bedenken, dass du dir überlegst, ob "Basisklasse" einen Sinn macht?
es hatte so ein bisschen den Anschein als wäre sie nur dazu da um von etwas Ableiten zu können, nur des Ableiten wegens ohne einen anderen Nutzen^^
Aber als Beispiel ist sie in Ordnung. Wobei ich noch für nen Basiskonstruktor wäre da ja auf jedenfall ne Datei benötigt wird.

Wichtig ist ja auch dass du statt
Java:
EinlesenKlasse einlesen2 = new EinlesenKlasse(2);
auch
Java:
BasisKlasse einlesen2 = new EinlesenKlasse(2);
schreiben könntest, da EinlesenKlasse eine BasisKlasse ist (da sie von BasisKlasse erbt).

Das Ganze könntest du jetzt noch weiterführen, indem du noch ein interface Reader machst, welches von BasisKlasse implementiert wird.
Java:
public interface Reader{
    public void closeExceldatei()
    public void readExceldatei() throws IOException, BiffException
}
Dann könnte man auch eine Implementierung mit POI machen und beide gleich benutzen (was ja der Sinn von Schnittstellen ist)
ob das dann sinnvoll ist, ist allerdings ne andere Frage^^
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
O Klassen Zusammenspiel zwischen 2 Klassen Java Basics - Anfänger-Themen 1
G JSP, HTML und JavaScript im Zusammenspiel Java Basics - Anfänger-Themen 5
G HTML JavaScript und JSP im Zusammenspiel Java Basics - Anfänger-Themen 3
B Zusammenspiel zweier JFrames Java Basics - Anfänger-Themen 2
J Methodenaufrufe abstrakte Klassen, Interfaces Java Basics - Anfänger-Themen 17
M Abstrakte Klassen - Notation Java Basics - Anfänger-Themen 9
Detlef Bosau Nachladen von Klassen zur Laufzeit Java Basics - Anfänger-Themen 24
M Anonyme Klassen - Warum wird in der Konsole nichts ausgegeben? Java Basics - Anfänger-Themen 1
MoxMorris Einige Methoden aus verschiedenen Klassen nacheinander auszuführen läuft seltsam Java Basics - Anfänger-Themen 2
I Klassen von einem package laden, Statisches Feld auslesen und Objekt erstellen Java Basics - Anfänger-Themen 8
I 2 verschiedene Klassen mit gleichen Property vergleichen Java Basics - Anfänger-Themen 13
C Array von Klassen Java Basics - Anfänger-Themen 2
monsterherz 2 Klassen daher Probs mit dem Dateinamen Java Basics - Anfänger-Themen 9
C Kommunikation zwischen 2 Klassen Java Basics - Anfänger-Themen 9
I JPA Query für mehrere Klassen Java Basics - Anfänger-Themen 3
I @Entity Klassen, Service Beans etc. aus einem Share Projekt beziehen? Java Basics - Anfänger-Themen 26
S IntelliJ geht alle Klassen durch Java Basics - Anfänger-Themen 9
I Gleiche Klassen und Methoden in unterschiedlichen Projekten nutzen Java Basics - Anfänger-Themen 2
T variablen klassen übergreifend Java Basics - Anfänger-Themen 12
N Klassen Methoden anderer Klassen aufrufen Java Basics - Anfänger-Themen 4
D Klassen Klassen Kommunikation Java Basics - Anfänger-Themen 12
Encera Auf Objekte aus anderer Klassen zugreifen Java Basics - Anfänger-Themen 20
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 Klassen und Vererbung Java Basics - Anfänger-Themen 2
L Best Practice Annotierte Klassen im Classpath herausfinden Java Basics - Anfänger-Themen 1
P Mit dem Scanner Klassen aufrufen Java Basics - Anfänger-Themen 3
K Zweite Ausgabe von vererbten Klassen Java Basics - Anfänger-Themen 3
M Wie können Klassen nicht-materialisierte Attribute haben, die nur über get/ set-Mehoden simuliert sind? Java Basics - Anfänger-Themen 6
Speedrunner klassen aufrufen Java Basics - Anfänger-Themen 41
M Log4J (v2) nachträglich in allen Klassen hinzufügen Java Basics - Anfänger-Themen 9
D importieren eigener Klassen Java Basics - Anfänger-Themen 12
W Wo ist der Wurm in meinem Grundverständnis von Klassen? Java Basics - Anfänger-Themen 22
S Daten/Klassen/Packages richtig updaten!? Java Basics - Anfänger-Themen 2
alice98 Erste Schritte Liste erstellen ohne vorgefertigte Klassen Java Basics - Anfänger-Themen 1
C Archiv für eigene Klassen Java Basics - Anfänger-Themen 9
S Objekte von zwei klassen in zwei verschiedene Textdateien schreiben Java Basics - Anfänger-Themen 5
elsaaaaaa Wochentag als String ausgeben mit JDK Klassen Java Basics - Anfänger-Themen 6
CptK Generics: Klassen die Interface implementieren, aber selbst nicht das Interface sind Java Basics - Anfänger-Themen 8
Z Mehtode bei Start des Programms ausführen (Klassen übergreifend) Java Basics - Anfänger-Themen 12
J Allgemeines Problem mit Klassen Java Basics - Anfänger-Themen 5
TimoN11 Java Klassen Global einbinden Java Basics - Anfänger-Themen 1
B Inventar als einzelne Klassen anlegen? Java Basics - Anfänger-Themen 12
G Java Klassen und Instanzmethoden Java Basics - Anfänger-Themen 15
C Kommunikation zwischen 2 Klassen Java Basics - Anfänger-Themen 3
T Vererbung Verschiedene Attribute für vererbte Klassen Java Basics - Anfänger-Themen 4
S Klassen instanziieren und verwenden von Getter und Setter Java Basics - Anfänger-Themen 4
B Variablen Variablen übertragen ohne Klassen Java Basics - Anfänger-Themen 5
C Fernseher-Aufgabe (Methoden, Klassen und Objekte) Java Basics - Anfänger-Themen 63
H Methoden in großen Klassen gruppieren oder auslagern? Java Basics - Anfänger-Themen 10
G Abstrakte Klassen Java Basics - Anfänger-Themen 11
Y Klassen Klassen und Objekte Java Basics - Anfänger-Themen 3
Y Klassen Klassen und Objekte mit set und get Java Basics - Anfänger-Themen 0
A Generischen Klassen Java Basics - Anfänger-Themen 8
A Vererbung Klassen im Bezug auf Auto´s Java Basics - Anfänger-Themen 18
A Generische Klassen/Interface Java Basics - Anfänger-Themen 1
A Klassen Vererbung und zusätzliche Unterklassen Java Basics - Anfänger-Themen 23
J 2 klassen benutzen Java Basics - Anfänger-Themen 5
A Klassen und methoden Java Basics - Anfänger-Themen 15
A Bankweverwaltung mit Klassen und Methoden Java Basics - Anfänger-Themen 14
J Klassen Problem Java Basics - Anfänger-Themen 8
I Java Klassen "Graphics" und "MouseEvent" kombinieren Java Basics - Anfänger-Themen 7
I Klassen als Datentyp nutzen? Java Basics - Anfänger-Themen 11
M Aufsplitten von Methoden in andere Klassen Java Basics - Anfänger-Themen 2
M (Sehr großes Problem) Listen als static in anderen Klassen verwendet Java Basics - Anfänger-Themen 12
C Klassen objektorientiert aufteilen Java Basics - Anfänger-Themen 6
hello_autumn Klassen Anzahl sowie die Anzahl der Junit Tests ermitteln? Java Basics - Anfänger-Themen 8
A Auf Eigenschaften von Objekten anderer Klassen zugreifen Java Basics - Anfänger-Themen 5
F Klassen und Pakete Projektübergreifend (Eclipse) Java Basics - Anfänger-Themen 6
V_Fynn03 Klassen Überweisungen tätigen und einzahlen mit 2 Klassen Java Basics - Anfänger-Themen 1
W Abarbeitungsreihenfolge Anonyme Klassen Java Basics - Anfänger-Themen 2
V_Fynn03 Bruchrechner programmieren (2 Klassen) Java Basics - Anfänger-Themen 9
D OOP- Eine Klasse in mehrere Klassen aufteilen Java Basics - Anfänger-Themen 7
J Problem mit Array: 2 Klassen Java Basics - Anfänger-Themen 2
W Frage zu anonymen Klassen Java Basics - Anfänger-Themen 4
Curtis_MC Parameter-Übergabe bei Klassen und Methoden Java Basics - Anfänger-Themen 12
E Klassen implementieren Java Basics - Anfänger-Themen 94
T Interfaces in erbenden Klassen Java Basics - Anfänger-Themen 2
C Methoden/Klassen Übergabewerte Java Basics - Anfänger-Themen 8
C Java Klassen/Methoden/Übergabeparameter Java Basics - Anfänger-Themen 4
L Wie geht man bei mehreren Action Klassen vor? Java Basics - Anfänger-Themen 0
P Datentypen, Klassen, Operatoren, Wrapperklassen Java Basics - Anfänger-Themen 2
L Wie teilt man ein Programm in vernünftige Klassen ein? Java Basics - Anfänger-Themen 10
T Klassen Denkfehler im Klassen "dynamisch" instanzieren? Java Basics - Anfänger-Themen 4
P Zugriff auf Variablen anderer Klassen in Greenfoot Java Basics - Anfänger-Themen 1
A Methode, Klassen Java Basics - Anfänger-Themen 3
B UML Klassen Diagramm zu Java Code Programmieren und ausführen Java Basics - Anfänger-Themen 21
J Zwei Klassen die sich gegenseitig referenzieren - Bad practice? Java Basics - Anfänger-Themen 4
G Klassen und Objekte Java Basics - Anfänger-Themen 2
Java The Hutt SetWerte über verschiedene Klassen Java Basics - Anfänger-Themen 16
D Klassen ausgeben Java Basics - Anfänger-Themen 2
H linkedlist generische klassen Java Basics - Anfänger-Themen 169
B CSS Klassen in eine Liste schreiben Java Basics - Anfänger-Themen 4
Queiser Nicht statische Klassen Java Basics - Anfänger-Themen 6
neerual Klassen Wie rufe ich Klassen, die andere Klassen extenden in einer Test Unit auf? Java Basics - Anfänger-Themen 10
J Gleiche Methode in 2 verschiedenen Klassen - Lösung ? Java Basics - Anfänger-Themen 8
G Refactoring von mehreren identischen Klassen Java Basics - Anfänger-Themen 36
O Wrapper Klassen Java Basics - Anfänger-Themen 6
CptK Best Practice Klassendiagramm aus fertigen Klassen erstellen lassen Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben