Objekt-Orientierte Programmierung

Ähnliche Dokumente
Objekt-Orientierte Programmierung

Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter

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

Implementieren von Klassen

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

Abschnitt 6: Klassen, Objekte und Methoden in Java

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

Repetitorium Informatik (Java)

Objektorientierte Programmierung Studiengang Medieninformatik

Programmieren in Java

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

C++ - Objektorientierte Programmierung Konstruktoren und Destruktoren

Tag 7 Repetitorium Informatik (Java)

1 Klassen und Objekte

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

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

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

Algorithmen und Datenstrukturen 06

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

Einführung in die Programmierung

Philipp Güttler Objektorientierung und komplexe Datentypen

Programmieren in Java

Geschachtelte Klassen

Fragen zur OOP in Java

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

Programmieren in Java

Tag 8 Repetitorium Informatik (Java)

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

Einstieg in die Informatik mit Java

Javakurs für Anfänger

3. Klassen Statische Komponenten einer Klasse. Klassenvariablen

Programmierkurs Java

C++ - Objektorientierte Programmierung Konstante und statische Elemente

Objektorientierte Programmierung Studiengang Medieninformatik

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

Prozeduren vs. Funktionen

Allgemeines - Prinzipien

Modularisierung in Java: Pakete Software Entwicklung 1

Objektorientes Design & Programm

Pakete Software Entwicklung 1

Programmieren I. Kapitel 10. Spezielle Features

3 Objektorientierte Konzepte in Java

Einstieg in die Informatik mit Java

Kapitel 8. Programmierkurs. Methoden. 8.1 Methoden

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

Programmieren in C/C++ und MATLAB

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

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 15/16. Kapitel 7. Grafische Benutzeroberflächen 1

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Wiederholung: Gerüstbeispiel. Vererbungshierarchie: Typ 0

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

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

7. Pakete Grundlagen der Programmierung 1 (Java)

7. Übung Informatik II - Objektorientierte Programmierung

5.5.8 Öffentliche und private Eigenschaften

Java Einführung Methoden in Klassen

Beispiel: Zwischen der Oberklasse und der abgeleiteten Klasse besteht eine ist ein Beziehung. Eine abgeleitete Klasse stellt eine Spezialisierung der

Javakurs für Anfänger

Javakurs 2013 Objektorientierung

Praktische Informatik 1

Einstieg in die Informatik mit Java

EINFÜHRUNG IN DIE PROGRAMMIERUNG

10. Pakete. Ein Paket (package) bündelt thematisch zusammengehörige Klassen und Schnittstellen zu einer Klassenbibliothek.

Java I Vorlesung Vererbung und Sichtbarkeit

Kapitel 3. Programmierkurs. Arten von Anweisungen. 3.1 Was sind Anweisungen?

Computeranwendung und Programmierung (CuP)

Java Einführung Klassendefinitionen

Geschachtelte Klassen

Programmieren in Java

Java: Der Einstieg. Algorithmen und Datenstrukturen II 1

10. Pakete Einführung in die Programmierung (fbw) Sommersemester 2007 Prof. Dr. Bernhard Humm Hochschule Darmstadt, fbi

Einstieg in die Informatik mit Java

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Globale Variablen Diverses. Globale Variablen. Globale Variablen

Einstieg in die Informatik mit Java

3.2 Datentypen und Methoden

Zugriffsrechte und Packages

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

Probeklausur Informatik 2 Sommersemester 2013

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

Objektorientierte Programmierung

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

Javakurs für Anfänger

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

Einführung in die Programmiersprache Java II

Javakurs für Anfänger

Vorkurs C++ Programmierung

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

Statische und Nichtstatische Methoden Properties/ Eigenschaften

Objektorientierung (OO)

Umsetzung einer Klassenkarte in einer Programmiersprache

Javakurs für Anfänger

Einstieg in die Informatik mit Java

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

Algorithmen und Datenstrukturen II

Vererbung und Polymorphie

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

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

Aufbau von Klassen. class punkt {...

3 Klassen, Attribute, Methoden

Transkript:

Objekt-Orientierte Programmierung Ein OO-Programm modelliert eine Anwendung als eine Welt von Objekten, die miteinander in Beziehung stehen ( später). Ein Objekt kann andere Objekte erzeugen. Ein Objekt kann eigene Methoden und die Methoden anderer Objekte aufrufen. Ein Objekt hat Datenfelder, die Werte beinhalten und während des Programmablaufs geändert werden können.

Objekte Können zur Modellierung von realen Objekten verwendet werden. Können Software-Einheiten repräsentieren, z.b. Ereignisse, Dateien, Bilder, etc. Können abstrakte Konzepte repräsentieren, z.b. Regeln eines Spieles, einen speziellen Tanztyp, etc. Können zur Repräsentation von GUI (Graphical User Interface) Komponenten verwendet werden.

Klassen und Objekte Eine Klasse ist ein Stück eines Quellcodes, das einen speziellen Objekttyp (Sorte) beschreibt. OO-Programmierer schreiben Klassendefinitionen Ein Objekt wird eine Instanz einer Klasse genannt. Ein Programm kann beliebig viele Instanzen einer Klasse anlegen und verwenden.

Klassen und Objekte Klasse Eine Blaupause (Plan) für Objekte eines speziellen Typs Objekt Attribute Definiert die Struktur (Anzahl, Typen) der Attribute Definiert das Verhalten (Funktionalität) der Objekte Verhalten

Klassen und Objekte Klasse: Auto Objekt: ein spezielles Auto Attribute: String typ Farbe farbe int leistung int anzpersonen double verbrauch Verhalten: Insassen hinzufügen/entfernen, volltanken, melde leeren Tank Attribute: typ = "Mustang farbe = gelb leistung = 220 anzpersonen = 0 verbrauch = 12.5 Verhalten:

Klassen und Objekte Klasse Ein Stück Quelltext Objekt Eine Instanz in einem laufenden Programm Geschrieben von einem Programmierer Wird zur Laufzeit des Programms angelegt (von der main-methode oder einer anderen Methode) 6

Klassen und Objekte Klasse Spezifiziert die Struktur (die Anzahl und Typen) seiner Objektattribute gleich für alle Objekte dieser Sorte Objekt Speichert spezielle Attributwerte; diese können sich während des Programmlaufs ändern Spezifiziert das Verhalten seiner Objekte Verhält sich entsprechend 7

Klassen und Quelldateien Jede Klasse ist in einer seperaten Datei gespeichert Der Name der Datei muss gleich dem Namen der Klasse sein, mit der Erweiterung.java Car.java public class Car {... Konvention: der Name der Klasse (und der entspr. Datei) beginnen mit einem Großbuchstaben. (In Java sind alle Namen case-sensitive.)

Bibliotheken Java Programme werden normalerweise nicht von Null geschrieben. Es existieren bereits hunderte von Klassenbibliotheken, in denen Klassen für unterschiedlichste Anwendungen definiert wurden. Klassenbibliotheken sind in Packages organisiert. Beispiel: java.util miscellaneous utility classes java.awt windowing and graphics toolkit javax.swing GUI development package

Klassen-Import Um Klassen innerhalb von Paketen nutzen zu können, müssen sie dem Compiler präzise beschrieben werden Vollständige qualifizierte Klassennamen beinhalten den Package- Namen: java.awt.color javax.swing.jbutton import-statements zu Beginn des Quellcodes erlauben es, Abkürzungen zu verwenden: import javax.swing.jbutton;... JButton go = new JButton("Go"); vollständig qualifiziert

Klassen-Import Man kann alle Klassennamen aus einem Package importieren lassen, in dem man eine wildcard.* verwendet: import java.awt.*; import java.awt.event.*; import javax.swing.*; Importiert alle Klassen aus awt, awt.event, und swing Packages java.lang wird automatisch in alle Klassen importiert; definiert System, Math, Object, String, und andere häufig verwendete Klassen.

Members Technische Universität München Klassendefinition SomeClass.java import public class SomeClass { import statements Funktionskopf Attribute Variablen, die den Objektzustand definieren; Basistypen, Strings, andere Objekte Konstruktoren Prozeduren für die Initialisierung der Attribute beim Anlegen eines neuen Objekts der Klasse Methoden Aktionen (Funktioen oder Prozeduren), die ein Objekt dieser Klasse ausführen kann

Attribute Instanz-Variablen der private Speicher der Objekte

Attribute Attributname [private public] [static] [final] optional: normalerweise private datatype name; int, double, etc., oder ein Objekt optional: bedeutet, dass das Attribute nur einmal für die Klasse angelegt wird; Klassenattribute optional: bedeutet, dass das Attribute eine Konstante ist und nicht mehr geändert werden kann

Konstruktoren Prozeduren, um ein Objekt bei der Konstruktion zu initialisieren Haben immer den Namen der Klasse Initialisieren die Objektattribute Können Parameter haben Eine Klasse kann mehrere Konstruktoren besitzen, die sich in der Anzahl und im Typ der Parameter unterscheiden

Konstruktoren Ein privater Konstruktor ist ein spezieller Instanz-konstruktor. Er wird häufig für Klassen verwendet, die nur statische Member enthalten. Wenn eine Klasse über einen oder mehrere private und keine öffentlichen Konstruktoren verfügt, dürfen von anderen Klassen keine Instanzen dieser Klasse erstellt werden. Beispielsweise weil die Klasse nur als ein Behälter statischer Methoden dienen soll.

Konstruktoren... Car mycar;... mycar = new Car ( Opel, 6.4, 150, 25000);... public class Car {... Ein Objekt wird durch den new Operator kreiert Die Anzahl, Reihenfolge und Typen der Parameter müssen mit der Deklaration übereinstimmen public Car (String typ, float x, int y, int z) {...... Konstruktor

Konstruktoren ein Beispiel JButton go = new JButton("Go");

Konstruktoren class Car { private String typ; private float verbrauch; private int ausstoß; private int preis; Car ( String typ, float verbrauch, int co2, int preis ) { this.typ = typ; this.verbrauch = verbrauch; ausstoß = co2; this.preis = preis; Im Rumpf einer Methode kann auf das Objekt, für das die Methode aufgerufen wird, durch das Schlüsselwort this verwiesen werden

Konstruktoren class MyStaticClass { public static int i; public static short s; static { i = 10; s = 20; Ein statischer (parameterloser) Konstruktor kann verwendet werden, um statische Variablen mit einem Wert zu initialisieren. Der Konstruktor kann dabei ausschließlich statische Variablen mit einem Startwert vorbelegen.

Methoden Methoden werden für ein spezielles Objekt aufgerufen Die Anzahl und Typen der Parameter (Argumente) eines Funktionsaufrufs müssen mit der Deklaration übereinstimmen Eine Methode liefert entweder einen Wert zurück oder wird durch das Schlüsselwort void im Funktionskopf als Prozedur deklariert

Methoden class MyClass { public int a; public MyClass ( int x ) { a = x; public void MyMethod() { System.out.print("my method was called"); public class MyTest { public static void main(string[] args) { MyClass object = new MyClass(1); object.a = 3; System.out.print(object.a); object.mymethod(); Der Objektname wird durch den Punktoperator vom gewünschten Element (Attribut/Methode) getrennt notiert.

Kapselung Die besondere Idee der Klassen und ihrer Objekte ist die Kapselung von Daten (Programmvariablen) und Algorithmen (Methoden) in eine Einheit. Die Objektorientierung bietet syntaktische Mittel, um sicherzustellen, dass Programmteile nur auf die ihnen zugeordneten Programmvariablen zugreifen. Regelung Die Namen privater Attribute sind nur innerhalb des Klassenrumpfes gültig, ihre Lebensdauer ist mit der Lebensdauer des Objekts gleichgesetzt. Private Attribute können ausschließlich durch Zuweisungen im Rumpf von Methoden des Objekts verändert werden, in dem auch das Attribut angesiedelt ist und auch nur dort gelesen werden. Die Lebensdauer der Attribute, der lokalen Daten, eines Objekts und damit seiner Methoden besteht über die Dauer des Aufrufs einer Methode fort.

Methoden Konstruktoren und Methoden können andere public und private Methoden der selben Klasse aufrufen. Konstruktoren und Methoden können nur public Methoden anderer Klassen aufrufen Class X Class Y private field public Methode public Methode private method

Kapselung class Konto { private String private String private int kontonummer; kontoinhaber; kontostand; Konto(String ktonr, String ktoinh, int startwert) {... public void erbuebertrag(konto kto) { kontostand = kontostand + kto.kontostand; kto.kontostand = 0; Korrekt, da innerhalb von Methoden eines Objektes einer Sorte alle lokalen Atttribute und Methoden der Sorte sichtbar sind!

Kapselung class Konto { private String kontonummer; private String kontoinhaber; public int kontostand; Konto(String ktonr, String ktoinh, int startwert) {... public class KontoTester { public static void main(string[] args) { Konto meinkonto = new Konto( 123, Westermann, 100); meinkonto.kontostand = 1000; write( meinkonto.kontonummer + : + meinkonto.kontostand ); Fehler bei Übersetzung, da kontonummer in main nicht sichtbar ist!

Kapselung class Car { public static int lagerbestand = 0; private static Car[] lagerliste = new Car[1000]; Car(String type, float verbrauch, int co2, int preis) {... Car(Car newcar) {... public static void einkauf(car newcar) { lagerliste[lagerbestand] = new Car(newCar); lagerbestand++; public static void verkauf(int index) { lagerliste[index] = null; // nicht empfehlenswert!!! lagerbestand--; Die Referenz null bezeichnet ein vorgegebenes Referenzelement, dessen Bezugselement undefiniert ist. Im Rumpf einer (Klassen)methode kann auf Klassenattribute zugegriffen werden.

Kapselung class Car { public static int lagerbestand = 0; private static float gewinn = 0; private static Car[] lagerliste = new Car[1000]; public static void einkauf(car newcar) {... public static void verkauf(int index) {... public class Organizer { public static void main(string[] args) { Car car = new Car(...); write( Aktueller Bestand: + Car.lagerbestand); write( Aktueller Gewinn: + Car.gewinn); Car.einkauf(car); Fehler beim Kompilieren, da Klassenattribut gewinn in main nicht sichtbar ist!

Sichtbarkeiten Erlaubte Zugriffe auf Attribute und Methoden: public default private Klasse selbst X X X Andere Klasse im gleichen Paket X X Andere Klasse im anderen Paket X

Sichtbarkeit in Packages in Java Für Klassen, die auf der obersten Ebene direkt in einem Paket deklariert sind, gelten folgende Regeln (sie gelten nicht für Klassen, die als Member einer anderen Klasse definiert wurden später): Wenn eine Klasse nicht mit dem Klassenmodifikator "public" deklariert wird, dann ist sie nur innerhalb ihres Pakets sichtbar. Wenn eine Klasse mit dem Klassenmodifizierer "public" deklariert wird, dann ist sie in allen Paketen der Hierarchie sichtbar. In Java darf nicht mehr als eine öffentliche Klasse in einer Übersetzungseinheit enthalten sein, eine Übersetzungseinheit darf aber mehrere (nicht-öffentliche) Klassen enthalten. Für Klassendeklarationen der obersten Ebene ist der Klassenmodifizierer "private" nicht anwendbar.

Sichtbarkeit in Packages in Java Ein Zugriff auf eine Methode einer Klasse ist nur möglich, wenn ein Zugriff auf die Klasse möglich ist. Ist der Zugriff auf eine Klasse möglich, so ist aber der Zugriff auf alle Methoden der Klasse nicht unbedingt möglich. Wenn bei der Deklaration einer Methode keine Methodenmodifikatoren für den Zugriff angegeben wird, dann ist die Methode nur in dem Paket der Methode sichtbar. Wird eine Methode mit dem Methodenmodifizierer "public" deklariert, dann ist diese Methode in allen Paketen der Hierarchie sichtbar. Wird eine Methode mit dem Methodenmodifikator "private" deklariert, so ist diese Methode nur innerhalb der Klassendeklaration der Klasse sichtbar, in der die Methode deklariert wird.