Kapitel 06. Klassen und Objekte. Fachgebiet Knowledge Engineering Prof. Dr. Johannes Fürnkranz

Ähnliche Dokumente
Praktische Informatik 1

C++ - Objektorientierte Programmierung Konstruktoren und Destruktoren

Repetitorium Informatik (Java)

Grundelemente objektorientierter Sprachen (1)

Grundelemente objektorientierter Sprachen (1)

Einstieg in die Informatik mit Java

Grundelemente objektorientierter Sprachen (1)

PROCESSING EINE ZUSAMMENFASSUNG. Created by Michael Kirsch & Beat Rossmy

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

C++ - Objektorientierte Programmierung Konstante und statische Elemente

Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 2. Teil

Methoden und Wrapperklassen

Computeranwendung und Programmierung (CuP)

Implementieren von Klassen

Klassen als Datenstrukturen

Java Einführung Methoden. Kapitel 6

C++ - Objektorientierte Programmierung Polymorphie

Kapitel 10. Verweise und Referenzen. Fachgebiet Knowledge Engineering Prof. Dr. Johannes Fürnkranz

Java-Applikationen (Java-Programme)

Einstieg in die Informatik mit Java

C# - Einführung in die Programmiersprache Methoden. Leibniz Universität IT Services

Kapitel 13. Abstrakte Methoden und Interfaces. Fachgebiet Knowledge Engineering Prof. Dr. Johannes Fürnkranz

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

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Programmiertechnik Klassenvariablen & Instantiierung

Einführung in die Programmierung mit BlueJ

Der Datentyp String. Stringvariable und -vergleiche

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

String s1, s2; Eine Zuweisung geschieht am einfachsten direkt durch Angabe des Strings eingeschlossen in doppelte Hochkommata:

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

Einführung in die Programmierung für NF MI. Übung 07

Tag 7 Repetitorium Informatik (Java)

Analyse der Klasse Konto

C++ - Objektorientierte Programmierung Vererbung

Vererbung und Polymorphie

Javaprogrammierung mit NetBeans. Variablen, Datentypen, Methoden

Übungen zur Vorlesung Wissenschaftliches Rechnen I

Organisatorisches. Folien (u.a.) gibt's auf der Lva-Homepage zum Download

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

Einstieg in die Informatik mit Java

1.2 Attribute und Methoden Aufbau einer Java-Klasse:

Einstieg in die Informatik mit Java

Prof. Dr. Wolfgang Schramm. Vorlesung. Techniken der Programmentwicklung. Exkurs: Anonyme Klassen

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

Einstieg in die Informatik mit Java

Tag 8 Repetitorium Informatik (Java)

7. Objektorientierung. Informatik II für Verkehrsingenieure

Umsetzung einer Klassenkarte in einer Programmiersprache

Computeranwendung und Programmierung (CuP)

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

7. Übung Informatik II - Objektorientierte Programmierung

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

Überschreiben von Methoden

Inhaltsverzeichnis. Grundlagen und Einführung (1. Band) 1

Einführung in die Programmierung

Einstieg in die Informatik mit Java

Programmieren in C/C++ und MATLAB

Objektorientierte Programmierung Studiengang Medieninformatik

Einstieg in die Informatik mit Java

5.4 Arrays. Oft müssen viele Werte gleichen Typs gespeichert werden. Idee: Lege sie konsekutiv ab! Greife auf einzelne Werte über ihren Index zu!

Einstieg in die Informatik mit Java

Programmieren für Wirtschaftswissenschaftler SS 2015

Programmieren in Java

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

Einstieg in die Informatik mit Java

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

Praktische Informatik 1

Java für Bauingenieure

Allgemeines - Prinzipien

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

Kapitel 8. Programmierkurs. Methoden. 8.1 Methoden

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

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

Prof. W. Henrich Seite 1

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

Objektorientierung (OO)

ÜBUNGS-BLOCK 1 LÖSUNGEN

Modellierung und Programmierung 1

Einstieg in die Informatik mit Java

Leider gibt es in einigen Fällen keine wirklich einheitlichen Fachbegriffe im Deutschen, obwohl einige als "der Standard" bezeichnet werden.

Javakurs für Anfänger

1 Klassen und Objekte

2. Vererbung und Kapselung

00-Wiederholung WIEDERHOLUNG. Programmierkonzepte und Java. Peter Vischer Schule Nürnberg. KW Donnerstag, 22.

Propädeutikum Programmierung in der Bioinformatik

Programmieren in Java

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

Organisatorisches. drei Gruppen Gruppe 1: 10:10-11:40, Gruppe 2: 11:45-13:15 Gruppe 3: 13:20-14:50

3. Klassen Statische Komponenten einer Klasse. Klassenvariablen

Kapitel 08. Methoden und deren Aufrufe. Fachgebiet Knowledge Engineering Prof. Dr. Johannes Fürnkranz

Einstieg in die Informatik mit Java

2. Unterprogramme und Methoden

Einstieg in die Informatik mit Java

Polymorphie/Späte Bindung Abstrakte Klassen Interfaces. Polymorphie/Späte Bindung Abstrakte Klassen Interfaces

Einführung in die Programmierung I. 11. Vererbung. Stefan Zimmer

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

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

Transkript:

Kapitel 06 Klassen und Objekte

Inhalt des 6. Kapitels Klassen und Objekte 6.1 Was ist eine Klasse? Definition Die Klasse String 6.2 Klassendefinition äußerer Teil innerer Teil - Datenfelder - Konstruktor - Methoden 6.3 Variablen in Klassen 6.4 Zusammengesetzte Objekte Folie 6.2

Was ist eine Klasse? In Kapitel 5 wurde näher auf die eingebauten Datentypen eingegangen. Im Kapitel 6 wenden wir uns nun den Klasse, die ebenfalls einen Datentyp repräsentieren, zu. Programmierkonzepte prozedurale Programmierung - im Zentrum stehen Unterprogramme (Prozeduren) objektorientierte Programmierung (Java) - im Zentrum stehen Datenstrukturen und somit Klassen und Objekte Definition Klasse aus Wikipedia Klasse ist in der Objektorientierung ein abstrakter Oberbegriff für die Beschreibung der gemeinsamen Struktur und des gemeinsamen Verhaltens von Objekten (Klassifizierung). Folie 6.3

Was ist eine Klasse? Prinzip der Koppelung Es wird in der Regel nicht erlaubt, auf die Datenstrukturen selbst zuzugreifen, sondern nur mittels vordefinierter Methoden (Schnittstelle nach außen) - get-methoden - set-methoden (später mehr hierzu) dadurch wird gewährleistet, dass nicht unvorhergesehene Dinge passieren können - man kann z. B. die Anzahl der Beeper oder die Position eines Roboters nicht direkt verändern, sondern nur mit den entsprechenden Methoden pickbeeper() oder move() Folie 6.4

Was ist eine Klasse? Prinzip der Abstraktion Klassen ermöglichen, reale Objekte abstrakt darzustellen. Es erfolgt eine schematische Definition der realen Objekte und der Zustände, die sie annehmen können. Beispiel im Bezug auf die Datenfelder einer Klasse: Schema (= Klasse) String Nachname, String Vorname; Ausprägung Thomas, David Folie 6.5

Beispiele von Klassen aus der KarelJ-Welt Robot ist eine KarelJ-Klasse, die abstrakt Roboter definiert aus der Java-Welt Applet ist eine Klasse für Internet-Applikationen String ist eine Klasse für unveränderliche Zeichenketten. - Sie stellt verschiedene Methoden zur Inspektion und Konvertierung aus anderen Datentypen zur Verfügung. - String ist kein eingebauter Datentyp! - String ist eine Klasse und wird daher um Gegensatz zu int und double, welches eingebaute Datentypen sind, groß geschrieben. - Die Klasse für veränderliche Zeichenketten ist Stringbuffer. Folie 6.6

Die Klasse String Deklarieren String s = Dies ist ein String mit 35 Zeichen. - Kurzform: String x = new String("test")entspricht String x = "test" - Ein String kann auch nicht druckbare Zeichen enthalten - spezielle Zeichencodes: Zeichen Bedeutung \t Horizontaler Tabulator \n Zeilenumbruch (Newline) \f Seitenumbruch (Formfeed) \ Doppeltes Anführungszeichen \ Einfaches Anführungszeichen \\ Backslash Folie 6.7

Fortsetzung Klasse String Informationen zu String int len = s.length(); - Diese Methode gibt die Länge des String, bzw. StringBuffer zurück. Für den obigen String s liefert s.length() also den Wert 35. char c = s.charat(i); - Damit kann das Zeichen (Typ char) des String s an der i-ten Position bestimmt werden. Vorsicht: i läuft wie bei Arrays von 0 bis s.length-1. String s2 = s1.substring(i,j); - i ist der Index bei dem der Substring beginnt, j ist der Index des Buchstabens, der als erstes nicht mehr Teil des Substrings ist. Folie 6.8

Fortsetzung Klasse String Vergleich von Zeichenketten: if (s1.equals(s2)) return s1; - bedeutet: Falls die Strings s1 und s2 gleich sind, wird die Bedingung der if-schleife true und s1 zurückgegeben. - Bem.: Der Code if (s1==s2) return s1; würde bedeuten, dass überprüft wird, ob beide Stringvariablen auf den identischen String weisen. s1.equalsignorecase(s2): - Hier wird bei der Überprüfung nicht zwischen Groß- und Kleinschreibung unterschieden. Folie 6.9

6.2 Die Klassendefinition Klassen lassen sich in einen äußeren und inneren Teil unterteilen. der äußere Teil: ist in der Regel für die Benennung der Klasse zuständig legt fest von welcher Klasse geerbt wird (optional). - auf Vererbung wird zu einem späteren Zeitpunkt noch einmal eingegangen public class Ticketautomat extends Automat { //Innenteil der Klasse ausgelassen Folie 6.10

Fortsetzung Klassendefinition der innere Teil: Definition der Datenfelder, Konstruktoren und Methoden, die den Instanzen oder Objekten ihre Struktur und ihr Verhalten geben. Die Reihenfolge dieser Hauptbestandteile sind in Java zwar nicht festgelegt, es hat sich jedoch eine Art Standard herausgebildet. public class Klassenname { Datenfelder Konstruktoren Methoden Folie 6.11

Fortsetzung Klassendefinition innerer Teil Datenfelder >> public class Klassenname { Datenfelder Konstruktoren Methoden Datenfelder werden auch als Instanzvariablen oder Klassenattribute bezeichnet. Sie können als kleine Bereiche innerhalb eines Objektes verstanden werden, in denen Werte gespeichert werden. - Beispiel KarelJ: Anzahl der Beeper, Position des Roboters - Beispiel Ticketautomat: public class Ticketautomat { private int preis; private int bishergezahlt; private int gesamtsumme; Konstruktor & Methoden ausgelassen Folie 6.12

Fortsetzung Klassendefinition innerer Teil Konstruktor >> public class Klassenname { Datenfelder Konstruktoren Methoden Konstruktoren ermöglichen, dass ein Objekt nach seiner Erzeugung in einen gültigen Zustand versetzt wird. Dieser Vorgang wird auch als Initialisierung bezeichnet. Objekte bzw. Instanzen sind konkrete Ausprägungen einer abstrakten Klasse Schema (= Klasse) String Nachname, String Vorname Ausprägung Thomas, David - z.b. karel ist ein Robot Definition von Klassen und Objekten - Klassen werden mittels class definiert und zur Compile-Zeit übersetzt - Objekte werden mittels new definiert und zur Laufzeit angelegt Folie 6.13

Fortsetzung Klassendefinition innerer Teil Konstruktor >> public class Klassenname { Datenfelder Konstruktoren Methoden Ein Konstruktor einer Klasse ist eine bestimmte Art von Methode. Syntaktische Eigenschaften - Der Name des Konstruktors muss dem der Klasse entsprechen. - Der Konstruktor darf keine Angaben über einen Rückgabetyp haben. Beachten Sie, void ist eine solche Angabe und hat somit vor einem Konstruktor nichts zu suchen. - Eine Methode, die den selben Namen wie die Klasse hat, ist automatisch ein Konstruktor. Eine Klasse darf mehrere gleichnamige Konstruktoren besitzen. - genauso auch mehrere gleichnamige Methoden, dazu später mehr. Folie 6.14

Fortsetzung Klassendefinition innerer Teil Konstruktorverwendung >> public class Klassenname { Datenfelder Konstruktoren Methoden Ein Konstruktor einer Klasse wird normalerweise in einer einzigen spezifischen Situation aufgerufen: bei der Erzeugung eines Objekts dieser Klasse mit new. Der Klassenname hinter new ist also genauer gesagt der Name des Konstruktors bei seinem Aufruf: String str = new String ( "Hello" ); Damit wird auch klar, was die Klammern hinter dem Klassennamen in einem new Ausdruck sollen: - Das ist einfach die Parameterliste für den Aufruf des Konstruktors. - Ein leeres Klammerpaar bedeutet dann, dass ein Konstruktor mit leerer Parameterliste aufgerufen wird. Folie 6.15

Fortsetzung Klassendefinition innerer Teil Konstruktorverwendung am Beispiel Ticketautomat >> public class Klassenname { Datenfelder Konstruktoren Methoden Ticketautomat gondelbahn = new Ticketautomat ( 500 ); public class Ticketautomat { Datenfelder ausgelassen /** * Erzeugt gültigen Automat, Preis(cent) */ public Ticketautomat (int ticketpreis){ preis = ticketpreis; bishergezahlt = 0; gesamtsumme =0; Methoden ausgelassen Folie 6.16

Fortsetzung Klassendefinition innerer Teil Methoden >> public class Klassenname { Datenfelder Konstruktoren Methoden Methoden erlauben es, den Zustand eines Objektes zu ändern, bzw. ein vom Zustand abhängiges Verhalten an den Tag zu legen. - Beipiel KarelJ: move(), putbeeper(), etc. Bestehen aus einem Kopf und einem Rumpf. - vergleichbar mit dem äußeren und inneren Teil einer Klasse Methodenkopf: - Kommentar was die Methode tut - Signatur der Methode (siehe nächste Folie) Methodenrumpf: - Enthält die Deklarationen und die Anweisungen. Diese legen fest, was im Falle eines Methodenaufrufs passiert. Folie 6.17

Fortsetzung Klassendefinition innerer Teil Methodensignatur Die Signatur einer Methode setzt sich zusammen aus - dem Rückgabe- / Ergebnistyp der Methode (bzw. void), - dem vollständigen Namen, >> public class Klassenname { Datenfelder Konstruktoren Methoden - der Anzahl der formalen Parameter (potentiell auch ohne Parameter) und - den Typen der formalen Parameter in ihrer Reihenfolge in der Parameterliste. Unterschiede zwischen der Signatur von Methoden und der Signatur von Konstruktoren - Methoden haben im Gegensatz zu Konstruktoren einen Rückgabetyp. Folie 6.18

Fortsetzung Klassendefinition innerer Teil Methoden Sondierende Methoden (get-methoden) - liefern Informationen über ein Objekt >> public class Klassenname { Datenfelder Konstruktoren Methoden public class Ticketautomat { Datenfelder & Konstruktor ausgelassen /** * Liefert den Preis in Cent */ public int gibpreis(){ return preis; Folie 6.19

Fortsetzung Klassendefinition innerer Teil Methoden Verändernde Methoden (set-methoden) - ändern den Zustand eines Objekts >> public class Klassenname { Datenfelder Konstruktoren Methoden public class Ticketautomat { Datenfelder & Konstruktor ausgelassen /** * Nimmt den übergebenen Betrag als * Anzahlung */ public void geldeinwerfen(int betrag){ bishergezahlt += betrag; Folie 6.20

Fortsetzung Klassendefinition innerer Teil Methoden mit lokalen Variablen >> public class Klassenname { Datenfelder Konstruktoren Methoden Dabei handelt es sich um Variablen die innerhalb einer Methode deklariert und benutzt werden. Es kann nur innerhalb der Methode auf sie zugegriffen werden. Ihre Lebensdauer entspricht der der Methode. public int wechselgeldauszahlen(){ int wechselgeld; wechselgeld = bishergezahlt; bishergezahlt = 0; return wechselgeld; Folie 6.21

Beispiel Verbesserter Ticketautomat Live-Beispiel BlueJ Ansicht Kompilieren Instanz erzeugen Klassendefinition Datenfelder Konstruktor - erwartete Parameter Methoden - Übersicht Welche Methoden gibt es? - sondierende (get) - verändernde (set) Kommentierung Generell JavaDoc Variablen Implementierungs- versus Interface- Ansicht Folie 6.22

6.3 Variablen in Klassen In Kapitel 6.2 haben wir drei Arten von Variablen kennen gelernt. Datenfelder werden außerhalb von Methoden und Konstruktoren definiert und sind für die ganze Klasse sichtbar, Formale Parameter werden im Methoden- oder Konstruktorkopf definiert, erhalten ihre Werte von außen und sind nur innerhalb der Methode oder des Konstruktors sichtbar. Lokale Variablen werden in Methodenrümpfen definiert und sind nur innerhalb des Blocks sichtbar. Folie 6.23

Variablen Fortsetzung Allgemein: Der Begriff Variable bedeutet in Mathematik und Programmierung etwas fundamental Verschiedenes! Mathematik: Eine Variable ist ein Platzhalter für die Elemente einer Menge. - Beispiel: Für alle reellen Zahlen x (kurz: für x ε R) für die gilt x² 4. Programmierung: Eine Variable ist ein zusätzlicher, symbolischer Name für eine feste Speicheradresse. - Beispiel: schematische Speicheransicht - Beispielcode: x = x+1 x - Liest den Inhalt der Speicherzelle auf die x verweist in das Rechenwerk, addiert 1 dazu und schreibt das Ergebnis wieder in dieselbe Speicherzelle zurück. Folie 6.24

6.4 Zusammengesetzte Objekte Objekte von eingebauten Typen sind aus Sicht eines Java Programmierers atomar. Das heißt: Eine etwaige weitere interne Struktur und Zerlegbarkeit eines solchen Objekts auf Maschinenebene wird im Java Quelltext nicht sichtbar. Ausnahme: Es gibt Operatoren in Java zur logischen Verknüpfung von Zahlen Bit für Bit. Betrachten wir in dieser Veranstaltung nicht (für Interessierte: Stichwort Bitlogik). Objekte von Klassen sind hingegen im allgemeinen aus mehreren Variablen von eingebauten Typen und/oder Klassen zusammengesetzt. Folie 6.25

6.4 Zusammengesetzte Objekte Beispiel: public class Ticketautomat { public int preis; private int bishergezahlt; private int gesamtsumme; Konstruktor & Methoden ausgelassen Erläuterung: Ticketautomat gondelbahn = new Ticketautomat (); Mit obigem Code ist eine Klasse namens Ticketautomat definiert. Es wurde zudem eine Variable gondelbahn vom Typ Ticketautomat deklariert und initialisiert. Die genauen Details der Syntax (insbesondere der Sinn von public) werden erst später in der Vorlesung behandelt. Folie 6.26

6.4 Zusammengesetzte Objekte Erinnerung: Variablen von Klassen sind nur Verweise auf die Speicheradresse. gondelbahn gesamtsumme bishergezahlt preis Hinweis: Auf das Objekt preis vom eingebauten Typ int kann hier direkt zugegriffen werden (public). gondelbahn.preis Folie 6.27

6.4 Zusammengesetzte Objekte Beispiel 2: public class Verwaltung { public Ticketautomat verweis1; public Ticketautomat verweis2; public int i; Konstruktor & Methoden ausgelassen public class Ticketautomat { public int preis; private int bishergezahlt; private int gesamtsumme; Konstruktor & Methoden ausgelassen Verwaltung tud = new Verwaltung(); tud.verweis1 = new Ticketautomat(); tud.verweis2 = new Ticketautomat(); Folie 6.28

6.4 Zusammengesetzte Objekte Speichersicht tud i verweis2 verweis1 gesamtsumme bishergezahlt preis gesamtsumme bishergezahlt preis Zum Beispiel greift tud.verweis2.gesamtsummme in dieser Schemazeichnung auf die graue Speicherzelle ganz rechts zu. Folie 6.29

Kontrollfragen zu diesem Kapitel 1. Welches sind die Hauptbestandteile einer Klasse? 2. Was unterscheidet eine Methodensignatur von einer Konstruktorsignatur? 3. Was ist der Sinn von fest vordefinierten Schnittstellen? 4. Was ist unter einer Variable im Sinne der Programmierung zu verstehen? Folie 6.30