Java - Klassen und Objekte Der Würfel hat 12 Kanten. Der Würfel ist grün eingefärbt. Die Kanten sind in schwarz gezeichnet. Der Würfel kann gedreht werden. Die Kantenfarbe und die Seitenfarbe kann verändert werden. Die Kantenlänge kann verändert werden Leibniz Universität IT Services Anja Aue
Objekt Beschreibung: Kantenlänge von 5,5 cm. Farbe grün. Methode: Drehen. Methode: Neue Farbe. Java - Einführung 06.05.15 Seite 2
Objekt Substantive in einem Text. Ein Ding (Exemplar, Instanz) aus der realen Welt. Beschreibung durch Attribute (Eigenschaften). Veränderung der Attribute durch Aktionen wie Drehen, Färben etc. Java - Einführung 06.05.15 Seite 3
Klasse Ein Würfel hat eine Kantenlänge von x und eine Farbe. Jeder Würfel kann gedreht werden. Jeder Würfel kann eingefärbt werden. Java - Einführung 06.05.15 Seite 4
Objektorientierte Programmierung Abstraktion von Gegenstände der realen Welt mit Hilfe von Klassen Methoden und Attribute werden gekapselt. Die Attribute können nur mit Hilfe der Methoden verändert werden. Die Attribute können nicht von außen direkt verändert werden. Eltern können von Kindern erben. Ein Rechteck erbt Eigenschaften von einem Würfel. Java - Einführung 06.05.15 Seite 5
Klasse und Objekt Klasse Östl. Länge Nördl. Länge Zeitkorrektur gegen 10 östl. Länge Ort Objekt 9,7 52.4 +1 Minute Hannover Ausgabe der Information Ändert Informationen Java - Einführung 06.05.15 Seite 6
Beispiel Klasse Postalische Adresse Straße Hausnummer Postleitzahl Ort Wohnt an der Adresse Zieht um Person Anrede Vorname Nachname ändert Java - Einführung 06.05.15 Seite 7
Beispiel Objekt Postalische Adresse Schloßwender Str. 5 30159 Hannover Wohnt Schloßwender Str 5 ; 30159 Hannover Zieht um in den Welfengarten 6, 30167 Hannover Person Herr Tom Meier Ändert den Namen in Meier-Müller Java - Einführung 06.05.15 Seite 8
Java-Projekt in NetBeans anlegen File New Project. Java - Einführung 06.05.15 Seite 9
1. Schritt: Auswahl einer Projektkategorie Categories Java. Projects Java Application. Das Grundgerüst für eine Java-Anwendung wird automatisiert erstellt. Java - Einführung 06.05.15 Seite 10
2. Schritt: Name und Speicherort des Projekts Java - Einführung 06.05.15 Seite 11
Datei Klasse dem Projekt hinzufügen File New File. Categories Java. File Types Java Class. Java - Einführung 06.05.15 Seite 12
Festlegung des Klassennamens Eingabe eines Class Name. Der Klassenname ist gleichzeitig der Dateiname. Klassennamen beginnen immer mit einem Großbuchstaben. Java - Einführung 06.05.15 Seite 13
Klasse Kreis in Java public class Kreis { double radius; double umfang; double flaeche; String farbe; Attribute / Eigenschaften public Kreis(){ radius = 0; farbe = "blau"; } Konstruktor public void schreiberadius(double radius) { this.radius = radius; flaeche = Math.PI * Math.pow(radius, 2); this.umfang = 2 * radius * Math.PI; } Methoden Java - Einführung 06.05.15 Seite 14
Objektvariable public static void main(string[] args) { Kreis kreisblau; } Klasse variable. Eine Objektvariable von einer bestimmten Klasse wird deklariert. Die Klasse entspricht einem Namen in einem Klassenkopf. Der Name ist in dem Paket eindeutig. Java - Einführung 06.05.15 Seite 15
Verweis auf ein Objekt public static void main(string[] args) { Kreis kreisblau; kreisblau = new Kreis(); } new Klasse(arg01, argn). Mit Hilfe des Schlüsselwortes new wird eine Instanz von einer Klasse erzeugt. Es wird ein konkretes Objekt erzeugt. Es wird ein Konstruktor der Klasse aufgerufen. Der Speicherort des Objekts wird in der Objektvariablen gespeichert. Die Variable verweist auf eine bestimmte Adresse. Java - Einführung 06.05.15 Seite 16
Instanzierung Klasse Kreis Radius Farbe Setzte Radius Setze Farbe Lese Informationen Objekt Blau 5 Blau Objekt Rot 1 Rot Java - Einführung 06.05.15 Seite 17
Objekte (Instanzen) einer Klasse Beschreiben ein konkretes Ding. Jedes Ding einer bestimmten Gruppe (Klasse) wird auf eine bestimmte Art mit Hilfe von Konstruktoren erzeugt. Jedes Ding unterscheidet sich von allen anderen Dingen in einer Gruppe durch mindestens einen Attributwert. Jedes Ding einer Klasse hat die gleichen Methoden, um die Attribute zu verändern. Java - Einführung 06.05.15 Seite 18
Grundgerüst einer Klasse public class Kreis { } Jede Klasse hat einen Klassenkopf zugriffsmodifikator class name. In dem Klassenrumpf werden Attribute, Konstruktoren und Methoden definiert. Der Klassenrumpf wird durch die geschweiften Klammern begrenzt. Java - Einführung 06.05.15 Seite 19
Zugriffsmodifikatoren public. Alle anderen Klassen und Pakete können auf die Klasse zugreifen. Die Klasse kann Eigenschaften und Methoden vererben. Pro Datei wird eine öffentliche Klasse definiert. private. Auf die Klasse kann nicht von außen zugegriffen werden. final. Die Klasse kann keine Eigenschaften und Methoden an andere Klassen vererben. Java - Einführung 06.05.15 Seite 20
Klassenname Beginn mit einem Großbuchstaben. Zum Beispiel Person. Nutzung der Kamel-Notation. Zum Beispiel PrivatKunde. Jedes Wort beginnt mit einem Großbuchstaben. Der Name spiegelt die Bezeichnung eines Dinges in der realen Welt wieder. Der Name ist eindeutig innerhalb eines Packages. Java - Einführung 06.05.15 Seite 21
Attribute in Java public class Kreis { double radius; String farbe; public class Kreis { private double radius; private String farbe; Java - Einführung 06.05.15 Seite 22
Attribute (Instanzvariablen, Felder) Typ variable. Beschreibung einer Objektgruppe. Datenstruktur eines Objektes. Variablen in einer Klasse. Der Wert eines Objektes unterscheidet sich mindestens in einem Attributwert von allen anderen Objekten einer Gruppe Java - Einführung 06.05.15 Seite 23
Zugriffsmodifikatoren für Instanzvariablen private String farbe; public String farbe; String farbe; public. Standardmäßig sind alle Variablen öffentlich. Die Variable kann von der dazugehörigen Klasse und allen anderen Klassen innerhalb des Packages verändert werden. private. Die Variable kann nur innerhalb der dazugehörigen Klassen verändert werden. Die Variable ist vor Veränderungen von außen geschützt. Java - Einführung 06.05.15 Seite 24
Hinweis zu Namen von Instanzvariablen Es sollten nur die Buchstaben A... Z und a.. z genutzt werden. Alle Ziffern von 0 bis 9 können genutzt werden. Aber nicht am Anfang eines benutzerdefinierten Namens. Der Unterstrich kann mehrere Wörter in einem Namen verbinden. Schlüsselwörter werden als benutzerdefinierte Namen nicht genutzt. (siehe https://docs.oracle.com/javase/tutorial/ java/nutsandbolts/_keywords.html). Kamel-Notation (zum Beispiel kreisradius). Das erste Wort beginnt mit einem Kleinbuchstaben. Alle nachfolgenden Wörter beginnen mit einem Großbuchstaben. Java - Einführung 06.05.15 Seite 25
Prinzip Datenkapselung Instanzvariablen (Attribute) sollten immer als private deklariert werden. Attributwerte sind in einer Klasse gekapselt. Sie können nur durch die entsprechenden Methoden der Klasse verändert werden. Attributwerte sind vor Veränderungen von außen geschützt. Java - Einführung 06.05.15 Seite 26
Methoden in Java public class Kreis { public void schreiberadius(double radius) { this.radius = radius; } public String leseinformation() { String ausgabe; ausgabe = "Radius: " + radius; ausgabe = ausgabe + "\nfarbe: " + farbe; return ausgabe; } Java - Einführung 06.05.15 Seite 27
Methoden Abfolge von Anweisungen, die der Computer versteht. Zusammenfassung von Aktionen. Schnittstellen zum Benutzer. Setzen von nicht-öffentlichen Instanzvariablen. Java - Einführung 06.05.15 Seite 28
Aufbau von Methoden public void schreibefarbe(string farbe) { this.farbe = farbe; } Methoden haben einen Methodenkopf Rückgabewert name(param01, paramn). Der Methodenrumpf fasst die verschiedenen Anweisungen zusammen. Der Methodenrumpf beginnt und endet mit den geschweiften Klammern. Java - Einführung 06.05.15 Seite 29
Methodennamen Beginn mit einem Kleinbuchstaben. Zusammengesetzte Namen: Das erste Wort beginnt mit einem Kleinbuchstaben. Alle anderen Wörter beginnen mit einem Großbuchstaben. Der Name spiegelt die Aktion wieder. Häufig wird ein Verb für einen Methodennamen genutzt. Der Name ist eindeutig in der Klasse. Java - Einführung 06.05.15 Seite 30
Weitere Hinweise Methoden, die Werte für Instanzvariablen setzen, beginnen häufig mit setze oder set. Methoden, die Werte für Instanzvariablen lesen, beginnen häufig mit liefere oder get. Methoden, die zwei Werte vergleichen beginnen häufig mit is. Java - Einführung 06.05.15 Seite 31
Parameterliste (param01, paramn). Beginn und Ende mit runden Klammern. Die Parameter in der Liste werden durch Kommata getrennt. Die Parameterliste kann leer sein. In den Klammern werden keine Parameter aufgelistet. Java - Einführung 06.05.15 Seite 32
Parameter Definition eines Parameters: Typ variable. Die Parameter im Aufruf der Methode entsprechen der Anzahl der zu übergebenen Parameter in der Parameterliste im Kopf. Die Typen der Parameter im Aufruf und im Methodenkopf sollten gleich sein. Java - Einführung 06.05.15 Seite 33
Zugriffsmodifikator Eine Methode ist meist public (öffentlich) sein. Die Methode kann von außen aufgerufen werden. Die Methode stellt eine Schnittstelle nach außen dar. Eine private Methode kann nur innerhalb der Klasse aufgerufen werden. Die Methode ist nicht nach außen sichtbar. Java - Einführung 06.05.15 Seite 34
Aufruf der Methode Kreis kreisrot String fuellfarbe = "Rot"; kreisrot.schreibefarbe("rot"); kreisrot.schreibefarbe(fuellfarbe); Instanz.Methode(arg01, arg02, argn). Methoden werden von Objekten ihrer Klasse aufgerufen. Objekt und Methode werden mit dem Punkt-Operator verbunden. Der Methodenname muss immer mit runden Klammern angegeben werden. In den runden Klammern werden die Parameter entsprechend des Methodenkopfes übergeben. Java - Einführung 06.05.15 Seite 35
Übergabe der Parameter public void schreibefarbe(string farbe) kreisrot.schreibefarbe("rot"); Das erste Argument im Aufruf initialisiert den ersten Parameter. Das zweite Argument übergibt einen Wert an den zweiten Parameter und so weiter. Argument und Parameter sollten den gleichen Datentyp haben. Java - Einführung 06.05.15 Seite 36
Wertparameter ( Call by value ) public void schreibefarbe(string farbe) kreisrot.schreibefarbe("rot"); Beim Aufruf einer Methode wird der Wert einer Variablen übergeben. Werte von primitiven Datentypen werden kopiert. Die Quelle ist schreibgeschützt. Der Wert der Quelle wird nicht verändert. Referenzen in Objektvariablen werden kopiert. Methode und der Parameter im Aufruf verweisen aber auf das gleiche Objekt im Speicher! Java - Einführung 06.05.15 Seite 37
Variablen in Methoden public double berechneflaeche(double radius) { double flaeche; if (radius!= this.radius) { this.radius = radius; } } flaeche = Math.PI * Math.pow(this.radius, 2); return flaeche; Java - Einführung 06.05.15 Seite 38
Instanzvariablen in Methoden this.radius radius Alle Instanzvariablen können in allen Methoden der Klasse genutzt und verändert werden. Instanzvariablen sind lokal in einer Klasse gekapselt. this.instanzvariable. Das Schlüsselwort this ist ein Platzhalter für das Objekt, welches die Methode aufgerufen hat. Es wird die Instanzvariable des Aufrufers genutzt. Objektvariable und der Platzhalter werden mit einem Punkt verbunden. Java - Einführung 06.05.15 Seite 39
Deklaration von Variablen in Methoden public double berechneflaeche(double radius) { double flaeche; flaeche = Math.PI * Math.pow(this.radius, 2); Datentyp variable. Der Datentyp gibt an, welche Art von Werten gespeichert werden soll. Die, in einer Methode deklarierte Variable, kann nur in dieser Methode genutzt werden. In Methoden deklarierte Variablen sind lokal. Java - Einführung 06.05.15 Seite 40
Existenz von Variablen in Methoden public double berechneflaeche(double radius) { double flaeche; this.radius = radius; flaeche = Math.PI * Math.pow(this.radius, 2); Eine Instanzvariable ist in der Klasse existent, in der sie deklariert ist. Eine lokale Variable ist nur in dem Block existent, in dem sie definiert wurde. Ein Block wird durch geschweifte Klammern gekennzeichnet. Ein Parameter ist nur in der Methode sichtbar, in deren Parameterliste dieser definiert ist. Java - Einführung 06.05.15 Seite 41
Sichtbarkeit von Variablen in Methoden public double berechneflaeche(double radius) { double flaeche; this.radius = radius; flaeche = Math.PI * Math.pow(this.radius, 2); Eine lokale Variable ist nur in dem Block sichtbar, in dem sie definiert wurde. Ein Parameter einer Methode entspricht einer lokalen Variablen. Eine Instanzvariable kann von einer lokalen Variablen gleichen Namens überdeckt werden. NetBeans zeigt eine Warnung an. Bei einer Überdeckung muss die Instanzvariable in Verbindung mit this genutzt werden! Java - Einführung 06.05.15 Seite 42
Prozedur public void schreiberadius(double radius) void schreiberadius(double radius) Die Methode gibt keinen Wert an den Aufrufer zurück, Das Schlüsselwort void kennzeichnet Methoden, die keinen Wert an den Aufrufer zurückgeben. Java - Einführung 06.05.15 Seite 43
Funktion public String leseinformation() { String ausgabe; ausgabe = "Radius: " + radius; ausgabe = ausgabe + "\nfarbe: " + farbe; return ausgabe; } Die Methode gibt einen Wert von einem bestimmten Datentyp an den Aufrufer zurück, In diesem Beispiel wird ein String-Wert zurückgegeben. Java - Einführung 06.05.15 Seite 44
Datentyp des Rückgabewertes public String leseinformation() Eine Methode kann jeden primitiven Datentyp oder Objekttyp zurück geben. Eine Methode gibt immer eine Datenstruktur / einen Wert zurück. Java - Einführung 06.05.15 Seite 45
Rückgabe des Wertes public String leseinformation() { return ausgabe; } Mit Hilfe von return wird ein Wert an den Aufrufer zurückgegeben. Die Methode wird beendet. Der Rückgabewert sollte den gleichen Typ, wie im Methodenkopf angegeben, besitzen. Java - Einführung 06.05.15 Seite 46
Aufruf der Methode String ausgabe; ausgabe = kreisrot.leseinformation(); Der Rückgabewert einer Methode kann einer Variablen zugewiesen werden. Die Variable ist vom gleichen Typ wie die Methode. Java - Einführung 06.05.15 Seite 47
Rückgabewert in switch-anweisungen public String gebergbfarbe() { } switch(this.farbe) { case "blau": return "0,0,255"; case "rot": return "255,0,0"; default: return "unbekannte Farbe"; } Java - Einführung 06.05.15 Seite 48
Aufruf von Instanzmethoden public String leseinformation() { String ausgabe; ausgabe = "Radius: " + radius; ausgabe = ausgabe + "\nfarbe: " + this.farbe; ausgabe = ausgabe + "\nfläche: " + this.berechneflaeche(radius); return ausgabe; } Methoden in der gleichen Klasse werden mit Hilfe des Schlüsselwortes this aufgerufen. Java - Einführung 06.05.15 Seite 49
Konstrukturen Methoden zur Erzeugung von Instanzen. Übergabe von Startwerte für die Attribute. Der Name von Konstruktoren ist immer gleich der Klasse. Automatischer Aufruf durch das Schlüsselwort new(). Java - Einführung 06.05.15 Seite 50
Parameterloser Konstruktor public Kreis() { radius = 0; farbe = "blau"; } Die Parameterliste ist leer. Es werden Standardwerte für die Instanzvariablen gesetzt. Java - Einführung 06.05.15 Seite 51
Standardkonstruktor Für jede Klasse wird automatisiert ein parameterloser Konstruktor angelegt. Der Standard-Konstruktor setzt für Dezimal- und Ganzzahlen einen Wert von 0, für boolsche Variablen false, Zeichenvariablen auf '\u0000' und Referenzen auf Null. Java - Einführung 06.05.15 Seite 52
Aufruf des parameterlosen Konstruktor Kreis kreisblau; kreisblau = new Kreis(); Mit Hilfe des Schlüsselwortes new Objekt() wird der parameterlose Konstruktor aufgerufen. Die Attribute des Objektes werden mit den Standardwerten belegt. Java - Einführung 06.05.15 Seite 53
Übergabe von Parametern public Kreis(double dblradius) { radius = dblradius; farbe = "blau"; } In der Parameterliste werden die verschiedenen Parameter aufgelistet. Die Werte in den Parametern werden jeweils einer Instanzvariablen im Konstruktor zugewiesen. Java - Einführung 06.05.15 Seite 54
Aufruf des Konstruktor Kreis kreisblau; kreisblau = new Kreis(5); Mit Hilfe des Schlüsselwortes new Objekt(arg01,, argn) wird der passende Konstruktor aufgerufen. Die Attribute des Objektes werden mit den übergebenen Werten belegt. In Abhängigkeit der Anzahl der Argumente und deren Datentyp wird automatisiert der passende Konstruktor aufgerufen. In einer Klasse kann ein parameterloser und andere Konstruktoren vorkommen. Java - Einführung 06.05.15 Seite 55
Konstante Instanzvariablen private final double pi = 3.14159; private final String linienfarbe; Mit Hilfe des Schlüsselwortes final werden Variablen in einer Klasse gekennzeichnet, die nicht durch eine Methode verändert werden dürfen. Jedes Objekt hat den gleichen Wert für eine konstante Instanzvariable. Konstante Instanzvariablen können gleichzeitig deklariert und initialisiert werden. Andre Möglichkeit: Initialisierung im Konstruktor. Java - Einführung 06.05.15 Seite 56
Initialisierung von konstanten Instanzvariablen public Kreis(double dblradius, String farbe) { radius = dblradius; linienfarbe = farbe; } Die konstante Instanzvariable muss beim Aufruf des Konstruktors initialisiert werden. Java - Einführung 06.05.15 Seite 57
Statische Attribute static int anzahlkreise; Kreis.anzahlKreise++; Mit Hilfe des Schlüsselwortes static werden Klassenvariablen definiert. Klassenvariablen beschreiben Attribute für die Klasse und sind für alle Instanzen der Klasse gleich. Statische Attribute werden über den Namen der Klasse angesprochen. Klassenvariablen werden häufig in Konstruktoren gesetzt. Java - Einführung 06.05.15 Seite 58
Statische Methoden static Kreis kreisneu() { final int MAX_KREIS = 2; } if (Kreis.anzahlKreise < MAX_KREIS){ return new Kreis(); } else{ return null; } Java - Einführung 06.05.15 Seite 59
aufrufen Kreis kreisgruen; kreisgruen = Kreis.kreisNeu(); Klasse.Methode(). Die Methode kann ohne Erzeugung einer Instanz aufgerufen werden. In diesem Beispiel gibt die Klassenmethode ein Objekt Kreis zurück. Java - Einführung 06.05.15 Seite 60
Dokumentationskommentare Beschreibung von Klassen, Methoden, Schnittstellen, Aufzählungen etc. Dokumentation direkt im Programm. JavaDoc erstellt aus diesen Kommentaren Beschreibungsdateien (meist im Format HTML). Java - Einführung 06.05.15 Seite 61
Aufbau /** * * @author Anja Aue * Arbeiten mit einem Kreis */ Beginn: Schrägstrich und zwei Sternchen Ende: Sternchen und Schrägstrich Zeilen zwischen Beginn und Ende: Sternchen Mit Hilfe des Add-Zeichens werden vordefinierte Tags gekennzeichnet. Java - Einführung 06.05.15 Seite 62
Tags in Dokumentationskommentaren @autor name. Der Name des Software-Entwicklers. @param variable. Die Parameter, die an eine Methode übergeben werden. @return variable. Welcher Wert wird zurückgegeben? @version version. Version der Klasse. @since jdk-version. Seit wann ist die Funktionalität implementiert? Java - Einführung 06.05.15 Seite 63
Beispiel: Methode ohne Rückgabewert /** * Radius eines Kreises setzen * @param radius * @return null */ Java - Einführung 06.05.15 Seite 64
Beispiel: Methode mit Rückgabewert /** * Fläche eines Kreises berechnen * @param radius * @return flaeche */ Java - Einführung 06.05.15 Seite 65