Repetitorium Informatik (Java)



Ähnliche Dokumente
Tag 7 Repetitorium Informatik (Java)

Tag 8 Repetitorium Informatik (Java)

Tag 4 Repetitorium Informatik (Java)

Klassenvariablen, Klassenmethoden

7. Übung Informatik II - Objektorientierte Programmierung

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

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java

Philipp Güttler Objektorientierung und komplexe Datentypen

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java

Implementieren von Klassen

Tag 4 Repetitorium Informatik (Java)

Propädeutikum Programmierung in der Bioinformatik

1 Klassen und Objekte

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

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

Einstieg in die Informatik mit Java

Klassen als Datenstrukturen

3. Klassen Statische Komponenten einer Klasse. Klassenvariablen

Einstieg in die Informatik mit Java

7. Objektorientierung. Informatik II für Verkehrsingenieure

Einstieg in die Informatik mit Java

Objektorientierte Programmierung Studiengang Medieninformatik

Silke Trißl Wissensmanagement in der Bioinformatik. Objektorientierte Programmierung (OOP) Vorstellung wie in der realen Welt: Farbe Hubraum Tank...

C++ - Objektorientierte Programmierung Konstruktoren und Destruktoren

C++ - Objektorientierte Programmierung Konstante und statische Elemente

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java

Objektorientierte Programmierung und Klassen

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

Einstieg in die Informatik mit Java

Java Einführung Klassendefinitionen

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

Methoden und Wrapperklassen

II. Grundlagen der Programmierung. Beispiel: Merge Sort. Beispiel: Merge Sort (Forts. ) Beispiel: Merge Sort (Forts. )

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

Objektorientierte Programmierung. Kapitel 22: Aufzählungstypen (Enumeration Types)

Programmiertechnik Klassenvariablen & Instantiierung

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

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

Objekte. Theorieteil. Inhaltsverzeichnis. Begriffe. Programmieren mit Java Modul 5. 1 Modulübersicht 3

Methoden und Klassen. Silke Trißl Wissensmanagement in der Bioinformatik

Javakurs für Anfänger

Grundelemente objektorientierter Sprachen (1)

Vorkurs Informatik WiSe 16/17

Grundelemente objektorientierter Sprachen (1)

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

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Referenzen. Referenzen

Objektorientierung. Klassen und Objekte. Dr. Beatrice Amrhein

PROCESSING EINE ZUSAMMENFASSUNG. Created by Michael Kirsch & Beat Rossmy

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

Einstieg in die Informatik mit Java

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

Inhaltsüberblick. I. Grundbegriffe - Objekte und Klassen. Organisatorisches. I. Grundbegriffe - Objektorientierte Konzepte

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

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

Computeranwendung und Programmierung (CuP)

Javakurs für Anfänger

Vorkurs Informatik WiSe 15/16

Geschachtelte Klassen

C++ - Objektorientierte Programmierung Vererbung

Erste Java-Programme (Scopes und Rekursion)

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

14. Java Klassen. Klassen, Typen, Objekte, Deklaration, Instanzierung, Konstruktoren, statische Felder und Methoden, Datenkapselung

EINI WiMa/LW. Einführung in die Informatik für Naturwissenschaftler und Ingenieure. Vorlesung 2 SWS WS 11/12

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

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

Vorkurs Informatik WiSe 17/18

Vererbung, Polymorphie

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

Programmierkurs C++ Konstruktor, Statische Methoden Namespaces

Analyse der Klasse Konto

Programmieren in Java

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

Umsetzung einer Klassenkarte in einer Programmiersprache

Prof. W. Henrich Seite 1

Java Referenzdatentypen genauer betrachtet

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

Klassen mit Instanzmethoden

Transkript:

Repetitorium Informatik (Java) Tag 6 Lehrstuhl für Informatik 2 (Programmiersysteme)

Übersicht 1 Klassen und Objekte Objektorientierung Begrifflichkeiten Deklaration von Klassen Instanzmethoden/-variablen Klassenmethoden/-variablen Selbstreferenz: this 2 Instanziierung Objekte Instanziierung Konstruktoren Repetitorium Informatik Informatik 2 WS 2015/16 Tag 6 Folie 2 / 23

Übersicht 1 Klassen und Objekte Objektorientierung Begrifflichkeiten Deklaration von Klassen Instanzmethoden/-variablen Klassenmethoden/-variablen Selbstreferenz: this 2 Instanziierung Objekte Instanziierung Konstruktoren Repetitorium Informatik Informatik 2 WS 2015/16 Tag 6 Folie 3 / 23

Motivation Bisher: nur primitive vordefinierte Datentypen int, double, boolean, (String,)... alle diese Datentypen speichern jeweils eine Information. Aber: Wie kann man unterschiedliche Informationen, die logisch zusammengehören, auch gemeinsam verwalten? Jetzt: eigene, zusammengesetzte Datentypen ( Datenstrukturen ) Einstieg in die Objekt-Orientierte Programmierung (OOP) Repetitorium Informatik Informatik 2 WS 2015/16 Tag 6 Folie 4 / 23

Objektorientierte Programmierung (OOP) Objektorientierte Programmierung Programmierparadigma Programmiersprachen: Java, C++, C#,... Objektorientierung: Daten und zugehörige Operationen (die auf diesen Daten arbeiten ), zu einer logischen und organisatorischen Einheit zusammenfassen Klasse was logisch zusammengehört, wird (zu einer Klasse) zusammengefasst; was nicht zusammengehört, wird voneinander (in verschiedene Klassen) getrennt. Klassen sind nach außen hin gekapselt, so dass der Zugriff auf ihre Daten (insbesondere Manipulation) eingeschränkt und kontrolliert werden kann OOP vereinfacht Modularisierung und Wiederverwendung von Software Repetitorium Informatik Informatik 2 WS 2015/16 Tag 6 Folie 5 / 23

Klasse und Objekt Klasse: Konzept der OOP zur Definition neuer Datentypen Schablone oder Bauplan Objekt/Instanz: Konkretes Exemplar einer Klasse ( Ausprägung ) I.d.R. werden während der Ausführung des Programms mehrere Objekte einer Klasse erzeugt und verwendet Klassendefinition legt fest: Attribute: Variablen für zu speichernde Daten (in Objekt bzw. Klasse) Methoden: zur Verfügung stehende Operationen Konstruktoren: spezielle Methoden zur Erzeugung eines neuen Objekts Repetitorium Informatik Informatik 2 WS 2015/16 Tag 6 Folie 6 / 23

Typisches Beispiel: Bankkonto Klasse Bankkonto Attribute: Kontonummer Eigentümer Kontostand Methoden: einzahlen abheben anzeigenkontostand Objekte/Instanzen der Klasse Bankkonto Programmcode Ausführung Konto 08154711 08154711 Petra Musterfrau 815.47 Euro Konto 47110815 47110815 Hans Mustermann 4711.08 Euro... Repetitorium Informatik Informatik 2 WS 2015/16 Tag 6 Folie 7 / 23

Realweltliches Beispiel: Mitarbeiter Klasse Mitarbeiter Attribute: Name Monatsgehalt Abteilung... Methoden: befördern entlassen... Objekte der Klasse Mitarbeiter Peter, 3 500 Euro, Verwaltung,... Hans, 2 700 Euro, Außendienst,... befördern... Repetitorium Informatik Informatik 2 WS 2015/16 Tag 6 Folie 8 / 23

Deklaration von Klassen Java kennt nichts außerhalb von Klassen Prinzip bereits bekannt Syntax (vereinfacht) <Modifizierer > class <Klassen - Name > { <Definitionen > Modifizierer: Zunächst nur public Datei muss genauso heißen wie die Klasse selbst Klassen-Name: Buchstaben, Zahlen und (bestimmte) Sonderzeichen Konvention: Beginnend mit Großbuchstaben, nur Buchstaben Definitionen: Deklaration von Attributen (Variablen) Methoden-Definitionen Repetitorium Informatik Informatik 2 WS 2015/16 Tag 6 Folie 9 / 23

Attribute Bisher: lokale Variablen innerhalb von Methoden und Blöcken Jetzt: Attribute (oft auch Felder genannt) prinzipiell wie lokale Variablen Syntax zur Deklaration und Initialisierung wie bei lokalen Variablen Unterschied: Werden direkt in der Klasse deklariert Zugriff aus Methoden möglich (Details gleich) Beispiel public class Rechteck { int breite ; int hoehe ; Repetitorium Informatik Informatik 2 WS 2015/16 Tag 6 Folie 10 / 23

Statische vs. nicht-statische Variablen/Methoden Bereits bekannt: Unterscheidung: Objekt (Instanz) Klasse Jetzt: Unterscheidung: Instanzmethode/-variable Klassenmethode/-variable Instanzmethoden/-variablen: nicht-statisch Gehören jeweils zu einem konkreten Objekt (einer konkreten Instanz) jedes Objekt hat jeweils seine eigene Instanzmethode/-variable individuelle Wertebelegungen der Instanzvariablen in jedem Objekt Zugriff auf Instanzmethoden/-variablen daher nur mit (expliziter oder impliziter) Angabe der konkreten Instanz möglich Klassenmethoden/-variablen: statisch Gehören zur ganzen Klasse daher mit Schlüsselwort static deklariert jedes Objekt sieht die gleiche (genauer: identische) Klassenvariable alle Instanzen gleicher Klasse teilen sich die gemeinsame Klassenvariable Zugriff auf Klassenmethoden/-variablen daher ohne Angabe einer konkreten Instanz möglich Repetitorium Informatik Informatik 2 WS 2015/16 Tag 6 Folie 11 / 23

Zugriff auf Instanzmethoden/-variablen von außerhalb der Klasse <Objekt - Variable >. < Methoden - Name >( < Parameter >) // explizite Angabe der <Objekt - Variable >. < Variablen - Name > // konkreten Instanz ( vor.) notwendig von innerhalb der Klasse <Methoden - Name >( < Parameter >) // die konkrete Instanz ist implizit das <Variablen - Name > // aktuelle Objekt -> Angabe kann daher entfallen Beispiel Beispiel: Methode length() der Klasse String ist Instanzmethode Aufruf (hier von außerhalb) nur an konkreter Instanz sinnvoll, weil verschiedene Zeichenketten meist unterschiedliche Längen haben String s1 = " Hallo?"; String s2 = " Hallo Welt!"; int l1 = s1. length (); // l1 hat den Wert 6 int l2 = s2. length (); // l2 hat den Wert 11 Repetitorium Informatik Informatik 2 WS 2015/16 Tag 6 Folie 12 / 23

Beispiel: Rechteck Klasse Rechteck Attribut: breite Attribut: hoehe Methode: flaeche() Statisch oder nicht-statisch? Attribute: Instanzvariablen (jedes Rechteck hat individuelle breite u. hoehe) Methode: Instanzmethode (Zugriff auf Instanzvariablen notwendig) Mögliche Umsetzung public class Rechteck { int breite ; // Instanzvariable -> ohne " static " int hoehe ; // Instanzvariable -> ohne " static " public int flaeche () { // Instanzmethode -> ohne " static " return breite * hoehe ; Repetitorium Informatik Informatik 2 WS 2015/16 Tag 6 Folie 13 / 23

Zugriff auf Klassenmethoden/-variablen von außerhalb der Klasse <Klassen - Name >. < Methoden - Name >( < Parameter >); // explizite Angabe der <Klassen - Name >. < Variablen - Name >; // enthaltenden Klasse ( vor.) notwendig von innerhalb der Klasse <Methoden - Name >( < Parameter >); // die konkrete Klasse ist implizit die <Variablen - Name >; // aktuelle ( umgebende ) Klasse -> Angabe kann entfallen Beispiel Beispiel: Methode parseint() der Klasse Integer ist Klassenmethode Aufruf ohne konkrete Instanz (also direkt über den Klassennamen) möglich int zahl = Integer. parseint (" 13"); Repetitorium Informatik Informatik 2 WS 2015/16 Tag 6 Folie 14 / 23

Beispiel: Zugriffe klassenweit zählen Ziel: Zählen aller Aufrufe der Methode flaeche() der Klasse Rechteck, unabhängig davon, von welcher Instanz die Fläche erfragt wurde (z.b. zu Protokollzwecken) Klassenvariable vom Typ int: zugriffe Mögliche Umsetzung public class Rechteck { int breite ; int hoehe ; static int zugriffe = 0; Vorstellung zur Laufzeit Rechteck-Objekt 1 breite = 47 hoehe = 11 zugriffe Rechteck-Objekt 2 breite = 8 hoehe = 15 zugriffe public int flaeche () { zugriffe ++; return breite * hoehe ; Rechteck-Klasse zugriffe = 3 Repetitorium Informatik Informatik 2 WS 2015/16 Tag 6 Folie 15 / 23

Beispiel: Zugriffe klassenweit zählen Beispiel Rechteck r1; Rechteck r2; //... hier fehlt noch das Erzeugen der Objekte... System. out. println (" Anzahl der Zugriffe : " + Rechteck. zugriffe ); r1. flaeche (); System. out. println (" Anzahl der Zugriffe : " + Rechteck. zugriffe ); r2. flaeche (); System. out. println (" Anzahl der Zugriffe : " + Rechteck. zugriffe ); Ausgabe Anzahl der Zugriffe: 0 Anzahl der Zugriffe: 1 Anzahl der Zugriffe: 2 Repetitorium Informatik Informatik 2 WS 2015/16 Tag 6 Folie 16 / 23

Selbstreferenz: this Beispiel Schlüsselwort this Referenz auf sich selbst in jedem Objekt wie eine spezielle Variable alternativer Zugriff auf die eigenen Instanzmethoden/-variablen hilfreich bei Namenskonflikt zwischen lokalen Variablen und Attributen <Variable> lokale Variable (hier z.b.: Parameter) this.<variable> Attribut int breite ; public void setbreite ( int breite ) { if ( breite > 0) { this. breite = breite ; // Zuweisung von Parameter auf Attribut Repetitorium Informatik Informatik 2 WS 2015/16 Tag 6 Folie 17 / 23

Übersicht 1 Klassen und Objekte Objektorientierung Begrifflichkeiten Deklaration von Klassen Instanzmethoden/-variablen Klassenmethoden/-variablen Selbstreferenz: this 2 Instanziierung Objekte Instanziierung Konstruktoren Repetitorium Informatik Informatik 2 WS 2015/16 Tag 6 Folie 18 / 23

Instanziierung: Analogie zu Arrays Bereits bekannt: Erzeugung von Arrays nach Deklaration (und vor Verwendung) notwendig Instanziierung mit dem Schlüsselwort new Beispiel int [] zahlen = new int [10]; new erzeugt neues Objekt im Speicher (genauer: Heap) Objekt-Variable (hier: zahlen ) beinhaltet Referenz auf das neue Objekt Repetitorium Informatik Informatik 2 WS 2015/16 Tag 6 Folie 19 / 23

Instanziierung von Klassen Anlegen einer neuen Instanz mit new (analog zu Arrays) Runde Klammern nach Klassennamen (anders als bei Arrays) ist eigentlich Methodenaufruf daher auch Übergabe von Parametern möglich Beispiel: Klasse Rechteck public class Rechteck { int breite ; int hoehe ; public void foo () { Rechteck r = new Rechteck (); Repetitorium Informatik Informatik 2 WS 2015/16 Tag 6 Folie 20 / 23

Verwendung von Objekt-Variablen Objekt-Variablen können wie andere Variablen (mit primitivem Datentyp) verwendet werden Beispiel: Übergabe als Parameter public class Rechteck { int breite ; int hoehe ; public class Test { public static void ausgabe ( Rechteck r) { System. out. println (" Breite : " + r. breite + ", Hoehe : " + r. hoehe ); public static void main ( String [] args ) { Rechteck r = new Rechteck (); r. breite = 13; r. hoehe = 3; ausgabe (r); Repetitorium Informatik Informatik 2 WS 2015/16 Tag 6 Folie 21 / 23

Konstruktoren Dienen meist zur Initialisierung einzelner Attribute bei der Instanziierung Sind spezielle Methoden, die bei der Instanziierung ausgeführt werden Konstruktorname und Klassenname müssen identisch sein Übergabe von Parametern wie bei normalen Methoden möglich Konstruktoren haben jedoch keinen Rückgabetyp (auch nicht void!) Falls kein expliziter Konstruktor definiert wird, gibt es automatisch einen impliziten leeren Standard-Konstruktor (ohne Parameter und ohne weitere Funktionalität) Achtung! Durch die Definition eines (expliziten) Konstruktors entfällt automatisch der Standard-Konstruktor und muss ggf. neu definiert werden. Repetitorium Informatik Informatik 2 WS 2015/16 Tag 6 Folie 22 / 23

Beispiel: Rechteck Konstruktor soll breite und hoehe jeder Instanz auf jeweils vorgegebene (individuelle) Werte initialisieren Klasse Rechteck public class Rechteck { int breite ; int hoehe ; public Rechteck ( int breite, int hoehe ) { this. breite = breite ; this. hoehe = hoehe ; public static void main ( String [] args ) { Rechteck r = new Rechteck (13, 3); Repetitorium Informatik Informatik 2 WS 2015/16 Tag 6 Folie 23 / 23