Folienpaket 8 Themenschwerpunkte: Statisch, Sichtbarkeit, Variablentypen /2016 Dr. Daniel Haase - Vorkurse Informatik V3/V4

Ähnliche Dokumente
Repetitorium Informatik (Java)

Einstieg in die Informatik mit Java

Java Einführung Methoden in Klassen

3 Objektorientierte Konzepte in Java

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

Kapitel 8. Programmierkurs. Methoden. 8.1 Methoden

Silke Trißl, Prof. Ulf Leser Wissensmanagement in der Bioinformatik. Jede Applikation braucht eine Klasse mit einer main-methode

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

Javakurs für Anfänger

5.5.8 Öffentliche und private Eigenschaften

Vorkurs C++ Programmierung

Übersicht. Informatik 2 Teil 3 Anwendungsbeispiel für objektorientierte Programmierung

3 Objektorientierte Konzepte in Java

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

Java Kurs für Anfänger Einheit 5 Methoden

JAVA - Methoden

Klassen mit Instanzmethoden

5. Tutorium zu Programmieren

Einstieg in die Informatik mit Java

Einführung in die Informatik

Einstieg in die Informatik mit Java

AuD-Tafelübung T-B5b

JAVA - Methoden - Rekursion

Software Engineering Klassendiagramme Einführung

5.4 Klassen und Objekte

Algorithmen und Datenstrukturen

Java I Vorlesung 6 Referenz-Datentypen

Programmieren in Java

Javakurs 2013 Objektorientierung

Java: Vererbung. Teil 3: super()

Grundzüge der Programmierung. Wiederverwendung VERERBUNG

Eine Klasse beschreibt Objekte mit gleichen Attributen und Methoden.

Aufbau von Klassen. class punkt {...

Einstieg in die Informatik mit Java

Der Operator this. Wir betrachten nochmals die Klassendefinition von Ballon.

Wiederholung Wozu Methoden? Methoden Schreiben Methoden Benutzen Rekursion?! Methoden. Javakurs 2012, 3. Vorlesung

Teil 2: OOP und JAVA (Vorlesung 11)

Einführung in die Programmierung 1

Java Einführung Methoden. Kapitel 6

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

Java Schulung (Java 2 Java Development Kit 5 / 6)

Prof. W. Henrich Seite 1

Objektorientierte Programmierung. Objektorientierte Programmierung. Klasse. Objekt. Beispiel: Sportfest1. Methode. Eine Einführung mit BlueJ

5.6 Vererbung. Vererbung

Theorie zu Übung 8 Implementierung in Java

Vererbung & Schnittstellen in C#

Programmieren I + II Regeln der Code-Formatierung

Vorlesung Programmieren

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

Informationsverarbeitung im Bauwesen

1 Polymorphie (Vielgestaltigkeit)

einkonto.zahle(+100); //Transaktion Einzahlung einkonto.zahle(-20); //Transaktion Auszahlung einkonto.zahle(+30); //Transaktion Einzahlung

Java I Vorlesung Vererbung und Sichtbarkeit

OOP und Angewandte Mathematik. Eine Einführung in die Anwendung objektorientierter Konzepte in der angewandten Mathematik

Programmieren I. Überblick Objektorientierung Heusch 12 Ratz 7. Institut für Angewandte Informatik

Algorithmen und Datenstrukturen 07

Javakurs für Anfänger

Methoden (fortgeschritten) in C# - 1

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);

Probeklausur: Programmierung WS04/05

7. Objektorientierte Softwareentwicklung/3. Informatik II für Verkehrsingenieure

Algorithmen und Programmierung II

Einführung in die. objektorientierte Programmierung

3 Klassen, Attribute, Methoden

Objekt-Orientierte Programmierung

Grundlagen der Programmierung Prof. H. Mössenböck. 6. Methoden

6 Speicherorganisation

Objektorientierte Programmierung

Kapitel 6. Vererbung

Vorlesung Programmieren. Bisher: Klassen und Objekte. Was ist mit ähnlichen Klassen? Vererbung und Polymorphismus

Methoden. von Objekten definiert werden, Methoden,, Zugriffsmethoden und Read-Only

Java I Vorlesung Objektorientiertes Programmieren

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

Kapitel 6. Vererbung

Probeklausur: Programmierung WS04/05

Javakurs für Anfänger

Programmieren I. Strategie zum Entwurf von Klassen. Beispiele. Design von Klassen. Dr. Klaus Höppner. Beispiel: Bibliothek

PIWIN I. Praktische Informatik für Wirtschaftsmathematiker, Ingenieure und Naturwissenschaftler I. Vorlesung 3 SWS WS 2007/2008

Innere Klassen in Java

Programmierkurs Java

Kapitel 6. Vererbung

Java für Computerlinguisten

Präsentation Interfaces

Konstruktoren, Packages und Scopes

Programmierkurs. Manfred Jackel

RO-Tutorien 3 / 6 / 12

7. Schnittstellen Grundlagen zu Schnittstellen. 7. Schnittstellen

Problemstellung. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 24: Reflection 1. IDE und automatische Tests.

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

Überschreiben von Methoden

Hochschule Augsburg, Fakultät für Informatik Name:... Prüfung "Programmieren 1", IN1bac, WS 10/11 Seite 1 von 6

JAVA für Nichtinformatiker - Probeklausur -

Übersicht. Vorstellung des OO-Paradigmas

1.2 Attribute und Methoden Aufbau einer Java-Klasse:

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Wiederholung: Interfaces

Abschnitt 9: Schnittstellen: Interfaces

Java Einführung VARIABLEN und DATENTYPEN Kapitel 2

Prinzipien Objektorientierter Programmierung

PIWIN 1 Übung Blatt 5

Tutorium Java Ein Überblick. Helge Janicke

Transkript:

Folienpaket 8 Themenschwerpunkte: Statisch, Sichtbarkeit, Variablentypen 327 09/2016 Dr. Daniel Haase - Vorkurse Informatik V3/V4

Objektorientierte Programmierung Objektorientierte Programmierung hat sich in den 80ern etabliert, als komplexere Programme entstanden und grafische Interaktion mit dem Benutzer notwendig wurde. Heutige Programmbestandteile sind ohne OOP kaum denkbar, Interaktionselemente wie Fenster oder Buttons werden beispielsweise durch Objekte kontrolliert. Es gibt Ausnahmen: OOP ist nicht effizient, beispielsweise wird oft eine klassische tabellarische Datenbank mit einem benutzerfreundlichen OOP-Interface kombiniert (z.b. DB-Automaten). 328 09/2016 Dr. Daniel Haase - Vorkurse Informatik V3/V4

Objektorientierte Programmierung Es gibt zahlreiche OOP-Varianten in verschiedenen Programmiersprachen: Smalltalk: Strenge Objektorientierung, keine elementaren Typen, sehr ineffizient und eher für Planung als für Einsatz konzipiert. C++: Strenge Typisierung, Templates, Zeiger, auf Hardwarenähe/Effizienz bedacht. Java: Pragmatische OOP, Referenzen, typisiert, Syntax von C++ vereinfacht. JavaScript: Prototypische OOP, duck-typing, keine echten Klassen. Pascal/Delphi: Klassische prozedurale Sprache mit OOP-Elementen. Java ist ein Mittelweg: Alles kann objektorientiert angelegt werden, sobald Effizienz gefordert ist kann man aber auch klassisch mit elementaren Typen programmieren. 329 09/2016 Dr. Daniel Haase - Vorkurse Informatik V3/V4

Variablen in Java Heute betrachten wir Variablen im Detail: die Vorlage, aus der sie erzeugt werden (der Datentyp bzw. die Klasse) die Situation, in der sie erzeugt wird (in einem Objekt, im Code, als Parameter) der Bereich wo sie sichtbar ist (im Objekt, im Codeblock, überall) 330 09/2016 Dr. Daniel Haase - Vorkurse Informatik V3/V4

Datentypen und Werte Zur Erinnerung: Jede Variable hat in Java einen Datentyp: ein elementarer Typ: int, double, boolean, usw. ein Feldtyp: int[], double[], usw. eine Klasse (separat deklariert in einer class-datei) Davon unterscheiden wir den Wert, den eine Variable enthält: bei elementaren Typen ist das eine Zahl oder Zeichen bei Feldern eine Referenz auf das Feld bei Klassen eine Referenz auf das Objekt 331 09/2016 Dr. Daniel Haase - Vorkurse Informatik V3/V4

Datentypen und Werte Beachte den Unterschied in der Definition: Eine Klasse ist ein eigener Datentyp. Sie legt die Attribute und Methoden fest. Ein Objekt ist ein konkreter Bereich im Speicher, der Speicherzellen für Attribute und Methoden enthält. Beim Erstellen eines Objekts muss man die Klasse für das Objekt angeben. Raumvektor u, v; u = new Raumvektor(); v = new Raumvektor(); u.x = 1; v.x = 2; 332 09/2016 Dr. Daniel Haase - Vorkurse Informatik V3/V4

Wozu Statisch? Objekt-Attribute und -Methoden gehören ihrem Objekt: Alles in Java ist an ein Objekt gebunden wenn man nicht statisch modifiziert Jedes Objekt im Speicher hat die Attribute bzw. Methoden in seinem Speicherbereich Bei jedem new-befehl werden die Attribute und Methoden neu in den Speicher geschrieben 333 09/2016 Dr. Daniel Haase - Vorkurse Informatik V3/V4

Wozu Statisch? Statische Attribute und Methoden werden mit dem Modifikator static angelegt, existieren sofort nach Start des Programms, existieren unabhängig davon, ob und wieviele Objekte es gibt, stehen in einem globalen Bereich, nicht im Objekt selbst, werden nur einmal im Speicher angelegt, alle Objekte teilen sich das Attribut bzw. die Methode. Sprechweise: Gewöhnliche Attribute/Methoden sind an ein Objekt gebunden, statische Attribute/Methoden sind dagegen an die Klasse gebunden. 334 09/2016 Dr. Daniel Haase - Vorkurse Informatik V3/V4

Beispiel: Objekt-Attribute Raumvektor.java class Raumvektor { double x; double y; double z; 335 09/2016 Dr. Daniel Haase - Vorkurse Informatik V3/V4

Beispiel: Objekt-Attribute Raumvektor.java class Raumvektor { double x; double y; double z; MeinProgramm.java class MeinProgramm { public static void main(string[] args) { Raumvektor v = new Raumvektor(); v.x = -1; Raumvektor w = new Raumvektor(); System.out.println("x ist " + w.x); x ist 0 x = 5; FEHLER: x gibt es nicht, nur v.x und w.x 336 09/2016 Dr. Daniel Haase - Vorkurse Informatik V3/V4

Beispiel: Statische Attribute Raumvektor.java class Raumvektor { static double x; double y; double z; 337 09/2016 Dr. Daniel Haase - Vorkurse Informatik V3/V4

Beispiel: Statische Attribute Raumvektor.java class Raumvektor { static double x; double y; double z; MeinProgramm.java class MeinProgramm { public static void main(string[] args) { Raumvektor v = new Raumvektor(); v.x = -1 Raumvektor w = new Raumvektor(); System.out.println("x ist " + w.x); x ist -1 Raumvektor.x = -2; // Kein Objekt nötig, aber Klasse wird angegeben 338 09/2016 Dr. Daniel Haase - Vorkurse Informatik V3/V4

Beispiel: Objekt-Methoden Raumvektor.java class Raumvektor { double x; double y; double z; void print() { System.out.println(x + "," + y + "," + z); MeinProgramm.java class MeinProgramm { public static void main(string[] args) { Raumvektor v = new Raumvektor(); v.x = 1; Raumvektor w = new Raumvektor(); w.y = 2; v.print(); 1,0,0 w.print(); 0,2,0 339 09/2016 Dr. Daniel Haase - Vorkurse Informatik V3/V4

Beispiel: Statische Methoden Raumvektor.java class Raumvektor { double x; double y; double z; static void print() { System.out.println(x + "," + y + "," + z); FEHLER: x,y,z unbekannt! Statische Methoden haben nur Zugriff auf statische Attribute und andere statische Methoden der Klasse Lösung für Nicht-Informatiker: Objekt beim Aufruf mitgeben 340 09/2016 Dr. Daniel Haase - Vorkurse Informatik V3/V4

Beispiel: Statische Methoden Raumvektor.java class Raumvektor { double x; double y; double z; static void print(raumvektor u) { System.out.println(u.x + "," + u.y + "," + u.z); MeinProgramm.java class MeinProgramm { public static void main(string[] args) { Raumvektor v = new Raumvektor(); v.x = 1; Raumvektor.print(v); 1,0,0 341 09/2016 Dr. Daniel Haase - Vorkurse Informatik V3/V4

Statisch und dynamisch Objekt-Methoden verändern Eigenschaften des Objekts, geben den Inhalt des Objekts nach außen weiter, realisieren den Zweck des Objekts, greifen auf Attribute ohne den Referenzpunkt zu (von innen). Statische Methoden sind nicht mit dem Inhalt/Zweck des Objekts verbunden, bekommen ggf. Objekte als Parameter gegeben, greifen auf deren Attribute mit dem Referenzpunkt zu (von außen). 342 09/2016 Dr. Daniel Haase - Vorkurse Informatik V3/V4

Beispiele In der Klasse String gibt es beispielsweise folgende Deklarationen: public char charat(int k); Hängt direkt vom Objekt ab public boolean equals(string s); Hängt vom Objekt und von s ab In der Klasse Math gibt es beispielsweise folgende Deklarationen: public static double sin(double x); Hier ist kein Objekt beteiligt: statisch public static final double PI (Attribut) Muss überall die gleiche Konstante sein: statisch Ist eine unveränderliche Zahl: final Styleguide: Konstanten (final static) durchgehend groß schreiben. 343 09/2016 Dr. Daniel Haase - Vorkurse Informatik V3/V4

Aufgabe Schreiben Sie eine Klasse Mass, die einen bewegten Massekörper in der Physik darstellen soll mit folgenden Eigenschaften: der Massekörper hat eine Masse m, eine Geschwindigkeit v, die kinetische Energie E = 1 2 mv 2, die Fallbeschleunigung g = 9.81 auf der Erde, eine Methode, die für eine Sekunde eine Kraft F ansetzt, eine Methode, die einen Körper der Masse m = 1 mit Geschwindigkeit v = 0 erzeugt. Schreiben Sie die Signaturen und wählen Sie die passenden Modifikatoren dazu. Lassen Sie den Rumpfcode weg. Styleguide: Englische Variablen- und Methodennamen. 344 09/2016 Dr. Daniel Haase - Vorkurse Informatik V3/V4

Lösung Mass.java class Mass { double m; double v; static final double EARTHACCELERATION = 9.81; public double energy() { return m * v * v / 2.0; public static Mass createmass() { public void applyforce(double force) { 345 09/2016 Dr. Daniel Haase - Vorkurse Informatik V3/V4

Verwendung von Variablen Der Lebenslauf einer Variablen sieht immer so aus: die Variable wird deklariert, die Variable erhält einen Wert oder eine Referenz, mit der Variable wird gearbeitet, die Variable wird aus dem Speicher entfernt. public static void main(string[] args) { int a; a = 4; a = a + 1; System.out.println(a); 346 09/2016 Dr. Daniel Haase - Vorkurse Informatik V3/V4

Verwendung von Variablen Der Lebenslauf einer Variablen sieht immer so aus: die Variable wird deklariert die Variable erhält einen Wert oder eine Referenz mit der Variable wird gearbeitet die Variable wird aus dem Speicher entfernt public static void main(string[] args) { int a; a = 4; a = a + 1; System.out.println(a); 347 09/2016 Dr. Daniel Haase - Vorkurse Informatik V3/V4

Verwendung von Variablen Der Lebenslauf einer Variablen sieht immer so aus: die Variable wird deklariert die Variable erhält einen Wert oder eine Referenz mit der Variable wird gearbeitet die Variable wird aus dem Speicher entfernt public static void main(string[] args) { int a; a = 4; a = a + 1; System.out.println(a); 348 09/2016 Dr. Daniel Haase - Vorkurse Informatik V3/V4

Verwendung von Variablen Der Lebenslauf einer Variablen sieht immer so aus: die Variable wird deklariert die Variable erhält einen Wert oder eine Referenz mit der Variable wird gearbeitet die Variable wird aus dem Speicher entfernt public static void main(string[] args) { int a; a = 4; a = a + 1; System.out.println(a); 349 09/2016 Dr. Daniel Haase - Vorkurse Informatik V3/V4

Verwendung von Variablen Der Lebenslauf einer Variablen sieht immer so aus: die Variable wird deklariert die Variable erhält einen Wert oder eine Referenz mit der Variable wird gearbeitet die Variable wird aus dem Speicher entfernt public static void main(string[] args) { int a; a = 4; a = a + 1; System.out.println(a); (Programmende) 350 09/2016 Dr. Daniel Haase - Vorkurse Informatik V3/V4

Verwendung von Variablen Wir verwenden in Java Variablen in verschiedenen Situationen: als lokale Variablen innerhalb einer Methode oder eines Codeblocks als Parameter in der Signatur einer Methode als Rückgabewerte werden in der Signatur deklariert als Attribute werden in einer Klasse deklariert und in Objekten benutzt als Attribute (statisch) werden in einer Klasse deklariert und geteilt 351 09/2016 Dr. Daniel Haase - Vorkurse Informatik V3/V4

Verwendung von Variablen Lokale Variablen werden innerhalb eines Körpers oder Codeblocks deklariert (oder als Zähler in einem for-block), innerhalb des Codeblocks werden Werte eingesetzt, sie sind nur innerhalb des Codeblocks sichtbar, nach Ende des Codeblocks werden sie gelöscht. public static void main(string[] args) { int a; a = 4; a = a + 1; System.out.println(a); 352 09/2016 Dr. Daniel Haase - Vorkurse Informatik V3/V4

Verwendung von Variablen Parameter werden in der Signatur einer Methode deklariert, sie werden vom Aufrufer der Methode gefüllt, das passiert bevor die Methode überhaupt startet, sie sind innerhalb der Methode sichtbar und nur dort, nach Ende der Methode werden sie gelöscht. public double summe(double a, double b) { return a + b; 353 09/2016 Dr. Daniel Haase - Vorkurse Informatik V3/V4

Verwendung von Variablen Rückgabewert wird in der Signatur einer Methode deklariert, wird innerhalb der Methode mit return erzeugt, der Aufrufer muss den Wert speichern, sonst ist er weg. public double summe(double a, double b) { return a + b; public static void main(string[] args) { double s = summe(3.2, 1.4); 354 09/2016 Dr. Daniel Haase - Vorkurse Informatik V3/V4

Verwendung von Variablen Objekt-Attribute werden in einer Klasse deklariert und bei jedem mit new erzeugten Objekt separat angelegt, und von Konstruktoren mit Startwerten versorgt. Jedes Objekt hat seine eigenen Attribute im Speicher, die Attribute eines Objekts sind normalerweise sichtbar, nur im Studium nicht weil der Styleguide private erzwingt. Zugriff über Objektname und Referenzpunkt, sie werden gelöscht, wenn das Objekt gelöscht wird. public static void main(string[] args) { Raumvektor v = new Raumvektor(); v.x = 5; Dagegen ist v eine lokale Variable (Referenz) im Codeblock. 355 09/2016 Dr. Daniel Haase - Vorkurse Informatik V3/V4

Verwendung von Variablen Statische Attribute werden auch in einer Klasse deklariert, sie werden beim Start des Programms einmal erzeugt, sie sind unabhängig von den Objekten im Speicher, auch diese Attribute sind normalerweise sichtbar. Zugriff über Klassenname und Referenzpunkt, sie werden niemals gelöscht (bzw. bis das Betriebssystem das Programm aus dem Speicher wirft). public static void main(string[] args) { double p = Math.PI; Wir brauchen hier kein Objekt erzeugen, denn PI existiert statisch. Hier ist Math ein Klassenname, aber es gibt kein Objekt. 356 09/2016 Dr. Daniel Haase - Vorkurse Informatik V3/V4

Aufgabe Was passiert bei diesem Programm im Speicher? class Aufgabe { double a = 1; static int j = 2; public double test(byte b) { double y = 0; y = a; y = y + b * j; return y; public static void main(string[] s) { Aufgabe A = new Aufgabe(); double w = A.test(-3); 357 09/2016 Dr. Daniel Haase - Vorkurse Informatik V3/V4

Private Attribute/Methoden Attribute und Methoden sind normalerweise überall sichtbar. Mit dem Modifikator private kann man sie nach außen verstecken: Private Eigenschaften sind nur innerhalb der selben Klasse zugänglich. Genauer: Zugänglich innnerhalb aller Objekte dieser Klasse. Statische Attribute/Methoden dürfen nicht privat sein. Beispiel: class Zaehlen { private int anzahl = 0; public void zaehlen() { anzahl = anzahl + 1; 358 09/2016 Dr. Daniel Haase - Vorkurse Informatik V3/V4

Private Attribute/Methoden Vorsicht: Grenze bei private ist nicht das Objekt, sondern die Klasse: public class Test { private double x; public void probieren() { Test obj = new Test(); obj.x = 34; Beschreiben von obj.x ist erlaubt, da der Zugriff von einem Objekt der gleichen Klasse Test aus geschieht. Objekte der gleichen Klasse vertrauen sich gegenseitig. 359 09/2016 Dr. Daniel Haase - Vorkurse Informatik V3/V4

Sichtbarkeitsbereiche Genau genommen haben Attribute und Methoden in Java vier mögliche Sichtbarkeitsbereiche: public (öffentlich), Sichtbarkeit für jeden der die Klasse hat. Ohne Modifikator (Standard), Sichtbarkeit im gleichen package. protected (geschützt), Sichtbarkeit in Klasse und ihren Ableitungen. private (privat), Sichtbarkeit nur in der eigenen Klasse. Private und geschützte Attribute dienen der Konsistenz des Objekts. Sie werden typischerweise über set/get-methoden manipuliert, diese stellen sicher, dass das Objekt immer konsistent ist. 360 09/2016 Dr. Daniel Haase - Vorkurse Informatik V3/V4

Konsistenzsicherung Der Begriff Konsistenz bedeutet: In den Attributen stehen zu jedem Zeitpunkt Werte, die einen sinnvollen Objektzustand darstellen bzw. mit denen die Methoden arbeiten können. Ursachen für Inkonsistenz: Herumschreiben in Objekten von Außen, nicht Absicht sondern meistens Programmierfehler, fehlerhafte Initialisierung etc. Inkonsistenzen führen zu Fehlern im Programm und sind schwer zu finden. Abhilfe: Kapselung durch get/set-methoden und Konstruktoren. 361 09/2016 Dr. Daniel Haase - Vorkurse Informatik V3/V4

Beispiel für set/get-formalismus class RationalNumber { private int n, d; // numerator and denominator public RationalNumber() { n = 0; d = 1; public void setn(int n) { this.n = n; // set method for denominator public void setd(int d) { if (d!= 0) { this.d = d; else { System.out.println("Forget it"); public int getn() { return n; public int getd() { return d; public double evaluate() { return ((double)n / (double)d); 362 09/2016 Dr. Daniel Haase - Vorkurse Informatik V3/V4

Parameter übergeben Beachten Sie bei der Übergabe von Parametern: Parameter werden als Wert-Kopie übergeben, Änderungen des Parameters betreffen die übergebene Variable nicht, ABER wenn der Parameter eine Referenz ist, so wird die Referenz und nicht das Objekt/Feld kopiert. Konkret bedeutet das: wenn Sie elementare Variablen als Parameter einsetzen, werden diese nicht durch den Methodenaufruf verändert, wenn Sie Objekte oder Felder über eine Referenz weitergeben, kann es sein, dass die Methode über die Referenz auf die Objekte zugreift und diese verändert. Das ist meist auch gewünscht. 363 09/2016 Dr. Daniel Haase - Vorkurse Informatik V3/V4

Parameter übergeben Beispiel elementare Variable: public static void methode(int k) { k = 100; public static void main(string[] args) { int a = 0; methode(a); // Wert übergeben System.out.println(a); Dieses Programm ergibt die Ausgabe 0, denn die Methode schreibt in einen Parameter k und der ist nur eine Kopie der Variablen a. Das k wird nach Ende der Methode gelöscht und die Variable a wird durch die Methode nicht angerührt. 364 09/2016 Dr. Daniel Haase - Vorkurse Informatik V3/V4

Parameter übergeben Beispiel Referenz auf Feld: public static void methode(int[] K) { K[0] = 100; public static void main(string[] args) { int[] A = new int[10]; A[0] = 0; methode(a); // Referenz übergeben System.out.println(A[0]); Dieses Programm ergibt die Ausgabe 100. Zwar ist K eine Kopie von A, aber es ist eine Referenz. Beide Referenzen zeigen auf das gleiche Feld, das durch den Befehl in der Methode verändert wird. Die Änderung ist dann auch nach Abschluss der Methode wirksam. 365 09/2016 Dr. Daniel Haase - Vorkurse Informatik V3/V4

Parameter übergeben Beispiel Referenz auf Objekt: public static void methode(student s) { s.geburtstag(); public static void main(string[] args) { Student x = new Student(); x.alter = 20; methode(x); // Referenz übergeben System.out.println(x.alter); Dieses Programm ergibt die Ausgabe 21. Die Methode geburtstag() ist dynamisch, sie gehört zu dem Objekt, auf das die Referenz s zeigt. Da die Referenz eine Kopie von x ist, zeigen beide Referenzen auf das gleiche Objekt. 366 09/2016 Dr. Daniel Haase - Vorkurse Informatik V3/V4

Das eigene Objekt Befindet man sich innerhalb eines Objekts, z.b. im Körper einer dynamischen Methode, so kann man dieses Objekt mit this referenzieren. Typische Anwendung: Namensgleichheit von Variablen in set-methoden: class Vektor { private double x, y; public void setxy(double x, double y) { this.x = x; this.y = y; Styleguide: Gleiche Namen bei set-methoden und this-referenz vor eigenen Attributen. 367 09/2016 Dr. Daniel Haase - Vorkurse Informatik V3/V4

Konstruktoren Zur Erinnerung Ein Konstruktor ist eine Methode ohne Rückgabetyp. Der Name des Konstruktors ist der Name der Klasse: class Vektor { double x, y; public Vektor(double x, double y) { this.x = x; this.y = y; Styleguide: Konstruktor-Parameter bekommen gleichen Namen wie die Attribute, Attribute werden über this referenziert. 368 09/2016 Dr. Daniel Haase - Vorkurse Informatik V3/V4

Konstruktoren Beim Programmieren von Konstruktoren müssen wir planen: Welche Attribute sollen mit Startwerten belegt werden? Wie werden diese vom Aufrufer übergeben? Sollen weitere Berechnungen durchgeführt werden? Beispiel Mass von vorhin: Ein Körper besitzt eine Masse und eine Geschwindigkeit, aber nur die Masse sollte beim Erzeugen des Körpers gegeben werden, denn der Körper ruht bevor eine Kraft auf ihn wirkt. 369 09/2016 Dr. Daniel Haase - Vorkurse Informatik V3/V4

Beispiel Wir schreiben also einen Konstruktor für die Klasse Mass. Er bekommt die Masse gegeben. Die Geschwindigkeit wird dagegen auf Null gesetzt: class Mass { double m; double v; public Mass(double m) { this.m = m; v = 0; public double energy() { return m * v * v / 2.0; public void applyforce(double force) { Mass v = new Mass(100); 370 09/2016 Dr. Daniel Haase - Vorkurse Informatik V3/V4

Mehrere Konstruktoren Eine Klasse kann mehrere Konstruktoren haben, diese haben den gleichen Namen aber verschiedene Parameter: class Mass { double m; double v; public Mass() { m = 0; v = 0; public Mass(double m) { this.m = m; v = 0; public Mass(double m, double v) { this.m = m; this.v = v; public double energy() { return m * v * v / 2.0; public void applyforce(double force) { Mass a = new Mass(); Mass b = new Mass(100); Mass c = new Mass(10,-2); 371 09/2016 Dr. Daniel Haase - Vorkurse Informatik V3/V4

Konstruktoren Beim Schreiben von Konstruktoren ist zu beachten: Es gibt automatisch den leeren Konstruktor, der alles mit Nullen belegt, solange kein parametrisierter Konstruktor geschrieben wird Parameter bekommen gleichen Namen wie die Attribute von this Das Anlegen eines Objekts soll möglichst bequem sein Konstruktoren dürfen nicht static sein Konstruktoren können nicht bei fertigen Objekten aufgerufen werden Die Verwendung von Konstruktoren spielt eine zentrale Rolle bei der Polymorphie von Objekten, die wir später behandeln. 372 09/2016 Dr. Daniel Haase - Vorkurse Informatik V3/V4

Styleguide für Klassen Klassendateien sollten in dieser Form aufgebaut werden: 1 Kommentar zu der Klasse in der Form /**...*/ 2 Klassendeklaration 3 Implementierungskommentar zu der Klasse 4 Statische Attribute (public Standard protected private) 5 Objektgebundene Attribute (public Standard protected private) 6 Konstruktoren 7 Statische Methoden 8 Setter/Getter 9 Restliche Objektmethoden, sinnvoll gruppiert und kommentiert. 373 09/2016 Dr. Daniel Haase - Vorkurse Informatik V3/V4