velkommen til softwarekonstruktion

29
1 Nordjyllands Erhvervakademi - 2009 Velkommen til Softwarekonstruktion Aase Bøgh, [email protected] : Systemudvikling Martin Siegumfeldt, [email protected] : Programmering og databaser

Upload: viveka

Post on 03-Feb-2016

30 views

Category:

Documents


2 download

DESCRIPTION

Velkommen til Softwarekonstruktion. Aase Bøgh , [email protected] : Systemudvikling Martin Siegumfeldt, [email protected] : Programmering og databaser. Agenda. Opsamling fra sidste gang Grundlæggende objektorienteret programmering OOP i C# 1 – individuelle objekter - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Velkommen til Softwarekonstruktion

1Nordjyllands Erhvervakademi - 2009

Velkommen til

Softwarekonstruktion

• Aase Bøgh, [email protected]:Systemudvikling

• Martin Siegumfeldt, [email protected]: Programmering og databaser

Page 2: Velkommen til Softwarekonstruktion

2Nordjyllands Erhvervakademi - 2009

Agenda

Opsamling fra sidste gang

Grundlæggende objektorienteret programmering

OOP i C# 1 – individuelle objekter

OOP i C# 2 – relationer mellem objekter

Page 3: Velkommen til Softwarekonstruktion

3Nordjyllands Erhvervakademi - 2009

Opgaver fra sidst: sweep- og søgeskabeloner

• For alle opgaverne skal det overvejes hvilken skabelon, der benyttes, og hvordan operationerne er konkretiseret:

1. Lav en metode, som returnerer antallet af lige tal i et int[ ]. Test den. (Vink: et tal er lige, hvis rest ved division med 2 er 0)

2. Lav en metode, som returnerer antallet af tal i et double[ ], som ligger mellem 10,0 og 20,0. Test den.

3. Lav en metode, som tager en int x som parameter, og returnerer true, hvis x findes i et int [ ]. Ænder metoden, så index på første forekomst af x i arrayet returneres.

4. Lav en metode, som finder første forekomst af et tegn i et char[ ].

5. Lav en metode, som finder antallet af vokaler i et char[ ]. (Vink: lav først en metode, som tager et bogstav som parameter, og returnerer true, hvis bogstavet er en vokal, ellers false.)

Page 4: Velkommen til Softwarekonstruktion

4Nordjyllands Erhvervakademi - 2009

Agenda

Opsamling fra sidste gang

Grundlæggende objektorienteret programmering

OOP i C# 1 – individuelle objekter

OOP i C# 2 – relationer mellem objekter

Page 5: Velkommen til Softwarekonstruktion

5Nordjyllands Erhvervakademi - 2009

C# programstruktur

• Normalt vil et C#-program bestå af en række klasser– disse beskriver objekter i problemområdet, f.eks Kunde,

Konto, Vare mv– Mindst en af disse skal indeholde en ”Main” metode, der er

programmets startpunkt (entry point)• Objekter oprettes (instantieres på baggrund af klasser)

– Vilkårligt antal objekter kan oprettes fra samme klasse• En klasse definerer objekternes

– Tilstand gennem variable (variable)– Adfærd gennem metoder (og properties (”egenskaber”))

• Objekter interagerer gennem referencer og ved at kalde hinandens metoder

Page 6: Velkommen til Softwarekonstruktion

6Nordjyllands Erhvervakademi - 2009

C#- objekter og klasser

• Klassen er definitionen af typen– Indeholder metoder, instansvariable, constructors og properties

• Objektet er den faktiske forekomst• Alle klasser arver fra ”System.Object”, dvs. har nogle fælles

egenskaber, som gælder for alle objekter:– Indeholder bl.a. ToString() og Equals()

• Objekter oprettes med keyword: ”new”

Page 7: Velkommen til Softwarekonstruktion

7Nordjyllands Erhvervakademi - 2009

Agenda

Opsamling fra sidste gang

Grundlæggende objektorienteret programmering

OOP i C# 1 – individuelle objekter

OOP i C# 2 – relationer mellem objekter

Page 8: Velkommen til Softwarekonstruktion

8Nordjyllands Erhvervakademi - 2009

Eksempel på en klasse

class Student //definition af en klasse

{

private string navn; //instansvariable

private string adresse;

private int alder;

public Student(string navn, string adr, int alder) //constructor

{

this.navn = navn;

this.adresse = adr;

this.alder = alder;

}

public override String ToString() //medlemsfunktion

{

return navn + " " + adresse + " " + alder;

}

}

Student

navn : Stringadrresse : Stringalder : Integer

ToString()

Page 9: Velkommen til Softwarekonstruktion

9Nordjyllands Erhvervakademi - 2009

Eksempel på brug af klasse/objekt i C#

class MainClass //klasse indeholdende Main

{

static void Main(string[] args)

{

Student s = new Student("Carl", "Bygaden", 34); //oprettelse af objekt

Console.WriteLine(s.ToString()); //kald til objektets metode

}

}

Page 10: Velkommen til Softwarekonstruktion

10Nordjyllands Erhvervakademi - 2009

Class anatomi

• Attributter er definition af variable som er knyttet til klassen – <modifiers> <datatype> <navn>

• Metoder er en række statements, der udføres (typisk på attributterne) ved en kommando, ved kald af metoden

<modifiers> <returtype> <navn>(<parameterliste>){

//kode…..

}

Page 11: Velkommen til Softwarekonstruktion

11Nordjyllands Erhvervakademi - 2009

Constructors

• Constructors opgave er at initialisere objektet, dvs. tildele instansvariablene en startværdi

• Har samme navn som klassen og ingen returtype

• Kaldes under objektoprettelse:

– Student s = new Student("Carl”,”Bygaden”, 34);

• s er en reference til et objekt af typen Student

• new skaffer (allokerer) lager til objektet, og kalder klassen Students constructor med de værdier (parametre), som objektets attributter skal initialiseres med.

Page 12: Velkommen til Softwarekonstruktion

12Nordjyllands Erhvervakademi - 2009

Objekt initialisering

Objektreferencer er basalt set variable:

Student s = new Student("Carl","Bygaden",34);

Venstre siden er erklæring af en variabel af typen ”Student” - bemærk ligheden til erklæring af simple variable: ”int x;”

Højre siden er en værdi-tildeling:

s = new Student("Carl","Bygaden",34);

Page 13: Velkommen til Softwarekonstruktion

13Nordjyllands Erhvervakademi - 2009

Objekt manipulation

• Metoder kaldes ved ”dot (”.”)”-notation (dereference):– s.ToString()

• Objekters tilstand: refererer til attributternes værdi

• Objekters adfærd: refererer til objektets metoder

• Ændring og aflæsning af objekters tilstand bør forgå ved metodekald eller i C# ved brug af properties (se næste slide)

Page 14: Velkommen til Softwarekonstruktion

14Nordjyllands Erhvervakademi - 2009

Properties

• Særlig syntaks for set- og get-metoder, så det ligner tildeling til variable, men det er metodekald!

• Konventionen er at en property hedder det samme som attributten, men med stort begyndelsesbogstav

• Properties kontrollerer adgangen til attributten, fx read-only

…i class Student:

private string navn;private int alder;

public string Navn{ get{ return navn;} set{ navn= value;}}

public int Alder{ //read-only get{ return alder;}}

Page 15: Velkommen til Softwarekonstruktion

15Nordjyllands Erhvervakademi - 2009

Indkapsling

• Man må ikke kunne ændre/aflæse objektets tilstand (attributter) direkte, men kun vha. metoder

• Ideen i dette princip er

– at man kun skal kunne ændre i et objekts tilstand ved at overholde nogle regler, som er defineret i metoderne

• Til hjælp til at overholde sådanne principper bruge visibility modifiers (public/private)

Page 16: Velkommen til Softwarekonstruktion

16Nordjyllands Erhvervakademi - 2009

Øvelse:

• Implementer klassen Fag• Constructor kunne være

– Fag(string betegn, int kar)• Et fag er bestået, hvis karakteren er mindst 6 (vi bruger stadig

den gamle skala)

• Tips– Start med en tom klasse – kompiler– Tilføj constructor – kompiler og test– Tilføj attributter – kompiler– Tilføj properties – kompiler og test– Tilføj metoder – kompiler og test

Fag

betegnelse : Stringkarakter : Integer

Bestået()ToString()

Page 17: Velkommen til Softwarekonstruktion

17Nordjyllands Erhvervakademi - 2009

Eksempler med referencetyper

• Oprettelse, assignment og sammenligning:

Customer c1, c2, c3;

c1 = new Customer("Flemming Sander", 36259);c2 = new Customer(”Bjarne Riis", 55298);c3 = null; // c3 refererer ingenting

c3 = c1; // c3 refererer samme objekt som c1

if (c1 == null) ... // refererer c1 et objekt? if (c1 == c2) ... // sammenligner referencer if (c1.Equals(c2)) ... // sammenligner objekter

Page 18: Velkommen til Softwarekonstruktion

18Nordjyllands Erhvervakademi - 2009

Hvornår er objekter ens?

• Klasser bør override Equals-metoden

public class Customer{ private int id; . .

public override bool Equals(object obj) { Customer other; if ((obj == null) || (!(obj is Customer))) return false; // helt sikkert ikke ens

other = (Customer) obj; // typecast for adgang return this.id == other.id; // ens hvis ens id... }

Page 19: Velkommen til Softwarekonstruktion

19Nordjyllands Erhvervakademi - 2009

Metode kald

class MainClass{ //klasse indeholdende Main

static void Main(string[] args)

{

Student s = new Student("Carl", "Bygaden", 34); //oprettelse af objekt

Console.WriteLine(s.ToString()); //kald til objektets metode

s.Adresse = "Nygade";

s.FyldAar();

Console.WriteLine(s.Adresse + " " + s.Alder);

}

}

Page 20: Velkommen til Softwarekonstruktion

20Nordjyllands Erhvervakademi - 2009

Agenda

Opsamling fra sidste gang

Grundlæggende objektorienteret programmering

OOP i C# 1 – individuelle objekter

OOP i C# 2 – relationer mellem objekter

Page 21: Velkommen til Softwarekonstruktion

21Nordjyllands Erhvervakademi - 2009

Tilbage til studerende og fag

Vi vil lave en forbindelse mellem Student og Fag:

• Den kan realiseres ved at definere en attribut i Student af typen fag

• Denne attribut skal have defineret properties

Fag

betegnelse : Stringkarakter : Integer

Bestået()ToString()

Student

navn : Stringadrresse : Stringalder : Integer

ToString()

Page 22: Velkommen til Softwarekonstruktion

22Nordjyllands Erhvervakademi - 2009

class Student{

//…

private int alder;

private Fag følger;

public int Alder{//read-only

get{ return alder;}

}

public Fag Følger{

get{ return følger;}

set{ følger= value;}

}

}

Referencen defineres

Property’en Følger bruges til at tildele værdier og aflæse

referencen

Page 23: Velkommen til Softwarekonstruktion

23Nordjyllands Erhvervakademi - 2009

static void Main(string[] args){

Student s = new Student("Carl","Bygaden",34); Console.WriteLine(s.ToString()); //kald til objektets metode

s.Adresse= "Nygade";

s.FyldAar();

Console.WriteLine(s.Adresse+" "+s.Alder);

Fag f= new Fag("Softwarekonstruktion",-1);

s.Følger= f;

Console.WriteLine(s.ToString()+" "+s.Følger.ToString());

s.Følger.Karakter= 11;

Console.WriteLine(s.ToString()+" "+s.Følger.ToString());

}

Kalder ToString på Fag

Består eksamen

Page 24: Velkommen til Softwarekonstruktion

24Nordjyllands Erhvervakademi - 2009

Tilbage til studerende og fag

Vi vil lave en forbindelse mellem Student og Fag, men en studerende skal kunne have flere fag:

• I stedet for en attribut skal vi have en liste af fag• Vi skal finde metoder til at vedligeholde listen:

– TilføjFag(Fag f)– UdskrivFag()

Fag

betegnelse : Stringkarakter : Integer

Bestået()ToString()

Student

navn : Stringadrresse : Stringalder : Integer

ToString()

Page 25: Velkommen til Softwarekonstruktion

25Nordjyllands Erhvervakademi - 2009

ArrayList: En klasse, som indkapsler et array af objekter, og har nyttige metoder:

ArrayList s= new ArrayList();

s.Clear();

s.Insert(i,e);

s.RemoveAt(i);

s.Add(e);

s.Count;

s[i]

int x= s[i];

s[i]= x;

Page 26: Velkommen til Softwarekonstruktion

26Nordjyllands Erhvervakademi - 2009

Eksempel

using System;using System.Collections;class TestSeqInt{

private static ArrayList sekvens = new ArrayList();

static void Main(){for(int i= 0; i<10; i++)

sekvens.Add(i);

Udskriv(sekvens);sekvens[4]=1111;Console.WriteLine(sekvens[4]);sekvens.Insert(4,44);Udskriv(sekvens);

}public static void Udskriv(ArrayList s){

for(int i= 0; i<s.Count; i++)Console.WriteLine(s[i]);

}}

Page 27: Velkommen til Softwarekonstruktion

27Nordjyllands Erhvervakademi - 2009

ArrayList af fag på Student

class Student{ //definition af en klasse

private ArrayList følger;

public Student(string navn, string adr,int alder){ //constructor //… følger= new ArrayList();}

public void TilføjFag(Fag f){ følger.Add(f);}

public void UdskrivFag(){ foreach(Fag f in følger)

Console.WriteLine(f.ToString());}

}

Page 28: Velkommen til Softwarekonstruktion

28Nordjyllands Erhvervakademi - 2009

Test af Student

static void Main(string[] args){

Student s = new Student("Carl","Bygaden",34); //oprettelse af objekt

Console.WriteLine(s.ToString());

s.Adresse= "Nygade";

s.FyldAar();

Console.WriteLine(s.Adresse+" "+s.Alder);

Fag f= new Fag("Softwarekonstruktion",11);

s.TilføjFag(f);

Fag f2= new Fag("Programmeringsteknologi",-1);

s.TilføjFag(f2);

s.UdskrivFag();

}

Page 29: Velkommen til Softwarekonstruktion

29Nordjyllands Erhvervakademi - 2009

Opgaver

1. Student– Lav en metode på Student, som beregner den studerendes karaktergennemsnit.– Lav en metode, som returnerer sand, hvis den studerende har bestået et givet fag (fagbetegnelse som inputparameter)

2: KundeCD– Lav en klasse Kunde (navn, telefon)– Lav en Main-metode, som tester– Lav en klasse CD (titel, kunstner, pris)– Test den nye klasse– En kunde kan købe en række CD’ere– Lav en ArrayList til CD’ere på Kunde, lav en metode til at tilføje CD’ere og lav en metode til udskrivning af alle CD’ere– Test– Lav en metode på Kunde, som kan finde samlet pris.– Test

Fag

betegnelse : Stringkarakter : Integer

Bestået()ToString()

Student

navn : Stringadrresse : Stringalder : Integer

ToString()

Kunde CD