320 likes | 439 Views
Programmeringsteknologi: Lektion 1. Præsentation Orientering om: praktiske forhold faget Fundament: C# fra Softwarekonstruktion?. Præsentation. Kursusholdere: Finn E. Nordbjerg – fen@noea.dk Lektor v/Datamatikeruddannelsen, NOEA - Nordjyllands Erhvervsakademi
E N D
Programmeringsteknologi: Lektion 1 Præsentation Orientering om: praktiske forhold faget Fundament: C# fra Softwarekonstruktion? 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 Nordjyllands Erhvervsakademi
Praktisk • Planlægning • Bøger • Software • Logins • Mail • http://public.noea.dk/programmeringsteknologi/ • Eksamen Nordjyllands Erhvervsakademi
Introduktion til objektorienteret programmering Objekter og klasser - indhold og opbygning Nordjyllands Erhvervsakademi
Definition af objekt og klasse • Objekt • 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. 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 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. 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 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 Nordjyllands Erhvervsakademi
Opbygning af klasser Klasser bygges op efter skabelonen: classKlassenavn { dataerklæringer constructors metoder } 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 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; } Nordjyllands Erhvervsakademi
Metoder public bool Haev(double belob) public void Indsaet(double belob) public void TilskrivRente() 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. 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 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 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 Nordjyllands Erhvervsakademi
Opgaver • Lav CPR-opgaven 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 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 Nordjyllands Erhvervsakademi
Mere kardinalitet • Man taler om tre forskellige typer: • 1-1 (en til en) • 1-* (en til mange) • *-* (mange til mange) 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 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 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 Nordjyllands Erhvervsakademi
Eksempler • Se PersonCpr og KundeKonto 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 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 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 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 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 1 1 løn 0..* 0..* 0..* 0..* 1 1 GetTotalTimer() TilknyMedarbejder() GetMedarbejdere() 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. Nordjyllands Erhvervsakademi
Opgaver Lav opgaverne om realisering af objektforbindelser (Bibliotek) Nordjyllands Erhvervsakademi