Aus einer Methode eine eigene Klasse machen - modular coden

Status
Nicht offen für weitere Antworten.

LogicCube

Mitglied
Hallo,

ich muss für eine Programmieraufgabe (die ich schon fertiggestellt habe) die Architektur umbauen, und zwar habe ich momentan folgenden Aufbau:

Code:
class MeineKlasse {

<hier stehen die Variablen>

main-Methode{}

methode1{}

methode2{}

methode3{}

....

}

nun sollen aber die Methoden als eigene Klassen definiert werden, und dann ein eigenes Hauptprogg erstellt werden welches wohl Objekte dieser Klassen erzeugen soll welchedann bearbeitet werden (im Hauptprogramm).

Mein Problem ist, das ich ein Beispiel bräuchte, wie man eine Methode quasi "umschreibt" in eine eigene Klasse.

Ob das sinnvoll ist oder nicht sei jetzt mal außen vor gelassen, mein Prof verlangt es halt als "modulares Programm" und daher würde ich ihm das auch gerne so umbauen :) !

Hier ist mal eine der Methoden, dabei geht es um die Verbindung zu einer Datenbank:

Code:
 public static Connection connect() throws SQLException
 {
    String treiber;
    OracleDataSource ods    = new OracleDataSource();
    treiber = "oracle.jdbc.driver.OracleDriver";
    Connection dbConnection = null;

    try{
        Class.forName(treiber).newInstance();}
    catch (Exception e){
        System.out.println("Fehler beim laden des Treibers: "+ e.getMessage());}
    try{
        /*  Anmeldedaten für Home-Server            */
        ods.setURL("jdbc:oracle:thin:system/Haube99@127.0.0.1:1521/XE");
  
        /*  Anmeldedaten für DB-Labor              */
        /*  ods.setURL("jdbc:oracle:thin:dbprak03/dbprak03@fichte.nt.fh-koeln.de:1521/orcl"); */
        dbConnection = ods.getConnection();}

    catch (SQLException e){
    System.out.println("Fehler beim Verbindungsaufbau zur Datenbank!");
    System.out.println(e.getMessage());}
    return dbConnection;
 }


Kann mir da bitte bitte jemand kurz bei helfen? Ich denke wenn man das einmal gemacht hat, dann weiß man wie das geht und der Rest sollte sich dann zumindest größtenteils von selber ergeben....

:([/code]
 
S

SlaterB

Gast
erstelle eine neue Klasse mit beliebigen Namen,

kopiere die Methode 1 zu 1 rüber,

entferne 'static'

fertig
 

LogicCube

Mitglied
Hey,

das klingt einfach, scheitert aber leider zunächst (aber das kriegen wir hin...!):

1. kopieren der Methode inklusive Kopf?

2. Ich habe da ein incompatible_types Problem was die Connection angeht, das ist noch etwas kniffelig. Ich ziehe daher zunächst erstmal eine andere Methode heran, und zwar

Code:
static void simpleSelect()
 {
    try
    {
        Connection con = connect();
        Statement Stmt;
        ResultSet RS;
        String SQL;
        
        Stmt = con.createStatement();
        SQL  = "SELECT * FROM KUNDE03";
        RS   = Stmt.executeQuery(SQL);
       
        while(RS.next())
        {
            kdenr   = RS.getInt("kdenr");
            kdenam  = RS.getString("kdenam");
            plz     = RS.getInt("plz");
            ort     = RS.getString("ort");
            gjahr     = RS.getInt("gjahr");
      
            System.out.println("\nKundennummer: "+kdenr);
            System.out.println("Kundenname:   "+kdenam);
            System.out.println("PLZ:          "+plz);
            System.out.println("Ort:          "+ort);
            System.out.println("Geburtsjahr:  "+gjahr);
            System.out.println();
        }    
    }
    catch (SQLException e){
        System.out.println(e.getMessage());
        System.out.println("SQL Exception wurde geworfen!");}
 }

wo müssen jetzt die Variablen wie kdenr, kdenam usw hin?
VOR die Methode wenn denn der Kopf mitbenutzt wird, oder innerhalb der Methode?

Ich weiß klingt etwas konfus aber wie gesagt, wenn ich das System einmal geschnallt habe denke ich kann ich das umsetzen...!
 
S

SlaterB

Gast
zu einer Methode gehört auch der Kopf, und auch bei den Variablen ändert sich nix, alles komplett rüber ohne irgendwelche Änderungen,

natürlich kann man generell überlegen, irgendwas anders zu machen,
z.B. Variablen vor die Methode zu schreiben,
aber nur wenn man weiß WAS man WARUM macht,

wenn z.B. zwei Methoden die gleichen Variablen benötigen oder so,
pauschal gibts dafür aber kein Rezept
 

LogicCube

Mitglied
Hey,

ok das habe ich verstanden, und das funktioniert denke ich auch, allerdings kriege ich bei der connect-Klasse einen Fehler der sich dummerweise auch auf die anderen Methoden auswirkt, da die alle Objekte vom Typ "Connection" erstellen und wenn die Connection-Klasse nicht ordentlich ist, gibts da natürlich Fehler.

Problem sieht man hier hoffentlich:
Code:
import java.io.*;
import java.sql.*;
import oracle.jdbc.pool.*;

class Connection
{

 Connection connect() throws SQLException
 {
    String treiber;
    OracleDataSource ods    = new OracleDataSource();
    treiber = "oracle.jdbc.driver.OracleDriver";
    Connection dbConnection = null;

    try{
        Class.forName(treiber).newInstance();}
    catch (Exception e){
        System.out.println("Fehler beim laden des Treibers: "+ e.getMessage());}
    try{
        /*  Anmeldedaten für Home-Server            */
        ods.setURL("jdbc:oracle:thin:XXXX/XXXX@127.0.0.1:1521/XE");

        /*  Anmeldedaten für DB-Labor              */
        /*  ods.setURL("jdbc:oracle:thin:XXXX/XXXX@server:1521/orcl"); */
        dbConnection = ods.getConnection();}

    catch (SQLException e){
    System.out.println("Fehler beim Verbindungsaufbau zur Datenbank!");
    System.out.println(e.getMessage());}
    return dbConnection;
 }

}

Fehler:
Code:
Connection.java:25:41: incompatible types
found   : java.sql.Connection
required: Connection
        dbConnection = ods.getConnection();}

schreibe ich allerdings
Code:
   dbConnection = (Connection)ods.getConnection();

wird die Klasse allerdings compiliert, aber ich glaube nicht das das richtig ist oder?!
 
S

SlaterB

Gast
zuächst mal solltest du keine eigenen Klassen wie vorgegebene Klassen nennen,
dann klappts auch mit dem Compiler
 

LogicCube

Mitglied
Hey,

habe jetzt die Klasse "Verbindung" genannt, der Fehler mit den incompatible-types besteht aber innerhalb der Methode immernoch.

Gib mir einen Tip :) !
 
S

SlaterB

Gast
was ist denn die Fehlermeldung?

bisher hattest du eine Variable

> Connection dbConnection = null;

welche deine eigene Klasse Connection meint,
in welche du aber ein Objekt vom Typ java.sql.Connection
speichern wolltest,

durch Umbennen der Klassen kann es das Problem in dieser Form nicht mehr geben
 

LogicCube

Mitglied
Die Fehlermeldung ist immernoch:
Code:
Verbindung.java:25:41: incompatible types
found   : java.sql.Connection
required: Connection
        dbConnection = ods.getConnection();}

die Klasse sieht insgesamt folgendermaßen aus:
(Verbindung.java)
Code:
import java.io.*;
import java.sql.*;
import oracle.jdbc.pool.*;

class Verbindung
{
   public Connection connect() throws SQLException
   {
    String treiber;
    OracleDataSource ods    = new OracleDataSource();
    treiber = "oracle.jdbc.driver.OracleDriver";
    Connection dbConnection = null;

    try{
        Class.forName(treiber).newInstance();}
    catch (Exception e){
        System.out.println("Fehler beim laden des Treibers: "+ e.getMessage());}
    try{
        /*  Anmeldedaten für Home-Server            */
        ods.setURL("jdbc:oracle:thin:XXXX/XXXX@127.0.0.1:1521/XE");

        /*  Anmeldedaten für DB-Labor              */
        /*  ods.setURL("jdbc:oracle:thin:XXXX/XXXX@server:1521/orcl"); */
        dbConnection = ods.getConnection();}

    catch (SQLException e){
    System.out.println("Fehler beim Verbindungsaufbau zur Datenbank!");
    System.out.println(e.getMessage());}
    return dbConnection;
 }
}

Leider braucht man zum compilieren eine classes12.jar in der die JDBC klassen enthalten sind; ist also schwer nachzutesten für andere.

Das kann doch nicht so schwer sein :(
 
S

SlaterB

Gast
was soll das
> import oracle.jdbc.pool.*;
?

hat sich vielleicht automatisch eingeschlichen und dazu gehört dann vielleicht auch
oracle.jdbc.pool.Connection

.* zu importieren ist generell schlecht
-----

wenn es weiter noch nicht hinhaut:
als erstes musst du herausfinden, was das für eine 'Connection' ist,

kommentiere allen fraglichen Code aus und schreibe

System.out.println(Connection.class.getName());
und lasse das auch ausführen, welche Ausgabe kommt?
 

LogicCube

Mitglied
Hey,


also ich habe das import mal mit import oracle.jdbc.pool.Connection.*; probiert, dann kennt der zum Beispiel die
Code:
OracleDataSource ods    = new OracleDataSource();

Zeile nicht mehr da er nicht mehr weiß was Objekte vom Typ OracleDataSource sind (ist ja auch logisch).

Aber mal ein allgemeinerer Ansatz: Wie kann denn die Methode in einem großen Hauptprogramm funktionieren, indem aber weder eine andere Methode noch andere Variablen irgendwas mit dieser Methode zu tun haben?!

Die imports sind gleich, die Methode ist exakt kopiert, und als einzelne Klasse läuft das nicht. Da muss es doch irgendwo nen Trick geben wie das aussehen muss...
 
S

SlaterB

Gast
> import oracle.jdbc.pool.Connection.*;

dies hat ja auch nichts mit korrekten Java zu tun,

du sollst
> import oracle.jdbc.pool.*;
streichen und für deine OracleDataSource von mir aus

import oracle.jdbc.pool.OracleDataSource;

wieder hinschreiben

--------

> und als einzelne Klasse läuft das nicht.

warum das so ist, interessiert mich auch,
bei deinen versuchen a la
> import oracle.jdbc.pool.Connection.*;

muss man natürlich von allen möglichen Fehlern und auch Fehlinterpretationen der Fehlersituationen ausgehen,
also kann man das schlecht von außer erraten,
oder ich zumindest kann das nicht
 

LogicCube

Mitglied
Hey,

habs jetzt.

Ich Idiot hatte vergessen dass ich mal ne Connection.class compiliert hatte (war ne alte Version wo ich viel rausgenommen hatte, die wurde dann fehlerfrei compiliert) und anscheinend hat sich der Compiler gedacht, er soll davon Objekte erstellen.

Datei gelöscht -> jetzt compiliert es ohnne Probleme!

Da trau ich mich schon kaum zu fragen, wie man jetzt per Punktnotation in der SimpleSelect die Klasse Verbindung benutzt...
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
_user_q Wie eine Methode/Funktion aus einer Klasse mit Constructor aufrufen? Java Basics - Anfänger-Themen 20
M Wie verknüpfe ich eine Bedingung mit einer Methode ohne if-Verzweigung & Bedingungsoperator? Java Basics - Anfänger-Themen 2
scratchy1 Kann man in einer Methode eine andere aufrufen? Java Basics - Anfänger-Themen 2
S Wie erstelle ich eine Vorbedingung für eine Variable einer Methode ? Java Basics - Anfänger-Themen 5
B Wie kann ich eine Methode einer selbst erstellten Klasse statisch importieren? Java Basics - Anfänger-Themen 5
M Methoden Int einer Methode an eine andere Methode übergeben Java Basics - Anfänger-Themen 4
H Innerhalb einer Methode eine Variable der aufrufenden Methode ändern? Java Basics - Anfänger-Themen 2
TomatenBrot447 Mit toString eine Ausgabe liefern wie in einer schon implementierten Methode ? Java Basics - Anfänger-Themen 13
TomatenBrot447 Mit toString eine Ausgabe liefern wie in einer schon implementierten Methode ? Java Basics - Anfänger-Themen 1
F Problem bei eshop -> Ausführen einer Methode über eine Shopverwaltung Java Basics - Anfänger-Themen 6
S Methoden Rückgabewert einer Methode als Parameter an eine andere Methode übergeben, geht das? Java Basics - Anfänger-Themen 5
L Methoden Eine Methode aus einer anderen Klasse aufrufen Java Basics - Anfänger-Themen 4
D Von einer Methode auf eine lokale Variable in der Main zugreifen? Java Basics - Anfänger-Themen 15
E Variable aus einer Methode heraus in eine andere Klasse übergeben Java Basics - Anfänger-Themen 13
M Zwei Threads greifen auf eine Methode einer Klasse zu. Komplikationen? Java Basics - Anfänger-Themen 18
A Einer Methode eine andere Methode übergeben Java Basics - Anfänger-Themen 6
G Was passiert mit eine Methode bei einer Instanz Java Basics - Anfänger-Themen 13
M Wert von einer Methode in eine Andere übergeben Java Basics - Anfänger-Themen 6
M Methode einer Klasse in eine andere Übergeben Java Basics - Anfänger-Themen 4
A Wert einer Variable an eine Methode in einer anderen Klasse. Java Basics - Anfänger-Themen 4
B in einer Methode eine andere Methode aufrufen Java Basics - Anfänger-Themen 1
J Von einer Klasse auf eine Methode einer anderen Klasse zugre Java Basics - Anfänger-Themen 6
P Objekt einer Methode eines anderen Objektes übergeben Java Basics - Anfänger-Themen 5
L Variablenwerte aus einer Methode übergeben Java Basics - Anfänger-Themen 2
T Aufruf der Methode einer Oberklasse, wenn sie in der Unterklasse überschrieben ist. Polymorphie. Java Basics - Anfänger-Themen 2
marcelnedza Finde meinen Fehler in einer Methode nicht, Java Karol Java Basics - Anfänger-Themen 15
MoxMorris Wie macht man String[] = String[] aus einer anderer Methode? Java Basics - Anfänger-Themen 18
T Variable von Objekten in einer Methode überprüfen Java Basics - Anfänger-Themen 26
B Attribute eines Objekts einer Klasse durch statische Methode einer 2. Klasse ändern? Java Basics - Anfänger-Themen 32
V Hilfe bei Implementierung einer boolean Methode Java Basics - Anfänger-Themen 6
berserkerdq2 Wann soll ich den Stream schließen, wenn ich das in einer Methode habe? Java Basics - Anfänger-Themen 8
H Mit setter-Methode JLabel in einer andern Klasse ändern. Java Basics - Anfänger-Themen 40
A Ein Array bearbeiten und in einer anderen Methode nutzen Java Basics - Anfänger-Themen 6
A Ergebnis einer Methode bei einer anderen verwenden Java Basics - Anfänger-Themen 13
M Wie kann die Implementation einer Methode den Wert eines Attributs vermindern? Java Basics - Anfänger-Themen 3
D mehrere Berechnungen in einer Methode Java Basics - Anfänger-Themen 9
I Array einer Methode wiedergeben Java Basics - Anfänger-Themen 2
I Argumente einer Java Methode Java Basics - Anfänger-Themen 14
D Methoden Plathhalter für Integer in einer Methode Java Basics - Anfänger-Themen 19
D Einen boolischen Wert aus einer Methode in einer anderen Klasse aufrufen? Java Basics - Anfänger-Themen 11
C Auf die Methode einer anderen Klasse zugreifen Java Basics - Anfänger-Themen 1
A 2 Strings vergleichen in einer methode wenn man mit Globalen variablen arbeitet Java Basics - Anfänger-Themen 12
T getAttribut in einer Methode aufrufen Java Basics - Anfänger-Themen 8
BorussiaMG1900 Implementation einer Methode Java Basics - Anfänger-Themen 1
J Problem mit einer Methode die gewissen Inhalt einer Array löschen soll Java Basics - Anfänger-Themen 9
J Problem mit einer Methode, die beliebig viele Objekte in Array speichern soll Java Basics - Anfänger-Themen 6
LetsSebi Methode, die einen arry von objekten speichert in einer datei Java Basics - Anfänger-Themen 6
A Methode in einer anderen Klasse verwenden Java Basics - Anfänger-Themen 1
JD_1998 Array-Position aus einer Methode in einer anderen ausgeben (Kurze Frage) Java Basics - Anfänger-Themen 2
JD_1998 Random Array sortieren mit Hilfe einer Methode Java Basics - Anfänger-Themen 4
K Übergabe von Werten (zweidimensionales Array) aus einer Methode an zweidimensionales Array in main() Java Basics - Anfänger-Themen 3
M this.object in einer parameterlosen Methode verwenden Java Basics - Anfänger-Themen 3
P Problem beim Überschreiben einer vererbten Methode Java Basics - Anfänger-Themen 4
O BiPredicate in einer forEach Methode Java Basics - Anfänger-Themen 10
L Wie greife ich in der Subklasse auf die Parameter einer Methode der Superklasse zu ? Java Basics - Anfänger-Themen 15
N Methode um Objekte einer Liste hinzuzufügen Java Basics - Anfänger-Themen 1
L Variable von einer Methode zu einer anderen Methode inkl. einer "Zwischenmethode" Java Basics - Anfänger-Themen 1
B Hilfe bei einer rekursiven Methode Java Basics - Anfänger-Themen 3
S Auf Methode einer anderen Klasse zugreifen Java Basics - Anfänger-Themen 3
M Implementierung einer getNextId Methode Java Basics - Anfänger-Themen 5
R Signatur einer Methode in JAVA Java Basics - Anfänger-Themen 4
N Methode mit einer Arraylist Java Basics - Anfänger-Themen 106
I ArrayList - Methode zum Speichern eines Eintrags in einer Datei Java Basics - Anfänger-Themen 17
H Arraydaten aus einer anderen Methode ausgeben Java Basics - Anfänger-Themen 4
H Auf Objekte bzw Variabeln aus einer anderen Methode zugreifen Java Basics - Anfänger-Themen 7
T Return einer anderen Methode herausfinden Java Basics - Anfänger-Themen 9
J Fragen zu einer Methode Java Basics - Anfänger-Themen 3
W OOP Vererbung und Problem bei Zählschleife in einer Methode Java Basics - Anfänger-Themen 10
A Mit einer Methode den Konstruktor aufrufen? Java Basics - Anfänger-Themen 2
K Boolean in einer Methode um 2 Objekte zu vergleichen Java Basics - Anfänger-Themen 12
M kann man return in nur einer Methode einsetzen? Java Basics - Anfänger-Themen 7
J NullPointerException beim Klonnen eines Arayys und beim aufrufen einer Methode Java Basics - Anfänger-Themen 2
H Frage zu Parameter einer Methode Java Basics - Anfänger-Themen 2
H Frage zu Parameter einer Methode Java Basics - Anfänger-Themen 3
G Die richtige Methode aus einer DTO auszurufen Java Basics - Anfänger-Themen 27
B Klassen Zugriff auf ein Objekt einer Klasse aus einer Methode heraus Java Basics - Anfänger-Themen 4
M BlueJ - Array als Paramter einer Methode eingeben Java Basics - Anfänger-Themen 12
O Arrays sortieren in einer Methode Java Basics - Anfänger-Themen 2
D Zugriff auf Methode einer anderen Klasse Java Basics - Anfänger-Themen 5
A OOP Variable in anderer Klasse durch Methode aufrufen und einer anderen Variable gleichsetzen Java Basics - Anfänger-Themen 2
D Compiler-Fehler Aufrufen einer Methode von Main Java Basics - Anfänger-Themen 4
R Methoden NPE beim Aufruf einer Methode einer anderen Klasse Java Basics - Anfänger-Themen 4
J Aufruf einer Methode über einen String Java Basics - Anfänger-Themen 11
E Threads Methode einer Wartenden Klasse aufrufen Java Basics - Anfänger-Themen 3
P Methode soll Variable einer anderen Klasse ändern. Wie? Java Basics - Anfänger-Themen 1
J Rekursive Methode - Ziffern einer Zahl ausgeben Java Basics - Anfänger-Themen 2
D Methoden JButton und JLabel in einer Methode erstellen Java Basics - Anfänger-Themen 5
C In einer Methode einen Array zurückgeben Java Basics - Anfänger-Themen 2
geekex Double zu String umwandeln in einer Methode Java Basics - Anfänger-Themen 28
J String splitten und weiter einarbeiten in einer Methode? Java Basics - Anfänger-Themen 11
D Anfänger-Fragen(Parameter einer Methode) Java Basics - Anfänger-Themen 7
D Aufruf einer Methode einer anderen Klasse Java Basics - Anfänger-Themen 39
S BufferedWriter innerhalb einer Methode Java Basics - Anfänger-Themen 2
V Methode eines Objekts einer ArrayList ausführen Java Basics - Anfänger-Themen 3
V for-Schleife in einer void Methode Java Basics - Anfänger-Themen 3
P Instanz mit .add Methode von einer Klasse zur anderen? Java Basics - Anfänger-Themen 6
C Bestimmtes Objekt einer ArrayList in einer Methode selektieren Java Basics - Anfänger-Themen 8
BobbGott Klassen 2 "Objekte" in einer Methode - wie? Java Basics - Anfänger-Themen 7
B Wie speicher ich die Outputs einer Methode in ein Array ein? Java Basics - Anfänger-Themen 1
N Objekt in Methode einer anderen Klasse erzeugen Java Basics - Anfänger-Themen 9

Ähnliche Java Themen

Neue Themen


Oben