Klassen mit Instanzmethoden



Ähnliche Dokumente
Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java

Methoden. Gerd Bohlender. Einstieg in die Informatik mit Java, Vorlesung vom

Einstieg in die Informatik mit Java

Objektorientierte Programmierung und Klassen

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java

Klassenvariablen, Klassenmethoden

Einstieg in die Informatik mit Java

Vererbung, Polymorphie

Vererbung. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java 23.5.

Einstieg in die Informatik mit Java

Innere Klassen. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java

Vererbung. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java 14.1.

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java

Klassen als Datenstrukturen

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java

Repetitorium Informatik (Java)

Java Methoden. Informatik 1 für Nebenfachstudierende Grundmodul. Kai-Steffen Hielscher Folienversion: 1. Februar 2017

Felder - Arrays. Typ feldname[] = new Typ[<ganze Zahl >]; Beispiel: double vektor[] = new double[5]; auch eine Initialisierung ist möglich.

1. Grundzüge der Objektorientierung 2. Methoden, Unterprogramme und Parameter 3. Datenabstraktion 4. Konstruktoren 5. Vordefinierte Klassen

Implementieren von Klassen

Institut für Programmierung und Reaktive Systeme. Java 6. Markus Reschke

Einstieg in die Informatik mit Java

Folienpaket 7 Themenschwerpunkte: Methoden in OOP /2016 Dr. Daniel Haase - Vorkurse Informatik V3/V4

Grundelemente objektorientierter Sprachen (1)

Grundelemente objektorientierter Sprachen (1)

Javaprogrammierung mit NetBeans. Variablen, Datentypen, Methoden

Methoden und Wrapperklassen

Felder. Gerd Bohlender. Einstieg in die Informatik mit Java, Vorlesung vom

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

Letztes Mal. static int ggt(int a, int b) { if (a == b) return a; else if (a > b) return ggt(a-b,b); else if (a < b) return ggt(a,b-a);

2. Unterprogramme und Methoden

Kapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen

Intuitive Einführung. Informatik B Objektorientierte Programmierung in Java. Vorlesung 01: Objektorientierte Programmierung (Teil 1)

Softwareentwicklung I (IB) Objekte. Prof. Dr. Oliver Braun. Fakultät für Informatik und Mathematik Hochschule München

3. Klassen Statische Komponenten einer Klasse. Klassenvariablen

Beispiele für Ausdrücke. Der imperative Kern. Der imperative Kern. Imperativer Kern - Kontrollstrukturen. Deklarationen mit Initialisierung

Zeichenketten. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java. 16.

Objektorientierung (OO)

1 Klassen und Objekte

Probeklausur: Programmierung WS04/05

JAVA - Methoden - Rekursion

12 Klassen in Java Instanz- und Klassenbestandteile

1. Grundzüge der Objektorientierung 2. Methoden, Unterprogramme und Parameter 3. Datenabstraktion 4. Konstruktoren 5. Vordefinierte Klassen

Tag 7 Repetitorium Informatik (Java)

Hüllklassen. Gerd Bohlender. 25. Juni Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java

Klassen und Objekte. Einführung in Java. Folie 1 von Mai Ivo Kronenberg

Universität Paderborn Prof. Dr. Heike Wehrheim. Betreutes Arbeiten. Ab diese Woche: freitags, 14 16, E-Pool (während Tutorium Knopf) GPI, WS 07/08

C++ - Objektorientierte Programmierung Konstruktoren und Destruktoren

Kapitel 8. Programmierkurs. Methoden. 8.1 Methoden

Aufrufe von Objektmethoden

Prof. W. Henrich Seite 1

Einstieg in die Informatik mit Java

Schöner Programmieren

Tag 8 Repetitorium Informatik (Java)

7. Objektorientierung. Informatik II für Verkehrsingenieure

Klassenmethoden. Klassenvariablen. Für das Auslesen des Studentenzählers definieren wir eine öffentliche Klassenmethode:

Programmierung und Angewandte Mathematik

JAVA - Methoden

Überschreiben von Methoden

Einstieg in die Informatik mit Java

Kapitel 9: Klassen und höhere Datentypen. Klassen und höhere. Objekte, Felder, Methoden. Küchlin/Weber: Einführung in die Informatik

Schöner Programmieren

Computeranwendung und Programmierung (CuP)

C++ - Objektorientierte Programmierung Konstante und statische Elemente

Klassen und Objekte. Klassen sind Vorlagen für Objekte. Objekte haben. Attribute. Konstruktoren. Methoden. Merkblatt

11. Übung Informatik II - Operatorfunktionen

Themen der Übung. Methoden und Wrapperklassen. Vorteile von Methoden. Methoden. Grundlagen

3 Objektorientierte Konzepte in Java

Elementare Konzepte von

14. Java Klassen. Klassen (Java) vs. Records (Pascal) Klassen - Konzeptuell. Klassen - Technisch

7. Übung Informatik II - Objektorientierte Programmierung

Algorithmen und Datenstrukturen 07

Transkript:

Klassen mit Instanzmethoden Gerd Bohlender Institut für Angewandte und Numerische Mathematik Vorlesung: Einstieg in die Informatik mit Java 3.12.07 G. Bohlender (IANM UNI Karlsruhe) OOP und Klassen 3.12.07 1 / 25

Übersicht 1 Definition von Klassen 2 Methoden 3 Methoden formale Parameter 4 Parameterübergabe, Aufruf einer Instanzmethode Referenztypen als Argument Zugriffe in einer Instanzmethode 5 Datenkapselung 6 Überladen von Methoden 7 Variable Argumentliste 8 Laufanweisung für Felder 9 Methode tostring() G. Bohlender (IANM UNI Karlsruhe) OOP und Klassen 3.12.07 2 / 25

Definition von Klassen Syntax Modifizierer class Bezeichner {Elementliste Die Elementliste besteht u.a. aus Attributen (d. h. Instanzvariablen), Konstruktoren und Instanzmethoden (d.h. Funktionen). Zweck der Instanzmethoden: Bearbeitung der Attribute, Klassen werden zu aktiven Objekten, Kommunikation mit anderen Klassen. G. Bohlender (IANM UNI Karlsruhe) OOP und Klassen 3.12.07 3 / 25

Methoden Syntax: Typspezifikation Methodenname (formale Parameterliste) { Deklarationen und Anweisungen double demo (double x) { return x*x; G. Bohlender (IANM UNI Karlsruhe) OOP und Klassen 3.12.07 4 / 25

Methoden formale Parameter Die formale Parameterliste setzt sich jeweils aus der Typspezifikation gefolgt vom zugehörigen Bezeichner zusammen und wird durch Kommata getrennt: Typ 1 Name 1,..., Typ n Name n Die formale Parameterliste darf leer sein, die runden Klammern hingegen müssen stehen. int leer () { return 123; G. Bohlender (IANM UNI Karlsruhe) OOP und Klassen 3.12.07 5 / 25

Methoden formale Parameter Für jeden Parameter muß eine eigene Typspezifikation existieren. int richtig (int x, int y) {... int falsch (int x, y) {... G. Bohlender (IANM UNI Karlsruhe) OOP und Klassen 3.12.07 6 / 25

Methoden formale Parameter Feldtypen, Zeichenketten und beliebige andere Objekte sind als Parameter und Ergebnisse zugelassen. Bei Feldern muss die korrekte Anzahl von eckigen Klammern, jedoch ohne die Dimension, zusammen mit dem Basistyp angegeben werden. double[] rechnenmitvektoren (double[] x) {... G. Bohlender (IANM UNI Karlsruhe) OOP und Klassen 3.12.07 7 / 25

Methodendefinition Ergebnis berechnen Die Rückgabe des Ergebnisses erfolgt über return Ausdruck; Der Ausdruck muß dabei zuweisungskompatibel zum Typ der Methode sein. Mit der return Anweisung wird die Methode abgebrochen und das angegebene Ergebnis zurückgeliefert. class Punkt { double x,y; double norm () { return Math.sqrt (x*x + y*y); G. Bohlender (IANM UNI Karlsruhe) OOP und Klassen 3.12.07 8 / 25

Methodendefinition Ergebnis berechnen Es muß in jedem Fall ein return durchlaufen werden, sonst tritt ein Fehler auf. Achtung: Dies ist eine beliebte Fehlerquelle bei der Verwendung von bedingten und verzweigten Anweisungen! int falsch (int x) { if (x >= 0) return 2*x; int richtig (int x) { if (x >= 0) return 2*x; else return x; G. Bohlender (IANM UNI Karlsruhe) OOP und Klassen 3.12.07 9 / 25

Methodendefinition void Wird kein Ergebnis benötigt, so ist der Ergebnistyp void und die return Anweisung lautet schlicht: return; Diese Anweisung muß nicht explizit angegeben werden, sondern wird am Ende der Methode automatisch ausgeführt. void ausgeben (int x) { System.out.println (x); Die Anweisung return; bewirkt, dass die Methode an dieser Stelle beendet wird. void ausgeben (int x) { if (x < 0) return; System.out.println (x); // wird evtl. nicht ausgefuehrt G. Bohlender (IANM UNI Karlsruhe) OOP und Klassen 3.12.07 10 / 25

Parameterübergabe, Aufruf einer Instanzmethode Der Methodenaufruf muß in einem Ausdruck des entsprechenden Typs erfolgen. Syntax: Instanzname. Methodenname (aktuelle Parameterliste) Der Instanzname gibt die Instanz an, deren Attribute bearbeitet werden sollen. Die aktuelle Parameterliste liefert zusätzliche Werte zur Bearbeitung Sie muß genauso viele Parameter vom passenden Typ besitzen wie die formale Parameter Liste. Ist die formale (und damit auch die aktuelle) Parameterliste leer, so müssen die runden Klammern trotzdem stehen. G. Bohlender (IANM UNI Karlsruhe) OOP und Klassen 3.12.07 11 / 25

Aufruf einer Instanzmethode Beispiel class Punkt { double x,y; void verschieben (double dx, double dy) { x += dx; y += dy;... Punkt p = new Punkt(); p.verschieben (10, 20); G. Bohlender (IANM UNI Karlsruhe) OOP und Klassen 3.12.07 12 / 25

Parameterübergabe, Aufruf einer Instanzmethode Die aktuellen Parameter können beliebige Ausdrücke (von passendem Typ) sein, sie werden von links nach rechts ausgewertet. class Demo { int ausdruck (int a, int b) { return 2*a + 3*b;... int i=1, j; Demo d = new Demo(); j = d.ausdruck (i++, i++); System.out.println (i + " " + j); // 3 8 G. Bohlender (IANM UNI Karlsruhe) OOP und Klassen 3.12.07 13 / 25

Parameterübergabe, Methodenaufruf Beim Aufruf der Methode wird das aktuelle Argument ausgewertet und das Ergebnis in einer lokalen Variablen mit dem Namen des formalen Parameters abgelegt, d. h. es wird stets mit einer Kopie der übergebenen Daten gearbeitet. class Demo { int erhoehen (int a) { return ++a;... int i=1, j; Demo d = new Demo(); j = d.erhoehen (i); System.out.println (i + " " + j); // 1 2 G. Bohlender (IANM UNI Karlsruhe) OOP und Klassen 3.12.07 14 / 25

Referenztypen als Argument Der aktuelle Parameter lässt sich durch Anweisungen innerhalb einer Methode nicht verändern. Achtung: bei Referenztypen gilt dies ebenso, aber nur für die Referenzvariablen, nicht für die referenzierten Größen (Feldelemente, Objekte, usw.) class Demo { void veraendern (int[] feld) { ++feld[0];... int[] f = {1,5,3; Demo d = new Demo(); d.veraendern (f); System.out.println (f[0]); // 2 G. Bohlender (IANM UNI Karlsruhe) OOP und Klassen 3.12.07 15 / 25

Referenztypen als Argument Die Referenzvariable selbst wird als Wert übergeben, kann also nicht verändert werden! class Demo { void nichtveraendern (int[] feld) { feld = new int[]{66,77,88,99;... int[] f = {1,5,3; Demo d = new Demo(); d.nichtveraendern (f); System.out.println (f[0]); // 1 G. Bohlender (IANM UNI Karlsruhe) OOP und Klassen 3.12.07 16 / 25

Zugriffe in einer Instanzmethode Eine Instanzmethode darf zugreifen auf Instanzvariablen (*) Formale Parameter Lokale Variablen dieser Methode Aufrufe anderer Instanzmethoden (*) (*) Angabe des Instanznamens ist nicht nötig, die Instanz ist bereits bekannt! class Punkt {... void weitverschieben () { verschieben (1000, 1000);... Punkt p = new Punkt (); p.verschieben (33,44); p.weitverschieben (); // p an verschieben weitergeben G. Bohlender (IANM UNI Karlsruhe) OOP und Klassen 3.12.07 17 / 25

Bemerkungen zu Methoden Lokale Variablen dürfen nicht den gleichen Namen wie ein formaler Parameter besitzen. Die aktuelle und formale Parameterliste müssen nicht die gleichen Bezeichner enthalten. Formale Parameter bzw. lokale Variablen dürfen den gleichen Bezeichner wie ein Attribut besitzen. Zur Unterscheidung schreibt man dann this.attributname this ist eine Referenz auf die aktuell bearbeitete Instanz der Klasse. class Gleichnamig { int x,y; void speichern (int x, int y) { this.x = x; this.y = y;... Gleichnamig gl = new Gleichnamig (); gl.speichern (33,44); // this entspricht gl G. Bohlender (IANM UNI Karlsruhe) OOP und Klassen 3.12.07 18 / 25

Datenkapselung Datenelemente werden aus Gründen der Datenkapselung oft mit dem Modifizierer private versehen. Die Klasse selber darf nur Standardrechte oder public Rechte besitzen. In einer Datei dürfen mehrere Klassen definiert werden, jedoch darf nur eine davon public Rechte besitzen. Diese Klasse muss den gleichen Namen wie die Datei tragen. G. Bohlender (IANM UNI Karlsruhe) OOP und Klassen 3.12.07 19 / 25 Zur Datenkapselung kann die Sichtbarkeit der Elemente mit Hilfe von vorangestellten Modifizierern geregelt werden. Mögliche Modifizierer public Element kann von jeder Klasse verwendet werden. protected (später... ) nichts Standard-Rechte, auch friendly genannt. Element kann u. a. in der Klasse selber sowie in allen Klassen des gleichen Pakets verwendet werden. private Element kann nur von der eigenen Klasse verwendet werden.

Beispiel zur Klassendefinition und Datenkapselung Nachfolgend wird der neue Datentyp Point definiert. class Point { private double x,y; // geschützt vor unberecht. Zugriff public double getx () { return x; public double gety () { return y; void move (double dx, double dy) { x += dx; y += dy; public static void main (String[] args) { Point p = new Point (); // bildet Instanz der Klasse // Point durch Aufruf des // Standardkonstruktors G. Bohlender (IANM UNI Karlsruhe) OOP und Klassen 3.12.07 20 / 25

Zugriff auf Elemente Außerhalb der Klasse, d.h. in einer anderen Klasse, ist der Zugriff nur auf sichtbare Komponenten erlaubt. Diese sind folglich mit öffentlichen Zugriffsrechten (public) bzw. für den Fall, dass sich die Klasse im gleichen Verzeichnis befindet, mit Standardrechten ausgestattet. Syntax Instanzname.Komponenten bei Instanzkomponenten Beispiel (erweiterte Klasse Point)... // im Hauptprogramm: System.out.println ("x-koodinate von p" + p.getx()); System.out.println (p.x); // syntaktisch richtig,... // aber Zugriff verboten! G. Bohlender (IANM UNI Karlsruhe) OOP und Klassen 3.12.07 21 / 25

Überladen von Methoden In Java können wie in C++ mehrere Methoden mit gleichem Namen in einer Klasse existieren. Beispiel: double max (double x, double y) {... int max (int x, int y) {... Die Methoden müssen unterschiedliche Parameterlisten besitzen. Der Ergebnistyp ist frei wählbar. Allerdings ist es nicht erlaubt, daß sich die Methoden nur in ihrem Ergebnistyp unterscheiden. Signatur: Name und Parameterliste sind entscheidend. G. Bohlender (IANM UNI Karlsruhe) OOP und Klassen 3.12.07 22 / 25

Variable Argumentliste Syntax Typ... Bezeichner Wird in der Methode als Feld vom angegebenen Typ interpretiert class Flexibel { void ausgeben (int... x) { for (int i=0; i<x.length; i++) System.out.println (x[i]);... Flexibel f = new Flexibel (); f.ausgeben (1,2,3); // drei einfache int // 1 2 3 G. Bohlender (IANM UNI Karlsruhe) OOP und Klassen 3.12.07 23 / 25

Laufanweisung für Felder Syntax for (Komponententyp Bezeichner : Feldname )... Der Bezeichner durchläuft alle Feldelelemente. double[] x = {1.5, 2.3, 3.7; // bekannte Variante: for (int i=0; i<x.length; i++) System.out.println (x[i]); // neue Variante: for (double xi: x) System.out.println (xi); In dieser Variante: kein Zugriff auf Index i möglich bzw. nötig. G. Bohlender (IANM UNI Karlsruhe) OOP und Klassen 3.12.07 24 / 25

Methode tostring() Syntax public String tostring() { return...; // Attribute als Text tostring() wird automatisch aufgerufen, wenn eine String-Darstellung eines Objekts gebraucht wird z.b. bei der Ausgabe. class Punkt { double x,y; public String tostring () { return x + ", " + y;... Punkt p = new Punkt (); System.out.println (p); // ruft tostring() auf // Ausgabe: 0, 0 G. Bohlender (IANM UNI Karlsruhe) OOP und Klassen 3.12.07 25 / 25