Grundkurs C++ Einführung Martin Knopp & Johannes Feldmaier 13.04.2016 Folie 1/34 GK C++: Einführung Martin Knopp & Johannes Feldmaier 13.04.2016
Martin Knopp Martin.Knopp@tum.de Büro Z934 Johannes Feldmaier Johannes.Feldmaier@tum.de Büro Z947 Folie 2/34 GK C++: Einführung Martin Knopp & Johannes Feldmaier 13.04.2016
Warum C++? Sprache Rechenzeit Memory (KB) C++ GNU g++ 5,74 182.244 Java 6 26,34 686.076 Python 3 27,04 483.368 C# Mono 96,28 616.828 Software: regex-dna, Debian Computer Language Shootout Folie 3/34 GK C++: Einführung Martin Knopp & Johannes Feldmaier 13.04.2016
Warum C++? Folie 4/34 GK C++: Einführung Martin Knopp & Johannes Feldmaier 13.04.2016
Warum immer noch C++? Folie 5/34 GK C++: Einführung Martin Knopp & Johannes Feldmaier 13.04.2016
Warum C++? Strenge Standardisierung von Beginn an (ca. 1985) Extrem schnelle und effiziente Compiler Wird immer noch weiterentwickelt C++11 seit August 2011 standardisiert C++14 seit Januar 2015 standardisiert Große Vielfalt an Compilern für die allermeisten Plattformen Viele Entwicklungstools verfügbar Folie 6/34 GK C++: Einführung Martin Knopp & Johannes Feldmaier 13.04.2016
Lehrstuhl für Datenverarbeitung Das Ziel Entwicklung eines Spiels Teamarbeit in Teams aus 5 Personen Folie 7/34 GK C++: Einführung Martin Knopp & Johannes Feldmaier 13.04.2016
Zeitplan 13.04. Einführung und Objektorientierung 20.04. IDE, Klassenhierarchie 27.04. Buildsysteme und Qt, Git 04.05. Präsentation Kurzprojekt Typwandlung, Exceptions 11.05. Objektmodellierung und Debugging 18.05. und 25.05. Präsentation Analyse- & Designmodell 01.06, 08.06., 15.06. Working Sessions 22.06. und 29.06. Abschlusspräsentation 06.07. Show & Tell Folie 8/34 GK C++: Einführung Martin Knopp & Johannes Feldmaier 13.04.2016
Bewertung Drei Hausaufgaben (ca. 15%) Vorprojekt (ca. 10%) Designmodell und Pflichtenheft (ca. 10%) Abschlusspräsentation (ca. 10%) Haupprojekt (ca. 50%) Dokumentation (ca. 5%) Folie 9/34 GK C++: Einführung Martin Knopp & Johannes Feldmaier 13.04.2016
Nützliches LDV-Webseite zum Kurs http://www.ldv.ei.tum.de/lehre/grundkurs-c/ Hausaufgaben Vorlesungsfolien Skript C++ Buch Thinking in C++ Besucht die Bibliothek! 4 Tutoren, die euch bei sämtlichen Fragen und Problemen weiterhelfen werden cpp-tutor@ldv.ei.tum.de Praktikumsraum -1981 (Zeitplan auf der LDV Seite) Folie 10/34 GK C++: Einführung Martin Knopp & Johannes Feldmaier 13.04.2016
Teil II Grundlagen der Objektorientierung Folie 11/34 GK C++: Einführung Martin Knopp & Johannes Feldmaier 13.04.2016
Motivation Realität ist objektorientiert Vereinfachung und Kapselung Wiederverwendbarkeit Leichte Erweiterbarkeit Parallelisierbarer Entwicklungsprozess Folie 12/34 GK C++: Einführung Martin Knopp & Johannes Feldmaier 13.04.2016
Aufbau und Eigenschaften eines Objekts von Außen Objekt hat öffentliche Eigenschaften (Attribute) Objekt besitzt öffentlich definierte Funktionen (Methoden), welche sich auf seine Eigenschaften auswirken von Innen Verarbeiten der über Funktionsaufrufe eingehenden Befehle (Botschaft) zur Änderungen der Eigenschaften Interne Funktionen und Eigenschaften, zur Wahrnehmung der äußeren Funktion Folie 13/34 GK C++: Einführung Martin Knopp & Johannes Feldmaier 13.04.2016
Aufbau und Eigenschaften des Objekts Auto von Außen zugänglich Attribut Geschwindigkeit (nur lesend) Methoden beschleunigen und bremsen definierte Funktionsweise Aufruf der Methoden verändert die Geschwindigkeit von Innen Wird beschleunigen aufgerufen, mehr Kraftstoff an den Motor liefern Wird bremsen aufgerufen, Bremsanlage betätigen Folie 14/34 GK C++: Einführung Martin Knopp & Johannes Feldmaier 13.04.2016
Folgen dieses Aufbaus für das Objekt Auto Für den externen Benutzer von Auto ist es vollkommen egal was passiert wenn er beschleunigen möchte Jedes Auto -Objekt MUSS die Methoden beschleunigen und bremsen verstehen Der Aufruf der Methode beschleunigen ist von der konkreten Implementierung von Auto vollkommen unabhängig Auto -Objekte können innerhalb des Programms beliebig ausgetauscht werden Folie 15/34 GK C++: Einführung Martin Knopp & Johannes Feldmaier 13.04.2016
Begriffe: Objekt Klasse Instanz Bei der Arbeit mit Objekten unterscheidet man: Klasse Zusammenfassung von ähnlichen Objekten, welche sich nur in Ihren Attributen unterscheiden Charakterisiert die Objekte Schablone / Prototyp Instanz Konkretes Objekt das bestimmte Attributwerte aufweist Folie 16/34 GK C++: Einführung Martin Knopp & Johannes Feldmaier 13.04.2016
Beispiel: Objekt Klasse Instanz Klasse Auto Attribute: Geschwindigkeit Methoden: beschleunigen bremsen Johannes Auto Attribute: Geschwindigkeit=50,4 Methoden: beschleunigen bremsen Martins Auto Attribute: Geschwindigkeit=62,7 Methoden: beschleunigen bremsen Instanzen Folie 17/34 GK C++: Einführung Martin Knopp & Johannes Feldmaier 13.04.2016
Generalisierung / Vererbung Vererbung ermöglicht Gruppen von Klassen, die sich ähnlich sind, aber Unterschiede haben Gemeinsame Attribute und Methoden werden in der Elternklasse definiert Verschiedene Kinder erben diese und implementieren weitere Methoden und Attribute Jedes Kind kann auch die Methoden und Attribute der Eltern überschreiben, also neu implementieren Folie 18/34 GK C++: Einführung Martin Knopp & Johannes Feldmaier 13.04.2016
Beispiel: Vererbung Auto Geschwindigkeit beschleunigen() bremsen() Rot: geerbte Attribute/Methoden Blau: überschriebene Methoden Cabrio Geschwindigkeit VerdeckOffen beschleunigen() bremsen() verdecköffnen() LKW Geschwindigkeit Anhänger beschleunigen() bremsen() Folie 19/34 GK C++: Einführung Martin Knopp & Johannes Feldmaier 13.04.2016
Objektbeziehungen Wesentliches Merkmal der objektorientierten Programmierung ist die Interaktion der Objekte Objekte stehen in Beziehungen zueinander Es gibt verschiedene Arten von Beziehungen Komposition Aggregation Assoziation Folie 20/34 GK C++: Einführung Martin Knopp & Johannes Feldmaier 13.04.2016
Objektbeziehungen Komposition Teile existieren nur gemeinsam Aggregation Teile bilden eine Einheit Können auch alleine existieren Assoziation Teile agieren gemeinsam flüchtige Bindung Folie 21/34 GK C++: Einführung Martin Knopp & Johannes Feldmaier 13.04.2016
Erwartungen an das objektorientierte Paradigma Wiederverwendbarkeit Erweiterbarkeit Leichte Wartbarkeit Wodurch? Klasse hat definiertes Verhalten durch Kapselung Die Attribute, und damit die Daten der Klasse sind nicht beliebig änderbar. Folie 22/34 GK C++: Einführung Martin Knopp & Johannes Feldmaier 13.04.2016
Realisierung der Kapselung Der Zugriff auf Attribute des Objekts muss geregelt werden Methoden dienen zur Abarbeitung von Botschaften Methoden sind also die Schnittstelle zu den Daten des Objekts Es sind folgende Fragen zu klären: Welche Methode darf welche Daten ändern? Wer darf die Methoden aufrufen? Folie 23/34 GK C++: Einführung Martin Knopp & Johannes Feldmaier 13.04.2016
Realisierung der Kapselung Klasse besteht aus: Attributen und Methoden der Basisklasse Eigenen Attributen und Methoden Zugriffsregelung sollte auf Vererbung aufsetzen! Folie 24/34 GK C++: Einführung Martin Knopp & Johannes Feldmaier 13.04.2016
Public Manche Daten sind jedem zugänglich: Also allen Methoden jeglicher Klassen Beispiel: Luftdruck (durch Methoden luftdruckerhoehen(), luftdrucksenken(), Attribut Luftdruck) Auto +Luftdruck +luftdruckerhöhen() +luftdrucksenken() +public-attribut/ Methode Folie 25/34 GK C++: Einführung Martin Knopp & Johannes Feldmaier 13.04.2016
Private Auf manche Daten können nur die Methoden der Klasse zugreifen Beispiel: Geschwindigkeit (durch Methoden bremsen(), beschleunigen()) Auto -Geschwindigkeit +bremsen() +beschleunigen() +public-attribut/ Methode -private-attribut/ Methode Folie 26/34 GK C++: Einführung Martin Knopp & Johannes Feldmaier 13.04.2016
Protected Auf manche Daten können nur die Methoden der Klasse zugreifen, sowie die Methoden der Klassen, die von dieser erben Beispiel: InnenraumTemperatur (durch Methoden der abgeleiteten Klasse heizen(), kühlen()) +public #protected -private Folie 27/34 GK C++: Einführung Martin Knopp & Johannes Feldmaier 13.04.2016
Überblick Auto +Luftdruck #InnenraumTemperatur -Geschwindigkeit +bremsen() +beschleunigen() +luftdruckerhöhen() +luftdrucksenken() +public-attribut/ Methode #protected-attribut/ Methode -private-attribut/ Methode Folie 28/34 GK C++: Einführung Martin Knopp & Johannes Feldmaier 13.04.2016
Private- und Protected-Methoden +public-attribut/ Methode #protected-attribut/ Methode -private-attribut/ Methode Folie 29/34 GK C++: Einführung Martin Knopp & Johannes Feldmaier 13.04.2016
Public-Attribute Kapselung Attribute, die durch jeden, also alle Methoden, änderbar sind! Auto +Anzahl der Kratzer +Tankinhalt Keine Kapselung! Art der Zugriffe völlig unbestimmt! Folie 30/34 GK C++: Einführung Martin Knopp & Johannes Feldmaier 13.04.2016
Public-Attribute Kapselung II Immer besser: Methoden zum Setzen und Auslesen der Attribute Aber: nur wo nötig und sinnvoll, da die Kapselung sonst aufgeweicht wird Auto -Anzahl der Kratzer -Tankinhalt +gettankinhalt() +settankinhalt() Das Verhalten kann definiert werden, d.h. Bereichsüberwachung ist beispielsweise möglich Fehlersuche und Wartung wird enorm vereinfacht Folie 31/34 GK C++: Einführung Martin Knopp & Johannes Feldmaier 13.04.2016
Gruppenarbeit Erstellt ein Klassendiagramm für ein Auto Komponenten: Motor, Fahrgestell, Karosserie, Räder, Türen, Fahrer(in), Anhänger, Überlegt euch sinnvolle Methoden und Attribute Überlegt, welche Methoden und Attribute -private, +public oder #protected sein müssen Folie 32/34 GK C++: Einführung Martin Knopp & Johannes Feldmaier 13.04.2016
Lösungsvorschlag Folie 33/34 GK C++: Einführung Martin Knopp & Johannes Feldmaier 13.04.2016
Hausaufgabe Skript lesen bis einschließlich Kapitel 4.4 Ihr dürft die Inhalte aus diesen Kapiteln gerne auch aus anderen Quellen als dem Skript nachlesen! Folie 34/34 GK C++: Einführung Martin Knopp & Johannes Feldmaier 13.04.2016