Programmeringsteknologi: Lektion 1 Præsentation Orientering om: praktiske forhold faget Fundament: C# fra Softwarekonstruktion? FEN 2008-09-03 Nordjyllands Erhvervsakademi
Nordjyllands Erhvervsakademi Præsentation Kursusholdere: Finn E. Nordbjerg – fen@noea.dk Lektor v/Datamatikeruddannelsen, NOEA - Nordjyllands Erhvervsakademi Ekstern lektor ved Aarhus og Aalborg Universiteter Efteruddannelse af IT-folk i erhvervslivet Programmering, Programmeringssprog, Databaser ”Gammel” (meget) AAU’er (mat/dat 1983) Jens Houmann – jh@noe.dk Og jer? mailliste FEN 2008-09-03 Nordjyllands Erhvervsakademi
Nordjyllands Erhvervsakademi Praktisk Planlægning Bøger Software Logins Mail http://public.noea.dk/programmeringsteknologi/ Eksamen FEN 2008-09-03 Nordjyllands Erhvervsakademi
Introduktion til objektorienteret programmering Objekter og klasser - indhold og opbygning FEN 2008-09-03 Nordjyllands Erhvervsakademi
Definition af objekt og klasse En repræsentation af et koncept fra virkeligheden, realiseret vha. data knyttet til dette koncept samt en række funktioner gennem hvilke objektet kan ændre eller aflæse egne data. Klasse En type, som definerer de data og funktioner der er nødvendige for at beskrive en gruppe af objekter som alle repræsenterer samme koncept fra virkeligheden. Klassen ”definerer objekternes udseende” og objekter er fysiske forekomster af klassen Klassen er statisk – eksisterer på compiletime. Objekter er dynamiske – eksisterer på runtime. FEN 2008-09-03 Nordjyllands Erhvervsakademi
Nordjyllands Erhvervsakademi Attributter (data) Attributterne definerer de data vi ønsker at registrere. Attributterne defineres på klassen, og bliver tildelt en konkret værdi i objekterne. Kontos attributter: kontonummer, saldo, bevilget overtræk, rente mm. Ansat navn, afdelingsnummer, løn, titel mm. Et objekts tilstand kan beskrives som attributternes værdi på et givet tidspunkt FEN 2008-09-03 Nordjyllands Erhvervsakademi
Nordjyllands Erhvervsakademi Metoder (funktioner) Objektets funktioner er givet ved de metoder der er tilknyttet objektet. Disse metoder defineres (kodes) i klassen. Det er kald til metoderne der får objektet til at ændre tilstand Konto Haev(), Indsaet(), GetSaldo() osv. Ansat GivLoenforhoejelse(), SetTitel() osv. FEN 2008-09-03 Nordjyllands Erhvervsakademi
Nordjyllands Erhvervsakademi Properties Bruges til at sætte og aflæse værdien af objektets attributter Dækker over såkaldte setter- og gettermetoder En setter-metode ændrer værdien af en attribut En getter-metode aflæser værdien af en attribut FEN 2008-09-03 Nordjyllands Erhvervsakademi
Nordjyllands Erhvervsakademi Constructor Er en bestemt metode, som skal have samme navn som klassen. Dens opgave er at initialisere objektet under oprettelse. Eksempel på oprettelse af objekt Konto k = new Konto(); Konto() er et kald til Konto-klassens constructor Det er new, der opretter plads til objektet i hukommelsen sørger for at variabelnavnet (referencen) refererer til dette stykke hukommelse – new er i virkeligheden en funktion der returnerer en heap-adresse Constructors kan overloades FEN 2008-09-03 Nordjyllands Erhvervsakademi
Nordjyllands Erhvervsakademi Opbygning af klasser Klasser bygges op efter skabelonen: class Klassenavn { dataerklæringer constructors metoder } FEN 2008-09-03 Nordjyllands Erhvervsakademi
Opbygning af metoder En metode bygges op efter skabelonen accessmodifier returtype Metodenavn (parameterliste) { sætninger } public int SumAfToHeltal (int tal1, int tal2) { int sum; sum = tal1 + tal2; return sum; Lokal variabel return Parametre Acessmodifier: public/private FEN 2008-09-03 Nordjyllands Erhvervsakademi
Klassen Konto - attributter og constructor namespace Konto { public class Konto private double saldo; private int kontonummer; private int rente; public Konto(int kontonr, int r) saldo = 0; kontonummer = kontonr; rente = r; } FEN 2008-09-03 Nordjyllands Erhvervsakademi
Nordjyllands Erhvervsakademi Metoder public bool Haev(double belob) public void Indsaet(double belob) public void TilskrivRente() FEN 2008-09-03 Nordjyllands Erhvervsakademi
Nordjyllands Erhvervsakademi Properties public int Rente { get{return rente;} set{if( value>=0) rente = value;} } Lad os prøve at lave Konto i C# vha. Visual Studio. Source er her. FEN 2008-09-03 Nordjyllands Erhvervsakademi
Predefinerede klasser - string string test = ”Hej verden”; En streng kan indekseres, startende fra 0. I eksemplet test er tegnet på plads nummer 0 et ”H”, på plads 1 et ”e”, på plads 4 et ” ”, osv. Der findes en række anvendelige metoder og properties på strenge, fx CompareTo(string str) returnerer hvorvidt strengen kommer før eller efter parameteren mht. alfabetisk rækkefølge ToUpper() returnerer strengen skrevet med store bogstaver Substring(int start, int antal) returnerer delstrengen fra indeks start og antal tegn frem Length returnerer antallet af tegn i strengen FEN 2008-09-03 Nordjyllands Erhvervsakademi
Nordjyllands Erhvervsakademi Indkapsling Et objekt kan opfattes som en ”black box” der tilbyder en række services - fx objekter af typen Konto. Services defineres i service-metoder (erklæret public i klassen) Service-metoderne kan bruge en række hjælpe-metoder (erklæret private i klassen) Klassens attributter er indkapslet (erklæret private) Klassens attributter tilgås gennem metoder/properties Data kan også erklæres public og private, men bør altid være private FEN 2008-09-03 Nordjyllands Erhvervsakademi
Nordjyllands Erhvervsakademi Abstraktion Det er praktisk at kunne anvende et objekt uden at skulle tænke på implementations-detaljer. Det er nemmere at kapere et komplekst edb-system hvis man ikke skal beskæftige sig med implementationsdetaljerne FEN 2008-09-03 Nordjyllands Erhvervsakademi
Nordjyllands Erhvervsakademi Opgaver Lav CPR-opgaven FEN 2008-09-03 Nordjyllands Erhvervsakademi
Forbindelser mellem objekter Objekter knyttes sammen via objekt-forbindelser (Associering og aggregering) Fx vil et objekt af typen Person kunne være knyttet til et objekt af typen CPR Et andet eksempel kunne være objekterne Kunde og Konto FEN 2008-09-03 Nordjyllands Erhvervsakademi
Nordjyllands Erhvervsakademi Kardinalitet Et mål for hvor mange objekter af en given type et objekt har knyttet til sig. Fx har et Person-objekt knyttet 1 og kun 1 CPR-objekt til sig Et Kunde-objekt kan derimod have flere Konto-objekter tilknyttet FEN 2008-09-03 Nordjyllands Erhvervsakademi
Nordjyllands Erhvervsakademi Mere kardinalitet Man taler om tre forskellige typer: 1-1 (en til en) 1-* (en til mange) *-* (mange til mange) FEN 2008-09-03 Nordjyllands Erhvervsakademi
Realisering af objektforbindelser: 1-1 Det ene objekt har en reference til det andet Skal Person have reference til CPR, eller omvendt? Dette afhænger af systemets forretnings-logik – hvilken vej går vi typisk i systemet fra Person til CPR eller omvendt FEN 2008-09-03 Nordjyllands Erhvervsakademi
Nordjyllands Erhvervsakademi 1-* Her afhænger det igen af forretningslogik: Skal vi have en reference fra 1 til mange siden, skal vi realisere dette vha. Array, ArrayList eller anden collection Skal vi referere 1-siden fra mange-siden kan det gøres med en enkelt reference FEN 2008-09-03 Nordjyllands Erhvervsakademi
Nordjyllands Erhvervsakademi *-* Som tidligere, blot vi her er tvunget til at have en collection i det ene objekt Ex. Låner-Bog: En låner kan reservere mange bøger, men en bog kan også være reserveret af mange lånere FEN 2008-09-03 Nordjyllands Erhvervsakademi
Nordjyllands Erhvervsakademi Eksempler Se PersonCpr og KundeKonto FEN 2008-09-03 Nordjyllands Erhvervsakademi
Nordjyllands Erhvervsakademi Array Arrays er reference-typer baseret på Array-klassen i FCL oprettes med new 0-baseret indeksering tildeles default værdier (0 ved numerisk, null ved referencer) int[] a; a = new int[5]; a[0] = 17; a[1] = 32; int x = a[0] + a[1] + a[4]; int l = a.Length; opret Tilgang til element antal elementer FEN 2008-09-03 Nordjyllands Erhvervsakademi
Nordjyllands Erhvervsakademi ArrayList FCL-klasse der som arrayet gemmer en sekvens af elementer – størrelsen er dog dynamisk Manipuleres vha. en række metoder: int Add (object value); void Insert(int index, object value); void Remove (object value); void RemoveAt(int index); void Clear (); bool Contains(object value); int IndexOf (object value); object this[int index] { get; set; } bool IsReadOnly { get; } bool IsFixedSize { get; } Tilføj nye elementer Slet Test på indhold Get/set eksisterende elementer Strukturelle properties FEN 2008-09-03 Nordjyllands Erhvervsakademi
ArrayList og List<> Her ligger ArrayList using System.Collections; //--- Ansat a = new Ansat("Kurt", "Seniorprogrammør", 20000); Ansat b = new Ansat("Karl", "Programmør", 10000); Ansat c = new Ansat("Karen", "Systemprogrammør", 13000); Ansat d = new Ansat("Iben", "Programmør", 11000); Ansat e = new Ansat("Ib", "Systemkonsulent", 9000); ArrayList ansatListe = new ArrayList(); ansatListe.Add(a); ansatListe.Add(b); ansatListe.Add(c); ansatListe.Add(d); for (int i = 0; i < ansatListe.Count; i++) { Console.WriteLine(((Ansat)ansatListe[i]).Navn); } ArrayList kan indeholde alle slags objekter… …derfor må vi eksplicit caste til Ansat FEN 2008-09-03 Nordjyllands Erhvervsakademi
ArrayList og List<> Her ligger List<-> using System.Collections.Generic; //--- Ansat a = new Ansat("Kurt", "Seniorprogrammør", 20000); Ansat b = new Ansat("Karl", "Programmør", 10000); Ansat c = new Ansat("Karen", "Systemprogrammør", 13000); Ansat d = new Ansat("Iben", "Programmør", 11000); Ansat e = new Ansat("Ib", "Systemkonsulent", 9000); List<Ansat> ansatListe = new List<Ansat>(); ansatListe.Add(a); ansatListe.Add(b); ansatListe.Add(c); ansatListe.Add(d); for (int i = 0; i < ansatListe.Count; i++) { Console.WriteLine(ansatListe[i].Navn); } List<Ansat> kan kun indeholde Ansat-objekter… …derfor behøver vi ikke at caste FEN 2008-09-03 Nordjyllands Erhvervsakademi
Eksempel: Ansat-Projekt Del af design-klassediagram i et system til registrering af ansatte og projekter Projekt Ansat navn navn ArbejderPaa afdeling stilling timer løn 1 1 0..* 0..* 0..* 0..* 1 1 GetTotalTimer() TilknyMedarbejder() GetMedarbejdere() FEN 2008-09-03 Nordjyllands Erhvervsakademi
Design af objektforbindelser Muligheder: Ansat indeholder en liste af ArbejderPaa referencer Projekt indeholder en liste af ArbejderPaa referencer ArbejderPaa indeholder referencer til Ansat og Projekt Kombinationer af ovenstående Vi vælger 2 plus 3. VisualStudio-løsning – source her. FEN 2008-09-03 Nordjyllands Erhvervsakademi
Nordjyllands Erhvervsakademi Opgaver Lav opgaverne om realisering af objektforbindelser (Bibliotek) FEN 2008-09-03 Nordjyllands Erhvervsakademi