Upload
viveka
View
34
Download
2
Embed Size (px)
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
Citation preview
1Nordjyllands Erhvervakademi - 2009
Velkommen til
Softwarekonstruktion
• Aase Bøgh, [email protected]:Systemudvikling
• Martin Siegumfeldt, [email protected]: Programmering og databaser
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
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.)
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
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
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”
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
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()
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
}
}
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…..
}
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.
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);
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)
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;}}
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)
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()
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
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... }
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);
}
}
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
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()
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
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
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()
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;
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]);
}}
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());}
}
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();
}
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