Thorsten Kansy LINQ. Direkte Abfragen mit Language Integrated Query

Größe: px
Ab Seite anzeigen:

Download "Thorsten Kansy LINQ. Direkte Abfragen mit Language Integrated Query"

Transkript

1

2 Thorsten Kansy LINQ

3

4 Thorsten Kansy LINQ Direkte Abfragen mit Language Integrated Query

5 Thorsten Kansy: LINQ Direkte Abfragen mit Language Integrated Query ISBN: entwickler.press Ein Imprint der Software & Support Verlag GmbH Bibliografische Information Der Deutschen Bibliothek Die Deutsche Bibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliografie; detaillierte bibliografische Daten sind im Internet über abrufbar. Ihr Kontakt zum Verlag und Lektorat: Software & Support Verlag GmbH entwickler.press Goethestraße München Tel: +49(0) Fax: +49(0) Lektorat: Sandra Michel, Fachkorrektorat: Walter Saumweber Korrektorat: mediaservice, Siegen Satz: mediaservice, Siegen Umschlaggestaltung: Melanie Hahn, Maria Rudi Belichtung, Druck & Bindung: M.P. Media-Print Informationstechnologie GmbH, Paderborn Alle Rechte, auch für Übersetzungen, sind vorbehalten. Reproduktion jeglicher Art (Fotokopie, Nachdruck, Mikrofilm, Erfassung auf elektronischen Datenträgern oder andere Verfahren) nur mit schriftlicher Genehmigung des Verlags. Jegliche Haftung für die Richtigkeit des gesamten Werks kann, trotz sorgfältiger Prüfung durch Autor und Verlag, nicht übernommen werden. Die im Buch genannten Produkte, Warenzeichen und Firmennamen sind in der Regel durch deren Inhaber geschützt.

6 You are my inspiration, You are my battle cry Für Ursula

7

8 Inhaltsverzeichnis 1 Vorwort und Einleitung 13 2 Einführung Überblick Die technischen Bausteine von LINQ 19 Erweiterungsmethoden 19 Lambda-Funktionen 22 Lokale Typinferenz 25 Anonyme Typen 28 Kompaktere Initialisierung von Objekten Die LINQ-Schnittstellen Abfrage-Syntax Sequenz vs. Auflistung Verzögerte Ausführung Sofortige Ausführung Performance 41 LINQ to Objects 42 LINQ to SQL 43 3 Operatoren Projektionsoperatoren 46 Select 47 SelectMany Filteroperatoren 53 Where 53 OfType Sortierungsoperatoren 56 OrderBy/OrderBy Descending 57 ThenBy/ThenByDescending 60 Reverse Gruppierungsoperatoren 65 GroupBy Join-Operatoren 71 Join 71 GroupJoin 75 LINQ 7

9 Inhaltsverzeichnis 3.6 Mengenoperatoren 78 Distinct 78 Union 81 Intersect 84 Except Aggregationsoperatoren 90 Count/LongCount 90 Sum 92 Min/Max 95 Average 100 Aggregate Generierungsoperatoren 107 Range 107 Repeat 108 Empty Quantifizierungsoperatoren 111 All 111 Any 113 Contains Aufteilungsoperatoren 118 Take 118 TakeWhile 119 Skip 121 SkipWhile Elementoperatoren 125 First/Last 125 FirstOrDefault/LastOrDefault 128 ElementAt 130 ElementAtOrDefault 131 Single 132 SingleOrDefault 134 DefaultIfEmpty Konvertierungsoperatoren 139 ToArray 139 ToList 140 ToDictionary 141 ToLookup 144 AsEnumerable 148 AsQueryable 149 Cast Sonstige Operatoren 151 Concat 151 SequenceEqual 152 8

10 Inhaltsverzeichnis 4 LINQ-Operatoren entwickeln Grundlagen 157 Parametername 157 So generisch wie möglich implementieren 158 Generische Datentypen 158 Den Yield-Operator verwenden 159 Verzögerte Ausführung 160 Alle Parameter überprüfen 162 Func, Predicate und Action CreateSequence-Operator I CreateSequence-Operator II Identity-Operator Standardoperatoren überladen LINQ to Objects LINQ to SQL DataContext 183 Erzeugen 185 Unabhängige Verbindungen zur Datenbank Entitäten-Klassen 189 Database-Attribut 190 Table-Attribut 190 Column-Attribut 191 Association-Attribut 192 Das InheritanceMapping-Attribut 195 Die Function- und Parameter-Attribute 196 Entitäten-Klassen mit Business-Logik erweitern 204 Datenbankstruktur aus Metadata erstellen/löschen Entitäten-Klassen generieren 208 Manuell per Code 209 SqlMetal-Anwendung 209 Mit Visual Studio 2005/2008 arbeiten Parallelitätskonflikte 216 Pessimistisch 216 Ignorant 216 Optimistisch Transaktionen 218 ADO.NET-Transaktionen 218 TransactionScope Daten abfragen, modifizieren und in die Datenbank schreiben 220 LINQ-Abfragen 220 Optionen für das Laden von Daten 220 Verzögertes Laden umgehen 222 LINQ 9

11 Inhaltsverzeichnis Daten verändern 223 Änderungen in Datenbank schreiben 225 Daten erneut aus Datenbank laden 229 Abfragen kompilieren 230 Disconnected Mode 232 Abfragen protokollieren LINQ to DataSets DataSets Grundlagen Übersicht Untypisierte DataSets 240 Struktur per Code anlegen 241 DataSet befüllen 242 Daten mit LINQ abfragen 244 Daten ändern 245 Änderungen speichern Typisierte DataSets 249 Struktur anlegen 249 DataSet befüllen 251 Daten mit LINQ abfragen 251 Daten ändern 252 Änderungen speichern LINQ to XML LINQ to XML im Einsatz 256 XML abfragen 257 XML erzeugen X-Klassen 261 Die XDocument-Klasse 262 XDeclaration-Klasse 270 XDocumentType-Klasse 272 XComment-Klasse 275 XElement-Klasse 277 XAttribute-Klasse 284 XCData-Klasse Änderungen überwachen LINQ to Entities Entities vs. Entities Mehr als nur CRUD Datenmodelle Der grafische Designer 297 Entitäten, Zuordnungen, Vererbungen 299 Gespeicherte Prozeduren

12 Inhaltsverzeichnis 9.5 Modellbrowser Abfragen Werte ändern Objekte hinzufügen Objekte löschen Änderungen in der Datenbank speichern Datenbindung Windows Forms 307 Via DataSource-Eigenschaft 307 Via DataBindings ASP.NET WPF 317 Eigenständige WPF-Anwendung 319 XBAP-Anwendung 323 A LINQ-Operatoren 329 Stichwortverzeichnis 333 LINQ 11

13

14 Vorwort und Einleitung Willkommen! Schön, dass Sie einen Blick in dieses Buch werfen. Es hat, wie der Titel schon verrät, die neue Abfragesprache LINQ zum Inhalt und versucht, mit einfachen Worten sowie mit vielen anschaulichen Beispielen dem Leser dieses Thema näher zu bringen. Von mir, dem Autor, wurde alles Wissenswerte mit Sorgfalt zu Papier gebracht. Dabei nutze ich meine langjährige Erfahrung als Entwickler und Softwarearchitekt, um auf die Fragen Antworten zu finden, auf die Sie in Ihrer täglichen Arbeit mit LINQ stoßen können. Hilfreich waren dabei auch die unzähligen Schulungen und Gespräche mit Entwicklern. Es ist also ein Buch von einem Programmierer für Programmierer. Ich hoffe, dass sich dies alles positiv in diesem Werk bemerkbar macht. Für wen ist dieses Buch? Dieses Entwicklerbuch richtet sich sowohl an den Anfänger, der bereits etwas Erfahrung in der C#-Programmierung mitbringt, als auch an den Profi, der auf der Höhe der Zeit bleiben möchte. In ein paar Stichworte gefasst, sollte der optimale Leser die folgenden Eigenschaften mitbringen: Interesse und Spaß an der Technik und Programmierung Neugier und Geduld Kenntnisse in C# einige Kenntnisse in SQL und den relationalen Datenbanken, vielleicht sogar SQL Server Aber keine Panik, wenn Ihnen die eine oder andere Grundlage fehlt dieses Buch lässt Sie an den entscheidenden Stellen nicht im Stich. Warum dieses Buch? Dieses Buch deckt alle wichtigen Aspekte von LINQ ab. Kapitel 2 erläutert die technischen Grundlagen. Kapitel 3 und 4 beschreiben alle Standardoperatoren (LINQ-Befehle) und zeigen Ihnen, wie Sie eigene Operatoren selbst implementieren können. Die anschließenden Kapitel gehen dann auf Details von LINQ für Objekte, LINQ für SQL, LINQ für DataSets, LINQ für XML etc. ein. Das letzte Kapitel sozusagen der krönende Abschluss zeigt, wie Daten aus LINQ-Abfragen direkt an Steuerelemente der Oberfläche gebunden werden können. LINQ 13

15 1 Vorwort und Einleitung Das Buch ist also so etwas wie das Rundum-sorglos-Paket für den LINQ-interessierten Entwickler. Um Ihnen, dem Leser, das Lesen und Suchen nach bestimmten (Kern-)Informationen zu erleichtern, folgt dieses Buch einigen Konventionen bezüglich der verwendeten Schriftarten und Formatierungen. Quelltexte werden auf diese Weise hervorgehoben. Wichtige Details oder Änderungen werden zusätzlich noch fett hervorgehoben, damit Sie schneller ins Auge fallen. Schlüsselwörter, Methoden, Eigenschaften und Programmausgaben werden mit diesem Format versehen. Links für Ressourcen im Internet erscheinen in diesem Format. Wird mit Querverweisen auf andere, zum aktuellen Thema passende Inhalte verwiesen, so kommt dieses Format zum Einsatz. Tastaturkürzel wie z.b. (STRG+A) sind ebenfalls hervorgehoben. Besonders wichtige Informationen werden in Kästen wie den folgenden geliefert. Achtung Um Sie vor Fehlern oder Trugschlüssen zu bewahren, finden Sie Warnungen in solchen Kästen. Diese sollten Sie auf jeden Fall lesen. Hinweis Hinweise, die Ihnen Ihre tägliche Arbeit mit LINQ einfacher machen können, werden auf diese Weise präsentiert. Tipp Tipps und Tricks haben in solchen Kästen ihren Platz. Mit diesen Tricks lässt sich LINQ noch einen Tick einfacher und besser verstehen. Desweiteren wurden alle Anstrengungen unternommen, um dieses Werk möglichst fehlerfrei drucken zu können. Sollten Sie (was ich natürlich nicht hoffe) Fehler/Unstimmigkeiten finden, Anregungen oder Kritik (auch positive) für mich haben oder Unterstützung benötigen, so freue ich mich über eine unter Zudem empfängt meine Webseite rund um die Uhr Besucher. 14

16 Schulung, Consulting & Co Sie können mich, meine Erfahrung und mein Know-How übrigens auch buchen. Ich biete meinen Kunden weit gefächerte Dienstleistungen rund um.net und SQL Server an. Dazu gehören auch, jedoch nicht ausschließlich: Schulungen rund um.net (ASP.NET, AJAX, LINQ, WCF, WF, ) in C# und VB.NET und SQL Server in jeder Version Projektbegleitende Unterstützung Analyse Softwarearchitektur Prototyping Coaching Hotline Übersichtvermittlung Vorträge Sprechen Sie mich einfach an, über oder meine Webseite, wie Sie möchten. Danksagung Als Letztes möchte ich mich noch, bevor ich Sie den nächsten Kapiteln überlasse, bei allen bedanken, die mich bei meiner Arbeit unterstützt haben. Allen voran den Mitarbeitern des Software & Support Verlages und meinen Freunden. Ohne sie wäre ich wohl niemals fertig geworden. Viersen, im August 2008 Thorsten Kansy MCPD MCTS MCAD MCSD MCDBA MCSE+I MCT Consultant, Software Designer, Trainer, Fachautor tkansy@dotnetconsulting.eu LINQ 15

17

18 Einführung Language Integrated Query (LINQ) ist einer der neuen Bestandteile des.net Framework 3.5, mit dem der Entwickler unterschiedlichste Daten mittels einer einheitlichen Abfragesprache verarbeiten kann. LINQ ist dabei in die neuen Versionen der Sprachen C# und Visual Basic direkt eingebaut, so dass der Compiler ein hohes Maß an Kontrolle darüber hat. Die Vorteile sollen an dieser Stelle kurz vorgestellt werden. LINQ vereinheitlicht Abfragen auf die unterschiedlichsten Datenquellen. Ob XML, DataSets, einfache Auflistungen oder relationale Datenbanken wie Microsoft SQL Server: Die Syntax für den Zugriff ist immer dieselbe. Im Gegensatz zu T-SQL-Anweisungen, die im Code als Zeichenketten in der Anwendung vorgehalten und als solche auch an den SQL Server gesandt werden, ohne dass der Compiler Syntax und Inhalt überwachen kann, ist bei LINQ der Compiler in der Lage, Fehler und Unstimmigkeiten frühzeitig zu erkennen. LINQ ist typsicher und vollzieht damit den Brückenschlag zwischen Daten und Anwendung. Der Compiler kann zur Entwurfszeit überprüfen, ob Spalten und Rückgabewerte korrekt sind und zueinander passen. Programmierer müssen sich in Verbindung mit LINQ nur noch in eine Sprache wie C# einarbeiten. Ob LINQ wirklich die universelle Abfragesprache wird, bleibt abzuwarten. Die technischen Voraussetzungen sind auf jeden Fall gegeben und werden in den nächsten Abschnitten beschrieben. 2.1 Überblick Wie bereits erwähnt, ist die Abfragesprache LINQ an sich unabhängig von der Art der Datenquelle. Um dies möglich zu machen, bedient sich LINQ eines Mehrschichtenmodells, in dem die Abfragesprache nur die oberste Schicht darstellt. Über eine Vielzahl von datenquellenspezifischen Implementierungen werden die Daten aus so genannten LINQ-fähigen Datenquellen (LINQ enabled data sources) bereitgestellt. Die folgende Grafik zeigt den Aufbau. LINQ 17

19 2 Einführung Abbildung 2.1: Schematischer Aufbau der LINQ-Integration Durch diese Trennung zwischen Abfragesprache und Datenquellen wird es in Zukunft möglich sein, weitere Quellen zu implementieren. Folgende LINQ-Varianten von Microsoft existieren, die auch in diesem Buch behandelt werden: LINQ für SQL: LINQ-Abfragen werden zu SQL-Anweisungen umgewandelt und gegen eine relationale Datenbank ausgeführt. Daten können so abgefragt und auch dauerhaft geändert werden. LINQ für Entitäten: Diese Variante stellt im Vergleich zu LINQ für SQL eine größere Abstraktionsstufe zur Datenbank dar und lässt dem Entwickler mehr Freiheiten zu bestimmen, in welcher Spalte und wie welche Werte gespeichert werden sollen. LINQ für DataSets: Über LINQ können hier Daten verarbeitet werden, die bereits im Speicher in Form von DataSets vorliegen. LINQ für Objekte: LINQ-Abfragen können auf allen Auflistungen durchgeführt werden, die die System.Collection.Generic.IEnumerable<>-Schnittstelle implementieren. LINQ für XML: LINQ-Abfragen können auf XML-Dokumente angewendet werden. Andere Softwareanbieter und Entwickler bieten darüber hinaus weitere Varianten für die unterschiedlichsten Datenquellen an. 18

20 Die technischen Bausteine von LINQ Hinweis LINQ to SQL, LINQ to DataSets und LINQ to Entities werden zusammen als LINQ to ADO.NET bezeichnet. Zunächst jedoch die technischen Bausteine, von denen LINQ profitiert. 2.2 Die technischen Bausteine von LINQ Aus technischer Sicht basiert LINQ im Wesentlichen auf einer Reihe von Neuerungen, die in C# mit der Version 3.x eingeführt wurden. Diese Neuerungen waren notwendig, damit sich LINQ nahtlos in das bestehende Konstrukt der Sprache einfügen kann. Hinweis Die neuen Features wurden natürlich nicht nur in C#, sondern z.b. auch in Visual Basic 9.0 eingebaut, damit auch mit dieser Sprache LINQ verwendet werden kann. Da sich dieses Buch jedoch mit C# als.net-programmiersprache beschäftigt, sei diese etwas einseitige Sicht erlaubt. Im Folgenden werden nun die Neuerungen im Einzelnen erklärt und in Beziehung zu LINQ gesetzt Erweiterungsmethoden Die meisten Erweiterungen, die für LINQ notwendig sind, wurden durch so genannte Erweiterungsmethoden realisiert. Solche Methoden erweitern die entsprechenden Klassen, indem sie quasi angeklebt werden. Dies darf nicht mit der objektorientierten Technik der Vererbung verwechselt werden. Die Vererbung gestattet den Zugriff auf Mitglieder, die mit protected gekennzeichnet sind, wenn die Klasse nicht mit sealed versehen wurde. Erweiterungsmethoden können nur auf solche Mitglieder zugreifen, die auch jedem Anwender der Klasse zur Verfügung stehen. Achtung Auch wenn konkret eine Klasse erweitert wird, kann die Erweiterungsmethode so definiert werden, dass jede Klasse, die eine bestimmte Schnittstelle implementiert, um diese Methode erweitert wird. LINQ nutzt dies massiv, da viele Erweiterungen sich auf die IEnumerable<>-Schnittstelle beziehen. Als Beispiel soll die prominenteste Klasse verwendet werden, von der (leider) nicht abgleitet werden kann: System.String. Während der nachfolgende Code hier einen Fehler erzeugt, LINQ 19

21 2 Einführung // String ist versiegelt, keine Ableitung möglich public class MyString : String {} kann durch Erweiterung der Klasse im folgenden Fragment eine weitere Methode (set- Numeric) angefügt werden. Wichtig ist dabei, dass eine Erweiterungsmethode als public und static deklariert wird. Die Klasse, in der sie sich befindet, ist nebensächlich. Hauptsache, die Klasse steht als Projekt oder als Assembly-Verweis zur Verfügung. public static class StringErweiterung { public static string setnumeric(this string s,int i) { return i.tostring(); } } Vor dem ersten Parameter steht zwingend das Schlüsselwort this. Hinter dem Schlüsselwort steht die Klasse oder die Schnittstelle, die mit dieser Methode erweitert werden soll. Die restlichen, nicht obligatorischen Parameter werden für den Aufruf selbst verwendet. Achtung Genau wie nur nicht-statische Klassen vererben können (statische müssen immer von Object ableiten), können auch nur nicht-statische Klassen mit Methoden erweitert werden. Der Grund liegt darin, dass intern der Methode eine Instanz der Klasse als erster Parameter übergeben wird etwas, was für statische Klassen nicht möglich ist, da von diesen keine Instanzen erzeugt werden können. Ein Aufruf sieht so aus und führt dieses einfache Beispiel auch schon an seine Grenzen, da die übergebene Instanz der Zeichenkette nicht verändert werden kann, weil hierfür das out-schlüsselwort für den ersten Parameter notwendig wäre. Die Kombination aus this und out ist jedoch nicht zulässig. // Es wird eine Variable vom Typ String benötigt, die nicht null ist string s = String.Empty; // Über diese Variable kann die Methode aufgerufen und das Ergebnis // gespeichert werden s = s.setnumeric(100); // Ausgabe Debug.Print("Inhalt von s: '{0}'", s); 20

22 Die technischen Bausteine von LINQ Erweiterungsmethoden funktionieren durch den Trick, dass der Compiler einen Aufruf wie intern als umsetzt. Auch dann, wenn die Variable s lediglich den Wert null aufweist. Erweiterungsmethoden lassen Code also eigentlich nur objektorientierter erscheinen, ohne dass die Implementierung es tatsächlich ist. Dieses Vorgehen des Übersetzens ist auch der Grund, warum alle Erweiterungsmethoden auf diese beiden unterschiedlichen Arten aufgerufen werden können das Ergebnis ist dabei identisch. Die Punkte, die beim Einsatz von Erweiterungsmethoden berücksichtigt werden müssen, lassen sich wie folgt zusammenfassen: Inhalt von s: '100' s = s.setnumeric(100); s = setnumeric(s,100); Erweiterungsmethoden können sowohl für Werte als auch für Referenztypen implementiert werden. Alle Erweiterungsmethoden müssen statisch sein und sich in statischen, nicht-generischen und nicht-verschachtelten Klassen befinden. Die Klassen dürfen also nicht innerhalb anderer Klassen definiert worden sein. Ihr Name ist unerheblich. Vor dem ersten Parameter muss sich das this-schlüsselwort befinden, gefolgt von dem Typ, der erweitert werden soll. Alle weiteren Parameter sind Parameter, die beim Aufruf der Erweiterungsmethode angegeben werden müssen. Erweiterungsmethoden können nach den üblichen Regeln überladen werden. Erweiterungsmethoden müssen nicht zwangsläufig einen Wert zurückliefern, sondern können auch mittels void deklariert werden. Allerdings sind Werteänderungen bei Wertetypen nicht direkt möglich, sondern nur durch Rückgabe eines neuen Wertes und dessen Zuweisung durch den Aufrufer. Da das erste Bespiel nicht besonders prägnant war, hier noch ein zweites, das die System.Data.DataRow-Klasse erweitert, die bei der Arbeit mit DataSets Verwendung findet. Durch die Methode DbNullSaveField() kann auf den Inhalt einer Spalte zugegriffen werden, ohne vorher prüfen zu müssen, ob deren Wert lediglich DbNull enthält. Ist dies nämlich der Fall, dann wird ein Ersatzwert (Fallback-Wert) zurückgegeben, der als Parameter übergeben werden kann. Durch eine generische Implementierung ist ein universeller Einsatz unabhängig vom Datentyp möglich. LINQ 21

23 2 Einführung // Namensraum für Zugriff aus DataRow-Klasse einführen using System.Data; public static class MeineDataRowErweiterung { // Überladung für Angabe des Spaltennamens public static T DbNullSaveField<T>(this DataRow row, string columnname,t FallBackValue) { // Auf DBNull prüfen und Wert oder FallBackValue zurückliefern return!row.isnull(columnname)? row.field<t>(columnname) : FallBackValue; } } Durch die Überladungen kann der Entwickler wählen, ob er für den Zugriff den Namen oder den Index der gewünschten Spalte übergeben möchte. Der Aufruf kann daher auf folgende Art und Weise geschehen: // Kunde ist ein gültiges DataRow-Objekt und es existiert eine Spalte // mit dem Namen Ort string Ort = Kunde.DbNullSaveField<string>("Ort","unbekannt"); // Der Zugriff via Spaltenindex int Anzahlmitarbeiter = Kunde.DbNullSaveField<int>("Anzahlmitarbeiter", 0); Eine Überprüfung auf den richtigen Datentyp findet hier nicht statt. Eine entsprechende Unstimmigkeit führt zu einer Ausnahme Lambda-Funktionen Lambda-Funktionen sind eine syntaktische Vereinfachung bei der Arbeit mit Methoden als Parametern und Delegaten. Eine Lambda-Funktion ist quasi nur noch der Kern der Funktionsdefinition, der beschreibt, wie aus mindestens einem Wert das Ergebnis berechnet wird. Das folgende Beispiel wird schnell Klarheit darüber schaffen und die syntaktischen Alternativen wie anonyme Methoden zum Vergleich stellen. Als Erstes soll eine Methode definiert werden, die drei Parameter akzeptiert: zwei Nachkommazahlen (decimal) und eine Rechenvorschrift, welche diese beiden Werte zu einem Ergebnis verknüpft. public static decimal Rechne( decimal Wert1, decimal Wert2, 22

24 Die technischen Bausteine von LINQ { } Func<decimal,decimal,decimal> Rechenvorschrift) return Rechenvorschrift.Invoke(Wert1, Wert2); Diese Rechenvorschrift wird durch Func<decimal,decimal,decimal> beschrieben. Dabei ist die letzte Typenangabe in den spitzen Klammern der Typ des Ergebnisses, während die restlichen Angaben die Typen der Werte darstellen. Umgangssprachlich steht dort also lediglich:»verwende zwei decimal und erzeuge/berechne daraus ein Ergebnis vom Typ decimal«. Es folgen drei Aufrufmöglichkeiten, die das gleiche Ergebnis erzeugen, sich jedoch durch einen unterschiedlichen Aufwand beim Programmieren unterscheiden. Hinweis Das Func-Schlüsselwort ist bereits eine Vereinfachung für Stellen, an denen sonst eine Delegatendefinition stehen würde. Somit ist die folgende Definition identisch mit folgendem Code: // Delegatendefinition für die Rechne2()-Methode public delegate decimal RechneDelegate(decimal Wert1, decimal Wert2); public static decimal Rechne2( decimal Wert1, decimal Wert2, RechneDelegate Rechenvorschrift) { return Rechenvorschrift.Invoke(Wert1, Wert2); } Func hat also die anonyme Definition eines Delegaten erzeugt, der für die Beschreibung einer entsprechenden Methode als Parameter dient. Aufruf mit einer Methode Für den Aufruf mit einer Methode wird als Erstes die Methodendefinition benötigt, deren Signatur vorgegeben ist. // Methode zur Berechnung des Ergebnisses decimal Addiere(decimal Wert1, decimal Wert2) { return Wert1 + Wert2; } Diese Methode kann durch Angabe des Namens beim Funktionsaufruf verwendet werden. LINQ 23

25 2 Einführung // Aufruf mit Methode decimal Ergebnis1 = Rechne(10m, 2.5m, Addiere); // Ausgabe Debug.Print("Ergebnis1: {0}", Ergebnis1); Das Ergebnis von 12,5 dürfte an dieser Stelle nicht weiter überraschen. Aufruf mit einem anonymen Delegaten Bei der Verwendung von anonymen Delegaten kommt die Implementierung ohne Methode aus, da deren Codeblock direkt notiert wird. Dies hat daher den Hang zur Unübersichtlichkeit, auch wenn sich dadurch die Codemenge reduziert. // Aufruf mit anonymen Delegaten decimal Ergebnis2 = Rechne(10m, 2.5m, delegate(decimal Wert1, decimal Wert2) { return Wert1 + Wert2; }); Wie leicht zu erkennen ist, ist das Ergebnis das gleiche. Aufruf mit einer Lambda-Funktion Eine Lambda-Funktion macht den benötigten Code noch ein wenig übersichtlicher, hat jedoch den Nachteil, dass der Code nur aus einer (logischen) Zeile bestehen darf. Damit sind Fehlerbehandlung, Schleifen oder bedingte Ausführungen Tabu. Eine Lambda- Funktion ist wenig mehr als eine (mathematische) Formel, die ein Ergebnis erzeugt. Die Methode des obigen Beispiels sieht dementsprechend so aus: // Aufruf mit Lambda-Funktion decimal Ergebnis3 = Rechne(10m, 2.5m,(Wert1, Wert2) => Wert1+Wert2); Eine Lambda-Funktion ist auf die folgenden Operationen oder eine Kombination aus diesen beschränkt. Außerdem muss eine Lambda-Funktion immer ein Ergebnis zurückliefern. Verwendung von Operatoren (unär, binär, ternär, Vergleich, etc.) unäre: NextValue => ++(NextValue) binäre: (Wert1, Wert2) => Wert1 + Wert2 tenäre: (Wert) => Wert > 100m? 100m : Wert Vergleich: (Wert1, Wert2) => Wert1 == Wert2 Erzeugen neuer Instanzen von expliziten oder anonymen Typen explizit: (Vorname, Name) => new Person (Vorname, Name) anonym: (Vorname, Name) = > new { Vorname, Name } 24

26 Die technischen Bausteine von LINQ Zugriff auf Mitglieder wie Methoden, Eigenschaften und Felder Methode: Name => Name.ToUpper() Eigenschaft: Eigenschaft: => Name.Length Verkettung von Lambda-Funktionen Name => Name.Trim() => Name.ToUpper() Tipp Wenden Sie Lambda-Ausdrücke nur an, wo es möglich und übersichtlich erscheint. In allen anderen Fällen sind Methoden die bessere Wahl in Hinblick auf Entwicklung und Fehlersuche. LINQ verwendet Lambda-Funktionen für vielerlei Zwecke wie Projektionen, Prädikate beim Filtern, etc. Der Nutzen durch kompakteren Code multipliziert sich also um ein Vielfaches. Zum Abschluss sei noch ein weiteres Beispiel gezeigt, das Lambda-Ausdrücke mit generischer Programmierung kombiniert und das vorherige Bespiel so erweitert, dass diese Methode mit allen Wertetypen (struct) funktioniert. // Generische Variante, die nur Wertetypen akzeptiert public static T Rechne<T>( T Wert1, T Wert2, Func<T, T, T> Rechenvorschrift) where T: struct { return Rechenvorschrift.Invoke(Wert1, Wert2); } Am Aufruf dieser Erweiterungsmethode ändert sich nichts. // Aufruf mit Lambda-Funktion int Ergebnis3 = Rechne(99, 1,(Wert1, Wert2) => Wert1+Wert2); Lokale Typinferenz Der Einsatz der neuen Typinferenz für lokale Variablen ist ein mächtiges Mittel, um lockeren Code zu schreiben und gleichzeitig die Typsicherheit zu bewahren. Im Kern wird bei Typinferenz eine Variable erst durch ihre Zuweisung implizit einem festen Typ zugeordnet. Das Schlüsselwort var steht dabei an der Stelle, an der sonst der konkrete Datentyp erwartet wird. Möglich ist dies, weil der Compiler den Typ anhand des zugewiesenen Wertes bestimmen kann. Ein Boxing/Unboxing, wie es z.b. bei der Verwendung von Object benötigt würde, entfällt. LINQ 25

27 2 Einführung Hinweis Verwenden Sie lokale Typinferenz nach Möglichkeit nur an Stellen, an denen es nicht anders machbar ist, weil der konkrete Datentyp noch nicht bekannt ist. Quelltext wird nicht lesbarer, wenn jedes Mal erraten werden muss, welcher Datentyp zum Einsatz kommt. Lokale Typinferenz ist nicht zur Unterstützung von (Tipp-)Faulheit gedacht! Bei längeren Namen von Datentypen ist die IntelliSense-Funktion des Visual Studio 2008 eine große Hilfe. Das folgende Beispiel demonstriert dies: var s1 = "Hallo LINQ-Welt"; MessageBox.Show(s1.GetType().ToString(), "Typinferenz"); Die Ausgabe der Variablen durch die Messagebox.Show()-Methode lässt erkennen, dass die Variable s tatsächlich vom Typ System.String ist. Abbildung 2.2: Der automatisch verwendete Datentyp ist System.String Das Beispiel ist damit gleichbedeutend mit dem folgenden Codefragment: string s2 = "Hallo LINQ-Welt"; MessageBox.Show(s2.GetType().ToString(),"Mit fester Typenvergabe"); Fehlt bei der Deklaration mit var eine Initialisierung mit einem Wert, so kommt es konsequenterweise zu einem Compilerfehler, da so nicht erkennbar ist, welcher Datentyp verwendet werden muss. Eine Zeile wie var i; ist daher nicht gültig. Abbildung 2.3: Mit var deklarierte Variablen müssen initialisiert werden 26

28 Die technischen Bausteine von LINQ Trotz der Tatsache, dass dem Compiler die Wahl des konkreten Typs überlassen wird, herrscht strikte Typsicherheit. Dies ist leicht am folgenden Fragment erkennbar, welches einen Fehler erzeugt. var s3 = "Hallo LINQ-Welt"; s3 = 10; Dieser Fehler ist identisch mit dem, den der folgende Code erzeugt. string s4 = "Hallo LINQ-Welt"; s4 = 10; Abbildung 2.4: Die Typen int und string können nicht implizit konvertiert werden. Wie der Name lokale Typinferenz schon vermuten lässt, kann dieses Feature nicht überall im Code verwendet werden. Und in der Tat kann es nur für lokale Variablen verwendet werden. Vorrangig sind dies: lokale Variablen innerhalb von Methoden Schleifenvariablen using-blöcke Eine Verwendung z.b. als Methodenparameter hingegen führt postwendend zu einem Compilerfehler. Wann lokale Typinferenz einsetzen und wann nicht? Lokale Typinferenz kann also im lokalen Kontext an Stelle eines expliziten Datentyps verwendet werden. Es stellt sich daher die Frage, wann dieses Feature eingesetzt werden sollte und wann nicht. Dies ist nicht nur eine rein technische Frage und sollte auch nach der Forderung nach einem lesbaren Quellcode beantwortet werden. Quelltexte, die an allen erlaubten Stellen var bei der Deklaration verwenden, leiden schnell darunter, dass deren Sinn durch den nicht immer auf den ersten Blick erkennbaren Datentyp schwerer zu erfassen ist. Der Einsatz der lokalen Typinferenz sollte sich also auf Stellen beschränken, an denen keine andere sinnvolle Möglichkeit existiert. Dies ist bei anonymen Typen (siehe Abschnitt Anonyme Typen) und Auflistungen von solchen der Fall. Die Zeile var unbekannt = new { Text = "LINQ ist toll" }; LINQ 27

29 2 Einführung erzeugt einen solchen anonymen Typ und es liegt in dessen Natur, dass dessen Name unbekannt ist. Hier hat der Compiler sowohl den Typen für den Programmierer erzeugt als auch diesen der Variable zugewiesen. Ähnlich verhält es sich mit Ergebnissen von LINQ-Abfragen, die oft gleich ganze Auflistungen solcher Typen liefern. Hier gilt das Gleiche: lokale Typinferenz ist die einzig sinnvolle Lösung. // Namensraum für Zugriff auf Prozesse einführen using System.Diagnostics; // Alle laufenden Prozesse sortiert nach Namen // abfragen. Von den Prozessen jeweils Namen und // Anzahl der Threads aufnehmen. var procs = from p in Process.GetProcesses() orderby p.processname select new { p.processname, p.threads }; In anderen Fällen, in denen der Typ einer Variablen bekannt ist, sollte die lokale Typinferenz nicht verwendet werden Anonyme Typen Anonyme Typen sind solche, die ohne festen Namen und Definitionen auskommen. Stattdessen ermittelt der Compiler die benötigten Felder nebst Datentypen und erzeugt einen internen Namen, der zwar wie gewohnt mit der GetType()-Methode abgerufen werden kann, jedoch konsequenterweise nicht im Code stehen darf. Somit ist bei einer entsprechenden Deklaration einer Variablen lokale Typinferenz zwingend notwendig, wenn auf Typsicherheit nicht verzichtet werden soll. Anonyme Typen eigenen sich hervorragend für das sorgenfreie Speichern und Abrufen von Werten. Hinweis Durch das Fehlen jeglicher expliziter Definition besteht ein anonymer Typ lediglich aus den benötigten Feldern. Zusätzlich wurde die ToString()-Methode so überschrieben, dass eine Ausgabe mit den Werten aller Felder möglich ist. Weitergehende Einschränkungen auf diese Felder (z.b. durch private, public, etc.) oder Methoden sind nicht möglich. Ein einfacher anonymer Typ kann mit der folgenden Zeile erzeugt werden. var unbekannt = new { Text = "LINQ ist toll", Seiten = 100 }; 28

30 Die technischen Bausteine von LINQ Dieser Typ besitzt zwei Eigenschaften mit den Namen Text und Seiten, deren Datentypen (System.String und System.Int32) durch die zugewiesenen Werte bestimmt wurden. Sowohl Inhalt als auch Typ der Eigenschaften können wie gewohnt ermittelt werden. // Ausgabe von Typ und Inhalt der Felder Debug.Print("Text: {0} ({1})", unbekannt.text, unbekannt.text.gettype()); Debug.Print("Seiten: {0} ({1})", unbekannt.seiten, unbekannt.seiten.gettype()); Die Ausgabe sieht so aus: Text: LINQ ist toll (System.String) Seiten: 100 (System.Int32) Die Namen der Eigenschaften können entweder festgelegt werden oder bei einer Zuweisung durch eine Eigenschaft/ein Feld eines anderen Objekts automatisch entfallen. In diesem Fall wird der Name der (des) Quelleneigenschaft(-feldes) verwendet. Das folgende Fragment verdeutlicht dies. var buch = new { Titel = "Das Leben im Jetzt", DateTime.Now }; // Ausgabe Debug.WriteLine(buch); { Titel = Das Leben im Jetzt, Now = :52:25 } Ein Ändern der Werte durch eine Zuweisung ist selbstverständlich auch möglich. unbekannt.seiten = 99; Der Wert der Felder muss nicht wie in diesem Beispiel durch eine Konstante initialisiert werden, sondern es können auch Methoden zum Einsatz kommen, die den gewünschten Wert zurückliefern. // Methode zur Ermittlung der Seitenzahl private int ermittleseiten() { // Ermitteln und zurückgeben return 100; } // Zur Initialisierung die Methode verwenden var unbekannt = new { Text = "LINQ ist toll", Seiten = ermittleseiten() } Das Resultat ist das gleiche wie im vorherigen Beispiel. LINQ 29

LINQ & Streams. Arthur Zaczek

LINQ & Streams. Arthur Zaczek LINQ & Streams Arthur Zaczek Apr 2015 1 C# LINQ 1.1 LINQ Language Integrated Query Abfragen gegen beliebige Datenquellen möglich Listen von Objekten Datenbanken (Linq2SQL, Entity Framework, nhibernate)

Mehr

Paolo Pialorsi, Marco Russo. Datenbankprogrammierung. mit Microsoft LINQ. Microsoft

Paolo Pialorsi, Marco Russo. Datenbankprogrammierung. mit Microsoft LINQ. Microsoft Paolo Pialorsi, Marco Russo Datenbankprogrammierung mit Microsoft LINQ Microsoft Inhaltsverzeichnis Vorwort Einleitung Danksagung XV XVII XVIII Einführung Über dieses Buch Systemanforderungen Die Companion-Website

Mehr

LINQ to SQL. Proseminar Objektorientiertes Programmieren mit.net und C# Christoph Knüttel. Institut für Informatik Software & Systems Engineering

LINQ to SQL. Proseminar Objektorientiertes Programmieren mit.net und C# Christoph Knüttel. Institut für Informatik Software & Systems Engineering LINQ to SQL Proseminar Objektorientiertes Programmieren mit.net und C# Christoph Knüttel Institut für Informatik Software & Systems Engineering Agenda 1. LINQ allgemein Vorteile Bausteine und Varianten

Mehr

Übung 1 mit C# 6.0 MATTHIAS RONCORONI

Ü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,

Mehr

Repetitorium Informatik (Java)

Repetitorium Informatik (Java) Repetitorium Informatik (Java) Tag 6 Lehrstuhl für Informatik 2 (Programmiersysteme) Übersicht 1 Klassen und Objekte Objektorientierung Begrifflichkeiten Deklaration von Klassen Instanzmethoden/-variablen

Mehr

LINQ. LANGUAGE INTEGREATED QUERY.net 3.5. Bernhard Grojer BernhardG@ppedv.de

LINQ. LANGUAGE INTEGREATED QUERY.net 3.5. Bernhard Grojer BernhardG@ppedv.de LINQ LANGUAGE INTEGREATED QUERY.net 3.5 Bernhard Grojer BernhardG@ppedv.de Agenda Übersicht LINQ Basistechnologien Verschiedene Arten von LINQ LINQ (to Objects) LINQ TO SQL Übersicht LINQ Aggregationen

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 34 Einstieg in die Informatik mit Java Klassen mit Instanzmethoden Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 34 1 Definition von Klassen 2 Methoden 3 Methoden

Mehr

Prof. W. Henrich Seite 1

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

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 41 Einstieg in die Informatik mit Java Vererbung Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 41 1 Überblick: Vererbung 2 Grundidee Vererbung 3 Verdeckte Variablen

Mehr

Thorsten Kansy. Datenbankprogrammierung. mit.net 3.5 HANSER

Thorsten Kansy. Datenbankprogrammierung. mit.net 3.5 HANSER J Thorsten Kansy I Datenbankprogrammierung mit.net 3.5 Mehrschichtige Applikationen mit Visual Studio 2008 und MS SQL Server 2008 HANSER Inhalt 1 Vorwort und Einleitung 1 2 Neuerungen in SQL Server 2008

Mehr

Beispiel: Zwischen der Oberklasse und der abgeleiteten Klasse besteht eine ist ein Beziehung. Eine abgeleitete Klasse stellt eine Spezialisierung der

Beispiel: Zwischen der Oberklasse und der abgeleiteten Klasse besteht eine ist ein Beziehung. Eine abgeleitete Klasse stellt eine Spezialisierung der Vererbung Vererbung ist ein Konzept der objektorientierten Programmierung,, die es ermöglicht neue Klassen von bereits vorhandenen Klassen abzuleiten. In einer abgeleiteten Klasse (subclass) muss nur spezifiziert

Mehr

Vererbung & Schnittstellen in C#

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

Mehr

Einführung in den Einsatz von Objekt-Orientierung mit C++ I

Einführung in den Einsatz von Objekt-Orientierung mit C++ I Einführung in den Einsatz von Objekt-Orientierung mit C++ I ADV-Seminar Leiter: Mag. Michael Hahsler Syntax von C++ Grundlagen Übersetzung Formale Syntaxüberprüfung Ausgabe/Eingabe Funktion main() Variablen

Mehr

Methoden (fortgeschritten) in C# - 1

Methoden (fortgeschritten) in C# - 1 Methoden (fortgeschritten) in C# - 1 Marc Satkowski 20. November 2016 C# Kurs Gliederung 1. Opertatoren Überladung 2. delegate 3. Anonyme Methoden delegate Lamda Ausdruck-Lamdas Anweisung-Lamdas Variablenbereich

Mehr

JavaScript. Dies ist normales HTML. Hallo Welt! Dies ist JavaScript. Wieder normales HTML.

JavaScript. Dies ist normales HTML. Hallo Welt! Dies ist JavaScript. Wieder normales HTML. JavaScript JavaScript wird direkt in HTML-Dokumente eingebunden. Gib folgende Zeilen mit einem Texteditor (Notepad) ein: (Falls der Editor nicht gefunden wird, öffne im Browser eine Datei mit der Endung

Mehr

Inhaltsverzeichnis .NET 3.5. WPF, WCF, LINQ, C# 2008, VB 2008 und ASP.NET AJAX. Herausgegeben von Holger Schwichtenberg ISBN: 978-3-446-41045-9

Inhaltsverzeichnis .NET 3.5. WPF, WCF, LINQ, C# 2008, VB 2008 und ASP.NET AJAX. Herausgegeben von Holger Schwichtenberg ISBN: 978-3-446-41045-9 sverzeichnis Walter Doberenz, Matthias Fischer, Jana Frank, Thomas Gewinnus, Jörg Krause, Patrick A. Lorenz, Jörg Neumann, Holger Schwichtenberg.NET 3.5 WPF, WCF, LINQ, C# 2008, VB 2008 und ASP.NET AJAX

Mehr

Anwendungsentwicklung mit Java. Grundlagen der OOP, Vererbung, Schnittstellen, Polymorphie

Anwendungsentwicklung mit Java. Grundlagen der OOP, Vererbung, Schnittstellen, Polymorphie Anwendungsentwicklung mit Java Grundlagen der OOP, Vererbung, Schnittstellen, Polymorphie Vererbung (1) 2 Problem: Objekte mit gleichen Attributen/Methoden, aber nicht völlig identisch, z.b., LKW, PKW,

Mehr

.NET und Language Integrated Query (LINQ) W3L AG info@w3l.de

.NET und Language Integrated Query (LINQ) W3L AG info@w3l.de 1.NET und Language Integrated Query (LINQ) W3L AG info@w3l.de 2012 2 Inhaltsverzeichnis LINQ to Objects Vergleich mit Schleifen Abfrage-Syntax Erweiterungsmethoden-Syntax LINQ Abfrage Bestandteile Spracherweiterungen

Mehr

Thorsten Kansy. SQL Server 2008 Programmierung mit der CLR und.net

Thorsten Kansy. SQL Server 2008 Programmierung mit der CLR und.net Thorsten Kansy SQL Server 2008 Programmierung mit der CLR und.net Thorsten Kansy SQL Server 2008 Programmierung mit der CLR und.net Thorsten Kansy: SQL Server 2008 Programmierung mit der CLR und.net Microsoft

Mehr

Kapitel 8. Programmierkurs. Methoden. 8.1 Methoden

Kapitel 8. Programmierkurs. Methoden. 8.1 Methoden Kapitel 8 Programmierkurs Birgit Engels Anna Schulze Zentrum für Angewandte Informatik Köln Objektorientierte Programmierung Methoden Überladen von Methoden Der this-zeiger Konstruktoren Vererbung WS 07/08

Mehr

Kapitel 33. Der xml-datentyp. In diesem Kapitel: Der xml-datentyp 996 Abfragen aus xml-datentypen 1001 XML-Indizierung 1017 Zusammenfassung 1023

Kapitel 33. Der xml-datentyp. In diesem Kapitel: Der xml-datentyp 996 Abfragen aus xml-datentypen 1001 XML-Indizierung 1017 Zusammenfassung 1023 Kapitel 33 Der xml-datentyp In diesem Kapitel: Der xml-datentyp 996 Abfragen aus xml-datentypen 1001 XML-Indizierung 1017 Zusammenfassung 1023 995 996 Kapitel 33: Der xml-datentyp Eine der wichtigsten

Mehr

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

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

Mehr

Inhaltsverzeichnis. Thorsten Kansy. Datenbankprogrammierung mit.net 3.5. Mehrschichtige Applikationen mit Visual Studio 2008 und MS SQL Server 2008

Inhaltsverzeichnis. Thorsten Kansy. Datenbankprogrammierung mit.net 3.5. Mehrschichtige Applikationen mit Visual Studio 2008 und MS SQL Server 2008 sverzeichnis Thorsten Kansy Datenbankprogrammierung mit.net 3.5 Mehrschichtige Applikationen mit Visual Studio 2008 und MS SQL Server 2008 Herausgegeben von Holger Schwichtenberg ISBN: 978-3-446-41450-1

Mehr

Java Einführung Methoden. Kapitel 6

Java Einführung Methoden. Kapitel 6 Java Einführung Methoden Kapitel 6 Inhalt Deklaration und Aufruf von Methoden Lokale und globale Namen (Bezeichner) Sichtbarkeit und Lebensdauer von Variablen in Methoden Überladen von Methoden 2 Methoden

Mehr

Probeklausur: Programmierung WS04/05

Probeklausur: Programmierung WS04/05 Probeklausur: Programmierung WS04/05 Name: Hinweise zur Bearbeitung Nimm Dir für diese Klausur ausreichend Zeit, und sorge dafür, dass Du nicht gestört wirst. Die Klausur ist für 90 Minuten angesetzt,

Mehr

3 Klassen, Attribute, Methoden

3 Klassen, Attribute, Methoden 3 Klassen, Attribute, Methoden Jörn Loviscach Versionsstand: 10. April 2011, 10:25 Die nummerierten Felder sind absichtlich leer, zum Ausfüllen in der Vorlesung. Videos dazu: http://www.j3l7h.de/videos.html

Mehr

Aktivitäten in C# /.NET umsetzen

Aktivitäten in C# /.NET umsetzen Aktivitäten in C# /.NET umsetzen Grundlagen von C# Dr. Beatrice Amrhein Überblick Grundlagen der C# Syntax Visual C# Express Einfache Abläufe umsetzen 2 Grundlagen von C# 3 Merkmale von C# C# besteht aus

Mehr

Programmieren I + II Regeln der Code-Formatierung

Programmieren I + II Regeln der Code-Formatierung Technische Universität Braunschweig Dr. Werner Struckmann Institut für Programmierung und Reaktive Systeme WS 2016/2017, SS 2017 Programmieren I + II Regeln der Code-Formatierung In diesem Dokument finden

Mehr

Präsentation Interfaces

Präsentation Interfaces Einführung in Java Präsentation Interfaces Nozar Delassaei Marvi Inhalt 1. Erinnerung Klasse Objekte Beispiel Klasse Abstrakte Klasse Beispiel Abstrakte Klasse Mehrfachvererbung-1 Mehrfachvererbung-2 2.

Mehr

5.5.8 Öffentliche und private Eigenschaften

5.5.8 Öffentliche und private Eigenschaften 5.5.8 Öffentliche und private Eigenschaften Schnittstellen vs. Implementierungen: Schnittstelle einer Klasse beschreibt, was eine Klasse leistet und wie sie benutzt werden kann, ohne dass ihre Implementierung

Mehr

Überschreiben von Methoden

Überschreiben von Methoden Vergleich der DoME Realisierungen: Methode ausgeben Version 1 (ohne Vererbung): Anzeigen aller Informationen CD: A Swingin Affair (64 Min)* Frank Sinatra Titelanzahl: 16 Mein Lieblingsalbum von Sinatra

Mehr

Programmierung mit C Zeiger

Programmierung mit C Zeiger Programmierung mit C Zeiger Zeiger (Pointer)... ist eine Variable, die die Adresse eines Speicherbereichs enthält. Der Speicherbereich kann... kann den Wert einer Variablen enthalten oder... dynamisch

Mehr

Kapitel 9: Klassen und höhere Datentypen. Klassen und höhere. Objekte, Felder, Methoden. Küchlin/Weber: Einführung in die Informatik

Kapitel 9: Klassen und höhere Datentypen. Klassen und höhere. Objekte, Felder, Methoden. Küchlin/Weber: Einführung in die Informatik Klassen und höhere Datentypen Objekte, Felder, Methoden Küchlin/Weber: Einführung in die Informatik Klassen Klasse (class) stellt einen (i.a. benutzerdefinierten) Verbund-Datentyp dar Objekte sind Instanzen

Mehr

MCSA: SQL 2016 Database Development

MCSA: SQL 2016 Database Development MCSA: SQL 2016 Database Development Querying Data with Transact-SQL & Developing SQL Databases Seminarziel In diesem 6-tägigen Kurs werden die Teilnehmer von Grund auf in die Entwicklung

Mehr

MySQL-Befehle. In diesem Tutorial möchte ich eine kurze Übersicht der wichtigsten Befehle von MySQL geben.

MySQL-Befehle. In diesem Tutorial möchte ich eine kurze Übersicht der wichtigsten Befehle von MySQL geben. MySQL-Befehle 1. Einleitung In diesem Tutorial möchte ich eine kurze Übersicht der wichtigsten Befehle von MySQL geben. 2. Arbeiten mit Datenbanken 2.1 Datenbank anlegen Eine Datenbank kann man wie folgt

Mehr

Jochen Bartlau. List & Label. schnell + kompakt

Jochen Bartlau. List & Label. schnell + kompakt Jochen Bartlau List & Label Jochen Bartlau List & Label ISBN 978-3-939084-68-6 2007 entwickler.press, ein Imprint der Software & Support Verlag GmbH 1. Auflage, 2007 http://www.entwickler-press.de http://www.software-support.biz

Mehr

Inhaltsverzeichnis. Vorwort... 15

Inhaltsverzeichnis. Vorwort... 15 Vorwort..................................................... 15 Kapitel 1.NET Framework.................................. 19 1.1 Geschichte................................... 19 1.2 Aufbau des.net Framework..................

Mehr

Vorwort 11. Eine neue Datenbank erstellen 79;

Vorwort 11. Eine neue Datenbank erstellen 79; Vorwort 11 Der SQL Server 2012 stellt sich vor 15] 1.1 SQL Server - wer ist das? 15 1.1.1 Der SQL Server im Konzert der Datenbanksysteme 16 1.1.2 Entscheidungsszenarien für Datenbanksysteme 17 1.1.3 Komponenten

Mehr

SQL. SQL SELECT Anweisung SQL-SELECT SQL-SELECT

SQL. SQL SELECT Anweisung SQL-SELECT SQL-SELECT SQL SQL SELECT Anweisung Mit der SQL SELECT-Anweisung werden Datenwerte aus einer oder mehreren Tabellen einer Datenbank ausgewählt. Das Ergebnis der Auswahl ist erneut eine Tabelle, die sich dynamisch

Mehr

Java Einführung Methoden in Klassen

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

Mehr

3 Objektorientierte Konzepte in Java

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

Mehr

Ich liebe Java && Ich liebe C# Rolf Borst

Ich liebe Java && Ich liebe C# Rolf Borst Ich liebe Java && Ich liebe C# Rolf Borst Java oder C#? Einführung public class Einfuehrung { private int gesamtzahl = 0; /* Ermittelt die Anzahl der geraden und durch drei teilbaren Zahlen */ public String

Mehr

3. Auflage. O Reillys Taschenbibliothek. C# 5.0 kurz & gut. Joseph Albahari & Ben Albahari O REILLY. Aktualisierung von Lars Schulten

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

Mehr

7. Schnittstellen Grundlagen zu Schnittstellen. 7. Schnittstellen

7. Schnittstellen Grundlagen zu Schnittstellen. 7. Schnittstellen 7. Schnittstellen Grundlagen zu Schnittstellen 7. Schnittstellen Eine Schnittstelle (Interface) ist eine Spezifikation eines Typs in Form eines Typnamens und einer Menge von Methoden, die keine Implementierungen

Mehr

Visual Basic.NET und ADO.NET

Visual Basic.NET und ADO.NET .NETSolutions Visual Basic.NET und ADO.NET Datenbanken programmieren F. SCOTT BARKER Markt+ Übersetzung: Gabriele Broszat Einleitung Zum Autor Zur Begleit-CD-ROM Wer sollte dieses Buch nutzen? Welche Themen

Mehr

magnum C++ WALTER SAUMWEBER kompakt komplett kompetent

magnum C++ WALTER SAUMWEBER kompakt komplett kompetent magnum C++ WALTER SAUMWEBER kompakt komplett kompetent Quickview... 5 Liebe Leserin, lieber Leser... 13 Teil 1 Grundlagen... 15 1 Was ist Programmieren?... 17 1.1 Was ist eigentlich ein Computerprogramm?...

Mehr

Aufbau von Klassen. class punkt {...

Aufbau von Klassen. class punkt {... Einführung in C++ Aufbau von Klassen Eine wird mit dem Schlüsselwort class eingeleitet, und endet mit einem Semikolon. Der Inhalt wird zwischen geschweiften Klammern geschrieben. class punkt {... ; Im

Mehr

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 3 - Objektorientierung Warum Objektorientierung Daten und Funktionen möglichst eng koppeln und nach außen kapseln Komplexität der Software besser modellieren

Mehr

Einführung in die Programmierung 1

Einführung in die Programmierung 1 Einführung in die Programmierung 1 Einführung (S.2) Einrichten von Eclipse (S.4) Mein Erstes Programm (S.5) Hallo Welt!? Programm Der Mensch (S.11) Klassen (S.12) Einführung Wie Funktioniert Code? Geschriebener

Mehr

Entwicklung der Programmiersprache C#

Entwicklung der Programmiersprache C# Language Day HDM 2015 Entwicklung der Programmiersprache C# Referent: Mikhail Orleanskiy, IT-Designers GmbH (orleanskiy@it-designers.de) Stand: 6. November 2015 Eine Präsentation der IT-Designers Gruppe

Mehr

Java Einführung VARIABLEN und DATENTYPEN Kapitel 2

Java Einführung VARIABLEN und DATENTYPEN Kapitel 2 Java Einführung VARIABLEN und DATENTYPEN Kapitel 2 Inhalt dieser Einheit Variablen (Sinn und Aufgabe) Bezeichner Datentypen, Deklaration und Operationen Typenumwandlung (implizit/explizit) 2 Variablen

Mehr

Teil A Einführung in Microsoft Visual C# und Microsoft Visual Studio 2008 23

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

Mehr

OOP und Angewandte Mathematik. Eine Einführung in die Anwendung objektorientierter Konzepte in der angewandten Mathematik

OOP und Angewandte Mathematik. Eine Einführung in die Anwendung objektorientierter Konzepte in der angewandten Mathematik Eine Einführung in die Anwendung objektorientierter Konzepte in der angewandten Mathematik WS 2011/12 Inhalt Test-Besprechung! Ziele verdeutlichen Große Bild von OOP Wiederholung: Einbettung als Technik

Mehr

Assoziative Container in C++ Christian Poulter

Assoziative Container in C++ Christian Poulter Assoziative Container in C++ Christian Poulter Seminar: Die Sprache C++ Mat-Nr.: 53 03 129 EMail: inf@poulter.de Christian Poulter Assoziative Container in C++ Seite 1/10 Inhalt 1. Einleitung: Container...

Mehr

Welche Informatik-Kenntnisse bringen Sie mit?

Welche Informatik-Kenntnisse bringen Sie mit? Welche Informatik-Kenntnisse bringen Sie mit? So gehen Sie vor! Lösen Sie die Aufgaben der Reihe nach von 1 bis 20, ohne das Lösungsblatt zur Hilfe zu nehmen. Der Schwierigkeitsgrad der Aufgaben nimmt

Mehr

C# Programmierung. Eine Einführung in das.net Framework. C# Programmierung - Tag 4: Kombination OOP/.NET

C# Programmierung. Eine Einführung in das.net Framework. C# Programmierung - Tag 4: Kombination OOP/.NET C# Programmierung Eine Einführung in das.net Framework C# Programmierung - Tag 4: Kombination OOP/.NET 1/27/2012 1 Do Events Delegates Operatoren Exceptions Namespaces Bibliotheken.NET Klassen Serialisierung

Mehr

Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny

Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny 9. Zeiger Arbeitsspeicher / Adressen Der Arbeitsspeicher des Computers (RAM) besteht aus einem Feld von Speicherzellen, beginnend bei Adresse

Mehr

C# im Vergleich zu Java

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

Mehr

Inhaltsüberblick. I. Grundbegriffe - Objekte und Klassen. Organisatorisches. I. Grundbegriffe - Objektorientierte Konzepte

Inhaltsüberblick. I. Grundbegriffe - Objekte und Klassen. Organisatorisches. I. Grundbegriffe - Objektorientierte Konzepte Grundkonzepte Objektorientierter Programmierung Nicole Himmerlich FSU Jena mit Java, Oberon-2, Object-Pascal und Python Inhaltsüberblick I. Grundbegriffe 1) Kopplung 2) Datenkaspelung 3) Konstruktor 4)

Mehr

Michael Kolberg. einfach klipp & klar. Microsofft* Press

Michael Kolberg. einfach klipp & klar. Microsofft* Press Michael Kolberg einfach klipp & klar Microsofft* Press III Vorwort 11 Die CD-ROM zum Buch 21 Die AutoPlay-Funktion der CD-ROM 22 Installation der Testfragen und des Ebooks 23 Installation des Computer-Lexikons

Mehr

Programmieren in C++ Überladen von Methoden und Operatoren

Programmieren in C++ Überladen von Methoden und Operatoren Programmieren in C++ Überladen von Methoden und Operatoren Inhalt Überladen von Methoden Überladen von Operatoren Implizite und explizite Konvertierungsoperatoren 7-2 Überladen von Methoden Signatur einer

Mehr

MOC 10774A: Abfragen unter Microsoft SQL Server 2012

MOC 10774A: Abfragen unter Microsoft SQL Server 2012 MOC 10774A: Abfragen unter Microsoft SQL Server 2012 Kompakt-Intensiv-Training Diese Schulung bereitet Sie optimal auf die MOC-Zertifzierung vor. In diesem fünftägigen Seminar erwerben Sie grundlegende

Mehr

Probeklausur: Programmierung WS04/05

Probeklausur: Programmierung WS04/05 Probeklausur: Programmierung WS04/05 Name: Hinweise zur Bearbeitung Nimm Dir für diese Klausur ausreichend Zeit, und sorge dafür, dass Du nicht gestört wirst. Die Klausur ist für 90 Minuten angesetzt,

Mehr

<Trainingsinhalt> XML und Datenbanken

<Trainingsinhalt> XML und Datenbanken XML und Datenbanken i training Inhaltsverzeichnis Vorwort 11 Kapitel 1 XML 13 1.1 Voraussetzungen für XML 14 1.2 Allgemeines 14 1.3 Migration von HTML zu XML 16 1.4 Argumente für XML

Mehr

Silke Trißl, Prof. Ulf Leser Wissensmanagement in der Bioinformatik. Jede Applikation braucht eine Klasse mit einer main-methode

Silke Trißl, Prof. Ulf Leser Wissensmanagement in der Bioinformatik. Jede Applikation braucht eine Klasse mit einer main-methode Methoden und Klassen Silke Trißl, Prof. Ulf Leser Wissensmanagement in der Bioinformatik Wiederholung Jede Applikation braucht eine Klasse mit einer main-methode Eintrittspunkt in das Programm Die main-methode

Mehr

Objektorientierte Programmierung mit C++ Zusammenfassung der wichtigsten Topics rund um die objektorientierte Programmierung mit C++11

Objektorientierte Programmierung mit C++ Zusammenfassung der wichtigsten Topics rund um die objektorientierte Programmierung mit C++11 Objektorientierte Programmierung mit C++ Zusammenfassung der wichtigsten Topics rund um die objektorientierte Programmierung mit C++11 Wozu objektorientiertes Programmieren? Die Welt besteht für den Menschen

Mehr

Spracherweiterungen von C# 3.5

Spracherweiterungen von C# 3.5 Microsoft Press Seitenanzahl 13 45 Spracherweiterungen von C# 3.5 Lokale Typinferenz 1213 Erweiterungsmethoden 1214 Objektinitialisierer 1216 Anonymer Typ 1217 Lambda-Ausdrücke 1218 Die Spracherweiterungen

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 26 Einstieg in die Informatik mit Java Felder Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 26 1 Was sind Felder? 2 Vereinbarung von Feldern 3 Erzeugen von Feldern

Mehr

Klausur Informatik Programmierung, Seite 1 von 8 HS OWL, FB 7, Malte Wattenberg

Klausur Informatik Programmierung, Seite 1 von 8 HS OWL, FB 7, Malte Wattenberg Klausur Informatik Programmierung, 22.09.2011 Seite 1 von 8 Klausurteilnehmer Name: Matrikelnummer: Wichtige Hinweise Es sind keinerlei Hilfsmittel zugelassen auch keine Taschenrechner! Die Klausur dauert

Mehr

Lorenz Hölscher. Richtig einsteigen: Access 2010 VBA-Programmierung

Lorenz Hölscher. Richtig einsteigen: Access 2010 VBA-Programmierung Lorenz Hölscher Richtig einsteigen: Access 2010 VBA-Programmierung Lorenz Hölscher: Richtig einsteigen: Access 2010 VBA-Programmierung Copyright 2010 O Reilly Verlag GmbH & Co. KG Das in diesem Buch enthaltene

Mehr

Java Vererbung. Inhalt

Java Vererbung. Inhalt Java Vererbung Inhalt 1 Zielsetzung... 2 1.1 Bewertung... 2 2 Grundlagen der Vererbung... 2 2.1 Super und Subklassen... 2 3 Überladen von Methoden... 4 3.1 Unterschiedliche Parameter... 4 3.2 Gleiche Parameter

Mehr

C++ - Operatoren. Eigene Klassen mit neuen Funktionen

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,

Mehr

Inhaltsverzeichnis. 1 Der SQL Server 2008 stellt sich vor 15. 2 Die grafischen Tools des SQL Server 2008 59. 3 Eine neue Datenbank erstellen 87

Inhaltsverzeichnis. 1 Der SQL Server 2008 stellt sich vor 15. 2 Die grafischen Tools des SQL Server 2008 59. 3 Eine neue Datenbank erstellen 87 Vorwort 11 1 Der SQL Server 2008 stellt sich vor 15 1.1 SQL Server wer ist das? 16 1.1.1 Der SQL Server im Konzert der Datenbanksysteme 16 1.1.2 Entscheidungsszenarien für Datenbanksysteme 17 1.1.3 Komponenten

Mehr

Datenbanken. Proseminar Objektorientiertes Programmieren mit.net und C# Sebastian Pintea. Institut für Informatik Software & Systems Engineering

Datenbanken. Proseminar Objektorientiertes Programmieren mit.net und C# Sebastian Pintea. Institut für Informatik Software & Systems Engineering Datenbanken Proseminar Objektorientiertes Programmieren mit.net und C# Sebastian Pintea Institut für Informatik Software & Systems Engineering Agenda 1. Datenbanken 2. SQL 3. ADO.NET DataProvider (providerabhängig)

Mehr

Programmierkurs C++ Abstrakte Klassen und Methoden

Programmierkurs C++ Abstrakte Klassen und Methoden Programmierkurs C++ Abstrakte Klassen und Methoden Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck http://www.itm.uni-luebeck.de/people/fischer #2 Vererbungshierarchie Obst double

Mehr

Java I Vorlesung Vererbung und Sichtbarkeit

Java I Vorlesung Vererbung und Sichtbarkeit Java I Vorlesung 4 Vererbung und Sichtbarkeit 17.5.2004 Vererbung Überladen, Überschreiben, Verstecken, Verschatten Zugriffskontrolle Statische Members Wiederholung: OOP Programme bestehen aus Klassen.

Mehr

Deklarationen in C. Prof. Dr. Margarita Esponda

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.

Mehr

13 OOP MIT DELPHI. Records und Klassen Ein Vergleich

13 OOP MIT DELPHI. Records und Klassen Ein Vergleich 13 OOP MIT DELPHI Delphi war früher "Object Pascal". Dieser Name impliziert eine Funktionalität, welche in der Welt der Programmierung nicht mehr wegzudenken ist: die objektorientierte Programmierung,

Mehr

Software Engineering Klassendiagramme Einführung

Software Engineering Klassendiagramme Einführung Software Engineering Klassendiagramme Einführung Prof. Adrian A. Müller, PMP, PSM 1, CSM Fachbereich Informatik und Mikrosystemtechnik 1 Aufgabe Erstellen Sie eine Klasse Person in Java. Jede Person verfügt

Mehr

Eclipse und EclipseLink

Eclipse und EclipseLink Eclipse und EclipseLink Johannes Michler Johannes.Michler@promatis.de PROMATIS, Ettlingen Zugriff auf Oracle Datenbanken aus Eclipse RCP Anwendungen via EclipseLink 18.09.2009 1 Gliederung Eclipse als

Mehr

Besonderheiten von C#

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(

Mehr

AuD-Tafelübung T-B5b

AuD-Tafelübung T-B5b 6. Übung Sichtbarkeiten, Rekursion, Javadoc Di, 29.11.2011 1 Blatt 5 2 OOP Klassen Static vs. Instanzen Sichtbarkeit 3 Stack und Heap Stack Heap 4 Blatt 6 1 Blatt 5 2 OOP Klassen Static vs. Instanzen Sichtbarkeit

Mehr

Grundzüge der Programmierung. Wiederverwendung VERERBUNG

Grundzüge der Programmierung. Wiederverwendung VERERBUNG Grundzüge der Programmierung Wiederverwendung VERERBUNG Inhalt dieser Einheit Syntax: Vererbung in Java Superklassen - Subklassen Konstruktorenaufruf in Subklassen super, abstract und final 2 Code-Reuse

Mehr

Programmieren in Java

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

Mehr

Inhaltsverzeichnis. Einleitung... 11

Inhaltsverzeichnis. Einleitung... 11 Inhaltsverzeichnis Einleitung...................................................... 11 Einführung......................................................... 11 Zielgruppe dieses Buches.............................................

Mehr

GetName(), GetName(), GetGeschlecht() und AelterWerden().

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

Mehr

Objektorientierte Programmierung

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

Mehr

Inhaltsverzeichnis. Einleitung... 13

Inhaltsverzeichnis. Einleitung... 13 Inhaltsverzeichnis Einleitung...................................................... 13 Einführung 13 Wegweiser für Ein- und Umsteiger..................................... 13 Konventionen und Features in

Mehr

Programmierkurs Java

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

Mehr

Einführung in die Programmierung mit VBA

Einführung in die Programmierung mit VBA Einführung in die Programmierung mit VBA Vorlesung vom 07. November 2016 Birger Krägelin Inhalt Vom Algorithmus zum Programm Programmiersprachen Programmieren mit VBA in Excel Datentypen und Variablen

Mehr

Gradle. Ein kompakter Einstieg in modernes Build-Management. Joachim Baumann. Joachim Baumann, Gradle, dpunkt.verlag, ISBN

Gradle. Ein kompakter Einstieg in modernes Build-Management. Joachim Baumann. Joachim Baumann, Gradle, dpunkt.verlag, ISBN D3kjd3Di38lk323nnm Joachim Baumann Gradle Ein kompakter Einstieg in modernes Build-Management Joachim Baumann joachim.baumann@codecentric.de Lektorat: René Schönfeldt Copy Editing: Sandra Gottmann, Münster-Nienberge

Mehr

Microsoft Visual C# 2008

Microsoft Visual C# 2008 John Sharp 13 Microsoft Visual C# 2008 Schritt für Schritt 13 13 14 15 15 16 16 17 17 17 21 22 22 23 25 26 II 40 51 Press 53 54 54 55 55 56 56 57 58 63 63 64 Inhaltsverzeichnis Einleitung 13 Einführung

Mehr

4 Vererbung, Polymorphie

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

Mehr

Objektorientiertes Programmieren für Ingenieure

Objektorientiertes Programmieren für Ingenieure Uwe Probst Objektorientiertes Programmieren für Ingenieure Anwendungen und Beispiele in C++ 18 2 Von C zu C++ 2.2.2 Referenzen und Funktionen Referenzen als Funktionsparameter Liefert eine Funktion einen

Mehr

101 011 Madrid 01110 Amsterdam 0110 010 011011011 01 0110 01111010 01101 011011 0110 011

101 011 Madrid 01110 Amsterdam 0110 010 011011011 01 0110 01111010 01101 011011 0110 011 101 011 01110 0110 010 011011011 01 0110 01111010 01101 011011 0110 011 10 01101110 Jürgen 01110 Kotz 0110 0110 0110 10 01101 011 01110 0110 010 011011011 0 10 01111010 01101 011011 0110 0110 01110 011011101

Mehr

Microsoft Office PowerPoint für Windows POW2007F. Autorin: Tina Wegener. Inhaltliches Lektorat: Sabine Spieß

Microsoft Office PowerPoint für Windows POW2007F. Autorin: Tina Wegener. Inhaltliches Lektorat: Sabine Spieß POW2007F Autorin: Tina Wegener Inhaltliches Lektorat: Sabine Spieß 1. Ausgabe, 2. Aktualisierung, September 2011 HERDT-Verlag für Bildungsmedien GmbH, Bodenheim Microsoft Office PowerPoint 2007 für Windows

Mehr

3 Objektorientierte Konzepte in Java

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

Mehr

SQL für Trolle. mag.e. Dienstag, 10.2.2009. Qt-Seminar

SQL für Trolle. mag.e. Dienstag, 10.2.2009. Qt-Seminar Qt-Seminar Dienstag, 10.2.2009 SQL ist......die Abkürzung für Structured Query Language (früher sequel für Structured English Query Language )...ein ISO und ANSI Standard (aktuell SQL:2008)...eine Befehls-

Mehr

7. Objektorientierte Softwareentwicklung/3. Informatik II für Verkehrsingenieure

7. Objektorientierte Softwareentwicklung/3. Informatik II für Verkehrsingenieure 7. Objektorientierte Softwareentwicklung/3 Informatik II für Verkehrsingenieure Überblick FOLGENDE BEGRIFFE/PRINZIPIEN SOLLTEN BEKANNT SEIN Objekte Klasse Attribute Fähigkeiten ZIEL DER HEUTIGEN LEHRVERANSTALTUNG

Mehr

Einführung in SQL Datenbanken bearbeiten

Einführung in SQL Datenbanken bearbeiten Einführung in SQL Datenbanken bearbeiten Jürgen Thomas Entstanden als Wiki-Buch Bibliografische Information Diese Publikation ist bei der Deutschen Nationalbibliothek registriert. Detaillierte Angaben

Mehr