Willkommen zur Vorlesung Objektorientierte Programmierung Vertiefung - Java Zum Dozenten ● Mein Name: Andreas Berndt ● Diplom-Informatiker (TU Darmstadt) ● ● Derzeit Software-Entwickler für WebApplikationen 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.fhfrankfurt.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 GUIKomponenten 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 OOBasis 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 bezeichneten Speicherbereich „gesagt“, das die in ihm gespeicherte Methode „bewegen“ ausgefü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) CodeEditor, 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