Objekte und Klassen. INE2 M. Thaler, Office TG ZHAW, M. Thaler, K. Rege, G. Burkert, E.

Ähnliche Dokumente
Repetitorium Informatik (Java)

Tag 8 Repetitorium Informatik (Java)

Tag 7 Repetitorium Informatik (Java)

Vererbung, Polymorphismus

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

Objektorientierte Programmierung Studiengang Medieninformatik

Programmiertechnik Klassenvariablen & Instantiierung

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

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

Implementieren von Klassen

C++ - Objektorientierte Programmierung Polymorphie

Einstieg in die Informatik mit Java

Algorithmen und Datenstrukturen 06

7. Objektorientierung. Informatik II für Verkehrsingenieure

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

Java Einführung Klassendefinitionen

Modellierung und Programmierung 1

Teil 2: Weitere Aspekte der Objektorientierung

Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter

Propädeutikum Programmierung in der Bioinformatik

Vorkurs Informatik WiSe 15/16

Algorithmen und Datenstrukturen 07

Einstieg in die Informatik mit Java

Informatik II. Woche 13, Giuseppe Accaputo

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

Einstieg in die Informatik mit Java

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

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

Javakurs 2013 Objektorientierung

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

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

Objektorientierung (OO)

7. Übung Informatik II - Objektorientierte Programmierung

Geschachtelte Klassen

Javakurs für Anfänger

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

Javakurs für Anfänger

Algorithmen und Datenstrukturen

Einstieg in die Informatik mit Java

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

Fragen zur OOP in Java

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

Klassen als Datenstrukturen

Kapitel 2: OO Grundlagen

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

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

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

Klassenvariablen, Klassenmethoden

Analyse der Klasse Konto

Einstieg in die Informatik mit Java

Java Referenzdatentypen genauer betrachtet

Einstieg in die Informatik mit Java

3 Objektorientierte Konzepte in Java

Programmiertechnik Objektorientierung

Vererbung, Polymorphie

Einführung in die Programmierung I. 10. Klassen und Objekte. Stefan Zimmer

EINFÜHRUNG IN DIE PROGRAMMIERUNG

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

Einstieg in die Informatik mit Java

Grundelemente objektorientierter Sprachen (1)

Überblick. Peer Kröger (LMU München) Einführung in die Programmierung WS 14/ / 492

Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer. Programmiertechnik Objektorientierung

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

Objektorientierte Programmierung Studiengang Medieninformatik

1 Klassen und Objekte

C++ - Objektorientierte Programmierung Konstruktoren und Destruktoren

Wir wollen in einer Bank die Konten der Kunden modellieren (um sie dann entspr. zu verarbeiten

Einstieg in die Informatik mit Java

Javakurs für Anfänger

Einstieg in die Informatik mit Java

Grundelemente objektorientierter Sprachen (1)

Klassenvariablen und statische Methoden

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

Grundelemente objektorientierter Sprachen (1)

Allgemeines - Prinzipien

Objektorientierte Programmierung und Klassen

11. Java Klassen. Klassen - Technisch. Klassen - Beispiel: Erdbebendaten. Klassen - Konzeptuell

EINFÜHRUNG IN DIE PROGRAMMIERUNG

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

Klassenvariablen und statische Methoden

Javakurs für Anfänger

Programmieren II. Innere Klassen. Heusch 10, Ratz 5.2.1, Institut für Angewandte Informatik

Java Einführung Methoden. Kapitel 6

Javakurs für Anfänger

Javakurs für Anfänger

Was du ererbt von Deinen Vätern hast, erwirb es, um es zu besitzen. J. W. v. Goethe.

C++ - Objektorientierte Programmierung Konstante und statische Elemente

5.5.8 Öffentliche und private Eigenschaften

Kapitel 8. Programmierkurs. Methoden. 8.1 Methoden

Prof. W. Henrich Seite 1

Javakurs für Anfänger

Java für Bauingenieure

Die Klasse java.lang.object. Thorsten Treffer

JAVA 05: Objektorientierte Konzepte

Programmieren in Java

Probeklausur Java Einführung in die Informatik. Wintersemester 2016/2017

Objekt-Orientierte Programmierung

Transkript:

Objekte und Klassen INE2 M. Thaler, tham@zhaw.ch Office TG208 http://www.zhaw.ch/~tham 1

Um was geht es? typedef struct Konto { double saldo; int id; Konto; Modul "konto" konto.h konto.c Prozedurale Programmierung: Funktionen auf Daten anwenden Konto *neueskonto(double kapital, int id); void einzahlen(double betrag, Konto *kto); double abheben(double betrag, Konto *kto); 2 Konto *neueskonto(int kapital, int id) { Konto kt = (Konto*)malloc(sizeof(Konto)); kt->saldo = kapital; kt->id = id; return kt; static int main(void) { void einzahlen(double betrag, Konto *kto)*meinkonto, { *deinkonto; kto->saldo += betrag; meinkonto = neueskonto(2000, 260); deinkonto = neueskonto(4000, 333); double abheben(double betrag, Konto betrag *kto) { = abheben(1000, deinkonto); kto->saldo -=betrag; return betrag;... einzahlen(betrag, meinkonto); free(meinkonto); free(deinkonto);

... um was geht es? public class Konto { private int ktonr = 0; private double saldo = 0.0; public Konto(int ktonr, double kapital) { this.ktonr = ktonr; saldo = kapital; public void einzahlen(double betrag) { saldo += betrag; public double abheben(double betrag) {... saldo -= betrag; return betrag; Objektorientierte Programmierung - Methoden und Daten bilden eine Einheit: das Objekt - Objekte mit Klassen beschrieben static public void main(string[] args) { double betrag; Konto meinkonto = new Konto(260, 2000); Konto deinkonto = new Konto(333, 4000); 3 betrag = deinkonto.abheben(500); meinkonto.einzahlen(betrag);

Lernziele Siekönnen die Begriffe "Objekt" und "Klasse" erklären den Unterschied zwischen Klasse und Objekt erklären erklären wie eine Klasse aufgebaut ist die Begriffe "Instanzvariable", "Klassenvariable", "Instanzmethode" und "Klassenmethode" erklären "this" erklären und anwenden erklären was ein Konstruktor ist und wie er angewendet wird erklären wie Konstruktoren und Methoden überladen werden können und in Programmen korrekt anwenden Zugriffsmodifikatoren erklären und korrekt anwenden 4

Inhalt Objekte und Klassen Deklaration einer Klasse Instanzvariablen Konstruktor Methoden Zugriffsmodifikatoren Klassenvariablen und Methoden Deklaration von Objektvariablen 5

Leseempfehlung Grundkurs Java Dietmar Abts, Springer Vieweg Kapitel 3 elektronisch verfügbar, siehe ZHAW Bibliothek Grundkurs Programmiern in Java 8 Dietmar Ratz ed. alt., Hanser Verlag Kapitel 5.2, 6.3-6.5, 8 elektronisch verfügbar, siehe ZHAW Bibliothek 6

OO-Programme OO-Programme bestehen aus Objekten die miteinander interagieren Interaktion über Methoden - Objekte rufen gegenseitig Methoden auf traditionell spricht man von "Meldungen austauschen" Beispiel Konto static public void main(string[] args) { Konto meinkonto = new Konto(260, 2000); Konto deinkonto = new Konto(333, 4000); meinkonto.einzahlen(deinkonto.abheben(500)); 7

Objekte und Klassen Objekt = Daten/Zustand + Methoden Daten (Attribute, Felder) Eigenschaften des Objekts - unveränderlich - veränderlich Methoden ("Funktionen") Verhalten des Objekts - erlauben Zugriff auf interne Daten des jeweiligen Objektes Objekte können in Java nicht direkt programmiert werden Klasse beschreibt Struktur des Objektes Bauplan 8

... Objekte und Klasse "Bauplan" Klasse: Konto Kontonummer: Kontostand: einzahlen() abheben() getsaldo() Instanzierung mit new Instanzierung mit new "Realisierung" Objekt 1: meinkonto Kontonummer: 260 Saldo: 2000 einzahlen() abheben() getsaldo() Objekt 2: deinkonto Kontonummer: 333 Saldo: 0 einzahlen() abheben() getsaldo() 9

... Objekte und Klassen Klasse= BauplanfürObjekt Objekt ist Instanz der Klasse (Realisieriung) von einer Klasse können beliebig viele Objekte erzeugt werden Objekte werden zu Laufzeit mit new erzeugt Konto meinkonto = new Konto(260, 2000); Klasse neuer benutzerdefinierter Datentyp (Referenzdatentyp) Java Programme besteht aus mindestens einer Klasse - enthält main() Methode es können auch tausende sein 10

Deklaration einer Klasse Allgemeiner Aufbau class Klassenname { // Instanz- und Klassenvariablen // Deklaration Konstruktoren // Deklaration Methoden und Klassenmethoden Konvention Klassenname gross beginnen, "CamelCase" Substantiv im Singular Klasse neuer benutzerdefinierter Datentyp Referenzdatentyp 11

Instanzvariablen Instanzvariablen Satz von Variablen pro Objekt (bzw. Instanz) Attribute i.d.r private nur innerhalb des Objekts sichtbar werden mit 0, null, false, etc. intialisiert Beispiel jedes Konto hat eigenen Saldo und eigene Kontonummer class Konto { private int ktonr; private double saldo;... Konto meinkonto = new Konto(260, 2000); // ktonr meinkonto -> 260 // saldo meinkonto -> 2000 12 Konto deinkonto = new Konto(333, 4000); // ktonr deinkonto -> 333 // saldo deinkonto -> 4000

Instanzvariablen: this Instanzvariablen und Methodenparameter this was wenn gleicher Name? bezeichnet "eigenes Objekt" ist Schlüsselwort Beispiel class Konto { private int ktonr; private double saldo; public Konto(int ktonr, double kapital) { this.ktonr = ktonr; saldo = kapital; 13

Konstruktor Konstruktor spezielle Methode einer Klasse - Initialisierung der Variablen (bzw. des Objektzustandes) automatisch beim Erzeugen des Objekts aufgerufen (new) Implementation muss gleichen Namen wie Klasse haben nur Zugriffsmodfikator: i.d.r. public kein Rückgabewert auch nicht void, aber Parameter wie Methode Beispiel: Klasse Konto public Konto(int ktonr, double kapital) { this.ktonr = ktonr; saldo = kapital; 14

... Konstruktor Java definiert Default-Konstruktor Konstruktor ohne Paramter und "Funktionalität" public Konto() { // Default-Konstruktor Objekt kann ohne expliziten Konstruktor instanziert werden Konstruktoren der Oberklassen(später) werden automatisch aufgerufen 15

Methoden Methoden Zugriffsmodfikator: public oder private Zugriff auf Instanzvariablen (Zustand) - innerhalb Klasse "global" mehrere Methoden mit gleichen Namen möglich Überladen Beispiel - Voraussetzung: unterschiedliche Parameterlisten // methode 1 public void einzahlen(double betrag) { saldo += betrag; // methode 2 public void einzahlen() { saldo += 100; Aufruf einzahlen(1000); // methode 1 einzahlen(); // methode 2 16

public or private Kapselung(encapsulation) Objekt: Daten und Methoden zusammengefasst Geheimnisprinzip(information hinding) Objekt definiert klar definiert Schnittstelle nach aussen interne Daten (Attribute) werden versteckt - private Attribute speichern Zustand des Objekts Schnittstelle bei Objekten - public Methoden Zugang zu internen Daten - public Attribute vermeiden Schnittstelle Vertrag zwischen Implementator und Nutzer der Klasse (können verschiedene Personen sein) 17

... public or private Verstecken von Attributen Zugriff auf Variablen/Attribute nur über Methoden Regeln - alle Attribute als private deklarieren Vorteile - Veränderung ausschliesslich über Getter- / Setter-Methoden Namenskonvention: getxyz(), setxyz() - Interne bzw. lokale Methoden private für Anwender nicht sichtbar Daten / Zustand des Objektes bleibt konsistent vereinfacht Anwendung (keine Detailkenntnisse notwendig) Implementation kann jederzeit geändert werden 18

... public or private Beispiel Konto direkter Zugriff auf Saldo mit Getter-/Setter Methoden class Konto { private int ktonr; private double saldo;... public double getsaldo() { return saldo; public void setsaldo(double betrag) { saldo = betrag; 19

Klassenvariablen: static Klassenvariablen gehören zur Klasse, nicht zum Objekt - es gibt genau eine Kopie der Variable entsprechen globalen Variablen in anderen Sprachen Deklaration mit Schlüsselwort static Zugriff über Klassennamen Klassenname.xyz - es muss keine Instanz der Klasse existieren Beispiel Konto class Konto { public static String thebank = "Wintibank"; private double saldo = 0.0;... Zugriff System.out.println(Konto.theBank); 20

Klassenmethoden: static Klassenmethoden gehören zur Klasse, nicht zum Objekt es muss keine Instanz der Klasse erzeugt werden Zugriff auf Klassenvariablen und Klassemethoden möglich Einschränkung - kein Zugriff auf Instanzvariablen und Instanzmethoden Beispiel: Math Klasse double t; double sinvalue = Math.sin(2*Math.PI*t); double randomvalue = Math.random(); 21

Instanz vs. Klasse Instanzvariablen / - methoden Klassenvariablen / -methoden gehören zum jeweiligen Objekt eine Kopie pro Objekt gehören zur Klasse nur eine Kopie pro Klasse Instanzmethoden-Aufruf über Objektname Klassenmethoden-Aufruf über Klassenname Instanzariablen-Zugriff über Objektname Klassenvariablen-Zugriff über Klassenname Änderung einer Instanzvariablen sichtbar nur im aktuellen Objekt Änderung einer Klassevariablen sichtbar in allen Objekten Instanzvariablen / - methoden Aufruf nur wenn Objekt vorhanden Klassevariablen / - methoden kein Objekt (Instanz) notwendig 22

Klassen-Beziehung use Nutzungs-Beziehung: use Funktionalität einer anderen Klasse nutzen - ähnlich wie Module in C Beispiel: Bank und Konto Konto kto = new Konto(333, 200); double summe = abheben(100); UML Diagramm 1) Konto private...; Klasse Bank verwendet (use) Klasse Konto über Instanz von Konto Zugriff auf public: Instanzmethoden und -variablen Klassenmethoden und -variablen über Klasse Ball Zugriff auf public: Klassenmethoden und -variablen Methoden aus Konto in Bank: nicht überlad- und nicht überschreibbar use Bank... einzahlen(...) abheben(...)... 23 1) UML: Unified Modeling Language

Deklaration von Objektvariablen Deklaration von Objektvariablen legt (Referenz)-Variable vom Typ "Klassenname" an - Achtung das Objekt existiert noch nicht - Variable wird mit Referenz-Wert null initialisiert Beispiel: Klasse Konto Konto meinkonto; // Referenz auf Konto Objekt, = null Instanzierung(Erzeugung) mit new Objekt wird erzeugt und mit Konstruktor initialisiert "meinkonto" zeigt nun auf das Objekt Konto meinkonto; meinkonto = new Konto(260, 2000); Konto deinkonto = new Konto(333, 4000); 24

... Objektvariablen Objektevariablen Referenz-Datentypen verhalten sich anders als "normale" Variablen wie int, double,... Zuweisung kopiert nur Referenz beide zeigen auf das gleiche Objekt!!! keine Objektkopie!!! Konto meinkonto, daskonto; meinkonto = new Konto(2000, 260); daskonto = meinkonto; meinkonto daskonto Objekt Echte Kopie erstellen entweder selber ausprogrammieren fehleranfällig oder Clonable Interface implementieren später 25

... Objektvariablen Vergleich von Objekten nicht "==" verwenden falsch - vergleicht nur Referenzen jedes Objekt besitzt Methode equals() - muss aber ev. selber implementiert werden (Methode überschreiben Details später) @Override public boolean equals(object o) { Konto acnt = (Konto)o; // cast Object to Konto return (ktonr == acnt.getkontonr()); 26