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.

Slides:



Advertisements
Lignende præsentationer
Velkommen til Softwarekonstruktion
Advertisements

Formularer (Access, del 3)
07 – Kort om OO Introduktion.
Indledende Programmering Uge 2 - Efterår 2006 Selektioner og interaktion mellem objekter Susanne Brix Lindros.
KONCEPT Klasser og objekter En klasse beskriver et World ArrayList
Datastrukturer Simple-type structs
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
Grundlæggende programmering Efterår 2001
GP10, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 10 Slides ligger på nettet. Du er velkommen til at printe dem nu. Vi.
GP9, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 9 Slides ligger på nettet. Du er velkommen til at printe dem nu. Vi begynder.
Hvordan man skriver koden.
Intro Variabler - datatyper. 2. forelæsning Hvad skete sidste gang Hvad er PHP? Kursussammensætning: læse – newsgroup – forelæsning – øvelsestime – aflevering.
GP 10, 7/ Grundlæggende programmering Efterår 2001 Forelæsning 10 onsdag 7/ kl. 9:15 – 12:00.
GP12, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 12 Slides ligger på nettet. Du er velkommen til at printe dem nu. Vi.
FEN IntroJava AAU1 Java grundelementer Variable og datatyper Sætninger og udtryk Metoder.
Intro Projekttyper v/ Lise Louv, Uddannelsesafdelingen Siden sidst: evaluering på opgaver og virtuel kursus. Kursets ugeforløb læse – forelæsning – øvelsestime.
Delphi og C++ Builder C++ Referencer og pointere.
Begreber og Redskaber 2. Plan for idag Noget om bestanddelene i et programmeringssprog Syntaksbeskrivelse af java Næste gang: –Binære tal –Repræsentation.
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.
Fundamentale datastrukturer
GP 8, 24/ Grundlæggende programmering Efterår 2001 Forelæsning 8 onsdag 24/ kl. 9:15 – 12:00.
FEN KbP/seminar 1: Specifikationer/Notationen Q 1 Kontraktbaseret programmering: Seminar 1 Om specifikationer Algoritmenotationen Q.
GP 5, 26/ Grundlæggende programmering Efterår 2001 Forelæsning 5 onsdag 26/ kl. 9:15 – 12:00.
GP2, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 2 Vi begynder Slides ligger på hjemmesiden. Du er velkommen til.
GP8, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 8 Slides ligger på nettet. Du er velkommen til at printe dem nu. Vi begynder.
1 Fundamentale datastrukturer. 2 Definitioner: abstrakt datatype, datastruktur Elementære datastrukturer og abstrakte datatyper : arrays, stakke, køer,
Repetition: Introduktion til OOP med C# og .NET
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.
Paradigmer i Programmering 1. Program for idag : Funktioner og udtryk i SML : Øvelse : Frokost – 14.00: Deklarative.
Primitive typer. dIntProg, F08Typer.2 Subtyperelation for primitive typer byte ≤ short ≤ int ≤ long ≤ float ≤ double char boolean double d; int i; d =
GP7, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 7 Slides ligger på nettet. Du er velkommen til at printe dem nu. Vi begynder.
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.
PD – kursusgang 3 Introduktion til Java Script. Mål Viden om hvordan JavaScripts indlejres i HTML dokumenter Viden om programmering i JavaScript  Erklæring.
Intro Siden sidst: evaluering på opgaver og virtuel kursus.
Intro Siden sidst: evaluering på opgaver og virtuel kursus Kursussammensætning: forelæsning – læse – arbejde selvstændigt – newsgroup – øvelsestime – aflevering.
Opfølgning på Dygtig Skildpadde (Michael) To algoritmeskabeloner findEn findAlle Primitive typer (forfremmelse og begrænsning) Identitet versus lighed.
GP4, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 4 Vi begynder Slides ligger på hjemmesiden. Du er velkommen til.
GP9, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 11 Slides ligger på nettet. Du er velkommen til at printe dem nu. Vi begynder.
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
Tekst filer Tekstfiler opbygges normalt af linier, hvor disse ikke behøver at være samme længde. Når man skal arbejde med tekstfiler, ønsker man metoder.
Effective Java Blå gruppe. Item 18: Interfaces frem for abstrakte klasser Kan implementeres i klasser der ikke nedarver Eksisterende klasser kan nemt.
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.
DAIMIIntroducerende objektorienteret programmering4B.1 Grundlæggende og Reference Typer i Java Typer, tilstand, erklæring, reference- og værdi semantik,
Kari Rye Schougaard, Ph.d.-stud. Værktøjer og Teknikker, 2006 A A R H U S U N I V E R S I T E T DATALOGISK INSTITUT Java på 20 minutter (eller lidt mere)
 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.
Jesper Mosegaard Multimedie Programmering E2003 MMProg uge44 Java til Lingo Klasser, statements og lister.
Forelæsning Uge 2 – Torsdag Java syntax og style guide Sætninger –Simple sætninger (assignment, interne og eksterne metodekald) –Sammensatte sætninger.
Algoritmeskabeloner findOne, findAll, findNoOf, findSumOf Primitive typer (forfremmelse og begrænsning) Identitet versus lighed (for objekter, herunder.
Forelæsning Uge 2 – Torsdag
Forelæsning Uge 4 – Mandag
Forelæsning Uge 4 – Mandag
Klasser og objekter (Afsnit i manualen).
Studiepraktik Thomas Bøgholm Mikkel Hansen Jacob Elefsen
Programmering.
Forelæsning Uge 4 – Torsdag
Præsentationens transcript:

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 Martin Lillholm

GP5, Martin Lillholm 2 Obligatorisk opgave Var opgaven til forrige onsdag 1.For nem 2.For svær 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å?

GP5, Martin Lillholm 3 Sidste gang Afviklingsrækkefølge igen (flow of control) Boolske (logiske) udtryk Sammenligningsoperatorer og logiske operatorer (Relational and logical operators) Betingede sætninger og sammenligning af data –if og switch sætninger Løkkekonstruktioner –for, do, while konstruktioner Programblokke (block statements) Grafik med løkker og betingede sætninger

GP5, Martin Lillholm 4 Denne gang Tabeller (arrays) Tabeller med mere end en dimension Tabeller med objekter Kommandolinieargumenter Klassen ArrayList Indlæsning fra tekstfil

GP5, Martin Lillholm 5 Tabeller – motivation (1) Opgaven lyder: Indlæs tre tal og beregn deres gennemsnit.

GP5, Martin Lillholm 6 Tabeller – motivation (2) Opgaven lyder: Indlæs hundrede tal og beregn deres gennemsnit.

GP5, Martin Lillholm 7 Tabeller (arrays) En tabel er en liste af værdier En tabel med N elementer har første indeks 0 og sidste indeks N-1 scores Hele tabellen har et navn Hver værdi har et heltals indeks Tabellen her er en tabel af heltal med 10 elementer og indeks fra 0 til 9

GP5, Martin Lillholm 8 Tabeller En given værdi refereres ved tabelnavnet efterfulgt af et indeks (et aritmetisk (heltals) udtryk) i [] ’er Altså giver scores[2] 94; værdien på tredie plads i tabellen scores[2] fungerer fuldstændig som enhver anden heltals ( int ) variabel: scores[2] = 89; int first = 2; scores[first] = scores[first] + 2; mean = (scores[0] + scores[1])/2; System.out.println ("Top = " + scores[5]);

GP5, Martin Lillholm 9 Tabeller En tabel gemmer altså flere værdier af samme type Typen kan er enten en primitiv type eller en klasse type (fuldstændig ligesom en almindelig variabel) Vi kan altså have tabeller af heltal ( int ), decimaltal ( double ) eller tabeller af strenge ( String ) eller eksempelvis personer ( Person ), hvis sidstenævnte er en veldefineret klasse I praksis er tabeller objekter og en tabelvariablen er altså i sig selv kun en reference De faktiske tabeller der refereres af en tabel variabel skal altså instantieres som alle andre objekter scores

GP5, Martin Lillholm 10 Erklæring af tabeller Tabeller Erklæres som: type[] identifier; Eksempler: int[] scores; boolean[] flags; String[] names; Altså angiver vi ingen størrelse i erklæringen, men kun at der er tale om en tabel af en bestemt type Alternativ syntaks: type identifier[]; altså: int scores[];

GP5, Martin Lillholm 11 Instantiering af tabeller Som for alle andre objekter med kommandoen new Her angives størrelsen af den faktiske instans En instans kan ikke ændre størrelse, men En tabel variabel kan sættes til at referere en ny instans med en anden størrelse float[] prices = new float[500]; boolean[] flags; flags = new boolean[20]; char[] codes = new char[1750]; codes = new char[2000];

GP5, Martin Lillholm 12 Tabeller – motivation (3) Opgaven lyder: Indlæs hundrede tal og beregn deres gennemsnit.

GP5, Martin Lillholm 13 En initialiseringsliste kan benyttes samtidig med erklæring (ligesom vi kan initialisere almindelige variable) Værdierne i listen skrives i {} ’er og adskilles af kommaer I praksis bliver bliver tabellen både erklæret og instantieret (man ”sparer” altså den implicitte new kommando; tabellens størrelse svarer til antallet af elementer i listen) Eksempler (for simple typer): Det er kun ved initialisering konstantlister kan bruges til at tildele værdier til tabeller (Hvorfor?) Initialisering int[] units = {147, 323, 89, 933, 540,269, 97, 114}; char[] letterGrades = {'A', 'B', 'C', 'D', ’F'};

GP5, Martin Lillholm 14 Eksempel på brug af tabeller ”Almindeligt” brug Iterator – benyttes når alle elementer vil tilgåes fra laveste til højeste indeks L&L side 373.

GP5, Martin Lillholm 15 Tabellers indeks En tabel har altid en fast størrelse når først den er instantieret Indekset benyttes til at tilgå et specifikt element (en variabel) i tabellen Går fra 0 til N-1 (hvor N er tabellens størrelse) ArrayIndexOutOfBoundsException undtagelsen (exception) kastes (throw), hvis man forsøger at benytte et indeks uden for disse grænser – mere om undtagelser senere i kurset Fænomenet kaldes grænsekontrol (bounds checking) double[] codes = new double[100] for (int index=0; index <= 100; index++) codes[index] = index*50 + epsilon; off-by-one

GP5, Martin Lillholm 16 Tabellers indeks Enhver tabel har en offentlig ( public ) konstant length, der indeholder tabellens størrelse Den tilgåes gennem tabelnavnet: scores.length Bemærk at length er tabellens størrelse og ikke sidste tilladte indeks – sidste lovlige indeks er altså length-1

GP5, Martin Lillholm 17 Eksempel

GP5, Martin Lillholm 18 Eksempel

GP5, Martin Lillholm 19 Tabeller som parametre En tabel kan på lige fod med andre objekter benyttes som en parameter Som for andre objekter er det referencen og ikke selve tabellen, der kopiers til den formelle parameter (den formelle og den aktuelle parameter refererer altså samme ”fysiske” tabel – i modsætning til primitive typer) Altså: Hvis man ændrer indholdet af en tabel (givet som parameter) i en metode ændres indholdet også udenfor metoden Enkelte tabelelementer kan også benyttes som parametre: System.out.println (score[3]);

GP5, Martin Lillholm 20 Tabeller med objekter Elementer i en tabel kan være objekt-referencer Den følgende erklæring allokerer plads til 5 referencer til objekter af typen String: String[] words = new String[5]; Men den allokerer ikke de fem strengobjekter, men indeholder derimod 5 referencer Altså skal hvert objekt i et en med objekter instantieres separat.

GP5, Martin Lillholm 21 Tabeller med objekter Vi erklærer følgende tabel: String[] words = new String[5]; words System.out.println (words[1]) ville på nuværende tidpunkt resulterer i en NullPointerException “friendship” words - - “loyalty” “honor” Efter instantiering af words[0]..words[2]

GP5, Martin Lillholm 22 Leg med tabeller … i BlueJ Udskriv en tabel Find minimum/maksimum Sum af en tabels elementer Tabeller som argumenter Tabeller med objekter … hvis tiden tillader Find et element … hvis tiden tillader Sortering … hvis tiden tillader

GP5, Martin Lillholm 23 Strengkonstanter (string literals) igen Husk at strengobjekter kan dannes ved brug af strengkonstanter (implicit kald af new ) Altså kan man initialisere tabeller af strenge med eksempelvis: String[] verbs = {"play", "work", "eat", "sleep"}; String[] verbs = {new String(“play“), …} String[] verbs = new String[4]; verbs[0] = “play”; verbs[1] = “work”; …

GP5, Martin Lillholm 24 Tabeller med objekter – eksempler GradeRange og Grade side i BlueJ Tunes, CDCollection og CD side i BlueJ

GP5, Martin Lillholm 25 Kommandolinieargumenter Benyttes til at give data fra kommandolinien til et program (Eksempelvis kommandoen cd Java, javac MyClass.java ) Selvom java programmer kaldes gennem JVM ( java ) kan de også modtage kommandolinieargumenter main metodens signatur indikerer at main ”tager” en tabel af strenge ( String ) som parameter Eksempelvis vil følgende give en tabel med strengene en test på plads 0 og 1 i tabellen (normalt args ): java MyClass en test

GP5, Martin Lillholm 26 Kommandolinieargumenter Bemærk at kommandolinieargumenterne er en tabel af strenge – også selvom man skriver tal Konvertering kan være nødvendig Som med al anden I/O rige fejlmuligheder... Eksempel i BlueJ hvis tiden tillader det

GP5, Martin Lillholm 27 To-dimensionelle tabeller En ”almindelig” tabel indeholde en liste af værdier eller objekt-referencer En to-dimensionel tabel er faktisk en tabel af tabeller en dimension to dimensioner

GP5, Martin Lillholm 28 To-dimensionelle tabeller En to-dimensionel tabel erklæres ved at angive hver dimension for sig: int[][] scores = new int[12][50]; Et element tilgåes ved at angive to indeks (heltals udtryk) value = scores[3][6]; Eksempler: TwoDArray side 399 i L&L SodaSurvey side 400 i L&L

GP5, Martin Lillholm 29 Fler-dimensionelle tabeller Vi kan tænke på en tabel med 3 dimensioner som en kube af værdier eller objektreferencer: String[][][] nameCube = new String[10][10][10]; Mere end 3 dimensioner kan være svært at forestille sig, men intet forhindrer os i at benytte det alligevel: String[][][][] inventory = new String[2][5][10][20]; int wareHouse = 1; int storageRoom = 4; int section = 6; shelve = 16; inventory[wareHouse][storageRoom][section][shelve] = ”boots”; Hver dimension kan have forskellige størrelser

GP5, Martin Lillholm 30 Dynamiske tabeller – ArrayList klassen ArrayList klassen er en del java.util pakken Som tabeller kan den benyttes til at gemme en liste af værdier eller referencer og hver værdi kan tilgåes vha. et indeks Man kan ikke bruge []- syntaksen til ArrayList I stedet benyttes metoderne add(...) og get() Til gengæld er ArrayList tabeller dynamiske; dvs. de udvides og indskrænkes med antallet af elementer, der indsættes eller tages ud. Man angiver således ikke nogen størrelse fra starten: ArrayList scores = new ArrayList();

GP5, Martin Lillholm 31 Dynamiske tabeller – ArrayList klassen Elementer indsættes i ”halen”, hvis der ikke angives eksplicit indeks Hvis der indsættes på en allerede optaget indeks rykkes indholdet fra og med det indeks en plads frem (”mod højre”). Det nye element indsættes og listen er blevet en længere Tilsvarende bliver listen en kortere hvis metoden remove(...) benyttes Husk at add og remove ”midt i listen” påvirker de resterende elementers indeks I sin originale form gemmer ArrayList altid objekter af typen Object … mere om det senere i kurset Brug indtil videre udgaven, hvor man eksplicit angiver type: ArrayList reunion = new ArrayList ;

GP5, Martin Lillholm 32 Dynamiske tabeller – ArrayList klassen ArrayList er oftest langsommere end en tilsvarende ”almindelig” tabel. Hvorfor ? Benyt altid tabeller, hvis det er muligt; specielt i tilfælde, hvor man kan bestemme pladsbehovet Benyt ArrayList, hvis pladsbehovet ikke kendes på forhånd Eksempel: Beatles side 405 i L&L

GP5, Martin Lillholm 33 Indlæsning af tekstfiler med Scanner klassen Vi har tidligere set Scanner klassen brugt til at læse input fra ”standard input” via System.in Kan også benyttes til at indlæse fra en tekstfil: Scanner scanStudents = new Scanner (new File (”BMI.txt”)); Et eksempel på en normal ”standard” for data i tekstfiler er komma-separerede felter: Karen Blixen, 162, 65 Martin Andersen Nexø, 180, 80 Herman Bang, 175, 75 scanStudents.useDelimiter("\\s*[\\n,]\\s*"); Definerer en passende feltadskiller.

GP5, Martin Lillholm 34 Indlæsning af tekstfiler med Scanner klassen Eksempelvis kan en linie fra filen nedenfor indlæses som: name = scanStudents.next(); height = scanStudents.nextInt(); weight = scanStudents.nextInt(); Karen Blixen, 162, 65 Martin Andersen Nexø, 180, 80 Herman Bang, 175, 75 Et helt andet eksempel: URLDissector side 240 i L&L