Grundlagen der objektorientierten Programmierung mit Java PDF

Document Details

CheapestSteelDrums

Uploaded by CheapestSteelDrums

IU Fernstudium

Tags

object-oriented programming java programming software development computer science

Summary

This document provides an introduction to object-oriented system development. It discusses the concept of object orientation, objects, and their components (attributes and methods). The document also outlines the phases in the object-oriented software development process. It uses a practical example of an online shop to illustrate these concepts.

Full Transcript

ÜBERGEORDNETE LERNZIELE Der Kurs Grundlagen der objektorientierten Programmierung mit Java vermittelt Ihnen die grundlegenden Kompetenzen der objektorientierten Programmierung. Die dazugehörigen theoretischen Konzepte werden unmittelbar anhand der Programmier- sprache Java...

ÜBERGEORDNETE LERNZIELE Der Kurs Grundlagen der objektorientierten Programmierung mit Java vermittelt Ihnen die grundlegenden Kompetenzen der objektorientierten Programmierung. Die dazugehörigen theoretischen Konzepte werden unmittelbar anhand der Programmier- sprache Java gezeigt und geübt. Ziel dieses Kurses ist es u. a., dass Sie die Grundkonzepte der objektorientierten Modellierung und Programmierung kennen und voneinander abgrenzen können. Zudem werden die Grundkonzepte und -elemente der Programmier- sprache Java erläutert und Sie können Erfahrungen in deren Verwendung sammeln. So sind Sie nach Abschluss dieses Kurses befähigt, selbstständig geeignete Lösungen für kon- kret beschriebene Probleme zu erstellen. 10 LEKTION 1 EINFÜHRUNG IN DIE OBJEKTORIENTIERTE SYSTEMENTWICKLUNG LERNZIELE Nach der Bearbeitung dieser Lektion werden Sie wissen, … – was unter dem Begriff Objektorientierung verstanden wird. – was Objekte sind und woraus diese bestehen. – aus welchen Phasen der objektorientierte Software-Entwicklungsprozess besteht. – was die Grundprinzipien objektorientierter Software-Entwicklung sind. 1. EINFÜHRUNG IN DIE OBJEKTORIENTIERTE SYSTEMENTWICKLUNG Aus der Praxis Als Entwickler soll Herr Koch einen Online-Shop für den Verkauf von Medien aller Art (Bücher, Musik, Filme, Spiele) programmieren. Die Auftraggeberin Frau Lange erläutert ihm, welche Artikel verkauft werden sollen und welche speziellen Angebote sie sich ausge- dacht hat. Nun soll es mit der Entwicklung losgehen und Herr Koch überlegt, wie er an diese Aufgabe am besten herangehen soll. 1.1 Objektorientierung als Sichtweise auf komplexe Systeme Objektorientierung Unter der Bezeichnung Objektorientierung (kurz: OO) wurde in der Softwaretechnik ein Das ist ein Ansatz zur Ansatz entwickelt, der insbesondere die Erstellung, Weiterentwicklung und Wartung von Unterstützung der Erstel- lung, Weiterentwicklung komplexen betrieblichen IT-Systemen unterstützt. Dabei dient die Objektorientierung als und Wartung komplexer eine Sichtweise auf komplexe Systeme, bei der diese als ein Zusammenspiel von abstrak- betrieblicher IT-Systeme. ten oder realen Einheiten – eben den Objekten – aufgefasst werden. Das IT-System wird dabei durch das Zusammen- spiel komplexer Objekte Die „Objektorientierung“ ist somit keine Programmiersprache, keine Modellierungsspra- beschrieben. che, kein Betriebssystem, kein Programm, keine Anwendung, kein Vorgehensmodell, keine Entwicklungsmethode, keine Entwicklungsumgebung und keine Datenbank. Jedoch gibt es Sprachen, Methoden und Datenbanken, welche die objektorientierte Sichtweise gezielt unterstützen. Die großflächige Verbreitung der Objektorientierung in der industriellen Praxis begann in den den frühen 1990er Jahren. Ausschlaggebend dafür waren u. a. die sehr hohen Kosten für die Wartung und Weiterentwicklung von großen IT-Systemen. Typischerweise werden betriebliche Anwendungen kontinuierlich weiterentwickelt und den geschäftlichen und technischen Trends angepasst. So steigt gemeinsam mit dem Funktionsumfang von IT- Systemen der Umfang der programmierten Programmcodezeilen (Lines of Code, LOC). Betriebliche Informationssysteme bestehen oft aus mehreren Millionen Zeilen Programm- code, die von bis zu mehreren hundert Entwicklern gemeinsam erstellt wurden. Die Objektorientierung reiht sich in die geschichtliche Entwicklung der Programmierpara- digmen ein und ist heute die Grundlage fast aller Entwicklungsprojekte für betriebliche Informationssysteme. Tabelle 1 zeigt eine Übersicht über die geschichtliche Entwicklung von Programmierkonzepten, ihren typischen Elementen und deren Einsatzgebiete. 12 Tabelle 1: Übersicht über die geschichtliche Entwicklung von Programmierkonzepten Programmierkonzept Typische Elemente Einsatzgebiete Maschinencode 1001001; 1 und 0 als einzige Aus- Nur noch historisch; heute keine drucksmöglichkeit Einsatzgebiete mehr Assemblercode movb $0x61; Prozessorbefehle Steuerungen für elektrotechni- und direktes Ansprechen von sche Geräte (Lüftungen, Moto- technischen Speicheradressen ren, Klimaanlagen), Reaktive Systeme (Sensorsysteme), hard- warenahe Programmierung Imperative Programmierung WHILE, FOR, GOTO; Weiterent- Kleine Programme zur Lösung wicklung von Assemblercode, einfacher Aufgaben, in der Regel erlauben Schleifen und gezielte in speziellen Programmierspra- Sprünge chen Strukturierte Programmierung Prozeduren; Strukturierung Einfache Webanwendungen, eines Programms in Prozeduren Technische Steuerkomponenten (Funktionen) und Unterprozedu- ren (Unterfunktionen) Objektorientierte Programmie- Klassen, Objekte, Beziehungen; Große und komplexe industri- rung ein Programm besteht aus elle Softwaresysteme kooperierenden Objekten Komponentenbasierte Entwick- Komponenten, Schnittstellen; Wiederverwendung von bereits lung Teile eines Systems werden als programmierten Funktionen; eine Komponente zusammenge- Einzelne Komponenten sind in fasst, die ganz bestimmte Aufga- der Regel objektorientiert pro- ben erfüllt grammiert. Modellgetriebene Entwicklung Modelle, Code-Generatoren; Pro- Wiederverwendung von einfa- grammcode wird mit Hilfe von cher Anpassbarkeit von Quer- Code-Generatoren aus Soft- schnittsfunktionen (z. B. Login- ware-Modellen automatisch Mechanismen), der generierte erzeugt Programmcode kann den Kon- zepten der Objektorientierung entsprechen Quelle: erstellt im Auftrag der IU, 2013. 1.2 Das Objekt als Grundkonzept der Objektorientierung Der Begriff Objekt ist direkt im Namen „Objektorientierung“ enthalten und bezeichnet Objekt einen Bestandteil eines Systems. Für die objektorientierte Programmierung bedeutet dies, Das ist ein Bestandteil eines Systems. Objektori- dass ein Objekt Bestandteil eines Programms ist und auch, dass ein objektorientiert entwi- entierte Systeme liegen ckeltes Programm nahezu ausschließlich aus Objekten besteht. Ein Objekt selber kann zum Zeitpunkt ihrer Aus- wiederum Attribute und Methoden enthalten. Mithilfe von Attributen (auch: Eigenschaf- führung in Form von Objekten im Hauptspei- ten) können in einem Objekt Informationen (z. B. aktuelle Werte von Variablen) gespei- cher eines Rechners. chert werden. Die Attribute eines Objekte werden vor einem direkten Zugriff von anderen 13 Attribute Objekten versteckt und damit geschützt. Das bedeutet, dass die aktuell in einem Objekt Das sind Elemente von gespeicherten Werte nicht von anderen Objekten geändert werden können (Prinzip der Objekten, die zum Spei- chern von konkreten Wer- Datenkapselung). ten verwendet werden. Das Lesen und Ändern von Attributen eines Objekts geschieht durch den Einsatz von Methoden eines Objekts. Mit den Methoden (auch: Funktionen, Operationen) bietet ein Objekt anderen Objekten des Systems die Möglichkeit, auf die eigenen Attribute zuzugrei- fen, sie auszulesen, zu verändern, zu aktualisieren oder Berechnungen durchzuführen. Ein Methode Objekt greift auf ein anderes Objekt zu, indem es eine Methode auf dem Objekt aufruft. Das sind Elemente von Objekten, mit denen Werte von Attributen Beispielszenario erstellt, gelesen, verän- dert und Berechnungen Eine Uhr, wie in der folgenden Abbildung skizziert, soll als digitales Objekt im Sinne der durchgeführt werden können. Objektorientierung nachgebildet werden. Dazu wird zuerst ein Name für die Uhr festge- legt, in diesem Fall lautet der Name des Objekts „Digitale Uhr“. Als nächstes werden für die Uhr typische Attribute identifiziert, also Informationen, die benötigt werden, um das Objekt „Digitale Uhr“ zu beschreiben: die „aktuelle Uhrzeit“ sowie die „aktuelle Zeitzone“. Nun fehlen noch die Methoden des Objekts, also Funktionen, die das Objekt „Digitale Uhr“ bereitstellen muss, damit es gegenüber anderen Objekten seine Funktion erfüllen kann. Hier sind es „Uhrzeit einstellen“, „Uhrzeit ausgeben“ und „Zeitzone einstellen“. Abbildung 1: Skizze einer Uhr Quelle: erstellt im Auftrag der IU, 2013. 1.3 Phasen im objektorientierten Entwicklungsprozess Bevor mit der eigentlichen Programmierung von komplexen IT-Systemen begonnen wer- den kann, müssen alle Entwickler genau verstehen: was das System konkret können soll, welche Informationen in dem System gespeichert werden müssen und wer und für welchen Zweck jemand das System später benutzt. 14 Darüber hinaus müssen die grobe Struktur des Systems in Form einer Systemarchitektur durch den Systemarchitekten vorgegeben werden. Bevor Herr Koch also nun mit der Programmierung des Online-Shops tatsächlich begin- nen kann, muss er das Problem beziehungsweise die Aufgabenstellung analysieren und sich überlegen, aus welchen Objekten das System bestehen soll. Erst dann kann er mit dem zielgerichteten Programmieren beginnen. Das Durchlaufen dieser verschiedenen Phasen nennt man Software-Entwicklungsprozess (auch: SW-Prozess). Ziel eines SW- Software-Entwicklungs- Entwicklungsprozesses ist ein lauffähiges System, das die Anforderungen der Auftraggeber prozess Dieser Prozess besteht hinsichtlich Funktionalität, Qualität und Entwicklungsaufwand zufriedenstellend erfüllt. aus Aktivitäten mit dem Ziel Software zu erstellen, In einem objektorientierten Entwicklungsprozess lassen sich drei verschiedene Phasen weiterzuentwickeln oder zu warten. Dieser Prozess unterscheiden: ist in mehrere Phasen unterteilt. Objektorientierte Analyse (kurz: OOA) Objektorientiertes Design (kurz: OOD) Objektorientierte Programmierung (kurz: OOP) Während der objektorientierten Analyse wird bestimmt, was ein System tun soll. Ziel der Analyse ist ein umfassendes Verständnis der fachlichen Zusammenhänge des zu bauen- den Systems. Hierzu werden Objekte der realen Welt in einem fachlichen Modell nachge- bildet und nur die für das System relevanten Eigenschaften (Attribute) berücksichtigt. Die- ses Analysemodell ist zum einen ein Mittel zur Kommunikation zwischen den Entwicklern und dem Auftraggeber beziehungsweise den Anwendern des Systems. Zum anderen bildet es den Ausgangspunkt für die nächste Phase: das objektorientierte Design. Das objektorientierte Design bildet die Brücke zwischen der Analyse und der Implemen- Objektorientiertes tierung. Hierzu wird auf Basis des Analysemodells das Design des Systems festgelegt: Das Design Das ist eine Phase im fachliche Analysemodell wird dahin gehend um technische Informationen erweitert, objektorientierten SW- sodass ein Programmierer in der Lage ist, auf Basis des Designs den Programmcode zu Prozess. Ziel ist es, auf- implementieren. Dabei wird festgelegt, welche Arten von Objekten es geben soll, welche bauend auf dem Analyse- modell das technische Attribute und Methoden sie haben und auf welche Art welche Objekte miteinander koope- Design des Systems zu rieren. Für komplexe Systeme kann diese Aufgabe nur von erfahrenen Systemarchitekten erstellen. Ergebnis ist das Design des Systems. durchgeführt werden. Die Qualität des Designs hat dabei in der Regel maßgeblichen Ein- fluss auf die Qualität des programmierten Systems sowie auf alle zukünftigen Aktivitäten zur Erweiterung und Anpassung des Systems. Bei den Aktivitäten der objektorientierten Programmierung wird ein Systemdesign in Objektorientierte funktionierenden Programmcode übersetzt. Dazu programmiert der Entwickler unter Ein- Programmierung Dies ist eine Phase im haltung der im Design getroffenen Vorgaben den Programmcode. Analyse und Design sind objektorientierten SW- notwendige Vorarbeiten, das eigentliche IT-System jedoch ergibt sich ausschließlich durch Prozess. Ziel ist die Erstel- die implementierten Programmcodes. Wenn sich also die Programmierer nicht an die lung von lauffähigem Pro- grammcode auf Basis des Vorgaben halten, kann es passieren, dass Designentscheidungen nicht so umgesetzt wer- Designs. Ergebnis ist das den und das System sich letztendlich anders verhält als es vorgesehen ist. Andererseits fertige Programm. pflanzen sich Fehler aus der Analyse und dem Design im Programmcode fort, falls sie der Entwickler nicht rechtzeitig erkennt. Beispiel 15 Für die Umsetzung des Online-Shops von Herrn Koch bedeutet es, dass er sich zunächst einmal intensiv mit den Wünschen und Vorstellungen von Frau Lange auseinanderzuset- zen hat. Dazu erarbeitet er sich ein Verständnis, welche geschäftlichen Aktivitäten für einen Online-Shop relevant sind und wie genau die einzelnen Aktivitäten (z. B. Warenbe- stellung, Zahlungsabwicklung, Mahnwesen, etc.) ablaufen. Anschließend überlegt er sich das technische Design des Online-Shops. Damit ist aller- dings nicht das Aussehen der Nutzeroberfläche gemeint, sondern aus welchen (techni- schen) Objekten der Online-Shop bestehen soll und wie diese kooperieren sollen. Darüber hinaus muss Herr Koch sich noch entscheiden, welche Technologien eingesetzt werden sollen: Er kann entweder ein bestehendes Shopsystem nehmen und anpassen oder ein neues programmieren. Außerdem ist noch relevant, welche Datenbank infrage kommt und in welcher Programmiersprache er den Online-Shop programmieren möchte. 1.4 Grundprinzip der objektorientierten Systementwicklung Wie schon genannt ist die Objektorientierung eine Sichtweise auf komplexe Systeme als Zusammenspiel kooperierender Objekte. Grundsätzlich lässt sich jedes System auch ohne Objektorientierung planen und bauen. Allerdings haben die Erfahrungen der letzten 20 Jahre Software Engineering gezeigt, dass es bei konsequenter Anwendung der Objektori- entierung weniger Probleme mit der Skalierung, der Stabilität und der Erweiterbarkeit von IT-Systemen gibt. Daher kann Objektorientierung bei der Softwareentwicklung als Prinzip und Mittel verstanden werden, um die Komplexität von Softwaresystemen in den Griff zu bekommen. Insbesondere die Qualitätsziele einfache Erweiterbarkeit, bessere Testbarkeit und bessere Wartbarkeit lassen sich durch objektorientierte Konzepte relativ einfach realisieren. Beispiel Ohne auf die theoretischen Hintergründe einzugehen, wird im folgenden Beispielszenario einer einfachen Kaffeemaschine gezeigt, wie sich die Objektorientierung auf die Betrach- tung technischer Systeme auswirkt. 16 Abbildung 2: Beispielszenario einer einfachen Kaffeemaschine Quelle: erstellt im Auftrag der IU, 2013 in Anlehnung an Reviewland (2017). In Abbildung 2 ist der schematische Querschnitt einer Kaffeemaschine dargestellt. Über- tragen in die Welt der Objektorientierung stellt sich die Kaffeemaschine als ein „Zusam- menspiel kooperierender Objekte“ dar, so wie in Abbildung 3 gezeigt. Das Objekt Wasser- behälter ist an das Objekt Wasserleitung angeschlossen. Die Wasserleitung enthält ein Objekt Rückschlagventil und ist am Objekt Filter angeschlossen. Das Objekt Heizelement beheizt die Wasserleitung und das Objekt Warmhalteplatte. Die Warmhalteplatte hält das Objekt Kaffeekanne warm. Die Kaffeekanne wird durch das Objekt Filter befüllt. Abbildung 3: Zusammenspiel von Objekten einer Kaffeemaschine Quelle: erstellt im Auftrag der IU, 2013. Nach einiger Zeit stellt Frau Lange fest, dass sie die Kaffeemaschine gerne durch eine Uhr steuern möchte und statt dem Wasserbehälter lieber einen direkten Anschluss an das Trinkwassernetz hätte. Abbildung 4 zeigt nun eine im Sinne der Objektorientierung erwei- terte Kaffeemaschine: Das Objekt Wasserbehälter wurde durch das Trinkwassernetz ersetzt. Damit kooperiert die Wasserleitung nun nicht mehr mit dem Behälter, sondern 17 dem Trinkwassernetz (dargestellt durch die Verbindungslinie zwischen Trinkwassernetz und Wasserleitung). Weiterhin wurde ein Objekt Uhr an das Heizelement angeschlossen. Über diese Verbindung kann nun die Funktion „Heizen“ des Heizelements durch die Uhr gesteuert werden. Alle anderen bestehenden internen Zusammenhänge der Kaffeema- schine bleiben jedoch unverändert bestehen. Abbildung 4: Erweiterte Kaffeemaschine Quelle: erstellt im Auftrag der IU, 2013. Dieses sehr einfache Beispiel veranschaulicht eine wesentliche Eigenschaft von objektori- entierten Systemen: die Aufteilung der internen Elemente in Bereiche, die für eine ganz bestimmte Funktion zuständig sind und das Zusammenwirken der einzelnen Objekte. Tabelle 2 zeigt die Zuständigkeiten der Objekte der Kaffeemaschine. Auch wenn die Kaf- feemaschine nicht vollständig programmiert werden kann – weil immer noch Wasser, Kaf- fee und Wärme benötigt werden – werden IT-Systeme nach einem ähnlichen Prinzip designt und gebaut. Tabelle 2: Objekte einer Kaffeemaschine Objekte Zuständigkeiten/Funktion Wasserbehälter, später ersetzt durch Trinkwassernetz Wasserversorgung Wasserleitung Transportieren von Wasser Rückschlagventil Strömungsrichtung des Wassers regeln Heizelement Elektrische Energie in Wärme umwandeln Warmhalteplatte Kaffeekanne wärmen Filter Kaffeepulver zurückhalten und Wasser durch- strömen lassen 18 Objekte Zuständigkeiten/Funktion Uhr Bei Erreichen der eingestellten Uhrzeit Signal auslösen Quelle: erstellt im Auftrag der IU, 2013. Durch die klare Kapselung von Zuständigkeiten in ganz bestimmte Objekte und die klare Kapselung Definition von Schnittstellen, können Objekte später ausgetauscht (in unserem Beispiel Dabei werden Objekte gezielt für abgeschlos- wurde der Wasserbehälter durch das Trinkwassernetz ausgetauscht) oder erweitert (in sene Funktionen und Auf- unserem Beispiel die Erweiterung der Kaffeemaschine um eine Uhr zur Zeitsteuerung) gaben erstellt. Über werden, ohne die Stabilität und Funktionalität des gesamten Systems zu beeinflussen. Das Schnittstellen können andere Objekte diese erleichtert wiederum die Maßnahmen zur Qualitätssicherung, da nicht das ganze System konkreten Funktionen komplett neu getestet werden muss, sondern nur die betroffenen Teile des Systems. und Aufgaben aufrufen. ZUSAMMENFASSUNG Die Objektorientierung ist eine Sichtweise auf komplexe Systeme, bei der das System durch das Zusammenspiel kooperierender Objekte beschrieben wird. Bei der objektorientierten Systementwicklung werden Dinge der „rea- len“ Welt durch Objekte der „digitalen“ Welt nachgebildet. Dabei wer- den nur die für den Zweck des Systems relevanten Werte und Funktio- nen berücksichtigt. Die digital nachgebildeten Objekte speichern Werte in ihren Attributen und können in ihren Methoden Werte berechnen. Objektorientierte Programme bestehen aus kooperierenden „digitalen“ Objekten. Die Kooperation der Objekte erfolgt durch das gegenseitige Aufrufen von Methoden. Der objektorientierte Entwicklungsprozess besteht aus den Phasen objektorientierte Analyse, objektorientiertes Design und objektorien- tierte Implementierung. Ziel des Entwicklungsprozesses ist ein System, das den Anforderungen des Auftraggebers in Funktionalität, Qualität und Aufwand entspricht. Durch die Aufteilung von Systemen in einzelne Objekte mit ganz bestimmten Zuständigkeiten hilft die Objektorientierung bei der Ent- wicklung, Weiterentwicklung und der Qualitätssicherung von komple- xen industriellen Softwaresystemen. 19 LEKTION 2 EINFÜHRUNG IN DIE OBJEKTORIENTIERTE MODELLIERUNG LERNZIELE Nach der Bearbeitung dieser Lektion werden Sie wissen, … – wie die Begriffe Objekt und Klasse zusammengehören. – wie man Klassen identifiziert. – wie Attribute von Klassen beschrieben werden. – wie Methoden von Klassen beschrieben werden. – wie Beziehungen zwischen Klassen beschrieben werden. – was die Unified Modeling Language (UML) ist. 2. EINFÜHRUNG IN DIE OBJEKTORIENTIERTE MODELLIERUNG Aus der Praxis Nachdem Herr Koch nun ganz sicher ist, dass sein Projekt mehrere Wochen dauern wird, hat er sich dazu entschlossen den Online-Shop für Frau Lange zuerst einmal objektorien- tiert zu analysieren. Dazu möchte er alle benötigten Objekte, deren Attribute und deren Methoden identifizieren und in geeigneter Form dokumentieren. Er hat zwar eine grobe Idee, wie er den Online-Shop und die Artikel darstellen kann, jedoch will er sicher gehen, dass er vor dem Programmieren auch alles verstanden und durchdacht hat. Dafür muss Herr Koch nun wissen, wie man Objekte identifiziert und mit welchen Mitteln man sowohl die Elemente von Objekten (also Attribute und Methoden) als auch die Kooperation zwi- schen Objekten darstellt. 2.1 Strukturieren von Problemen mit Klassen In Lektion 1 haben wir das Objekt als Grundkonzept der Objektorientierung kennenge- lernt. Ein Objekt ist eine abgeschlossene, für sich handlungsfähige Einheit, beispielsweise das Auto „E-CL 2343“, die Lampe „Kyist“, der Kunde „Hans Meier“ oder der Vertrag „P- DFD-23“. Bei der objektorientierten Entwicklung werden Objekte aus der physischen (rea- len) Welt in Objekte der Programmiersprache nachgebildet. So gibt es dann zum „echten“ Kunden „Hans Meier“ ein digitales Gegenstück in Form eines digitalen Objektes „Hans Meier“. Der real existierende Kunde (Herr Hans Meier) wird in Form eines „digitalen Objek- tes“ der jeweiligen Programmiersprache des IT-Systems nachgebildet. Bei dieser digitalen Nachbildung werden aber nur die wichtigsten Eigenschaften wie Name, Vorname, Geburtsdatum oder Geschlecht übernommen. Eigenschaften wie Haarfarbe, Augenfarbe oder Farbe der Kleidung interessieren in den meisten Fällen nicht, da sie für die Aufgaben des Systems nicht benötigt werden. Klasse Eine Klasse liefert in der Objektorientierung die Struktur, die zur Bildung eines „digitalen Das ist eine Struktur zur Objektes“ erforderlich ist. Auf Basis einer Klasse können beliebig viele Objekte erzeugt Bildung von digitalen Objekten. Sie legen fest, werden. Alle aus einer Klasse erzeugten Objekte haben die gleiche Struktur, also dieselben woraus konkrete Objekte Attribute und Methoden. Eine Klasse ist insofern etwa vergleichbar mit einer Word-Doku- bestehen. Klassen sind mentvorlage, und ein Objekt ist ein aus dieser Vorlage erzeugtes Word-Dokument. Aus die zentralen Elemente im objektorientierten SW- welchen Klassen ein objektorientiertes System besteht und wie die Struktur der benötig- Entwicklungsprozess. ten Klassen aussieht, wird in der Phase „objektorientiertes Design“ festgelegt. Ausgangs- punkt für das Design sind die ermittelten und spezifizierten Anforderungen. 22 Bei der objektorientierten Programmierung von IT-Systemen werden (fast) nur Klassen implementiert. Das heißt, der Entwickler legt die Struktur von Klassen fest: also aus wel- chen Elementen (Attributen und Methoden) die aus den Klassen erzeugten Objekte beste- hen. Ein objektorientiertes System erzeugt dann bei Bedarf die entsprechenden Objekte, zum Beispiel aus Datenbankeinträgen oder Benutzereingaben. Durch die Beschreibung der Klassen wird gewährleistet, dass sich alle Objekte, die auf Basis dieser Klassen erzeugt werden, gleich verhalten. Alle Objekte einer Klasse haben dieselben Attribute und verfü- gen über die gleichen Funktionen und Routinen (die sogenannten Methoden). Damit kön- nen alle aus einer Klasse erzeugten Objekte von den Funktionen des Systems in gleicher Weise verarbeitet werden. Die zentralen Aktivitäten bei der Analyse und später beim Design sind das Identifizieren und Beschreiben von Klassen. Obwohl die Sichtweise „Objektorientierung“ heißt, stehen eigentlich vielmehr die Klassen im Vordergrund der Betrachtung. Für die Analyse und das Design des Online-Shops muss Herr Koch nun also zunächst geeignete Klassen identifizieren, die später als Vorgabe für die Programmierung des Online-Shops dienen. 2.2 Identifizieren von Klassen Um bei der Analyse zu bestimmen, was ein System tun soll, und dann darauf aufbauend später beim Design festzulegen, aus welchen Klassen das System bestehen soll, wird in einem ersten Schritt ein Analysemodell des Systems entwickelt: Aus der Aufgabenstel- Analysemodell lung beziehungsweise den Anforderungen an das System müssen Kandidaten für Klassen Das ist das Ergebnis der objektorientierten Ana- identifiziert und notiert werden. lyse und dient zur Kom- munikation zwischen den Eine etablierte Vorgehensweise zur Identifikation von Klassen kann wie folgt beschrieben Entwicklern und dem Auf- traggeber bzw. den werden: Anwendern des Systems. 1. Alle Hauptwörter (Substantive) der Aufgabenstellung werden als Kandidaten für Klas- sen markiert. 2. Dann wird geprüft, ob die markierten Hauptwörter durch weitere Hauptwörter beschrieben werden können oder ob sie Beziehungen oder Abhängigkeiten zu ande- ren Hauptwörtern haben. Trifft eine der beiden Aussagen zu, wird das Hauptwort als Klasse modelliert. 3. Wird das Hauptwort verwendet, um ein anderes Hauptwort zu detaillieren, wird es als Attribut einer Klasse modelliert. 4. Alle verbleibenden Wörter, die weder Klasse noch Attribut sind, werden auf Relevanz überprüft und ggf. von der Liste der Kandidaten für Klassen gestrichen. Beispiel 23 Die im Online-Shop von Frau Lange verkauften Artikel sollen Medien aller Art sein, insbe- sondere Bücher, Musikartikel, Filme und Spiele. Jeder Artikel hat einen Hersteller, einen Titel und eine Artikelnummer. Bücher und Spiele haben einen Autor, Filme einen Regis- seur und Musikartikel einen Interpreten. Schritt 1: Nach dem Markieren aller Hauptwörter besteht die Liste aus folgenden Einträ- gen (dabei werden die Hauptwörter nur in Einzahl notiert): Online-Shop Artikel Medien Art Buch Musikartikel Film Spiel Hersteller Titel Artikelnummer Autor Regisseur Interpret Schritt 2–4: Überprüfung auf Kandidat für Klasse, Attribut und generell auf Relevanz: Online-Shop: nicht relevant, weil es das System als Ganzes bezeichnet Artikel: als Klasse relevant Medien: nicht relevant, da nur Beschreibung zu Artikel Art: nicht relevant, da nur Beschreibung zu Artikel Buch: als Klasse relevant, da durch Attribute verfeinert Musikartikel: als Klasse relevant, da durch Attribute verfeinert Film: als Klasse relevant, da durch Attribute verfeinert Spiel: als Klasse relevant, da durch Attribute verfeinert Hersteller: als Attribut relevant, da Beschreibung zu Klassen Titel: als Attribut relevant, da Beschreibung zu Klassen Artikelnummer: als Attribut relevant, da Beschreibung zu Klassen Autor: als Attribut relevant, da Beschreibung zu Klassen Regisseur: als Attribut relevant, da Beschreibung zu Klassen Interpret: als Attribut relevant, da Beschreibung zu Klassen Abbildung 5 stellt die identifizierten Klassen des Beispielszenarios dar. Klassen werden immer in Form eines Rechtecks dargestellt. Der Name der Klasse wird in das Rechteck geschrieben. 24 Abbildung 5: Identifizierte Klassen Quelle: erstellt im Auftrag der IU, 2013. 2.3 Attribute als Eigenschaften von Klassen Wie bereits beschrieben, bestehen Klassen (und damit auch Objekte) aus Attributen und Methoden. Die Attribute (auch: Eigenschaft von Klassen, engl. property) sind statische Attribute Elemente von Klassen. In einem Attribut können konkrete Werte zu dem Objekt gespei- Das sind statische Ele- mente von Klassen und chert werden. Attribute dienen ausschließlich zum Speichern von Werten, man kann sie werden zum Speichern als freie Speicherplätze innerhalb eines Objekts verstehen. Zusammengefasst beschreiben von konkreten Werten die Werte aller Attribute eines Objekts dessen Zustand. Objekte, die aus einer Klasse verwendet. erzeugt wurden und deren Attribute exakt die gleichen Werte haben, sind identisch. Beispiel Für den Online-Shop wurde eine Klasse „Kunde“ identifiziert. Zu jedem Kunden sollen der Name, der Vorname, das Geburtsdatum und das Geschlecht gespeichert werden. Daher werden Name, Vorname, Geburtsdatum und Geschlecht als Attribute der Klasse „Kunde“ modelliert. 25 Abbildung 6: Attribute der Klasse „Kunde“ Quelle: erstellt im Auftrag der IU, 2013. Wie in Abbildung 6 dargestellt, werden Attribute unterhalb des Klassennamens in einem eigenen Rechteck notiert. Eine Klasse mit Attributen besteht also aus zwei zusammenhän- genden Rechtecken: Im oberen Rechteck steht der Name der Klasse und im unteren die Liste der Attribute einer Klasse. Bei der Modellierung von Attributen können u. a. die in Tabelle 3 beschriebenen Eigen- schaften festgelegt werden. Von diesen Eigenschaften ist in einem Analysemodell mindes- tens der Name erforderlich. Alle weiteren Eigenschaften können bereits angegeben wer- den, müssen jedoch nicht. Die fehlenden Eigenschaften werden im Verlauf des SW- Entwicklungsprozesses festgelegt. Tabelle 3: Eigenschaften von Attributen Eigenschaften eines Attributs Beschreibung Beispiel Name Name des Attributs Vorname Datentyp Legt fest, wie die Werte zu dem Attribut Date (Datum) aussehen, also ob es z. B. eine Zahl, eine String (Zeichenkette) Zeichenkette oder ein Datum ist Integer (Ganze Zahl) Konstante (ja/nein) Legt fest, ob sich der Wert des Attributs Gerundete Kreiszahl ändern darf oder nicht Pi: 3,1415 Defaultwert Legt den voreingestellten Wert des Attribu- 2010-01-01 tes fest Quelle: erstellt im Auftrag der IU, 2013. Beispiel Nach der Identifikation möglicher Klassen in Abbildung 6 müssen nun die Attribute zu den Klassen identifiziert werden. Gute Kandidaten für Attribute sind Hauptwörter, die zur Beschreibung oder Detaillierung anderer Hauptwörter genutzt werden. In Abbildung 7 sind die im Beispielszenario Online-Shop identifizierten Attribute ergänzt: 26 Abbildung 7: Identifizierte Attribute zu den Klassen Quelle: erstellt im Auftrag der IU, 2013. 2.4 Methoden als Funktionen von Klassen Methoden (auch: Funktionen, Operationen) sind dynamische Elemente von Klassen. Sie Methoden enthalten Algorithmen, Anweisungen und Abarbeitungsvorschriften, mit denen Werte Das sind dynamische Ele- mente von Klassen. Sie erstellt, berechnet, verändert und gelöscht werden können. Die Ergebnisse der Methoden beschreiben das Verhal- können in Attribute der Klasse oder in neu erzeugte Objekte gespeichert werden. Mit ten von Klassen. In Methoden wird das Verhalten von Objekten beschrieben, also was ein Objekt macht. So Methoden werden u. a. Vorschriften zur Berech- können mit Methoden Berechnungen von Werten und das Anwenden von Geschäftsregeln nung, Änderung und oder Vorschriften zum Erzeugen und Löschen von Objekten programmiert werden. Erzeugung von Attributen und Objekten definiert. Bei der Modellierung von Methoden können die in Tabelle 4 beschriebenen Elemente fest- gelegt werden. In einem Analysemodell wird mindestens der Name benötigt. Detaillierte Informationen zu Rückgabewert, Parameter und der Funktion der Methode können auch im Laufe des Entwicklungsprozesses Stück für Stück ergänzt werden. Tabelle 4: Eigenschaften von Methoden Elemente von Methoden Beschreibung Beispiel Name Name der Methode getName() Parameter Benötigte Objekte und Werte, die zur (Date geburtsdatum) Abarbeitung der Methode erforderlich (String name, String sind vorname) (Integer zahl1, Integer zahl2) 27 Elemente von Methoden Beschreibung Beispiel Rückgabewert Angabe des Datentyps des Objektes, in Date (Datum) dem das Ergebnis der Methode gespei- String (Zeichenkette) chert wird Integer (Ganze Zahl) Quelle: erstellt im Auftrag der IU, 2013. Beispiel Zur oben bereits mit Attributen versehenen Klasse „Kunde“ sollen nun die Methoden fest- gelegt werden. Wichtig ist in jedem Fall, dass die in den Attributen gespeicherten Werte wieder ausgelesen werden können. Wie bereits beschrieben, darf von außen auf Attribute nur über Methoden zugegriffen werden und niemals direkt. Daher muss die Klasse „Kunde“ für jedes ihrer Attribute eine Methode bereitstellen, die den aktuellen Wert des Attributs zurückgibt. Abbildung 8: Attribute und Methoden der Klasse „Kunde“ Quelle: erstellt im Auftrag der IU, 2013. Wie in Abbildung 8 dargestellt, werden die Methoden einer Klasse in einem zusätzlichen Rechteck unterhalb der Attribute modelliert. Eine Klasse mit Methoden besteht demnach aus drei zusammenhängenden Rechtecken: Im oberen Rechteck steht der Name der Klasse, im mittleren die Liste der Attribute einer Klasse und im unteren die Liste der Methoden einer Klasse. 28 2.5 Beziehungen zwischen Klassen Alle Elemente eines objektorientierten Systems werden in Form von Klassen program- miert. Ein Zusammenspiel verschiedener Klassen ist nur möglich, wenn während der Pha- sen des Entwicklungsprozesses Beziehungen (auch: Assoziationen) zwischen Klassen Beziehungen definiert werden. Durch die Festlegung von Beziehungen zwischen Klassen ist eine Koope- Sie beschreiben Abhän- gigkeiten und Zusam- ration zwischen Objekten überhaupt erst möglich. menhänge zwischen Klas- sen. Durch sie wird die Typische Beziehungen zwischen Klassen sind in Tabelle 5 erläutert: Kooperation zwischen Objekten ermöglicht. Tabelle 5: Typische Beziehungen zwischen Klassen Beziehungstypen Beschreibung Beispiel „hat/kennt“ Dieser Beziehungstyp drückt aus, dass Ein Versicherungsnehmer hat Kinder. eine Klasse eine andere Klasse „hat“ Ein Vertrag hat Versicherungsbedin- oder „kennt“. gungen. Ein Kalender hat Monate. Ein Verkäufer kennt seine Kunden. „besteht aus“ Dieser Beziehungstyp drückt aus, dass Ein Auto besteht aus einem Motor, 4 eine Klasse ein Bestandteil einer ande- Rädern, 3 Türen, 1 Getriebe und 2 Sit- ren Klasse ist. Er wird genutzt, wenn zen. eine Klasse ein größeres Konstrukt ist, Ein Haus besteht aus einem Dach, 23 dessen Elemente nicht durch einfache Fenstern, 2 Türen, Attribute beschrieben werden können. 6 Räumen und 1 Treppenhaus. „ist ein“ Dieser Beziehungstyp drückt aus, dass Ein Pkw ist ein Auto. eine Klasse A von der Art her eine Ein Lkw ist ein Auto. Klasse B ist, aber eine spezifischere Ein Kunde ist eine Person. Bedeutung hat und sich ggf. um Ein Buch ist ein Artikel. bestimmte Attribute und Methoden von Ein Igel ist ein Säugetier. Klasse B unterscheidet. Quelle: erstellt im Auftrag der IU, 2013. Um neben Klassen, Attributen und Methoden ebenfalls die Beziehungen grafisch darzu- stellen, werden Linien beziehungsweise Pfeile zwischen den entsprechenden Klassen modelliert. Die einfachste Art Beziehungen herzustellen, ist die Verbindung von zwei Klas- sen durch eine durchgezogene Linie. Eine Beziehung kann, wie in Tabelle 6 gezeigt, neben der durchgezogenen Linie um weitere Informationen ergänzt werden. Tabelle 6: Darstellung von Beziehungen Darstellung der Beziehung Bedeutung Vertrag und Adresse stehen in einer nicht näher beschriebenen Beziehung zueinander. Durchgezogene Linie, ohne Pfeilspitze und ohne Beschriftung 29 Darstellung der Beziehung Bedeutung Vertrag und Adresse sind über eine benannte Assozi- ation verbunden; die beide Klassen sind verbunden durch die Beziehung „Rechnungsanschrift“. Durchgezogene Linie, Beschriftung der Linie mit einem Namen für die Beziehung Durch die Pfeilspitze wird eine Navigationsrichtung vorgeben: vom Vertrag zur Adresse. Das bedeutet, dass der Vertrag eine Adresse kennt und man sich vom Vertrag zur Adresse durchhangeln kann. Jedoch nicht von der Adresse zum Vertrag: Ein Vertrag kennt seine Adresse, aber die Adresse weiß nichts von und über die Existenz des Vertrags. Durchgezogene Linie mit einer Pfeilspitze, ggf. Benennung der Beziehung Ein Vertrag hat genau eine Rechnungsanschrift, eine Adresse kann jedoch die Rechnungsanschrift zu min- destens 1 aber maximal beliebig vielen Verträgen sein. (Detaillierte Erklärung dazu siehe unten.) An den Enden der Beziehung werden Multiplizitä- ten modelliert und damit Aussagen über die Anzahl der assoziierten Objekte gemacht. Quelle: erstellt im Auftrag der IU, 2013. Multiplizitäten Zu Beziehungen können mit Multiplizitäten (auch: Kardinalitäten) Mengenangaben fest- Das sind Mengenangaben gelegt werden. Diese Angaben werden jeweils an das Ende und die Spitze einer Beziehung bei Beziehungen zwi- schen Klassen. Mit Multi- notiert: Links von „..“ steht die Untergrenze und rechts von „..“ die Obergrenze der Men- plizitäten kann festgelegt genangaben. Tabelle 7 gibt einen Überblick über mögliche Mengenangaben: werden, wie viele Objekte einer Klassen mit wie vie- len Objekten einer ande- Tabelle 7: Multiplizitäten in Beziehungen ren Klasse in Beziehung stehen können. Notation Erklärung Beispiel 0..1 Optionale Assoziation Zu einem Auto gehören 0..1 Anhänger. Zu einem Anhänger gehören 0..1 Autos. 30 Notation Erklärung Beispiel 1 Obligatorische Assoziation Zu einem Auto gehört genau 1 Fahrer. Ein Fahrer gehört zu genau 1 Auto. 0..* Optional beliebig Ein Student kann 0..* Kurse belegen. Ein Kurs kann von 1..* Studenten belegt sein. 1..* Beliebig, aber mindestens 1 Ein Tutor kann 1..* Kurse machen. Ein Kurs wird von genau 1 Tutor durchgeführt. n..m Mindestens n und maximal m Ein Auto hat mindestens 3 und maximal 4 Türen. Eine Tür gehört zu genau 1 Auto. Keine Angabe entspricht 1 (sollte Ein Auto hat genau 1 Motor. aber vermieden werden, um Miss- verständ- nisse zu vermeiden) Ein Motor gehört zu genau 1 Auto. Quelle: erstellt im Auftrag der IU, 2013. Beispiel Um mögliche Beziehungen für das Beispielszenario „Online-Shop“ zu identifizieren und zu ergänzen, müssen wir uns erneut den ursprünglichen Text vornehmen: 31 Die im Online-Shop von Frau Lange verkauften Artikel sollen Medien aller Art sein, also insbeson- dere Bücher, Musikartikel, Filme und Spiele. Jeder Artikel hat einen Hersteller, einen Titel und eine Artikelnummer. Bücher und Spiele haben einen Autor, Filme einen Regisseur und Musikarti- kel einen Interpreten. Abbildung 9 zeigt eine entsprechende Darstellung: Außer den „ist ein“-Beziehungen der Klasse „Artikel“ zu den Klassen „Buch“, „Musikartikel“, „Spiel“ und „Film“ sind vorerst keine weiteren Beziehungen erforderlich. Abbildung 9: Beispielszenario ergänzt um Beziehungen Quelle: erstellt im Auftrag der IU, 2013. 2.6 Unified Modeling Language (UML) Wie bereits in Lernzyklus 1.3 beschrieben, zieht sich die Anwendung der Konzepte (Klasse, Objekt, Methode, Attribut) durch alle Phasen eines objektorientierten Entwicklungsproz- esses. Um die Ergebnisse der Phasen OOA und OOD geeignet zu dokumentieren, werden die identifizierten Klassen und deren Beziehungen in einer standardisierten Modellier- ungssprache dokumentiert. Unified Modeling Die Unified Modeling Language (kurz: UML) ist eine grafische Modellierungssprache, die Language (UML) etwa zeitgleich mit der Objektorientierung in den frühen 1990er Jahren entwickelt wurde. Das ist eine universelle Modellierungssprache Die UML umfasst mittlerweile 13 verschiedene Diagrammtypen, mit denen verschiedene und wird als De-Facto- Aspekte eines Systems modelliert werden können. Abbildung 10 gibt einen Überblick über Standard weltweit zur die UML-Diagramme. Grundsätzlich lassen sich Diagramme zur Modellierung von Struktur Modellierung von IT-Sys- temen eingesetzt. und zur Modellierung von Verhalten unterscheiden. Mit Strukturdiagrammen werden Aufbau, Elemente und Zusammensetzung sowie Schnittstellen von Systemen dargestellt. 32 Vereinfacht gesagt werden Strukturdiagramme eingesetzt, um zu modellieren, woraus ein Strukturdiagramme System besteht. Verhaltensdiagramme hingegen kommen zum Einsatz, wenn dargestellt Mit UML-Strukturdiagram- men werden Aufbau, Ele- werden soll, was in einem System abläuft. mente, Zusammenset- zung und Schnittstellen von Systemen modelliert Abbildung 10: Übersicht über UML-Diagrammtypen (z. B. Klassendiagramm). Quelle: erstellt im Auftrag der IU, 2013. Klassen mit ihren Attributen, Methoden und Beziehungen werden mit dem UML Klassen- diagramm modelliert. Alle Beispiele in Lektion 2 sind gültige UML Klassendiagramme. Das Klassendiagramm UML Klassendiagramm ist weltweit eine der am häufigsten genutzten Dokumentations- Das ist ein Strukturdia- gramm der UML. Es wird form bei der objektorientierten Systementwicklung. Alle anderen Strukturdiagramme der zur Modellierung von UML bauen mehr oder weniger auf den Modellierungskonzepten des Klassendiagramms Klassen inklusive deren auf. Attribute, Methoden und Beziehungen eingesetzt. Objektdiagramme sind eine Spezialform der Klassendiagramme. Mit ihnen kann man Objektdiagramm ganz konkrete Ausprägungen von Klassen darstellen. Dazu werden Objekte modelliert, Das ist ein Strukturdia- gramm der UML. Es wird deren Attribute Werte enthalten. Abbildung 11 stellt die Klasse „Kunde“ zwei konkreten zur Modellierung von kon- Objekten der Klasse „Kunde“ gegenüber. Objekte unterscheiden sich von Klassen dahinge- kreten Objekten inklusive hend, dass … konkreter Attributwerte als Instanzen von Klassen eingesetzt. 33 1. … jedes Objekt mit einer eindeutigen ID identifizierbar ist (hier „id1“ und „id2“), notiert links vom Klassennamen gefolgt von einem Doppelpunkt „:“. 2. … zu jedem Attribut eines Objekts ein konkreter Wert dargestellt ist. Alle Objekte einer Klasse haben dabei die gleichen Attribute, nur deren Werte können sich unterscheiden. Abbildung 11: Objekte und Klassen Quelle: erstellt im Auftrag der IU, 2013. Mit den Modellierungskonzepten Klasse, Objekt, Attribut, Methode und Beziehung haben wir bis jetzt die grundlegenden Notationselemente erarbeitet. Alle weiteren Notationen, wie die Vererbung oder Interfaces, bauen auf diesen Grundelementen auf. Wir führen sie später an den Stellen ein, an denen wir sie für die objektorientierte Programmierung benötigen. ZUSAMMENFASSUNG Vor der Programmierung wird in den Phasen objektorientierte Analyse (OOA) und objektorientiertes Design (OOD) sowohl das Problem als auch das Design des objektorientierten Systems modelliert. Dafür werden Klassen mit ihren Attributen und Methoden sowie Beziehungen zwi- schen Klassen mit UML Klassendiagrammen modelliert. 34 Durch die Analyse der Problemerstellung nach relevanten Substantiven werden mögliche Kandidaten für Klassen identifiziert. Anschließend werden diese Klassen um Attribute und Methoden erweitert, je nachdem wie es die Problemstellung erfordert. Nach der Identifikation von Attributen können diese durch einen Namen, einen Datentyp, die Information, ob es sich um eine Konstante handelt, und ggf. einen Defaultwert genauer charakterisiert werden. Methoden hingegen werden durch ihren Namen, benötigte Parameter und ihren Rückgabewert beschrieben. Beziehungen zwischen Klassen können nach ihrem Typ unterschieden werden, neben der „hat/kennt“-Beziehung gibt es auch die „besteht aus“- und die „ist ein“-Beziehung. Einzelne Beziehungen können durch die Beschriftung mit Rollen, Pfeilspitzen und Kardinalitäten verfeinert werden. Die UML bietet geeignete grafische Modellierungskonzepte, um Analyse- modelle und das Design von objektorientierten Systemen standardisiert darzustellen. Insbesondere das UML Klassendiagramm und das UML Objektdiagramm sind für die Modellierung von Strukturen geeignet. Darüber hinaus umfasst die UML verschiedene Verhaltensdiagramme zur Modellierung von Abläufen eines Systems. 35 LEKTION 3 PROGRAMMIEREN VON KLASSEN IN JAVA LERNZIELE Nach der Bearbeitung dieser Lektion werden Sie wissen, … – welche Elemente für das Ausführen und das Programmieren von Java-Anwendungen benötigt werden. – aus welchen Grundelementen eine Java-Klasse besteht und wie man sie in Java pro- grammiert. – wie Attribute von Klassen in Java programmiert werden. – wie Methoden von Klassen in Java programmiert werden. – wie festgelegt wird, was ein Java-Programm beim Starten ausführen soll. 3. PROGRAMMIEREN VON KLASSEN IN JAVA Aus der Praxis Nachdem Herr Koch sich ein objektorientiertes Modell zum Aufbau und zur Struktur des Online-Shops erstellt hat, möchte er gerne mit den ersten Schritten in Richtung objektori- entierte Programmierung anfangen. Nachdem er nun verstanden hat, dass objektorien- tierte Systeme aus einer Menge kooperierender Objekte bestehen, will er wissen, wie er Klassen und Objekte mit der Programmiersprache Java erstellen kann und was er dafür vorbereiten muss. 3.1 Einführung in die Programmiersprache Java Programmierung Ganz grundsätzlich werden bei der Programmierung (auch: Implementierung) drei ver- Dies ist eine Tätigkeit mit schiedene Aktivitäten durchgeführt: dem Ziel Programmcode zu erstellen, der sich nach dem Kompilieren auf 1. Programmieren, d. h. Produzieren von Programmcode (auch: Quellcode, Sourcecode, einem Rechner als Pro- Quelltext, Programmtext), gramm oder Bestandteil eines Programmes aus- 2. Kompilieren, d. h. automatisches Übersetzen des produzierten Programmcodes in führen lässt. eine Form, die von einem Rechner ausgeführt werden kann, sowie 3. Ausführen des Programms, d. h. Starten und Ausführen des erzeugten und kompilier- ten Programmcodes, um zu sehen, ob sich das System wie erwartet verhält. Kann das Schreiben des Programmcodes noch mithilfe eines ganz einfachen Texteditors geschehen, so wird spätestens beim Kompilieren eine Software benötigt, die den vom Ent- wickler geschriebenen Programmtext in ausführbaren Maschinencode übersetzt (auch: Compiler kompiliert). Diese Übersetzungssoftware heißt „Compiler“. Es gibt Compiler für jede Pro- Das ist eine Software, die grammiersprache. Nachdem der Programmtext durch den Compiler kompiliert wurde, Programmcode in eine Form übersetzt, die von kann er in einer Ausführungsumgebung (auch: Runtime) gestartet und ausgeführt werden. einem Rechner ausge- Für viele Programmiersprachen stellt das Betriebssystem eines PCs (z. B. Windows, Linux, führt werden kann. MacOS) die Ausführungsumgebung bereit. Da sich die Funktionen und Eigenschaften von Betriebssystemen unterscheiden, müssen Programme für jedes Betriebssystem neu pro- grammiert beziehungsweise kompiliert werden. Abbildung 12 zeigt exemplarisch alle benötigten Elemente für die Entwicklung mit der Programmiersprache C. 38 Abbildung 12: Entwicklung mit der Programmiersprache C Quelle: erstellt im Auftrag der IU, 2013. Bei der Programmiersprache Java handelt sich um eine plattform-unabhängige Program- miersprache. Ein in Java geschriebenes Programm muss nicht für jedes Betriebssystem neu angepasst werden. Von anderen Programmiersprachen unterscheidet sich Java dadurch, dass auf den Geräten, auf denen ein Java-Programm ausgeführt werden soll, vorher eine „Java-Laufzeitumgebung“ (auch: Java Runtime Environment, kurz: JRE) installiert werden muss. Der Java-Compiler übersetzt den programmierten Quelltext in einen sogenannten „Bytecode“. Dieser „Bytecode“ wird dann von der Java-Laufzeitumge- Bytecode bung geladen, gestartet und ausgeführt. Weil für nahezu jedes Betriebssystem eine ent- Das ist eine Form eines Java-Programms nach- sprechende Java-Laufzeitumgebung verfügbar ist, kann ein Java-Programm sowohl auf dem es kompiliert wurde. einem Linux-, Windows- oder Mac-Rechner ausgeführt werden. Abbildung 13 zeigt eine Er kann von einer Java- Übersicht über benötigte Elemente bei der Entwicklung mit Java. Im Unterschied zu Abbil- Laufzeitumgebung (JRE) als Programm ausgeführt dung 12 wird hier eine zusätzliche Runtime benötigt, um die Ausführung auf verschiede- werden. nen Plattformen zu ermöglichen. Abbildung 13: Entwicklung mit der Programmiersprache Java Quelle: erstellt im Auftrag der IU, 2013. 39 Um als Nutzer ein Java-Programm ausführen zu können, wird die Java-Runtime (JRE) Java Virtual Machine benötigt. Die Java-Runtime besteht aus der Java Virtual Machine (kurz: JVM) und der (JVM) Java Klassenbibliothek. Die JVM ist die Software, die den Bytecode interpretiert sowie im Dies ist eine betriebssys- tem-spezifische Software, eingesetzten Betriebssystem startet und ausführt. Die Java-Klassenbibliothek stellt bereits die Java-Programme in in der Programmiersprache Java vorhandene Funktionen zur Verfügung, sodass häufig Form von Bytecode auf eingesetzte Datenstrukturen (z. B. Listen oder Zeichenketten) vom Programmierer zwar einem Rechner als Pro- gramm ausführen kann. wiederverwendet werden können, jedoch nicht jedes Mal neu implementiert werden müs- sen. Um als Software-Entwickler in der Programmiersprache Java Software zu entwickeln, wird Java Software ein Java Software Development Kit (kurz: Java SDK) benötigt. Das Java SDK besteht Development Kit (SDK) aus einem Java-Compiler, einer Java Virtual Machine, der Java-Klassenbibliothek sowie Das ist das Grundwerk- zeug des Java-Entwick- weiteren Hilfsprogrammen. lers. Es enthält einen Compiler, der Bytecode erzeugt, und eine JVM zum Ausführen von Java- Programmen. TIPP Für die Entwicklung werden sogenannte Entwicklungsumgebungen (kurz: IDE) eingesetzt. Für Java gibt es beispielsweise Eclipse, NetBeans, IntelliJ oder BlueJ als kostenfrei verfügbare IDEs – aber auch noch einige andere. Zum Nachstellen der Beispiele und für praktische Übungen wird Ihnen Ihr Tutor entsprechende Empfehlungen mit Download-Links und Anleitung zur Verfügung stellen. 3.2 Grundelemente einer Klasse in Java Eine Klasse in der Programmiersprache Java hat einen eindeutigen Namen und kann Attri- bute und Methoden enthalten. Der Programmcode einer Klasse wird in Java in einer Text- datei mit der Dateiendung *.java gespeichert. Für jede Klasse wird eine eigene Datei angelegt. Der Java-Compiler legt für jede Klasse (also für jede java-Datei) eine Klasse mit der Endung *.class an, in welcher der kompilierte Bytecode einer Klasse gespeichert wird. Abbildung 14 zeigt das Grundgerüst der Java-Klasse „Kunde“ aus Abbildung 6, hier aller- dings ohne Attribute. Um eine Klasse zu erstellen, werden mindestens die folgenden vier dargestellten Elemente benötigt: der Sichtbarkeitsmodifikator, das Schlüsselwort class, der Name der Klasse und ein Paar geschweifte Klammern. 40 Abbildung 14: Gerüst der Klasse „Kunde“ aus Abbildung 6 Quelle: erstellt im Auftrag der IU, 2013. Grundsätzlich kann die so dargestellte Klasse „Kunde“ verwendet werden – der Java-Com- piler würde keinen Fehler bei der Übersetzung in den Bytecode melden. In der folgenden Tabelle 8 sind die Elemente des Grundgerüsts detailliert beschrieben: Tabelle 8: Grundelemente einer Klasse in Java Element einer Klasse Beschreibung Beispiel Sichtbarkeitsmodifikator Legt die Sichtbarkeit der Klasse für public andere Klassen fest (Details siehe Lern- zyklus 4.5) Schlüsselwort für die Klassen- Zeigt dem Java-Compiler an, dass im Fol- class deklaration genden eine Java-Klasse programmiert ist Klassenname Legt den Namen für die Klasse in Java Kunde fest und wird als Dateiname verwendet. Die Klasse „Kunde“ wird in einer Textdatei „Kunde.java“ programmiert Geschweifte Klammern Markieren den Inhalt einer Klasse (Attri- { … } bute und Methoden); alles was innerhalb der Klammern steht, gehört zu einer Klasse Quelle: erstellt im Auftrag der IU, 2013. Für den Namen der Klasse müssen dabei folgende Vorgaben eingehalten werden: Beginnt mit Großbuchstaben Besteht aus Unicode-Zeichen (mit Einschränkungen, z. B. keine Leerzeichen, keine Umlaute) 41 Kann theoretisch beliebig lang sein (begrenzt nur durch die maximale Länge eines Dateinamens) Darf kein Schlüsselwort sein (z. B. class oder public) Umfasst der Klassenname mehrere Wörter, werden diese ohne Trennzeichen zusammen geschrieben (z. B. WortWort, NameDerKlasse) 3.3 Attribute in Java Nach dem Programmieren des ersten Grundgerüsts der Klasse „Kunde“ sollen nun die benötigten Attribute ergänzt werden. In Abbildung 15 ist die um Attribute erweiterte Klasse „Kunde“ aus Abbildung 6 dargestellt. Ein Attribut in Java wird dabei mindestens mit folgenden Elementen beschrieben: dem Sichtbarkeitsmodifikator (Details siehe Lern- zyklus 4.5), dem Datentyp und dem Attributnamen. Der in Abbildung 15 verwendete Datentyp String wird für Zeichenketten verwendet (Details siehe in Lernzyklus 4.1). Abbildung 15: Klasse „Kunde“ erweitert um Attribute Quelle: erstellt im Auftrag der IU, 2013. Darüber hinaus können bereits bei der Programmierung Werte für Attribute festgelegt wer- den (auch: Defaultwerte). Folgendes Beispiel zeigt zwei Attribute für die im Quellcode jeweils ein Defaultwert festgelegt wurde: 42 Code Defaultwert private boolean istPremiumKunde = false; Das ist ein Wert, der einem Attribut automa- private int anzahlDerEinkaeufe = 0; tisch bei der Erzeugung des Objektes zugewiesen wird. In der folgenden Tabelle 9 sind die Elemente des Grundgerüsts detailliert beschrieben: Tabelle 9: Grundelemente eines Attributs in Java Element eines Attributes Beschreibung Beispiel Sichtbarkeitsmodifikator Legt die Sichtbarkeit des Attributs für andere private Klassen fest (Details siehe Lernzyklus 4.5) Datentyp des Attributs Legt den Datentyp des Attributs fest und String bestimmt damit Anzahl und Art der Werte, die Kunde in dem Attribut gespeichert werden können. Ein Datentyp ist entweder ein primitiver Daten- typ (Details siehe Lernzyklus 4.1) oder eine Klasse, ein sogenannter Referenzdatentyp (z. B. String oder Kunde). Attributname Legt den Namen für das Attribut der Klasse fest; name jeder Name darf innerhalb einer Klasse nur 1x vorname vergeben werden. geschlecht Defaultwert Legt den initialen Wert des Attributs fest; dieser = 0 Wert wird dem Attribut bei der Erzeugung eines = 1 Objektes der Klasse zugewiesen. = false Semikolon Markiert das Ende der Attributdeklaration. ; Quelle: erstellt im Auftrag der IU, 2013. Für den Namen eines Attributs einer Klasse müssen folgende Vorgaben eingehalten wer- den: Beginnt mit einem Kleinbuchstaben Besteht aus Unicode-Zeichen (mit Einschränkungen, z. B. keine Leerzeichen, keine Umlaute) Kann theoretisch beliebig lang sein Darf kein Schlüsselwort sein (z. B. public oder class) Groß- und Kleinschreibung wird beachtet (d. h. name ist ein anderes Attribut als nAme) Umfasst der Attributname mehrere Wörter, werden diese ohne Trennzeichen zusam- mengeschrieben (z. B. attributAttribut, nameDesKunden) 43 3.4 Methoden in Java Mit den Kenntnissen aus den Lernzyklen 3.2 und 3.3 sind wir in der Lage, einfache Klassen mit Attributen zu programmieren. Damit können wir bereits Daten in Form von Attribut- werten in Objekten speichern. Als nächstes sollen nun Methoden implementiert werden, die als dynamische Elemente von Klassen die Werte von Attributen erstellen, berechnen, verändern und löschen können. Wie in Lernzyklus 1.2 bereits erwähnt, erfolgt der Zugriff auf Attribute eines Objektes durch andere Objekte nur über Methoden, aber niemals über einen direkten Zugriff auf Prinzip der Datenkap- Attribute einer anderen Klasse (Prinzip der Datenkapselung). Daher werden Methoden selung auch benötigt, um Werte von Attributen auszulesen und sie anderen Klassen zur Verfü- Dabei darf ein Objekt auf Attribute eines anderen gung zu stellen. Objektes niemals direkt zugreifen. Das Lesen oder In Abbildung 16 ist eine vollständig implementierte Klasse „Kunde“ dargestellt, wobei die Ändern von Attributen sollte nur durch Metho- Elemente einer Methode anhand der Methode getName() erläutert werden. Das passende den möglich sein. UML Klassendiagramm zu dieser Implementierung zeigt Abbildung 8. 44 Abbildung 16: Methoden der Klasse „Kunde“ Quelle: erstellt im Auftrag der IU, 2013. Die folgende Tabelle 10 erläutert die Elemente, die in Java zur Implementierung einer Methode mindestens benötigt werden: Tabelle 10: Grundelemente einer Methode in Java Element einer Methode Beschreibung Beispiel Sichtbarkeits- Legt die Sichtbarkeit der Methode für andere Klas- public modifikator sen fest (Details siehe Lernzyklus 4.5). 45 Element einer Methode Beschreibung Beispiel Rückgabe-Daten- Angabe des Datentyps des Objektes, in dem das String typ der Methode Ergebnis der Methode nach Abarbeitung des Kunde Methodenrumpfes ausgegeben wird. void Dabei werden ein primitiver Datentyp (Details siehe Lernzyklus 4.1) oder eine Klasse (z. B. String oder Kunde) angegeben. Für den Fall, dass die Methode kein Ergebnis ausgibt, wird void als Rück- gabe-Datentyp festgelegt. Methodenname Legt den Namen für die Methode fest; ein Metho- getName() denname darf innerhalb einer Klasse nur dann getVorname() mehrfach vergeben werden, wenn sich Anzahl bzw. Datentyp der Parameter unterscheiden. Parameterliste Liste benötigter Objekte und deren Datentypen, (Date geburtsdatum) die zur Abarbeitung der Methode erforderlich sind; (String name, String werden keine Parameter angegeben bleibt die Liste vorname) leer. (Integer zahl1, Integer zahl2) () Methodenrumpf Enthält die konkreten Anweisungen, was beim Auf- ergebnis = zahl1 + ruf der Methode in welcher Reihenfolge getan wird. zahl2; Jede Anweisung wird mit einem Semikolon „;“ return name; beendet, daher ist in Methodenrümpfen das „;“ oft das letzte Zeichen einer Programmzeile. Die Anwei- sungen innerhalb eines Methodenrumpfes werden der Reihe nach von oben nach unten abgearbeitet. Wird für die Methode ein Rückgabe-Datentyp ange- geben, beginnt die letzte Anweisung des Metho- denrumpfes mit dem Schlüsselwort return. Quelle: erstellt im Auftrag der IU, 2013. Für den Namen der Methode müssen folgende Vorgaben eingehalten werden: Beginnt mit einem Kleinbuchstaben Besteht aus Unicode-Zeichen (mit Einschränkungen, z. B. keine Leerzeichen, keine Umlaute) Kann theoretisch beliebig lang sein Darf kein Schlüsselwort sein (z. B. public oder class) Groß- und Kleinschreibung wird beachtet (d. h. methode() ist eine andere Methode als mEthode()) Umfasst der Methodenname mehrere Wörter, werden diese ohne Trennzeichen zusam- mengeschrieben (nameDerMethode(), berechneSumme(), gibtNamenZurueck()) Signatur Ein weiteres Konzept für Methoden in Java ist die Signatur. Anhand ihrer Signatur können Sie identifiziert eine Methoden eindeutig identifiziert werden. Die Signatur einer Methode besteht aus dem Methode eindeutig. Sie besteht aus dem Namen Namen der Methode und der Parameterliste. Der Rückgabe-Datentyp ist nicht Teil der Sig- der Methode und der natur. Jede Signatur darf innerhalb einer Klasse nur einmal vorkommen, denn nur so kann Parameterliste. die JRE zur Laufzeit des Programmes feststellen, welche Methode aufgerufen und abgear- beitet werden soll. Anders ausgedrückt: Der Name einer Methode kann innerhalb einer Klasse mehrfach vergeben werden, solange die Parameterliste sich unterscheidet. 46 Codebeispiel 1: Hier unterscheiden sich die Namen und damit auch die Signaturen: Code public void anmelden () {…} public void abmelden () {…} Codebeispiel 2: Hier unterscheiden sich die Parameterlisten und damit auch die Signatu- ren: Code public int zumWarenkorbHinzufuegen (Artikel artikel) {…} public int zumWarenkorbHinzufuegen (Artikel artikel, int anzahl) {…} Codebeispiel 3: Hier unterscheiden sich nur die Rückgabe-Datentypen, jedoch weder die Methodennamen noch die Parameterlisten. Damit sind Signaturen identisch: Code public boolean bezahlen (boolean pruefung) {…} public void bezahlen (boolean pruefung) {…} Um auf Attribute einer Klasse zuzugreifen, können beliebige Methodennamen vergeben werden. Ganz grundsätzlich sollten die Namen jedoch so gewählt werden, dass leicht zu erkennen ist, was die Methode tatsächlich tut. Für das Schreiben und Auslesen von Attri- buten werden sogenannte Getter- und Setter-Methoden eingesetzt. Eine Getter-Methode Getter- und Setter- („get“ = „holen“) liefert den Wert eines Attributs zurück. Eine Setter-Methode („set“ = „set- Methoden Das sind spezielle Metho- zen“) ändert den Wert eines Attributes auf den Wert, der als Parameter der Setter-Methode den, die zum Lesen und übergeben wird. Ändern von Attributen eingesetzt werden. Sie dienen zum Umsetzen Beispiel des Prinzips der Daten- kapselung. Eine vollständig mit Getter- und Setter-Methoden modellierte Klasse „Kunde“ ist in Abbil- dung 17 dargestellt. Somit ist sowohl der Zugriff auf die gespeicherten Werte der Attribute möglich (über die Getter-Methoden), als auch das Ändern der Werte (über die Setter- Methoden). 47 Abbildung 17: Getter- und Setter-Methoden für die Klasse „Kunde“ Quelle: erstellt im Auftrag der IU, 2013. Eine entsprechende Implementierung dazu am Beispiel des Attributs name zeigt Abbil- dung 18. Für alle übrigen Attribute ist die Implementierung der Getter- und Setter-Metho- den ähnlich, nur die Namen der Methoden und Parameter unterscheiden sich. Die grund- sätzliche Struktur bleibt jedoch erhalten. Trotzdem sei an dieser Stelle noch darauf hingewiesen, dass in Abbildung 18 der Parameter der Setter-Methode setName mit name genauso benannt wurde wie das private Attribut name der Klasse – was nicht zwingend so gemacht werden muss. Um aber in einem solchen Fall diese beiden unterscheiden zu kön- nen, dient hier das Schlüsselwort this, mit dem auf das Objekt selbst und damit auf das Klassenattribut (this.name) Bezug genommen werden kann. Abbildung 18: Implementierte Getter- und Setter-Methode für ein Attribut der Klasse „Kunde“ Quelle: erstellt im Auftrag der IU, 2013. 48 Um die in einem Methodenrumpf implementierten Anweisungen auszuführen, muss die entsprechende Methode aufgerufen werden. Methoden können aus anderen Methoden- rümpfen derselben Klasse heraus oder aus Methodenrümpfen einer anderen Klasse aufge- rufen werden. Der Aufruf einer Methode erfolgt durch den Namen. Codebeispiel 1: Aufruf der Methode getName() innerhalb der Klasse „Kunde“ Code String id1= getName(); Hier wird die Getter-Methode des Attributs name aufgerufen, um den Wert von name in einer lokalen Variable id1 (Details zu Variablen siehe Lernzyklus 4.2) zu speichern. Codebeispiel 2: Aufruf der Methode setName() innerhalb der Klasse „Kunde“ Code setName("Lange"); Hier wird die Setter-Methode des Attributs name aufgerufen, um den aktuellen Wert von name auf den Wert „Lange“ zu ändern. Codebeispiel 3: Aufruf der Methode getName() der Klasse „Kunde“ aus einer anderen Klasse heraus Code String id2= kunde1.getName(); Das Objekt, das die Methode getName() in Kunde aufrufen will, hat ein Objekt der Klasse „Kunde“ unter dem Variablennamen kunde1 gespeichert. Mit dem Aufruf kunde1.getName() kann gezielt die Methode getName() in dem Objekt kunde1 aufge- rufen werden. Der Wert von kunde1.getName() wird in der aufrufenden Klasse in der Variable (Details zu Variablen siehe Lernzyklus 4.2) id2 gespeichert. Codebeispiel 4: Aufruf der Methode setName() aus einer anderen Klasse heraus Code kunde1.setName("Lange"); Das Objekt, das die Methode setName() in Kunde aufrufen will, hat ein Objekt der Klasse „Kunde“ unter dem Variablennamen kunde1 gespeichert. Mit dem Aufruf kunde1.setName("Lange") kann gezielt die Methode setName(String name) in dem Objekt kunde1 aufgerufen werden. Über diesen Methodenaufruf kann aus einem anderen Objekt heraus der Wert „Lange“ als Attribut in das Objekt kunde1 gespeichert werden. 49 Gibt es in einer Klasse Methoden mit selbem Namen, so spricht man vom Überladen von Überladen von Methoden. Mit dem Überladen, also dem mehrfachen Zurverfügungstellen einer Methode Methoden mit identischem Namen, erhält man als Entwickler die Möglichkeit unterschiedliches Dabei implementiert man mehrere Methoden mit Methodenverhalten in Abhängigkeit von den gegebenen Parametern zu definieren. demselben Namen, jedoch unterschiedlichen Beispiel Parameterlisten innerhalb einer Klasse. Die folgende Methode soll verwendet werden, um im Online-Shop von Frau Lange einen Artikel in den Warenkorb zu legen. Dafür gibt es eine Methode zumWarenkorbHinzufuegen, die als Parameter den entsprechenden Artikel enthält. Der Artikel ist ein Objekt der Klasse „Artikel“: Code public void zumWarenkorbHinzufuegen (Artikel artikel) {…} Zusätzlich zu dieser Methode soll es aber auch die Möglichkeit geben, mehrere gleiche Artikel in den Warenkorb zu legen. Dazu wird die Methode zumWarenkorbHinzufuegen überladen, indem eine zweite Methode zumWarenkorbHinzufuegen implementiert wird, die neben dem Artikel auch die Anzahl der hinzuzufügenden Artikel als Parameter erwar- tet: Code public void zumWarenkorbHinzufuegen (Artikel artikel, int anzahl) {…} 3.5 main-Methode: Startpunkt eines Java-Programms Wie bereits beschrieben, bedeutet die konsequente Umsetzung der Objektorientierung das Zerlegen von Problemen in verschiedene Klassen eines UML Klassendiagramms. Ein Java-Programm besteht ebenfalls aus einer Zusammenstellung verschiedener Klassen, die untereinander über den Aufruf von Methoden kooperieren. Zur Laufzeit eines Java- Programms werden aus Klassen Objekte erzeugt, welche wiederum weitere Objekte erzeu- gen können. Daher kann man sich ein in Ausführung begriffenes Java-Programm als Netz von miteinander verbundenen Objekten vorstellen. Für jedes Java-Programm gibt es jedoch einen festgelegten Startpunkt, das heißt, eine ganz bestimmte Methode wird immer als Erstes aufgerufen, wenn das Programm startet: die sogenannte main-Methode. Die Erzeugung aller von dem Programm benötigter Objekte startet innerhalb dieser Methode. Die main-Methode wird wie in Abbildung 19 dar- gestellt deklariert. 50 Abbildung 19: main-Methode als Startpunkt einer Klasse Quelle: erstellt im Auftrag der IU, 2013. Folgende Elemente der main-Methode sollten ohne Änderung übernommen werden: Sichtbarkeitsmodifikator (public), Deklaration der main-Methode als statische Methode (static, Details siehe Lernzyklus 6.3), Festlegung, dass es keinen Rückgabetyp gibt (void), Name der Methode (main) sowie die Parameterliste (String args[]). Nur der Methodenrumpf wird entsprechend angepasst. In welcher Klasse des Programms die main-Methode implementiert wird, kann der Entwickler frei entscheiden. Um Ver- wechslungen zu vermeiden, sollte es jedoch nur eine Klasse mit einer main-Methode geben. Beispiel Eine kleiner erster Prototyp des Online-Shops ist als Klassendiagramm in Abbildung 20 dargestellt. Eine Klasse „OnlineShop“ hat keine Attribute, aber eine main-Methode. Die Klasse „Kunde“ hat vier Attribute und die jeweiligen Getter- und Setter-Methoden dazu. 51 Abbildung 20: main-Methode im Klassendiagramm Quelle: erstellt im Auftrag der IU, 2013. Eine passende Beispielimplementierung der Klasse „OnlineShop“ mit der main-Methode liefert Abbildung 21. Im Methodenrumpf der main-Methode und damit beim Ausführen des Programms „OnlineShop“ werden zuerst zwei Objekte vom Typ Kunde angelegt, den lokalen Variablen kunde1 und kunde2 zugewiesen und in beiden Objekten jeweils die Werte für die Attribute name und vorname gespeichert. Dann wird zur Kontrolle auf der Konsole der Wert des Attributs name für das Objekt kunde1 ausgegeben. Anschließend wird das Attribut name von kunde1 auf einen neuen Wert gesetzt und der aktuelle Wert name sowohl für kunde1 und kunde2 auf der Konsole ausgegeben. 52 Abbildung 21: Beispielimplementierung einer main-Methode Quelle: erstellt im Auftrag der IU, 2013. Wie in dem Beispiel erkennbar ist, startet das Programm „Online-Shop“ mit der main- Methode der Klasse „OnlineShop“. Ausgehend von dieser main-Methode werden nun zwei konkrete Kunden angelegt, das heißt Objekte vom Typ Kunde erzeugt und als Variable kunde1 und kunde2 für die weitere Verwendung in der main-Methode von OnlineShop abgelegt. ZUSAMMENFASSUNG Die Programmiersprache Java ist eine plattformunabhängige Program- miersprache. Ein Java-Programm kann durch die Verwendung von betriebssystemspezifischen Java-Laufzeitumgebungen ohne Anpassun- gen auf fast jedem Betriebssystem ausgeführt werden. 53 Genau wie bei der objektorientierten Modellierung bestehen Java-Klas- sen neben ihrem eindeutigen Namen aus Attributen und Methoden. Im Vergleich zur Modellierung müssen jedoch bei der Java-Programmie- rung besondere Konventionen und Regeln eingehalten werden. Zu Attri- buten muss ein Sichtbarkeitsmodifikator, ein klassenweit eindeutiger Name und ein gültiger Datentyp festgelegt werden. Bei der Programmierung von Methoden sind folgende Dinge zu beach- ten: Die Signatur einer Methode (Namen und Parameterliste) muss klas- senweit eindeutig sein. Jede Methode muss darüber hinaus einen dekla- rierten Rückgabe-Datentyp (oder: void), einen Sichtbarkeitsmodifikator und einen implementierten Methodenrumpf haben. Im Methodenrumpf ist programmiert, was die Methode tut, genauer gesagt: die Anweisun- gen und Abarbeitungsvorschriften. Der Zugriff auf Attribute durch eine andere Klasse wird in der Regel über sogenannte Getter- und Setter-Methoden ermöglicht. Das ermöglicht die konsequente Einhaltung des Prinzips der Datenkapselung. Methoden können überladen werden, das heißt, es kann mehrere Methoden geben, die denselben Namen haben und sich nur durch die Parameterliste unterscheiden. Ein Java-Programm wird immer durch die main-Methode gestartet. Diese Methode ist der Startpunkt für alle Aktivitäten und Abläufe des Programms. Enthält eine Klasse eine nach den Konventionen deklarierte main-Methode, ist damit automatisch bestimmt, wo das Programm mit der Abarbeitung der Anweisungen beginnt. 54 LEKTION 4 JAVA SPRACHKONSTRUKTE LERNZIELE Nach der Bearbeitung dieser Lektion werden Sie wissen, … – was für primitive Datentypen es in Java gibt und welchen Wertebereich diese abde- cken. – wie mit Variablen Werte zwischengespeichert werden können. – welche wichtigen Operatoren es in Java gibt und wie sie verwendet werden. – welche Kontrollstrukturen es gibt und wie damit kontrolliert Anweisungen wiederholt werden können. – wie mithilfe von Paketen Sichtbarkeiten von Klassen und deren Elemente gezielt fest- gelegt werden können. 4. JAVA SPRACHKONSTRUKTE Aus der Praxis Herr Koch ist nun in der Lage, die Elemente eines UML Klassenmodells in einen Java-Pro- grammcode zu implementieren. Dies bedeutet, er kann Klassen mit deren Attributen in Java programmieren und er weiß auch, wie man Methoden deklariert. Grundsätzlich ist ihm die main-Methode zwar bekannt, doch die Elemente der Programmiersprache Java, mit denen er die Algorithmen und Geschäftsregeln innerhalb eines Methodenrumpfes umsetzen kann, kennt er noch nicht. 4.1 Primitive Datentypen Grundsätzlich werden Informationen bei der objektorientierten Programmierung in Attri- buten von Objekten gespeichert. Wie in Lernzyklus 3.3 bereits erläutert, bestimmt der Datentyp eines Attributes, welche Informationen in einem Attribut abgelegt werden dür- fen. Wird als Datentyp eines Attributes der Name einer Klasse angegeben, dürfen nur Objekte dieser Klasse als konkrete Werte diesem Attribut zugewiesen werden. Primitive Datentypen Mit den sogenannten primitiven Datentypen gibt es in Java allerdings eine Menge von So werden Datentypen sehr einfachen Datentypen, die nicht durch eine eigene Klasse beschrieben werden. bezeichnet, deren Werte keine Objekte sind, z. B. einfache Zahlen oder Primitive Datentypen werden eingesetzt um Wahrheitswerte (true, false), ganze Zahlen Wahrheitswerte. (1, 12, 13131), Fließkommazahlen (1.123, 21234.1232) und einzelne Zeichen (t, w, f, d) zu speichern. Primitive Datentypen sind einfache Standard-Datentypen, die es auch in anderen Programmiersprachen gibt. Eine Übersicht zu primitiven Datentypen in Java wird in Tabelle 11 dargestellt. Tabelle 11: Primitive Datentypen in Java Schlüssel- Art der gespei- wort in cherten Werte Java Beschreibung Beispiele Wahrheitswerte boolean Kann entweder true oder false true sein. Weitere Werte sind nicht false erlaubt. Ganze Zahl byte 8Bit-Wertebereich von 123, 0, 23, 120 –128 bis 127 short 16Bit-Wertebereich von -23000, 0, 13231 –32.768 bis 32.767 int 32Bit-Wertebereich von -12332123, 234, –2.147.483.648 bis 2.147.483.647 1102379239 56 Schlüssel- Art der gespei- wort in cherten Werte Java Beschreibung Beispiele long 64Bit-Wertebereich von 8347829790645, 13, 0, –9.223.372.036.854.775.808 bis 34879, 789234789274 9.223.372.036.854.775.808 Fließkommazahl float 32Bit-Wertebereich von 1.87236f (Einfache 1,40239846*10–45 bis 3,40282347*1038 Zahl mit Komma und angehängtem „f“) -3.938e12f (–3.938*1012 mit ange- hängtem „f“) double 64Bit-Wertebereich von 1.87236d (Einfache 4,94065645841246544*10–324 bis Zahl mit Komma und 1,79769131486231570*10308 angehängtem „d“) -3.938e120d (– 3.938*10120 mit ange- hängtem „d“) Schriftzeichen char Ein einzelnes Unicode-Zeichen. ’A’ (= Buchstabe A), (Character) Umfasst neben Ziffern, Buchstaben ’2’ (= Ziffer 2), und Symbolen auch Steuerzeichen ’\n’ (= Steuerzeichen wie Leerzeichen, Tabulator oder Zei- Zeilenumbruch) lenumbruch. Quelle: erstellt im Auftrag der IU, 2013. Für ganze Zahlen wird in der Regel der Datentyp int verwendet, kleinere Datentypen wie byte oder short werden nur bei der Programmierung von Mikrocontrollern eingesetzt. Ein weiterer häufig verwendeter Datentyp ist String. Er wird zur Speicherung von Zeichen- String ketten verwendet. String ist kein primitiver Datentyp, sondern wird durch eine eigene Das ist ein Datentyp zum Speichern von Zeichen- Java-Klasse beschrieben. Dennoch kann String wie ein primitiver Datentyp Attributen ketten und hat in Java (und Variablen, siehe Lernzyklus 4.2) zugewiesen werden. In Tabelle 1

Use Quizgecko on...
Browser
Browser