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
FEN 2008-09-03 Nordjyllands Erhvervsakademi
1
Programmeringsteknologi: Lektion 1
Præsentation
Orientering om: -praktiske forhold-faget
Fundament: C# fra Softwarekonstruktion?
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
FEN 2008-09-03 Nordjyllands Erhvervsakademi
3
Praktisk
• Planlægning• Bøger• Software• Logins• Mail• http://public.noea.dk/programmeringsteknologi/• Eksamen
FEN 2008-09-03 Nordjyllands Erhvervsakademi
4
Introduktion til objektorienteret programmering
Objekter og klasser -
indhold og opbygning
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.
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
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.
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
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
FEN 2008-09-03 Nordjyllands Erhvervsakademi
10
Opbygning af klasser
Klasser bygges op efter skabelonen:
class Klassenavn {
dataerklæringer
constructors
metoder
}
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
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;
}
FEN 2008-09-03 Nordjyllands Erhvervsakademi
13
Metoder
public bool Haev(double belob)
public void Indsaet(double belob)
public void TilskrivRente()
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.
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
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
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
FEN 2008-09-03 Nordjyllands Erhvervsakademi
18
Opgaver
• Lav CPR-opgaven
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
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
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)
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
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
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..*
FEN 2008-09-03 Nordjyllands Erhvervsakademi
25
Eksempler
• Se PersonCpr og KundeKonto
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
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
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
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
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..*
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.
FEN 2008-09-03 Nordjyllands Erhvervsakademi
32
Opgaver
Lav opgaverne om realisering af objektforbindelser
(Bibliotek)
0..*
Låner BogReservation
0..*1 0..* 110..*1