Præsentation er lastning. Vent venligst

Præsentation er lastning. Vent venligst

Velkommen til Softwarekonstruktion

Lignende præsentationer


Præsentationer af emnet: "Velkommen til Softwarekonstruktion"— Præsentationens transcript:

1 Velkommen til Softwarekonstruktion
Aase Bøgh, Systemudvikling Martin Siegumfeldt, Programmering og databaser

2 Agenda Opsamling fra sidste gang Grundlæggende objektorienteret programmering OOP i C# 1 – individuelle objekter OOP i C# 2 – relationer mellem objekter

3 Opgaver fra sidst: sweep- og søgeskabeloner
For alle opgaverne skal det overvejes hvilken skabelon, der benyttes, og hvordan operationerne er konkretiseret: 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) Lav en metode, som returnerer antallet af tal i et double[ ], som ligger mellem 10,0 og 20,0. Test den. 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. Lav en metode, som finder første forekomst af et tegn i et char[ ]. 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.)

4 Agenda Opsamling fra sidste gang Grundlæggende objektorienteret programmering OOP i C# 1 – individuelle objekter OOP i C# 2 – relationer mellem objekter

5 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

6 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”

7 Agenda Opsamling fra sidste gang Grundlæggende objektorienteret programmering OOP i C# 1 – individuelle objekter OOP i C# 2 – relationer mellem objekter

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

9 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 }

10 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….. }

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

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

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

14 Properties …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;} 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

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

16 Ø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

17 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

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

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

20 Agenda Opsamling fra sidste gang Grundlæggende objektorienteret programmering OOP i C# 1 – individuelle objekter OOP i C# 2 – relationer mellem objekter

21 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

22 Property’en Følger bruges til at tildele værdier og aflæse referencen
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

23 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; } Kalder ToString på Fag Består eksamen

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

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

26 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); } public static void Udskriv(ArrayList s){ for(int i= 0; i<s.Count; i++) Console.WriteLine(s[i]);

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

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

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


Download ppt "Velkommen til Softwarekonstruktion"

Lignende præsentationer


Annoncer fra Google