1:1 Beziehungen realisieren ?

THEBRAIN

Mitglied
Guten Tag,

Ich bin gerade dabei zu lernen wie man in Java 1:1 Beziehungen Projektorientiert realisiert.
Ein paar Bücher stehen mir zur Verfügung jedoch fehlt noch der letzte schliff das bei mir das licht an geht.

Hier mal eine erstellte Übungsaufgabe in der ich leider noch einen Fehler habe den ich nicht finde:

Java:
public class Verwaltung
	{
public static void main(String[] args)
	{
		Mitarbeiter m1= new Mitarbeiter();
		m1.setName("Anders");
		Kunde k1=new Kunde(m1);
		k1.setName("Schulz");
		System.out.println("Herr "+k1.setName()+" wird betreut von ");
		System.out.println("Herrn "+k1.getMeinBetreuer().getName());
		System.out.println();
		
		System.out.println("Herr "+m1.getName()+" betreut ");
		System.out.println("Herrn "m1.getMeinKunde().getName());
	}
	}

Java:
public class Kunde extends Mitarbeiter
	{
		private String name;
		private Mitarbeiter meinBetreuer;
		
		public String getName()
			{
				return name;
			}
		
		public void setName(String name)
			{
				this.name=name;
			}
		
		public Mitarbeiter getMeinBetreuer()
			{
				return meinBetreuer;
			}
		
		public void setMeinBetreuer(Mitarbeiter meinBetreuer)
			{
				this.meinBetreuer=meinBetreuer;
			}
		
		public Kunde(Mitarbeiter m)
			{
				meinBetreuer=m;
				m.setMeinKunde(this);
			}
		public Kunde()
			{
				
			}
	}

Java:
public class Mitarbeiter
	{
		private String name;
		private Kunde meinKunde;
		
		public String getName()
			{
				return name;
			}
		
		public void setName(String name)
			{
				this.name=name;
			}
		
		public Kunde getMeinKunde()
			{
				return meinKunde;
			}
		
		public void setMeinKunde(Kunde meinKunde)
			{
				this.meinKunde=meinKunde;
			}
		
		public Mitarbeiter(Kunde k)
			{
				meinKunde=k;
				k.setMeinBetreuer(this);
			}
		
		public Mitarbeiter()
			{
				
			}
	}

Nebenfrage:
- Warum ist in der class Kunde und Mitarbeiter ein leerer Standartkonstruktor (...public Kunde()...) der in der jetzigen Form aus meiner Sicht eigentlich keine Aufgabe erfüllt?

Java:
 		public Kunde()
			{
				
			}

Hauptfrage:
- Den teil des Quelltextes verstehe ich nicht ganz, da ich diese Kombination von this bisher nur aus der set Methode kannte (....this.meinBetreuer=meinBetreuer....)

Java:
 		public Kunde(Mitarbeiter m)			// Konstuktor mit Übergabe der Variable m des Datentyps Mitarbeiter
			{
				meinBetreuer=m;
				m.setMeinKunde(this);		// ??? wenn die Methode "setMeinKunde" mit dem Übergabewert "this" aufgerufen wird verstehe ich nicht auf was den this in diesem Moment verweist.  
			}


So ich bedanke mich schon mal im voraus,
lg
 
Zuletzt bearbeitet von einem Moderator:

Mofi

Bekanntes Mitglied
ohne den kompletten code gelesen zu haben
Java:
 System.out.println("Herr "+k1.setName()+" wird betreut von ");
lies mal ganz genau. da steht k1.setName(), aber da sollte k1.getName() stehen
(ergibt sonst keinen sinn)

edit:
hab nun den ganzen code gelesen.
also der "Standard-Konstruktor" der ohne Parameter. Der ist ansich nur dafür da, wenn man Objekte erstellen lassen will ohne dass was übergeben wird (in diesem Fall ein Mitarbeiter).
Das dient nur dazu da, dass kein Fehler auftritt wenn jemand
Java:
Kunde k = new Kunde();[/Java] schreibt. Solltest du nicht wollen, dass es möglich ist, kannst du den Konstruktor auch löschen.

Das mit dem this. wenn du [code=Java]m.setMeinKunde(this);
schreibst, dann übergibst du das aktuelle Objekt (in diesem Fall, das Objekt was grad erstellt wird, da diese Zeile im Konstruktor ist) an die Methode.
(Ist das verständlich genug erklärt? Ich finde das kann man nur shcwer erklären, hab selbst ewig gebraucht bis ich das mit den ganzen this verstanden hab, damals :) )
 
Zuletzt bearbeitet:

THEBRAIN

Mitglied
@mofi
- Ja das ist mir auch schon aufgefallen jedoch hatte ich diese stelle aus meinen Buch übernommen. Habe auch keinen Sinn in einen leeren set Aufruf gesehen...aber habe es so übernommen da ich davon ausging das mir der Hintergrund noch einleuchten wird wenn das Buch es so schreibt.
 

Landei

Top Contributor
Nebenfrage: Deine Klassen sind JavaBeans. Die Bean-Spezifikationen sehen auch einen öffentlichen argumentlosen Konstruktor vor, was es z.B. Frameworks wie JPA erleichtert, mit ihnen unbekannten Beans zu arbeiten. Natürlich kann man für den Hausgebrauch soviele zusätzliche Konstruktoren haben, wie man will.

Hauptfrage: this verweist immer auf die aktuelle Instanz der Klasse, in der der Code steht (deshalb kann man z.B. this in statischen Methoden nicht verwenden, da es dort keine Instanz gibt).

An sich ist daran nichts "magisches", du kannst dir mit etwas Aufwand eine Klasse mit einer Membervariablen, die sich wie "this" verhält, selbst basteln:

Java:
public class MyClass {

   private MyClass self;

   private MyClass() {
   }

   public static MyClass makeInstance() {
      MyClass mc = new MyClass();
      mc.self = mc;
      return mc;
   }
}

Self funktioniert dann ganz genau wie this, es ist einfach eine Referenz "auf sich selbst".
 
Zuletzt bearbeitet:

Mofi

Bekanntes Mitglied
@mofi
- Ja das ist mir auch schon aufgefallen jedoch hatte ich diese stelle aus meinen Buch übernommen. Habe auch keinen Sinn in einen leeren set Aufruf gesehen...aber habe es so übernommen da ich davon ausging das mir der Hintergrund noch einleuchten wird wenn das Buch es so schreibt.

Nun auch Bücher machen Fehler und wenn du aus dem set ein get machst, sollte es eigentlich funktionieren :) Wenn nicht müssen wir weiter suchen, aber mir sind keine anderen Fehler aufgefallen.
 

THEBRAIN

Mitglied
@ Landei
- Also ich programmiere mit Eclipse und erstelle damit auch alle classen. Von JavaBeans habe ich bis heute noch nix gehört :noe:
(lese mal gerade in wiki was das ist...)
 

THEBRAIN

Mitglied
bin noch am lesen,proben und zu verstehen eurer Hilfen ^^ :rtfm:


Sehe ich die Funktion richtig so?

Java:
 System.out.println("Herrn "+k1.getMeinBetreuer().getName());

Objekt k1. wird aufgerufen und führt die Methode
k1.getMeinBetreuer() und k1.getName() aus?
^^ Beide Methoden haben aber keinen Übergabewert



OT: Ich habe "Thinking in Java" (4. Ausgabe), da wurde auf S.801 und 806 in einem Array "Bulgarien" unter "Afrika" aufgeführt...

^^ dann nehmen wir mal das Buch "Programmieren mit Java in der Schule" Seite 72 mit dazu :D
 

Suinos

Bekanntes Mitglied
THEBRAIN hat gesagt.:
Java:
System.out.println("Herrn "+k1.getMeinBetreuer().getName());
  1. Das Objekt, welches von der Variable
    Code:
    k1
    referenziert wird, ruft die Methode
    Code:
    getMeinBetreuer()
    auf
  2. Der Rückgabewert dieser Methode, welcher ein Objekt der Klasse
    Code:
    Mitarbeiter
    ist, ruft seine Methode
    Code:
    getName()
    auf
  3. Der Rückgabewert dieser Methode, welcher ein Objekt der Klasse
    Code:
    String
    ist, wird an den
    Code:
    String
    Code:
    "Herrn "
    angehängt und auf
    Code:
    System.out
    ausgegeben

Du könntest also auch dies schreiben (mit dem Unterschied, dass dann weitere Variablen existieren):
Java:
Mitarbeiter betreuer = k1.getMeinBetreuer();
String betreuerName = betreuer.getName();

System.out.println("Herrn " + betreuerName);

---

THEBRAIN hat gesagt.:
Beide Methoden haben aber keinen Übergabewert
Genau: Beide Methoden haben keine Parameter, darum übergibst du keine Argumente. ;)
 

THEBRAIN

Mitglied
Punkt 1 und 3 sind soweit verständlich für mich aber bei Punkt 2 hapert es noch ein wenig.

wenn wir jetzt nur mal den teil Betrachten dann sollte es ja folgendermaßen ablaufen:

Java:
Kunde k1=new Kunde();
...
public int getMeinBetreuer()
{return 999}
...
syso(k1.getMeinBetreuer());     // ausgabe lautet --> 999

^^ ich erwarte beim Aufruf der Methode getMeinBetreuer den Rückgabewert 999 der klasse int.
So kenne ich das bis her ^^


Nun bei der anderen Aufstellung scheint es anders zu sein:
Java:
Kunde k1=new Kunde(m1);
...
System.out.println("Herrn "+k1.getMeinBetreuer().getName());

in der klasse Kunde steht die Methode und sieht folgendermaßen aus:

Java:
public Mitarbeiter getMeinBetreuer()
			{
				return meinBetreuer;
			}

Demnach erwarte ich eigentlich das er mir beim Methodenaufruf von k1.getMeinBetreuer() das Objekt meinBetreuer der klasse Mitarbeiter zurück gibt. Was aber irgendwie kein Sinn ergibt... ???:L
 

Ezra

Bekanntes Mitglied
Was genau ergibt da keinen Sinn?

Vielleicht wird es verständlicher, wenn ich den Code so umschreibe?

Code:
Mitarbeiter kundenbetreuer = k1.getMeinBetreuer();
String betreuerName = kundenbetreuer.getName();
System.out.println("Herrn "+betreuerName);

Das ist äquivalent zu
Code:
System.out.println("Herrn "+k1.getMeinBetreuer().getName());
 

THEBRAIN

Mitglied
Was genau ergibt da keinen Sinn?

Vielleicht wird es verständlicher, wenn ich den Code so umschreibe?

Code:
Mitarbeiter kundenbetreuer = k1.getMeinBetreuer();
String betreuerName = kundenbetreuer.getName();
System.out.println("Herrn "+betreuerName);

Also in der Stapelverarbeitung würde das wohl so ablaufen:

1) Ausgangsposition:
Java:
Mitarbeiter kundenbetreuer = k1.getMeinBetreuer();
String betreuerName = kundenbetreuer.getName();
System.out.println("Herrn "+betreuerName);

2) das Objekt betreuerName verweist auf kundenbetreuer.getName() somit ergibt sich folgendes:
Java:
Mitarbeiter kundenbetreuer = k1.getMeinBetreuer();
String betreuerName = kundenbetreuer.getName();
System.out.println("Herrn "+kundenbetreuer.getName());     //hier ist die änderung

3) nun würde der schritt kommen wo wir irgendwie zur Methode getName() kommen..
folge ich dem soweit richtig?
 
Zuletzt bearbeitet:

THEBRAIN

Mitglied
vielen dank noch mal an allen die mir geholfen haben!!!
Habe eure Hilfen noch mal sacken lassen und ein Tag später noch mal alles in ruhe durchgelesen und eingeprägt. Nun hat es gestern die Erleuchtung gegeben und alle fragen wurden beantwortet.

Fehler im ersten Post des Quelltextes:
- Zeile 9 von public class Verwaltung : k1.setName() muss k1.getName() heißen
- Zeile 14 von public class Verwaltung: das "+" fehlt.
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
M [Hibernate] Speichern von ManyToOne-Beziehungen in der DB Java Basics - Anfänger-Themen 12
B hsqldb (beziehungen zw. Tabellen) Java Basics - Anfänger-Themen 8
U Implementation von Beziehungen Java Basics - Anfänger-Themen 4
E n:1 Beziehungen umsetzen Java Basics - Anfänger-Themen 13
M Beziehungen zwischen HashMaps Java Basics - Anfänger-Themen 12
G Beziehungen in Java ! Beispiele ! Java Basics - Anfänger-Themen 5
T Beziehungen erstellen? Java Basics - Anfänger-Themen 17
Student Beziehungen zwischen Klassen - wie strukturiere ich das? Java Basics - Anfänger-Themen 23
M Spielerbewegungen realisieren Java Basics - Anfänger-Themen 2
A MouseMotionListener - wie Mausverfolgung und Neuzeichnen realisieren? Java Basics - Anfänger-Themen 12
H Frage um Eingbeaufforderung zu realisieren Java Basics - Anfänger-Themen 4
A Wie kann ich folgendes Projekt realisieren? Java Basics - Anfänger-Themen 4
L Methoden Methode mit drei Rückgabewerten realisieren Java Basics - Anfänger-Themen 3
L Schaltung realisieren Java Basics - Anfänger-Themen 3
J Frage Antwort Spiel - Wie Zeitcountdown realisieren? Java Basics - Anfänger-Themen 2
L Liste als Array realisieren Java Basics - Anfänger-Themen 23
J Mustererkennung realisieren Java Basics - Anfänger-Themen 10
Y chat programm im internet realisieren Java Basics - Anfänger-Themen 5
Z Wie repaint() bei Uhr realisieren? Java Basics - Anfänger-Themen 12
T Kleines Spiel realisieren - wie? Java Basics - Anfänger-Themen 6
S Ausgabe realisieren Java Basics - Anfänger-Themen 2
S Grössere MenuBars realisieren Java Basics - Anfänger-Themen 7
D Java Programm mit Internetzugriff realisieren Java Basics - Anfänger-Themen 8
ARadauer timeout realisieren Java Basics - Anfänger-Themen 5
D Logging sätmlicher Vorgänge, wie am besten realisieren? Java Basics - Anfänger-Themen 6
G Physikalisches Problem realisieren Java Basics - Anfänger-Themen 11
G isEmpty selbst realisieren Java Basics - Anfänger-Themen 47
U Texteditor mit methoden realisieren Java Basics - Anfänger-Themen 13
A Beziehung 1-n in Java realisieren Java Basics - Anfänger-Themen 17
S Zeilenumbrüche realisieren Java Basics - Anfänger-Themen 6
I SaveFile Dialog - wie realisieren ? Java Basics - Anfänger-Themen 4
L Timer Swing realisieren Java Basics - Anfänger-Themen 4
P :shock: teilweises wurzelziehen realisieren Java Basics - Anfänger-Themen 9
R Zeitaufwand für Suchmaschine mit Lucene realisieren Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben