Objektorientierte Programmierung Vertiefung - Javaaberndt/oojava/Vorlesung/1... · – Jedes Objekt...

Preview:

Citation preview

Willkommen zur Vorlesung

Objektorientierte Programmierung Vertiefung

- Java

Zum Dozenten

● Mein Name: Andreas Berndt

● Diplom-Informatiker (TU Darmstadt)

● Derzeit Software-Entwickler für Web-Applikationen

● Derzeitige Sprachen: Java, PHP, Ruby

Organisatorisches

● Vorlesung: Donnerstags, 11:45 – 13:15 Uhr

● Übung 1: Donnerstags, 10:00 – 11:30 Uhr

● Übung 2: Freitags, 10:00 – 11:30 Uhr

● Beide Übungen in Gebäude 1, Raum 250● Web-Seite:http://www.informatik.fb2.fh-

frankfurt.de/~aberndt/oojava

Inhalt der Vorlesung

● Erweitern der Erfahrung mit Objektorientierung auf eine andere Sprache (Java)

● Nutzen der Klassenbibliotheken● Nutzen von Interfaces● Erzeugen von eigenen Bibliotheken● Anwendung von oo-gesteuerten GUI-

Komponenten● Einführung in Software-Design

Vorlesung <-> Übung

● Die Inhalte der Vorlesung werden in der Übung vertieft

● Dabei wird besonders Augenmerk auf verteiltes Arbeiten und Teamwork gelegt

● Daher gibt es in der Übung keine Aufgaben (und somit auch keine Musterlösungen), sondern Projekte

● Zunächst gemeinsame Projekte, dann verteilte Projekte (Team A entwickelt etwas, was Team B benötigt)

Kurze Erinnerung an die OO-Basis

Grundzüge der Objekt-Orientierung

● Grundidee der OO ist eine softwaretechnische Abbildung der Realität

● Idee dahinter ist eine einfachere Verwaltung von Softwareprojekten

● Auch Qualitätssicherung spielt eine herausragende Rolle

● Ebenso die Wiederverwendbarkeit von Code und Modulen

Grundzüge der Objekt-Orientierung

● Abstraktion– Jedes Objekt kann als abstrakter Akteur

beschrieben werden– Dieser kann Aufträge erledigen, seinen

Zustand berichten und verändern und mit anderen Objekten kommunizieren

– Dabei müssen die Methoden dafür nach aussen nicht sichtbar sein

– Abstraktion wird durch das Prinzip der Klassen erreicht

Grundzüge der Objekt-Orientierung

● Abstraktion – Klassen– Ist die Beschreibung (Vorlage, Bauplan) für

die aus ihr erzeugten konkreten Objekte– Besitzt wie der ADT eine Datenstruktur– Besitzt darüber hinaus Methoden, zur

Manipulation dieser Datenstruktur– Hat die Möglichkeit durch bestimmte

Schlüsselworte seine Daten und Methoden nach aussen unsichtbar zu machen

Grundzüge der Objekt-Orientierung class Fahrzeug // Die Klasse "Fahrzeug" ist die Basisklasse. { public: virtual void bewegen() { std::cout << "Fahrzeug wird bewegt.\n"; } }; class Auto : public Fahrzeug { // Die Klasse "Auto" ist die abgeleitete Klasse. public: void bewegen() { std::cout << "Auto wird bewegt.\n"; } }; void aktion(Fahrzeug &f) { f.bewegen(); } int main() { Fahrzeug objekt1; Auto objekt2; objekt1.bewegen(); objekt2.bewegen(); aktion(objekt1); aktion(objekt2); return 0; }

Hier wird im Speicher ein Bereich erzeugt,in dem die Daten und Methoden der Klasse„Fahrzeug“ quasi „kopiert“ und mit dem Namen„objekt1“ versehen werden.

Hier wird dem mit objekt1 bezeichnetenSpeicherbereich „gesagt“, das die in ihmgespeicherte Methode „bewegen“ aus-geführt werden soll.

Grundzüge der Objekt-Orientierung

● Datenkapselung– Schlüsselworte zur Kapselung sind

● Public● Private● Protected (je nach Programmiersprache anders)

– Durch diese kann der externe Zugriff auf Daten oder Methoden eines Objekt gesteuert werden

– Dies hat insbesondere Bedeutung bei der Einbindung von Software-Bibliotheken in den eigenen Code

Grundzüge der Objekt-Orientierung

● Public: externer Zugriff ohne Einschränkung möglich

● Protected (o.ä.): eingeschränkter externer Zugriff möglich

● Private: externer Zugriff nicht möglich, nur innerhalb des Objektes

Grundzüge der Objekt-Orientierung

● Vererbung– Erbt eine Klasse von einer anderen, so haben

die Objekte, die aus ihr erzeugt werden, automatisch alle Daten und Methoden der sog. Elternklasse

– Darüber kann jede erbende Klasse zusätzliche Daten oder Methoden einführen

– Ebenso können ererbte Methoden überschrieben werden

JAVA

Java

● Java ist eine objekt-orientierte Programmiersprache

● Durch das Java-VM-Konzept auf nahezu allen Systemen ausführbar

● Syntax ist an C (C++) angelehnt● Syntax-Beispiel

public class HalloWelt {public static void main(String[] args) {

System.out.println("Hallo Welt!");}

}

Java

● Java braucht eine sogenannte Laufzeitumgebung, in der der Java-Code ausgeführt wird (JRE – Java Runtime Enviroment)

● Diese JREs gibt es für ziemlich jedes Betriebssystem

● Der Java-Code wird aus Performancegründen in einen Bytecode übersetzt, der dann ausgeführt wird

Java

● Verweise auf Objekte (Referenzen) sind in Java indirekt ausgeführt

● Die Speicherstellen der Referenzen könne nicht direkt ausgelesen oder geschrieben werden

● Damit werden vor allem Fehler in der Zeigerarithmetik verhindert (bzw. diese ist komplett ausgeschlossen)

Java

● Java unterstützt– Threads (Nebenläufigkeit von Prozessen)– Exceptions (Abfangen und Behandeln von

Fehlerfällen)– Generics (Generische Datentypen)– KEINE Mehrfachvererbung (jede Klasse hat

nur genau eine Superklasse)– Schnittstellen (Interfaces), eine Klasse kann

beliebig viele Schnittstellen implementieren– Plattformunabhängige GUI (Swing)– Garbage Collection

Eclipse

Eclipse

● Ein Framework zur Softwareentwicklung● Bekannteste Nutzung als IDE = Integrated

Development Enviroment● Eine IDE beinhaltet (mindestens) Code-

Editor, Projektdatei-Verwaltung und Debugger

● Eclipse ist selbst in Java geschrieben

Eclipse

● Die Fenster in Eclipse heissen Views● Diese können per Drag & Drop nahezu

beliebig angeordnet werden● Jede View hat eine eigene Anwendung

und Darstellungsart● So ist z.B. der Codeeitor eine View zum

Texteditieren, der aber dazu noch Syntaxhighlighting und elementare Fehleranzeige beinhaltet

Eclipse

Eclipse

Eclipse

Eclipse

Eclipse

Eclipse

Recommended