Upload
maylin
View
139
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
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); }