Intro til computere & Visual Studio
Metoder1Organisering af kodeStatiske metoder og statiske
variableMath-klassenMain-metodenKald af metoderArgument
promotionNET Framework Class LibraryRandomEnumerations Scope of
declarationsMethod overloadingParametreRekursion Pass-by-value
& pass-by-reference
Steen Jensen, efterr 2013
Organisering af kode i C#, 1Relaterede klasser organiseres ofte
i skaldte namespaces
.NET Framework Class Library indeholder mange prdefinerede
klasser
Metoder giver mulighed for at modularisere (eng.: modularize) en
app, dvs. opdeling af arbejdsopgaverne i selvstndige enheder (eng.:
self-contained units)
Disse metoder kaldes ogs brugerdefinerede metoder (eng.:
user-defined methods)
rsager til at modularisere:Del og hersk (eng.: divide and
conquer)Software genbrug metoder som byggeklodser til nye appsUndg
at repetere kode nemmere at debugge og vedligeholde
2Organisering af kode i C#, 23
Del og hersk implementerings-detaljer gemmesStatiske metoder og
statiske variableDe fleste metoder udfres p specifikke objekter
Nogle gange udfrer en metode opgaver, der ikkeiafhnger af
indholdet af noget objekt dette kaldes en statisk (eng.: static)
metode
En metode erklres statisk ved at angive static fr return
typen
Nr objekter af en klasse, der indeholder statiske variable,
oprettes, deler alle objekter af denne klasse en kopi af klassens
statiske variable
Eksempler p statiske metodekald:
4
Math-klassens metoder5
Main metodenMain metoden erklres statisk, da der ikke er
oprettet nogle objekter endnu under startup af appen
Main kaldes ogs for appens entry point
6
Command-line argumentsApps uden command-line arg. kan udelade
string args [], og Public kan ogs udelades
I stedet for void kan angives int for at Main kan returnere en
fejlkode
Normalt vil der kun vre 1 Main pr. app, men enhver klasse kan i
princippet have en Main NB! Ikke min kop te
Brugerdefineret metode Maximum (figur 7.3 s. 275)7Linje 18:
metoden Maximum kaldes med tre parametre kommasepareret liste
(eng.: comma-separated list)
Linje 21: ved hjlp af operatoren + kan man sammenstte (eng.:
concatenate) strenge
Linje 37: der returneres den strste vrdi. Metoder kan returnere
hjst 1 vrdi (kan dog vre af typen struct eller en reference til et
objekt med flere vrdier)
Linje 27-37: hele metodens body kan alternativt erstattes af
stningen return Math.Max(x, Math.Max(y, z));
Kald af metoder8Tre mder at kalde en metode p:Brug af et
metodenavn til at kalde en metode i den samme klasse (se fx linje
18 i figur 7.3)
Brug af en variabel, der indeholder en reference til et objekt
(se fx linje 13 i figur 6.10 myGradeBook.DisplayMessage() )
Brug af klassenavn og member access oparator (.) til at kalde en
statisk metode i en klasse (se fx linje 13-15 i figur 7.3)
For at udfre metodekald benytter C# en skaldt stak (eng.:
stack)
En stak kan lidt populrt sammenlignes med en stabel
tallerkner:Nr en tallerken anbringes i stakken, vil det normalt vre
i toppen (eng.: pushing onto the stack)Nr en tallerken fjernes fra
stakken, vil det vre fra toppen (eng.: popping off the stack)
Stakke er kendt som sidst-ind, frst-ud (LIFO: last-in,
first-out) datastruktur
Nr en app kalder en metode, anbringes den kaldende metodes
adresse i program-execution stack ogs kaldet method-call stack.
Denne stak indeholder ogs hukommelse til de lokale variable, der
bruges i den kaldte metode. Denne hukommelse kaldes ogs activation
stack eller stack frame
Nr metoden returnerer, fjernes activation record for
metodekaldet, og de lokale variable er ikke lngere tilgngelige
En skaldt garbage collection sletter rent fysisk disse inaktive
activation records fra hukommelsen
Argument promotion9Argument promotion betyder, at et arguments
vrdi automatisk konverteres til den type, som metoden forventer at
modtage
Eksempelvis forventer Math-metoden Sqrt at modtage en double
Int konverteres til doubleArgument promotion kan betyde, at der
mistes data, fx vil en konvertering fra double til int betyde, at
decimaldelen skres vk
Promotion regler 10
.NET Framework Class Library11Mange prdefinerede klasser er
grupperet i kategorier af relaterede klasser, skaldte
namespaces
For at benytte klasser fra .NET frameworket benyttes using
direktivet, fx using System
P denne mde kan det ukvalificerede klassenavn Console bruges i
stedet for det fuldt kvalificerede System.Console
.NET Framework class Library reference:
http://msdn.microsoft.com/en-us/library/ms229335.aspx
Nste slide viser et lille udsnit af namespaces i frameworket
.NET Framework Class Library - udsnit12
Tilfldighedsgenerator (eng.: random-number generator) (figur 7.6
s. 284 + 7.7 s. 285)13Figur 7.6 (20 terningkast):Linje 9: der
oprettes et nyt objekt af typen RandomLinje 16: metoden Next(1, 7)
anvendes til at give en tilfldig vrdi mellem 1-6. Alternativ: 1 +
randomNumbers.Next(6); Linje 21-22: if-stningen styrer, at der
skiftes linje efter hver 5. vrdi
Figur 7.7 (6.000.000 terningkast):Linje 11-16: variablerne
frequency16 bruges til at gemme frekvensen for hvor mange gange,
hver vrdi (16) er kommet ud (tallet skulle gerne nrme sig
1.000.000)Linje 21-47: for-lkke, der krer 6.000.000 gangeLinje 23:
variablen face gives en tilfldig vrdi mellem 1-6Linje 26-46:
switch-stning, der lgger 1 til frequency16Linje 49-52:
frekvensfordelingen udskrives
Enumerations craps-spil (figur 7.8 s. 289)14Regler for
craps-spil:Man kaster to terningerHvis sum er 7 eller 11 i frste
kast, vinder manHvis sum er 2, 3 eller 12 i frste kast, taber
manHvis sum er 4, 5, 6, 8, 9 eller 10 i frste kast, bliver summen
ens pointFor at vinde skal man kaste, indtil man fr samme antal jne
som de frste pointHvis man fr 7, fr de oprindelige point er net,
har man tabt
Linje 11: der oprettes en enumeration type med navnet
StatusLinje 14: der oprettes en enumeration type med navnet
DiceNamesLinje 27: der oprettes en variabel gameStatus af typen
StatusLinje 28: variablen myPoint angiver summen af det frste
kast
Linje 30: metoden RollDice() kaldes, som kaster to terninger og
returnerer summen, som gemmes i variablen sumOfDice
Linje 33-49: switch-stning, der afhngigt af terningsummen stter
den tilsvarende gameStatus
Linje 33: (DiceNames) angiver en skaldt cast operator, der
konverterer sumOfDices int-vrdi til typen DiceNames
Linje 52-63: while-lkke, der krer slnge man ikke har vundet
eller tabt
Linje 66-69: efter afslutning af while-lkke udskrives
henholdsvis Player wins eller Player loses
Scope of declarations (figur 7.9 s. 294)15En variabels scope
angiver rkkevidden for, hvilke steder i en app, at man kan benytte
den
Figur 7.9 viser, hvordan henholdsvis en statisk variabel x samt
en lokal variabel x benyttes og antager forskellige vrdier
Method overloading (figur 7.10 s. 296)16Method overloading
betyder, at en metode kan erklres flere gange i den samme klasse
men med forskellige parametre
Figur 7.10 viser, hvordan metoden Square er erklret med
henholdsvis en int og en double og derfor kan kaldes med
forskellige datatyper som parametre
Valgfri parametre: (eng.: optional parameters) (figur 7.12 s.
299)17Metoder kan have valgfri parametre
En valgfri parameter angiver en default vrdi, som anvendes, hvis
det valgfrie argument er udeladt
Alle valgfrie parametre skal skrives til hjre for de
ikke-valgfrie parametre
Navngivne parametre: (eng.: named parameters)18Navngivne
parametre giver mulighed for at lave metodekald, hvor parametrene
navngives
Rekursion (eng.: recursion) 19En rekursiv metode er en metode,
der kalder sig selv, enten direkte eller indirekte gennem en anden
metode
Nr en rekursiv metode bruges til at lse et problem, kan den kun
lse den mest simple problemstilling en skaldt base case
Hvis metoden kaldes med en base case, returneres et resultat
Hvis metoden kaldes med et mere komplekst problem, opdeles
problemet i to dele: En del, som metoden ved, hvordan skal lsesEn
del, som den ikke ved, hvordan skal lses
Rekursion faktoriel beregning (figur 7.14) 20For eksempel er 5!
lig med 5 x 4 x 3 x 2 x 1 (= 120)
Pass-by-value & pass-by-reference (figur 7.15)21Default for
argumenter er pass-by-value, hvor en kopi af variablens vrdi
videregives (passes)
Hvis der benyttes pass-by-reference gives mulighed for, at den
kaldte metode kan f adgang og evt. ndre den oprindelige vrdi af
variablen NB!!! Pas p
Hvis man nsker at kalde by-reference anvendes ref (nr variabel
har startvrdi) og out (nr variabel ikke har startvrdi)
velser metoder i klassenPrv at besvare velse 7.1, 7.2, 7.4 s.
312-313 uden at se svaret
Check derefter dine svar op imod svarene s. 314-315
De flgende velser diskuteres i plenum:7.12 s. 317
22Programmeringsvelser metoder Til nedenstende velser kan
Problemlsning 2 med fordel benyttes
Resten af dagen + fortst hjemme: Ex. 7.29, 7.30, 7.31, 7.33 s.
319Making a difference ex. 7.39 + 7.40 s. 322
Du/I m meget gerne lave velsen som pair programming, hvor I
hjlpes ad I kan f.eks. skiftes til at vre leder og sekretr
Hvis du/I har problemer, s prv frst at vende det med det andet
par i jeres gruppe, fr I rkker hnden op og beder mig om hjlp23