32
FEN 2008-09-03 Nordjyllands Erhvervsakademi 1 Programmeringsteknolog i: Lektion 1 Præsentation Orientering om: -praktiske forhold -faget Fundament: C# fra Softwarekonstruktion?

Programmeringsteknologi: Lektion 1

  • Upload
    blanca

  • View
    41

  • Download
    0

Embed Size (px)

DESCRIPTION

Programmeringsteknologi: Lektion 1. Præsentation Orientering om: praktiske forhold faget Fundament: C# fra Softwarekonstruktion?. Præsentation. Kursusholdere: Finn E. Nordbjerg – [email protected] Lektor v/Datamatikeruddannelsen, NOEA - Nordjyllands Erhvervsakademi - PowerPoint PPT Presentation

Citation preview

Page 1: Programmeringsteknologi: Lektion 1

FEN 2008-09-03 Nordjyllands Erhvervsakademi

1

Programmeringsteknologi: Lektion 1

Præsentation

Orientering om: -praktiske forhold-faget

Fundament: C# fra Softwarekonstruktion?

Page 2: Programmeringsteknologi: Lektion 1

FEN 2008-09-03 Nordjyllands Erhvervsakademi

2

Præsentation

• Kursusholdere:– Finn E. Nordbjerg – [email protected]

• 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 – [email protected]

• Og jer?– mailliste

Page 3: Programmeringsteknologi: Lektion 1

FEN 2008-09-03 Nordjyllands Erhvervsakademi

3

Praktisk

• Planlægning• Bøger• Software• Logins• Mail• http://public.noea.dk/programmeringsteknologi/• Eksamen

Page 4: Programmeringsteknologi: Lektion 1

FEN 2008-09-03 Nordjyllands Erhvervsakademi

4

Introduktion til objektorienteret programmering

Objekter og klasser -

indhold og opbygning

Page 5: Programmeringsteknologi: Lektion 1

FEN 2008-09-03 Nordjyllands Erhvervsakademi

5

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.

Page 6: Programmeringsteknologi: Lektion 1

FEN 2008-09-03 Nordjyllands Erhvervsakademi

6

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

Page 7: Programmeringsteknologi: Lektion 1

FEN 2008-09-03 Nordjyllands Erhvervsakademi

7

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.

Page 8: Programmeringsteknologi: Lektion 1

FEN 2008-09-03 Nordjyllands Erhvervsakademi

8

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

Page 9: Programmeringsteknologi: Lektion 1

FEN 2008-09-03 Nordjyllands Erhvervsakademi

9

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

Page 10: Programmeringsteknologi: Lektion 1

FEN 2008-09-03 Nordjyllands Erhvervsakademi

10

Opbygning af klasser

Klasser bygges op efter skabelonen:

class Klassenavn {

dataerklæringer

constructors

metoder

}

Page 11: Programmeringsteknologi: Lektion 1

FEN 2008-09-03 Nordjyllands Erhvervsakademi

11

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;

}

Acessmodifier: public/private

• Lokal variabel• return• Parametre

Page 12: Programmeringsteknologi: Lektion 1

FEN 2008-09-03 Nordjyllands Erhvervsakademi

12

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;

}

Page 13: Programmeringsteknologi: Lektion 1

FEN 2008-09-03 Nordjyllands Erhvervsakademi

13

Metoder

public bool Haev(double belob)

public void Indsaet(double belob)

public void TilskrivRente()

Page 14: Programmeringsteknologi: Lektion 1

FEN 2008-09-03 Nordjyllands Erhvervsakademi

14

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.

Page 15: Programmeringsteknologi: Lektion 1

FEN 2008-09-03 Nordjyllands Erhvervsakademi

15

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

Page 16: Programmeringsteknologi: Lektion 1

FEN 2008-09-03 Nordjyllands Erhvervsakademi

16

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

Page 17: Programmeringsteknologi: Lektion 1

FEN 2008-09-03 Nordjyllands Erhvervsakademi

17

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

Page 18: Programmeringsteknologi: Lektion 1

FEN 2008-09-03 Nordjyllands Erhvervsakademi

18

Opgaver

• Lav CPR-opgaven

Page 19: Programmeringsteknologi: Lektion 1

FEN 2008-09-03 Nordjyllands Erhvervsakademi

19

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

Page 20: Programmeringsteknologi: Lektion 1

FEN 2008-09-03 Nordjyllands Erhvervsakademi

20

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

0..*1

Kunde Konto

0..*1

11

Person Cpr

11

Page 21: Programmeringsteknologi: Lektion 1

FEN 2008-09-03 Nordjyllands Erhvervsakademi

21

Mere kardinalitet

• Man taler om tre forskellige typer:

• 1-1 (en til en)

• 1-* (en til mange)

• *-* (mange til mange)

Page 22: Programmeringsteknologi: Lektion 1

FEN 2008-09-03 Nordjyllands Erhvervsakademi

22

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

Person Cpr

111 1

Page 23: Programmeringsteknologi: Lektion 1

FEN 2008-09-03 Nordjyllands Erhvervsakademi

23

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

Kunde Konto

0..*11 0..*

0..*

KontoKunde

1 0..*1

Page 24: Programmeringsteknologi: Lektion 1

FEN 2008-09-03 Nordjyllands Erhvervsakademi

24

*-*

• 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

Låner Bog

0..*0..* 0..*0..*

Page 25: Programmeringsteknologi: Lektion 1

FEN 2008-09-03 Nordjyllands Erhvervsakademi

25

Eksempler

• Se PersonCpr og KundeKonto

Page 26: Programmeringsteknologi: Lektion 1

FEN 2008-09-03 Nordjyllands Erhvervsakademi

26

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;

Tilgang til element

opret

antal elementer

Page 27: Programmeringsteknologi: Lektion 1

FEN 2008-09-03 Nordjyllands Erhvervsakademi

27

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

Page 28: Programmeringsteknologi: Lektion 1

FEN 2008-09-03 Nordjyllands Erhvervsakademi

28

ArrayList og List<>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…

Her ligger ArrayList

…derfor må vi eksplicit caste

til Ansat

Page 29: Programmeringsteknologi: Lektion 1

FEN 2008-09-03 Nordjyllands Erhvervsakademi

29

ArrayList og 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…

Her ligger List<->

…derfor behøver vi

ikke at caste

Page 30: Programmeringsteknologi: Lektion 1

FEN 2008-09-03 Nordjyllands Erhvervsakademi

30

Eksempel: Ansat-Projekt

• Del af design-klassediagram i et system til registrering af ansatte og projekter

Projekt

navnafdeling

GetTotalTimer()TilknyMedarbejder()GetMedarbejdere()

Ansat

navnstillingløn

ArbejderPaa

timer10..* 10..*1 0..*1 0..*

Page 31: Programmeringsteknologi: Lektion 1

FEN 2008-09-03 Nordjyllands Erhvervsakademi

31

Design af objektforbindelser

Muligheder:1. Ansat indeholder en liste af ArbejderPaa

referencer2. Projekt indeholder en liste af ArbejderPaa

referencer3. ArbejderPaa indeholder referencer til Ansat og

Projekt4. Kombinationer af ovenstående

Vi vælger 2 plus 3. VisualStudio-løsning – source her.

Page 32: Programmeringsteknologi: Lektion 1

FEN 2008-09-03 Nordjyllands Erhvervsakademi

32

Opgaver

Lav opgaverne om realisering af objektforbindelser

(Bibliotek)

0..*

Låner BogReservation

0..*1 0..* 110..*1