einführung in die objektorientierte programmierung · netbeans als ide objektorientierte...
TRANSCRIPT
Patrick Förster, Michael Hasseler
Programmieren in Java
Einführung in die objektorientierte Programmierung
Patrick Förster, Michael Hasseler
Übersicht der heutigen Inhalte
• Einführung in die objektorientierte Programmierung
• Objekt
• Klasse
• Attribute
• Konstruktor
• Methoden
• NetBeans 8.0 als Entwicklungsumgebung
2 Objektorientierte Programmierung
Patrick Förster, Michael Hasseler
3 Objektorientierte Programmierung
Einordnung in den Softwareentwicklungsprozess
Softwareentwicklung mit JAVA
Planung
Lastenheft
Pflichtenheft
Funktionsanalyse
Entwurf
Entwicklungs-umgebung
CASE-Tools
JRE
JDK
Betriebs-system
Programmierung
Methode
Imperativ
Entwurfsmuster (Pattern)
objektorientiert
Struktur
Objekte
Klassen
Felder/Attribute
Konstruktoren
Methoden
Interfaces
Annotationen Kontroll-strukturen
Bedingte Anweisung (if-then-else)
Schleifen (for-while)
Operatoren und Ausdrücke
Verzweigungen (switch)
Generics
Frameworks
Darstellung (GUI)
Datenaustausch (Services)
Sicherheit
Datenhaltung (I/O)
Bibliotheken
Test/Evaluation/Pflege
Debugging
Lasttests
Versionierung
Patrick Förster, Michael Hasseler
Motivation und Ziele
• Bisher: prozedurale Programmierung
• Anweisungen werden nach festgelegter Reihenfolge abgearbeitet
• Strukturierung durch Prozeduren und Funktionen
• Ziele:
• Abbildung von Problemen aus der „Natur“
• Wartbarkeit und Erweiterbarkeit herstellen
• Datenstrukturen in Programmlogik einbeziehen
• => Objektorientierte Programmierung
4 Objektorientierte Programmierung
Patrick Förster, Michael Hasseler
Definition und Begriffszusammenhänge
• Objekt: enthält zusammengehörige Attribute (Daten) und Methoden
(Anweisungen)
• Attribut: Dateneinheit ( z. B. eine Variable)
• Methode: Umsetzung der Objektfunktionalität
• Datenkapselung: Objekt von Außen nur durch seine (Attribute und) Methoden
sichtbar, Funktionalität ist gekapselt
5 Objektorientierte Programmierung
Objekt
Attribut1 Attribut2 Methode1 Methode2
Patrick Förster, Michael Hasseler
Klassen und Instanzen
• Klasse:
• Gruppierung von Objekten mit gleicher „Schablone“
• eine „Bauanleitung“ für Objekte
• wird vom Entwickler festgelegt
• Einzelnes Objekt:
• Instanz einer Klasse
• wird zur Laufzeit eines Programmes erzeugt
6 Objektorientierte Programmierung
Schuh String farbe;
int groesse;
String marke;
Boolean istLinkerSchuh;
schuh1 farbe = "blau";
groesse = 39;
marke = "Adidas";
istLinkerSchuh = true;
schuh2 farbe = "schwarz";
groesse = 45;
marke = "Nike";
istLinkerSchuh = false;
Klasse Instanz 2 Instanz 1
Patrick Förster, Michael Hasseler
Instanzen
• Bei der objektorientierten Programmierung wird nicht mit Klassen, sondern mit
Objekten gearbeitet. Diese müssen als Instanz ihrer Klasse erzeugt werden können.
• Klassentyp bezeichnet hier den Klassennamen, objVar ist der Name der
erzeugten Objektreferenz und new ist eine Klassenmethode von Object zum
Erzeugen von Objekten. Klassentyp() bezeichnet den Konstruktor der Klasse
Klassentyp der aufgerufen werden soll.
• Es muss darauf geachtet werden, dass eine Instanz erzeugt wird bevor über das
Attribut auf ein Element der Klasse zugegriffen wird.
7 Objektorientierte Programmierung
Klassentyp objVar = new Klassentyp();
Patrick Förster, Michael Hasseler
Kommunikation zwischen Objekten
• Zwischen verschiedenen Objekten muss es eine Möglichkeit zur Kommunikation
geben
• Attribute und Methoden müssen adressierbar sein
• Punktnotation zum Trennen von Objektname und Attribut/Methode
8 Objektorientierte Programmierung
Objekt1 Attribut1
Methode1
Objekt2 Attribut2
Methode2 Objekt2.Methode2(Argument)
Patrick Förster, Michael Hasseler
Klassen in Java
• Grundgerüst einer Klasse um Daten und Methoden in einem Datentyp zu kapseln
• Elemente einer Klasse sind Datenfelder, Konstruktoren und Methoden:
9 Objektorientierte Programmierung
public class Test { ELEMENTDEKLARATION ELEMENTDEKLARATION ELEMENTDEKLARATION … ELEMENTDEKLARATION }
// Datenfelder private int zahl1; private int zahl2;
// Konstruktor public Test(int param1, int param2) { this.zahl1 = param1; this.zahl2 = param2; }
// Methoden public int Summe() { return this.zahl1 + this.zahl2; } public int Produkt() { return this.zahl1 * this.zahl2; }
Patrick Förster, Michael Hasseler
Attribute/Felder/Daten
• Attribute sind die Datenelemente einer Klasse. Sie werden durch Angabe des Datentyps
und durch ihren Namen beschrieben.
• Hier sind u. a. folgende Zugriffsmodifizierer erlaubt:
• private: Ein Zugriff ist nur innerhalb der Klasse erlaubt
• public: Der Zugriff ist von überall her möglich
• Ein weiterer Modifizierer ist final:
• Konstantes Attribut dessen Anfangswert nicht mehr geändert werden kann
• Nach Konvention den Variablennamen von Konstanten komplett in Großbuchstaben
10 Objektorientierte Programmierung
public int feld1; private int feld2; private final int FELD3 = 5;
Patrick Förster, Michael Hasseler
Klassen- und Instanzvariablen
• statische Attribute werden mit static definiert.
• statische Attribute werden auch Klassenvariablen genannt.
• Bei der Instanziierung wird das statische Attribut nicht einem Objekt zugeordnet,
sondern der Klasse.
• Von einem statischen Attribut existiert immer nur eine Kopie.
• außer mit statischen Klassenmethoden kann man nur mittels des Klassennamens
auf statische Methoden zugreifen
• statische Attribute können benutzt werden ohne das ein Objekt der Klasse erzeugt
wurde
• Als Instanzvariablen werden alle nicht-statischen Attribute bezeichnet.
11 Objektorientierte Programmierung
private double radius; public final static double PI = 3.1415926;
Patrick Förster, Michael Hasseler
Aggregation und Komposition von Objekten
• Attribute können nicht nur primitive Datentypen sondern auch Klassen sein.
• Aggregation: Teilobjekte kann unabhängig vom Objekt existieren
• Komposition: Teilobjekt existiert nur, wenn auch das Objekt existiert
12 Objektorientierte Programmierung
public class Person { private String name; ... } public class Konto { private Person inhaber = new Person(); ... }
Patrick Förster, Michael Hasseler
Methoden
• Wurden bisher zwar schon verwendet, aber noch nicht als Methode einer Klasse
sondern eher als Funktion zum Strukturieren des Programmcodes
• Methoden enthalten Anweisungen und die bisher vorgestellten Sprachkonstrukte
• Methoden werden benutzt um den Zustand eines Objektes zu ändern oder um eine
Aufgabe des Objekts zu erledigen.
• Methoden können innerhalb anderer Methoden aufgerufen werden und können sich
auch selbst aufrufen (Rekursion)
• Syntax der Methodendefinition:
[Modifizierer] typDesRückgabewertes Methodenname([Parameter]) [throws] [<Exception-Liste>] • Hier sind u. a. folgende Zugriffsmodifizierer erlaubt:
• private: Ein Zugriff ist nur innerhalb der Klasse erlaubt
• public: Der Zugriff ist von überall her möglich
13 Objektorientierte Programmierung
Patrick Förster, Michael Hasseler
Rückgabewerte/Parameter
• Grundsätzlich kann man jeden Typ, also auch eine Klasse als Rückgabewert definieren
oder wenn keiner benötigt wird void.
• Rückgabe erfolgt mittels return-Anweisung
• Die return-Anweisung beendet auch die Ausführung der Methode
• Hinter dem return kann ein Wert oder ein ganzer Ausdruck stehen
• Parameter werden durch Kommata getrennt angegeben, zuerst der Typ des Parameters
dann der Name.
• Wenn Parameter elementare Datentypen sind wird durch die Manipulation der
Parameter in der Methode der Ausgangswert nicht geändert. Werden jedoch Objekte als
Parameter übergeben wirken sich Änderungen an den Parametern auch auf das
Ursprungsobjekt aus da nur eine Referenz übergeben wird.
14 Objektorientierte Programmierung
Patrick Förster, Michael Hasseler
Konstruktoren
• spezielle Methoden zum Initialisieren von Eigenschaften eines Objekts, die bei der
Erstellung verwendet werden.
• haben denselben Namen wie ihre Klasse.
• haben keine return-Anweisung, da sie beim Erstellen der Instanzen aufgerufen werden
und das Objekt selbst der Rückgabewert ist.
• unterscheiden sich untereinander durch unterschiedliche Parameteranzahl und/oder -
typen
• Wird in einer Klasse kein Konstruktor definiert, dann wird der Standardkonstruktor
verwendet, der keine Argumente hat.
15 Objektorientierte Programmierung
// Konstruktor 1 Test(int param1){ this.zahl1 = param1; }
// Konstruktor 2 Test(int param1, int param2){ this.zahl1 = param1; this.zahl2 = param2; }
Patrick Förster, Michael Hasseler
Beispiel: Klasse Kreis
16 Objektorientierte Programmierung
public class Kreis { public final static double PI = 3.1415926; private double radius; public double getRadius() { return this.radius; } public Kreis(double radius) { this.radius = radius; } public double getUmfang() { return 2 * Kreis.PI * this.getRadius(); } public double getFlaeche() { return Kreis.PI * this.getRadius() * this.getRadius(); } }
Patrick Förster, Michael Hasseler
Beispiel: Instanziierung der Klasse Kreis
17 Objektorientierte Programmierung
public class Geomeotrie { public static void main(String[] args) { Kreis kreis1 = new Kreis(1); Kreis kreis2 = new Kreis(20); System.out.print("Kreis 1 hat den Radius " + kreis1.getRadius() + ", "); System.out.print("die Fläche " + kreis1.getFlaeche()); System.out.println(" und den Umfang " + kreis1.getUmfang() + "."); System.out.print("Kreis 2 hat den Radius " + kreis2.getRadius() + ", "); System.out.print("die Fläche " + kreis2.getFlaeche()); System.out.println(" und den Umfang " + kreis2.getUmfang() + "."); }
run: Kreis 1 hat den Radius 1.0, die Fläche 3.1415926 und den Umfang 6.2831852. Kreis 2 hat den Radius 20.0, die Fläche 1256.63704 und den Umfang 125.663704. BUILD SUCCESSFUL (total time: 1 second)
Patrick Förster, Michael Hasseler
Integrierte Entwicklungsumgebung (IDE)
• Sammlung von Anwendungsprogrammen:
• Texteditor
• Compiler
• Debugger
• Quelltextformatierungsfunktionen
• …
• unterstützt den Entwickler bei der Softwareentwicklung
• für Java z. B.:
• Eclipse
• NetBeans
• IntelliJ
18 Objektorientierte Programmierung
vgl. http://de.wikipedia.org/wiki/Entwicklungsumgebung
Patrick Förster, Michael Hasseler
NetBeans-Projekt anlegen 1/3
• Im Programm NetBeans den Menüpunkt „File/New Project“ anklicken
19 Objektorientierte Programmierung
vgl. https://netbeans.org/kb/docs/java/quickstart.html
Patrick Förster, Michael Hasseler
NetBeans-Projekt anlegen 2/3
• Im Projektassistenten die Kategorie „Java“ und Projekt „Java Application“ auswählen
• Auf den Button „Next“ klicken
20 Objektorientierte Programmierung
Patrick Förster, Michael Hasseler
NetBeans-Projekt anlegen 3/3
• Den Projektnamen und ggf. den Speicherort angeben
• Auf den Button Finish klicken
21 Objektorientierte Programmierung
Patrick Förster, Michael Hasseler
NetBeans als IDE
22 Objektorientierte Programmierung
• Im Projekt-Fenster
wird das Projekt
hierarchisch
angezeigt. (blau)
• Der grüne Bereich
ist die Arbeitsfläche
für den Quellcode-
Editor
• Im pinken Bereich
ist das Navigator-
fenster, welches das
schnelle Auffinden der
Elemente untersützt.
• Ausgaben gibt es im
hellblauen Bereich.
Patrick Förster, Michael Hasseler
Neue Klasse anlegen 1/2
• Auf dem Paket mit der rechten Maustaste das Kontextmenü öffnen und den Menüpunkt
„New/Java Class“ anklicken
23 Objektorientierte Programmierung
Patrick Förster, Michael Hasseler
Neue Klasse anlegen 2/2
• Im Dialogfenster zum Anlegen einer neuen Klasse den Namen angeben und den Button
„Finish“ drücken.
24 Objektorientierte Programmierung
Patrick Förster, Michael Hasseler
Zusammenfassung
• Sie kennen den Unterschied zwischen Klassen und Instanzen
• Sie können eine Klasse in Java schreiben mit:
• Konstruktoren
• Attributen (Klassen- und Instanzvariablen)
• Konstanten
• Methoden
• Sie kennen die Bedeutung der Zugriffsmodifizierer:
• Attribute und Methoden: public, private
25 Objektorientierte Programmierung
Patrick Förster, Michael Hasseler
Aufgaben
1. Legen Sie ein Projekt Schuhbeispiel an.
2. Erstellen Sie eine Klasse Schuh mit den Attributen wie Sie in der
Vorlesungsfolie 6 angegeben wurde, wobei die Attribute private sein sollen.
a. Erstellen Sie einen Konstruktor mit allen Attributen als Parameter.
b. Erstellen Sie eine Methode ausgabe(), die z. B. folgenden String als
Rückgabe besitzt: rechter Schuh: schwarz, 45, Adidas
3. Erstellen Sie eine Klasse Schuhpaar.
a. Die Klasse soll zwei Attribute vom Typ Schuh mit den Namen linkerSchuh
und rechterSchuh besitzen. Entweder ist den Instanzvariablen ein Objekt
vom Typ Schuh zugewiesen oder der Defaultwert null.
b. Erstellen Sie einen Konstruktor, der zwei Schuhe als Parameter besitzt.
c. Implementieren Sie die Methode istVollstaendig(), welche True als Boolean
zurückgibt, wenn beide Schuhe vorhanden und gleiche Attributwerte haben.
26 Objektorientierte Programmierung
Patrick Förster, Michael Hasseler
Aufgaben
3. d. Die Methode ausgabe() soll z. B. folgende Ausgabe zurückgeben:
Schuhpaar: {linker Schuh: schwarz, 45, Adidas}, {rechter Schuh: schwarz, 45,
Adidas}
Tipp: Verwenden Sie hierfür den Aufruf der Methode ausgabe() von Schuh als
Teillösung.
Wenn ein Schuh fehlt, dann soll die Ausgabe bspw lauten:
Schuhpaar: {linker Schuh fehlt}, {rechter Schuh: schwarz, 45, Adidas}
4. Instanziieren Sie 3 Schuhpaar-Objekte in der Funktion main der Klasse
SchuhBeispiel und rufen Sie für die Objekte die Methode ausgabe() auf. Das erste
Objekt soll die Ausgabe von 3d mit den zwei Schuhen haben, das zweite Objekt die
Ausgabe von 3d mit dem fehlenden linken Schuh und das dritte Objekt soll als
Ausgabe haben:
Schuhpaar: {linker Schuh: blau, 39, Nike}, {rechter Schuh: blau, 40, Nike}
Zu allen drei Objekten in der main-Funktion soll ein Aufruf der Methode
istVollstaendig() erfolgen und dazu eine sinnvolle System.out.println-Meldung geben.
27 Objektorientierte Programmierung