Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Moderne Visual Basic-Programmierung

Ähnliche Präsentationen


Präsentation zum Thema: "Moderne Visual Basic-Programmierung"—  Präsentation transkript:

1 Moderne Visual Basic-Programmierung
Peter Monadjemi (BASIC- und VB-Fan der „ersten“ Stunde) Bei Fragen rund um VB:

2 Die Themen Kurzer Rückblick Auf dem Weg zur funktionalen Programmierung Die neue Datenschicht: EF 4.1 (Kurzer Ausflug zu WPF + MVVM) Neuerungen bei VB 11: Asynchrone Aufrufe und Iteratoren Ausblick

3 Me.About(function(p) p.BasicJahre >30)
Beschäftige mich mit dem Thema „Programmierung“ seit ca (zufällig das Jahr, in dem Microsoft gegründet wurde) Meine ersten BASIC-Programme entstanden auf einem 8080 Meine erste Programmiersprache nach BASIC war FORTH (besitzt heute immer noch eine fanatische Anhängerschaft) Später der übliche Werdegang (C64, ST 512, Comodore PC 10 usw.) Wohne in Esslingen (am Neckar) 10: Print "Hallo, Welt“ 20: GoTo 10

4 Meine Anfänge als Buchautor
Das Trainingsbuch zu Forth (1983) Maschinenspracheprogrammierung (1986) Das Visual Basic Kompendium 1.0 (1992) Weitere VB-Bücher, Windows-Bücher usw. Mein letztes Werk: Office 2010 mit Visual Studio Das Visual Basic 2010 Kompendium steht noch aus

5 Ein kurzer Blick zurück (1)
Visual Basic 1.0 (1991) Windows-Programmierung für Jedermann Visual Basic 3.0 (1994) Datenbankprogrammierung mit der Jet-Engine und dem Datensteuerelement Visual Basic 4.0 (1996) Der Umstieg auf 32 Bit

6 Ein kurzer Blick zurück (2)
Visual Basic 5.0 (1997) Maschinencode statt P-Code Visual Basic 6.0 (1998) Alles Wichtige stand zur Verfügung (aber auch ein paar überflüssige Dinge, wie ActiveX Documents) Mit .NET kam der große Bruch Visual Basic wurde als Sprache komplett neu entwickelt und in Visual Studio integriert Übrig blieb: Microsoft.VisualBasic.dll

7 Auch unter .NET gab es eine Entwicklung
Visual Studio .NET 2002/2003 waren noch sehr rudimentär Mit Visual Studio 2005 kamen wichtige Verbesserungen speziell für die VB-Community: >Der My-Namespace >Windows Forms-Datenbindung >Änderungen während einer Programmunterbrechung >Der Aktualisierungsassistent wurde leicht verbessert usw. Mit Visual Studio 2008 SP1 kamen ASP.NET MVC und das Entity Framework Mit Visual Studio 2010 kommt u.a. ein halbwegs brauchbarer WPF-Designer

8 Was heißt modern? Das Gegenteil von moderner Programmierung ist nicht altmodische Programmierung Modern bedeutet für mich: Die Möglichkeiten der Sprache, des .NET Frameworks (der Laufzeit) und von Visual Studio zu kennen, um sie bei Bedarf einsetzen zu können Es ist in Ordnung Lambdas nicht zu mögen (etwa unter dem Aspekt der Lesbarkeit) Es ist nicht in Ordnung nicht zu wissen, was ein Lambda ist und welche Möglichkeiten er bietet

9 Schwerpunkte bei .NET 4.0, die für Visual Basic-Entwickler wichtig sind
2 3 1 LINQ Entity Framework Lambdas 5 6 4 Task Parallel Library Asynchrone Aufrufe WPF/Silverlight MVVM

10 Grundlage für alles: Die Programmiersprache
Typinferenz Automatische Properties Collection- und Array-Initialisierer Anonyme Typen XML-Literale Nullable Typen und Null-Weitergabe Erweiterungsmethoden usw.

11 Typinferenz (Version 9.0)
Der Compiler kann den Typ einer lokalen Variablen aus der Zuweisung ableiten Praktische Abkürzung, an die man sich gewöhnen muss Ist vor allem bei LINQ-Abfragen wichtig Ging das nicht früher (z.B. VB2005) auch schon? Beispiel Dim Zahl = 1234 Dim GebDatum = " " Int32 DateTime oder String?

12 Automatische Properties (Version 10.0)
Properties können vereinfacht definiert werden Es wird automatisch ein privates Feld angelegt Beispiel Property As String

13 Collection- und Arrays-Initialisierer (Version 10.0)
Eine Collection kann bei der Deklaration mit Werten belegt werden (sehr praktisch) Auch für Arrays gibt es etwas Neues Beispiel Neues Schlüsselwort Dim Spieler = New List(Of Spieler) From { New Spieler With { .Name = "Spieler1"}, New Spieler With { .Name = "Spieler2"} } Beispiel Dim Zahlen = {11, 22, 33, 44} Dim Matrix = {{11,111}, {22,222}, {33,333}, {444,44}} Integer() Integer(,)

14 Anonyme Typen (Version 9.0)
Ein Typ, der nicht explizit definiert werden muss Und vom Compiler einen "unaussprechlichen" Namen erhält Beispiel Dim P = New With {.Name = "Pemo", .Alter = 44 } VB$AnonymousType_0`2

15 XML-Literale (gibt es nicht bei C#)
XML-Code kann direkt in den Quellcode eingefügt werden XElement-Objekt Eingebetteter Ausdruck Beispiel Dim HTML = <HTML> <HEAD> <TITLE>Ein kleiner Test</TITLE> </HEAD> <BODY> <H1>XML-Literale in VB</H1> <%= From z In Enumerable.Range(1, 12) Select <LI><%= MonthName(z) %></LI> %> </BODY> </HTML> My.Computer.FileSystem.WriteAllText("Test.html", HTML.ToString(), False, System.Text.Encoding.Default) Process.Start("Test.html")

16 Null-fähige Typen und Null-Weitergabe (Version 9.0)
Auch ValueType-Variablen können keinen Wert besitzen Praktisch im Zusammenhang mit Entity Framework Besitzt eine Property einen Nullable-Typ lässt sich abfragen, ob sie aus dem DB-Feld einen Wert erhalten hat Beispiel Class Person Property Name As String Property Alter As Integer? End Class Dim P As New Person With {.Name="Pemo" } If P.Alter.HasValue Then False Nullable Type

17 Null-fähige Typen und Null-Weitergabe (Version 9.0)
Null-Werte werden weitergeben (engl. null propagation) Beispiel Dim a As Integer? = Nothing Dim b As Integer? = 123 Dim c = a + b Wird zu einem Nullable-Type (Integer?) und besitzt (als ValueType) den Wert Nothing (ansonsten 123, da der Null-Wert dann nicht weitergeben wird)

18 Erweiterungsmethoden (engl. extension methods)
Jede Klasse kann nachträglich um statische Methoden erweitert werden Methode wird in einem Modul definiert und mit dem Extension-Attribut (System.Runtime.CompilerServices) dekoriert Zuordnung zu einer Klasse geschieht über den Typ des 1. Methodenparameters Praktisch, da die Aufrufsyntax konsistent bleibt

19 Extension-Methode-Beispiel
Module StringEx <Extension()> Function FirstToUpper(ByVal s As String) As String Return Mid(s, 1, 1).ToUpper() & s.Substring(1, s.Length - 1).ToLower() End Function End Module String beginnt bei 0 String-Klasse wird erweitert Erweiterungsmethode

20 Weitere "Sprachneuerungen" (1)
Relaxed Delegates Für einen Prozedur-Delegaten mit Parametern kann eine parameterlose Prozedur eingesetzt werden Beispiel Sub Button1_Click() End Sub Event-Handler für das Click-Event – die Parameter Sender und e können entfallen

21 Weitere "Sprachneuerungen" (2)
Covarianz und Contravarianz Varianz – die Möglichkeit z.B. bei einer generischen Liste den Typ variieren zu können, wenn der neue Typ in einer "Ist abgeleitet"- oder "Leitet sich ab"-Beziehung zu dem Originaltyp steht Spielt in der Praxis eher selten eine Rolle Führt zu weniger InvalidCastExceptions

22 Beispiel für Covarianz
Module Module1 Sub Main() Dim ListeSpezial As New List(Of Spezial) From {New Spezial, New Spezial, New Spezial} Dim ListeEinfach As IEnumerable(Of Einfach) = ListeSpezial Console.ReadLine() End Sub End Module Class Einfach End Class Class Spezial : Inherits Einfach End Class Führt bei .NET 3.5 zu einer Exception Bei ,NET 4.0 ein Out-Interface Public Interface IEnumerable(Of Out T)

23 Mehr auf MSDN

24 Lambdas (Schwerpunkt 1)
Lambda = Funktion- oder Prozedur ohne Funktions-/Prozedurkopf Weiterentwicklung der anonymen Methoden von C#, die es bei VB nie gegeben hat Der Begriff kommt von Lambda Calculus (ʎ) Vorteile: Mehr Flexibilität, wenn Funktionscode als Parameter eingesetzt werden soll Funktionscode kann wie Daten behandelt werden (und z.B. einer Variablen zugewiesen werden) Grundlage für LINQ

25 Lambdas (2) Function und Sub können auch rechts vom = stehen Ein Lambda ist vom Typ Func(Of T) Können dort eingesetzt werden, wo ein Action(Of T)- oder Predicate(Of T) –Delegat erwartet wird Ein sieht etwas ungewöhnlich aus (und bringt auch keine Vorteile für die Programmierung;) Dim Msg = Sub() Msgbox ("Hallo") Msg() Anonymer Delegat

26 Lambdas (3) Manches erscheint auf den ersten Blick etwas ungewöhnlich
Class Person Property Name As String Property Active As Boolean End Class Function auf der rechten Seite Dim CheckActiveUser As Func(Of Person, Boolean) = Function(p) p.Active Delegat-Typ Dim Personen As new List(Of Person) From {...} Dim AktivePersonen1 = Personen.Where(CheckActiveUser) Dim AktivePersonen2 = Personen.Where(CheckActiveUser).ToArray() WhereListIterator-Objekt Array

27 DoEvents-Ersatz für WPF
In C# Wie um alles in der Welt schreibt man das in VB? public static void DoEvents() { Application.Current.Dispatcher.Invoke( DispatcherPriority.Background, new ThreadStart(delegate { })); } Anonyme Methode in C# Sub DoEvents() Application.Current.Dispatcher.Invoke( DispatcherPriority.Background, Sub() End Sub) End Sub

28 Die Lösung Einfach einen passenden Delegaten definieren
Delegate Sub UpdateListBox(ByVal z As Integer) Dim T1 As New Task(Sub() For n = 1 To ListBox1.Dispatcher.Invoke(New UpdateListBox(Sub(z) ListBox1.Items.Add(z) End Sub), n) Next End Sub) T1.Start() Delegat wird instanziert

29 LINQ (Schwerpunkt 2) Löst das "Impedanzproblem" elegant und entwicklerfreundlich (Datenbank-) daten können direkt im Programmcode angesprochen werden Nicht wirklich neu (erste CTP gab es im Mai 2006!) Seit .NET 4.0 kann jede LINQ-Abfrage auch parallel ausgeführt werden Einfach ein AsParallel() anhängen

30 LINQ (1) Ist über Sprachvereinfachungen sowohl Teil der Programmiersprache als auch des .NET Framework (ab Version 3.5) Join mit Sprachvereinfachung Dim AuftraegeKundenPLZ7 = From k In Kunden Join a In Auftraege On k.KundenNr Equals a.KundenNr Where k.PLZ.StartsWith("7") Select New With {.AuftragNr = a.AuftragNr, .PLZ = k.PLZ} Join ohne Sprachvereinfachung Dim AuftraegeKundenPLZ7 = Kunden.Join(Auftraege, Function(k) k.KundenNr, Function(a) a.KundenNr, Function(k, a) New With {.AuftragNr = a.AuftragNr, .PLZ = k.PLZ}).Where(Function(a) a.PLZ.StartsWith("7")) Reguläre Collection

31 LINQ (2) LINQ funktioniert mit allen Collections/Arrays
Eine LINQ-Abfrage steht nicht für das Ergebnis, sondern für die Abfrage Lazy Loading (Abfrage wird erst bei der Auswertung ausgeführt) Ergebnis wird implizit/explizit z.B. in ein Array konvertiert Es gibt über 40 Erweiterungsmethoden, wie z.B. Group, Count, Select, Where usw. Stammen von den Klassen Enumerable(Of T) und Queryable(Of T)

32 LINQ (3) Visual Basic bietet knapp ein Dutzend Abfragevereinfachungen from, where, select, aggregate, distinct, group, join, order by, take, skip, let Ein einfaches Beispiel Dim AktiveUser = From u In User Where u.IsActive Select u Keine Collection, Sondern "Iterator" – Abfrage wird "verzögert" Ausgeführt Iterator liefert im Rahmen einer For Each-Schleife bei Jedem Durchlauf das nächste Objekt Collection mit User-Objekten Damit beginnt Jede Abfrage Projektion, die den Rückgabetyp festgelegt (optional) Abfragevereinfachung Lokale Variable bezogen auf den Ausdruck

33 Entity Framework (Schwerpunkt 3)
Entity Framework – der offizielle ORM von Microsoft ORM = Objektrelationaler Mapper Objekte können direkt in einer Datenbank gespeichert werden (Persistenz) Der ORM kümmert sich um Details wie Vererbung, Collections, Primärschlüssel-Beziehungen und das "Mappen" auf Datenbanktabellen EF 1.0 als Teil von .NET 3.5 SP1 Mit .NET 4.0 ist EF funktional reichhaltig genug

34 Ohne EF ist alles zwar vertraut, aber etwas umständlich
Abrufen der Employees-Datensätze und Mappen auf Objekte Dim Employees As New List(Of Employee) Using Cn As New SqlConnection(My.Settings.NwCn) Cn.Open() Dim Cmd As SqlCommand = Cn.CreateCommand() Cmd.CommandText = "Select EmployeeID, LastName From Employees" Dim Dr As SqlDataReader = Cmd.ExecuteReader() While Dr.Read() Dim emp As New Employee With { ID = Dr.ReadInt32(Dr.GetOrdinal("EmployeeID")) LastName = Dr.ReadString(Dr.GetOrdinal("LastName")) Employees.Add(emp) End While Cn.Close() End Using

35 Mit EF wird alles sehr einfach
Abrufen der Employees-Datensätze Using NwContext As New DBContext(My.Settings.NwCn) EmployeesCol = NwContext.Employees.ToList() End Using Wäre nicht erforderlich, da DBContext bereits die Datensätze als Collection zur Verfügung stellt Neuen Datensatz anhängen Using NwContext As New DBContext(My.Settings.NwCn) Dim empNeu As New Employee empNeu.LastName = "Monadjemi" NwContext.Employees.Add(empNeu) NwContext.SaveChanges() End Using

36 Mit EF 4.1 gibt es Code First
Separater Download (seit Mai) Code First – Datenbank wird direkt aus dem Klassenmodell abgeleitet Weder ein separates Mapping noch der Entity Designer sind im Spiel Sehr praktisch für alle Situationen, in denen Objekte (POCOs = Plain Old CLR Objects) einfach nur "persistiert" werden sollen

37 Beispiel für Code-First bei EF 4.1 (1)
Klassen besitzen keine Abhängigkeiten Class Person Property Name As String End Person Class Mitarbeiter : Person <Key()> Property MitarbeiterID As Integer Property Reservierungen As Ienumerable(Of Reservierung) Property EinstellDatum As DateTime End Class Class Reservierung <Key()> Property ReservierungID As Integer Property MitarbeiterID As Integer End Class Class VBHotelContext : Inherits DBContext Property Mitarbeiter As DBSet(Of Mitarbeiter) Property Reservierungen As DBSet(Of Reservierung) End Class

38 Beispiel für Code-First bei EF 4.1 (2)
Anlegen und Persistieren von Objekten Sub Main Using Db As New VBHotelContext Dim m As New Mitarbeiter With { .Name = "Pemo", .EinstellDatum=Now } Db.Mitarbeiter.Add(m) Db.SaveChanges() End Using End Main Abfragen von Objekten Sub Main Using Db As New VBHotelContext Dim NeueMitarbeiter = From m in Db.Mitarbeiter Where m.EinstellDatum > " " Select m End Using End Main Legt Datenbank via App.config an

39 EF 4.1 – Die Struktur der Datenbank
Namensvergabe kann überschrieben werden

40 MVVM bei WPF und Silverlight (Schwerpunkt 4)
MVVM = Model View ViewModel Abgeleitet aus dem klassischen MVC-Muster (Movel View Controller) Spielt (wegen Datenbindung) nur bei WPF, Silverlight und WP7 eine Rolle Sinnvolle Abstrahierung der Benutzeroberfläche (Window, UserControl) von den Klassen, die die Daten zur Verfügung stellen

41 MVVM (1) Model – eine klassische Datenklasse ViewModel – kapselt die Datenklasse und macht sie bindungsfähig View – stellt eine Sicht auf die Datenklasse dar, dessen Daten über das ViewModel gebunden werden

42 MVVM - Vorteile Gibt (endlich) eine Antwort auf die Frage, wie eine Anwendung mit Benutzeroberfläche strukturiert wird Seit Jahren bewährter Ansatz Praxiserprobt und "Tausendfach" modifiziert Unterstützung durch Frameworks Im Grunde für WPF- und Silverlight-Anwendungen der einzige Ansatz

43 MVVM - Nachteile Wirkt teilweise recht komplex (ist es aber nur bedingt) Lernaufwand ist am Anfang sehr groß Vorteile wirken sich nicht immer direkt aus Man muss MVVM bereits sehr gut verstanden haben, um keine "Designfehler" zu machen und sich nicht in eine Ecke zu manöverieren Keine Unterstützung durch Microsoft für WPF (aber für Silverlight)

44 MVVM lernen Der Einstieg ist nicht ganz leicht
Es gibt viele Tutorials (auch mit VB-Code) Wenn sich MVVM-Experten austauschen wird es sehr schnell kompliziert Trotzdem ist MVVM nicht schwer zu erlernen Die größte Herausforderung besteht am Anfang darin, den "Sinn" zu erkennen und den Mehraufwand zu akzeptieren

45 Asynchrone Aufrufe (Schwerpunkt 5)
So war es bislang So wird es mit Visual Basic 11 sein Ebenfalls neu bei VB11: Iteratoren

46 So war es bislang… Asynchrone Aufrufe sind schwierig zu implementieren
Expliziter Callback erforderlich Programmlogik wird "zerstückelt" Threadübergreifender Zugriff von einer asynchron ausgeführten Methode etwas problematisch Exception-Handling wird meistens ignoriert Viele VB-Entwickler ließen bislang lieber die Finger davon

47 Asynchrone Aufrufe – Lösungsansätze
Es gibt verschiedene Lösungsansätze: Begin<Operation>/End<Operation>-Entwurfsmuster aus .NET 1.x (z.B. FileStream-Klasse) Auslagern auf einem Backgroundthread aus dem Threadpool Asynchrone Aufrufe über Delegaten, BeginInvoke und einem Callback Einige wenige.NET-Methoden sind von Haus aus asynchron und melden sich über ein Event (z.B. DownloadStringAsync der WebClient-Klasse) Die BackgroundWorker-Komponente (der einfachste Ansatz)

48 Asynchrone Aufrufe – Schwachpunkte der vorhandenen Ansätze
Erhöhter Implementierungsaufwand Viele Entwickler schrecken vor Delegaten, asynchronen Callbacks zurück (wirken kompliziert) Was ist mit vorzeitigem Abbruch oder einer Fortschrittsmeldung? Die Programmlogik muss angepasst werden Threads kosten Ressourcen (1 Mbyte Arbeitsspeicher pro Thread)

49 Asynchrone Aufrufe – Neu: TAP
TAP – Task-based asynchronous Patterns Empfehlung von Microsoft für die Umsetzung und den asynchronen Aufruf beliebiger Methoden Unbedingt das White-Paper lesen

50 Asynchrone Aufrufe – TAP im Detail (1)
Basiert auf den mit .NET 4.0 eingeführten Tasks Ein Task steht für eine Operation (Methode), die vom Task Scheduler ausgeführt wird Es gibt nur ein Methode Namenskonvention: <Operation>TaskAsync Gibt immer ein Task- bzw. Task(Of T)-Objekt zurück

51 Asynchrone Aufrufe – TAP im Detail (2)
Die TaskAsync-Methode kehrt „sofort“ zurück Der Initialisierungscode (sofern vorhanden) wird synchron ausgeführt Die Rückgabe ist immer ein Task-Objekt Der Hauptteil wird asynchron ausgeführt, das Ergebnis wird über das Task-Objekt zur Verfügung gestellt Exceptions werden ebenfalls über das Task-Objekt zur Verfügung gestellt Ein TaskAsync-Methode kann über ein CancellationToken jederzeit abgebrochen werden

52 Asynchrone Aufrufe – ein Beispiel für eine TAP-Methode
Eine TaskAsync-Methode gibt ein Task(Of T)-Objekt zurück Dim T = Wc.DownloadStringTaskAsync(" Dim Content = Await T Task(Of String) Ohne den Umweg über eine Task(Of T)-Variable Dim Content = Await Wc.DownloadStringTaskAsync(" Befehl1 Befehl2 Nicht blockierend Werden über einen Callback erst nach Beendigung des Tasks ausgeführt

53 Beispiel mit .NET 4.0 Asynchroner Download mehrerer Webseiten
Private Function SumWebPages(Uris As List(Of Uri)) As Integer Dim total As Integer For Each Uri In Uris Dim Wc As New WebClient AddHandler Wc.DownloadDataCompleted, Sub(sender, e) total += e.Result.Length Console.WriteLine("Das Ergebnis ist da - neue Gesamtgröße: {0:n0}", total) End Sub Console.WriteLine("Prüfe: {0}, Aktuelle Größe: {1:n0}", Uri.AbsoluteUri, total) Wc.DownloadDataAsync(Uri) Next Return total End Function Lambda als Event-Handler Lambda als Event-Handler Einfacher Asynchroner Aufruf, aber was ist mit dem Kontrollfluss?

54 So wird es mit VB 11 sein Asynchroner Download mehrerer Webseiten
Private Async Function SumWebPages(Uris As List(Of Uri)) As Task(Of Integer) Dim total As Integer = For Each Uri In Uris Dim Data = Await New WebClient().DownloadStringTaskAsync(Uri) total += Data.Length Console.WriteLine("Prüfe: {0}, Aktuelle Größe: {1:n0}", Uri.AbsoluteUri, total) Next Return total End Function Compiler macht daraus einen Task, der als Callback ausgeführt wird Neu bei .NET 4.5 Async und Await sind neu bei VB11

55 Die Rolle von Await (1) Neuer Operator in VB 11
Kann nur in Subs/Functions eingesetzt werden, die mit Async deklariert sind (=asynchrone Methode) Wartet auf das Resultat des gestarteten Tasks, ohne den Thread zu blockieren Await „splittet“ die Methode in zwei Abschnitte auf Abschnitt 1 legt den Task an und kehrt zurück Abschnitt 2 umfasst die auf Await folgenden Befehle, die über einen Callback aufgerufen werden

56 Die Rolle von Await (2) Wird nach Beendigung des Tasks ausgeführt
Async Sub Test() Dim z = Await TuWas() Console.WriteLine(z) End Sub Async Function TuWas() As Task(Of Integer) Await TaskEx.Delay(5000) Return Await TaskEx.Run(Of Integer)(Function() Return 1234 End Function) End Function Wird nach Beendigung des Tasks ausgeführt

57 Beispiel: Asynchroner RSS-Reader
WPF-Anwendung RSS-Feeds werden über DownloadStringAsyncTask heruntergeladen Abbruch jederzeit möglich Fortschrittsanzeige über IProgress-Schnittstelle

58 Mehrere Tasks zusammenfassen
Vorher: WhenAll fasst mehrere Tasks zu einem Task zusammen Async Sub DownloadUrls() Dim UrlListe() = {" " " " Dim AlleTasks As IEnumerable(Of Task) = From url In UrlListe Select TuWasAsync(url) ' Genial: WhenAll fasst alle Tasks zu einem neuen Task zusammen und Await wartet, dass alle Tasks fertig sind Await TaskEx.WhenAll(AlleTasks) Console.WriteLine("Alle Tasks haben fertig...") End Sub Genial: Methodenaufruf, der ein Task-Objekt liefert, aus der LINQ-Abfrage herausl Async Function TuWasAsync(Url As String) As Task(Of Boolean) Await TaskEx.Run(New Action(Sub() Console.WriteLine("Verarbeite {0} auf Thread-ID: {1}", Url, Thread.CurrentThread.ManagedThreadId) Thread.Sleep(5000) End Sub)) Return True End Function Hilfsklasse der Async CTP Künstliche Verzögerung Thread aus Threadpool

59 Asynchron ist wichtig Fenster sollen reaktionsfreudig bleiben Webinhalte (z.B. Webservices) sollten generell asynchron abgefragt werden Wichtig: Die asynchronen Aufrufe erfolgen nicht automatisch auf einem Backgroundthread

60 Iteratoren Was ist ein Iterator? Ein Beispiel zur Einstimmung Weitere Beispiele

61 Was ist ein Interator? Iterator = Funktion vom Typ IEnumerable(Of T), die wie eine Collection durchlaufen wird Wird mit dem neuen Iterator-Schlüsselwort implementiert Ein Wert wird über den neuen Yield-Befehl zurückgegeben Vorteil: Die Rückgabe der einzelnen Werte lässt sich steuern Vorteil: Generell mehr Flexibilität Der LINQ-Effekt: Sobald man sich daran gewöhnt hat, verwendet man es bei der jeder Gelegenheit

62 Iteratoren – ein Beispiel zur Einstimmung
Beispiel: Ein Range-Methode gibt einen Zahlenbereich zurück Variante A: Dim Zahlen = Range1(4, 10) Iterator Function Range1(Min As Byte, Max As Byte) As IEnumerable(Of Byte) For i = Min To Max Yield i Next End Function Variante B: Function Range2(Min As Byte, Max As Byte) As IEnumerable(Of Byte) Return Iterator Function() For i = Min To Max Yield I Next End Function.Invoke() End Function

63 Iteratoren – mit einem Lambda
Beispiel: Ein Lambda-Iterator gibt einen Zahlenbereich zurück Dim Zahlen = Iterator Function(min As Integer, max As Integer) For i = min To max Yield i Next End Function.Invoke(4, 5) Aufruf des Lambda

64 Iteratoren und Inline-XML
Beispiel: Ein Lambda-Iterator gibt einen Zahlenbereich zurück Dim RSS = <?xml version="1.0"?> <RSS> <chanell> <%= Iterator Function() For Each M In Meldungen Yield <item> <title><%= M.Titel %></title> <date><%= M.Zeitpunkt.ToShortDateString()></date> </item> Next End Function.Invoke() %> </chanell> </RSS> XElement-Objekt Collection mit Meldung-Objekte Lambda-Iterator Xdocument-Objekt

65 Iteratoren – Weitere Beispiele
Implementierung einer einfachen State-Machine Durchlaufen eines Baums

66 Entwickeln für Windows 8
Neu: Windows Runtime anstelle von .NET Runtime Metro Style-Anwendungen als neuer Anwendungstyp Die Rolle von Visual Basic

67 Die Windows Runtime (Windows RT)
Laufzeit für Windows 8 Metro Style-Anwendungen Umfasst ca Klassen Kapselt viele Win32-API-Funktionen Wird über COM-Schnittstellen angesprochen (IUnknown ist zurück) Über „Projections“ Schnittstellen zu NET, C++ usw. Es gibt eine .NET-Metro-Klassenbibliothek (Metro Style Profile) Der Name ist .NET for Metro Style Apps Teilmenge der .NET-Klassenbibliothek Teilweise nicht kompatibel (andere Typen- und Membernamen)

68 Das neue Anwendungsmodell

69 Metro Style Apps Neues Oberflächenmodell - das erste seit Windows 95 (!) Im Mittelpunkt stehen die mit der Windows Phone 7- Oberfläche (Metro) eingeführten Kacheln Kacheln – Einstiegspunkt für eine Anwendung Optimiert für Touch-Oberflächen

70 Die Rolle von Visual Basic
Windows 8 enthält die .NET 4.5-Laufzeit Entwickelt wird mit VS 11 bzw. VS 11 Express Edition Zahlreiche Vorlagen Oberfläche wird in XAML definiert Silverlight-Apps können mit geringem Aufwand umgestellt werden Anwendungen werden nach wie vor von der CLR (4.5) ausgeführt

71 Verbesserungen bei .NET 4.5 und VS 11
Neue Klassen, z.B. HttpClient Implementierung des Task-based Asynchronous Pattern Neuer WPF- und Silverlight-Designer Der Designer aus Expression Blend wurde in die Visual Studio-IDE „eingepflanzt“ Wichtige Verbesserungen beim Thema Application Life Cycle Management (ALM)

72 Roslyn – Compiler als Service
Die Compiler-Infrastruktur wird aufgebohrt und ihre Funktionalitäten werden über Klassen zur Verfügung gestellt Entwickler können sich damit eigene Syntaxparser oder Codegeneratoren schreiben Seit Oktober 2011 gibt es eine erste CTP – möglicherweise Teil des Nachfolgers von .NET 4.5

73 Roslyn – viele neue Möglichkeiten für VS-Erweiterungen
Die Compiler-Klassen standen bei .NET schon immer zur Verfügung Namespace System.CodeDom.Compiler Damit lässt sich zur Laufzeit Quellcode in eine Assembly kompilieren und ausführen Roslyn bietet einen Zugriff auf die einzelnen Phasen der Kompilierung und den resultierenden Syntaxbaum, der das kompilierte Programm repräsentiert Neben einer Syntaxanalyse ist eine auch eine semantische Analyse des Codes möglich

74 Roslyn – Beispiele aus der CTP
VisualBasicToCSharpConverter Konvertiert VB-Code nach C# RemoveByValVB Entfernt überflüssige ByVal`s OrganizeSolutionVB Sortiert Import-Anweisungen ConvertToAutoPropertyVB Konvertiert „leere“ Property-Definitionen in Auto-Properties ScriptingIntro (aktuell nur C#) C#-Shell mit einem C#-Intepreter

75 Tools, die VB-Entwickler kennen sollten
FxCop (Microsoft) Programmcode-Analyse auf der Basis von Regeln Refactor! (DevExpress) Umgestalten lassen des Quellcodes LINQPad Genial zum Ausprobieren von LINQ-Abfragen ILSpy "Nachfolger" von der freien Version von Reflector Mole (keine Freeware) Genialer Visual Studio-Visualizer

76 Der Nuget-Package Manager
Seit Januar 2010 verfügbar Auf der PowerShell basierendes Konsolenfenster für Visual Basic für das Installieren von Packages Package = Sammlung von Assemblies, die einem Projekt hinzugefügt werden sollen Es gibt inzwischen Tausende von Packages Von Log4Net bis Entity Framework 4.1

77 Quellcodeverwaltung Es gibt viele Alternativen Meine Empfehlung: >Subversion (SVN) (z.B. TortoiseSVN) >VS-Integration über Akhsn >VSN-Client >Projektportal zum Hosten, z.B. unfuddle.com >Demnächst: TFS Express Edition

78 Co-Evolution „VB und C# werden in Zukunft gemeinsam weiterentwickelt“
Anders Hejlsberg, Distinguished Engineer bei Microsoft (und „Vater“ von Turbo Pascal und Delphi) im Juni 2009

79 C# nähert sich VB an Über das dynamic-Schlüsselwort ist eine späte Bindung möglich Optionale und benannte Argumente bei Methoden C# hat damit VB „eingeholt“ - lediglich „Inline-XML“ gibt es nicht

80 VB nähert sich C# an Ein – und mehrzeilige Lambdas Einzeilige Properties Collection-Initialisierer Mit VB11 auch Iteratoren Ein paar Kleinigkeiten fehlen, z.B. ein direktes Pendant zum delegate-Befehl und den anonymen Methoden (Lambdas bei VB) delegate int FunDel(int x1, int x2); FunDel f1 = delegate(int p1, int p2) { return p1 + p2; };

81 VB hat aufgeholt XNA 4.0 – DirectX-Spiele können auch in VB entwickelt werden .NET MicroFramework ab Version 4.2 – VB-Code läuft auf kleinen RISC-CPUs Microsoft Surface 2.0 SDK enthält VB-Beispiele Windows Phone 7 – VB-Code läuft (unter Silverlight) auf einem SmartPhone Im Rahmen von Silverlight läuft VB-Code auch unter Mac OS X Es gibt keine Abhängigkeit zur VB-Laufzeit (Namespace Microsoft.VisualBasic) mehr

82 Ein Blick in die nähere Zukunft
Das Innovationstempo wird sich bei der Sprache sicherlich verlangsamen Die „wir müssen die VB6-Entwickler zurückgewinnen“- Phase ist bei Microsoft wieder vorbei Alle wichtigen Sprachelemente sind implementiert Die Möglichkeit jede Methode asynchron aufrufen zu können ist ein wichtiger Schritt in die richtige Richtung - vor allem für VB-Entwickler Ansonsten: Wer braucht weitere Features? Die aktuell vorhandene Funktionalität ist mehr als ausreichend

83 Die Zukunft von Visual Basic…
Sieht trotz alledem grundsätzlich gut aus Visual Basic wurde im Mai 20 Jahre alt (!) Tipp: Co-Evolution sorgt dafür, dass VB die Features von C# erhält Die Async-Vereinfachung wird die VB- Programmierung stark beeinflussen Jetzt ist der Zeitpunkt, sich mit der der VS 11 Preview zu beschäftigen


Herunterladen ppt "Moderne Visual Basic-Programmierung"

Ähnliche Präsentationen


Google-Anzeigen