Præsentation er lastning. Vent venligst

Præsentation er lastning. Vent venligst

GP2, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 2 Vi begynder 9.15. Slides ligger på hjemmesiden. Du er velkommen til.

Lignende præsentationer


Præsentationer af emnet: "GP2, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 2 Vi begynder 9.15. Slides ligger på hjemmesiden. Du er velkommen til."— Præsentationens transcript:

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

2 GP2, Martin Lillholm 2 Praktiske Oplysninger Nyhedsgruppe –it-c.courses.GP –Via http://webmail.itu.dk/http://webmail.itu.dk/ Afleveringsopgaver –Offentliggøres onsdag (senest fredag); afleveres senest efterfølgende onsdag –Afleveres til René Kofoed –I grupper af to personer –Papirkopi med ”rapport”, programmer og dokumenteret uddata i dueslag foran studieadministrationen –Forside med kursusnavn, instruktornavn og navn(e) og CPR-numre på gruppens medlemmer (maks. 2) –e-mail med programmer i teksformat (ASCII), der kan oversættes... såfremt I fik det til at virke... –Står altsammen i opgaveformuleringen...

3 GP2, Martin Lillholm 3 Sidste gang En datamats opbygning og miljø –CPU, primært lager, sekundært lager, ydre enheder, netværk, internet, WWW Programmeringsprocessen –Problem, løsningsforslag (Algoritmer+datastrukturer), implementation (programmering), fejlretning, afprøvning (Java) programmer –Klasser, objekter, syntaks, semantik, reserverede word, Java programmers ”anatomi” Oversættelse og programafvikling –Kildekode, editor (ex. Notepad ); byte-kode, oversætter ( javac ), afvikling, køretidsmiljø ( java ). Tre slags Java programmer –”Almindelige” via konsol, programmer med GUI, Appletter

4 GP2, Martin Lillholm 4 Denne gang Mere om oversættelse, køretidsmiljø, klasser, objekter, Java programmers anatomi Navne (identifiers) Variable (variables) Typer (types) Operatorer (operators) Udtryk (expressions) Bibliotekter (libraries) Mere om Appletter, GUI og grafik

5 GP2, Martin Lillholm 5 Hvad er programmering egentlig… Problem / opgave Analyse Algoritmer + datastrukturer Design (evt. OO) Implementation (i eksempelvis Java) Oversættelse Afprøvning Find det største af 10 positive tal …

6 GP2, Martin Lillholm 6 Fra kildekode til ”kørende program” (Java) Kildekode (Editor) Oversætter Hello.java tekst (ASCII) Hello.class (Java mellemkode eng. bytecode) Resultat Fortolker (JVM) Java Virtual Machine JIT Opgave Løsningsforslag

7 GP2, Martin Lillholm 7 Oversættelsestid og køretid Kildekode Oversætter Fortolker (JVM) Syntaks- og typefejl Køretids- og løsningsfejl

8 GP2, Martin Lillholm 8 Java programmers elementer (igen) White spaces –mellemrum (space), tabulator stop ( \t ), linieskift ( \n ) Kommentarer // Enkelt linies kommentarer /* Kommentarer over flere linier... */ Reserverede ord; grundstammen af Java. Navne (Identifiers)

9 GP2, Martin Lillholm 9 Et Java programs anatomi class KlasseNavn { felter; // objekternes tilstand konstruktører; // kaldes ved instantiering metoder // objekternes arbejdsheste public static void main (String[] args) { lokale variable, kommandoer, udtryk... } Flere klasser i samme fil... kun én med main metode.

10 GP2, Martin Lillholm 10 Navne (Identifiers) Bruges til alle programelementer der skal/kan navngives: –Klasse –Felt –Metode –Parameter –(Lokal) variabel, –Pakker Regler for navne: –Skal begynde med et Java bogstav –Derefter et valgfrit antal Java bogstaver eller Java tal –Java bogstav: A,...,Z, a,...z, $, _ (plus diverse...) –Java tal: 0,...,9 –Ingen mellemrum! –Syntaksdiagram... (side 32 L&L)

11 GP2, Martin Lillholm 11 Mere om Navne Eksempler: –Lovlige: HelloWorld, HelloGUI, label, i, j,... –Ulovlige eksempler: 3label, !navn Konventioner –Klasser, pakker med stort begyndelsesbogstav og store bogstaver for hver nyt ord: HelloApplet –Felter, parametre, variable, metoder med lille begyndelsesbogstav og store bogstaver for hvert nyt ord: labelColor –(Navngivne) konstanter udelukkende med store bogstaver og en _ (underscore) til at adskille ord: MAX_HEIGHT –Se i øvrigt L&L appendiks F

12 GP2, Martin Lillholm 12 Konstantudtryk (Literals) Benyttes til at give programmer konkrete data/”oplysninger” Inddelt i en række typer –Tal int: 1 2 3 45 -17 double: 0.1, -45, 243.89 –Bogstaver char: ’a’ ’3’ ’K’ ’ ’ (I virkeligheden også tal: ASCII (256), UNICODE(65536)) –Tekststrenge string: ”Hello World” ”Velkommen til GP!” ”h” ”” Escape Sequences: L&L side 67 –Boolske værdier (sandhedsværdier) Boolean: true false

13 GP2, Martin Lillholm 13 Et eksempel

14 GP2, Martin Lillholm 14 Metoder – runde et Metoder benyttes til at navngive og samle kommandoer er løser en bestemt opgave Metoder kan modtage oplysninger (parametre/argumenter) og returnerer oplysninger (returværdi) Metoder kaldes typisk af andre metoder... Programafviklingen starter altid i en metode – main -metoden Metoder og opgaveabstraktion

15 GP2, Martin Lillholm 15 Mere om metoder int metodenavn (int a, int b) { // metode krop variabelErklæring1; kommando1; kommando2; variabelErklæring2;... kommando3; return... } int, double, char, boolean, string Skal nu se på kroppens ”indmad”.

16 GP2, Martin Lillholm 16 Lokale variable En navngiven plads i lageret/hukommelsen der kan tildeles en værdi og aflæses en eller flere gange. Pladsen allokeres af operativsystemet. En variabel er lokal når den erklæres i en metode En variable har altid en type –Primitive typer: Heltal: byte, short, int, long Bogstaver: char Decimal tal: float, double Boolske værdier: boolean Hvorfor typer? Lagerplads, robusthed.

17 GP2, Martin Lillholm 17 Typer af tal... Type byte short int long float double Lager 8 bits 16 bits 32 bits 64 bits 32 bits 64 bits Min Værdi -128 -32,768 -2,147,483,648 < -9 x 10 18 +/- 3.4 x 10 38 med 7 betydende cifre +/- 1.7 x 10 308 med 15 betydende cifre Max Værdi 127 32,767 2,147,483,647 > 9 x 10 18

18 GP2, Martin Lillholm 18 Erklæring af variable En variable skal erklæres inden den kan benyttes i en metode (final) type identifier; int height; char firstLetter; boolean isDigit; String firstName; Syntaksdiagram L&L side 69

19 GP2, Martin Lillholm 19 Tildelinger En variable kan tildeles en værdi med en tildelingssætning. Variable tildeles enten et konstantudtryk eller resultatet af et udtryk; se senere. Syntaksdiagram L&L side 72 height = 23; firstLetter = ’m’; isDigit = true; firstName = ”Martin”;

20 GP2, Martin Lillholm 20 Samtidige erklæringer og initialisering Flere variable af samme type kan erklæres på samme linie Variable kan (initialiseres) tildeles værdier når de erklæres int height, weight=50, size; char firstLetter=’M’; double num1 = 12.23, num2, num3=-23.0; Syntaksdiagram L&L side 69 Højre og venstre side i tildelingssætninger

21 GP2, Martin Lillholm 21 Eksempel 1

22 GP2, Martin Lillholm 22 Eksempel 2

23 GP2, Martin Lillholm 23 Konstanter Konstanter benytte til at navngive størrelser der benyttes en eller flere gange i løbet af et program, men som ikke ændrer størrelse. Eksempelvis matematiske konstanter som PI ; alternativt en maksimalt tilladt højde MAX_HEIGHT. Hvor for nu det? Skal kun ændre et sted. Navngivning er beskrivende. Erklæres og initialiseres samtidig. Kan ikke tildeles en ny værdi. Erklæres og initialiseres som varibable, men med et final foran: final int MAX_HEIGHT = 180; final double PI = 3.1416;

24 GP2, Martin Lillholm 24 Udtryk Et udtryk er en kombination af en eller flere operander og operatorer; for det meste beregninger. Se dog strenge senere. Et aritmetrisk udtryk beregner numeriske resultater og benytter 0 eller flere af aritmetriske operatorer + - * / % (binære og unære operatorer) Hvis en eller flere operander er af en decimaltals type (float, double) bliver resultattypen den tilsvarende decimaltalstype. Udtryk kan indeholde variable. Variable der indgår i udtryk bliver kun ”aflæst” og ændre ikke værdi. Udtryk kan være højresiden i tildelingssætninger (syntaksdiagram side 72) Eksempel 2 igen.

25 GP2, Martin Lillholm 25 Eksempler på udtryk 1+2+3+410 2+3*414 10/52 10/42 10.0/4, 10/4.0, 10.0/4.02.5 int i=4, int j=4; int k; k = i+j;8 k = k+4;12 double x=3, double y=1; double z; z = x/y + 4;7.0 z = 1/3;0 z = 1.0/3;1/3=0.333333

26 GP2, Martin Lillholm 26 Operator Præcedens Udtryk evalueres før tildeling. Udtryk evalueres generelt fra venstre mod højre, dog Har multiplikation og division højere præcedens end addition og division. Parenteser kan gennemtvinge anden række følge. Præcedens niveauOperator 1Unært + - 2* / % 3+ - + 4= Rest ved heltalsdivision Strengsammensætning

27 GP2, Martin Lillholm 27 Eksempler på udtryk og evalueringsrækkefølge a + b + c + d + e 1432 a + b * c - d / e 3241 a / (b + c) - d % e 2341 a / (b * (c + (d - e))) 4123 Hvis du er i tvivl: Brug parenteser, men med omtanke.

28 GP2, Martin Lillholm 28 Eksempel

29 GP2, Martin Lillholm 29 Typekonvertering Java er et stærkt typet sprog. Det kan være nødvendigt og/eller behændigt at kunne konvertere mellem typer. F.eks. ønsker vi nogen gange at benytte et heltal som et decimaltal. Det ændrer ikke på variablens type eller værdi, men kan benyttes som en del af eksempelvis udtryk. Skal altid passe på ikke at tabe information i forbindelse med konverteringer.

30 GP2, Martin Lillholm 30 Type konvertering Widening konvertering: fra en ”mindre” datatype til en ”større”. short -> int, float -> double. Er i reglen sikre og ingen information går normalt tabt. Narrowing konvertering: fra en ”større” type til en ”mindre”. int -> shot, double -> float. Er i reglen usikre og information vil gå tabt.

31 GP2, Martin Lillholm 31 Tildelingskonvertering Tildelingskonvertering (assignment conversion) sker når en variabel af en type bliver tildelt til en variabel af en anden type Kun Widening konvertering ved tildeling Typen og værdien af variablen på højresiden ændres ikke int dollars; float money; money = dollars // dollars værdi konverteres // automatisk til en float

32 GP2, Martin Lillholm 32 Forfremmelseskonvertering Forfremmelse (promotion) sker når operatorer forfremmer deres operander float sum, average; int count; average = sum/count; Sker også ved strengsammensætning; se senere

33 GP2, Martin Lillholm 33 Tvungen typekonvertering (casting) Tvungen typekonvertering er et ”voldsomt” værktøj og bør benyttes med omtanke. Både widening og narrowing er muligt med casting. Gøres ved at sætte den ønskes type i parenteser foran et udtryk. int total, count; float average; average = (float) total/count;

34 GP2, Martin Lillholm 34 Strenge Literaler: ”Martin Lillholm” Strengvariable - tænk indtil videre på dem som almindelige variable... String name = ”Martin Lillholm”; System.out.println(name); System.out.println(”Martin Lillholm”); System.out.print(name);

35 GP2, Martin Lillholm 35 Strengsammensætning (string concatenation)

36 GP2, Martin Lillholm 36 Lidt om grafik og billeder Digitale billeder og/eller grafik består af punkter (pixels) Et billede er typisk ordnet som et rektangel Bredden og højden målt i antal pixels kaldes billedets opløsning (resolution) Det antal (igen bredde og højde) pixels en skærm kan vise kaldes skærmens opløsning

37 GP2, Martin Lillholm 37 Koordinatsystem Hvert punkt i et billede eller på en skærm kan identificeres ved et koordinatpar (x,y) Java og mange andre computersystemer benytter et koordinatsystem med origo i øverste venstre hjørne: Y X(0, 0) (112, 40) 112 40

38 GP2, Martin Lillholm 38 Sort/hvid, gråtoner og farver Sort/hvide billeder repræsenteres typisk som 0=sort og 1=hvid Gråtonebilleder som et tal mellem 0-255 (8-bit) Farvebilleder som en triple (R,G,B), der repræsenterer en blanding af primærfarver rød, grøn og blå R,G og B er typisk tal mellem 0 og 255 –(0,0,0) er sort –(255,255,255) er hvid –(128,128,128) er en gråtone ”halvvejs” mellem sort og hvid –(255,0,0) er rød … osv.

39 GP2, Martin Lillholm 39 Klassen Color Farver i Java repræsenteres ved hjælp af klassen Color, der er indeholdt i pakken java.awt Klassen indeholder en del foruddefinerede farver: Objekt Color.black Color.blue Color.cyan Color.orange Color.white Color.yellow RGB værdier (0, 0, 0) (0, 0, 255) (0, 255, 255) (255, 200, 0) (255, 255, 255) (255, 255, 0)

40 GP2, Martin Lillholm 40 Appletter Et almindeligt Java-program kan køres selvstændigt – ved hjælp af javas køretidsmiljø ( java ) En Java applet er beregnet til at blive overført via nettet og udført i en browser Alternativt kan den udføres med appletviewer En applet har ikke en main -metode paint -metoden kan eksempelvis benyttes i stedet paint -metoden modtager en parameter af typen Graphics Graphics objekter definerer blandt andet en ”tegne-kontekst” Eksempel: Einstein.java (L&L side 97)

41 GP2, Martin Lillholm 41 Html-skal til appletten Einstein The Einstein Applet

42 GP2, Martin Lillholm 42 Stregtegning med Graphics X Y 10 20 150 45 page.drawLine (10, 20, 150, 45); page.drawLine (150, 45, 10, 20); eller

43 GP2, Martin Lillholm 43 Rektangler med Graphics X Y page.drawRect (50, 20, 100, 40); 50 20 100 40

44 GP2, Martin Lillholm 44 Ovaler med Graphics X Y page.drawOval (175, 20, 50, 80); 175 20 50 80 bounding rectangle

45 GP2, Martin Lillholm 45 Sodoku www.websodoku.com (Hvis tiden tillader det )


Download ppt "GP2, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 2 Vi begynder 9.15. Slides ligger på hjemmesiden. Du er velkommen til."

Lignende præsentationer


Annoncer fra Google