Præsentation er lastning. Vent venligst

Præsentation er lastning. Vent venligst

Grundlæggende programmering Efterår 2001

Lignende præsentationer


Præsentationer af emnet: "Grundlæggende programmering Efterår 2001"— Præsentationens transcript:

1 Grundlæggende programmering Efterår 2001
Forelæsning 7 onsdag 10/ kl. 9:15 – 12:00 GP 7, 10/

2 Dagens program Det praktiske Pakke og projekter i BlueJ generelt
Indkapsling Tabeller Løkkedesign Klasser for mængder af objekter GP 7, 10/

3 Det praktiske LinuxLab arrangement: torsdag, 11. okt., kl. 15:15-17, LinuxLab (lok. 4.05), introduktion til LaTeX (fortsæt): figurer, tabeller, formler, etc; se Nyhedsgruppe: Stadig næsten ingen spørgsmål om GP på it-c.courses.GP... GP 7, 10/

4 Pakker, i blueJ og generelt
Når man laver store systemer eller klasser der skal bruges i mere end en sammenhæng vil man ofte få brug for at kunne gruppere klasser. I Java finder denne gruppering sted gennem noget der kaldes en pakke. En pakke er blot en samling klasser. En pakke har et navn. Vi har i kurset indtil videre brugt to pakker. Den ene pakke indeholder kun klassen ”Tegnemaskine”, og pakken hedder ”edu.it.tegnemaskine”. Den anden pakke indeholder de klasser der skal bruges til GUI opbygning, og pakken hedder ”edu.it.sgui”. GP 7, 10/

5 import Hvis man skal anvende en pakke skal man øverst i sin fil skrive import pakkenavn.klassenavn; F.eks. ”import edu.it.tegnemaskine.Tegnemaskine” Man kan også angive at man vil benytte alle klasserne i en pakke, ved at bruge en ”*” som klassenavn: import pakkenavn.*; F.eks. ”import edu.it.sgui.*” Pakkenavne er meget ofte navne med ”.” i. GP 7, 10/

6 BlueJ og pakker Alle klasser inden for en pakke kan frit referere til hinanden, mens kun klasser der er erklæret public kan ses uden for pakken. Hvis man ikke angiver andet (og det har vi ikke gjort, og kommer heller ikke til det i dette kursus), så er alle klasser som er i samme fil katalog i samme pakke. I BlueJ er et projekt et katalog. Derfor er alle klasser i et projekt i samme pakke. Derfor kan alle klasser i samme projekt frit benytte hinanden. I praksis er det derfor ofte en god ide at lave et projekt pr. lektion, så kan alle de klasser der laves til denne lektion bruge hinanden. Nogle gange anvendes der en klasse fra tidligere. Det nemmeste er at kopiere den ind i denne lektions projekt, så kan den frit anvendes. GP 7, 10/

7 Tabeller (eng. arrays) Tabeller/array’s er den fundamentale måde i Java at lave samlinger af variable. Hvis vi f.eks. vil registrere højden på alle i dette lokale, og derefter beregne gennemsnitshøjde kan man ikke gøre det med en enkel variable, men må bruge en tabel. Et array er et objekt der indeholder en samling variable. Denne samling indekseres fra index 0, og opefter. Tabellen højde erklæres som int[] højde = new int[14]; højde[6] = 178; ”højde[index]” anvendes som enhver anden variabel. højde 1 2 3 4 5 6 7 8 9 10 11 12 13 172 182 164 191 værdien af variablen højde[6] 153 165 178 186 168 index 175 185 169 203 Hvor mange elementer er der i tabellen højde? 183 GP 7, 10/

8 Tabeller... Anvendelser: Internt i alle programmer
Regneark Tekststrenge E-post systemer Adresse lister Databaser Tabeller er den helt basale måde at gemme mere end en af samme slags. I regnearket til højre angiver ”A1:A9” en tabel med 9 elementer. Denne tabel gives om parameter til metoden ”sum”. Regneark kan arbejde med tabeller i 2 dimensioner, det kan Java også – senere. GP 7, 10/

9 Typer af tabeller En tabel er en samling variable, kaldet elementer, nummereret 0, 1, 2,… Tabeltyper: int[]: typen af tabeller, hvis elementer er heltal String[]: typen af tabeller, hvis elementer er strenge boolean[]: typen af tabeller, hvis elementer er sandhedsværdier boolean[][]: typen af tabeller, hvis elementer har type boolean[], dvs. elementerne selv er tabeller, hvis elementer er sandhedsværdier <type>[]: typen af tabeller hvis elementer har type <type> GP 7, 10/

10 Tabeller af primitive værdier
elementerne iArr count bArr 5 9 8 7 4 9 10 -2 index 55 true false true true false true false true (udsnit af) metodeaktivering int[] iArr = {5, 9, 8, 7, 4, 9, 10, -2}; int count = 55; boolean[] bArr = { true, false, true, true, false, true, false, true }; // se billedet Tabeller er objekter. Variable indeholder referencer til tabeller. initialiserer GP 7, 10/

11 Tabeller af objekter sArr1 sArr2
String[] sArr1; String[] sArr2 = new String[8]; sArr2[0] = “mandag”; sArr2[1] = “tirsdag”; // lagertilstand sArr1 sArr2 t i r s d a g m a n d a g GP 7, 10/

12 Todimensionelle tabeller
boolean[][] bioRes = { { false, true, true, true, true, false }, { true, false, true, false, true, true, true }, { true, true, true, false, false, true, true, false}, { true, true, true, false, false, true, true, true} }; // se billedet bioRes true true true false false true true true true true true false false true true false true false true false true true true false true true true true false GP 7, 10/

13 Eksempel: Månedslængder (igen)
public class Days { public static void main (String[] args) { int month = Integer.parseInt(args[0]); System.out.println(“Måned ”+ month + “ har længde ” + monthLength(month)); } static int monthLength(int month) { int[] days = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; } } Hvad sker der hvis man udfører java Days 13 fra kommandoprompten? GP 7, 10/

14 sum metoden 1) resultat = index
public static int sum(int[] tal){ int resultat = 0; ??? while (???) { // situation (1) resultat = resultat + tal[index]; ??? } return resultat; } resultat = summen af tallene før index. 12 13 11 10 15 index 9 12 Man starter ikke med at programmere fra toppen og ned, men ofte indefra og ud. Princippet for at summere en række tal kunne være at gøre som når man anvender en lommeregner. Man lægger de to første tal sammen, dernæst lægger man det tredje til resultatet, dernæst det fjerde til resultatet, osv. 11 14 GP 7, 10/

15 sum metoden 2) public static int sum(int[] tal){ int resultat = 0; int index = 0; while (???) { // situation (1) resultat = resultat + tal[index]; ??? } return resultat; } index 12 13 11 10 15 9 12 Hvis vi starter med index = 0, altså med at pege på det første element, så er det jo stadig rigtigt at resultat i situation (1) er summen af tallene før index – hvis vi siger at summen af ingen tal er 0. 11 14 GP 7, 10/

16 sum metoden 3) resultat = index
public static int sum(int[] tal){ int resultat = 0; int index = 0; while (???) { // situation (1) resultat = resultat + tal[index]; index = index +1; // situation (2) } return resultat; } 12 13 resultat = summen af tallene før index. 11 10 15 9 index 12 Når vi kommer til situation 2, så er både resultatet og index blevet opdateret, og udsagnet at resultat er summen af tallene før index er stadig sandt. 11 14 GP 7, 10/

17 sum metoden 4) resultat = index
public static int sum(int[] tal){ int resultat = 0; int index = 0; while (index <= tal.length –1) { // situation (1) resultat = resultat + tal[index]; index = index +1; // situation (2) } // situation (3) return resultat; } 12 13 11 resultat = summen af tallene før index. 10 15 9 12 I situation 3 er vi kommet forbi while løkken. Det betyder at (index <= tal.length –1) ikke er sandt. Altså at index nu peger umiddelbart efter sidste element (fordi vi kun tæller op med 1). I det vi ikke mellem situation 2 og 3 har ændret på resultat og index, må vores udsagn om resultat være korrekt, og resultat er derfor summen af alle elementerne 11 14 index GP 7, 10/

18 sum metoden 5) resultat = index
public static int sum(int[] tal){ int resultat = 0; int index = 0; while (index <= tal.length – 1) { // situation (1) resultat = resultat + tal[index]; index = index +1; // situation (2) } return resultat; } 12 13 resultat = summen af tallene før index. 11 10 15 9 index 12 Betingelsen i while løkken skal først og fremmest sikre at vi ikke slår op i tabellen med et index der er for stort. Antallet af elementer i en tabel kan findes ved ”tabel.length”. Hvis længden er 7, betyder det at det sidste index er 6. 11 14 GP 7, 10/

19 GP 7, 10/

20 GP 7, 10/

21 løkke design En central ide omkring løkke design er at fokusere på to ting: at tæller variablen ikke falder ud over sidste element, og at den får det første med; at formålet med løkken gøres klart. Et udsagn om forholdet mellem en resultatværdi og løkke index er ofte en god måde at tænke systematisk på. Husk at index variablen får første element med. Udsagnet skal også holde her. initialisering //situation 0 while (???) { //situation 1 ???? //situation 2 } // situation 3 Vi har ikke ændret tilstand siden situation 0. Udsagnet holder stadig Vi har ændret på index, så resultatværdien skal opdateres så Udsagnet holder. Når vi kommer ud af løkken har ikke ændret tilstand siden situation 2. Udsagnet holder stadig. Når vi kommer ind i løkken igen har vi ikke ændret tilstand siden situation 2. Udsagnet holder stadig GP 7, 10/

22 Spejling af elementer i en tabel
Dette eksempel har ikke nogen praktisk motivation, men tjener udelukkende som eksempel på noget mere avanceret løkke- og tabelgymnastik. Antag at vi har en tabel af tal, f.eks. {4, 6, 3, 9, 2, 5, 3, 2, 9} og vi ønsker at bytte deres rækkefølge så de kommer til at blive { 9, 2, 3, 5, 2, 9, 3, 6, 4} uden at bruge ekstra lagerplads. GP 7, 10/

23 GP 7, 10/

24 GP 7, 10/

25 GP 7, 10/

26 GP 7, 10/

27 GP 7, 10/

28 GP 7, 10/


Download ppt "Grundlæggende programmering Efterår 2001"

Lignende præsentationer


Annoncer fra Google