Zusammenspiel von Klassen

- OCinside.de PC Forum
https://www.ocinside.de

-- Software
https://www.forum-inside.de/forums.cgi?forum=17

--- Zusammenspiel von Klassen
https://www.forum-inside.de/topic.cgi?forum=17&topic=7521

Ein Ausdruck des Beitrags mit 19 Antworten ergibt bei 3 Antworten pro Seite ca. 7 DIN A4 Seiten. Das entspricht bei 80 g/m² ca. 34.93 Gramm Papier.


-- Veröffentlicht durch TheOne am 9:47 am 17. Nov. 2006

Hier noch mal mein ganzer Quellcode, es geht jetzt alles soweit :)

Klasse Eintrag (main):

Code
import java.util.Scanner;

class Eintrag {

public static void main(String args[]) throws Exception{

//Scannerobjekt fr die Eingabe erzeugen
Scanner eingabe = new Scanner(System.in);

//Objekt Personen und Konten erzeugen
Person p1 = new Person();
Person p2 = new Person();

Girokonto k1 = new Girokonto();
Girokonto k2 = new Girokonto();

//Verbindung der Kono und Personenklasse herstellen
p1.konto(k1);
p2.konto(k2);

//Eingabe der Personendaten
   System.out.print("Wie ist der Name von Person1: ");
   p1.setName(eingabe.next());
   System.out.print("Wie ist der Name von Person2: ");
   p2.setName(eingabe.next());
   
   System.out.print("Wie ist das Geschlecht von Person1 (m/w): ");
p1.setSex(eingabe.next());
System.out.print("Wie ist das Geschlecht von Person2 (m/w): ");
p2.setSex(eingabe.next());

System.out.print("Wie alt ist Person1: ");
p1.setAlter(eingabe.nextInt());
System.out.print("Wie alt ist Person2: ");
p2.setAlter(eingabe.nextInt());


//Eingabe der Kontodaten
   System.out.print("Wie ist die Kontonummer der Person1: ");
k1.setKnr(eingabe.nextInt());
System.out.print("Wie ist die Kontonummer der Person2: ");
k2.setKnr(eingabe.nextInt());
   
   System.out.print("Wie hoch ist das Saldo von Person1 : ");
k1.setSaldo(eingabe.nextDouble());
System.out.print("Wie hoch ist das Saldo von Person2 : ");
k2.setSaldo(eingabe.nextDouble());
System.out.println();

//Ausgabe der Daten
System.out.println();
System.out.println("------------------------------------");
System.out.println("Der Name der Person1: " + p1.getName());
System.out.println("Kontonummer der Person1: " + k1.getKnr());
System.out.println("Ihr Guthaben: " + k1.getSaldo());
System.out.println("Alter: " + p1.getAlter());


//Vergleich der Eingabe anhand der getSex() Funktion
if(p1.getSex()) {
System.out.println(p1.getName() + " ist Weiblich");
} else {
System.out.println(p1.getName() + " ist Maennlich");
}
System.out.println("------------------------------------");


//////Konsistenzprüfung Ausgabe (P1)///
System.out.println(p1.pruefeKonto(p1));
///////////////////////////////////////


//Ausgabe der Daten
System.out.println("------------------------------------");
System.out.println("Der Name der Person2: " + p2.getName());
System.out.println("Kontonummer der Person2: " + k2.getKnr());
System.out.println("Ihr Guthaben: " + k2.getSaldo());
System.out.println("Alter: " + p2.getAlter());


//Vergleich der Eingabe anhand der getSex() Funktion
if(p2.getSex()) {
System.out.println(p2.getName() + " ist Weiblich");
} else {
System.out.println(p2.getName() + " ist Maennlich");
}

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

//////Konsistenzprüfung Ausgabe (P2)///
System.out.println(p2.pruefeKonto(p2));
///////////////////////////////////////

System.out.print("------------------------------------");



}
}


Klasse Person:
Code
class Person
{

//Variablennamen
private String name;
private boolean weiblich;
int alter;
boolean temp;
Girokonto konto;

//Konstruktor Person
Person()
{
name = "";
weiblich = false;
alter = 0;
}

public void konto(Girokonto k)
{
konto = k;
}

//Personennamen setzen
public void setName(String Name)
{
   this.name = Name;
}

//Gibt den Namen zurck
public String getName()
{
return name;
}

//Geschlecht setzen
public void setSex(String Sex)
{
//ohne Gross- und Kleinschreibnung (IgnoreCase) | equals (String vergleich)
weiblich = Sex.equalsIgnoreCase("w");
}

//Geschlecht zurckgeben
public boolean getSex()
{
return weiblich;
}

//Alter setzen
public void setAlter(int a)
{
this.alter = a;
}

//Alter zurückgeben
public int getAlter()
{
return alter;
}

//Methode zur Kosistenzprüfung
public boolean pruefeKonto(Person p) throws Exception
{

if(this.getAlter()<16)
{
System.out.println("Tut mir ja ehrlich leid " + this.getName() + ", aber du bist zu jung!");

} else {

System.out.println("Alles klar :-) " + this.getName() + " darfst dein Konto behalten.");
}

return temp;

}


}


Klasse Girokonto:
Code
class Girokonto
{
//Variablennamen
private int knr;
private double saldo;
Person besitzer;

//Konstruktor Girokonto
Girokonto()
{
knr = 0;
saldo = 0.0;
}

public void besitzer (Person p)
 {
   besitzer = p;
 }

//Kontonummer setzen
public void setKnr(int n)
{
knr = n;
}

//und Kontonummer zurckgeben
public int getKnr()
{
return knr;
}

//Saldo setzen
public void setSaldo(double s)
{
saldo = s;
}

// und Saldo zurckgeben
public double getSaldo()
{
return saldo;
}


}


Werde aber heute mit Try und Catch abfragen anfangen. Würd mich freuen wenn ihr mir helft und mitarbeiten würdet wenn ich mal fragen hab. Find sowas immer interessant  :lol:

MfG

One :cu:


-- Veröffentlicht durch E1nste1n am 9:09 am 17. Nov. 2006

Böööh ... das sieht ja viel zu einfach aus ... hätt man ja auch drauf kommen können ;)

thx für die Rückmeldung ...


-- Veröffentlicht durch TheOne am 19:50 am 16. Nov. 2006

public boolean pruefeKonto(Person p) throws Exception
{

if(this.getAlter()<16)
{
System.out.print("Unter 16 Jahren, bitte nur mit Erlaubnis ");
System.out.println("der Erziehungsberechtigten!!");
}
return false;
}

So.. über diese Methode der Personklasse prüfe ich das jetzt. Ich muss nur noch kompilieren T_T Ich will das ja nicht direkt machen ;) Das wär ja zu einfach :lol:


-- Veröffentlicht durch Jack the Ripper am 18:10 am 16. Nov. 2006

Was funzt denn daran nicht? Also ich würds direkt bei der Eingabe abfangen:

Code

System.out.print("Wie alt ist Person 1: ");
int alter = eingabe.next();
if(alter < 16)
{
    System.out.print("Unter 16 Jahren, bitte nur mit Erlaubnis ");
    System.out.println("der Erziehungsberechtigten!!");
} else {
    P1.setAlter(alter);
}


Aber ich seh grad... du hast da nen Simikolon zu viel, oder?


-- Veröffentlicht durch TheOne am 17:44 am 16. Nov. 2006

Ich wollte eigentlich sowas in der Art machen:

if(this.getAlter()<16)
{
System.out.print("Unter 16 Jahren, bitte nur mit Erlaubnis ");
System.out.println("der Erziehungsberechtigten!!");
}


Aber das funktioniert nicht richtig... :sadden:


-- Veröffentlicht durch Jack the Ripper am 17:30 am 16. Nov. 2006

Wie willstn das Überprüfen? Bräuchtest ja sone Art globale Datenbank, mit der du das ganze vergleichen kannst:noidea:

Oder womit willte es denn vergleichen?

Bei der Kontonummer könnte man höchstens auf die Anzahl der Stellen prüfen ...das wär aber zu einfach ;)


-- Veröffentlicht durch TheOne am 17:17 am 16. Nov. 2006

Ok, ich hab herausgefunden was Konsistenzprüfung ist... Un zwar ob die benutzten Methoden überhaupt erlaubt sind.. Das heißt, ob P1 ein Konto haben darf oder nicht.. Aber dann muss ich selber noch eine Limitierung einbauen, zum Beispiel Alter.

Und wenn das dann eingebaut ist und alle Daten erstellt sind, muss eine Prüfung vollzogen werden ob die Daten korrekt sind, denk ich.. Nur wie? Mal gucken.. Dürft gerne mit dran rumbasteln.. Ist Open Source :lol:


-- Veröffentlicht durch Jack the Ripper am 15:14 am 16. Nov. 2006

nochnie gehört :dontknow:


-- Veröffentlicht durch TheOne am 13:03 am 16. Nov. 2006

Das mit dem Char hab ich mir auch schon überlegt ^^

p1.konto(k1);
p2.konto(k2);

Hab jetzt diese Methoden benutzt. Geht soweit so gut :) In Person und Konto steht jeweils das:

public void konto(Konto k)
{
konto = k;
}

public void besitzer (Person p)
 {
   besitzer = p;
 }

Funzt anscheinend ^^

@Jack
Kannst du mir dann sagen was genau eine Konsistenzprüfung ist? :noidea: ^^

(Geändert von TheOne um 13:37 am Nov. 16, 2006)


-- Veröffentlicht durch Jack the Ripper am 12:42 am 16. Nov. 2006

Um im Konto den Besitzer zu setzen rufste den Dienst "Besitzer" im Konto auf mit dem OBJEKT-Namen des gewünschten Besitzer als Parameter:

Code

K1.Besitzer(P1);



Mit den Konsolen-Sachen kenn ich mich nicht wirklich aus, aber es könnte so aussehen:

Code

System.out.print("Wer ist der Besitzer von Konto 1 ? (Objektname): ");
K1.Besitzer(eingabe.next());



Ausgeben kannste den Besitzer afaik so:

Code

public Person getBesitzer()
{
   return Besitzer();
}


In der main:
Code

System.out.println("Besitzer des 1. Kontos: " + K1.Besitzer());

Kann aber sein, dass du dann nur die Speicheradresse rauskriegst :buck:

Musste vllt mit getString oder so machen.. da bin ich mir grad unsicher...


Bin aber nicht sicher, ob die Zuweisung mit dem "this" funzt, die du gemacht hast:

k1.Besitzer (this);



Würd das Geschlecht als Character speichern.. sieht irgendwie elleganter aus^^




BTW:
Die Lösung mit der Steuerklasse wär einfacher und übersichtlicher, oder?:noidea:

(Geändert von Jack the Ripper um 12:44 am Nov. 16, 2006)


-- Veröffentlicht durch TheOne am 11:41 am 16. Nov. 2006

Damit Einstein das auch liest kommt nun ein nicht bös gemeinter Doppelpost :lol:

@Einstein:
Ich glaub ich habs entdeckt, aber es fehlt noch was.

Die Methoden sehen so aus, oder zumindest so ungefähr:

Methode in Konto

Code
public void Besitzer (Person p1)
 {
   besitzer = p1;
   p1.Konto (this);
 }


Methode in Person:
Code
public void Konto(Konto k1)
{
konto = k1;
   k1.Besitzer (this);
}


In wie setz ich das jetzt in meiner Main-Klasse Eintrag? Also das ich das auslese oder Verknüpfe oder wie auch immer...? :lol:


-- Veröffentlicht durch TheOne am 11:26 am 16. Nov. 2006

ich bleib garantiert am Ball ;) Schau hier einfach 2-3 mal rein.. Irgendwann im Laufe des Tages hab ichs raus.. Hoff ich :lol:

Aber nett da sich einen Javabegeisterten hier gefunden hab :)

:cu:


-- Veröffentlicht durch Jim am 11:25 am 16. Nov. 2006

Warum sollen sie die Beiden kennen? Erarbeite doch eine dritte Struktureinheit, die die zwei steuert! Oder geht des bei Java ned?
Wenn nötig, versuch mal eins mit drei und zwei mit drei. Und drei steuert die Klassen: Konto und Person!


-- Veröffentlicht durch E1nste1n am 11:22 am 16. Nov. 2006

whooops ... tolles Thema :)

nö sry, in der Hinsicht kann ich dir auch nicht weiterhelfen.

Vom generellen Verständniss stimme ich dir zu: bei einer bidirektionelen Verbindung der Klassen kennen sie die Methoden udn Attribute der jeweils anderen - afaik.

Wie man diese Verbindung herstellt, jedoch keine Ahnung, ich weiß jedoch -  da ich es selbst schon mal probiert habe - das es leider nicht über eine "simple" Methode geht, welche die Classen miteinander verknüpft.

Aber wenn du was in der Richtung rausfindest sag mal Bescheid, intresieren tät mich das auch ;)


-- Veröffentlicht durch TheOne am 11:03 am 16. Nov. 2006

Die Klasse Konto und Person sollen sich gegenseitig kennen.. In der Form das P1 sein eigenes Konto bekommt und P2 auch. Das Problem liegt allgemein da, dass ich es gerne mit Biderektionaler Verbindung machen möchte.. Und später auch eine Konsistenzprüfung.

Nur ich weiß um Himmelswillen nicht wie... :lol:

Vom eigenen logischen denken her würde ich sagen ich brauch zwei bestimmte Methoden.. Eine in Person und eine in Konto.. Aber frag mich nicht welche :sadden: :lol: ^^

MfG

One :cu:


-- Veröffentlicht durch E1nste1n am 11:00 am 16. Nov. 2006

achso .... :thumb:


Okay ... und was funktioniert nun ganz konkret nicht ?


-- Veröffentlicht durch TheOne am 10:54 am 16. Nov. 2006

Nein die Klassen hab ich ja :lol: Ist ja nur das Programmm meiner "main" ;)

Person:

Code
class Person
{

//Variablennamen
private String name;
private boolean weiblich;
Konto konto;

//Personennamen setzen
public void setName(String Name)
{
   this.name = Name;
}

//Gibt den Namen zurück
public String getName()
{
return name;
}

//Geschlecht setzen
public void setSex(String Sex)
{
//ohne Gross- und Kleinschreibnung (IgnoreCase) | equals (String vergleich)
weiblich = Sex.equalsIgnoreCase("w");
   
}

//Geschlecht zurückgeben
public boolean getSex()
{
return weiblich;
}
}


Konto:
Code
class Konto
{
//Variablennamen
private int knr;
private double saldo;
Person Besitzer;

//Kontonummer setzen
public void setKnr(int n)
{
knr = n;
}

//Kontonummer zurückgeben
public int getKnr()
{
return knr;
}

//Saldo setzen
public void setSaldo(double s)
{
saldo = s;
}

// und saldo zurückgeben
public double getSaldo()
{
return saldo;
}

}


:lol: Büdde ^^

Und ja, Java ist ganz lustig ;) Finds irgendwie cool ^^


-- Veröffentlicht durch E1nste1n am 10:50 am 16. Nov. 2006

Okay .... dann mal langsam ;) ...

schick das du bei Java gelandet bsit - tolle Sprache oder ? :)

und dann zu deinem Programm:

Du hast keien Klassen verwendet ... du hast jeweils 2 Objekte der Klassen Konto und Person verwendet!
Die Klasse enthäklt ja nur den "Bauplan" für die Objekte dieser, demnach musst du die Klase noch erstellen.
Grundsätzlich müsstest du dann Attribute festlegen (Alter, Geschlecht, Kto. Nr, usw) und Methoden (setter und getter (setName, getName)) deklarieren.

Falls weitere Fragen sind her damit ... oder auch google :) ... zweiter Treffer mit den suchwörtern -> Bauplan für eine Klasse Java

Link

viel Erfolg!


-- Veröffentlicht durch TheOne am 9:51 am 16. Nov. 2006

Bin mittlerweile bei Java angelangt und werde da auch bleiben :lol: Hab auch schon nen bissel was zusammengezimmert und will es für mich jetzt erweitern... Google hat mir sehr geholfen, wie auch andere tollte Tuts, aber nun stehe ich vor einem kleinen Problem...

Sofern sich jemand mit Java auskennt, würde ich gerne um Unterstützung bitten :lol:

Erstmal der Code:

Code
import java.util.Scanner;

class Eintrag {
     
       public static void main(String args[]){
             
               //Scannerobjekt für die Eingabe erzeugen
               Scanner eingabe = new Scanner(System.in);
             
               //Objekt Personen und Konten erzeugen
               Person P1 = new Person();
               Person P2 = new Person();
             
               Konto K1 = new Konto();
               Konto K2 = new Konto();
             
               //Verbindung der Kono und Personenklasse herstellen
               K1.Besitzer = P1;
               K2.Besitzer = P2;
             
               //Eingabe der Personendaten
       System.out.print("Wie ist der Name von Person1: ");
       P1.setName(eingabe.next());
       System.out.print("Wie ist der Name von Person2: ");
       P2.setName(eingabe.next());
     
       System.out.print("Wie ist das Geschlecht von Person1 (m/w): ");
               P1.setSex(eingabe.next());
               System.out.print("Wie ist das Geschlecht von Person2 (m/w): ");
               P2.setSex(eingabe.next());
             
               //Eingabe der Kontodaten
       System.out.print("Wie ist die Kontonummer der Person1: ");
               K1.setKnr(eingabe.nextInt());
               System.out.print("Wie ist die Kontonummer der Person2: ");
               K2.setKnr(eingabe.nextInt());
 
       System.out.print("Wie hoch ist das Saldo von Person1 : ");
               K1.setSaldo(eingabe.nextDouble());
               System.out.print("Wie hoch ist das Saldo von Person2 : ");
               K2.setSaldo(eingabe.nextDouble());
               System.out.println();
             
               //Ausgabe der Daten
               System.out.println();
               System.out.println("------------------------------------");
               System.out.println("Der Name der Person1: " + P1.getName());
               System.out.println("Kontonummer der Person1: " + K1.getKnr());
               System.out.println("Ihr Guthaben: " + K1.getSaldo());
             
               //Vergleich der Eingabe anhand der getSex() Funktion
               if(P1.getSex()) {
                       System.out.println(P1.getName() + " ist Weiblich");
               } else {
                       System.out.println(P1.getName() + " ist Maennlich");
               }
               System.out.print("------------------------------------");
             
               //Ausgabe der Daten
               System.out.println();
               System.out.println("------------------------------------");
               System.out.println("Der Name der Person2: " + P2.getName());
               System.out.println("Kontonummer der Person2: " + K2.getKnr());
               System.out.println("Ihr Guthaben: " + K2.getSaldo());
             
               //Vergleich der Eingabe anhand der getSex() Funktion
               if(P2.getSex()) {
                       System.out.println(P2.getName() + " ist Weiblich");
               } else {
                       System.out.println(P2.getName() + " ist Maennlich");
               }
               System.out.println("------------------------------------");
             
     
     
               
       }
}


Wie ihr seht enthält mein Programm 2 Klassen, Konto und Person. Da ich mich gestern wieder hingesetzt habe und das alles ein wenig verfeinern wollte bin ich auf Bidirektionale Verbindungen und Konstruktoren gestoßen.. Öhm.. ja soweit so gut :)

Problem an der Geschichte ist im Moment die Realisierung... Wenn ich den komplizierten Mist im Internet richtig verstanden habe geht es darum Klassen und Objekte miteinander bekannt zu machen oder? Nebenbei wurde noch Konsistenzprüfung erwähnt. Wäre nett wenn mir einer da etwas unter die Arme greifen könnte.

Das was ich im Internet lese ist entweder was mit Netzwerk, oder auf wissenschaftlicher Basis geschrieben, so das ich es nicht verstehe :lol:

MfG

Euer One :cu:


OCinside.de PC Forum
© 2001 - 2024 www.ocinside.de