Föreläsning 1: Intro till kursen och programmering Kursens hemsida http:www.it.uu.se/edu/course/homepage/prog1/ht12 Studentportalen http://www.studentportalen.uu.se UNIX-konton (systemansvariga P4118) Lärare: Tom Smedsaas, Tom.Smedsaas@it.uu.se rum P2414, tel: 471 2989 Anna Eckerdal, Anna.Eckerdal@it.uu.se rum P2415, tel: 471 7893 1
Kursmaterial Kursbok: o o o Introduction to computing & programming with Java, Guzdial and Ericson; (Ej för Programmeringsteknik 2) Java software solution, Lewis & Loftus; Eller motsvarande Material på webben, t.ex o o o Kurshemsida: lektionsmaterial, föreläsningsanteckningar Studentportalen: KONTROLLERA SJÄLV FRAMSTEG Dokumentation av programmeringsspråket java 2
Kursmaterial (forts) Programmeringsmiljöer, minimalt: en editor (egentligen en IDE) en kompilator och en javamotor Integrerade miljöer ( IDE ): DrJava BlueJ Eclipse NetBeans... Tips: Installera på egen dator, se kurshemsidan. Kan arbeta med egen laptop i datasal 3
Kursupplägg 6 lektioner OK använda egen laptop i datasalarna Arbeta två och två: byts av vid tangentbordet! Kan utföras hemifrån Ingen redovisning men rekommenderas starkt! Gör klart innan nästa föreläsning Mycket tid vid tangentbordet! 6 obligatoriska uppgifter Redovisas muntligt i datasal. Börja i tid! Får arbeta och redovisa två och två Sammanlagt 21 tillfällen i labsal (UNIX-salar Pollax) Föreläsningar (9) Tentamen (obligatorisk) - skriftlig 4
Examination Obligatoriska uppgifter (3hp) Tentamen (2hp) Lektionerna är frivilliga, men vi rekommenderar starkt att ni gör dem, och gör dem färdiga innan nästa föreläsning 5
Kursmål Redogöra för de grundläggande begreppen klass, objekt, inkapsling och därtill hörande underbegrepp; Analysera problem och designa lösningar genom att använda ovanstående begrepp; Använda programmeringsspråk Java genom att förklara vad ett givet program utför skriva och använda klasser som innehåller instansvariabler, metoder och konstruktorer Skriva program med flera samverkande klasser; Använda en programutvecklingsmiljö; Testa och felsöka program. 6
Lektion 1 Innehåller mycket material, men med kunskaper i Matlab kan man (kanske) hoppa över en del och komma igenom det mesta (utom de avslutande övningsuppgifter) Inställningar av DrJava i UNIX-lab Intro till DrJava och intro till Java: Aritmetik, uttryck, tilldelningar. I mån av tid: tecken och strängar Övningsuppgifter, teorifrågor 7
Varför ska man lära sig programmera? Datorer och program finns överallt Programmering = problemlösningsverktyg Användbart i utbildning och yrkesliv Java: en bra grund OOP: spritt på universitet och industri Kul! 8
Vad man lär sig... Analysera och strukturera problem Modellera översätta problemet till datorn Få en bild av: Vad innebär programmering? Programmeringstänk Vad menas med objektorienterad programmering? Programmeringsbegrepp: objekt, klass, metod... Syntax: språkets byggstenar (if, while,...) 9
Ex. drjava, grafik/turtles World w = new World(); Turtle t = new Turtle(w); t.turn(5); t.forward(8); int i=1; int move=3; while (i<50) { t.forward(move); t.turn(20); Thread.sleep(100); i=i+1; move=move+1; } 10
Vad är ett program? En samlad ordning instruktioner som talar om för datorn vad vi vill att den skall göra. Datorn förstår bara 1:or och 0:or Instruktionerna måste egentligen alltså ges på ett språk som består av enbart av nollor och ettor 11
Programmering i begynnelsen De första datorerna (instruerades) programmerades genom att ställa in strömbrytare och koppla ihop kablar. Detta representerade sekvenser av 1 or och 0 or. Programmeringsspråket bestod alltså av strömbrytare/kablar 12
På hålkort (7 rader ggr 80 kolumner) kunde man lagra instruktioner (programsatser), t.ex. ett kort med instruktionen (högnivåspråk): x=16 Instruktionen består av fyra tecken. Man kodade tecken till binära tal (7-bit). De fyra tecknen i exemplet lagras som binära tal (7 bit) i kolumn 1-4 på kortet. I första kolumnen lagras tecknet x, i 2:a tecknet =, i 3:e tecknet 1 och i 4:e tecknet 6 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 x = 1 6 13
För att programmera behövs ett språk Tre olika typer av språk Maskinspråk (maskinkod) språket man programmerade i datorns begynnelse. Assemblerspråk Högnivåspråk 14
Maskinspråk Datorns eget språk Språket består bara av nollor och ettor Olika sorters datorer har olika språk Ex. på 3 st maskinkodsinstruktioner 1100 1000 1001 1111 0100 0011 1011 0001 0110 0011 1011 1000 Knöligt att prata med datorn via ett sådant (lågnivå)språk! 15
Högnivåspråk exempel y = a*x*x + b*x + c; z = {1,2,3,4}; sum = 0; tal = 1; while (tal<=99) { sum = sum+tal; tal = tal+2; } print(sum); World w = new World(); Turtle t = new Turtle(w); t.turn(5); t.forward(8); 16
Högnivåspråk Instruktioner av ord och fraser Lättare att läsa/förstå för människan, men ej för datorn. Instruktionerna måste översättas till maskinkod Översättningen kallas kompilering och görs med ett program kompilatorn. Instruktionerna kan fungera på olika datortyper, men måste kompileras till rätt maskinkod. 17
Mer om högnivåspråk Finns inbyggda funktioner/metoder, bibliotek Språk stöder olika sorters programmeringsprinciper: exvis ett objektorienterat språk Källkod och kompilator Ett språk har en syntax, dvs en grammatik Instruktionerna kan fungera på olika datortyper, men måste kompileras till rätt maskinkod. 18
Vilket högnivåspråk? Det finns många olika programmeringsspråk Se t ex http://en.wikipedia.org/wiki/programming_language Kan skriva program i vilket du vill Datorn bryr sig inte om vilket, eftersom det översätts till maskinkod. Språket har däremot betydelse för programmeraren. Hur lång tid tar det att skriva programmet? Hur svårt är det att ändra programmet? Hur lång tid tar det att köra programmet? 19
Programmeringsspråket Java Objektorienterat Syntaktiskt likt språk som C++ och C Stor mängd fördefinierade standardiserade komponenter (klasser): Internet Grafik Implementerat på alla vanliga datorsystem Fritt att ladda ned från Internet
Java-språkets beståndsdelar På låg nivå: konstanter till exempel 42 och -3.14 operatorer till exempel +, = och > variabler till exempel x och numberoffiles reserverade ord till exempel int, if och class specialtecken till exempel { och }
Java-språkets beståndsdelar (forts) Ovanstående sätts ihop till deklarationer: int a, b; double x; och (utförande) satser: a = 2; b = a*a + 1; System.out.print( Math.sin(b) ); Deklarationer och satser sätts ihop till metoder (funktioner) som följer syntax-(språk-)reglerna int roll() { return value = (int) (Math.random()*6) + 1; }
Java-språkets beståndsdelar (forts) Deklarationer och metoder sätts ihop till klasser public class Dice { private int value; public int roll() { return value = (int)(math.random()*6) + 1; } public int getvalue() { return value; } } Klasser samlas i paket (men det tar vi inte upp här och nu)
Identifierare Identifierare används som namn på variabler, metoder, klasser, mm. Exempel: myname Syntax: en bokstav följt av bokstäver, siffror och/eller understrykningstecken (x1 ok, 2f fel!) Nationella bokstäver är tillåtna men... Skiljer på versaler och gemena. Namngivning viktigt! (namn, adress bättre än x1, x2) Följ de namnkonventioner som nns! (Introducerar fi vi succesivt)
Deklarera variabler I Matlab: x_koordinat = 2; I Java: int x_koordinat = 2; // int betyder integer Variabler och konstanter måste deklareras, dvs tala om om du t ex behöver ett decimaltal eller heltal, och om det ska vara ett stort eller litet tal.
Datatyper Variabler och konstanter måste deklareras. Primitiva datatyper (till skillnad från objektreferenser) i Java. Heltalstyper och exempel: byte 1, -72 short 257 int 63246 int a = 4; long 123456789099 Flyttalstyper: float 1F, 0.5F double 1., -2e-5 double height = 7.8; Teckentyp: char x, +, 1 Logisk typ: boolean true, false
Datatyper (forts) byte 8 bitar [-128, 127] short 16 bitar [-32768, 32767] int 32 bitar ungefär [ 2*10 9, 2*10 9 ] long 64 bitar 18 ungefär [ 9*10, 9*10 18 ] float 32 bitar ungefär ±3.4*10 ±38, 7 siffrors noggrannhet double 64 bitar ungefär ±1.7*10 ±308, 15 siffrors noggrannhet
Datatyper (forts) Vad skiljer heltalstyper från yttalstyper? fl Heltal kan inte ha decimaldelar (naturligtvis) Heltalsaritmetiken är exakt (är det alltid sant?) Flyttalen kan ha decimaldelar Flyttalen kan inte alltid representeras exakt Flyttalsaritmetik är inte alltid exakt Vad skiljer olika heltalstyper från varandra? Olika talområden Vad skiljer olika yttalstyper från varandra? fl Olika omfång (största och minsta värde) Olika noggrannhet
Variabler En variabel har 1. ett namn även kallad identi erare fi 2. en typ dvs en mängd värden 3. ett värde ur ovanstående mängd Variabler måste alltid deklareras med typ och namn. Exempel: double x, y; int pagelength; Man kan ange värde i samband med deklarationen. Exempel: double dissipation = 0.5; int linesperpage = 60; boolean first = true; Deklarationer och satser avslutas med semikolon.
Operatorer De vanliga aritmetiska: +, -, *, /, % (rest). Ingen upphöjt till. Tilldelning = Ökning och minsknings ++ och -- (pre- och postfix- varianter) Aritmetik med tilldelning: +=, -=,... Relations: ==,!=, <, <=,... Logiska:!, &&,,...... Vanliga prioriteter, ändras med parenteser.
Tänk på Heltalsaritmetik Operationer med heltalstyper ger alltid heltalsresultat. Trunkering vid division. Exempel: x=2/3; //ger 0 y=17/9; //ger 1 Tilldelning ( = ): är inte matematiskt lika med! Regel: Från höger till vänster, inifrån och ut Exempel: x = 2*(3+4); (MEN 3=x; är fel!) En variable deklarerad som long (64 bitar) får inte plats i en variabel deklarerad som int (32 bitar), men tvärt om. Exempel: int n = 10; double h = 238/n; // Ok, heltal till double, men int b = h*0.12; //FEL, h är double
Typkonvertering Man kan ibland göra en tvingande typkonvertering, exempel: int x = 2/3; // resultatet blir 0 double x = 2/3; // resultatet blir 0.0 double x = 2.0/3; // resultatet blir 0.666667 double x = (int)(2/3) // Typkastning, resultatet blir 0.666667 Observera att typkastning kan leda till helt felaktigt resultat! Exempel: short i = 123456789; // Ger felutskrift kompileringsfel short i = (short)123456789; // Ej felutskrift men galet resultat
Matematiska funktioner (metoder) double y = Math.pow(5,3); //beräknar 5 upphöjt till 3 Exempel på fler metoder i klassen Math: Math.sin(x) Math.exp(x) //testa Math.exp(1) Math.log(x) Math.sqrt(x) Math.random() Math.pow(x,y) x och y är av typen double (eller någon typ som automatiskt kan konverteras till double) Metoderna returnerar ett värde av typen double
Gör & kör Java Programtext (sk källkod, skrivs i texteditor, t ex drjava).java-fil Javabytekod,.class-fil Kompilator (ett program som kollar syntaxen och översätter till bytekod) Interpretator exekverar, dvs kör, bytekoden
Lite datorhistoria Jag tror det finns en marknad i världen för kanske fem datorer. IBMs styrelseordförande Thomas Watson, 1943 Datorer behöver i framtiden inte väga mer än 1,5 ton. Popular Machines 1949 Det finns inget skäl till att någon skulle vilja ha en dator i sitt hem. Ken Olsen, Digital, 1977 35