1 / 29

Velkommen til Softwarekonstruktion

Velkommen til Softwarekonstruktion. Aase Bøgh , aabo@noea.dk : Systemudvikling Martin Siegumfeldt, mars@noea.dk : Programmering og databaser. Agenda. Opsamling fra sidste gang Grundlæggende objektorienteret programmering OOP i C# 1 – individuelle objekter

viveka
Download Presentation

Velkommen til Softwarekonstruktion

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Velkommen tilSoftwarekonstruktion • Aase Bøgh, aabo@noea.dk: Systemudvikling • Martin Siegumfeldt, mars@noea.dk: 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 • Attributterer 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. Referencen defineres 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;} } } 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; Console.WriteLine(s.ToString()+" "+s.Følger.ToString()); } 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{ privatestatic ArrayList sekvens = new ArrayList(); staticvoid 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); } publicstaticvoid 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. • Test

More Related