Wirtschaftsinformatik Holger Ludolph, Thorsten Schwandt, Peter K. Siebert 1. Auflage, 2013 ISBN 978-3-86249-262-6 mit Office 2010 Jahrgangsstufe 11 Band 1 Berufliches Gymnasium Nordrhein-Westfalen BS-BG-NRW-WINF1-W72010 Impressum ISBN 978-3-86249-262-6 Matchcode: BS-BG-NRW-WINF1-W72010 Autoren: Holger Ludolph Studienrat und Fachlehrer für BWL/VWL und Datenverarbeitung Thorsten Schwandt Studienrat und Fachlehrer für Wirtschaftsinformatik und Wirtschaftswissenschaft Peter K. Siebert Studiendirektor und Fachlehrer für Informatik und Physik Produziert im HERDT-Digitaldruck 1. Auflage, 2013 HERDT-Verlag für Bildungsmedien GmbH Am Kümmerling 21-25 55294 Bodenheim Internet: www.herdt.com E-Mail: [email protected] © HERDT-Verlag für Bildungsmedien GmbH, Bodenheim Alle Rechte vorbehalten. Kein Teil des Werkes darf in irgendeiner Form (Druck, Fotokopie, Mikrofilm oder einem anderen Verfahren) ohne schriftliche Genehmigung des Verlags reproduziert oder unter Verwendung elektronischer Systeme verarbeitet, vervielfältigt oder verbreitet werden. Dieses Buch wurde mit großer Sorgfalt erstellt und geprüft. Trotzdem können Fehler nicht vollkommen ausgeschlossen werden. Verlag, Herausgeber und Autoren können für fehlerhafte Angaben und deren Folgen weder eine juristische Verantwortung noch irgendeine Haftung übernehmen. Wenn nicht explizit an anderer Stelle des Werkes aufgeführt, liegen die Copyrights an allen Screenshots beim HERDT-Verlag. Sollte es trotz intensiver Recherche nicht gelungen sein, alle weiteren Rechteinhaber der verwendeten Quellen und Abbildungen zu finden, bitten wir um kurze Nachricht an die Redaktion. Die in diesem Buch und in den abgebildeten bzw. zum Download angebotenen Dateien genannten Personen und Organisationen, Adress- und Telekommunikationsangaben, Bankverbindungen etc. sind frei erfunden. Eventuelle Übereinstimmungen oder Ähnlichkeiten sind unbeabsichtigt und rein zufällig. Die Bildungsmedien des HERDT-Verlags enthalten Verweise auf Webseiten Dritter. Diese Webseiten unterliegen der Haftung der jeweiligen Betreiber, wir haben keinerlei Einfluss auf die Gestaltung und die Inhalte dieser Webseiten. Bei der Bucherstellung haben wir die fremden Inhalte daraufhin überprüft, ob etwaige Rechtsverstöße bestehen. Zu diesem Zeitpunkt waren keine Rechtsverstöße ersichtlich. Wir werden bei Kenntnis von Rechtsverstößen jedoch umgehend die entsprechenden Internetadressen aus dem Buch entfernen. Die in den Bildungsmedien des HERDT-Verlags vorhandenen Internetadressen waren zum Zeitpunkt der Erstellung der jeweiligen Produkte gültig. Sollten Sie die Inhalte nicht mehr unter den angegebenen Adressen finden, sind diese eventuell inzwischen komplett aus dem Internet genommen worden oder unter einer neuen Adresse zu finden. Bildquellenverzeichnis Seite 7 LAN-Party, © iStock/Matej Michelizza Seite 12 Set of solid state drives (SSD), © iStock/Oleksiy Mark Seite 25 young couple with a laptop, © iStock/Alex Raths Seite 32 the sheet of paper with the hole against the black background, © Fotolia/Pavel Losevsky Seite 37 Zwei Frauen, © iStock/Alex Raths Seite 109, 149-150, 201-202, 206-207 Logo, © Thorsten Schwandt 2 Seite 122 Bungalow, © Pixabay – Public Domain Seite 152, 188, 193, 196, 198 Filmklappe, © Pixabay – Public Domain Seite 176 Kamel, © Pixabay – Public Domain Seite 181 Monitor, Fernbedienung, © Pixabay – Public Domain Seite 208-211 Drei Häuser, © Pixabay – Public Domain Seite 210 Call center operator, © Fotolia/Kurhan © HERDT-Verlag 4 Grundlagen der objektorientierten ­ Modellierung und Programmierung Einstiegssituation Die remoTec GmbH aus Münster stellt moderne Fernbedienungen für Geräte aller Art her. Das Unternehmen hat in den vergangenen Jahren aufgrund sehr erfolgreicher Produktinnovationen schnell expandiert. Bislang lässt Clemens Funkel, der Geschäftsführer der remoTec GmbH, die Buchhaltung von einem Steuerberater vornehmen. Eingangsrechnungen von Lieferanten werden von einem Sachbearbeiter der remoTec GmbH geprüft und bezahlt. Ein anderer Sachbearbeiter schreibt die Ausgangsrechnungen und überwacht deren ­Bezahlung. Alle so anfallenden Belege werden quartalsweise zum Steuerberater gebracht. Dieser erstellt damit einen ordnungsgemäßen Jahresabschluss für das Unternehmen, der ­insbesondere aus der Bilanz und der Gewinn-und-Verlust-Rechnung besteht. Anfangs war Clemens Funkel mit dieser Situation auch zufrieden, doch seit einiger Zeit benötigt er für wichtige Entscheidungen immer kurzfristigere Auswertungen. Das Honorar, das sein Steuerberater für monatliche Auswertungen im gewünschten Umfang verlangt, empfindet Herr Funkel als zu hoch. Seit dem vergangenen Jahr arbeitet Nadine Stöppler nach ihrem erfolgreichen Studium der Betriebswirtschaftslehre mit den Schwerpunkten Rechnungswesen und Controlling für die remoTec GmbH. Sie soll nun eine unternehmensinterne Finanzbuchhaltung sowie ein darauf aufbauendes Controlling einführen. In einer Besprechung zwischen Herrn Funkel, Frau Stöppler und Herrn Rudnik, dem Leiter der Informatik­abteilung, wird die dazu notwendige Anschaffung neuer Software diskutiert. Herr ­Rudnik 4 Objektorientierte Modellierung und Programmierung erklärt, dass seine Abteilung nicht über die Kompetenzen zur Erstellung eines derart komplexen ­Programms verfügt. Daraufhin wird das Pro und Kontra von Individual- und Standardsoftware diskutiert. Am Ende des Meetings wird beschlossen, ein IT-Unternehmen damit zu beauftragen, ein an die Besonderheiten der remoTec GmbH angepasstes Buchhaltungssystem zu entwickeln. Herr Rudnik soll Angebote für ein solches System einholen. 4.1 Objektorientierte Analyse und Design 4.1.1 Software entwickeln Softwareentwicklung ist heute weit mehr als bloßes Programmieren. Zwar kann ein einzelner Programmierer in wenigen Tagen ein „kleines“ Programm wie z. B. ein Handy-Spiel oder eine Adressverwaltung programmieren. Heutige Softwaresysteme in Unternehmen sind aller­dings meist keine separaten Programme mehr, die auf einem einzelnen Computer ablaufen, sondern bestehen vielmehr aus Dutzenden einzelner Programmkomponenten, die auf verschiedenen, auch räumlich voneinander getrennten Computern ablaufen. Mit solch ­einem Softwaresystem arbeiten unter Umständen Hunderte von Mitarbeitern gleichzeitig, per ­Inter- oder Intranet verbunden, über Länder- und Kontinentgrenzen hinweg. Ferner müssen ­Softwaresysteme heute in der Lage sein, weitgehend autonom mit den Softwaresystemen anderer Unternehmen zu kommunizieren. Beispiel: In unserem Eingangsbeispiel wäre es beispielsweise wünschenswert, wenn die Sachbearbeiter der Verkaufsabteilung automatisch benachrichtigt werden würden, wenn das Zahlungsziel für die Ausgangsrechnung eines Kunden erreicht bzw. überschritten wurde. Ein weiterer Aspekt ist, dass komplexe Softwaresysteme heute von einem einzelnen Entwickler innerhalb eines Menschenlebens gar nicht mehr fertiggestellt werden können – einfach weil die Programmierarbeit zu umfangreich ist. Aber wo mehrere Menschen zusammen an einer Sache arbeiten, muss sichergestellt sein, dass jeder genau weiß, was er wie zu tun hat, damit die Ergebnisse am Ende zusammenpassen. Handlungsauftrag Recherchieren Sie im Internet eine Definition für den Begriff „Projekt“. Prüfen Sie anhand der in Ihrer Definition aufgeführten Projektmerkmale, ob es sich bei dem in der Einstiegssituation geschilderten Vorhaben um ein Projekt handelt. Damit dies möglichst reibungslos funktioniert, wird ein Softwareentwicklungsprozess in mehrere Phasen unterteilt: sehr grob in eine Planungs- und eine Entwicklungsphase. Die Planer recherchieren vor Ort, sprechen mit Angestellten des Kunden, analysieren Arbeitsabläufe und formulieren daraus Anforderungen an die Software, erstellen ein Pflichtenheft und letztendlich ein Modell des Programms. Auf Grundlage dieses Modells programmieren die Entwickler anschließend die einzelnen Komponenten. Hierbei brauchen Planer und Entwick- 110 © HERDT-Verlag Objektorientierte Analyse und Design ler sich nicht einmal zu kennen. Das funktioniert so gut, dass für die kontinenteübergreifende Softwareentwicklung ein eigener Begriff entstanden ist: Offshore Development. Europäische Softwareunternehmen analysieren und modellieren Projekte für europäische Kunden und lassen diese dann z. B. in Indien kostengünstig programmieren. Die in der Modellierungs­ phase eingesetzten Software-Architekten brauchen für die Planung detaillierte und fundierte Kenntnisse der Analyse- und Modellierungstechniken sowie ein zumindest rudimentäres Verständnis der eingesetzten Programmiertechniken. Bei den Programmierern ist es umgekehrt: Sie interessiert nicht, wie ein Modell zustande gekommen ist, sondern lediglich, wie es konkret umzusetzen ist. Merke Am Anfang eines komplexen Softwareentwicklungsprozesses steht die Analyse der zu bewerkstelligenden Aufgaben und die sich daran anschließende Entwicklung eines Modells. Handlungsauftrag Recherchieren Sie im Internet in der Praxis eingesetzte Phasenmodelle der Software­ entwicklung. Diskutieren Sie, welches Phasenmodell in der Einstiegssituation sinn­ vollerweise eingesetzt werden kann. 4.1.2 Maschinen- und Hochsprache unterscheiden Bevor die Analyse und das Design des Projektes eingehender betrachtet werden, stehen ­zunächst grundsätzliche Gedanken zum Thema Computer und Software an. Am Ende eines jeden Softwareentwicklungsprozesses steht ein fertiges Programm, das von einem Mikroprozessor (CPU) ausgeführt wird. Inzwischen gibt es Tausende verschiedener ­Prozessoren, die aber alle eines gemeinsam haben: Sie verstehen die in Programmen enthaltenen Befehle nur in der sogenannten Maschinensprache. Dabei spricht jeder ­Prozessortyp seinen eigenen „Dialekt“. Ein Programm in Maschinensprache, das auf Prozessor A läuft, ­verweigert auf jedem anderen Prozessortyp den Dienst. Der am weitesten verbreitete Dialekt ist die ­32-Bit-x86-Architektur des Unternehmens lntelTM. In so gut wie jedem PC steckt ein ­Prozessor, der x86-Maschinen­programme ausführen kann. Programmieren in Maschinensprache heißt, „die Bits einzeln durch den Computer zu schieben“. Das bedeutet, dass schon für kleinere Aufgaben der Programmcode sehr umfangreich und undurchsichtig wird. Daher entstanden bereits sehr früh sogenannte Hochsprachen. Hochsprachen sind Programmiersprachen, deren Code man fast wie einen richtigen Text lesen kann. Eine noch sehr stark an der ­Maschinensprache ­orientierte Sprache ist Assembler. Aber auch wenn es sich bei Assembler nicht um einen ­reinen Maschinencode handelt, ist der Code für Außenstehende kaum zu lesen: org 100h mov ax, cs mov ds, ax mov ah, 09h mov dx, out int 21h mov ax, 4C00h int 21h out: db ”Hallo Welt!” db ”$” © HERDT-Verlag 111 4 Objektorientierte Modellierung und Programmierung Dieses kleine Programm tut nichts anderes, als „Hallo Welt!“ am Bildschirm auszugeben. In der frühen Hochsprache BASIC besteht dieses Programm dagegen aus nur einer einzigen Zeile: 10 PRINT ”Hallo Welt!” Ein Computerprozessor kann ein in einer Hochsprache geschriebenes Programm nicht unmittelbar verstehen. Die Anweisungen müssen deshalb erst in Maschinensprache übersetzt ­werden, bevor der Prozessor sie ausführen kann. Dies kann grundsätzlich auf zwei Arten erfolgen: 1. Die Übersetzung erfolgt erst, während das Programm abläuft, und findet bei jedem ­Programmstart erneut statt. 2. Die Übersetzung findet vollständig vor dem ersten Ausführen des Programms statt. Code in Hochsprache Code in Hochsprache Code wird übersetzt und ausgeführt Programmstart Kompilierung Programmstart Maschinencode wird ausgeführt Bei einer Compilersprache wird vor dem ersten Ausführen eines Programms der komplette Code der Hochsprache in Maschinencode übersetzt. Diesen Vorgang nennt man Kompilierung und den„Übersetzer“ den Compiler. Bei der Übersetzung eines zeitgleich ablaufenden Programms spricht man davon, dass die Programmiersprache interpretiert wird. Die betroffenen Sprachen heißen Interpretersprachen. Bei einer interpretierten Hochsprache wird jedes Mal, wenn das Programm ausgeführt wird, vom Interpreter ein Maschinencode erzeugt, den der Prozessor dann direkt ausführt. Dabei wird nicht gleich der komplette Programmcode übersetzt, sondern immer nur der Befehl, der als nächster ausgeführt wird. Inzwischen haben sich andere Verfahren etabliert, die zwischen den beiden grundlegenden Varianten anzusiedeln sind. Interpreter Compiler BASIC C Perl C++ Python Pascal / Delphi PHP Fortran JavaScript Modula2 Wikipedia listet inzwischen über 300 Hoch­ sprachen auf. Die tatsächliche Anzahl dürfte weit höher liegen. Dabei haben sich vier grundsätzlich ­verschiedene Ansätze entwickelt, die man als Programmier­paradigmen bezeichnet: die imperativ prozedurale, die logische und die funktionale, die objektorientierte Programmierung. Jede Programmiersprache folgt zumindest einem dieser Paradigmen. Im Prinzip kann man in jeder Sprache, egal welchem Paradigma sie folgt, dieselben Probleme lösen, allerdings unterschiedlich effizient. Wofür man in der einen Sprache bloß wenige Zeilen Code braucht, sind in einer anderen seitenlange, kaum zu durchschauende Befehlsabfolgen nötig. 112 © HERDT-Verlag Objektorientierte Analyse und Design Die Programmiersprache Java Seit 1991 entwickelt das Unternehmen Firma Sun Microsystems eine plattformunabhängige und objekt­orientierte Hochsprache mit dem anfänglichen Namen Oak. ­Plattformunabhängig bedeutet, dass ein einmal geschriebenes Programm im Prinzip auf vielen unterschiedlichen Computer­systemen lauffähig ist. Für die rasante Verbreitung der 1994 in Java (inspiriert von einer Kaffeesorte und nicht zu verwechseln mit JavaScript) umbenannten Hochsprache hat letztlich die sehr rasche Ausbreitung des World Wide Web gesorgt. JVM für Linux Code in Hochsprache wird kompiliert Bytecode JVM für Windows JVM für Mac OS X Der 1994 entwickelte Browser WebRunner war der erste, der kleine Java-Programme, sogenannte Applets, aus dem WWW laden und ausführen konnte. Wenig später beherrschten auch die Konkurrenten Netscape und Internet Explorer diese Technik. Grund für die zügige Verbreitung ist die Art und Weise, in der Sun das Problem der Plattformunabhängigkeit gelöst hatte. Um zu verhindern, dass ein Java-Programm für jede Prozessor- bzw. Betriebs­ system-Architektur neu kompiliert werden muss, hat Sun Java als Mischung aus Compilerund Interpretersprache entworfen: Wird ein Java-Programm kompiliert, entsteht erst eine Vorstufe zum Maschinencode, der sogenannte Bytecode. Merke Egal auf welcher Plattform man ein Java-Programm kompiliert, der entstehende ­Bytecode ist immer identisch und kann dann ohne weitere Änderungen auf anderen Plattformen verwendet werden. Zum Ausführen des Bytecodes kommt dann ein plattformabhängiger Interpreter zum ­Einsatz, den man Java Virtual Machine (JVM) nennt. Echte JVMs gibt es unter anderem für die Plattformen Linux, Solaris, Windows und Mac OS X. Sun entwickelt seit Längerem zusätzlich abgespeckte JVMs mit einem verringerten Funktionsumfang und geringeren Hardware­ anforderungen, sodass Java auch auf Geräten wie Handys, PDAs, Fernsehgeräten oder sogar Waschmaschinen lauffähig ist. Java teilt sich seit geraumer Zeit mit C die ersten beiden Plätze des „TIOBE Programming Community Index“1. Suns Programmiersprache wird also so schnell nicht an Bedeutung ­verlieren. 1 http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html, 11.12.2012 © HERDT-Verlag 113 4 Objektorientierte Modellierung und Programmierung 4.1.3 Objektorientiert vorgehen In den 80er-Jahren begannen Wissenschaftler, Probleme bereits in der Planungsphase mit objektorientierten Methoden anzugehen. Das hieraus entwickelte Paradigma der objektorientierten Programmierung hat sich so weit durchgesetzt, dass heute im Unternehmensbereich fast ausschließlich objektorientiert entwickelt bzw. programmiert wird. Die Vorgehensweise lässt sich dabei grob in drei Schritte unterteilen: Kundenauftrag OOA OOD OOP objektorientierte Analyse objektorientiertes Design objektorientierte Programmierung Die objektorientierte Analyse Während der ersten Phase, der objektorientierten Analyse, muss so viel wie möglich über das zu realisierende Projekt in Erfahrung gebracht werden. Dies geschieht meist direkt vor Ort beim Kunden. Der Ablauf ist grundsätzlich folgender: 1. Der Kunde muss zunächst detailliert darlegen, was die in Auftrag gegebene Software leisten soll. 2. Danach wird untersucht, welche Geschäftsprozesse wie und in welchem Umfang betroffen sind. 3. Anschließend betrachtet man die Situation aus der objektorientierten Sicht – man reduziert die Realität objektorientiert, d. h., im Unternehmen werden die Objekte, Klassen und deren Eigenschaften identifiziert. Im nächsten Schritt untersucht man die Beziehungen zwischen den Objekten bzw. Klassen. Das kann noch auf dem Papier geschehen. Es gibt keine vorgeschriebene Norm, wie diese Modellbildung zu erfolgen hat, es ist nur wichtig, dass der Kunde diesen Vorgang versteht und ihn nachvollziehen kann. Das objektorientierte Design Im nächsten Schritt, dem objektorientierten Design, wird, resultierend aus den Überlegungen im Rahmen der OOA, das konkrete Modell erstellt. Die Modellbildung ist immer eine Vereinfachung der Realität, „damit man das System verstehen kann, bevor man es gebaut hat“2. Hierbei hat sich in den letzten Jahren die sogenannte Unified Modeling Language, kurz UML, etabliert. Die UML legt für die Modellierung wichtige Begriffe fest und schreibt dabei bestimmte grafische Notationen vor. Merke Die UML stellt eine Zeichensprache zur Modellierung konkreter Abläufe mit ­Klassen und Objekten und deren Beziehungen dar. Sie enthält keine Methode, in der eine Handlungsweise zur Erstellung von Modellen definiert ist. Das Grundprinzip besteht in der Erstellung von Diagrammen, die den zu modellierenden Prozess aus unterschiedlichen Sichtweisen beleuchten. Grundsätzlich könnte auch das OOD noch mit Stift und Papier erledigt werden, allerdings ist die UML so weit standardisiert, dass es zahllose Entwicklungstools gibt, die bereits beim Erstellen des Modells automatisch Pro2 Frei nach James Rumbaugh in “The Unified Modeling Language User Guide“ (Addison-Wesley Object Technology Series), 1998. 114 © HERDT-Verlag Instrumente für die Strukturierung betrieblicher Aufgabenstellungen grammcode für verschiedene Hochsprachen generieren. Das beim OOD entstehende Modell kann ebenfalls von allen Beteiligten verstanden werden: Der Kunde kann z. B. Schwachstellen oder Auslassungen entdecken, der Programmierer hat eine verbindliche Vorlage, auf die er sich später beziehen kann. Die objektorientierte Programmierung In einem letzten Schritt entsteht aus dem Modell das Programm. Dabei spricht man von der Implementierung des Modells. Welche Hochsprache dabei zum Einsatz kommt, ist von nachrangiger Bedeutung. Zwar gibt es einige UML-Elemente, die nicht in jeder Hochsprache zur Verfügung stehen. Da man die verwendete Hochsprache aber bereits im Vorfeld festlegt, ist dieses Problem zu vernachlässigen. Die meisten Modellierungstools sind bereits an eine bestimmte Hochsprache gebunden und lassen es während des OOD erst gar nicht zu, dass Sachverhalte modelliert werden, die später nicht programmiert werden können. Ein ­derart detailliertes Modell ermöglicht es, dass mehrere Programmierer weitgehend unabhängig voneinander an einem Projekt arbeiten – solange sie sich an die Vorgaben halten, sollte der Code anschließend zusammenpassen. Aufgaben 1 Recherchieren Sie verbreitete Interpreter- und Compilersprachen. Welche Sprachen ­kommen in welchen Bereichen zum Einsatz? 2 Finden Sie heraus, ob Ihr Handy Java-Programme, sogenannte MIDlets, ausführen kann. Wo kommt Java noch zum Einsatz? 4.2 Instrumente für die Strukturierung betrieblicher Aufgabenstellungen 4.2.1 Die Modellierungssprache UML kennenlernen Die Unified Modeling Language (UML) ist eine „grafische Sprache“ zur Modellierung, Visualisierung und Dokumentation komplexer Softwaresysteme. Sie wird seit Beginn der 90er-Jahre von der Object Management Group (OMG), einem Konsortium aus verschiedenen Unternehmen des IT-Bereichs, entwickelt. Die Sprache wird fortlaufend weiterentwickelt. Diesem Buch liegt die UML2 zugrunde. Die UML vereint mehrere unterschiedliche Modellierungskonzepte in Form unterschiedlicher Diagrammtypen und baut dabei konsequent auf den Prinzipien der Objektorientierung auf. UML-Modelle können in sämtlichen Phasen des Softwareentwicklungsprozesses eingesetzt werden. Ein UML-Modell besteht aus mehreren Diagrammen. Jedes Diagramm stellt eine ­spezielle Sicht auf das betrachtete Softwaresystem dar. Die einzelnen Diagramme stellen meist nur ­einen Teil der im gesamten Modell enthaltenen Informationen dar. Einzelne Elemente eines Modells können im Modell auch mehrfach, also in unterschiedlichen Diagrammen vorkommen. Die verschiedenen Diagrammtypen der UML lassen sich in die Kategorien Struktur- und Verhaltensdiagramme sowie Interaktionsdiagramme unterteilen. Die nachfolgende Übersicht in Anlehnung an ein Klassendiagramm zeigt sämtliche UML-Diagrammtypen. © HERDT-Verlag 115 4 ObjektorientierteModellierungundProgrammierung Die hellblau hinterlegten Diagrammtypen werden im Verlaufe dieses Buches in Grundzügen erläutert. Im Folgeband wird darüber hinaus auch auf das Sequenzdiagramm eingegangen. Tipp DiaPortable_ 0.97.2.paf.exe Im Internet finden Sie eine Vielzahl kostenloser Tools zur Erstellung von UML-Diagrammen. Die in diesem Kapitel dargestellten UML-Diagramme wurden z. B. mit dem Freeware-Tool Dia erstellt. 4.2.2 Ein Anwendungsfalldiagramm entwickeln Herr Rudnik, der Leiter der Informatikabteilung der remoTec GmbH, hat sich mit der SoftSolution GmbH aus Lüdinghausen in Verbindung gesetzt. Das Unternehmen hat sich auf die individuelle Entwicklung von Unternehmenssoftware für mittelständische Unternehmen spezialisiert und hat sehr gute Referenzen in diesem Bereich. Die Systemarchitektin der SoftSolution GmbH, Birte Nederkorn, möchte sich zunächst einmal in einem gemeinsamen Gespräch mit den Sachbearbeitern der remoTec GmbH einen Überblick über die benötigten Grundfunktionen der zu entwickelnden Buchhaltungssoftware verschaffen. Vorab wird vereinbart, dass das Programm zunächst nur die finanzbuchhalterische Buchung der Belege ermöglichen soll, weitere Funktionen sollen erst später integriert werden. Das Anwendungsfalldiagramm gehört zur Gruppe der UML-Diagramme. Es stellt die Benutzer und die groben Funktionen eines Softwaresystems sowie deren Beziehungen zueinander dar. Ziel eines Anwendungsfalldiagramms ist es, möglichst einfach zu zeigen, was mit dem zu entwickelnden Softwaresystem gemacht werden kann, welche Anwendungsfälle es also gibt. 116 System x Anwendungsfall 1 Akteur 1 Anwendungsfall 2 Anwendungsfall 3 Akteur 2 © HERDT-Verlag AllgemeineGrundlagender Java-Programmierung 4.5.3 Das Prinzip der Sichtbarkeit und Kapselung beachten Um Objekte vor unerlaubten Zugriffen von außen zu schützen, verwendet man in objektorientierten Programmen das Prinzip der Kapselung. Bei dieser Datenkapselung werden die Attributwerte von Objekten nach außen hin verborgen. Der Zugriff auf die Objekte bzw. deren Attributwerte erfolgt ausschließlich über die dazu freigegebenen Methoden der entsprechenden Klasse. Diese Kapselung lässt jedes Objekt wie eine Blackbox erscheinen. Das Innere dieser Box ist vor Blicken und direkten Eingriffen von außen geschützt; es gibt jedoch Steuerelemente, die dem Anwender die Möglichkeit geben, die Box zu verwenden. Dieses Blackbox-Prinzip kann man gut anhand eines Fernsehgeräts veranschaulichen: Man steuert das Gerät über eine Fernbedienung anhand vorgegebener Funktionen, ohne jedoch einen Einblick in die internen Abläufe und die Eigenschaften des Geräts zu haben. Beispiel: Kapselung der Attributwerte eines Aktivkontos Gegeben sei ein Objekt der Klasse Aktivkonto. Am Jahresanfang wird der Anfangsbestand mit dem Ergebnis der Inventur abgestimmt und gegebenenfalls korrigiert. Da gemäß dem Prinzip der Kapselung nicht direkt auf die Attributwerte zugegriffen werden kann, müssen dazu die Methoden der Klasse verwendet werden. Mithilfe der Methode getAnfangsbestand() kann der Anfangsbestand ausgelesen und mit der Methode setAnfangsbestand()verändert werden. Das Objekt kapselt seine Attributwerte durch seine Methoden. Die folgende Abbildung veranschaulicht diese „Datenkapsel“. getKontoNr() getKontoBezeichnung() setSummeHabenbuchungen() getSummeHabenbuchungen() setSummeSollbuchungen() kontoNr: 2010 kontoBezeichnung: Vorprodukte anfangsbestand: 5.000,00 summeSollbuchungen: 0,00 summeHabenbuchungen: 0,00 getSummeSollbuchungen() © HERDT-Verlag setKontoNr() setKontoBezeichnung() getAnfangsbestand() setAnfangsbestand() 181 4 Objektorientierte Modellierung und Programmierung Die konsequente Umsetzung dieses Prinzips im Java-Quellcode erkennen Sie im folgenden Ausschnitt der Klasse Aktivkonto.java. public class Aktivkonto { private private private private private Die Attribute ­wurden mit dem Zugriffs­ modifizierer private versehen. Dadurch können sie nur innerhalb dieser Klasse direkt verändert werden. int kontoNr; String kontoBezeichnung; double anfangsbestand; double summeSollbuchungen; double summeHabenbuchungen; (…) public double getAnfangsbestand() { return anfangsbestand; } Von außen kann auf die Attribute nur über die Getter und Setter zugegriffen werden, da diese public sind. public void setAnfangsbestand(double anfangsbestand) { this.anfangsbestand = anfangsbestand; } } (…) Merke Für Attribute einer Klasse sollte grundsätzlich der Zugriffsmodifizierer private, für die get- und set-Methoden public gewählt werden. Um die Funktionsweise dieses Prinzips innerhalb eines Java-Projekts noch besser verstehen zu können, muss noch eine zentrale Frage geklärt werden: Was heißt in diesem Zusammenhang eigentlich „Zugriff von außen“ bzw. „Zugriff von innen“? Hierbei handelt es sich um eine klassenbezogene Sichtweise. Methoden können stets auf die in ihrer eigenen Klasse ­deklarierten Attribute und Variablen zugreifen, um deren Werte z. B. für Berechnungen zu verwenden. Dies ist ein Zugriff von innen. Ein konkretes Beispiel dafür ist die Methode berechneSaldo() in der Klasse Aktivkonto. java des remoTec-Projekts, die u. a. auf das Attribut summeHabenbuchungen zugreift. Dieses ist zwar durch den Zugriffsmodifizierer private nach außen geschützt, der Zugriff aus einer Methode der eigenen Klasse ist jedoch möglich. Im Gegensatz dazu kann von der Klasse StartGUI.java aus nicht direkt auf die ­Attribute ­ ines Objekts zugegriffen werden. Dies wäre ein Zugriff von außen. Ein solcher direkter e ­Zugriffsversuch, z. B. auf den Wert des Attributs kontoNr, führt zu einer Fehlermeldung. Die Fehlermeldung besagt, dass der Zugriff (engl. access) auf das Attribut kontoNr in der Klasse Aktivkonto private und somit an dieser Stelle nicht möglich ist. Verwendet man hier jedoch die dafür vorgesehene set-Methode, erscheint keine Fehlermeldung. 182 © HERDT-Verlag Allgemeine Grundlagen der ­ Java-Programmierung Die folgende Tabelle veranschaulicht, aus welcher Klasse bei welchem Z ­ ugriffsmodifizierer auf ein Attribut oder auf eine Methode zugegriffen private werden kann. Da es in Java noch weitere public ­Zugriffsmodifizierer gibt, wird diese Tabelle an späterer Stelle noch erweitert. Eigene Klasse Fremde Klasse Zugriff kein Zugriff Zugriff Zugriff Handlungsauftrag Stellen Sie den obigen Fehler in Ihrem remoTec-Projekt nach. Versuchen Sie also einen direkten Zugriff aus der Klasse StartGUI.java auf einen Attributwert eines ­Aktiv­kontos. Was müssten Sie in der Klasse Aktivkonto.java ändern, damit diese Fehlermeldung verschwindet? Erklären Sie, warum diese kleine Änderung dem Prinzip der Kapselung widerspricht. Das Prinzip der Kapselung im Klassendiagramm darstellen Wie zuvor bei den Datentypen bietet die UML auch für die Zugriffsmodifizierer von ­Attributen und Methoden eine Möglichkeit für deren Darstellung in Klassendiagrammen. Dazu wird vor den Attributen bzw. Methoden jeweils ein Minuszeichen für private oder ein Pluszeichen für p ­ ublic gesetzt. Auch diese Ergänzung soll wiederum anhand des aktualisierten Klassendiagramms der Klasse Aktivkonto.java veranschaulicht werden. Aktivkonto - kontoNr: int - kontoBezeichnung: String - anfangsbestand: double - summeSollbuchungen: double - summeHabenbuchungen: double + Aktivkonto() + Aktivkonto(kontoNr:int,kontoBezeichnung:String,anfangsbestand:double) + Aktivkonto(kontoNr:int,kontoBezeichnung:String) + getKontoNr(): int + setKontoNr(kontoNr:int): void + getKontoBezeichnung(): String + setKontoBezeichnung(kontoBezeichnung:String): void + getAnfangsbestand(): double + setAnfangsbestand(anfangsbestand:double): void + getSummeSollbuchungen(): double + setSummeSollbuchungen(summeSollbuchungen:double): void + getSummeHabenbuchungen(): double + setSummeHabenbuchungen(summeHabenbuchungen:double): void + berechneKontosumme(): double + berechneSaldo(): double + toString(): String © HERDT-Verlag 183