1 / 23

Metoder

Metoder. Organisering af kode Statiske metoder og statiske variable Math-klassen Main-metoden Kald af metoder Argument promotion NET Framework Class Library Random Enumerations Scope of declarations Method overloading Parametre Rekursion Pass-by-value & pass-by-reference

jarah
Download Presentation

Metoder

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Metoder • Organisering af kode • Statiske metoder og statiske variable • Math-klassen • Main-metoden • Kald af metoder • Argument promotion • NET FrameworkClassLibrary • Random • Enumerations • Scope of declarations • Methodoverloading • Parametre • Rekursion • Pass-by-value & pass-by-reference • Steen Jensen, efterår 2013

  2. Organisering af kode i C#, 1 • Relaterede klasser organiseres ofte i såkaldte namespaces • .NET FrameworkClassLibrary indeholder mange prædefinerede klasser • Metoder giver mulighed for at modularisere(eng.: modularize) en app, dvs. opdeling af arbejdsopgaverne i selvstændige enheder (eng.: self-contained units) • Disse metoder kaldes også brugerdefinerede metoder(eng.: user-definedmethods) • Årsager til at modularisere: • ”Del og hersk” (eng.: ”divide and conquer”) • Software genbrug – metoder som byggeklodser til nye apps • Undgå at repetere kode  nemmere at debugge og vedligeholde

  3. Organisering af kode i C#, 2 ”Del og hersk” – implementerings-detaljer gemmes

  4. Statiske metoder og statiske variable De fleste metoder udføres på specifikke objekter Nogle gange udfører en metode opgaver, der ikkeiafhænger af indholdet af noget objekt – dette kaldes en statisk (eng.: static) metode En metode erklæres statisk ved at angive staticfør return typen Når objekter af en klasse, der indeholder statiske variable, oprettes, deler alleobjekter af denne klasse en kopi af klassens statiske variable Eksempler på statiske metodekald:

  5. Math-klassens metoder

  6. Main metoden Command-line arguments • Apps uden command-line arg.kan udelade stringargs [], og Public kan også udelades • I stedet forvoidkan angives int for at Main kan returnere en fejlkode • Normalt vil der kun være 1 Main pr. app, men enhver klasse kan i princippet have en Main – NB! Ikke ”min kop te” Main metoden erklæres statisk, da der ikke er oprettet nogle objekter endnu under startup af app’en Main kaldes også for app’ensentry point

  7. Brugerdefineret metode Maximum (figur 7.3 s. 275) • Linje 18: metodenMaximumkaldes med tre parametre  kommasepareret liste (eng.: comma-separated list) • Linje 21: ved hjælp af operatoren + kan man sammensætte (eng.: concatenate) strenge • Linje 37: der returneres den største værdi. Metoder kan returnere højst 1 værdi (kan dog være af typen struct eller en reference til et objekt med flere værdier) • Linje 27-37: hele metodens body kan alternativt erstattes af sætningen returnMath.Max(x, Math.Max(y, z));

  8. Kald af metoder • Tre måder 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 memberaccessoparator (.) til at kalde en statisk metode i en klasse (se fx linje 13-15 i figur 7.3) • For at udføre metodekald benytter C# en såkaldt stak (eng.: stack) • En stak kan lidt populært sammenlignes med en stabel tallerkner: • Når en tallerken anbringes i stakken, vil det normalt være i toppen (eng.: pushingonto the stack) • Når en tallerken fjernes fra stakken, vil det være fra toppen (eng.: poppingoff the stack) • Stakke er kendt som sidst-ind, først-ud (LIFO: last-in, first-out) datastruktur • Når en app kalder en metode, anbringes den kaldende metodes adresse i program-executionstackogså kaldet method-callstack. Denne stak indeholder også hukommelse til de lokale variable, der bruges i den kaldte metode. Denne hukommelse kaldes også activationstack eller stackframe • Når metoden returnerer, fjernes activationrecord for metodekaldet, og de lokale variable er ikke længere tilgængelige • En såkaldt garbagecollectionsletter rent fysisk disse inaktive activationrecords fra hukommelsen

  9. Argument promotion • Argument promotion betyder, at et arguments værdi automatisk konverteres til den type, som metoden forventer at modtage • Eksempelvis forventer Math-metodenSqrt at modtage en double Int konverteres til double • Argument promotion kan betyde, at der mistes data, fx vil en konvertering fra double til int betyde, at decimaldelen skæres væk

  10. Promotion regler

  11. .NET FrameworkClassLibrary • Mange prædefinerede klasser er grupperet i kategorier af relaterede klasser, såkaldtenamespaces • For at benytte klasser fra .NET framework’et benyttes usingdirektivet, fx using System • På denne måde kan det ukvalificerede klassenavn Consolebruges i stedet for det fuldt kvalificerede System.Console • .NET FrameworkclassLibrary reference:http://msdn.microsoft.com/en-us/library/ms229335.aspx • Næste slide viser et lille udsnit af namespaces i framework’et

  12. .NET FrameworkClassLibrary - udsnit

  13. Tilfældighedsgenerator (eng.: random-number generator) (figur 7.6 s. 284 + 7.7 s. 285) • Figur 7.6 (20 terningkast): • Linje 9: der oprettes et nyt objekt af typen Random • Linje 16: metoden Next(1, 7) anvendes til at give en tilfældig værdi mellem 1-6. Alternativ: 1 + randomNumbers.Next(6); • Linje 21-22: if-sætningen styrer, at der skiftes linje efter hver 5. værdi • Figur 7.7 (6.000.000 terningkast): • Linje 11-16: variablerne frequency1…6 bruges til at gemme frekvensen for hvor mange gange, hver værdi (1…6) er kommet ud (tallet skulle gerne nærme sig 1.000.000) • Linje 21-47: for-løkke, der kører 6.000.000 gange • Linje 23: variablen facegives en tilfældig værdi mellem 1-6 • Linje 26-46: switch-sætning, der lægger 1 til frequency1…6 • Linje 49-52: frekvensfordelingen udskrives

  14. Enumerations – craps-spil (figur 7.8 s. 289) • Regler for craps-spil: • Man kaster to terninger • Hvis sum er 7 eller 11 i første kast, vinder man • Hvis sum er 2, 3 eller 12 i første kast, taber man • Hvis sum er 4, 5, 6, 8, 9 eller 10 i første kast, bliver summen ens point • For at vinde skal man kaste, indtil man før samme antal øjne som de første point • Hvis man får 7, før de oprindelige point er nået, har man tabt • Linje 11: der oprettes en enumeration type med navnet Status • Linje 14: der oprettes en enumeration type med navnet DiceNames • Linje 27: der oprettes en variabel gameStatusaf typen Status • Linje 28: variablen myPointangiver summen af det første kast • Linje 30: metoden RollDice() kaldes, som kaster to terninger og returnerer summen, som gemmes i variablen sumOfDice • Linje 33-49: switch-sætning, der afhængigt af terningsummen sætter den tilsvarende gameStatus • Linje 33: (DiceNames) angiver en såkaldt cast operator, der konverterer sumOfDice’sint-værdi til typen DiceNames • Linje 52-63: while-løkke,der kører sålænge man ikke har vundet eller tabt • Linje 66-69: efter afslutning af while-løkke udskrives henholdsvis ”Playerwins” eller ”Playerloses”

  15. Scope of declarations (figur 7.9 s. 294) • En variabels scope angiver rækkevidden 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 værdier

  16. Methodoverloading (figur 7.10 s. 296) • Methodoverloadingbetyder, at en metode kan erklæres flere gange i den samme klasse men med forskellige parametre • Figur 7.10 viser, hvordan metoden Square er erklæret med henholdsvis en int og en double og derfor kan kaldes med forskellige datatyper som parametre

  17. Valgfri parametre: (eng.: optional parameters) (figur 7.12 s. 299) • Metoder kan have valgfri parametre • En valgfri parameter angiver en default værdi, som anvendes, hvis det valgfrie argument er udeladt • Alle valgfrie parametre skal skrives til højre for de ikke-valgfrie parametre

  18. Navngivne parametre: (eng.: named parameters) • Navngivne parametre giver mulighed for at lave metodekald, hvor parametrene navngives

  19. Rekursion (eng.: recursion) • En rekursiv metode er en metode, der kalder sig selv, enten direkte eller indirekte gennem en anden metode • Når en rekursiv metode bruges til at løse et problem, kan den kun løse den mest simple problemstilling – en såkaldt 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 løses • En del, som den ikke ved, hvordan skal løses

  20. Rekursion – faktoriel beregning (figur 7.14) • For eksempel er 5! lig med 5 x 4 x 3 x 2 x 1 (= 120)

  21. Pass-by-value & pass-by-reference (figur 7.15) • Default for argumenter er pass-by-value, hvor en kopi af variablens værdi videregives (passes) • Hvis der benyttes pass-by-reference gives mulighed for, at den kaldte metode kan få adgang og evt. ændre den oprindelige værdi af variablen – NB!!! Pas på • Hvis man ønsker at kalde by-reference anvendes ref(når variabel har startværdi) og out (når variabel ikke har startværdi)

  22. Øvelser metoder – i klassen • Prøv at besvare øvelse 7.1, 7.2, 7.4 s. 312-313uden at se svaret • Check derefter dine svar op imod svarene s. 314-315 • De følgende øvelser diskuteres i plenum: • 7.12 s. 317

  23. Programmeringsøvelser – metoder • Til nedenstående øvelser kan Problemløsning 2 med fordel benyttes • Resten af dagen + fortsæt hjemme: • Ex. 7.29, 7.30, 7.31, 7.33 s. 319 • Makinga difference ex. 7.39 + 7.40 s. 322 • Du/I må meget gerne lave øvelsen som pair programming, hvor I hjælpes ad – I kan f.eks. skiftes til at være ”leder” og ”sekretær” • Hvis du/I har problemer, så prøv først at vende det med det andet par i jeres gruppe, før I rækker hånden op og beder mig om hjælp

More Related