![]() |
Ludwig-Maximilians-Universität München
Institut für Informatik Lehr- und Forschungseinheit für Datenbanksysteme |
University of Munich
Institute for Computer Science Database and Information Systems |
JAVA ist eine objektorientierte Programmiersprache. Im Unterschied zu anderen Programmiertechniken,
verbirgt es sich bei der objektorientierten Programmierung eine neue
Denkweise der Programmierung, wobei die Daten im Vordergrund stehen.
Jedes Objekt kann durch eigene Operationen (Methoden) aktiv werden
(Objekt = Daten + Methoden).
Da einige Studenten die Datenverkapselung mit 'public' und 'private'
nicht ganz verstanden haben, hat Fabian Birzele ein einfaches und
gut kommentiertes Beispiel dazu vorbereitet.
/** Diese Klasse implementiert einige Grundfunktionen eines Bankkontos. Ich möchte an diesem Beispiel soweit möglich alle verschiedenen Zugriffsspezifikatoren und ihre Verwendungsweise demonstrieren. Wichtig ist es, zu verstehen, dass es in Java oft nicht zwingend ist etwas private oder public zu machen (der Kompiler akzeptiert beides) sonders das Design der Klasse und die damit verbundene Verwendung der Variablen und Methoden steht dabei im Vordergrund */ public class Konto { /* Klassenvariablen, werden static deklariert, gelten für alle Instanzen einer Klasse gleich (haben den gleichen Wert) und können, falls sie public sind mit Klassenname.Variablenname aufgerufen werden, ohne dass man ein spezielles Objekt (Instanz) der Klasse erzeugt hat */ // Counter, zählt die Anzahl der bisher erzeugten Konten public static int kontoCounter = 0; /* Attributvariablen, werden ohne den Bezeichner static deklariert und be- schreiben spezielle Eigenschaften eines Objektes. Jede Instanz einer Klasse kann hierbei unterschiedliche Werte für ihre Attribut- (oder auch Instanzvariablen genannt) haben. Instanzvariablen werden, wenn sie public sind mit Instanzname.Variablenname aufgerufen, wenn sie private sind, können sie nicht auf diese Art und Weise von außen eingesehen werden (Kapselung) */ // Private Variablen, sie sollen, in diesem Fall aus Sicherheitsgründen (aus // Sicht der Bank), von aussen nicht einsehbar sein // Kontostand private int kontoStand; // Passwort für das Konto private String kontoPasswort; // Public Variablen, sie können von aussen eingesehen werden und ihre Werte mit // Instanzname.Variablenname aufgerufen werden. // Kontonummer public int kontoNummer; /* Konstruktor: er wird aufgerufen, wenn man mit new Konto(...) eine neue Instanz der Klasse Konto erzeugt. In ihm sollten alle für die Klasse relevanten und wichtigen Variablen... initialisiert werden. Er muss public sein, hat keinen Bezeichner für den Rückgabewert (also weder void noch sonst etwas) und heißt genauso wie die Klasse */ public Konto(String kontoPasswort, int kontoStand) { // Initialisierung der Instanzvariablen, this zeigt dabei an, dass mit der zu // initialisierenden Variable die Instanzvariable und nicht der formale Parameter // mit gleichen Namen gemeint ist this.kontoStand = kontoStand; this.kontoPasswort = kontoPasswort; // Vergabe einer Kontonummer, die Kontonummer richtet sich dabei nach dem Stand des // Kontocounters (static Variable). So wird sichergestellt, dass jede Kontonummer nur // einmal vergeben wird kontoNummer = kontoCounter; // erhöhen des KontoCounters, damit nächstes Konto eine andere Nummer bekommt kontoCounter ++; } /* Instanzmethoden: Sie implementieren ein bestimmtes Verhalten, dass das Objekt an den Tag legen soll und können sowohl public, als auch private sein. Private Methoden sind dabei nur innerhalb der Klasse aufrufbar, public Methoden sind nach außen hin sichtbar und können mit Instanzname.Methodenname(...) aufgerufen werden. Sie sind nicht static! */ /* Diese Methode liefert uns den Kontostand (als String), wenn das richtige Passwort eingegeben wurde ansonsten gibt die Methode, da noch keine Exceptions in der Vorlesung behandelt wurden, den String "falsches Passwort" zurück */ public String getKontoStand(String eingabePasswort) { // Passwort wird mit eigegebenen Passwort verglichen. Achtung, hier kann man nicht // mit == vergleichen, da dann die Refferenzadressen verglichen werden würden, es // muss also mit der String1.equals(String2) - Methode verglichen werden! if(kontoPasswort.equals(eingabePasswort)) { return "" + kontoStand; } else { return "falsches Passwort"; } } /* Diese Methode lässt den Kunden mit dem richtigen Passwort Geld von seinem Konto abheben. Ist das Abheben erfolgreich gewesen wird true zurückgegeben, ansonsten false */ public boolean geldAbheben(String eingabePasswort, int amount) { if(kontoPasswort.equals(eingabePasswort)) { if(amount > 0) { kontoStand -= amount; return true; } } return false; } /* Diese Methode ist eine Klassenmethode und wird beim Start des Javaprogrammes aufgerufen. Allgemein stehen Klassenmethoden sozusagen über den erzeugten Instanzen dieser Klasse (es müssen sogar gar keine Instanzen erzeugt worden sein). Diese Methoden können mit Klassenname.Methodenname aufgerufen werden. */ public static void main (String [] args) { // Erzeugung neuer Instanzen der Klasse Konto Konto konto1 = new Konto("1234", 1000); Konto konto2 = new Konto("5678", 40000); // Ausdrucken der Kontonummer System.out.println("Kontonummer Konto1: " + konto1.kontoNummer); // Kontostand holen System.out.println("Kontostand Konto2: " + konto2.getKontoStand("5678")); // Geldabheben if(konto2.geldAbheben("5678", 200)) { System.out.println("Sei haben erfolgreich 200 DM abgehoben"); } else { System.out.println("Sie konnten kein Geld abheben: Falsches Passwort oder interner Fehler"); } System.out.println("Kontostand Konto2 nach Abheben: " + konto2.getKontoStand("5678")); System.out.println("Momentaner Kontozaehler: " + Konto.kontoCounter); } }