Grundlæggende programmering Efterår 2001

Slides:



Advertisements
Lignende præsentationer
Velkommen til Softwarekonstruktion
Advertisements

07 – Kort om OO Introduktion.
T1 – OPGAVE 14.2 LINETT & SABRINA Klasse Varer namespace Opgave_14._2 { class Varer { private string vare; private string farve; private double.
1 C-kursus 6. Lektion n Repetition af 5. Lektion n Vi mødes igen kl til gennemgang af 6. Lektion.
KONCEPT Klasser og objekter En klasse beskriver et World ArrayList
Intro Forelæsning 2 Linux install-party lør.14.sept kl – man. 14.okt – Kursets omfang :7,5 ECTS Kursussammensætning: forelæsning.
Array vs. ArrayList. Arrays Et array er en struktureret metode til at gemme flere værdier af den samme datatype. Data’en i et array ligger op ad hinanden.
Selve objektet versus referencen til objektet Nedarvning
Første generation (maskiner/operativsystemer) 45-55: radiorør Kun maskinsprog programmering = skrivning af nullerog ettaller Intet operativsystem programmør.
GP 4, 19/ Grundlæggende programmering Efterår 2001 Forelæsning 4 onsdag 19/ kl. 9:15 – 12:00.
Hvordan man skriver koden.
GP5, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 5 Slides ligger på nettet. Du er velkommen til at printe dem nu. Vi begynder.
GP 10, 7/ Grundlæggende programmering Efterår 2001 Forelæsning 10 onsdag 7/ kl. 9:15 – 12:00.
FEN IntroJava AAU1 Opsamling: afvikling af Java-programmer Input fra keyboard og fil Fra en prompt Fra BlueJ Fra NetBeans.
FEN IntroJava AAU1 Java grundelementer Variable og datatyper Sætninger og udtryk Metoder.
Forelæsning 3.1 Collections Javas for-each løkke
Intro til C# apps Kodegennemgang af simpel C# app
Delphi og C++ Builder C++ Builder. C++ Historie Sproget blev designet for AT&T af danskeren Bjarne Stoustrup En objektorienteret videreudvikling.
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.
Program Design – 4 Introduktion til PHP. Dagens lektion Hvad er PHP?  - og lidt historie Hvordan virker PHP? Grundlæggende PHP  Variable  Typer  Løkker.
GP 11, 14/ Grundlæggende programmering Efterår 2001 Forelæsning 11 onsdag 14/ kl. 9:15 – 12:00.
Fundamentale datastrukturer
GP 8, 24/ Grundlæggende programmering Efterår 2001 Forelæsning 8 onsdag 24/ kl. 9:15 – 12:00.
GP 5, 26/ Grundlæggende programmering Efterår 2001 Forelæsning 5 onsdag 26/ kl. 9:15 – 12:00.
GP 6, 13/ Grundlæggende programmering Forår 2002 Forelæsning 6 onsdag 13/ kl. 9:15 – 12:00.
1 Fundamentale datastrukturer. 2 Definitioner: abstrakt datatype, datastruktur Elementære datastrukturer og abstrakte datatyper : arrays, stakke, køer,
GP 3, 12/ Grundlæggende programmering Efterår 2001 Forelæsning 3 onsdag 12/ kl. 9:15 – 12:00.
Procestræ under afvikling af cp init login shell cp cp src dest.
GP 6, 3/ Grundlæggende programmering Efterår 2001 Forelæsning 6 onsdag 3/ kl. 9:15 – 12:00.
Begreber og Redskaber 7. Plan for idag Rekursive underprogrammer Rekursive datastrukturer Rekursion vs iteration Rekursivt: Flette sortering.
8 RÅD VEDRØRENDE GOD PROGRAMMERING Effective (brown) Java.
FEN IntroJava AAU1 Klasser og objekter Grundbegreber Student-Course.
FEN IntroJava AAU1 Endnu mere om Klasser og Objekter Mange til mange relationer Student-Course v3.
C#: Udtryk og metoder Kilde: Joe Hummel. 2 Nordjyllands Erhvervakademi – 2008 Indhold “With regards to programming statements and methods, C# offers what.
03 – Udtryk og metoder. 2 NOEA2009Java-kursus – Udtryk og metoder Udtryk i Java Java har standard udtrykene… Værditildeling Subrutiner og funktionskald.
Opfølgning på Dygtig Skildpadde (Michael) To algoritmeskabeloner findEn findAlle Primitive typer (forfremmelse og begrænsning) Identitet versus lighed.
Længste plateau En klassisk problemstilling (Gries, 1981) - og her i Java!!! Denne opgave drejer sig om at bestemme længden af det længste plateau i en.
GP 4, 27/ Grundlæggende programmering Forår 2002 Forelæsning 4 onsdag 27/ kl. 9:15 – 12:00.
Grundlæggende programmering Forår 2002
GP3, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 3 Vi begynder Slides ligger på hjemmesiden. Du er velkommen til.
Forelæsning 7.1 – repetition
Paradigmer i Programmering 3. Højere ordens funktioner Idag: Højere ordens funktioner Algebraiske datatyper Næste gang: I/O, Filer, interaktive programmer.
Begreber og Redskaber 4. Plan for idag Om metoder, parametre, returværdier Et par ord om objekt-orientering Håndkøring af programmer.
Begreber og Redskaber 3. Plan for idag Om metoder, parametre, returværdier Overblik over klasser,objekter,nedarvning Et par ord om objekt-orientering.
I o p o DAIMI, AU, November 1999Programkonstruktion I9E.1 Konstruktion og brug af klasser – en stak og en HP-regnemaskine push pop.
 Michael E. Caspersen, 2000Introducerende objektorienteret programmering6B.1 Virkefeltsregler i Java int i; int j; int k; i = i+j; String t; Sequence.
DAIMIIntroducerende objektorienteret programmering4B.1 Typer og tilstand i Java Typer, tilstand, erklæring, variable, primitive datatyper, reference- og.
Klasser og objekter. dIntProg, E08Klasser og objekter.2 Grundbegreber Klasser og objekter –beskrivelse –oprettelse Attributter og metoder –tilstand –opførsel.
DAIMIIntroducerende objektorienteret programmering3B.1 Definition af klasser Klasseskelet, metoder, et eksempel: dato.
DAIMIIntroducerende objektorienteret programmeringkd.1 Definition af klasser Klasseskelet, metoder, et eksempel: dato.
 Michael E. Caspersen, 2000Introducerende objektorienteret programmering6A.1 Programmering med interfaces – en stak og en HP-regnemaskine push pop.
DAIMIIntroducerende objektorienteret programmering4B.1 Grundlæggende og Reference Typer i Java Typer, tilstand, erklæring, reference- og værdi semantik,
Indledende Programmering Uge 6 - Efterår 2006
Programmering med interfaces Separering af specifikation, anvendelse og implementation.
Klasser og objekter – grundbegreber.  Michael E. Caspersen, 2001Introducerende objektorienteret programmeringKlasser og objekter.2 Klasser og objekter.
Programmering med interfaces – en stak og en HP-regnemaskine push pop.
Collectionklasser Klassifikation og anvendelse. dIntProg, F08Collectionklasser.2 Samlinger af objekter Objektreferencer –for at holde fast i et objekt.
 Jens Bennedsen 2001Multimedie programmering10B.1 Interfaces En ren kontrakt.
 Jens Bennedsen 2001Multimedie programmering4.1 Definition af begreber Interface, implements, klasse.
DAIMIIntroducerende objektorienteret programmering4A.1 Kontrakter og Design Kontraktbaseret design, JavaDoc dokumentation,
 Jens Bennedsen 2001Multimedie programmering3A.1 Definition af klasser Klasseskelet, metoder, et eksempel: dato.
Klasser og objekter. dIntProg, F08Klasser og objekter.2 Grundbegreber Klasser og objekter –beskrivelse –oprettelse Attributter og metoder –tilstand –opførsel.
Virkefeltsregler i Java int i; int j; int k; i = i+j; String t; Sequence s; int i; int j; Sequence s; String s; int i; int j;
I o p o DAIMI, AU, September 1999Introducerende objektorienteret programmering5C.1 Virkefeltsregler i Java int i; int j; int k; i = i+j; String t; Sequence.
Virkefeltsregler i Java int i; int j; int k; i = i+j; String t; Sequence s; int i; int j; Sequence s; String s; int i; int j;
Forelæsning Uge 4 – Mandag
Quiz – Uge 3 – mandag – første time
Klasser og objekter (Afsnit i manualen).
Forelæsning Uge 3 – Mandag
Forelæsning Uge 4 – Torsdag
Præsentationens transcript:

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

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

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 http://linuxlab.dk/adict/mgroup.php?organizer=LinuxLab Nyhedsgruppe: Stadig næsten ingen spørgsmål om GP på it-c.courses.GP... GP 7, 10/10 2001

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/10 2001

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/10 2001

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/10 2001

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/10 2001

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/10 2001

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 2001

Tabeller af primitive værdier elementerne iArr count bArr 5 9 8 7 4 9 10 -2 index 55 0 1 2 3 4 5 6 7 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/10 2001

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/10 2001

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/10 2001

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/10 2001

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/10 2001

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/10 2001

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/10 2001

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/10 2001

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/10 2001

GP 7, 10/10 2001

GP 7, 10/10 2001

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/10 2001

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/10 2001

GP 7, 10/10 2001

GP 7, 10/10 2001

GP 7, 10/10 2001

GP 7, 10/10 2001

GP 7, 10/10 2001

GP 7, 10/10 2001