Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

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

Ähnliche Präsentationen


Präsentation zum Thema: "Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Algorithmen und Datenstrukturen 1 SS 2002 Mag.Thomas."—  Präsentation transkript:

1 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

2 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

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

4 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;

5 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

6 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

7 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; } -

8 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.

9 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 !!

10 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

11 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

12 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 }

13 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. }

14 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.

15 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. }

16 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... }


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

Ähnliche Präsentationen


Google-Anzeigen