Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Algorithmen und Datenstrukturen 1 SS 2002 Mag.Thomas.

Slides:



Advertisements
Ähnliche Präsentationen
Einführung in die Programmiersprache C/C++
Advertisements

Imperative Programmierung
Imperative Programmierung
Variablen und Datentypen
der Universität Oldenburg
der Universität Oldenburg
Java: Dynamische Datentypen
Listen Richard Göbel.
FH-Hof Verwaltung von Zeichenketten Richard Göbel.
Indirekte Adressierung
FH-Hof Indirekte Adressierung Richard Göbel. FH-Hof Einfache Speicherung von Daten Eine "einfache" Deklaration definiert direkt eine Speicherplatz für.
FH-Hof Verwaltung von Zeichenketten Richard Göbel.
Java: Referenzen und Zeichenketten
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.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 6 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 3 Klassen, Objekte, Arrays und Kontrollstrukturen Sommersemester 2003 Lars Bernard.
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-
DVG Felder1 Felder. DVG Felder 2 Was sind Felder? Felder sind Reihungen aus endlich vielen Elementen gleichen Typs. Z.B.: Vektoren : (x.
Arrays,Strings&Pointer in C/C++
Informatik 1 Übung 2.
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 Programmiersprache C 3.Tag Institut für Mathematische Optimierung - Technische Universität Braunschweig.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fakultät.
Informatik 1 Letzte Übung.
Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik Dr. Wieland Schwinger
Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 1 Algorithmen und Datenstrukturen SS 2005 Mag.Th. Hilpold u. Dr. A.Stritzinger Institut.
Vom Umgang mit Daten. public void myProgram() { int[] saeulenWerte = new int[world.getSizeX()]; for (int i = 0; i < saeulenWerte.length; i++) { saeulenWerte[i]
Algorithmen und Datenstrukturen SS 2005 Mag.Th. Hilpold u. Dr. A.Stritzinger Institut für Wirtschaftsinformatik- Software Engineering JKU Linz.
Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 1 Algorithmen und Datenstrukturen SS 2005 Mag.Th. Hilpold u. Dr. A.Stritzinger Institut.
Algorithmen und Datenstrukturen Übungsmodul 6
Algorithmen und Datenstrukturen SS 2005
Dynamische Datentypen
Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 1 Algorithmen und Datenstrukturen Übungsmodul 5 Dr. W. Narzt u. Dr. A. Stritzinger.
Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 1 Algorithmen und Datenstrukturen SS 2005 Mag.Th. Hilpold u. Dr. A.Stritzinger Institut.
Variablenkonzept Klassisch, in Java Basistyp
Algorithmen und Datenstrukturen Übungsmodul 8
Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 1 Thomas Hilpold: Algorithmen und Datenstrukturen SS 2005 Mag.Th. Hilpold u. Dr. A.Stritzinger.
Algorithmen und Datenstrukturen SS 2005
Algorithmen und Datenstrukturen Übungsmodul 1
Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 1 Algorithmen und Datenstrukturen Übungsmodul 2 Dr. W. Narzt u. Dr. A. Stritzinger.
Datentypen Überblick Datentypen Einfache / fundamentale Datentypen
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Algorithmen und Datenstrukturen 1 SS 2002
Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 1 Algorithmen und Datenstrukturen SS 2005 Mag.Th. Hilpold u. Dr. A.Stritzinger Institut.
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Programmierpraktikum Java SS 2005 Mag.Thomas Hilpold.
Algorithmen und Datenstrukturen 1 SS 2002
Java-Kurs - 3. Übung Hausaufgabe Arrays For-Schleifen.
Diskrete Mathematik I Vorlesung 2 Arrays.
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Algorithmen und Datenstrukturen 1 SS 2002 Mag.Thomas.
Algorithmen und Datenstrukturen 1 SS 2002
Kapitel 5Strukturen Information aus der realen Welt werden in einem informationsverarbeitenden System als Daten abgelegt. Diese stellen also eine (vereinfachte)
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Algorithmen und Datenstrukturen 1 SS 2002 Mag.Thomas.
Java-Kurs - 4. Übung Hausaufgabe Weitere Kontrollstrukturen
Einführung in die Programmierung mit Java
Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 1 Algorithmen und Datenstrukturen 1 SS 2005 Mag.Th. Hilpold u. Dr. A.Stritzinger Institut.
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Algorithmen und Datenstrukturen 1 SS 2002 Mag.Thomas.
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Programmierpraktikum Java SS 2005 Mag.Thomas Hilpold.
Tutorium Software-Engineering SS14 Florian Manghofer.
Java Programme nur ein bisschen objektorientiert.
Pointer, Arrays und verkettete Listen. Mehrdimensionale Arrays  Pointer auf ein Array von Pointern  int32 **matrix = new int32*[3];  matrix: Zeiger.
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.
Anforderungen an die neue Datenstruktur
Implementieren von Klassen
Felder in der Informatik
Schleifen Datenfelder (Arrays) Verzweigungen
 Präsentation transkript:

Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Algorithmen und Datenstrukturen 1 SS 2002 Mag.Thomas Hilpold Institut für Wirtschaftsinformatik Software Engineering JKU Linz Termin 5 – Referenztypen

Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 2 Jana JANA Übersicht Algorithmen (Prozeduren) Kommentare Operatoren Ablaufsteuerung (Sequenz, Selektion, Iteration) if / else if / else, switch; while, repeat, for 4 Elementare Datentypen boolean, int, float, char Felder (inkl. Zeichenketten) boolean[1:n], char[], float[-3:3], int[1:n; 1:m] und weitere Sprachkonstrukte

Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 3 Datentypen elementare Datentypen (int, char) Benutzerdefinierte Datentypen (type) (Verbunde) Referenzdatentypen

Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 4 Referenzdatentypen Allgemeines dynamisch verwaltete Datenobjekte Datenobjekte werden ausschließlich über Referenzen angesprochen Datenobjekte müssen explizit erzeugt und gelöscht werden (new, delete) Variablen repräsentieren nicht wie bisher das gesamte Objekt, sondern eine Referenz darauf (früher: Zeiger) Variablen, die kein Datenobjekt referenzieren, zeigen auf "null" reftype RRectangle = { float x; float y; float width; float height; } RRectangle r;

Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 5 Referenzdatentypen (2) Beispiel reftype RRectangle = { float x; float y; float width; float height; } RRectangle r;// noch kein Rechteck vorhanden, da Reftype //?? r^.x -> Fehler, kein Objekt r = new RRectangle; // Rechteck im Speicher vorhanden // r zeigt auf dieses Rechteck //?? r = null;// Variable r zeigt auf null; Rechteck verloren r^.x = 10; delete r;// Rechteck wird gelöscht x =0 y=0 width=0 height=0 Variable (Referenz) Datenobjekt

Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 6 Referenzdatentypen (3) Beispiel RRectangle r;// noch kein Rechteck vorhanden, da Reftype //?? r^.x -> Fehler, kein Objekt r = new RRectangle; // Rechteck im Speicher vorhanden // r zeigt auf dieses Rechteck //?? r = null;// Variable r zeigt auf null; Rechteck verloren r^.x = 10; delete r;// Rechteck wird gelöscht x =0 y=0 width=0 height=0 Variable (Referenz) Datenobjekt

Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 7 Verbund vs. Referenz-Datentyp Deklaration reftype RRectangle = { float x; float y; float width; float height; } type Rectangle = { float x; float y; float width; float height; } -

Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 8 Verbund vs. Referenz-Datentyp Erzeugen, Zugriff, Löschen von Datenobjekten RRectangle r; r = new RRectangle; r^.x = 10; //(auch r.x = 10;) delete r; Rectangle r; r.x Variable r zeigt bei der Deklaration auf kein gültiges Objekt. Erst nach new ist ein Datenobjekt erzeugt und r zeigt darauf. Der Zugriff erfolgt mit Operator ^.(Dereferenzierung) Das Datenobjekt muß explizit gelöscht werden. IMMER ZEICHNEN !! Bereits bei der Deklaration wird das "Datenobjekt" erzeugt. Der Zugriff ist sofort möglich. Das Löschen erfolgt implizit z.B. beim Verlassen der Prozedur.

Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 9 Verbund vs. Referenz-Datentyp Spezieller Null-Wert RRectangle r; r = new RRectangle; r = null; Da Referenzvariable nicht immer auf ein Datenobjekt zeigen, gibt es einen speziellen Wert "null". null bedeutet, daß die Referenzvariable auf kein Objekt zeigt. Vorsicht bei der Zuweisung, das Objekt muß zuvor gelöscht werden. Ansonsten ist es verloren, falls keine andere Referenz darauf existiert (Speicher). Nach delete r gilt: (r==null) Verbundvariable repräsentieren immer ein Datenobjekt. Rectangle r; r = null; -> Fehler !!

Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 10 Verbund vs. Referenz-Datentyp Zuweisung = RRectangle r1, r2; // zwei Variable, kein Datenobjekt r1 = new RRectangle; // ein DatenObjekt, r2 == null r1^.x = 10; r1^.y = 20; r2 = r1; // nur die Referenzen //werden kopiert !! // beide Variable referenzieren ein // und dasselbe Objekt r2^.x = 100; write(r1^.x); // -> 100 !! Rectangle r1, r2; // zwei Variable und zwei // Datenobjekte existieren hier r.x = 10; r.y = 20; r2 = r1; // Werte werden kopiert // die Werte beider Datenobjekte sind // gleich r2.x = 100; write(r1.x) // 10

Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 11 Verbund vs. Referenz-Datentyp Vergleich == RRectangle r1, r2; r1 = new RRectangle; // ein DatenObjekt, r2 == null r1^.x = 10; r2 = r1; // nur die Referenzen //werden kopiert !! // beide Variable referenzieren ein // und dasselbe Objekt if (r2 == r1) // immer true, // da die Referenzen verglichen // werden und beide auf ein und // dasselbe Datenobjekt zeigen. r2^.x = 5; if (r2 ==r1) // true, da Referenzvar. // auf dasselbe Objekt zeigen Rectangle r1, r2; r.x = 10; r2 = r1; // Werte kopiert if (r2 ==r1) // true, da werte gleich r2.x = 5; if (r2 == r1) // false, da werte ungleich

Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 12 Verbund vs. Referenz-Datentyp Verwendung als Eingangsparameter f(  RRectangle r) { // Kopie der Variable, bedeutet // Referenz wird kopiert r^.x = 123; // nach Ende der Methode hat sich // das Datenobjekt, auf das r zeigt // verändert !!!. } f (  Rectangle r) { // Kopie der Variable, // bedeutet, alle Werte werden in // ein neues Datenobjekt kopiert. r.x = 123; // nach Ende der Methode keine // Änderung nach außen sichtbar. } f(  RRectangle r) { r = null; r = new RRectangle; // keine Änderung des // Datenobjektes hinter r. // Variable wurde kopiert,also auch keine Änderung von r nach außen sichtbar }

Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 13 Verbund vs. Referenz-Datentyp Verwendung als Übergangsparameter f(  RRectangle r) { // keine Kopie der Variable if(r!= null) delete r; r = new RRectangle; r^.x = 10; // nach Ende der Methode hat sich // r verändert und zeigt nun auf ein // neues Datenobjekt. } f (  Rectangle r) { // keine Kopie der Variable, r.x = 10; // nach Ende der Methode // Änderung nach außen sichtbar. }

Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 14 Verbund vs. Referenz-Datentyp Arrays RRectangle[20] rArr; // Speicher für 20 Referenzen // wurde belegt !!! // typisch: Referenz = 4 Bytes. // kein Datenobjekt vorhanden rArr[1].x = 123; _-> Fehler!! Rectangle[20] rArr; // Speicher für 20 x Rectangle wurde // belegt // typisch: Rect = 16 bytes // 20 Datenobjekte vorhanden rArr[1].x = 123; Für Arrays wird sofort Speicherplatz belegt. Falls das Array ein Array eines Referenztypen ist, so wird unabhängig vom konkreten Referenztyp sehr wenig Speicherplatz belegt. (typischerweise heute 4 Bytes) Ein Array eines Verbundtyps benötigt sofort N * größe(Verbundtyp) Speicher.

Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 15 Verbund vs. Referenz-Datentyp Deklaration (2) reftype RRectangle = { float x; float y; float width; float height; RRectangle next; // möglich !!, bei Verbund nicht möglich. }

Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 16 Übung 5 ad 1) reftype B = { C c } reftype C = { int value } B b = new B; b.c == ? Beim Schreibtischtest Zeichnen (schrittweise) !! ad 2)  Ein Bericht besteht aus einem Titel und bis zu 10 Kapiteln.  Ein Kapitel besteht aus einer Überschrift und bis zu 20 Abschnitten. Kapitel können auch leer (ohne Abschnitte) und ohne Überschrift sein. Ein Abschnitt besteht aus einer Überschrift und einem Textabschnitt. (char[]) type Report = { // hat Titel // hat bis zu 10 Kapitel reftype reftype Chapter = { // hat bis zu 20 Abschnitte // hat Überschrift... }