41
Per Printz Madsen AAU 1 Grundlæggende Datanet C# programmering Per P. Madsen Afd. for Proceskontrol Institut for elektroniske systemer Aalborg Universitet

C# programmering

  • Upload
    maylin

  • View
    155

  • Download
    1

Embed Size (px)

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

Page 1: C# programmering

Per Printz Madsen AAU 1

Grundlæggende Datanet

C# programmering

Per P. Madsen

Afd. for Proceskontrol

Institut for elektroniske systemer

Aalborg Universitet

Page 2: C# programmering

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

Page 3: C# programmering

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?’’

Page 4: C# programmering

Per Printz Madsen AAU 4

Water-fallsmetoden

Page 5: C# programmering

Per Printz Madsen AAU 5

spiral-modellen

Spiral-modellen

Page 6: C# programmering

Per Printz Madsen AAU 6

UML Unified Modeling Language Standartiseret specifikations sporg til:

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

Page 7: C# programmering

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.

Page 8: C# programmering

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.

Page 9: C# programmering

Per Printz Madsen AAU 9

Use Case diagram

Page 10: C# programmering

Per Printz Madsen AAU 10

Aktivitets diagram for sæt parametre

Page 11: C# programmering

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

Page 12: C# programmering

Per Printz Madsen AAU 12

Deployment Diagram

- Hvor skal de enkelte softvære det placeres?

Page 13: C# programmering

Per Printz Madsen AAU 13

Klasse diagram- Strukturen af selve problemet.

Page 14: C# programmering

Per Printz Madsen AAU 14

Design fasen

• Sekvenser. Hvem kalder hvem.

• Objekt tilstande. Adfær af objekterne.

• Algoritme design.

Page 15: C# programmering

Per Printz Madsen AAU 15

Sekvensdiagram

Page 16: C# programmering

Per Printz Madsen AAU 16

Objekt tilstande

Page 17: C# programmering

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

Page 18: C# programmering

Per Printz Madsen AAU 18

Objekt orienteret programmering

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

Så kan programmeringen begynde.

Page 19: C# programmering

Per Printz Madsen AAU 19

C# (CSharp)

Et objektorienteret programmeringssprog.

Første version fra MicroSoft i 2001

Nyeste version er C# 2005

Page 20: C# programmering

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

Page 21: C# programmering

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.");

} }

}

Page 22: C# programmering

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

Page 23: C# programmering

Per Printz Madsen AAU 23

Using System; ......

Namespace ......{ classe komponentnavn1

{Data.metoder.

}classe komponentnavn2{

Data.metoder.

} class startkomponent

{static void Main() { kode;}

}}

Page 24: C# programmering

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

Page 25: C# programmering

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"

Page 26: C# programmering

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;

Page 27: C# programmering

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);

}}

}

Page 28: C# programmering

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

Page 29: C# programmering

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’

Page 30: C# programmering

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&, |, ^, ~

Page 31: C# programmering

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;

}

Page 32: C# programmering

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);}

Page 33: C# programmering

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.

Page 34: C# programmering

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

Page 35: C# programmering

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();

Page 36: C# programmering

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);}

Page 37: C# programmering

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

Page 38: C# programmering

Per Printz Madsen AAU 38

Eksempel: SimpelPlot

Page 39: C# programmering

Per Printz Madsen AAU 39

Klassediagram

Page 40: C# programmering

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

Page 41: C# programmering

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); }