Objektorientierte Programmierung (OOP) 1. Strukturiert versus objektorientiert Strukturierte Programmierung lässt sich mit folgenden Stichworten charakterisieren: hierarchische Programmorganisation, logische Programmeinheiten, zentrale Programmsteuerung. Ziel der strukturierten Programmierung ist es, Algorithmen so darzustellen, dass ihr Ablauf einfach zu erfassen und zu verändern ist. Objektorientierte Programmierung ist ein Denkmuster, bei dem Programme als Menge über Nachrichten kooperierenden Objekten organisiert werden und jedes Objekt Instanz einer Klasse ist. Die OOP greift die menschliche Denkweise auf, indem sie reale Objekte aus der Umwelt identifiziert und in ihrer Art beschreibt. Objektorientierte Programmierung 2. Grundbegriffe der OOP Objekt, Klasse, Instanz Unter einem Objekt versteht man die Zusammenfassung (Kapselung) von Daten und zugehörigen Funktionalitäten. Objekte sind ganz allgemein Dinge, die im Programm beschrieben werden und eine logische Einheit von Eigenschaften, Methoden und Ereignissen bilden. Eine Klasse ist ein Bauplan, auf dessen Grundlage die entsprechenden Objekte zur Programmlaufzeit erzeugt werden. Beispiel: Typische Objekte einer betriebswirtschaftlichen Software sind Bestellungen, Aufträge, Artikel, Kunden, usw. Da in der künftigen Anwendung nicht nur eine Bestellung ausgeführt werden soll ist es sinnvoll festzulegen, wie eine Bestellung im Allgemeinen aussehen soll. Dies ist der erste Schritt bei der OOP. Das Aussehen aller vorkommender Objekte wird in Form eines Planes festgelegt. Diese Pläne nennt man dann Klassen. Eine Klasse ist der Bauplan für ein Objekt, in dem Eigenschaften (Merkmale, Daten) und Methoden (Fähigkeiten, Funktionen) definiert werden. Objektorientierte Programmierung 2. Grundbegriffe der OOP In einer Klasse legt man fest, welche Eigenschaften das Objekt hat. Für eine Bestellung könnten das folgende Eigenschaften sein: •Bestellnummer •Bestellwert •Bestelldatum •Rabatt •…. Außerdem sollen die Methoden der zukünftigen Objekte festgelegt werden. Für eine Bestellung könnte man folgende Methoden erwarten: •Bestellung ausdrucken •Rabatt ermitteln •… Bei einer Klasse handelt es sich nur um ein Konstrukt. Ein konkretes Objekt erhält man erst wenn man eine Instanz einer Klasse bildet. Bei jeder eingehenden Bestellung wird eine Instanz der Klasse Bestellung erzeugt. Während die Klasse die Eigenschaft Bestellnummer definiert, wird der konkrete Wert (11429,11430, …) erst beim Erzeugen des Objekts ( der Instanz) zugewiesen. Objektorientierte Programmierung 2. Grundbegriffe der OOP Definition einer Klasse in UML (Unified Modeling Language) Klassenname Eigenschaften Methoden Cbestellung bestellnr: date bestelldatum: date bestellwert: real rabatt: real gesamtbestellwert: real rabatt_berechnen() bestellwert_incl_rabatt() Objektorientierte Programmierung 2. Grundbegriffe der OOP Kapselung und Wiederverwendbarkeit Durch die Kapselung von Klassen werden die internen Daten und einige verborgene Methoden geschützt, sie sind also von außen nicht zugänglich. Die Veränderung des Objekts kann nur über streng definierte öffentliche Methoden erfolgen. Die Eigenschaften und Methoden werden in zwei Kategorien eingeteilt. Die einen sind von außen sichtbar und können verändert werden; die anderen stehen dagegen nur innerhalb der Klasse zur Verfügung. Unter Kapselung versteht man, dass eine Klasse definierte Schnittstellen zur Außenwelt hat. Nicht alle Eigenschaften und Methoden sind von außen sicht und nutzbar. Klassen ermöglichen die Wiederverwendbarkeit von Code. Nachdem eine Klasse geschrieben wurde, kann diese an verschiedenen Stellen innerhalb einer Applikation verwendet werden. Ändert sich etwas an der Rabattstaffelung der Lieferanten, muss dies nur in der Klasse cbestellung geändert werden. Die Änderung wird dann in allen Programmen wirksam, die mit Bestellungen arbeiten. Objektorientierte Programmierung 2. Grundbegriffe der OOP Vererbung und Polymorphie Klassen können Eigenschaften und Methoden vererben. Dabei wird eine Vererbungshierarchie gebildet. Die Unterklassen erben alle Eigenschaften und Methoden ihrer Oberklasse. Unterklassen können zu den geerbten Eigenschaften neue hinzufügen oder Eigenschaften der Oberklasse verstecken, indem sie diese überschreiben. Wenn ein und dieselbe Methode für verschiedene Objekte verwendet wird nennt man dies Polymorphie (Vielgestaltigkeit). Das Kerngeschäft des Unternehmens ist auf die Bestellung von Rohstoffen und Baumaterialien ausgerichtet. Jetzt soll aber die Klasse cbestellung auch zur Beschaffung von Verbrauchsmaterial (Briefumschläge, Papier, Schreibmaterial,…) verwendet werden soll. Dazu müsste noch die Eigenschaft Kostenstelle hinzugefügt werden. Standartbestellungen benötigen aber keine Eigenschaft Kostenstelle. Eine ganz neue Klasse zu kreieren ist sicherlich auch nicht sinnvoll, da viele Eigenschaften und Methoden deckungsgleich mit der Klasse cbestellung sind. Es wird die Klasse cverbrauchsbestellung abgeleitet. Objektorientierte Programmierung 2. Grundbegriffe der OOP Vererbung in UML Cbestellung bestellnr: date bestelldatum: date bestellwert: real rabatt: real gesamtbestellwert: real rabatt_berechnen() bestellwert_incl_rabatt() Cverbrauchsbestellung Kostenstelle : string rabatt_berechnen() Einstieg in Visual Studio Erster Überblick Über Datei -> Neues Projekt öffnet sich der Startdialog "Neues Projekt". Unter den dort aufgeführten Vorlagen für Visual C# Projekte wählen wir die WindowsForms-Anwendung. Es kann sich nun folgender Anblick bieten, fehlende Fenster können über Ansicht zusätzlich ausgewählt werden. Einstieg in Visual Studio Im Projektmappen-Explorer wird der Inhalt der Projekte übersichtlich dargestellt. Properties: Hier sind verschiedene Dateien zusammengefasst, die die Projekteigenschaften bestimmen. (Titel, Beschreibung, Versionsnummer, Copyright, Ressourcen, Projekteinstellungen). Verweise: Für das Projekt gültige Verweise und Namensräume. Form1.cs: Klasse, die den selbst zugefügten Code enthält. Form1.Designer.cd: Klasse, die vom Windows Forms Designer automatisch hinzugefügt wird. Program.cs: Klasse, die die Main-Methode enthält. Einstieg in Visual Studio Der Designer Im Designer – Fenster wird die Programmoberfläche der Anwendung entworfen. Aus der Toolbox werden die Steuerelemente mit Drag & Drop auf ein Formular übernommen. Einstieg in Visual Studio Das Eigenschaften- Fenster Dort werden die Eigenschaften des gerade aktiven Steuerelements aufgelistet. Aktiviert wird ein Steuerelement entweder durch Anklicken auf dem Formular, oder durch Auswahl in der Klappbox am oberen Rand des Eigenschaften- Fensters. Einstieg in Visual Studio Das Codefenster Für die eigentliche Programmierung ist das Codefenster zuständig. Der Code-Editor unterstützt auf das Schreiben von Quellcode, indem er Wörter farblich markiert, Vorschläge unterbreitet (Intellisense), auf Fehler hinweist und Text automatisch einrückt. Einstieg in Visual C# Windows Forms- Anwendung Maximumsbestimmung von drei Integer Zahlen Starten Sie Visual Studio und öffnen Sie ein neues Projekt (Vorlage "Windows Forms – Anwendung). Geben Sie als Namen Maximum ein. Mit F4 holen Sie sich das Eigenschaftenfenster in den Vordergrund und stellen damit die Text- Eigenschaft des Startformulars Form1 neu ein: "Maximum von drei Zahlen". Von der Toolbox ziehen Sie die Steuerelemente ( 3mal TextBox, 1 mal Button, 4 mal Label) gemäß folgender Abbildung auf Form1 und stellen auch hier bestimmte Text Eigenschaften neu ein: Einstieg in Visual C# Windows Forms- Anwendung Programmierung Durch einen Doppelklick auf Maximum wird automatisch das Codefenster der Klasse Form1 mit dem bereits vorbereiteten Rahmencode des Click- Eventhandlers geöffnet. Einstieg in Visual C# Windows Forms- Anwendung Bemerkungen: Ein c# Programm besteht aus mindestens einer *.cs – Textdatei mit einer Klasse. Ein c# Programm beginnt mit der Main- Methode. Jedes c# Programm besteht aus einer Folge von Anweisungen. Jede c# Anweisung wird mit einem Semikolon abgeschlossen. Die using Anweisungen zu Beginn des Programms definieren verschiedene Namespaces und erleichtern den Zugriff auf einige wichtige Klassenbibliotheken. Entsprechend der Aufgabenstellung wird der Eventhandler mit den erforderlichen Anweisungen gefüllt. Der try – catch – Block wird benötigt um Falscheingaben abzufangen. Einstieg in Visual C# Windows Forms- Anwendung Einstieg in Visual C# Windows Forms- Anwendung Kompilieren und starten können sie das Programm mit F5 oder über das kleine grüne Dreieck. Für die Eingabe der Zahlenwerte gibt es keine fest vorgegebene Reihenfolge. Die Werte sind in der Text Eigenschaft der Textboxen enthalten und müssen deshalb mit Hilfe der convert Klasse vom Datentyp String in den Integer- Datentyp umgewandelt werden. Die Ausgabe erfolgt umgekehrt mittels der bereits bekannten ToString Methode, deren Ergebnis der Text- Eigenschaft von label4 zugewiesen wird. Wird statt einer Ganzzahl eine andere Zeichenfolge eingegeben, erscheint folgende Fehlermeldung: Einstieg in Visual C# Windows Forms- Anwendung Erweitern Sie das Programm so, dass beliebig viele Zahlen eingegeben werden können. Eine TextBox dient zur Eingabe der Zahlen, die per Enter-Taste in eine ListBox übernommen werden sollen. Für die Eingabe sollen nicht nur ganze Zahlen, sondern auch Kommazahlen zulässig sein. In die Klasse Form1 ist folgender Code einzutragen. Einstieg in Visual C# Windows Forms- Anwendung Der folgende Event-Handler für das KeyUp- Ereignis von textBox1 überträgt dann den Eintrag nach listBox1, wenn die Enter-Taste gedrückt wird. Anschließend wird der Eintrag in der Textbox gelöscht, um für neue Zahleneingaben bereit zu sein. Der Rahmencode wird nicht von Hand eingegeben, sondern über die EreignisseSeite des Eigenschaftenfensters erzeugt. Einstieg in Visual C# Windows Forms- Anwendung Ein weiterer Event- Handler wertet das Click- Ereignis von Button1 aus. Der Inhalt der ListBox wird ausgelesen und in das Array kopiert. Da der erste Eintrag einer ListBox (genauso wie das erste Feld eines Arrays) immer den Index null hat, kann man das Kopieren mit einer for-Schleife erledigen. Einstieg in Visual C# Windows Forms- Anwendung Der letzte Event-Handler ermöglicht das Löschen der gesamten Zahlenreihe, um wieder von vorne beginnen zu können. Ergänze das Programm um die Berechnung des Minimums und des Durchschnitts. Einstieg in Visual C# Windows Forms- Anwendung