C# programmering

Preview:

DESCRIPTION

Grundlæggende Datanet. C# programmering. Per P. Madsen Afd. for Proceskontrol Institut for elektroniske systemer Aalborg Universitet. C# programmering 1. Del 1: Objekt-orienteret programmering og C# Intro. til OOP. Intro. til UML C# programstruktur. Typer, kontrolstrukturer. - PowerPoint PPT Presentation

Citation preview

Per Printz Madsen AAU 1

Grundlæggende Datanet

C# programmering

Per P. Madsen

Afd. for Proceskontrol

Institut for elektroniske systemer

Aalborg Universitet

Per Printz Madsen AAU 2

C# programmering 1.

Del 1: Objekt-orienteret programmering og C#

•Intro. til OOP.•Intro. til UML•C# programstruktur.•Typer, kontrolstrukturer.•Data og metoder.•.NET library

Per Printz Madsen AAU 3

Software udviklingsmetoder.

Overordnet metode:

1. Fastlæg kravene til systemet: ’’Kravspesifikation’’

2. Analyser omverdnen til systemet. ’’Usecase’’

3. Beskriv strukturen af systemet. ’’Klassediagram’’

4. Design systemet. Diverse beskrivelses former.

5. Programmer. Løbende test af enkelt dele.

6. Accept test. ’’Opfylder systemet kravspesifikationen?’’

Per Printz Madsen AAU 4

Water-fallsmetoden

Per Printz Madsen AAU 5

spiral-modellen

Spiral-modellen

Per Printz Madsen AAU 6

UML Unified Modeling Language Standartiseret specifikations sporg til:

• understøttelse af objektorienteret software udvikling. • beskrivelse af objektorienteret softwære.

Per Printz Madsen AAU 7

UML Unified Modeling Language

• Functional Model– Viser funktionaliteten af systemet fra brugerens synspunkt. – Beskrivelsesform: Use Case Diagrammer.

• Object Model– Viser strukturen og understrukturer af systemet ved hjælp af

klasser, attributter, operationer og associationer. – Beskrivelsesform Class Diagramsmer.

• Dynamic Model– Viser den interne adfær af systemet. – Beskrivelsesform Sequence Diagrammer, Activity Diagrammer

og State Machine Diagrammer.

Per Printz Madsen AAU 8

Analyse fasen

1. Kik på brugen af systemet.Anvendelsesområdet.

2. Kik på den fysiske struktur.Hardwaren der anvendes.

3. Kik på problemets struktur.Problem området.

Per Printz Madsen AAU 9

Use Case diagram

Per Printz Madsen AAU 10

Aktivitets diagram for sæt parametre

Per Printz Madsen AAU 11

Design layout

• Øjet kikker først øverst til højre.• Ved dialog husk Cancel/Annuller neders til venstre.• Ved brug af farver ha’ en veldefineret betydning.• Samme effekt af samme handling.

Default.txt

Indlæs fil dialog

Vælg fil

AnnullerIndlæs

Hjælp

Per Printz Madsen AAU 12

Deployment Diagram

- Hvor skal de enkelte softvære det placeres?

Per Printz Madsen AAU 13

Klasse diagram- Strukturen af selve problemet.

Per Printz Madsen AAU 14

Design fasen

• Sekvenser. Hvem kalder hvem.

• Objekt tilstande. Adfær af objekterne.

• Algoritme design.

Per Printz Madsen AAU 15

Sekvensdiagram

Per Printz Madsen AAU 16

Objekt tilstande

Per Printz Madsen AAU 17

Algoritmer

• Pseudo kode

• Aktivitetsdiagremmer.

Fx for RegAlgo run.1. Hent ny måleværdi og ny reference.

2. Beregn fejlen: E

3. Beregn outputtet: O = P*E + I*EI + D*(E-oldE)

4. Sæt status: EI= EI+E og oldE= E

Per Printz Madsen AAU 18

Objekt orienteret programmering

Nu er både den statiske og dynamiske struktur på plads

Så kan programmeringen begynde.

Per Printz Madsen AAU 19

C# (CSharp)

Et objektorienteret programmeringssprog.

Første version fra MicroSoft i 2001

Nyeste version er C# 2005

Per Printz Madsen AAU 20

.NET arkitekturen

filnavn.vb filnavn.cs filnavn.cpp

Forskellige compilere

Fx: csc

Assemblies.dll eller .exe (CIL)

Maskin kodeJIT compiler

Per Printz Madsen AAU 21

C# introduktion.

using System; Namespace MyFirst{

class eks1{

public static void Main(){

Console.WriteLine("Hej!"); Console.Write("Skriv dit navn her: "); string navn = Console.ReadLine(); Console.WriteLine("Hej igen - " + navn + ". Jeg er en meget arbejdsom medhjælp.");

} }

}

Per Printz Madsen AAU 22

C# program struktur.De eksisterende systemer der bruges.

Navnet på dette system

Komponet1(class)Data og kode

Komponet2(class)Data og kode

Komponet3(class)Data og kode

Komponet4(class)Data og kode

Per Printz Madsen AAU 23

Using System; ......

Namespace ......{ classe komponentnavn1

{Data.metoder.

}classe komponentnavn2{

Data.metoder.

} class startkomponent

{static void Main() { kode;}

}}

Per Printz Madsen AAU 24

C#- overordnet

• Alle programalgoritmer og data skal pakkes ind.

– typisk i en klasse, dvs. ingen globale funktioner eller data.

• Et eksekverbart program indeholder en metode Main()

– applikationens startpunkt.

• C# er case-sensitive.

• C# har operator- og metodeoverloading.

• Ingen multibel arv.

• Alle klasser arver fra object

• Garbage-collection

Per Printz Madsen AAU 25

Primitive datatypertype Antel

byteOmråde Special format for literals

bool 1 true false

char 2 'A' '\x0041' '\u0041'

sbyte 1 -128 .. 127

byte 1 0 .. 255

short 2 -32768 .. 32767

ushort 2 0 .. 65535

int 4 -2147483648 .. 2147483647

uint 4 0 .. 4294967295 U suffix

long 8 0 .. 2^64-1 L or l suffix

ulong 8 -2^62 .. 2^63-1 U/u and L/l suffix

float 4 +-1.4E-45 .. +-3.4E38 F or f suffix

double 8 +-5.0E-324 .. +-1.7E308

decimal 16 +-1E28 .. +-7.9E28 M or m suffix

string "hello", @"C:\dir\f.txt"

Per Printz Madsen AAU 26

Tilskrivningerint x = 0;float[] ya= new float[10];double[] za= {1,2,3,4,5,6,7};int[,,] x3a= new int[3,4,5];String tal = "3,4E-4";Boolean flag1 = true;uint stort_tal = 23456789;

ya[0]= (float)za[6];x3a[1,2,3]= (int)stort_tal;ya[1]= (float)System.Convert.ToDouble(tal);tal = "dette er en floatværdi: " + tal;za[3] = Math.PI * Math.Cos(ya[1]) - 3;

Per Printz Madsen AAU 27

using System; Namespace MyFirst{

class eks1{

private static float a;private static int funk1(float ap){

int a;a = (int)ap;return a;

}

private int funk2(float ap){

return 2*(int)ap;}

static void Main(string[] args){

int a = funk1(3.4f); Program p = new Program();a= p.funk2((float)a);

}}

}

Per Printz Madsen AAU 28

Access Modifiers

• Public: Fuld access.• Private: Kun access fra klassen selv.• Protected: Klassen selv og de klasser der arver fra

denne klasse.• Internal: Kun access fre samme assembly (file).

Per Printz Madsen AAU 29

Beregninger

• +, -, * , / og % (modulus)

– De sædvanlige regler gælder: 2 + 3 * 4 = 2 + (3 * 4)= 14

– Math klassen indeholder statiske metoder: Cos, Sin, Tan, Exp, Log osv.

– Divideres 2 heltal (byte,int, long,,) , så fås et heltal ud: 23 / 4 giver 5

– Divideres to tal, hvoraf det ene er et reelt tal, så fungerer alt som normalt

– 23 % 4 giver 3, fordi ’4 går op i 23 5 gange med 3 til rest’

Per Printz Madsen AAU 30

Kontrolstrukturen: if-elseif (x < y){

min = x;max = y;

}else{

min = y;max = x;

}

Relationer

>, <, >=, <=, ==, !=

Type test

is eks: ya is float[]

Logiske

||, &&, !eks: (x<=y) && (y< z)

Bit vis logik&, |, ^, ~

Per Printz Madsen AAU 31

Kontrolstrukturen: switch-caseint x= 4;

switch (x){

case 1:Console.WriteLine("x=1");break;

case 2:case 3:

Console.WriteLine("x= 2 eller 3");break;

default:Console.WriteLine("x er ikke lig 1,2 eller 3");break;

}

Per Printz Madsen AAU 32

Kontrolstrukturer: Loopdouble[] databuf = new double[5];int i;

for (i = 0; i < 5; i++){

databuf[i] = 0.0;}

i=0;while (i<5){

databuf[i] = i = i+1; // i++; i+=1;}

foreach (double x in databuf){ Console.WriteLine(x);}

Per Printz Madsen AAU 33

Input/outputfloat b = 29;Console.WriteLine("a= {0,6:F2}", b);Console.WriteLine("a= {0,-6:X}", b);

b = .678e2F;string str1 = string.Format("a= {0,7:F2}", b);string str2= "Lidt mere tekst: \t";string str3 = @" \dir\src\flie.c";Console.WriteLine(str2 + str1 + str3);

a= 29,00a= 1DLidt mere tekst: a= 67,80 \dir\src\flie.c

Format:D Decinaltal.E Exponent.F Fixed point.P Procent.X Hex.

Per Printz Madsen AAU 34

Skrivning til fil

FileStream stream = new FileStream("udfil.txt", FileMode.Create);StreamWriter filoutput = new StreamWriter(stream);

filoutput.WriteLine("a= {0,5:f2}", 5);

filoutput.Flush();filoutput.Close();

a= 5,00

Filen: udfil.txt

Per Printz Madsen AAU 35

Binær filFileStream bstream= new FileStream("udfil.bin", FileMode.Create);BinaryWriter bfil = new BinaryWriter(bstream);BinaryReader bin = new BinaryReader(bstream);bfil.Write((double)b);bfil.Write((double)b + 1);bfil.Write((double)b + 2);bstream.Seek(0, SeekOrigin.Begin);

Boolean eof = false;while (!eof){ try { Console.WriteLine("in værdi= {0,7:f2}",bin.ReadDouble()); } catch (EndOfStreamException) { eof = true; }}bfil.Close();

Per Printz Madsen AAU 36

try-catch-throw static void ProcessString(string s){

if (s == null){ throw new Exception("ProcessString: - Parameter is null\n");}

}

//-------------------------------------------------------

try{

string s = null;ProcessString(null);

}catch (Exception e){

Console.WriteLine("{0} \n-- Exception caught. --", e);}

Per Printz Madsen AAU 37

Udskrift ved fanget exception

System.Exception: ProcessString: - Parameter is null

at csharpEks.Program.ProcessString(String s) in C:\Documents and Settings\ppm\Dokumenter\Undervisning\Bila\csharpEks\Program.cs:line 62

at csharpEks.Program.Main(String[] args) in C:\Documents and Settings\ppm\Dokumenter\Undervisning\Bila\csharpEks\Program.cs:line 170

-- Exception caught. --

Per Printz Madsen AAU 38

Eksempel: SimpelPlot

Per Printz Madsen AAU 39

Klassediagram

Per Printz Madsen AAU 40

Grafik.Skaf ’’Graphics’’ objektet for det du vil tegne på.

Fx: Graphics g= grafBox.CreateGraphics();Pen pen = new Pen(Color.Black,3);g.DrawLine(pen, 0, 0, 100, 100);

0,0

Per Printz Madsen AAU 41

Grafik.Skal gentegnes når:

Vindue flyttes, foran liggende vindue fjernes, osv.

Løsning: Re-tegn hver gang der komme et Paint-event.

private void plot_but_Click( object sender, EventArgs e){ PlotForm pwin = new PlotForm(); pwin.setfilname(filename); pwin.setData(databuf); pwin.Show();}

private void grafBox_Paint(object sender, PaintEventArgs e){ g = e.Graphics; pen= new Pen(gcolor,1); for (int i = 0; i < symboler.Count; i++) ((gsymbol) symboler[i]).plot(g, pen); }

Recommended