Informatik I : Software höhere Programmiersprachen Java Klassen: hat Methoden (Funktionen) und Daten (Variablen) es kann mehrere Klassen geben nur eine.

Slides:



Advertisements
Ähnliche Präsentationen
der Universität Oldenburg
Advertisements

der Universität Oldenburg
Objektorientierte Programmierung
der Universität Oldenburg
Imperative Programmierung
der Universität Oldenburg
Objektorientierte Programmierung
DVG Einfache Klassen Einfache Klassen. DVG Einfache Klassen 2 Strukturen Beispiel: Personendaten bestehen aus –String name –String vorname.
Abstrakte Klassen HS Merseburg (FH) WS 06/07.
Java: Objektorientierte Programmierung
Java: Dynamische Datentypen
Indirekte Adressierung
Java: Grundlagen der Sprache
Java: Referenzen und Zeichenketten
Java: Grundlagen der Objektorientierung
FH-Hof Fehlerbehandlung Richard Göbel. FH-Hof Konzept Fehler können mit dem Operator throw einer übergeordneten Funktion signalisiert werden. Parameter.
Abstrakte Klassen.
Erweiterte Zuweisungskompatibilität
Konstruktoren.
Polymorphie (Vielgestaltigkeit)
Polymorphie (Vielgestaltigkeit)
Objekte und Arbeitsspeicher
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 4 Vererbung Sommersemester 2003 Lars Bernard.
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 5 Polymorphismus Sommersemester 2003 Lars Bernard.
Java-Kurs - 2. Übung Entwicklungsumgebung Struktur von Programmen
Programmieren mit JAVA
Programmieren mit JAVA
PKJ 2005/1 Stefan Dissmann Ausblick Es fehlen noch: Möglichkeiten zum Strukturieren größerer Programme Umgang mit variabler Zahl von Elementen Umgang mit.
PKJ 2005/1 Stefan Dissmann Zusammenfassung Bisher im Kurs erarbeitete Konzepte(1): Umgang mit einfachen Datentypen Umgang mit Feldern Umgang mit Referenzen.
Objektorientierte Programmierung
1DVG3 - Paint Paint ein Zeichenprogramm. DVG3 - Paint 2 Paint – ein Zeichenprogramm.
Abstrakte Klassen DVG
DVG Einführung in Java1 Einführung in JAVA.
Abstrakte Klassen, Interface
DVG Klassen und Objekte
DVG Einfache Klassen 1 Einfache Klassen. 2DVG Einfache KlassenStrukturen Beispiel: Personendaten bestehen aus String name String name.
Klassen 02 - Klassen.
Java in 9 Folien Besser: Online-Buch Go to Java 2.
© 2002 Dr. Cavelius - Ley - Pohlig - Taulien Step by step zum JFrame 1 Zum JFrame Step by step by step by step by step by step by step by step by.
Bestimmung des ggT zweier Zahlen
© 2005 Pohlig GK Informatik K Zum JFrame Step by step by step by step by step by step by step by step by.
© 2006 MPohlig Grundkurs Informatik mit Java 1 JFrame-Vorlage Step by step by step by step by step by step by step by step by.
Vererbung Einfache Vererbung – Erben von abstrakten Klassen – Implementieren eines Interfaces.
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
CuP - Java Elfte Vorlesung Montag, 11. November 2002.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
OOP-Begriffe Abstraktion Modellieren Klasse Objekt Attribute Methoden
Objektorientiertes Konstruieren
Variablenkonzept Klassisch, in Java Basistyp
Die Klasse String und ihre Methoden
Programmierung von Agenten in Java: Implementierung einer Supply-Chain
Programmiervorkurs WS 2014/15 Methoden
Programmiervorkurs WS 2014/15 Instanzmethoden
CuP - Java Achte Vorlesung Entspricht ungefähr Kapitel 4.1 des Skriptums Montag, 28. Oktober 2002.
Polymorphie (Vielgestaltigkeit). Wenn eine Methode, wie z.B. print für verschiedene Programmteile steht (und z.B. einmal Objekte verschiedener Klassen.
Java Syntaxdiagramme Buchstabe A B Z a z ... Ziffer
© 2005 Pohlig Informatik Jg. 11 mfH Michael Pohlig 1 Zum JFrame Step by step by step by step by step by step by step by step by.
Java-Kurs - 3. Übung Hausaufgabe Arrays For-Schleifen.
Java-Kurs Übung Besprechung der Hausaufgabe Vererbung
Java-Kurs Übung Besprechung der Hausaufgabe
Java-Kurs - 5. Übung Besprechung der Übungsaufgabe Klassen und Objekte
Java-Kurs Übung Besprechung der Hausaufgabe Vererbung
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 5. Vorlesung WS 2002/2003.
Objektorientierte Programmierung (OOP)
Vererbung in Java. public abstract class Form { protected int breite; protected int hoehe; protected String farbe; /** * Erzeuge eine Form der Breite.
Java-Kurs Übung Grafik in Java - das Abstract Windowing Toolkit
Java-Kurs Übung Klassen und Objekte: Vererbung (Fortsetzung)
Einführung in die Programmierung mit Java
Grundkurs Informatik 11-13
Implementieren von Klassen
 Präsentation transkript:

Informatik I : Software höhere Programmiersprachen Java Klassen: hat Methoden (Funktionen) und Daten (Variablen) es kann mehrere Klassen geben nur eine Klasse in einer Datei darf public sein Variablen müssen mit new angelegt werden. Input in = new Input(); Funktionen werden Variablenname.Funktionsname aufgerufen in.readInt() oder in.readDouble()

Matrizen = zweidimensionale Felder

Deklaration: datentyp[][] variablenname;

Matrizen = zweidimensionale Felder Deklaration: datentyp[][] variablenname; Speicher reservieren: variablenname = new datentyp[größe_x][größe_y];

Matrizen = zweidimensionale Felder Deklaration: datentyp[][] variablenname; Speicher reservieren: variablenname = new datentyp[größe_x][größe_y]; variablenname = new datentyp[größe_x][]; variablenname[0] = new datentyp[größe_y]; variablenname[1] = new datentyp[größe_y + 1];

Matrizen = zweidimensionale Felder Deklaration: datentyp[][] variablenname; Speicher reservieren: variablenname = new datentyp[größe_x][größe_y]; variablenname = new datentyp[größe_x][]; variablenname[0] = new datentyp[größe_y]; variablenname[1] = new datentyp[größe_y + 1]; Elementzugriff: variablenname[i][j]; int[][] d = new int[4][4]; d[0][0]d[0][1]d[0][2]d[0][3] d[1][0]d[1][1]d[1][2]d[1][3] d[2][0]d[2][1]d[2][2]d[2][3] d[3][0]d[3][1]d[3][2]d[3][3]

Reale WeltVirtuelle Welt

Reale WeltVirtuelle Welt Unsere Welt besteht aus Objekten!

Reale WeltVirtuelle Welt Unsere Welt besteht aus Objekten! Objekte mit gleichen Eigenschaften und gleichen Verhaltensweisen (Methoden) faßt man in Klassen zusammen.

Reale WeltVirtuelle Welt Unsere Welt besteht aus Objekten! Objekte mit gleichen Eigenschaften und gleichen Verhaltensweisen (Methoden) fasst man in Klassen zusammen. Klassen werden vereinbart. Ein Objekt aus einer Klasse nennt man eine Instanz der Klasse. Objekte müssen explizit erzeugt werden. Sie existieren dann mit einem persistenten lokalen Zustand. Verallgemeinerung von Prozeduren. Eingeschränkter Zugriff auf interne Struktur (Schnittstelle nach außen/ interne Realisierung)

Virtuelle Welt class Person { String vorname; String name; String adresse; Person(String p_name, String p_vorname, String p_adresse) { name = p_name; vorname = p_vorname; adresse = p_adresse; } void datenAusgeben() { System.out.println(“\n“); System.out.println(“Name : “ + name); System.out.println(“Vorname :“ + vorname); System.out.println(“Adresse :“ + adresse); }

Virtuelle Welt class Person { String vorname; String name; String adresse; Person(String p_name, String p_vorname, String p_adresse) { name = p_name; vorname = p_vorname; adresse = p_adresse; } void datenAusgeben() { System.out.println(“\n“); System.out.println(“Name : “ + name); System.out.println(“Vorname :“ + vorname); System.out.println(“Adresse :“ + adresse); } Eigenschaften der Klasse werden in Datenfeldern gespeichert.

Virtuelle Welt class Person { String vorname; String name; String adresse; Person(String p_name, String p_vorname, String p_adresse) { name = p_name; vorname = p_vorname; adresse = p_adresse; } void datenAusgeben() { System.out.println(“\n“); System.out.println(“Name : “ + name); System.out.println(“Vorname :“ + vorname); System.out.println(“Adresse :“ + adresse); } Methoden der Klasse.

Virtuelle Welt Konstruktor der Klasse. class Person { String vorname; String name; String adresse; Person(String p_name, String p_vorname, String p_adresse) { name = p_name; vorname = p_vorname; adresse = p_adresse; } void datenAusgeben() { System.out.println(“\n“); System.out.println(“Name : “ + name); System.out.println(“Vorname :“ + vorname); System.out.println(“Adresse :“ + adresse); }

package MyPackage; class Person { String vorname; String name; String adresse; Person(String p_name, String p_vorname, String p_adresse) { name = p_name; vorname = p_vorname; adresse = p_adresse; } void datenAusgeben() { System.out.println(“\n“); System.out.println(“Name : “ + name); System.out.println(“Vorname :“ + vorname); System.out.println(“Adresse :“ + adresse); } import MyPackage.Person; public class BeispielAnwendungPerson { public static void main(String[] args) { Person berti = new Person(“Vogts“, “Berti“, “Leverkusen, Trainerstr. 0“); berti.datenAusgeben(); }

class Person { String vorname; String name; String adresse; Person(String p_name, String p_vorname, String p_adresse) { name = p_name; vorname = p_vorname; adresse = p_adresse; } Person(String p_name) { name = p_name; } void datenAusgeben() { System.out.println(“\n“); System.out.println(“Name : “ + name); System.out.println(“Vorname :“ + vorname); System.out.println(“Adresse :“ + adresse); } import Person; public class BeispielAnwendungPerson { public static void main(String[] args) { Person berti = new Person(“Vogts“); berti.vorname = “Berti“; berti.adresse = „“Leverkusen, Trainerstr. 0“; berti.datenAusgeben(); }

class Person { String vorname; String name; String adresse; Person(String p_name, String p_vorname, String p_adresse) { name = p_name; vorname = p_vorname; adresse = p_adresse; } Person(String p_name) { name = p_name; } void datenAusgeben() { System.out.println(“\n“); System.out.println(“Name : “ + name); System.out.println(“Vorname :“ + vorname); System.out.println(“Adresse :“ + adresse); } Eine Klasse kann über viele Konstruktoren verfügen. Sie unterscheiden sich in den Eingabeparametern. Jeder Konstruktor hat einen eindeutigen Satz von Eingabeparametern.

class Person { String vorname; String name; String adresse; Person(String p_name, String p_vorname, String p_adresse) { name = p_name; vorname = p_vorname; adresse = p_adresse; } void datenAusgeben() { System.out.println(“\n“); System.out.println(“Name : “ + name); System.out.println(“Vorname :“ + vorname); System.out.println(“Adresse :“ + adresse); } Person StudentMitarbeiterProfessor Vererbung

class Person { String vorname; String name; String adresse; Person(String p_name, String p_vorname, String p_adresse) { name = p_name; vorname = p_vorname; adresse = p_adresse; } void datenAusgeben() { System.out.println(“\n“); System.out.println(“Name : “ + name); System.out.println(“Vorname :“ + vorname); System.out.println(“Adresse :“ + adresse); } Person StudentMitarbeiterProfessor Vererbung Basisklasse Abgeleitete Klassen

class Person { String vorname; String name; String adresse; Person(String p_name, String p_vorname, String p_adresse) { name = p_name; vorname = p_vorname; adresse = p_adresse; } void datenAusgeben() { System.out.println(“\n“); System.out.println(“Name : “ + name); System.out.println(“Vorname :“ + vorname); System.out.println(“Adresse :“ + adresse); } Person StudentMitarbeiterProfessor Vererbung Basisklasse Abgeleitete Klassen Abgeleitete Klassen verfügen über zusätzliche Eigenschaften und Fähigkeiten (Methoden).

class Person { String vorname; String name; String adresse; Person(String p_name, String p_vorname, String p_adresse) { name = p_name; vorname = p_vorname; adresse = p_adresse; } void datenAusgeben() { System.out.println(“\n“); System.out.println(“Name : “ + name); System.out.println(“Vorname :“ + vorname); System.out.println(“Adresse :“ + adresse); } Vererbung class Mitarbeiter extends Person { float gehalt; Mitarbeiter(String p_name, String p_vorname, String p_adresse, float p_gehalt) { // Konstruktor der Basisklasse aufrufen super(p_name, p_vorname, p_adresse); gehalt = p_gehalt; } void gehaltAusgeben() { System.out.println(“\n“); System.out.println(“Gehalt : “ + gehalt); } void gehaltAendern(int aenderung) { gehalt += aenderung; }

public class AnwendungVonMitarbeiter { public static void main(String[] args ) { Mitarbeiter billy; billy = new Mitarbeiter(“Gates“, “Bill“, “Hollywood“, 2000); billy.gehaltAendern(-2000); billy.datenAusgeben(); billy.gehaltAusgeben(); } Vererbung class Mitarbeiter extends Person { float gehalt; Mitarbeiter(String p_name, String p_vorname, String p_adresse, float p_gehalt) { // Konstruktor der Basisklasse aufrufen super(p_name, p_vorname, p_adresse); gehalt = p_gehalt; } void gehaltAusgeben() { System.out.println(“\n“); System.out.println(“Gehalt : “ + gehalt); } void gehaltAendern(int aenderung) { gehalt += aenderung; }

Vererbung Person StudentMitarbeiterProfessor Wissenschaftl. MitarbeiterNicht-wissenschaftl. Mitarbeiter class WissenschaftlicherMitarbeiter extends Mitarbeiter { // Implementierung }

Polymorphismus class Mitarbeiter extends Person { float gehalt; Mitarbeiter(String p_name, String p_vorname, String p_adresse, float p_gehalt) { // Konstruktor der Basisklasse aufrufen super(p_name, p_vorname, p_adresse); gehalt = p_gehalt; } void gehaltAusgeben() { System.out.println(“\n“); System.out.println(“Gehalt : “ + gehalt); } void gehaltAendern(int aenderung) { gehalt += aenderung; } public class FirstTestPolymorphism { public static void main(String[] args ) { Person[] personen = new Person[300]; Mitarbeiter billy = new Mitarbeiter(“Gates“, “Bill“, “Hollywood“, 2000); personen[0] = billy; ((Mitarbeiter)personen[0]).gehaltAendern(-1000); ((Mitarbeiter)personen[0]).gehaltAusgeben(); } Cast-Operator

public class FirstTestPolymorphism { public static void main(String[] args ) { Person[] personen = new Person[300]; Mitarbeiter billy = new Mitarbeiter(“Gates“, “Bill“, “Hollywood“, 2000); personen[0] = billy; ((Mitarbeiter)personen[0]).gehaltAendern(-1000); ((Mitarbeiter)personen[0]).gehaltAusgeben(); } Cast-Operator class Person { String vorname; String name; String adresse; Person(String p_name, String p_vorname, String p_adresse) { name = p_name; vorname = p_vorname; adresse = p_adresse; } void datenAusgeben() { System.out.println(“\n“); System.out.println(“Name : “ + name); System.out.println(“Vorname :“ + vorname); System.out.println(“Adresse :“ + adresse); } Polymorphismus

public class SecondTestPolymorphism { public static void main(String[] args ) { Person[] personen = new Person[300]; Mitarbeiter billy = new Mitarbeiter(“Gates“, “Bill“, “Hollywood“, 2000); personen[0] = billy; ((Mitarbeiter)personen[0]).gehaltAendern(-1000); personen[0].gehaltAusgeben(); } class Person { String vorname; String name; String adresse; Person(String p_name, String p_vorname, String p_adresse) { name = p_name; vorname = p_vorname; adresse = p_adresse; } void gehaltAusgeben() { } void datenAusgeben() { System.out.println(“\n“); System.out.println(“Name : “ + name); System.out.println(“Vorname :“ + vorname); System.out.println(“Adresse :“ + adresse); } Polymorphismus

import Person; import Mitarbeiter; public class SecondTestPolymorphism { public static void main(String[] args ) { Person[] personen = new Person[300]; Mitarbeiter billy = new Mitarbeiter(“Gates“, “Bill“, “Hollywood“, 2000); personen[0] = billy; ((Mitarbeiter)personen[0]).gehaltAendern(-1000); personen[0].gehaltAusgeben(); } Polymorphismus class Mitarbeiter extends Person { float gehalt; Mitarbeiter(String p_name, String p_vorname, String p_adresse, float p_gehalt) { // Konstruktor der Basisklasse aufrufen super(p_name, p_vorname, p_adresse); gehalt = p_gehalt; } void gehaltAusgeben() { System.out.println(“\n“); System.out.println(“Gehalt : “ + gehalt); } void gehaltAendern(int aenderung) { gehalt += aenderung; }

import Person; import Mitarbeiter; public class SecondTestPolymorphism { public static void main(String[] args ) { Person[] personen = new Person[300]; Mitarbeiter billy = new Mitarbeiter(“Gates“, “Bill“, “Hollywood“, 2000); personen[0] = billy; ((Mitarbeiter)personen[0]).gehaltAendern(-1000); personen[0].gehaltAusgeben(); } Polymorphismus Polymorphismus erlaubt die gleichartige Behandlung verschiedener Objekte unter gleichzeitiger Berücksichtigung der speziellen Eigenheiten der einzelnen Objekte

import Person; import Mitarbeiter; public class SecondTestPolymorphism { public static void main(String[] args ) { Person[] personen = new Person[300]; Mitarbeiter billy = new Mitarbeiter(“Gates“, “Bill“, “Hollywood“, 2000); personen[0] = billy; ((Mitarbeiter)personen[0]).gehaltAendern(-1000); personen[0].gehaltAusgeben(); } Polymorphismus Beispiel: In dem Feld „personen“ können Objekte der Basisklasse „Person“ und der abgeleiteten Klassen „Mitarbeiter“, „Student“ usw. gespeichert werden. Für alle Elemente im Feld kann man die Methoden der Basis- Klasse aufrufen, wobei für Elemente abgeleiteter Klassen automatisch die über- schriebenen Versionen aufgerufen werden. Polymorphismus erlaubt die gleichartige Behandlung verschiedener Objekte unter gleichzeitiger Berücksichtigung der speziellen Eigenheiten der einzelnen Objekte

Abstrakte Klassen abstract class Figur { float x, y; // x und y Koordinate Figur( float px, float py) { x = px; y = py; } abstract void zeichnen(); }

Abstrakte Klassen abstract class Figur { float x, y; // x und y Koordinate Figur( float px, float py) { x = px; y = py; } abstract void zeichnen(); } class Kreis extends Figur { float radius; Kreis( float px, float py, float r) { super(px,py); radius = r; } void zeichnen() { System.out.println(“Zeichne Kreis“); }

Abstrakte Klassen abstract class Figur { float x, y; // x und y Koordinate Figur( float px, float py) { x = px; y = py; } abstract void zeichnen(); } class Rechteck extends Figur { float breite, laenge; Rechteck( float px, float py, float b, float l) { super(px,py); breite = b; laenge = l; } void zeichnen() { System.out.println(“Zeichne Rechteck“); }

Abstrakte Klassen abstract class Figur { float x, y; // x und y Koordinate Figur( float px, float py) { x = px; y = py; } abstract void zeichnen(); } class Rechteck extends Figur { float breite, laenge; Rechteck( float px, float py, float b, float l) { super(px,py); breite = b; laenge = l; } void zeichnen() { System.out.println(“Zeichne Rechteck“); } Figur KreisRechteckLinie

Abstrakte Klassen public class ZeichneFiguren { public static main(String[] args) { Figur[] zeichenobjekte = new Figur[3]; zeichenobjekte[0] = new Kreis(0.0,0.0, 3.0); zeichenobjekte[1] = new Rechteck(1.0,1.0, 5.0, 5.0); zeichenobjekte[2] = new Kreis(0.0, 0.0, 5.0); for (int i=0; i <zeichenobjekte.length; i++) { zeichenobjekte[i].zeichnen(); } Figur KreisRechteckLinie

Abstrakte Klassen public class ZeichneFiguren { public static main(String[] args) { Figur[] zeichenobjekte = new Figur[3]; zeichenobjekte[0] = new Kreis(0.0,0.0, 3.0); zeichenobjekte[1] = new Rechteck(1.0,1.0, 5.0, 5.0); zeichenobjekte[2] = new Kreis(0.0, 0.0, 5.0); for (int i=0; i <zeichenobjekte.length; i++) { zeichenobjekte[i].zeichnen(); } Figur KreisRechteckLinie abstract class Figur { float x, y; // x und y Koordinate Figur( float px, float py) { x = px; y = py; } abstract void zeichnen(); }

Abstrakte Klassen In vielen Situationen möchte der Programmierer das Polymorphismus-Konzept nutzen, in denen die entsprechende Funktionen für die Basis-Klasse keine sinnvolle Funktionalität besitzen. In solchen Situationen definiert man abstrakte Klassen und Funktionen. Figur KreisRechteckLinie abstract class Figur { float x, y; // x und y Koordinate Figur( float px, float py) { x = px; y = py; } abstract void zeichnen(); }

Wie entwirft man geeignete Klassenhierarchien? In Java gibt es viele bereits implementierte Klassen (Pakete), die dem Nutzer sehr viel Funktionalität zur Verfügung stellen.

Wie entwirft man geeignete Klassenhierarchien? In Java gibt es viele bereits implementierte Klassen (Pakete), die dem Nutzer sehr viel Funktionalität zur Verfügung stellen. Alle Klassen in Java werden von der Superklasse Objekt abgeleitet.Objekt

Wie entwirft man geeignete Klassenhierarchien? In Java gibt es viele bereits implementierte Klassen (Pakete), die dem Nutzer sehr viel Funktionalität zur Verfügung stellen. Alle Klassen in Java werden von der Superklasse Objekt abgeleitet. Beschreibungen der Funktionalität der wichtigsten Klassen findet man zum Beispiel im WWW unter der folgenden Adresse:

Wie entwirft man geeignete Klassenhierarchien? In Java gibt es viele bereits implementierte Klassen (Pakete), die dem Nutzer sehr viel Funktionalität zur Verfügung stellen. Alle Klassen in Java werden von der Superklasse Objekt abgeleitet. Beschreibungen der Funktionalität der wichtigsten Klassen findet man zum Beispiel im WWW unter der folgenden Adresse:

Wie entwirft man geeignete Klassenhierarchien? In Java gibt es viele bereits implementierte Klassen (Pakete), die dem Nutzer sehr viel Funktionalität zur Verfügung stellen. Alle Klassen in Java werden von der Superklasse Objekt abgeleitet. Beschreibungen der Funktionalität der wichtigsten Klassen findet man zum Beispiel im WWW unter der folgenden Adresse: Frage: Kann man die zu entwickelnde Klasse von bereits implementierten Klassen ableiten?

Gewagte Konstruktionen? Abgeleitete2 Basis Abgeleitete1a Abgeleitete1b

Gewagte Konstruktionen? Abgeleitete2 Basis Abgeleitete1a Abgeleitete1b Mehrfachvererbung

Gewagte Konstruktionen? Abgeleitete2 Basis Abgeleitete1a Abgeleitete1b Auf Mehrfachvererbung wird in Java verzichtet. Java bietet dafür das Konzept der sogenannten Interfaces (für Fortgeschrittene).

Datenkapselung (Information Hiding) Das Prinzip der Datenkapselung stellt einen Grundpfeiler der objektorientierten Programmierung dar.

Datenkapselung (Information Hiding) Das Prinzip der Datenkapselung stellt einen Grundpfeiler der objektorientierten Programmierung dar. Möglichst wenig von der Implementierung der Klasse wird nach außen sichtbar gemacht.

Datenkapselung (Information Hiding) Das Prinzip der Datenkapselung stellt einen Grundpfeiler der objektorientierten Programmierung dar. Möglichst wenig von der Implementierung der Klasse wird nach außen sichtbar gemacht. Man bietet dem Nutzer eine wohldefinierte Schnittstellen zur Klasse an. Diese Schnittstelle sollte sich auch bei Änderungen der Implementierung nicht ändern.

Datenkapselung (Information Hiding) class Chamaeleon { int wert; BerechneResultat() { wert =......; }

Datenkapselung (Information Hiding) class Chamaeleon { int wert; int resultat; BerechneResultat() { resultat =......; }

Datenkapselung (Information Hiding) class Chamaeleon { private int wert; private int resultat; private BerechneResultat() { resultat =......; } public ResultatAusgabe() { System.out.println(resultat); }

Zugriffsmodifizierer: public, protected, private

class Basisklasse { public int resultat; // in jeder Methode der Basisklasse { resultat =......; } Zugriffsmodifizierer: public, protected, private

class BasisKlasse { public int resultat; // in jeder Methode der Basisklasse { resultat =......; this.resultat =.....; } this ist eine spezielle Instanzvariable, die der Compiler automatisch anlegt und die immer auf die aktuelle Instanz der Klasse, in der Sie sich gerade befinden, verweist. Zugriffsmodifizierer: public, protected, private

class BasisKlasse { public int resultat; // in jeder Methode der Basisklasse { resultat =......; } Zugriffsmodifizierer: public, protected, private class AbgeleiteteKlasse extends BasisKlasse { // in jeder Methode der Abgeleitete.. { resultat =......; }

class BasisKlasse { public int resultat; // in jeder Methode der Basisklasse { resultat =......; } import BasisKlasse.*; class ExterneKlasse { // in jeder Methode von ExterneKl... { Basisklasse basis = new BasisKlasse(); basis.resultat =......; } Zugriffsmodifizierer: public, protected, private class AbgeleiteteKlasse extends BasisKlasse { // in jeder Methode der Abgeleitete.. { resultat =......; }

class BasisKlasse { public int resultat; // in jeder Methode der Basisklasse { resultat =......; } import BasisKlasse.*; class ExterneKlasse { // in jeder Methode von ExterneKl... { Basisklasse basis = new BasisKlasse(); basis.resultat =......; } Auf Klassenvariablen und Methoden, die als „public“ deklariert sind, kann aus jeder Methode der Klasse, aus jeder Methode der abgeleiteten Klassen und aus jeder Methode von „externen“ Klasse zugegriffen werden. Zugriffsmodifizierer: public, protected, private class AbgeleiteteKlasse extends BasisKlasse { // in jeder Methode der Abgeleitete.. { resultat =......; }

class BasisKlasse { protected int resultat; // in jeder Methode der Basisklasse { resultat =......; } import BasisKlasse.*; class ExterneKlasse { // in jeder Methode von ExterneKl... { Basisklasse basis = new BasisKlasse(); basis.resultat =......; } Auf Klassenvariablen und Methoden, die als „protected“ deklariert sind, kann aus jeder Methode der Klasse und aus jeder Methode der abgeleiteten Klassen zugegriffen werden. Zugriffsmodifizierer: public, protected, private class AbgeleiteteKlasse extends BasisKlasse { // in jeder Methode der Abgeleitete.. { resultat =......; }

Zugriffsmodifizierer: public, protected, private class BasisKlasse { private int resultat; // in jeder Methode der Basisklasse { resultat =......; } class AbgeleiteteKlasse extends BasisKlasse { // in jeder Methode der Abgeleitete.. { resultat =......; } import BasisKlasse.*; class ExterneKlasse { // in jeder Methode von ExterneKl... { Basisklasse basis = new BasisKlasse(); basis.resultat =......; } Auf Klassenvariablen und Methoden, die als „private“ deklariert sind, kann aus jeder Methode der Klasse zugegriffen werden.

Definition von n! Durch n! wird die Zahl der Permutationen einer Menge mit n Elementen bestimmt. Eine Permutation ist dabei eine beliebige lineare Anordnung der n Elemente. n! ist definiert durch: 1fallsn = 0 n*(n-1)!fallsn > 0

Methoden n! zu berechnen class Fac { long compute (long n) { Fac f = new Fac(); if (n == 0) return 1; else return n*f.compute(n- 1); } long computeWhile (long n) { long a = n, b = 1; while (a != 0) { b = a*b; a--; } return b; } long compute (long n1, long n2) { if (n1 == 0) return n2; else return compute(n1-1,n1*n2); } class Fac { long compute (long n) { if (n == 0) return 1; else return n*compute(n-1); } long computeFor (long n) { long b = 1; for (long a = n; a != 0; a--) b = a*b; return b;}