Tutorium Software-Engineering SS14 Florian Manghofer.

Slides:



Advertisements
Ähnliche Präsentationen
der Universität Oldenburg
Advertisements

Klassen - Verkettete Liste -
Sortieren I - Bubblesort -
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
Kapitel 3: Listen Lineare Liste: endliche Folge von Elementen eines Grundtyps (n>=0), leere Liste falls n=0 Listenelemente besitzen.
Gliederung Motivation / Grundlagen Sortierverfahren
Java: Objektorientierte Programmierung
Java: Dynamische Datentypen
Listen Richard Göbel.
Indirekte Adressierung
FH-Hof Verwaltung von Zeichenketten Richard Göbel.
Java: Referenzen und Zeichenketten
Java: Grundlagen der Objektorientierung
Dynamisches Array als "verkettete Liste". Ein Vergleich.
Polymorphie (Vielgestaltigkeit)
Polymorphie (Vielgestaltigkeit)
Objekte und Arbeitsspeicher
Dynamischer Speicher. In einer Funktion wird z.B. mit der Deklaration int i; Speicher auf dem sogenannten Stack reserviert. Wenn die Funktion verlassen.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (05 – Elementare Datenstrukturen) Prof. Th. Ottmann.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 6 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung Listen-
PRJ 2007/1 Stefan Dissmann Motivation Problem: gleiche Datenstrukturen werden für verschiedene Objekte gebraucht: z.B. Listen von Studierenden, Kunden,
PKJ 2005/1 Stefan Dissmann Ausblick Es fehlen noch: Möglichkeiten zum Strukturieren größerer Programme Umgang mit variabler Zahl von Elementen Umgang mit.
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
Verkettete Liste Visualisierung. New-Operator Mit dem New-Operator kann zur Laufzeit (dynamisch) Speicherplatz reserviert und angelegt werden Vorteil:
Listen Prof. Dr. Christian Böhm in Zusammenarbeit mit Gefei Zhang
DVG Klassen und Objekte
DVG Verkettete Listen Verkettete Listen. DVG Verkettete Listen 2 Primitive Datentypen Vorteile: –werden direkt vom Prozessor unterstützt.
Wir müssen also überlegen: Implementierung der Knoten, Implementierung der Kanten, daraus: Implementierung des Graphen insgesamt. Annahme: die Knoteninhalte.
© 2002 Dr. Cavelius - Ley - Pohlig - Taulien Programmierung im Netz und Internet: Einführung in die Programmiersprache Java Teil I 1 Klassen Objekte von.
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
Einfach verkettete Listen (OOP)
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
Informatik 1 Übung 8. NACHBESPRECHUNG Übung 8 Rekursion Existiert Weg von A nach B?
Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik Dr. Wieland Schwinger
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Programmierung
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Programmierung Wintersemester 2009/10 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fakultät.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Programmierung Wintersemester 2011/12 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einfach und doppelt verkettete Listen in JAVA by Jens Weibler
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
A Workshop About this chapter General description Units Time Schedule
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Algorithmen und Datenstrukturen 1 SS 2002 Mag.Thomas.
Java-Kurs Übung Besprechung der Hausaufgabe
Java-Kurs - 5. Übung Besprechung der Übungsaufgabe Klassen und Objekte
Diskrete Mathe Diskrete Mathematik I Listen Vorlesung 4.
Dynamisches Array als "verkettete Liste". Ein Vergleich.
Tutorium Software-Engineering SS14 Florian Manghofer.
Tutorium Software-Engineering SS14 Florian Manghofer.
Tutorium Software-Engineering SS14 Florian Manghofer.
Pointer, Arrays und verkettete Listen. Mehrdimensionale Arrays  Pointer auf ein Array von Pointern  int32 **matrix = new int32*[3];  matrix: Zeiger.
C++ FÜR cOMPUTERSPIELENTWICKLER
Tutorium Software-Engineering SS14 Florian Manghofer.
Tutorium Software-Engineering SS14 Florian Manghofer.
Tutorium Software-Engineering SS14 Florian Manghofer.
Pointer. * und &  Bei der Definition int var1; ○ // „normale“ Variable int *var2; ○ // Zeiger auf einen Integer int *var2 = NULL; ○ // … incl. Initialisierung.
Tutorium Software-Engineering SS14 Florian Manghofer.
Anforderungen an die neue Datenstruktur
Grundkurs Informatik 11-13
November 18 Informatik Kurse
1. Die rekursive Datenstruktur Liste 1.5 Das Entwurfsmuster Kompositum
Grundkurs Informatik 11-13
1. Die rekursive Datenstruktur Liste 1
Juli 19 Informatik Kurse
 Präsentation transkript:

Tutorium Software-Engineering SS14 Florian Manghofer

this Class Test{ private: string s; int i; public: Test(string,int); }; Test::Test(string ss, int ii){ s = ss; i = ii; } ohne this: Class Test{ private: string s; int i; public: Test(string,int); }; Test::Test(string s, int i){ this->s = s; this->i = i; } mit this: this-> arbeitet mit verstecktem this this->s = Attribut des aktuellen Objekts s = Parameter des Konstruktors return *this = aktuelles Objekt als Rückgabe

new new = dynamische Speicherreservierung zur Laufzeit Auto autos[10]; autos[0].waschen()…. Auto *autos[10]; autos[0] = new Auto(); autos[0]->waschen(); Hier werden 10 Objekte vom Typ Auto erzeugt und Speicher belegt. Hier wird ein Zeiger auf 10 Objekte vom Typ Auto definiert. Es erfolgt keine Speicherreservierung!! Erst mit dem konkreten Erzeugen durch new wird der Speicher für ein Objekt reserviert. delete autos[0]; Löscht das Objekt, Speicher wird freigegeben statischdynamisch

new Wieso das Ganze? Die statische Programmierung verschwendet Speicher. Person personen[100]; Hier wird Speicher für 100 Objekte vom Typ Person belegt, obwohl man zu Programmstart vielleicht nur die ersten 4 Objekte braucht.  96 Objekte belegen Speicher, die nicht gebraucht werden  Verschwendung Dynamische Lösung: Person *personen[100]; An der Stelle im Programm, an der ein neues Objekt vom Typ Person gebraucht wird, wird auch erst dieses mittels new erzeugt und damit Speicher belegt.  Somit wird nur soviel Speicher belegt, wie aktuell gebraucht wird.  Ungenutzte Objekte können mit delete gelöscht werden.  Effizient

verkettete Liste Problemstellung: Es soll eine Einkaufsliste/Artikelliste.. erstellt werden in der x Objekte gespeichert werden. Bisher: „Es sollten maximal 30 Artikel gespeichert werden können“ Lösung bisher: Artikel liste[30]; Aber was, wenn man keine Obergrenze hat bzw wenn man nicht weiß wieviele Objekte irgendwann gespeichert werden sollen? Arrays können nicht vergrößert werden! Artikel liste*[ ]; //sehr schlechter Stil, und was wenn diese erreicht? Lösungen:  verkettete Liste

verkettete Liste Funktionsweise: Start der Liste Zeiger auf erstes Objekt in der Liste Erstes Objekt Objekt enthält Zeiger auf nachfolgendes Objekt Zweites Objekt Zeiger des Objekts auf Nachfolger ist 0, d.h. hier ist die Liste zu Ende

verkettete Liste Listenelemente müssen mindestens 2 Komponenten enthalten:  Dateninhalt (Attribute usw.)  Zeiger auf Nachfolgendes Objekt Eine verkettete Liste besteht aus 2 Klassen.  Klasse für die zu verkettenden Objekte (Auto,Person,Artikel)  Klasse für die Verwaltung der Liste class Artikel{ friend class ArtikelListe; private: int nr; string beschr; Artikel *nachfolger; public: Artikel(){nachfolger = 0;} Artikel* next(); }; Artikel* Artikel::next(){return nachfolger;} Damit die Verwaltungsklasse ArtikelListe Zugriff auf die Attribute hat (ansonsten mit Getter&Setter) Dateninhalt Zeiger auf das Nachfolgende Objekt Im Konstruktor den nachfolger auf 0 setzen Zeiger auf nächstes Objekt

verkettete Liste Steuerung und Verwaltung der Liste: class ArtikelListe{ private: Artikel *anfang; public: void einfuegen(Artikel*); Artikel* loeschen(); Artikel* start(); bool listeleer(); Artikel(){ anfang = 0;} }; void ArtikelListe::einfuegen(Artikel *neu){ neu->nachfolger = anfang; anfang = neu; } Artikel* Artikel::loeschen(){ Artikel *zw = anfang; if(anfang != 0){anfang = anfang->nachfolger;} return zw; } Artikel* Artikel::start(){ return anfang;} bool Artikel::listeleer(){ return anfang == 0;} Zeiger auf das erste Objekt der Liste Im Konstruktor anfang auf 0 setzen, da keine Objekte in der Liste sind Ein neues Objekt wird an den Anfang der Liste eingefügt. Das oberste/erste Objekt der Liste wird aus der Liste gelöscht und zurückgegeben. Es wird nur aus der Liste gelöscht! Liefert Zeiger auf erstes Objekt Prüft ob Liste leer ist

verkettete Liste

Einfügen nur am Anfang der Liste ohne weiteres möglich. Löschen nur des obersten/ersten Objekts der Liste ohne weiteres möglich. Durchlauf nur von oben nach unten bzw. vorne nach hinten möglich (Einbahnstraße)  Stack - Prinzip Durch Schleifen ist auch das Einfügen/Löschen an einer anderen Stelle der Liste möglich Ganze Liste durchlaufen: Artikel *start = AListe.start(); while(start != 0){ cout get_nr() << endl; start = start->next(); } Zeiger auf das erste Listenobjekt Solange bis der Zeiger nicht 0 ist bzw. bis Objekte in der Liste sind. Zeiger auf das nächste Objekt(Attribut Nachfolger)

doppelt verkettete Liste Vorteil: Kann von vorne und von hinten durchlaufen werden (keine Einbahnstraße)