typsicher einfach modern objektorientiert
|
|
|
- Elke Morgenstern
- vor 10 Jahren
- Abrufe
Transkript
1 typsicher C# einfach modern objektorientiert
2 Einführung Veröffentlichung: Juni 2000 C#-Creators: Anders Hejlsberg, Scott Wiltamuth, Peter Golde Standardisierung: - Dezember 2001, ECMA-334 (European Computer Manufacturer s Association) - April 2003, ISO/IEC Schlüsselwörter: abstract as base bool break byte case catch char checked class const continue decimal default delegate do double else enum event explicit extern false finally fixed float for foreach goto if implicit in int interface internal is lock long namespace new null object operator out override params private protected public readonly ref return sbyte sealed short sizeof stackalloc static string struct switch this throw true try typeof uint ulong unsafe unchecked ushort using virtual void while
3 Einführung (2) CommonTypeSystem: Spezifikation für Definition von Typen (Member, Sichtbarkeit, Zugriff) Regeln für Vererbung, virtuelle Funktionen, usw. CommonLanguageSpecification: minimale Anforderung an Sprachen, um CLR-kompatibel zu sein kleinster gemeinsamer Nenner aller Sprachen, um Interoperabilität zu gewährleisten Verwaltetes Modul: Programm, das durch die CLR ausgeführt wird Enthält: Header für übertragbare, ausführbare Windows-Dateien (PE-Header), CLR-Dateiheader (Informationen über Modul (Ort der IL u. Metadaten)), Metadaten, IL-Code Metadaten: Beschreibung der gesamten inneren Struktur (Typen, Methoden, Felder) des Moduls u. seiner äusseren Abhängigkeiten (welche Typen werden referenziert) Assemblies: grundlegende Einheit für Sicherheit, Versionsverwaltung und Wiederverwendbarkeit besteht Ressourcendateien u. aus verwalteten Modulen, ein Modul enthält das Manifest (Bezeichnung der Assembly, Versionsnummer, Liste der anderen Dateien, Liste der Datentypen der anderen Dateien)
4 Typen - Primitive Typen Primitiver Typ in C# sbyte byte short ushort int uint long ulong char float double decimal bool object string FCL-Typ System.SByte System.Byte System.Int16 System.UInt16 System.Int32 System.UInt32 System.Int64 System.UInt64 System.Char System.Single System.Double System.Decimal System.Boolean System.Object System.String CLSkompatibel Nein Ja Ja Nein Ja Nein Ja Nein Ja Ja Ja Ja Ja Ja Ja Werttyp Ja Ja Ja Ja Ja Ja Ja Ja Ja Ja Ja Ja Ja Nein Nein Beschreibung 8-Bit-Wert mit Vorzeichen 8-Bit-Wert ohne Vorzeichen 16-Bit-Wert mit Vorzeichen 16-Bit-Wert ohne Vorzeichen 32-Bit-Wert mit Vorzeichen 32-Bit-Wert ohne Vorzeichen 64-Bit-Wert mit Vorzeichen 64-Bit-Wert ohne Vorzeichen 16-Bit-Unicodezeichen IEEE-32-Bit-Gleitkommazahl IEEE-64-Bit-Gleitkommazahl 128-Bit-Gleitkommazahl Wert, der entweder True oder False ist Basistyp aller Typen Array mit Zeichen Tabelle: Primitive Typen und ihre Äquivalente Abbildung auf Typen der FCL, dadurch einheitliche Behandlung aller Typen
5 Typen (2) alle Typen von System.Object abgeleitet Methode public virtual bool Equals(object) public virtual int GetHashCode() public Type GetType() public virtual string ToString() protected object MemberwiseClone() protected virtual void Finalize() Tabelle: Methoden von System.Object Beschreibung Vergleich von zwei Objekten über ihre Referenzen, d.h. Gleichheit besteht, wenn beide auf dasselbe Objekt zeigen. Hashwert für den Wert des Objekts (eindeutige Zahl innerhalb der AppDomain). Instanz eines von Type abgeleiteten Objekts, das im Zusammenhang mit den Reflektionsklassen dazu eingesetzt werden kann, um Informationen über den Typ zu ermitteln. Stringdarstellung des Objektwertes (bei object allerdings vollständiger Name des Typs) Anlegen einer neuen Instanz des Typs mit flacher Kopie. Wird aufgerufen, wenn der Garbage Collector entschieden hat, dass dieses Objekt gelöscht werden kann. In C# werden Finalizer mit Hilfe eines Destruktors ausgedrückt: ~Object(); alle Typen implizit nach object konvertierbar object o1 = new A(); // Upcast (in beliebige Basisklasse möglich) A a = (A)o1; // Downcast class B : A... B b = (B)o1; // Runtime-Fehler: InvalidCastException
6 Typen - Werttypen Erzeugung auf dem Stack Boxing ermöglicht Werttypen im Heap Deklaration durch Schlüsselwort struct oder enum implizite Ableitung von System.ValueType (oder System.Enum) - erbt von object - Methoden Equals() und GetHashCode() überschrieben Definition von Standardkonstruktor verboten Folge: Inline-Initialisierung nicht erlaubt (int x = 5;) struct WertTyp int a; double b; _ // kein Semikolon nach struct- und class-deklarationen WertTyp t1; WertTyp t2 = t1; // Compile-Fehler: t1 noch nicht initialisiert t1 = new WertTyp(); // implizite Initialisierung mit 0/null WertTyp t2 = t1; // Kopie der Felder a,b
7 Typen - Werttypen (2) Initialisierungskonstruktoren erlaubt - Pflicht ist mindestens ein Parameter - alle Member müssen initialisiert werden - expliziter Aufruf erforderlich Automatische Initialisierung bei Einbettung im Verweistyp explizite Ableitung nur von Schnittstellen möglich Werttyp ohne Methodentabelle und Zeiger auf diese struct Point : ICloneable int x, y; // beide Typfelder sind private public Point(int wert) x = wert; y = x + 2; // ohne Initialisierung von y Compile-Fehler public object Clone() return MemberwiseClone(); Point t1 = new Point(10); Definition von Destruktoren verboten
8 Typen - Boxing/Unboxing von Werttypen Boxing: Allokation des Werttyps auf dem Heap mit Overheadmembern (Zeiger auf Methodentabelle, SyncBlockIndex) Compiler generiert automatisch Boxing/Unboxing-Code Auftreten von Boxing: - Upcast nach object z.b. bei Methodenparametern (benötigen meist object-verweistyp) - Konvertierung in Zeiger einer implementierten Schnittstelle - Aufruf von geerbten Methoden Achtung: Stack-Werttyp!= Boxed Werttyp Unboxing: Rückgabe der Adresse von geboxtem Wert im Heap C#: Unboxing + Kopieren des Wertes aus Adresse Achtung: Konvertierung in Boxed Typ notwendig
9 Typen - Boxing/Unboxing von Werttypen (2) Beispiele: ArrayList a = new ArrayList(); Point p1 = new Point(2); a.add(p1); // p1 boxen und Verweis zum Array hinzufügen Point p2 = (Point)a[0]; // Unboxing + Kopieren der geboxten Felder int x = 5; object o = x; // Boxing von x, o verweist auf geboxtes Objekt im Heap x = 20; // ändert nur Wert auf dem Stack short y = (short)o; // InvalidCastException y = (short)(int)o; // Okay, y=5 p1.tostring(); // Boxing erforderlich, da Zugriff auf geerbte Methode x.tostring(); // Int32 überschreibt ToString(), daher kein Boxing public override string ToString() // zusätzliche Point-Membermethode return x.tostring() + y.tostring(); // kein Boxing bei p1.tostring() // Compiler benötigt keinen Zeiger auf M.-Tabelle, sondern direkter Aufruf
10 Typen - Boxing/Unboxing von Werttypen (3) Verständnisfrage: public object Clone() return MemberwiseClone(); Tritt im folgenden Code Boxing auf? p2 = (Point)p1.Clone();
11 Typen - Boxing/Unboxing von Werttypen (3) Verständnisfrage: public object Clone() return MemberwiseClone(); Tritt im folgenden Code Boxing auf? p2 = (Point)p1.Clone(); // MemberwiseClone() ist geerbte Methode, daher Boxing // danach Unboxing + Kopieren des Wertes in p2 ICloneable ip = p1; // Boxing, wie Upcast nach object object o = ip.clone(); // Erzeugen eines neuen Objektes auf dem Heap // Verweis in o speichern p2 = (Point)o; // Unboxing + Kopieren der Werte nach p2
12 Typen - Verweistypen Anlegen des Speichers auf dem Heap Deklaration mit Schlüsselwort class class VerweisTyp // Standardzugriffsmodifizierer bei Typdeklaration auf // Namespaceebene: internal public int a; public int b; Erzeugung über Operator new - Speicherreservierung für Instanz - Initialisierung der Verwaltungsfelder (Zeiger auf Methodentabelle, SyncBlockIndex (Threadsynchronisation)) - Initialisierung der Felder mit 0/null Felder sind also immer initialisiert, auch wenn dies im Konstruktor nicht geschieht - Aufruf des Instanzkonstruktors VerweisTyp a = new VerweisTyp(); // Aufruf des vom Compiler erzeugten // Standardkonstruktors Deklaration mehrerer Konstruktoren möglich Inline-Initialisierung erlaubt
13 Typen - Verweistypen (2) class Point string name = P ; // Compiler fügt Initialisierung in jeden int x; // Konstruktor, der nicht einen anderen aufruft, ein int y; public Point(int a, int b) x = a; y = b; public Point() : this(10, 10) Point p1 = new Point(); // Initialisierung mit ( P, 10, 10) Point p2 = new Point(5, 5); Point p3; string s = p3.tostring(); // Compile-Fehler: p3 nicht zugewiesene Variable Point p4 = null; Console.WriteLine(p4.ToString()); // Runtime: NullReferenceException Konstruktoren auch protected/private deklarierbar - keine Möglichkeit ausserhalb der Klasse Instanzen zu erzeugen
14 Typen - Verweistypen (3) Aufruf von Basisklassenkonstruktor ist Pflicht (Basisklassenkonstruktor parameterlos, dann generiert der Compiler den Aufruf automatisch) class Point3d : Point int z; public Point3d(int c) z = c; // x,y = 10 public Point3d(int a, int b, int c) : base(a, b) // x=a, y=b // nur die direkt darüberliegende Basisklasse beeinflussbar z = c; Destruktoren: ~Typname... - ausschließlich Instanzmethode - GC ruft Destruktor auf, wenn Referenzen auf Objekt = 0 - Umsetzung in Deklaration einer Finalize-Methode protected override void Finalize()...
15 Typen - Verweistypen (4) Typkonstruktoren: - zur Initialisierung des Typs (statische Felder) - auch für struct anwendbar - nur ein Typkonstruktor möglich - muss parameterlos sein - implizit private - Deklaration mit Schlüsselwort static - Aufruf vor erstem Zugriff auf Typ (CLR-Entscheidung) - Aufruf ein einziges Mal in Lebensdauer des Prozesses - Generierung eines Typkonstruktors bei Inline-Initialisierung von statischen Typmembern class Kreis static double PI; static string name = K ; // Initialisierung wird Typkons. hinzugefügt static Kreis() PI = ; // Zugriffsmodifizierer verboten!
16 Typen - Zeigertypen Syntax wie in C - & Adressoperator - * Dereferenzierungsoperator - -> Zeiger-auf-Member, syntaktische Kurzform Verwendung nur in unsafe-block möglich - Compiler benötigt zusätzlich Optionsschalter /unsafe - CLR führt keine Sicherheitsprüfungen mehr aus (Arraybereichsgrenzenprüfung, Zugriff auf unerlaubten Speicherbereich) Point pt = new Point(3, 3); // struct-deklaration von Point verwendet unsafe Point *p = &pt; // Zeiger nur auf Werttypen (eigene Werttypen dürfen p->x = 5; // nur Werttypen als Member enthalten) anwendbar! p[1].x = 5; // überschreiben fremden Speicherbereichs p[1].y = 5; // kann gut gehen, muss aber nicht Console.WriteLine(p->ToString()); // Ausgabe z.b. (5,3) Console.WriteLine(p[1].ToString()); // Beispiel löste ExecutionEngineException aus
17 Typen - Zeigertypen (2) Zeiger auch auf Arrays von Werttypen möglich - Arrays von Werttypen sind Verweistypen (Verwaltung des GC) - müssen deshalb durch Schlüsselwort fixed fixiert werden - durch Fixierung darf Garbage Collector Speicher nicht umsetzen Point[] pt = new Point[10]; // pt ist Verweistyp, Array enthält Werttypen unsafe fixed(point *p = pt) // Arrayname enthält Zeiger auf erstes Element Point *pi = p; // fixed = Point *const p = pt; (konstanter Zeiger) for (int i = 0; i < pt.length; i++) Console.WriteLine(pi[i].ToString()); Möglichkeit Speicher auf dem Stack anzufordern Zeigerarithmetik + Schlüsselwort stackalloc Point *p = stackalloc Point[10]; for (int i = 0; i < 10; i++) Console.WriteLine( 0, 1, p[i].x, p[i].y);
18 Typmember - Übersicht & Zugriffsmodifizierer Typ kann beliebig viele folgender Member definieren: - Konstanten, Felder, Enumerationsinstanzen, Properties - Konstruktoren, Methoden (Instanz, Typ) - Operatorüberladungen (nicht Teil der CLS) - Konvertierungsoperatoren (nicht Teil der CLS) - Events - Typen (Delegates, Enumerationstypen, verschachtelte Klassen, Schnittstellen) Compiler generiert für jede Art von Member Metadaten Zugriffsmodifizierer für alle Member: Schlüsselwort in C# public protected private internal protected internal Tabelle: Zugriffmodifizierer Beschreibung Alle Methoden aus verschiedenen Assemblies dürfen auf das Member zugreifen Nur Methoden innerhalb des Typs oder eines davon abgeleiteten Typs in einer beliebigen Assembly dürfen auf das Member zugreifen Nur Methoden innerhalb des Typs dürfen auf das Member zugreifen Nur Methoden aus derselben Assembly dürfen auf das Member zugreifen Nur Methoden innerhalb des Typs oder eines davon abgeleiteten Typs oder Methoden aus derselben Assembly dürfen auf das Member zugreifen
19 Typmember - Konstanten Definition nur für primitive Typen möglich Teil des Typs, nicht der Instanz (implizit statisch) Compiler fügt Konstante direkt in den Code ein Speicherung in Metadaten des Moduls class Kreis public const double PI = ; public int radius; public Kreis(int r) radius = r; Kreis k = new Kreis(5); double umfang = 2 * Kreis.PI * k.radius;
20 Typmember - Felder Typfeld (statisch) o. Instanzfeld (Felder enthalten Instanzen von Werttypen oder Verweise von Verweistypen) dynamische Speicherzuweisung von Feldern: - Typfelder: Laden des Typs in Appdomain (geschieht wenn JIT-Compiler erstes Mal eine Methode übersetzt, die den Typ benutzt) - Instanzfelder: Anlegen einer Instanz des Typs Unterstützung von flüchtigen Feldern (volatile) Unterstützung von schreibgeschützten Feldern (readonly) Initialisierung im Konstruktor oder inline class Kreis public static readonly double PI = ; public readonly int radius; public Kreis(int r) radius = r; Kreis k = new Kreis(10); double umfang = 2 * Kreis.PI * k.radius; k.radius = 5; // Compile-Fehler
21 Typmember - Enumerationen & Bitflags enum Color Rot, Gelb, Blau, Grün = 10 richtiger Typ: - direkt von System.Enum abgeleitet - Werttyp (darf aber nur Symbole, wie oben gezeigt, definieren) - zugrundeliegender Typ, der Werte speichert, änderbar (Standard: Int32) enum Color : byte Rot, Gelb, Blau, Grün Instanzbildung: Color c = Color.Blau; // auf dem Stack liegt Wert 2 Console.WriteLine(c.ToString()); // Blau (aus Metadaten) Console.WriteLine(c.ToString( D )); // Decimal: 2 System.Enum statische Methoden: Type GetUnderlyingType(Type enumtype) string Format(Type enumtype, object value, string format) Array GetValues(Type enumtype) object Parse(Type enumtype, string value, bool ignorecase)
22 Typmember - Enumerationen & Bitflags (2) sinnvoll ausserhalb von Typen zu definieren (FCL i.d.r) Bitflags: [Flags] enum FileAttributes ReadOnly = 0x0001, Hidden = 0x0002, System = 0x0004, Directory = 0x0010,... FileAttributes fa = FileAttributes.ReadOnly FileAttributes.Hidden; Console.WriteLine(fa.ToString()); // ReadOnly, Hidden - Flagsattribut steuert Verhalten von ToString() Format() Parse()
23 Typmember - Properties vereinfachen Kapselung von Daten (OO-Paradigma: Felder eines Typs niemals für öffentlichen Zugriff freigeben) class Person private string _name = Tobias ; private int _alter; public string Name get return _name; // schreibgeschützte Eigenschaft public int Alter get return _alter; set if (value < 0 value > 100) throw new ArgumentOutOfRangeException( Falsches Alter ); _alter = value; // Schlüsselwort value steht für den neuen Wert value hat den Typ vom Property-Rückgabewert!
24 Compiler generiert entsprechende get- u. set-methoden einfache Zugriffsmethoden werden inline JIT-kompiliert Deklaration von parameterlosen Properties als: - statische Eigenschaften - Instanzeigenschaften - virtuelle Eigenschaften parameterbehaftete Properties (C#: Indexer): - entsprechen []-Operatorüberladung - nur auf Instanz anwendbar - überladbar - Index kann beliebige Anzahl an Parametern umfassen Typmember - Properties (2) p.name = Tobias ; // Compile-Fehler: p.name schreibgeschützt p.alter = 23; p.alter = dreiundzwanzig Jahre ; // Compile-Fehler: Alter vom Typ int Console.WriteLine( Name: 0 Alter: 1, p.name, p.alter); p.alter = -1; // Runtime-Fehler: ArgumentOutOfRangeException
25 Typmember - Indexer class Zeugnis private Hashtable zensuren = new Hashtable(); public object this[string fach] get return zensuren[fach]; // Nutzen Indexer vom Hashtable set zensuren[fach] = value; public string this[object fach, object zensur] get if (zensuren[fach].equals(zensur)) return Zensur stimmt mit Fach überein. ; else return Zensur stimmt nicht überein. ; z[ Compilerbau ] = 2; // Werttypen werden geboxt z[ Analysis ] = 2.3; z[ BWL ] = eine eins ; Console.WriteLine(z[ Analysis ]); // Achtung: 2,3 Console.WriteLine(z[ BWL, eine eins ]); // Zensur stimmt mit Fach...
26 Typmember - Methoden Definition immer inline (in der Klasse) - keine Headerdateien - vorherige Deklaration nicht möglich Parameter: - Standard: Werte oder Verweise by value übergeben - 2 Schlüsselwörter: ref, out Übergabe by reference für CLR ist ref und out dasselbe, dienen in C# zur Überprüfung der Korrektheit ref: Parameter muss vor Übergabe initialisiert sein out: Parameter wird in Methode initialisiert; Fehler, wenn Methode zuerst liest Benutzung der Schlüsselwörter bei Methodendeklaration und -aufruf void SetValue(out int new) new = 10; ; // autom. Dereferenzierung int x; SetValue(out x); void SetValue(ref int xnew) xnew = 10; ; int x = 5; // ohne Initialisierung: Compile-Fehler SetValue(ref x);
27 Typmember - Methoden (2) static void Tausch(ref object a, ref object b) object t = b; b = a; a = t; string s1 = Hallo ; string s2 = Welt ; Tausch(ref s1, ref s2); // Compile-Fehler! - Übergabeparameter müssen bei ref, out den erwarteten Typ haben variable Anzahl von Parametern: - Schlüsselwort params - nur als letzter Methodenparameter möglich static int Add(params int[] values) int sum = 0; for (int i = 0; i < values.length; i++) sum += values[i]); return sum; int summe = Add(1, 2, 3, 4, 5, 6);
28 Typmember - Methoden (3) extern-modifizierer: - Methode wird extern implementiert, Verwendung bei Dll-Importen [DllImport( User32.dll )] public static extern int MessageBox(int h, string m, string c, int type) Überladen von Operatoren: - unäre und binäre Operatoren überladbar - Operatorenmethoden überladbar - immer public static public static TimeSpan operator -(DateTime t1, DateTime t2) public static DateTime operator -(DateTime t1, TimeSpan t2) Konvertierungsoperatoren: - für primitive Typen generiert Compiler Code für Konvertierung - eigene Typen können implizite (ohne Cast) und explizite (mit Cast) Konvertierungsoperatoren definieren - Verwendung: implizit: kein Genauigkeitsverlust bei Umwandlung explizit: Genauigkeitsverlust; Zieltyp kann nicht alle Quellwerte darstellen
29 Typmember - Methoden (4) class Rational public Rational(int zahl)... public Rational(double zahl)... public int ToInt()... public double ToDouble()... public static implicit operator Rational(int zahl) return new Rational(zahl); public static implicit operator Rational(double zahl) return new Rational(zahl); public static explicit operator int(rational r) return r.toint(); public static explicit operator double(rational r) return r.todouble(); Rational r1 = 5; // implizite Konvertierung von int nach Rational Rational r2 = 2.5; // implizite Konvertierung von double int z1 = (int)r1; // explizite Konvertierung von Rational nach int double z2 = (double)r2; // explizite Konvertierung nach double float z3 = (float)r2; // explizite Konvertierung nach int // dann Konvertierung nach float
30 Typmember - Delegates Mechanismus, um Callback-Funktionen aufzurufen Funktionsweise: - Schlüsselwort delegate + Name + Signatur der Callback-Funktion delegate void Feedback(object value); (ausserhalb von Klassen deklarierbar) - Compiler generiert intern Klasse (von MulticastDelegate abgeleitet) _target-feld (Verweis auf Objekt, Verwendung für Instanzmethodencallbacks) _methodptr-feld (interner Integer zur Identifikation der aufzurufenden Methode) _prev-feld(verweis auf ein anderes Delegatobjekt, Benutzung bei Delegatketten) Invoke-Methode (ruft Callback-Funktionen auf, besitzt daher selbe Signatur) - Callback-Funktionen anmelden: Feedback fb = new Feedback(App.ToConsole); // statische Cb-Fkt. fb += new Feedback(appobj.ToMsgBox); // Instanz-Cb-Fkt. hinzufügen Feedback(3); // Aufruf der beiden Callback-Funktionen mit Parameter 3 fb -= new Feedback(App.ToConsole); // Cb-Fkt. aus Delegate entfernen Feedback(1); // Aufruf von appobj.tomsgbox += u. -= generiert zu Delegate.Combine() bzw. Delegate.Remove() Möglichkeit mit Delegate.GetInvocationList() Cb-Fkt.-Aufruf zu steuern Möglichkeit des dyn. Erzeugens mit CreateDelegate() u. DynamicInvoke()
31 Typmember - Events basieren auf Delegates Funktionsweise: - Schlüsselwort event + Delegatename + Eventname public event TestEventHandler Test; - Namenskonvention des Delegates: *EventHandler - Prototyp des Delegates: delegate void EventHandler(object sender, EventArgs e); (Standard-Event-Delegate, deklariert im Namespace System) Delegates können eigene *EventArgs (Namenskonvention) definieren (von System.EventArgs neue Klasse ableiten) - Generierung des Compilers: private TestEventHandler Test = null; [MethodImpl(MethodImplOptions.Synchronized)] public void add_test(testeventhandler h) Test = (Test)Delegate.Combine(Test, h); [MethodImpl(MethodImplOptions.Synchronized)] public void remove_test(testeventhandler h) Test = (Test)Delegate.Remove(Test, h); Methodenzugriffsmodifizierer = Modifizierer bei der Deklaration von event
32 Typmember - Events (2) class TestEventArgs : EventArgs private string _Message; public string Message get return _Message; public TestEventArgs(string msg) _Message = msg; delegate void TestEventHandler(object sender, TestEventArgs e); class A public event TestEventHandler Test; public void Testen() if (Test!= null) Test(this, new TestEventArgs( Das ist der Test )); public static void TestIt(object sender, TestEventArgs e) Console.WriteLine(e.Message); A obj = new A(); obj.test += new TestEventHandler(TestIt); obj.testen(); // Funktion TestIt aufgerufen mit Ausgabe Das ist ein Test - Hinzufügen/Löschen der Callback-Funktionen nur über += -= - Möglichkeit eigene add_*, remove_* für event zu implementieren (ohne Synchronisation)
33 Schnittstellen entsprechen abstrakten Typen mit virtuellen Methoden enthalten keine Implementierung Member dürfen sein: Methoden, Properties, Events Deklaration mit Schlüsselwort interface Beispiele aus FCL: public interace System.Collections.IEnumerable IEnumerator GetEnumerator(); public interface System.Collections.IEnumerator _ bool MoveNext(); // Zugriffsmodifizierer verboten void Reset(); // implizit public virtual object Current get; Schnittstellen von anderen Schnittstellen ableitbar Implementierung von Schnittstellen: - Typ kann von einer oder mehreren Schnittstellen abgeleitet werden - Typ muss alle Schnittstellen(-member) implementieren, sonst abstrakt
34 Schnittstellen (2) public sealed class String : IComparable, ICloneable, IConvertible, IEnumerable... - Konvertierung des Objekts in Instanzen der Schnittstellen möglich string s = Test ; IComparable comparable = s; // Aufruf nur von IComparable-Methoden ICloneable cloneable = s; IEnumerable enumerable = (IEnumerable)cloneable; Variable von einer Schnittstelle in andere konvertierbar, wenn Typ beide impl. - explizite Implementierung von Schnittstellenmembern (Typsicherheit) struct EinWertTyp : IComparable int x; public EinWertTyp(int x) this.x = x; public int CompareTo(EinWertTyp wert) return x - wert.x; _ int IComparable.CompareTo(object wert) return CompareTo((EinWertTyp)wert); bei expliziter CompareTo() darf kein Zugriffsmodifizierer stehen (die Methode ist über Typobjekt private und über Schnittstellenvariable public) auch Impl. von Schnittstellen mit gleichem Methodenamen und Signatur möglich implementierte Schnittstellenmethoden ohne virtual implizit sealed
35 Geschachtelte Typen Zugriff auf alle Member des übergeordneten Typs Zugriff von ausserhalb über Typname des überg. Typs entsprechen den statischen inneren Klassen von Java class A int x = 3; Nested n = new Nested(); public void Foo() Console.WriteLine( (0,1), x, n.y); // kein Zugriff! public class Nested int y = 2; public void Foo() A a = new A(); Console.WriteLine( (0,1), a.x, y); // Zugriff erlaubt A.Nested n = new A.Nested(); n.foo()
36 Vererbung statische Methoden u. Member werden vererbt Ableitung: eine Basisklasse, mehrere Schnittstellen virtuelle Funktionsmember (Methoden, Properties, Events): - Implementierung vorhanden - Methode über Schlüsselwort virtual deklarieren - Überschreiben dieser Methode benötigt Schlüsselwort override (Compiler setzt ein Flag, um Überschreiben anzudeuten, wichtig für Versionierung) abstrakte Klassen und Member: - Methode abstrakt, wenn sie keine Implementierung besitzt - Klasse abstrakt, sobald sie eine Methode ohne Implement. besitzt - Deklaration muss mit Schlüsselwort abstract erfolgen - abstrakte Methoden sind implizit virtuell - Instanzbildung nicht möglich - abgeleitete Klasse muss geerbte abstrakte Member implementieren (Methoden benötigen Schlüsselwort override) oder abstrakt deklariert sein
37 Vererbung (2) versiegelte Klassen und Member durch sealed-deklaration: - bei Klassendeklaration: Ableitung von Klasse verboten - bei override-funktionsmember: Überschreiben in Subklasse verboten abstract class Basis public abstract void Display(); class A : Basis public override void Display() Console.WriteLine( Klasse A ); class B : Basis public override void Display() Console.WriteLine( Klasse B ); public virtual string Zahl get return new Random().Next().ToString(); sealed class C : B public override string Zahl get return Zufallszahl = + base.zahl; class D : C // Compile-Fehler: Basisklasse versiegelt!
38 Vererbung (3) Basis b = new Basis(); // Compile-Fehler: Instanz von abstrakter Klasse Basis b1 = new A(); Basis b2 = new B(); B b3 = new C(); b1.display(); // Ausgabe: Klasse A b2.display(); // Ausgabe: Klasse B Console.WriteLine(b3.Zahl); // Ausgabe: Zufallszahl = geerbte Member (alle Memberarten) mit new verbergen - Verwendung bei virtuellen Methoden: Abbruch der virtuellen Aufrufkette class A public virtual void Test() class B : A public override void Test() class C : B public new void Test() B b = new C(); b.test(); // Aufruf von B.Test() A a = new C(); a.test(); // Aufruf von B.Test() - Verwendung bei nicht virtuellen Methoden: Implementierung in Ableitung änderbar (Zugriff auf base möglich)
39 Arrays int[] intarray = new int[length]; // Array mit length int-werten im Heap Control[] ctrlarray = new Control[10]; // Array mit 10 Control-Verweisen int[] arr = new int[] 2, 3, 4; // Initialisierung (auch ohne new int[]) implizit von System.Array abgeleitet (Verweistyp) 2 Arten: - rechteckig (n-dimensionaler Block) int[,] = new int[5, 4]; // 2D-Array (5 Zeilen, 4 Spalten) string[,,] = new string[2, 2, 2]; // 3D-Array mit Stringverweisen - verzweigt (jagged, Arrays in Arrays) Point[][] polygone = new Point[2][]; polygone[0] = new Point[10]; polygone[1] = new Point[8]; CLR überprüft Gültigkeit von Index ungültiger Index: IndexOutOfRangeException Referenztyp-Arrays konvertierbar (Werttyp-Arrays nicht) - Array.Copy() kann auch für Werttyp-Arrays zum konvertieren genutzt werden Array dynamisch anlegen mit Array.CreateInstance()
40 Benutzerdefinierte Attribute Verknüpfung zusätzlicher Informationen mit einem Ziel Ziele: Assembly, Modul, Typ, Feld, Methode, Parameter, Rückgabewert, Property, Event Deklaration im Quelltext: [Flags] // Zuweisung über Ziel enum Color... - explizite Zuordnung durch Präfix: [assembly:assemblyversion( )] (Präfixe: assembly, module, type, property, event, field, return, method, param) Funktionsweise: - Attribut = Instanz eines Typs, der von System.Attribute abgeleitet ist - Attributdeklaration = Konstruktoraufruf (bei Std-K. () auch weglassen, siehe Flags) - Initialisierung der Felder, Properties: [DllImport( Kernel32, SetLastError=true)] - mehrere Attribute möglich: [Flags, Serializable] = [Flags][Serializable] - Compiler serialisiert Attributinstanz und schreibt diese in die Metadaten oder wertet dieses sofort aus ([Obsolete( Veraltet, IsError=true)], [Conditional( DEBUG )]) - einige Attribute sind pseudo-benutzerdef., d.h. Metadaten enthalten nur Bitflag - Attribute sollten im Code ausgewertet werden Zugriff über Reflektionsklassen oder statische Methoden von Attribute oft übernehmen das FCL-Klassen, beispielsweise beim Serialisieren Möglichkeit eigene Attribute zu definieren
41 Exceptions try // Code, in dem Ausnahmen auftreten können catch (Exception e) // Ausnahmefilter // Behandlung der aufgetretenen Ausnahmen finally // Bereinigungscode nach try-block muss catch- oder finally-block folgen catch-block: - Variablentyp: System.Exception oder abgeleitete Klasse (CLS-kompatibel) - Typ Exception hat Properties wie Message (nützliche Erklärungen über Ursache) StackTrace (Infos über Methoden, die vor Ausnahme aufgerufen wurden) TargetSite (Methode, durch welche Ausnahme ausgelöst wurde)
42 Exceptions (2) - Deklaration auch ohne Variablenname möglich - Definition von keinem oder auch mehreren möglich (spezifischere Ausnahme vor der allgemeineren deklarieren)... catch (ArgumentException e)... catch (Exception)... catch... // fängt auch nicht CLS-kompatible Ausnahmen... - Ausnahme erneut auslösen: throw; teilweise ausgeführte Operation abbrechen und Aufrufer über Ausn. informieren finally-block: - wird immer aufgerufen, egal ob Ausnahme ausgelöst wurde - auch dann aufgerufen, wenn in höherer Ebene Ausnahme behandelt wird Möglichkeit eigene Ausnahmeklassen zu definieren Ausnahmen auslösen (nur CLS-kompatible) throw new NullReferenceException( Zugriff auf Null-Verweis ); - spezifische Ausnahmen auslösen (d.h. Klassen, die keine Ableitung besitzen)
43 Namespaces Schlüsselwort namespace zur Deklaration Typen ohne Namensraumzuweisung gehören zum globalen Namensraum (oberste Ebene, in der alle Typen u. NS deklariert) Zugriff auf Typen über Namensraumangabe System.Web.UI.WebControls.Label l = new System.Web.UI.WebControls.Label() Abhilfe gegen Schreibarbeit schafft using-direktive - angegebener Namespace wird eingebunden und damit direkter Zugriff using System.Web.UI.WebControls; Label = new Label(); (Zugriff auf alle Typen in diesem Namensraum, nicht auf Subnamensräume using System; heißt nicht ich kann auf Label zugreifen) - Aliasdeklaration bei Namenskonflikten using WebLabel = System.Web.UI.WebControls.Label; using WinLabel = System.Windows.Forms.Label; WebLabel webl = new WebLabel(); WinLabel winl = new WinLabel();
44 Kontrollstrukturen Syntax und Semantik identisch mit C++ - Ausnahme: switch-anweisung jeder Zweig (auch default) muss mit Sprunganweisung (break, goto) enden (ausser der Zweig ist leer, dann funktioniert auch das Durchfallen ) switch-anweisung kann auch string auswerten foreach-schleife: - zum eleganteren Durchlaufen einer Collection - Anwendung auf Typen, die IEnumerable implementieren (alle Collections, Arrays) Hashtable table = new Hashtable(); table[ 1. Tag ] = Montag ; table[ 2. Tag ] = Dienstag ; foreach (DictionaryEntry entry in table) Console.WriteLine( table[0]=1, entry.key, entry.value); entspricht IEnumerator e = table.getenumerator(); while (e.movenext()) Console.WriteLine( 0=1,e.Current.Key, e.current.value); // Ausgabe: 1. Tag = Montag // 2. Tag = Dienstag
45 Verschiedenes Operator as: - führt Downcast durch, bei Scheitern Verweis = null - nur auf Verweistypen anwendbar int a = 7; object o = a; string s = o as string; // s = null, weil o auf int-wert zeigt s = (string)o; // InvalidCastException Operator is: - Test, ob Objekt Typ einer spezifischen Klasse oder Interface Point pt = new Point3D(); if (pt is Point3D) // true if (pt is Point) // true if (pt is object) // true if (pt is int) // false Operator typeof: - Abrufen des System.Type-Objekts für einen angegeben Typ Nutzen für Reflektion Type t = typeof(point); // äquivalent zu pt.gettype() MethodInfo[] mi = t.getmethods();
46 Verschiedenes (2) Operator sizeof: - Syntax u. Semantik wie C++ - nur im unsafe-modus u. nur auf Werttypen anwendbar checked, unchecked-operatoren/anweisungen: - arithmetische Überläufe in Anweisungen beachten oder nicht - bei Beachtung: Auslösen einer OverflowException - Standardeinstellung: keine Überlaufprüfung (schneller) - Compiler durch Schalter anweisen: /checked (Überlaufprüfung überall da ausführen, wo es nicht explizit anders steht) byte b = 100; b = checked((byte)(b + 200)); // OverflowException b = (byte) checked(b + 200); // keine Exception, checked b = 100; b = (byte)(b + 200); // oder: b += 200; OverflowException
47 Verschiedenes (3) lock-anweisung: - verkürzte Syntax für Aufruf von Enter(), Exit() der Klasse Monitor (Synchronisierung von Threads) - Parameter ist Objekt vom Typ object lock(this)... using-anweisung: using (FileStream fs = new FileStream( Datei.txt, FileMode.Open)... - verkürzte Syntax für FileStream fs = new FileStream( Datei.txt, FileMode.Open) try... finally if (fs!= null) ((IDisposable)fs).Dispose(); - nur anwendbar auf Typen, die IDisposable implementieren
48 Ausblick C# 2.0 Spezifikation: - Generics generische Typen (ähnelt stark den C++-Templates) - Anonymous Methods Definition von Inline-Eventhandlern Button.Click += delegate(object sender, EventArgs e)... ; - Iterators variableres Iterieren über Collections, Arrays - Partial Types Typ über verschiedene Dateien splitten - Nullable Types Werttypen einen unbestimmten Wert zuweisen Integriert im.net Framework 2.0 (2005) Download Spezifikation:
49 Quellen Jeffrey Richter: Microsoft.NET Framework Programmierung Microsoft Press, 2002 Peter Drayton, Ben Albahari, Ted Neward: C# in a nutshell O Reilly, 2003 Jeff Prosise:.NET Entwicklerbuch Microsoft Press, 2002 MSDN-Library ILDasm.exe Intermediate Language Disassembler
Vorkurs C++ Programmierung
Vorkurs C++ Programmierung Klassen Letzte Stunde Speicherverwaltung automatische Speicherverwaltung auf dem Stack dynamische Speicherverwaltung auf dem Heap new/new[] und delete/delete[] Speicherklassen:
Vererbung & Schnittstellen in C#
Vererbung & Schnittstellen in C# Inhaltsübersicht - Vorüberlegung - Vererbung - Schnittstellenklassen - Zusammenfassung 1 Vorüberlegung Wozu benötigt man Vererbung überhaubt? 1.Um Zeit zu sparen! Verwendung
Typsystem Plattform- und Sprachenunabhängigkeit in.net
Typsystem Plattform- und Sprachenunabhängigkeit in.net C# J# VB.NET Zwischencode CIL Windows Unix Auf welchen Grundlagen basiert dies? Komponenten & Frameworks Seite 1 Typsystem Grundlagen - CLR Common
3. Auflage. O Reillys Taschenbibliothek. C# 5.0 kurz & gut. Joseph Albahari & Ben Albahari O REILLY. Aktualisierung von Lars Schulten
O Reillys Taschenbibliothek 3. Auflage C# 5.0 kurz & gut O REILLY Joseph Albahari & Ben Albahari Aktualisierung von Lars Schulten Inhalt C# 5.0 kurz & gut... 1 Ein erstes C#-Programm... 2 Syntax... 5 Typgrundlagen...
Einführung in C#.NET. 1 Übersicht. 2 Typen (Types) Dieser Artikel stammt aus dem Magazin von C++.de (http://magazin.c-plusplus.de)
Dieser Artikel stammt aus dem Magazin von C++.de (http://magazin.c-plusplus.de) Einführung in C#.NET 1. Übersicht 2. Typen 3. Enumerationen (Enums) 4. Felder (Arrays) 5. Boxing & Unboxing 6. Overflow Checks
C# im Vergleich zu Java
C# im Vergleich zu Java Serhad Ilgün Seminar Universität Dortmund SS 03 Gliederung Entstehung von C# und Java Überblick von C# und Java Unterschiede und Gemeinsamkeiten Zusammenfassung und Ausblick Entstehung
Objektorientierte Programmierung. Kapitel 12: Interfaces
12. Interfaces 1/14 Objektorientierte Programmierung Kapitel 12: Interfaces Stefan Brass Martin-Luther-Universität Halle-Wittenberg Wintersemester 2012/13 http://www.informatik.uni-halle.de/ brass/oop12/
3 Objektorientierte Konzepte in Java
3 Objektorientierte Konzepte in Java 3.1 Klassendeklarationen Fragen an die Klassendeklaration: Wie heißt die Klasse? Wer darf auf die Klasse und ihre Attribute/Methoden zugreifen? Ist die Klasse eine
Stack stack = new Stack(); stack.push ("Würstchen"); string s = (string) stack.pop(); Console.WriteLine (s);
D3kjd3Di38lk323nnm Der Typ object object (System.Object) ist die Ausgangsbasisklasse für alle Typen. Jeder Typ kann per Upcast in ein object umgewandelt werden. Um zu zeigen, wie das nützlich sein kann,
Neue Features in C# 2.0
Neue Features in C# 2.0 (gekürzt) Generische Typen Iteratoren Vereinfachte Delegate-Erzeugung Anonyme Methoden Partielle Klassen Sonstiges University of Linz, Institute for System Software, 2004 published
Programmieren in Java
Programmieren in Java objektorientierte Programmierung 2 2 Zusammenhang Klasse-Datei In jeder *.java Datei kann es genau eine public-klasse geben wobei Klassen- und Dateiname übereinstimmen. Es können
Einheitliches Typsystem
Typen 1 Einheitliches Typsystem Typen Werttypen Referenztypen Zeiger Einfache Typen Enums Structs Klassen Interfaces Arrays Delegates bool char sbyte short int long byte ushort uint ulong float double
Javakurs zu Informatik I. Henning Heitkötter
Javakurs zu Informatik I Arrays vergleichen Implementieren Sie folgende Methode, die prüft, ob die Elemente der beiden Arrays an jeder Position übereinstimmen: public static boolean identisch(int[] a,
Microsoft.NET Framework- Programmierung mit C#
Jeffrey Richter (Wintellect) Microsoft.NET Framework- Programmierung mit C# Zweite Ausgabe Mit einem Vorwort von Aidan Richter Microsoft Inhaltsverzeichnis Vorwort 15 Einführung 17 Die Entwicklungsplattform:
Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...
PIWIN I Kap. 8 Objektorientierte Programmierung - Vererbung 31 Schlüsselwort: final Verhindert, dass eine Methode überschrieben wird public final int holekontostand() {... Erben von einer Klasse verbieten:
Java Kurs für Anfänger Einheit 5 Methoden
Java Kurs für Anfänger Einheit 5 Methoden Ludwig-Maximilians-Universität München (Institut für Informatik: Programmierung und Softwaretechnik von Prof.Wirsing) 22. Juni 2009 Inhaltsverzeichnis Methoden
Grundlagen von Python
Einführung in Python Grundlagen von Python Felix Döring, Felix Wittwer November 17, 2015 Scriptcharakter Programmierparadigmen Imperatives Programmieren Das Scoping Problem Objektorientiertes Programmieren
Einführung in die Programmierung
Technische Universität München WS 2003/2004 Institut für Informatik Prof. Dr. Christoph Zenger Testklausur Einführung in die Programmierung Probeklausur Java (Lösungsvorschlag) 1 Die Klasse ArrayList In
Tutorium Rechnerorganisation
Woche 2 Tutorien 3 und 4 zur Vorlesung Rechnerorganisation 1 Christian A. Mandery: KIT Universität des Landes Baden-Württemberg und nationales Grossforschungszentrum in der Helmholtz-Gemeinschaft www.kit.edu
Einführung in die Java- Programmierung
Einführung in die Java- Programmierung Dr. Volker Riediger Tassilo Horn riediger [email protected] WiSe 2012/13 1 Wichtig... Mittags keine Pommes... Praktikum A 230 C 207 (Madeleine + Esma) F 112 F 113
3 Objektorientierte Konzepte in Java
3 Objektorientierte Konzepte in Java Bisherige Beobachtungen zu Objekten: werden in Klassen zusammengefasst besitzen Eigenschaften und Verhalten verbergen private Informationen werden geboren, leben und
Prof. W. Henrich Seite 1
Klasse - ist ein benutzerdefinierter Datentyp (Referenztyp) - hat Datenelemente - hat Methoden - Konstruktor ist spezielle Methode zum Erstellen eines Objektes vom Typ der Klasse (Instanz) - jede Klasse
Kapitel 6. Vererbung
1 Kapitel 6 2 Ziele Das sprinzip der objektorientierten Programmierung verstehen Und in Java umsetzen können Insbesondere folgende Begriffe verstehen und anwenden können: Ober/Unterklassen Subtyping Überschreiben
Kapitel 6. Vererbung
Kapitel 6 Vererbung Vererbung 1 Ziele Das Vererbungsprinzip der objektorientierten Programmierung verstehen Und in Java umsetzen können Insbesondere folgende Begriffe verstehen und anwenden können: Ober/Unterklassen
Delegatesund Ereignisse
Delegatesund Ereignisse «Delegierter» Methoden Schablone Funktionszeiger Dr. Beatrice Amrhein Überblick Definition eines Delegat Einfache Delegate Beispiele von Delegat-Anwendungen Definition eines Ereignisses
Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf http://informatik.swoke.de. Seite 1 von 22
Kapitel 19 Vererbung, UML Seite 1 von 22 Vererbung - Neben der Datenabstraktion und der Datenkapselung ist die Vererbung ein weiteres Merkmal der OOP. - Durch Vererbung werden die Methoden und die Eigenschaften
C#Objektorientierte. Aleksandra Maj. Programmiersprachen. Programmiersprachen am Beispiel C# Referat im Rahmen des Seminars. 15.
C#Objektorientierte Programmiersprachen am Beispiel C# Referat im Rahmen des Seminars Programmiersprachen 15.Juli 2004 Aleksandra Maj 1 1.Einleitung Kurze Geschichte und Ziele der neuen Programmiersprache
Modellierung und Programmierung 1
Modellierung und Programmierung 1 Prof. Dr. Sonja Prohaska Computational EvoDevo Group Institut für Informatik Universität Leipzig 19. November 2015 Gültigkeitsbereich (Scope) von Variablen { int m; {
Objektorientierte Programmierung
Objektorientierte Programmierung 1 Geschichte Dahl, Nygaard: Simula 67 (Algol 60 + Objektorientierung) Kay et al.: Smalltalk (erste rein-objektorientierte Sprache) Object Pascal, Objective C, C++ (wiederum
Programmierkurs Java
Programmierkurs Java Dr. Dietrich Boles Aufgaben zu UE16-Rekursion (Stand 09.12.2011) Aufgabe 1: Implementieren Sie in Java ein Programm, das solange einzelne Zeichen vom Terminal einliest, bis ein #-Zeichen
GetName(), GetName(), GetGeschlecht() und AelterWerden().
11. Vererbung Vererbung ist eine der mächtigsten Funktionalitäten der objektorientierten Programmiersprachen. Man versteht unter Vererbung die Tatsache, dass eine Klasse alle Methoden und Variablen einer
II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:
Technische Informatik für Ingenieure (TIfI) WS 2005/2006, Vorlesung 9 II. Grundlagen der Programmierung Ekkart Kindler Funktionen und Prozeduren Datenstrukturen 9. Datenstrukturen Daten zusammenfassen
Einfache Arrays. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung
Annabelle Klarl Zentralübung zur Vorlesung Einführung in die Informatik: http://www.pst.ifi.lmu.de/lehre/wise-13-14/infoeinf WS13/14 Action required now 1. Smartphone: installiere die App "socrative student"
Javadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck
Javadoc Programmiermethodik Eva Zangerle Universität Innsbruck Überblick Einführung Java Ein erster Überblick Objektorientierung Vererbung und Polymorphismus Ausnahmebehandlung Pakete und Javadoc Spezielle
Java Einführung Collections
Java Einführung Collections Inhalt dieser Einheit Behälterklassen, die in der Java API bereitgestellt werden Wiederholung Array Collections (Vector, List, Set) Map 2 Wiederholung Array a[0] a[1] a[2] a[3]...
4 Vererbung, Polymorphie
4 Vererbung, Polymorphie Jörn Loviscach Versionsstand: 21. März 2014, 22:57 Die nummerierten Felder sind absichtlich leer, zum Ausfüllen beim Ansehen der Videos: http://www.j3l7h.de/videos.html This work
C++ - Operatoren. Eigene Klassen mit neuen Funktionen
C++ - Operatoren Eigene Klassen mit neuen Funktionen Übersicht Klassen bisher Eigene Operatoren definieren 2 Bisher Durch Kapselung, Vererbung und Polymorphy können nun eigene Klassen definiert werden,
Kapitel 6. Vererbung
1 Kapitel 6 2 Ziele Das sprinzip der objektorientierten Programmierung verstehen Und in Java umsetzen können Insbesondere folgende Begriffe verstehen und anwenden können: Ober/Unterklassen Subtyping Überschreiben
Einführung in die Java- Programmierung
Einführung in die Java- Programmierung Dr. Volker Riediger Tassilo Horn riediger [email protected] WiSe 2012/13 1 Wichtig... Mittags Pommes... Praktikum A 230 C 207 (Madeleine) F 112 F 113 (Kevin) E
Javakurs 2013 Objektorientierung
Javakurs 2013 Objektorientierung Objektorientierte Programmierung I Armelle Vérité 7 März 2013 Technische Universität Berlin This work is licensed under the Creative Commons Attribution-ShareAlike 3.0
Variablen und Parameter
D3kjd3Di38lk323nnm Variablen und Parameter Eine Variable repräsentiert einen Speicherbereich, der einen veränderbaren Wert enthält. Eine Variable kann eine lokale Variable, ein Parameter (value, ref oder
Java-Schulung Grundlagen
Java-Schulung Grundlagen Java 2 Standard Edition JDK 5 / 6 31.05.2008 Marcel Wieczorek 1 Themenübersicht Basiswissen Objektorientierung Datentypen Fehlerbehandlung Sonstiges Einführung Klassen, Strings
~±] Inhalt. 1.1 Ähnlichkeiten zwischen C# und Java Unterschiede zwischen C# und Java Das.NET-Framework 4 1.
~±] 1 C# und das.net-framework 1 1.1 Ähnlichkeiten zwischen C# und Java 1 1.2 Unterschiede zwischen C# und Java 2 1.3 Das.NET-Framework 4 1.4 Übungsaufgaben 9 2 Erste Schritte 11 2.1 Hello World 11 2.2
Das Typsystem von Scala. L. Piepmeyer: Funktionale Programmierung - Das Typsystem von Scala
Das Typsystem von Scala 1 Eigenschaften Das Typsystem von Scala ist statisch, implizit und sicher 2 Nichts Primitives Alles ist ein Objekt, es gibt keine primitiven Datentypen scala> 42.hashCode() res0:
C# anhand von ECMA-334. Das große Seminar WS 04/05. 07.12.2004 Daniel Wiese
C# anhand von ECMA-334 Das große Seminar WS 04/05 07.12.2004 Daniel Wiese Die Geschichte von C# Standard ECMA 334 Entwicklungsumgebung Sprachelemente von C# Datentypen Variablen und Parameter Ausdrücke
Klassenbeziehungen & Vererbung
Klassenbeziehungen & Vererbung VL Objektorientierte Programmierung Raimund Kirner teilweise nach Folien von Franz Puntigam, TU Wien Überblick Arten von Klassenbeziehungen Untertypen versus Vererbung in
Besonderheiten von C#
Besonderheiten von C# Wert- und Referenztypen int a, b; a = 3; b = a; a++; Debug.Assert( a==4 && b==3 &&!a.equals(b), "int ist doch kein Werttyp" ); RTyp ra, rb; ra = new RTyp(3); rb = ra; ra.inc(); Debug.Assert(
Java Einführung Abstrakte Klassen und Interfaces
Java Einführung Abstrakte Klassen und Interfaces Interface Interface bieten in Java ist die Möglichkeit, einheitliche Schnittstelle für Klassen zu definieren, die später oder/und durch andere Programmierer
Java Kurs für Anfänger Einheit 4 Klassen und Objekte
Java Kurs für Anfänger Einheit 4 Klassen und Ludwig-Maximilians-Universität München (Institut für Informatik: Programmierung und Softwaretechnik von Prof.Wirsing) 13. Juni 2009 Inhaltsverzeichnis klasse
SEP 114. Design by Contract
Design by Contract SEP 114 Design by Contract Teile das zu entwickelnde Programm in kleine Einheiten (Klassen, Methoden), die unabhängig voneinander entwickelt und überprüft werden können. Einheiten mit
Methoden. von Objekten definiert werden, Methoden,, Zugriffsmethoden und Read-Only
Methoden Wie Konstruktoren und Destruktoren zum Auf- und Abbau von Objekten definiert werden, Wie inline-methoden Methoden,, Zugriffsmethoden und Read-Only Only- Methoden einzusetzen sind, Der this-pointer
Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag
Ludwig-Maximilians-Universität München WS 2015/16 Institut für Informatik Übungsblatt 9 Prof. Dr. R. Hennicker, A. Klarl Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung:
Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = 0.51129 Euro ergeben.
Aufgabe 1.30 : Schreibe ein Programm DM_in_Euro.java zur Umrechnung eines DM-Betrags in Euro unter Verwendung einer Konstanten für den Umrechnungsfaktor. Das Programm soll den DM-Betrag als Parameter verarbeiten.
Modul 122 VBA Scribt.docx
Modul 122 VBA-Scribt 1/5 1 Entwicklungsumgebung - ALT + F11 VBA-Entwicklungsumgebung öffnen 2 Prozeduren (Sub-Prozeduren) Eine Prozedur besteht aus folgenden Bestandteilen: [Private Public] Sub subname([byval
Applet Firewall und Freigabe der Objekte
Hauptseminar Applet Firewall und Freigabe der Objekte Nachweis von Sicherheitseigenschaften für JavaCard Jin Zhou Ein Überblick über diesen Vortrag Applet Firewall Kontext JCRE Entry Point Objekt Shareable
C# Programmierung. Eine Einführung in das.net Framework. C# Programmierung - Tag 2: Einstieg in die OOP
C# Programmierung Eine Einführung in das.net Framework C# Programmierung - Tag 2: Einstieg in die OOP 1/27/2012 1 Di Datentypen Arrays Operatoren Parameter Überladen Heap / Stack Klassen (un)boxing Tag
Gliederung Grundlagen Schlüsselworte try-catch Fehlerobjekte Fehlerklassen Schlüsselwort finally Schlüsselwort throws selbst erstellte Exceptions
try-catch Schlüsselworte try-catch e Schlüsselwort Schlüsselwort selbst erstellte ermöglichen die Behandlung von Fehlern, die zur Laufzeit entstehen. try-catch in C: Fehler führt immer zum Abbruch des
Große Übung Praktische Informatik 1
Große Übung Praktische Informatik 1 2005-12-08 [email protected] http://www.informatik.uni-mannheim.de/pi4/people/fuessler 1: Announcements / Orga Weihnachtsklausur zählt als Übungsblatt,
Exceptions und Vererbung
Exceptions und Vererbung Marc Satkowski 20. November 2016 C# Kurs Gliederung 1. Vererbung Polymorphie Methoden- & Eigenschaftsüberschreibung Weitere Schlüsselwörter 2. Exceptions Eigene Exceptions Handling
Deklarationen in C. Prof. Dr. Margarita Esponda
Deklarationen in C 1 Deklarationen Deklarationen spielen eine zentrale Rolle in der C-Programmiersprache. Deklarationen Variablen Funktionen Die Deklarationen von Variablen und Funktionen haben viele Gemeinsamkeiten.
Java: Vererbung. Teil 3: super() www.informatikzentrale.de
Java: Vererbung Teil 3: super() Konstruktor und Vererbung Kindklasse ruft SELBSTSTÄNDIG und IMMER zuerst den Konstruktor der Elternklasse auf! Konstruktor und Vererbung Kindklasse ruft SELBSTSTÄNDIG und
Objektbasierte Entwicklung
Embedded Software Objektbasierte Entwicklung Objektorientierung in C? Prof. Dr. Nikolaus Wulff Objektbasiert entwickeln Ohne C++ wird meist C im alten Stil programmiert. => Ein endlose while-schleife mit
13. Tutorium zu Programmieren
13. Tutorium zu Programmieren Dennis Ewert Gruppe 6 Universität Karlsruhe Institut für Programmstrukturen und Datenorganisation (IPD) Lehrstuhl Programmierparadigmen WS 2008/2009 c 2009 by IPD Snelting
Einführung in die. objektorientierte Programmierung
Einführung in die objektorientierte Programmierung Teil 3 Vererbung Modul WI111: Objektorientierte Programmierung Fachrichtung Wirtschaftsinformatik Prof. Dr. Gert Faustmann Fachbereich Berufsakademie
5 DATEN. 5.1. Variablen. Variablen können beliebige Werte zugewiesen und im Gegensatz zu
Daten Makro + VBA effektiv 5 DATEN 5.1. Variablen Variablen können beliebige Werte zugewiesen und im Gegensatz zu Konstanten jederzeit im Programm verändert werden. Als Variablen können beliebige Zeichenketten
Eine Klasse beschreibt Objekte mit gleichen Attributen und Methoden.
Grundwissen Informatik Objekt Attribut Methoden Als Objekte bezeichnet man alle Gegenstände, Dinge, Lebewesen, Begriffe oder Strukturen unserer Welt ( Autos, Räume, Bakterien, Lehrer, Schüler, Kunden,
Übung 1 mit C# 6.0 MATTHIAS RONCORONI
Übung 1 mit C# 6.0 MATTHIAS RONCORONI Inhalt 2 1. Überblick über C# 2. Lösung der Übung 1 3. Code 4. Demo C# allgemein 3 aktuell: C# 6.0 mit.net-framework 4.6: Multiparadigmatisch (Strukturiert, Objektorientiert,
Einführung in die objektorientierte Programmierung mit Java. Klausur am 19. Oktober 2005
Einführung in die objektorientierte Programmierung mit Java Klausur am 19. Oktober 2005 Matrikelnummer: Nachname: Vorname: Semesteranzahl: Die Klausur besteht aus drei Frageblöcken zu den Inhalten der
Sprachvergleich C# / Java / C++
Dieses Dokument vergleicht die Programmiersprachen C# in den Versionen 2.0 und 3.0 mit den Sprachen Java in der Version 6 und ANSI C++ ohne die jeweils vielfältigen Bibliotheken zu berücksichtigen. In
Die Programmiersprache C99: Zusammenfassung
Die Programmiersprache C99: Zusammenfassung Jörn Loviscach Versionsstand: 7. Dezember 2010, 19:30 Die nummerierten Felder sind absichtlich leer, zum Ausfüllen in der Vorlesung. Videos dazu: http://www.youtube.com/joernloviscach
WPF Steuerelemente Listbox, ComboBox, ListView,
WPF Steuerelemente Listbox, ComboBox, ListView, Dr. Beatrice Amrhein Überblick Einführung Listen ComboBox Tabellen 2 Einführung 3 Listen- und Tabellen-Elemente Listen und Tabellen-Elemente sind Steuerelemente,
C# 2000 Expression Beispielcodes für Konsolen- und Formularanwendung
C# 2000 Expression Beispielcodes für Konsolen- und Formularanwendung 1. "Hai!" [Konsolenanwendung] Console.WriteLine("Hai, wie geht's?"); 2. Muktiplikation mit sich selbst [Konsolenanwendung] // Ausgabe
Einführung in C# Teil 1. Matthias Nübling
Einführung in C# Teil 1 Matthias Nübling Vorausgesetzte Grundkenntnisse Programmierung Typen, Variablen, Anweisungen, Funktionen, etc. Objektorientierte Programmierung Klassen, Vererbung, Polymorphismus,
Prinzipien Objektorientierter Programmierung
Prinzipien Objektorientierter Programmierung Valerian Wintner Inhaltsverzeichnis 1 Vorwort 1 2 Kapselung 1 3 Polymorphie 2 3.1 Dynamische Polymorphie...................... 2 3.2 Statische Polymorphie........................
5. Abstrakte Klassen. Beispiel (3) Abstrakte Klasse. Beispiel (2) Angenommen, wir wollen die folgende Klassenhierarchie implementieren:
5. Abstrakte Klassen Beispiel 5. Abstrakte Klassen 5. Abstrakte Klassen Beispiel Beispiel (3) Angenommen, wir wollen die folgende Klassenhierarchie implementieren: Probleme des Implementierungsvorschlags:
Objektorientierte Programmierung
Universität der Bundeswehr Fakultät für Informatik Institut 2 Priv.-Doz. Dr. Lothar Schmitz FT 2006 Zusatzaufgaben Lösungsvorschlag Objektorientierte Programmierung Lösung 22 (Java und UML-Klassendiagramm)
Innere Klassen in Java
Innere Klassen in Java SS 2012 Prof. Dr. Margarita Esponda Innere Klassen Klassen- oder Interfacedefinitionen können zur besseren Strukturierung von Programmen verschachtelt werden Eine "Inner Class" wird
Prof. Dr. Uwe Schmidt. 21. August 2007. Aufgaben zur Klausur Objektorientierte Programmierung im SS 2007 (IA 252)
Prof. Dr. Uwe Schmidt 21. August 2007 Aufgaben zur Klausur Objektorientierte Programmierung im SS 2007 (IA 252) Zeit: 75 Minuten erlaubte Hilfsmittel: keine Bitte tragen Sie Ihre Antworten und fertigen
Klausurteilnehmer. Wichtige Hinweise. Note: Klausur Informatik Programmierung, 17.09.2012 Seite 1 von 8 HS OWL, FB 7, Malte Wattenberg.
Klausur Informatik Programmierung, 17.09.2012 Seite 1 von 8 Klausurteilnehmer Name: Matrikelnummer: Wichtige Hinweise Es sind keinerlei Hilfsmittel zugelassen auch keine Taschenrechner! Die Klausur dauert
Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf http://informatik.swoke.de. Seite 1 von 18
Kapitel 3 Datentypen und Variablen Seite 1 von 18 Datentypen - Einführung - Für jede Variable muss ein Datentyp festgelegt werden. - Hierdurch werden die Wertemenge und die verwendbaren Operatoren festgelegt.
Computeranwendung und Programmierung (CuP)
Computeranwendung und Programmierung (CuP) VO: Peter Auer (Informationstechnologie) UE: Norbert Seifter (Angewandet Mathematik) Organisatorisches (Vorlesung) Vorlesungszeiten Montag 11:15 12:45 Freitag
Einführung in Java. PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005
Einführung in Java PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005 Gliederung 1. Was ist Java / Geschichte von Java 2. Prinzip der Plattformunabhängigkeit 3. Wie kommt man vom Quellcode zum Programm
Einführung in die Programmiersprache C#
Einführung in die Programmiersprache C# C# Übersicht Einführung in das.net Framework Konzepte / Architektur Einführung in C#, speziell Unterschiede zu Java .NET: Framework, Sprachen und Werkzeuge .NET
Java Virtual Machine (JVM) Bytecode
Java Virtual Machine (JVM) durch Java-Interpreter (java) realisiert abstrakte Maschine = Softwareschicht zwischen Anwendung und Betriebssystem verantwortlich für Laden von Klassen, Ausführen des Bytecodes,
im Rahmen des Seminars - Programmiersprachen Markus Nestvogel
C# im Rahmen des Seminars - Programmiersprachen Markus Nestvogel 2 Gliederung 1. Einführung 2. Microsoft.NET 3. C# 3 1 Einführung objektorientierte Programmiersprache für Microsoft.NET entwickelt Konkurrenz
Programmieren I. Strategie zum Entwurf von Klassen. Beispiele. Design von Klassen. Dr. Klaus Höppner. Beispiel: Bibliothek
Programmieren I Dr. Klaus Höppner Hochschule Darmstadt Wintersemester 2008/2009 1 / 22 2 / 22 Strategie zum Entwurf von Klassen Beispiele Objektorientierte Sichtweise: Mit welchen Objekten habe ich es
C++ - Einführung in die Programmiersprache Polymorphismus und Vererbung. Eltern
C++ - Einführung in die Programmiersprache Polymorphismus und Vererbung Eltern Kind Kind Vererbung Definition von Klassen auf Basis von bestehenden Klassen. Implementierung von ist ein. bildet ein hierarchisches
Objektorientierung. Marc Satkowski 20. November C# Kurs
Objektorientierung Marc Satkowski 20. November 2016 C# Kurs Gliederung 1. Weiterführende Verzweigungen Tertiäre-Verzweigung switch case 2. Schleifen Zählschleife (for) break & continue 3. Objektorientierung
Einführung in C# Teil 3. Matthias Nübling
Einführung in C# Teil 3 Matthias Nübling Vorausgesetzte Grundkenntnisse Programmierung Typen, Variablen, Anweisungen, Funktionen, etc. Objektorientierte Programmierung Klassen, Vererbung, Polymorphismus,
Übung 9 - Lösungsvorschlag
Universität Innsbruck - Institut für Informatik Datenbanken und Informationssysteme Prof. Günther Specht, Eva Zangerle Besprechung: 15.12.2008 Einführung in die Informatik Übung 9 - Lösungsvorschlag Aufgabe
Pass by Value Pass by Reference Defaults, Overloading, variable Parameteranzahl
Funktionen Zusammenfassung von Befehlssequenzen als aufrufbare/wiederverwendbare Funktionen in einem Programmblock mit festgelegter Schnittstelle (Signatur) Derartige prozedurale Programmierung erlaubt
Programmieren in C. Macros, Funktionen und modulare Programmstruktur. Prof. Dr. Nikolaus Wulff
Programmieren in C Macros, Funktionen und modulare Programmstruktur Prof. Dr. Nikolaus Wulff Der C Präprozessor Vor einem Compile Lauf werden alle Präprozessor Kommandos/Makros ausgewertet. Diese sind
Teil A Einführung in Microsoft Visual C# und Microsoft Visual Studio 2008 23
Einleitung 13 Einführung 13 An wen sich dieses Buch richtet 13 Wegweiser für Ein- und Umsteiger 14 Konventionen und Features in diesem Buch 15 Konventionen 15 Weitere Features 16 Systemvoraussetzungen
5. Tutorium zu Programmieren
5. Tutorium zu Programmieren Dennis Ewert Gruppe 6 Universität Karlsruhe Institut für Programmstrukturen und Datenorganisation (IPD) Lehrstuhl Programmierparadigmen WS 2008/2009 c 2008 by IPD Snelting
5. Abstrakte Klassen
5. Abstrakte Klassen Beispiel 5. Abstrakte Klassen Angenommen, wir wollen die folgende Klassenhierarchie implementieren: Vogel Amsel Drossel Fink Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg,
Typumwandlungen bei Referenztypen
Typumwandlungen bei Referenztypen Genau wie es bei einfachen Typen Typumwandlungen gibt, gibt es auch bei Referenztypen Umwandlungen von einem Referenztypen in einen anderen Referenztypen, die wie bei
Programmierkurs Java
Programmierkurs Java Konstruktor, Statische Methoden Packages Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck http://www.itm.uni-luebeck.de/people/fischer Initialisierung von Datenstrukturen
1 Polymorphie (Vielgestaltigkeit)
1 Polymorphie (Vielgestaltigkeit) Problem: Unsere Datenstrukturen List, Stack und Queue können einzig und allein int-werte aufnehmen. Wollen wir String-Objekte, andere Arten von Zahlen oder andere Objekttypen
Java Einführung Methoden in Klassen
Java Einführung Methoden in Klassen Lehrziel der Einheit Methoden Signatur (=Deklaration) einer Methode Zugriff/Sichtbarkeit Rückgabewerte Parameter Aufruf von Methoden (Nachrichten) Information Hiding
