Slide 1

Slide 1 text

Εισαγωγή στο .ΝΕΤ Framework και στη C# Μέθοδοι Ανάπτυξης και Αρχιτεκτονικές Συστημάτων ΠΜΣ Πληροφοριακά Συστήματα, ΟΠΑ Άγγελος Μπιμπούδης BSc, MSc PhD Candidate, University of Athens Microsoft Student Partner, Microsoft Hellas Software Developer, Nessos S.A.

Slide 2

Slide 2 text

Agenda • Τι είναι το .ΝΕΤ • Γνωριμία με Visual Studio IDE • Παρουσίαση γλώσσας C# • Ομοιότητες/Διαφορές με Java

Slide 3

Slide 3 text

1. .NET

Slide 4

Slide 4 text

Τι είναι το .NET • Framework – Common Language Runtime – Framework Class Library – Base Class Library • Windows Presentation Foundation • Windows Communication Foundation • Windows Workflow Foundation • Windows CardSpace

Slide 5

Slide 5 text

.NET Framework

Slide 6

Slide 6 text

Common Language Infrastructure • Είναι το ανοικτό πρότυπο (ECMA-335 και ISO/IEC 23271) • Περιγράφει τον εκτελέσιμο κώδικα και το περιβάλλον εκτέλεσης • Αποτελείται από: – Common Type System – Μετα-δεδομένα – Common Language Specification – Virtual Execution System • Από Ιούλιο 2009: C# και CLI υπό Community Promise

Slide 7

Slide 7 text

Common Language Infrastructure

Slide 8

Slide 8 text

Γλώσσες που συνάδουν με το πρότυπο • Ada • APL • Basic (Visual Basic) • C# • C • C++ • Java Language • COBOL • Component Pascal (Queensland Univ of Tech) • ECMAScript (JScript) • Eiffel (Monash University) • Haskell (Utrecht University) • lcc (MS Research Redmond) • Mondrian (Utrecht) • ML (MS Research Cambridge) • Mercury (Melbourne U.) • Oberon (Zurich University) • Oz (Univ of Saarlandes) • Perl • Python • Scheme (Northwestern U.) • SmallTalk

Slide 9

Slide 9 text

Common Type System • Να υπάρχει ένα framework που υποστηρίζει cross- language integration, type safety και εκτέλεση κώδικα με υψηλή απόδοση • Η παροχή ενός αντικειμενοστραφούς μοντέλου, που υποστηρίζει την πλήρη υλοποίηση από διάφορες γλώσσες προγραμματισμού • Ο προσδιορισμός κανόνων ώστε οι γλώσσες να είναι interoperable

Slide 10

Slide 10 text

Common Language Specification • Το CLS υποσύνολο του CTS • To CLS βοηθάει στη διαλειτουργικότητα γλωσσών με το να προσδιορίζει χαρακτηριστικά που είναι κοινά σε κάθε γλώσσα που απευθύνεται το CLR • Πχ – To UInt32 δεν είναι CLSCompliant – Η C# case sensitive, Visual Basic όχι

Slide 11

Slide 11 text

Common Language Runtime • Just-in-time Compilation • Memory management • Thread management • Exception handling • Garbage collection • Security

Slide 12

Slide 12 text

Common Language Runtime

Slide 13

Slide 13 text

.NET Framework Stack

Slide 14

Slide 14 text

Διαδικασία Εκτέλεσης

Slide 15

Slide 15 text

Τι μπορούμε να χρησιμοποιήσουμε;

Slide 16

Slide 16 text

Οφέλη .ΝΕΤ • Αυτόματη διαχείριση πόρων • Απλοποίηση προγραμματισμού • Multiplatform προσέγγιση • Ασφαλές σύστημα τύπων δεδομένων • Ιδανικό μοντέλο ασφάλειας • Κοινό περιβάλλον ανάπτυξης επιτρέποντας πολυγλωσσικό debugging • Δομές για επαναχρησιμοποίηση κώδικα

Slide 17

Slide 17 text

Demo 2. Γνωριμία με το Visual Studio

Slide 18

Slide 18 text

3. C#

Slide 19

Slide 19 text

C# 101 • Τα πάντα είναι objects και κληρονομούν το System.Object • Διάκριση ανάμεσα σε τύπους τιμής και αναφοράς • Value Types: primitives, enums, structs • Reference Types: interfaces, classes, arrays

Slide 20

Slide 20 text

Value vs Reference Types struct Point { private int x, y; // private fields public Point (int x, int y) // constructor { this.x = x; this.y = y; } public int X // property { get {return x;} set {x = value;} } public int Y { get {return y;} set {y = value;} } }

Slide 21

Slide 21 text

Παράδειγμα • Point p1 = new Point(); Form f1 = new Form(); • Form f1; f1 = new Form(); • Point p2 = p1; Form f2 = f1;

Slide 22

Slide 22 text

Παράδειγμα • Point myPoint = new Point (0, 0); Form myForm = new Form(); • Test (myPoint, myForm); • void Test (Point p, Form f) { p.X = 100; // Καμία επίδραση στο myPoint f.Text = "Hello, World!"; f = null; // Καμία επίδραση στο myForm }

Slide 23

Slide 23 text

Παράδειγμα • Point myPoint = new Point (0, 0); Form myForm = new Form(); • Test (ref myPoint, ref myForm); • void Test (ref Point p, ref Form f) { p.X = 100; f.Text = “Hello, World!”; f = null; }

Slide 24

Slide 24 text

Δηλώσεις • Όπως και η C – if () { ... } else { ... }; – switch() { case : ...; }; – while () { ... }; – for (;;) { ... }; – do { ... } while (); • Όχι σαν την C – lock(){ ... }; – checked {...}; unchecked { ...};

Slide 25

Slide 25 text

Πίνακες (Arrays) • Zero based, type bound • Βασίζονται στην κλάση του .NET, System.Array • Δηλώνονται με τύπο και μορφή, αλλά χωρίς όρια – int[] SingleDim; – int[,] TwoDim; – int [][] Jagged; • Δημιουργία – SingleDim = new int[20]; – TwoDim = new int[,]{{1,2,3},{4,5,6}}; – Jagged = new int[1][]; – Jagged[0] = new int[]{1,2,3};

Slide 26

Slide 26 text

Κλάσεις • Υλοποίηση κώδικα και δεδομένων • Μπορεί μία κλάση να υλοποιεί interfaces • Μπορεί να κληρονομεί από μία βασική κλάση (base class) • Περιέχουν – Πεδία (fields) – Ιδιότητες (properties – get/set) – Μέθοδοι (Methods) – Events, indexers, delegates,…

Slide 27

Slide 27 text

Πρόσβαση • Ομοιότητες με C++ – Public – Protected – Private • Επεκτάσεις – Sealed – Internal – Protected internal

Slide 28

Slide 28 text

Ιδιότητες • Ευκολία υλοποίησης μεθόδων • Χρήση properties για – Υλοποίηση read-only μελών (παραλείποντας το set) – Επικύρωση κατά την ανάθεση – Παράγωγες ή σύνθετες τιμές – Έκθεση τιμών σε interfaces string Name { get { return name; } set { name = value; } }

Slide 29

Slide 29 text

Iterators • Εισήχθησαν στην C# 2.0 • Είναι μία μέθοδος, get accessor που επιτρέπει την χρήση foreach στην κλάση ή το struct χωρίς να χρειάζεται να υλοποιηθεί το interface IEnumerable • Είναι ένα κομμάτι κώδικα που επιτρέπει ταξινομημένη σειρά τιμών ίδιου τύπου • Χρησιμοποιεί το yield return

Slide 30

Slide 30 text

Παράδειγμα public class SampleCollection { public int[] items; public SampleCollection() { items = new int[5] { 5, 4, 7, 9, 3 }; } public System.Collections.IEnumerable BuildCollection() { for (int i = 0; i < items.Length; i++) { yield return items[i]; } } } class MainClass { static void Main() { SampleCollection col = new SampleCollection(); // Display the collection items: System.Console.WriteLine("Values in the collection are:"); foreach (int i in col.BuildCollection()) { System.Console.Write(i + " "); } } }

Slide 31

Slide 31 text

Delegates • Κάτι σαν τους δείκτες σε συναρτήσεις (C/C++) • Ισχυροί τύποι (αντίο στο type-casting και στα σφάλματα) • Η δήλωση δημιουργεί μία typed method signature delegate void Clicked(Element e, Point p); • Ο πραγματικός αντιπρόσωπος είναι ένα στιγμιότυπο αυτού του τύπου και μπορεί να γίνει με αρχικοποίηση είτε με Named Method είτε με Anonymous • Το όρισμα περνιέται στον constructor του αντιπροσώπου

Slide 32

Slide 32 text

Named methods • delegate void Del(int x); • void DoWork(int k) { /* ... */ } • Del d = obj.DoWork;

Slide 33

Slide 33 text

Anonymous Methods • delegate void Del(int x); • Del d = delegate(int k) { /* ... */ };

Slide 34

Slide 34 text

C# 3.0 • Μεγαλύτερη καινοτομία: επερωτήσεις στα δεδομένα var query = from p in employees where p.Salary > 33000m orderby p.Name, p.StartDate descending group p by p.Department;

Slide 35

Slide 35 text

Anonymous types • Σαν ένας κανονικός τύπος που ζει στο CLR var v = new { Amount = 108, Message = "Hello" }; var productQuery = from prod in products select new { prod.Color, prod.Price }; foreach (var v in productQuery) { Console.WriteLine("Color={0}, Price={1}", v.Color, v.Price); }

Slide 36

Slide 36 text

Extension methods • Επιτρέπεται να προστεθούν μέθοδοι σε υπάρχοντες τύπους χωρίς να δημιουργούμε έναν νέο derived τύπο • Καλούνται πολύ εύκολα (just static methods underneath) • Method chaining

Slide 37

Slide 37 text

Παράδειγμα • string x = "some string value"; string y = Utility.Reverse(x); • string x = "some string value"; string y = x.Reverse(); public static class Utility { public static string Reverse(this string input) { char[] chars = input.ToCharArray(); Array.Reverse(chars); return new String(chars); } }

Slide 38

Slide 38 text

Lambda (λ) expressions • Το καλύτερο feature της C# 3.0 • Σαν anonymous method αλλά μικρότερο • Χρησιμοποιεί τον lambda operator => που διαβάζεται goes to δηλαδή «συνεπάγεται» • Αριστερά έχουμε παραμέτρους εισόδου και δεξιά την έκφραση ή το κομμάτι κώδικα. • Shorthands – Parameter type inference – Brace removal (single expression/statement) – Bracket removal (single parameter) • Expression Trees

Slide 39

Slide 39 text

Παράδειγμα int[] source = new[] { 3, 8, 4, 6, 1, 7, 9, 2, 4, 8 }; foreach (int i in source.Where(x => x > 5)) Console.WriteLine(i);

Slide 40

Slide 40 text

Παράδειγμα // Δήλωση delegate public delegate int ChangeInt(int x); // Μία μέθοδος στην οποία μπορεί να δείξει η από πάνω μεταβλητή static public int DoubleIt(int x) { return x * 2; } // Δημιουργία στιγμιοτύπου ChangeInt myDelegate = new ChangeInt(DelegateSample.DoubleIt); Console.WriteLine("{0}", myDelegate(5));

Slide 41

Slide 41 text

Παράδειγμα ChangeInt myDelegate = new ChangeInt( delegate(int x) { return x * 2; } ); Console.WriteLine("{0}", myDelegate(5));

Slide 42

Slide 42 text

Παράδειγμα ChangeInt myDelegate = x => x * 2; Console.WriteLine("{0}", myDelegate(5));

Slide 43

Slide 43 text

LINQ Χαρακτηριστικά • Δυνατότητα επερωτήσεων μέσα στη γλώσσα • Περιέχει Standard Query Operations – Select – Where – Join – Take/Skip – Group By • Providers Erik Meijer

Slide 44

Slide 44 text

Λίγο ακόμα με compiler internals για Linq • Μετάφραση σε κανονική C# • Νωρίς νωρίς στη μεταγλώττιση

Slide 45

Slide 45 text

Επεκταμένη μορφή 1 • Query expression σε κανονική C#: var query = employees .Where(p => p.Salary > 33000m) .OrderBy(p => p.Name) .ThenByDescending(p => p.StartDate) .GroupBy(p => p.Department);

Slide 46

Slide 46 text

Επεκταμένη μορφή 2 • Αφαίρεση της έμμεσης απόδοσης τύπου IEnumerable query = employees .Where(p => p.Salary > 33000m) .OrderBy(p => p.Name) .ThenByDescending(p => p.StartDate) .GroupBy(p => p.Department);

Slide 47

Slide 47 text

Επεκταμένη μορφή 3 • Αφαίρεση Extension Methods IEnumerable query = Enumerable.GroupBy( Enumerable.ThenByDescending( Enumerable.OrderBy( Enumerable.Where(employees, p => p.Salary > 33000m), p => p.Name), p => p.StartDate), p => p.Department);

Slide 48

Slide 48 text

Επεκταμένη μορφή 4 • Αφαίρεση lambdas IEnumerable query = Enumerable.GroupBy( Enumerable.ThenByDescending( Enumerable.OrderBy( Enumerable.Where(employees, new Func (BigSalary), new Func (NameFunc), new Func (StartFunc), new Func (DeptFunc));

Slide 49

Slide 49 text

Επεκταμένη μορφή 5 • Αφαίρεση type inference με generics IEnumerable query = Enumerable.GroupBy( Enumerable.ThenByDescending( Enumerable.OrderBy( Enumerable.Where(employees, new Func (BigSalary), new Func (NameFunc), new Func (StartFunc), new Func (DeptFunc));

Slide 50

Slide 50 text

C# vs Java C# • Closures • Runtime generics • Generics και με primitive types • Delegates • Events • LINQ • Extension methods • First-class properties • Iterators • Operator overloading • Indexers • Anonymous types • Expression trees • Using blocks • Μη ελεγχόμενα exceptions • Decimal τύποι Java • Enumerations • Inner Classes • Checked exceptions • Μικρό unit διανομής • Περισσότερα IDE’s • Τρέχει ώριμα δυναμικές γλώσσες

Slide 51

Slide 51 text

Βιβλία

Slide 52

Slide 52 text

Σύνδεσμοι • http://msdn.microsoft.com • http://www.studentguru.gr • http://www.microsoft.com/express • http://www.windowsclient.net • http://www.asp.net • http://creators.xna.com • http://www.dreamspark.com • http://channel9.msdn.com • http://silverlight.net

Slide 53

Slide 53 text

Εργαλεία • http://www.red-gate.com/products/reflector/ • http://www.linqpad.net/ • http://www.fiddler2.com/fiddler2/ • http://www.httpwatch.com/download/ • http://www.jetbrains.com/ • http://www.ndepend.com • http://www.nunit.org

Slide 54

Slide 54 text

Επικοινωνία • Άγγελος Μπιμπούδης – http://studentguru.gr/b/biboudis/default.aspx – http://www.twitter.com/biboudis – http://www.facebook.com/biboudis

Slide 55

Slide 55 text

Ευχαριστώ • Happy development time!!!