Skip to content

Instantly share code, notes, and snippets.

@timkaechele
Created November 30, 2014 21:34
Show Gist options
  • Save timkaechele/7a86f0771e50add45528 to your computer and use it in GitHub Desktop.
Save timkaechele/7a86f0771e50add45528 to your computer and use it in GitHub Desktop.
public class Person {
/*
* Es ist in Java Konvetion alle Objektvariablen als "private" zu deklarieren,
* das hat den Vorteil, dass ein Benutzer der Klasse nicht einfach eine
* möglicherweiße fehlerhafte Variable setzt, beispielsweiße -1 für das Alter
* der Person
*/
private Person ehepartner;
private String vorname;
private String nachname;
private int alter;
public static void main(String [] args) {
}
/*
* In einem Konstruktor wird das Objekt "konstruiert". Das bedeutet es werden
* ihm Parameter übergeben, die dann im Objekt selbst gespeichert werden
* können. Es ist hilfreich nur die Parameter anzufordern, die auch wirklich
* zur Benutzung der Klasse von Nöten sind. In diesem Fall wäre es bspw.
* vollkommen unsinnig den Ehepartner als Parameter im Konstruktor zu
* übergeben, da es ja schließlich auch unverheiratete Personen geben kann.
*/
public Person(String vorname, String nachname, int alter) {
/*
* Obwohl die Variablen private sind kann man innerhalb des Objekts auf sie
* zugreifen: siehe Tabelle
*/
this.nachname = nachname;
this.alter = alter;
}
/*
* Wie man an diesem Beispiel sieht kann es auch mehrere Konstruktoren geben.
* So ist es mögliche eine Klasse
*/
public Person(String vorname, String nachname, int alter) {
this(nachname, alter);
this.vorname = vorname;
}
public String getVorname() {
return this.vorname;
}
public String getNachname() {
return this.nachname;
}
/*
* Da es nicht möglich ist außerhalb des Objekts auf private Objektvariablen
* zuzugreifen erzeugt man getter und setter. Der Vorteil dieser Art des
* Zugriffs ist die genaue Kontrolle des Programmierers der Klasse über den
* Zugriff.
*/
public int getAlter() {
return this.alter;
}
/*
* Möchte man beispielsweise das Alter ändern, tut man das über den setter
* setAlter. Die Funktion nimmt den Paramater alter entgegen, der das neue
* Alter darstellt. Dieses neue Alter muss gewisse Anforderungen erfüllen.
* Beispiele für Anforderungen:
* - größer 0
* - größer bisheriges Alter
* Wie man sieht hilft diese Art des kontrollierten Zugriffs, die
* Konsistenz des Objekts zu wahren, da es nicht möglich ist durch den Setter
* eine Person zu erstellen, die ein unmögliches Alter hat.
*/
public void setAlter(int alter) {
if(this.alter < alter & alter > 0) {
this.alter = alter
} else {
/*
* Hier würde man den Benutzer der Klasse auf seine inkorrekte Eingabe
* hinweisen.
*/
}
}
public void heiraten(Person ehepartner) {
/*
* Hier wird der Kurzschlussoperator && verwendet, da es ansonsten zu
* Fehlern bei der Ausführung kommen kann, da sollte der
* Ehegatte == null sein, es eine NullPointerException bei dem
* Zugriff auf ehegatte.ehegatte geben würde.
*/
if (ehegatte != null && this != ehegatte && this.ehegatte == null
&& ehegatte.ehegatte == null) {
/*
* Hier wird der eigentliche Code zur Heirat ausgehürt
*/
this.ehegatte = ehegatte;
ehegatte.heiraten(ehegatte);
}
/*
* Für gewöhnlich würde man hier wohl ein Else-Statement platzieren und
* eine Exception ausführen, die den Benutzer auf die Probleme bei der
* Heirat hinweist.
*/
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment