Introduktion Bjørk Boye Busch Otto Knudsen Underviser ved Datamatikeruddannelsen, TietgenSkolen email: bjbu@tietgen.dk web: http://bjbu.net/ Materiale fra Prosa-workshops: http://prosa.bjbu.net/ Otto Knudsen email: nokn@tietgen.dk C#-workshop
Workshop – Plan Emne Lektion C#-workshop Introduktion til .NET, C# og Visual Studio .NET 2005 1 Eksempel (objektorientering, indkapsling, logisk lagdeling) 2 Hands on … 3 Brugergrænseflade og model (fysisk lagdeling) 4 Persistens – Filer, Databasetilgang (ADO.NET) 5 6 ASP.NET 2.0 7 Webtjenester 8 9 C#-workshop
Introduktion Hvem er I? Navn Baggrund – kodeerfaring Forventninger C#-workshop
Overblik … .NET Visual Studio .NET C#.NET Applikations- typer C#-workshop
Fordele ved .NET Understøtter flere sprog: C#, C++, VB, J# (svarende til Java 1.2), … Samme tilgang, samme værktøjer — gældende for ethvert sprog Understøtter flere forskellige applikationstyper: Konsol, Windows GUI, web-baseret GUI, web-tjenester, pda, … Professionelle værktøjer og teknologier til rimelige penge: Visual Studio .NET er et brugbart og lettilgængeligt værktøj Fås gennem MSDNAA — MSDN Academic Alliance http://www.msdnaa.net Giver mulighed for lovligt at distribuere software til læreanstalter og studerende Visual Studio, Windows, SQL Server, Visio, SharePoint, … C#-workshop
Ressourcer Nyttige .NET sider: Microsoft Developer Network: http://msdn.microsoft.com/ MSDN Academic Alliance repository: http://msdnaacr.net/ Gode sider mht. .NET kode, diskussioner, osv: http://www.devsource.com/ http://www.gotdotnet.com/ http://www.asp.net/ C#-workshop
Udvikling fra kommandolinje Anvend Microsoft .NET Framework SDK Samme idé som Java og JDK SDK = Software Development Kit (100 MB download) Gratis, komplette kommandolinje-værktøjer og dokumentation http://msdn.microsoft.com/net Installeres som standalone produkt Installeres automatisk sammen med Visual Studio Bemærk: .NET-udvikling kræver en “moderne” version af Windows, dvs. Windows NT, 2000, 2003, XP eller Vista C#-workshop
Eksempel Beregn BMI (Body Mass Index) C#-workshop // BMI.cs public class BMI { public static void Main() { System.Console.WriteLine("** BMI **\n"); System.Console.Write("Indtast din vægt i kg: "); int v = int.Parse(System.Console.ReadLine()); System.Console.Write("Indtast din højde i cm: "); int h = int.Parse(System.Console.ReadLine()); double bmi = v / ((h / 100d) * (h / 100d)); System.Console.WriteLine("\nDit BMI er {0:f2}", bmi); System.Console.ReadLine(); } C#-workshop
Namespaces Alt i .NET indlejres i klasser Klasser samles i namespaces for at organisere koden Et namespace er en navngiven samling af typer System namespace er det grundlæggende .NET namespace Eksempel: System.Console.WriteLine("..."); Console klasse System namespace i FxCL WriteLine metode C#-workshop
FxCL .NET Framework Class Library indeholder tusindvis af klasser Ligesom Java’s JCL Organiseret vha. namespaces: System System.Data System.Windows.Forms osv. C#-workshop
Kompilering og afvikling Brug C#-kompileren til at kompilere vha. Framework SDK Åbn Visual Studio .NET konsol-vinduet csc er kommandolinje C#-kompileren Benyt /t:exe for at kompilere en konsolbaseret EXE-fil Benyt /out: for at specificere navnet på EXE-fil c:\> csc /t:exe /out:BMI.exe bmi.cs Microsoft (R) Visual C# .NET Compiler version 8.00.50727.42 for Microsoft (R) .NET Framework version 2.0.50727 Copyright (C) Microsoft Corporation 2001. All rights reserved. c:\> BMI.exe ** BMI ** Indtast din vægt i kg: 75 Indtast din højde i cm: 174 Dit BMI er 24.77 C#-workshop
Hurtig introduktion til C# C# er i bund og grund Java … … og C++ C#-workshop
C# - En stærk kombination … Pointere (unsafe coding) Operator overloading Preprocessor direktiver struct, enums, generics m.m. Java Klassestruktur Single inheritance Interfaces Garbage Collection Code Safety Typestærkt Ingen globale typer og variable Ekstra bonusser Properties Indexers Attributter Delegates Events C#-workshop
Eksempel - Personklasse public class Person { // Felter private string navn; private int vægt = 0; private int højde = 0; // Konstruktør public Person(string navn) { this.navn = navn; } // Egenskaber public string Navn { get { return this.navn; } } public int Vægt { get { return this.vægt; } set { this.vægt = value; } } public int Højde { get { return this.højde; } set { this.højde = value; } C#-workshop
Eksempel - Beregningsklasse public class BMIKlasse { public static double BeregnBMI(int vægt, int højde) { double højdeIMeter = højde / 100d; double bmi = vægt / (højdeIMeter * højdeIMeter); return bmi; } C#-workshop
Eksempel – Main-programmet public class BMIApp { public static void Main(string[] args) { System.Console.WriteLine("Indtast navn, vægt og højde:"); string navn = System.Console.ReadLine(); int vægt = int.Parse(System.Console.ReadLine()); int højde = int.Parse(System.Console.ReadLine()); double bmi = BMIKlasse.BeregnBMI(vægt, højde); System.Console.WriteLine("\n{0}'s BMI er {1:f2}", navn, bmi); System.Console.ReadLine(); } C#-workshop
Komilering af afvikling Endnu engang anvendes C# kommadolinje-kopileren: c:\> csc /t:exe /out:BMIApp.exe bmiapp.cs person.cs bmiklasse.cs Microsoft (R) Visual C# .NET Compiler version 8.00.50727.42 for Microsoft (R) .NET Framework version 2.0.50727 Copyright (C) Microsoft Corporation 2001. All rights reserved. c:\> BMIApp.exe Indtast navn, vægt og højde: Otto 74 175 Otto’s BMI er 24.77 C#-workshop
Kodeafviklingsmodellen Hvordan virker .NET? C#-workshop
komponent-baseret design Påvirkninger .NET er et produkt af mange påvirkninger … OOP JVM GUI .NET Web komponent-baseret design N-lags design C#-workshop
.NET Framework Class Library (FxCL) Common Language Runtime (CLR) Arkitektur Multi-language, Virtual Machine Driven … C# C++ VB J# … Din applikation .NET Framework Class Library (FxCL) Common Language Runtime (CLR) Operativsystem Hardware C#-workshop
Kodeafviklingsmodellen .EXE er IKKE et "standalone" program (ligesom Java) Når en .EXE afvikles, hentes CLR, som igen henter FxCL CLR er en Virtual Machine, som JIT-kompilerer koden én metode ad gangen C#-workshop
Arkitektur C#-workshop
Java’s Execution Model C#-workshop
.NET vs. Java .NET har fokus på sprog-uafhængighed … Java har fokus på platforms-uafhængighed … .NET Java C# VB J# … Java kode (.java) IL kode (.exe, .dll) Byte Code (.class) .NET CLR JVM/JRE Windows OS Win- dows Linux Unix Mac … C#-workshop
.NET vs. Java .NET har fokus på sprog-uafhængighed … Java har fokus på platforms-uafhængighed … .NET Java C# VB J# … Java kode (.java) IL kode (.exe, .dll) Byte Code (.class) .NET CLR JVM JVM JVM JVM Windows OS Win- dows Linux Unix Mac … C#-workshop
.NET vs. Java .NET har fokus på sprog-uafhængighed … Java har fokus på platforms-uafhængighed … .NET Java C# VB J# … Java kode (.java) IL kode (.exe, .dll) Byte Code (.class) .NET CLR JVM/JRE JVM JVM JVM JVM Windows OS Win- dows Linux Unix Mac … C#-workshop
MSIL-kode MSIL-koden kan ”knækkes” … http://www.aisto.com/roeder/dotnet/ C#-workshop
Kodeafviklingsmodellen CLR Traditionelt Windows program VC++ Windows program .NET Windows program .NET FxCL MFC WIN 32 API Windows operativsystem C#-workshop
Kodeafviklingsmodellen .EXE OS Proces CLR JIT Kompiler andre FxCL komponenter Basis FxCL obj kode Underliggende OS og HW C#-workshop
Hvor er .NET installeret? CLR er en normal Windows DLL FxCL er placeret i GAC’en GAC = Global Assembly Cache se mappen "C:\Windows\Assembly" Bemærkninger: Nogle assemblies er blevet præ-JIT-kompileret ("native image") Assemblies indeholder digitale signaturer GAC is versions-specifik— hver komponent kan optræde i flere versioner Anvender .NET en CLASSPATH ligesom Java? NEJ! .NET søger først i GAC’en, dernæst i den samme mappe som .EXE’en Søgninger kan skræddersys vha. .config-filen C#-workshop
Konsekvenser CLR & FxCL er nødvendige for at afvikle .NET applikationer Kan findes på Redistributable .NET Framework (20MB download) Kan afvikles på Windows 98 og nyere versioner C#-workshop
Konsekvenser .NET applikationer er versions-specifikke: Applikationen er afhængig af den .NET-version, som den kompileres op imod Applikationen vil IKKE kunne afvikles, medmindre den specifikke version af .NET er installeret … Kompileret med SDK 1.0 / VS .NET 2002? => .NET v1.0 skal være installeret Kompileret med SDK 1.1 / VS .NET 2003? =>.NET v1.1 skal være installeret Kompileret med SDK 2.0 / VS .NET 2005? =>.NET v2.0 skal være installeret C#-workshop
Konsekvenser Ligesom Java, så er .NET’s kodeafviklingsmodel en trade-off: "Managed execution" (mere sikkerhed, beskyttelse af hukommelse, osv.) portabilitet langsommere afviklingshastighed (10%?) C#-workshop
.NET er portabelt? Meget af .NET er ECMA-standardiseret Nu også tilgængeligt på flere platforme: Forskellige versioner af Windows (inkl. CE and Mobile versioner) Linux/OS X: Mono projektet understøttet af Novell (veludbygget) http://www.mono-project.com/ Unix: dotGNU (ikke særligt udbygget) http://www.dotgnu.org/ FreeBSD/OS X: Rotor/SSCLI Microsoft's shared-source release af .NET til forskningsformål http://msdn.microsoft.com/net/sscli C#-workshop
Pause … Herefter kodeeksempler … C#-workshop