Præsentation er lastning. Vent venligst

Præsentation er lastning. Vent venligst

GP6, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 6 Slides ligger på nettet. Du er velkommen til at printe dem nu. Vi begynder.

Lignende præsentationer


Præsentationer af emnet: "GP6, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 6 Slides ligger på nettet. Du er velkommen til at printe dem nu. Vi begynder."— Præsentationens transcript:

1 GP6, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 6 Slides ligger på nettet. Du er velkommen til at printe dem nu. Vi begynder 9.15. www.itu.dk/courses/GP/E2005 Martin Lillholm

2 GP6, Martin Lillholm 2 Obligatorisk opgave Var opgaven til i onsdags 1.For nem 2.For svær – mon ikke vi lander heromkring denne gang? 3.Tilpas – skulle bruge noget tid og tanker på den, men så var den også til at løse/forstå. Er der nogen, der ikke har afleveret fordi den slet ikke var til at få hul på?

3 GP6, Martin Lillholm 3 Sidste gang Tabeller (arrays) Tabeller med mere end en dimension Tabeller med objekter Kommandolinieargumenter Klassen ArrayList Indlæsning fra tekstfil

4 GP6, Martin Lillholm 4 Småting fra sidst Tabeller og initialiseringslister: int a = 5; a = 7; int[] nums = {1,2,3}; nums = {4,5,6,7}; nums = new int[]{4,5,6,7}; Regning med floats float a = 5, b = 6; float avg = ((a + b) /2.0F); System.out.println("Gennemsnit: " + avg); L&L side 75 – literals. float konstant

5 GP6, Martin Lillholm 5 Denne gang Ganske kort om programudvikling En slags UML klassediagrammer –Klasser –Attributter (felter, klassevariable) –Metoder inkl. konstruktører –Afhængigheder (dependencies) –Aggregations kursorisk Mere om metoder og parametre og virkefelt (scope) Mere om statiske variable (klassevariable) og metoder Vi venter med: –Interfaces og opremsningstyper (enumerations)

6 GP6, Martin Lillholm 6 Softwareudvikling Typiske (forsimplet) udviklingsfaser for software –Opgave –(Forundersøgelse) –Kravspecifikation –Analyse og Design –Implementation oftest flere iterationer –Afprøvning OO-design – simpelt –Klasser (kan være navneord) –Ansvar (kan være udsagnsord) –Walkthroughs –(Ikke pensum)

7 GP6, Martin Lillholm 7 (En slags) UML klassediagrammer UML er meget mere end blot klassediagrammer UML: Booch, Jacobsen and Rumbaugh (The Three Amigos) Benyttes til at beskrive klasser og statiske sammenhænge mellem klasser Indeholder typisk: –Klasser –Attributter (felter, klassevariable) –Metoder inkl. konstruktører –Afhængigheder (dependencies) –Aggregations (kursorisk) Mere information: Martin Fowler, UML Distilled eller Links på hjemmeside

8 GP6, Martin Lillholm 8 UML Klassediagrammer (Statisk overblik) Person TestPerson Math AnsatStuderende Bankkonto Dependency Aggregation – has-a (Inheritance – is-a)

9 GP6, Martin Lillholm 9 UML Klassediagrammer Klassedetaljer Person Klassenavn Hvor detaljeret skal et klassediagram være? Hvad kan det bruges til? Felter Konstruktør(er) Metoder -navn : String -højde : int -vægt : int modifier (+/-/#) identifier : type Person(String, int, int) +getNavn() : String +setNavn(String) : void +toString() : String identifier (nul eller flere typer) modifier (+/-/#) identifier (nul eller flere typer) : (retur) type

10 GP6, Martin Lillholm 10 Metoder – opgaveabstraktion Opgaveabstraktion – en del af programdesign Metoder er klassers opgaveløsere eller arbejdsheste Den reelle kode skrives altid i metoder Designprocessen starter typisk med identificere klasser (navneord er gode kandidater) og deres felter Metoder kan også ses som ansvar (udsagnsord er gode kandidater) En given opgave/ansvar/metode hører typisk (naturligt) til en klasse Algoritmer og pseudokode hjælper ved design Keep it simple! Hellere for mange end for få metoder main er meget speciel: statisk og hvor afviklingen starter Hvorfor skriver I mange gange statiske metoder til øvelserne ?

11 GP6, Martin Lillholm 11 Metoder – parametre Parametre er i virkeligheden lokale variable, der initialiseres ved metode kald – call by value. Værdien af den faktiske parameter kopieres over i den formelle parameter, der så oprettes som lokal variabel ”Forskel” på parametre af primitiv type og objektvariable –For primitive typer kopieres værdien ved metodekald –For en objektvariabel kopieres referencen ved metodekald (aliaser, sidevirkninger) –ParameterTester.java L&L side 327-331 i BlueJ char calc (int num1, int num2, String message) { int sum = num1 + num2; char result = message.charAt (sum); return result; } ch = obj.calc (25, count, "Hello");

12 GP6, Martin Lillholm 12 Virkefelt – scope – revisited En variabels virkefelt definerer, hvor en variabel kan benyttes og/eller hvor længe den er i ”live”. En variabels virkefelt går fra umiddelbart efter den erklæres til slutningen af den inderste blok ( {} ) blok der omgiver den. Et felt (instans variabel) har hele klassen som virkefelt Virkefeltet for en metodes eller konstruktørs parametre er hele metodens eller konstruktørens krop For en kontrolvariabel erklæret i en for sætning er virkefeltet hele for sætningens krop inkl. headeren En variabel eller parameter kan ikke redefineres inden for dens virkefelt Et felt (instans variabel) kan skygges af lokale variable og parametre

13 GP6, Martin Lillholm 13 Virkefelt – scope – eksempler (Sestoft, 2002)

14 GP6, Martin Lillholm 14 Metoder – overlæsning (overloading) Overlæsning benyttes til at knytte flere definitioner til et enkelt metodenavn Hvis man benytter overlæsning kan den faktiske metode, der skal kaldes ikke bestemmes ud fra navnet alene Flere metoder med samme navn skelnes ved deres signatur Signaturen defineres som antal, type og rækkefølge for parametrene En signatur kan kun benyttes én gang eller anderledes sagt overlæsning kræver unikke signaturer Vi har tidligere kun set overlæsning ifbm. konstruktører, men det kan også benyttes til almindelige metoder

15 GP6, Martin Lillholm 15 Overlæsning Oversætteren afgører hvilken udgave af metoden der skal kaldes ved at se på parametrene (signaturen): float tryMe(int x) { return x +.375; } float tryMe(int x, float y) { return x*y; } result = tryMe(25, 4.32) Anvendelse

16 GP6, Martin Lillholm 16 Overlæsning Hvorfor er det overhoved smart ? –Konstruktører –Metoder – eksempel: println (String s) println (int i) println (double d) System.out.println ("The total is:"); System.out.println (total); Bemærk at returtypen ikke er en del af signaturen Hvis den var, ville to signaturer kunne være identiske på nær returtypen. Hvorfor ville det være et problem ?

17 GP6, Martin Lillholm 17 Statiske felter og metoder Erklæres ved brug af static private static int count = 0;... public static int getCount (){ return count; } Statiske felter og metoder kan benyttes uden at instantiere en klasse. Felter allokeres og eventuelt initialiseres når et program startes. Hvordan virker statiske felter og metoder egentlig ? (Tavlegennemgang) Vi har set eksempler fra eksempelvis Math klassen –Math.PI –Math.Pow (2,3) Eksempel SloganCounter.java L&L side 6.1 i BlueJ UML og statiske felter og metoder

18 GP6, Martin Lillholm 18 main metoden public static void main (String[] args) { …; } Hvad betyder alle delkomponenter? Det kan vi rent faktisk svare på nu !!

19 GP6, Martin Lillholm 19 Diskussion af statisk vs. instanser Skyd løs …

20 GP6, Martin Lillholm 20 this referencen tillader et objekt at referere sig selv Når this benyttes inden i en metode refereres til objektet (en konkret instans), der indeholder metoden Hvis this benyttes i metoden tryMe i nedestående to instanser: refererer vi i første tilfælde obj1 og i andet tilfælde obj2 this referencen obj1.tryMe(); obj2.tryMe();

21 GP6, Martin Lillholm 21 this referencen Kan blandt andet benyttes til at skelne mellem felter og parametre med samme navne i metoder og konstruktører: class Account { String name; long acctNumber; double balance; public Account (String name, long acctNumber, double balance) { this.name = name; this.acctNumber = acctNumber; this.balance = balance; } class Account { … public Account (String newName, long newAcctNumber, double newBalance) { name = newName; acctNumber = newAcctNumber; balance = newBalance; }

22 GP6, Martin Lillholm 22 Ordet er frit … Spørgsmål af enhver art …

23 GP6, Martin Lillholm 23 Sudoku – næste skridt


Download ppt "GP6, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 6 Slides ligger på nettet. Du er velkommen til at printe dem nu. Vi begynder."

Lignende præsentationer


Annoncer fra Google