16
OO als Schwammkopf der Weg wär halt das Ziel...

OOalsSchwammkopf...DerZustandeinesObjekts Jedes Objekt hat einen bestimmten Zustand. Dieser ist bestimmt durch die aktuelle Belegung der Attribute. Das Sponge Bob-Objekt kann seinen

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: OOalsSchwammkopf...DerZustandeinesObjekts Jedes Objekt hat einen bestimmten Zustand. Dieser ist bestimmt durch die aktuelle Belegung der Attribute. Das Sponge Bob-Objekt kann seinen

OO als Schwammkopf

der Weg wär halt das Ziel...

Page 2: OOalsSchwammkopf...DerZustandeinesObjekts Jedes Objekt hat einen bestimmten Zustand. Dieser ist bestimmt durch die aktuelle Belegung der Attribute. Das Sponge Bob-Objekt kann seinen

Teil I

OO in der Phantasie

1

Page 3: OOalsSchwammkopf...DerZustandeinesObjekts Jedes Objekt hat einen bestimmten Zustand. Dieser ist bestimmt durch die aktuelle Belegung der Attribute. Das Sponge Bob-Objekt kann seinen

Was bedeutet Objekt orientierte Programmierung eigentlich?

Bis in die 1970er Jahre gab es nur die so genannte prozedurale Programmierung. Dabeiwurde die Lösung eines Problems in Prozeduren oder Funktionen zergliedert. Man sprichtvon der prozeduralen Dekomposition eines Problemraumes, das heißt: Das im Software-System umzusetzende Modell der Wirklichkeit wird während des Entwicklungsprozessesin Prozeduren zerlegt, welche nach und nach verfeinert und implementiert werden.

Problem dabei ist, dass die Dokumentation und der anfängliche Entwurf des Modells– also alle manifestierten Gedanken vor der Entwicklungsphase – vom im Entwick-lungsprozess befindlichen Software-System nach und nach auseinanderstreben. Währendim Entwurf und der Dokumentation zum Beispiel von Kunden mit entsprechenden Eigen-schaften (Geschlecht, Alter, Vermögen,etc.) und Nutzerkonten die Rede war, wird in derprozedural orientiert programmierten Software von einer Einheit “Kunde” mit seinenEigenschaften nichts oder kaum mehr etwas zu sehen sein. Alles was übrig bleibt sindmöglicherweise angelehnte Datenstrukturen und die Elemente von zentraler Rolle: dieProzeduren. Die Einheit Kunde sowie die Einheit Benutzerkonto gehen dabei verloren.

In der Objekt orientierten Programmierung versucht man diejenigen “Entitäten” derWirklichkeit auch noch während der Entwicklung des Software-Systems als Einheitbeizubehalten. Diese Entitäten werden als Objekte bezeichnet. Jedes Ding der Umweltkann als Objekt angesehen werden – so nehmen Menschen ihre Umwelt wahr. Es bestehtalso auch der Wunsch, das im Software-System abzubildende Modell Objekt orientiertumzusetzen. Ein Kunde soll eben auch im Software-System noch die Einheit “Kunde”mit all seinen Eigenschaften bleiben.

OO ist cool, weil sie dem menschlichen Verständnis der Umweltgerecht wird. Alles ist Objekt!

2

Page 4: OOalsSchwammkopf...DerZustandeinesObjekts Jedes Objekt hat einen bestimmten Zustand. Dieser ist bestimmt durch die aktuelle Belegung der Attribute. Das Sponge Bob-Objekt kann seinen

Objekte

Was macht ein Objekt aus?

Im Wesentlichen sind Objekte nichts anderes als eine Ansammlung bestimmter Eigen-schaften. Man kann zum Beispiel ein Objekt betrachten, das die Eigenschaften Spezies,Farbe, Lebensraum, Alter, Geschlecht und Name aufweist. Diese Eigenschaften nennt manin der Informatik Attribute. Objekte haben also verschiedene Attribute denen Wertezugeordnet werden:

Spezies = SchwammFarbe = gelbLebensraum = MeerAlter = 1Geschlecht = männlichName = Sponge Bob

Es können weitere, ähnliche Objekte mit gleichen Attributen existieren. Diese unterschei-den sich aber i.A. in der Belegung der Attribute – sie haben andere Attributwerte:

Spezies = SeesternFarbe = lachsrotLebensraum = MeerAlter = 1Geschlecht = männlichName = Patrick

Das Patrick-Objekt unterscheidet sich zum Beispiel in den Attributen Spezies und Farbedurch die Attributwerte Seestern und lachsrot vom Sponge-Objekt.

Unterscheide wohl Attribut und Attributwert!

3

Page 5: OOalsSchwammkopf...DerZustandeinesObjekts Jedes Objekt hat einen bestimmten Zustand. Dieser ist bestimmt durch die aktuelle Belegung der Attribute. Das Sponge Bob-Objekt kann seinen

Der Zustand eines Objekts

Jedes Objekt hat einen bestimmten Zustand. Dieser ist bestimmt durch die aktuelleBelegung der Attribute. Das Sponge Bob-Objekt kann seinen Zustand verändern, indem es z.B. altert. So wird der Wert des Attributs Alter verändert.

Der Zustand eines Objekts ist durch die Belegung seiner Attributebestimmt!

Das Verhalten eines Objekts

In der wirklichen Welt – die der Programmierer in seinem Software-System “nachmo-dellieren” will – ändern sich die Attribute von Objekten oft von selbst. So etwa das Altervon Sponge Bob. Im programmierten Objekt verändert sich der Zustand eines Objektsi.A. nicht von selbst sondern erst dann, wenn jemand das Objekt manipuliert. Manipu-lation eines Objekts bedeutet: Änderung der Belegung ein oder mehrerer Attribute desObjekts.

Das Tolle an der OO ist, dass nur solche Daten/Attribute eines Objekts verändert werdenkönnen, die das Objekt nach außen hin sichtbar und damit zugreifbar macht (siehespäter). Die Attribute eines Objekts sind i.A. nicht direkt von außen – also von Dritten –veränderbar. Hierzu bietet jedes Objekt Funktionen oder Prozeduren an1, mit deren Hilfeunter anderem Attributwerte neu gesetzt werden können. Funktionen oder Prozedurenheißen in der OO Methoden.

Unser Sponge Bob-Objekt könnte also eine Methode namens farbeSetzen anbieten, die esgestattet seine Attributbelegung der Farbe zu ändern. Zum Beispiel: farbeSetzen(rot)

wird zu

Es gibt aber auch Methoden, welche nicht die aktuelle Attributbelegung verändern. DieseMethoden können dem Aufrufer auf irgendeine gewünschte Weise dienen.

1Man unterscheidet oft folgendermaßen: Funktionen haben eine Rückgabe, Prozeduren nicht.

4

Page 6: OOalsSchwammkopf...DerZustandeinesObjekts Jedes Objekt hat einen bestimmten Zustand. Dieser ist bestimmt durch die aktuelle Belegung der Attribute. Das Sponge Bob-Objekt kann seinen

Ein Beispiel wäre die Methode springEinPaarMal() welche Sponge Bob umher hüpfenlässt. Nach dem Aufruf ist der Zustand des Objekts identisch zu vorher:

Methodenaufruf -> fertig->

Die Methoden eines Objekts entsprechen also dem Verhalten eines Objekts.

Objekte können Methoden anbieten, welche den Zustand des Ob-jekts beeinflussen können. Objekte definieren durch Methoden einbestimmtest Verhalten!

5

Page 7: OOalsSchwammkopf...DerZustandeinesObjekts Jedes Objekt hat einen bestimmten Zustand. Dieser ist bestimmt durch die aktuelle Belegung der Attribute. Das Sponge Bob-Objekt kann seinen

Klassen

Abstraktion herrscht!

Das Sponge Bob-Objekt und das Patrick-Objekt haben gemeinsam, dass sie identischeAttribute (nicht Attributwerte!) haben. Eine Klasse im Sinne der OO ist also eine all-gemeine Beschreibung ähnlicher Objekte. Alle Objekte sind Objekte einer Klasse, wennsie identische Attribute aufweisen. Gewisse Objekte, auf denen man sitzen kann, nen-nen wir zum Beispiel Stuhl, weil all diese Objekte die gemeinsame Eigenschaft haben,dass sie eine Sitzfläche und eine Lehne besitzen. Durch Abstraktion erkennen wir, auf-grund gemeinsamer Eigenschaften der Objekte, dass es sich um Objekte der Klasse Stuhlhandelt.

Patrick und Sponge Bob weisen die gemeinsamen Attribute Spezies, Farbe, Lebensraum,Alter, Geschlecht und Name auf. Auch wenn sie sich teilweise in der Belegung der At-tribute unterscheiden sind sie Objekte der gleichen Klasse – nennen wir sie zum BeispielMeerestier. Patrick und Sponge Bob sind also Objekte der Klasse Meerestier.

Klassen veranschaulicht man oft als dreizeilige, einspaltige Tabellen – so genannte Klassen-karten:

MeerestierSpeziesFarbe

LebensraumAlter

GeschlechtName

springMal()farbeSetzen()

...

Patrick und Sponge Bob sind also Meerestiere, weil sie identische Attribute besitzen. EineKlasse ist demnach eine allgemeine Beschreibung, Objekte sind konkrete Erfüllungendieser Beschreibung. Objekte veranschaulicht man, ähnlich den Klassen, in so genanntenObjektkarten:

6

Page 8: OOalsSchwammkopf...DerZustandeinesObjekts Jedes Objekt hat einen bestimmten Zustand. Dieser ist bestimmt durch die aktuelle Belegung der Attribute. Das Sponge Bob-Objekt kann seinen

Alles klar. Aber was steht da in er dritten Zeile der Klassenkarte? Klar, die Methoden!Durch eine Klassenkarte gewinnt man also einen wunderbaren Überblick aller Attributeund Methoden einer Klasse.

Die Methoden werden in Objektkarten meist weggelassen, da sich die Methoden ja beiallen Objekten einer Klasse decken (im Gegensatz zu den Attributwerten!).

Klassen sind allgemeine Beschreibungen ähnlicher Objekte. Objekteder gleichen Klasse haben identische Attribute und identische Meth-oden. Sie unterscheiden sich nur in der Belegung der Attribute.

Sicherheit – Privat ist privat!

Nun kann also ein Objekt einer bestimmten Klasse eine Menge Attribute und Methodenbesitzen. Es zählt aber zum guten Ton in der Programmierung, wenn man einem Objektnicht zu genau auf die Attribute schaut – das ist halt voll unanständig! Attribute sindPrivatsache eines jeden Objekts. Es gibt schließlich sicherlich auch Attribute, die einObjekt über sich nicht unbedingt preisgeben mag2.

Deshalb gibt es in der OO die Möglichkeit, genau festzulegen, welche Attribute öffentlichund damit nach außen sichtbar sind und welche privat sind und niemand anderes als dasObjekt selbst etwas angehen.

Ein Objekt deklariert diejenigen Attribute und Methoden privat,welche niemanden etwas angehen. Es deklariert diejenigen Attributeund Methoden öffentlich, welche von außen verwendet werden dür-fen.

Bemerkung: Es gehört zum guten Stil der Objekt orientierten Programmierung, dass kein At-tribut öffentlich deklariert ist. Anstattdessen bietet ein Objekt besser spezielle Methoden an, dieein gewünschtes Attribut ausgeben bzw. setzen – die so genannten getter- & setter-Methoden.Mehr dazu später.

2Der genaue Hintergrund sind Sicherheitsaspekte des Software-Systems.

7

Page 9: OOalsSchwammkopf...DerZustandeinesObjekts Jedes Objekt hat einen bestimmten Zustand. Dieser ist bestimmt durch die aktuelle Belegung der Attribute. Das Sponge Bob-Objekt kann seinen

Zugriff auf Objektdaten – die Punktnotation

Um auf verfügbare Methoden von außen zugreifen zu können (Attribute sollten ja i.A.privat deklariert sein), hat sich die Punktnotation durchgesetzt. Exisitiert ein ObjektmeinTier der Klasse Meerestier, so kann auf seine Methode farbeSetzen durch folgendeNotation zugegriffen werden:

meinTier.farbeSetzen("gelb")

Über die Punktnotation können Dritte auf alle öffentlich deklarierteAttribute und Methoden zugreifen.

8

Page 10: OOalsSchwammkopf...DerZustandeinesObjekts Jedes Objekt hat einen bestimmten Zustand. Dieser ist bestimmt durch die aktuelle Belegung der Attribute. Das Sponge Bob-Objekt kann seinen

Teil II

OO in Wort und Tat

9

Page 11: OOalsSchwammkopf...DerZustandeinesObjekts Jedes Objekt hat einen bestimmten Zustand. Dieser ist bestimmt durch die aktuelle Belegung der Attribute. Das Sponge Bob-Objekt kann seinen

Nun ist die Theorie klar. Wie ist das Ganze aber jetzt Software-technisch umgesetzt?Eine der ersten, voll Objekt orientierten modernen Programmiersprachen war Java derFirma SUN. Diese Sprache ist in der Regel die Sprache der Wahl, wenn man Objektorientierte Programmierung erlernt. Beherrscht man Java, so ist das Erlernen von denverbreiteten Objekt orientierten Sprachen wie C++ und C# ganz leicht. Hat man dieTheorie der OO verstanden und bringt in einer bestimmten Objekt orientierten Spracheein wenig Erfahrung mit, so ist das Erlernen jeder weiteren modernen Sprache nichtmehr schwer.

BlueJ und Java Basics

Eine schöne und einfache Java-Programmierumgebung für Einsteiger ist BlueJ, kosten-los herunterzuladen auf der Projekt-Website http://bluej.org. Nötig ist eine Instal-lation eines funktionierenden Java Development Kits (JDK) auf dem lokalen Arbeit-srechner (ist oft schon vorinstalliert). Die aktuelle Version des JDK findet man unterhttp://java.sun.com/javase/downloads/index.jsp.Ein sehr ausführliches Tutorial zu BlueJ findet man unter:

http://bluej.org/tutorial/blueJ-tutorial-deutsch.pdf

BlueJ arbeitet mit Projekten. In einem Projekt können mehrere Klassen (und anderes)erstellt werden. Übersetzt man eine Klasse fehlerfrei, so kann man über ein Mausmenüein neues Objekt der Klasse erstellen.

10

Page 12: OOalsSchwammkopf...DerZustandeinesObjekts Jedes Objekt hat einen bestimmten Zustand. Dieser ist bestimmt durch die aktuelle Belegung der Attribute. Das Sponge Bob-Objekt kann seinen

Außerdem kann man den Java-Editor öffnen (auch durch Doppelklick auf die Klassenkar-te). Hat man eine neue Klasse erstellt und öffnet den Editor sieht man, dass schon eineMenge automatisch generierter Java-Code darin steht. Den kann man ruhig erst malkomplett löschen.

Lasst uns die Klasse Meerestier nun endlich in Java implementiern!

Klassengerüst und Attribute

public class Meerestier{// Attributeprivate String spezies;private String farbe;private String lebensraum;private String geschlecht;private String name;private int alter;// Methoden

}

Man sieht hier schon einiges der im ersten Teil besprochenen Theorie hinter der OO. Dieöffentliche Klasse (public) besitzt 6 als privat deklarierte Attribute (private). Die ersten5 Attribute sind vom Datentyp Zeichenkette (String). Das Alter wird als Ganzzahl (int)angegeben.3

Die Schlüsselwörter public und private nennt man Zugriffsmodifika-toren, da sie bestimmen, ob von Dritten zugegriffen werden darf odernicht.

Methoden

Nach den Attributen werden in der Regel Methoden implementiert. Methoden sind inder Regel als öffentlich deklariert.

// Methodenpublic void setSpezies(String speziesName){ // <-- Signatur der Methode

spezies = speziesName; // <-- Rumpf der Methode}public String getSpezies(){

return spezies; // <-- Rückgabe der Methode}

...

3Beginnt eine Zeile im Code mit “//”, so wird die Zeile als Kommentar interpretiert.

11

Page 13: OOalsSchwammkopf...DerZustandeinesObjekts Jedes Objekt hat einen bestimmten Zustand. Dieser ist bestimmt durch die aktuelle Belegung der Attribute. Das Sponge Bob-Objekt kann seinen

Methoden bestehen aus einer Signatur und einem Rumpf. Die Signatur ist folgender-maßen aufgebaut:

<Zugriffsmodifikator> <Rückgabetyp> <Methodenname>(<Parameterliste>)

Der Rückgabetyp bestimmt ob die Methode Daten ausspuckt oder ob sie schweigendihren Job erledigt (also ohne etwas zurückzugeben)4. Wenn die Methode keine Datenan den Aufrufer zurückliefert steht das Schlüsselwort void. Falls sie Daten zurückliefert,dann steht der Datentyp der Rückgabe da – zum Beispiel String. Falls eine Methodeeine Rückgabe liefert, muss im Methodenrumpf die return-Anweisung gefolgt von einerVariable des Datentyps der in der Signatur definierten Rückgabe gesetzt sein. In void-Methoden hat die return-Anweisung nichts verloren.

setSpezies(String speziesName) ist eine setter-Methode, da sie die Belegung des At-tributs spezies auf den in der als Parameter übergebenen Variable speziesName setzt.Verlangt eine Methode Parameter, so muss der Aufrufer beim Aufrufen der Methodeentstprechende Daten übergeben – also zum Beispiel die Zeichenkette, auf die das At-tribut spezies gesetzt werden soll. Setter-Methoden haben prinzipiell keine Rückgabe,sind also als void deklariert.

getSpezies() ist eine getter-Methode. Sie tut nichts weiter als die Rückgabe des als privatdeklarierten Attributs zurückzugeben. Getter-Methoden haben prinzipiell den Rückga-betyp des Attributs, welches sie ausspucken sollen.

Methoden werden üblicherweise als public deklariert. Sie bestehen ausder Methodensignatur und dem Methodenrumpf. Sie können entwed-er eine Rückgabe liefern oder nicht. Sie können etweder Parameterverlangen oder nicht.

4Funktionen oder Prozeduren.

12

Page 14: OOalsSchwammkopf...DerZustandeinesObjekts Jedes Objekt hat einen bestimmten Zustand. Dieser ist bestimmt durch die aktuelle Belegung der Attribute. Das Sponge Bob-Objekt kann seinen

Das Aufrufen von Methoden in BlueJ

Diejenigen Attribute, die nach außen hin sichtbar und/oder veränderbar sein sollen,bekommen entsprechende getter- und setter-Methoden. Übersetzt man den erstelltenJava-Code fehlerfrei, so kann man im Hauptfenster von BlueJ über einen Rechtsklickauf die Klassenkarte den new-Operator verwenden, um ein neues Objekt der gewähltenKlasse zu erstellen.

Über das Mausmenü der Objektkarte kann man schließlich alle Methoden aufrufen, dieman bereits implementiert und fehlerfrei übersetzt hat.

Da die Methode setSpezies(String speziesName) einen Parameter verlangt, erscheintein kleines popup-Fenster, welches den Benutzer auffordert, den entsprechenden Para-meter einzutragen. In unserem Fall eine Zeichenkette (String)5.

Das Arbeiten mit Objekten aus anderen Objekten heraus

Wir legen uns in der BlueJ-Umgebung eine zweite Klasse an, die wir Main nennen. Indieser implementieren wir eine Methode erzeugeSpongeBob(), in welcher wir uns mit dem

5Beachte: Zeichenketten stehen in Java immer in Anführungszeichen.

13

Page 15: OOalsSchwammkopf...DerZustandeinesObjekts Jedes Objekt hat einen bestimmten Zustand. Dieser ist bestimmt durch die aktuelle Belegung der Attribute. Das Sponge Bob-Objekt kann seinen

new-Operator ein neues Meerestier-Objekt erzeugen und anschließend sämtliche setter-Methoden verwenden um unseren Sponge Bob so zu definieren, wie wir ihn uns in derWirklichkeit vorstellen.

Nach der fehlerfreien Übersetzung erstellen wir uns über einen Rechtsklick auf derKlassenkarte der Main-Klasse(!) ein Main-Objekt. Es entsteht eine entsprechende Objekt-Karte in BlueJ.

An diesem Objekt rufen wir dann über das Mausmenü die Methode erzeugeSpongeBob()auf. Über einen Doppelklick auf das Main-Objekt können wir den Inhalt inspizieren. Eserscheint ein Fenster, welches eine Übersicht über die Attributbelegungen des Objektsgibt. Macht man einen Doppelklick auf den gebogenen Pfeil, welcher als Attributwertfür das Attribut spongy in Main dargestellt wird, so erhält man einen Überblick übersämtliche aktuelle Attributbelegungen aller gesetzter Attribute.

14

Page 16: OOalsSchwammkopf...DerZustandeinesObjekts Jedes Objekt hat einen bestimmten Zustand. Dieser ist bestimmt durch die aktuelle Belegung der Attribute. Das Sponge Bob-Objekt kann seinen

Bin ich jetzt Programmierer oder was?

Wenn Du sämtliche Abschnitte durchgearbeitet hast, dann hast Du den Grundstein dafürgelegt, Objekt orientierte Programmierung zu verstehen und damit leicht zu erlernen.Ohne dieses theoretische Wissen, wirst Du Übersetzungs- und Laufzeitfehler nicht odernur schwer verstehen und beheben können.

Wie gehts weiter?

Es gibt noch viele, viele Feinheiten und Konzepte in der OO. Taste Dich mit Hilfeeines guten Buchs langsam voran und übe. Ein tolles, freies Online-Buch zur Java-Programmierung lautet “Java ist auch eine Insel” und findet sich unterhttp://openbook.galileocomputing.de/javainsel8/.

Auf der Java-Insel angekommen, chillen wir uns nieder und lauschen dem Rauschen derOO-Musik in den Muscheln der Zeit... oder so ähnlich.

15