-
Objektorienterad programmering
Föreläsning 1
Kursinformation
Allmänt om programmering
Java - några inledande exampel
Grundbegrepp: variabler, uttryck, satser, typer.
Kursinfo
Undervisning
Föreläsningar
Tisdagar 13–15 och fredagar 10–12.
Allmänna begrepp, exempel, demonstrationer.
Övningar
Torsdagar 13–15 läsvecka 1–8.
Problemlösning individuellt samt genomgångar.
Labbhandledning
Måndagar 13–15, onsdagar 13–15 och torsdagar 10–12.
Bokade arbetsplatser och handledare på plats.
Kursinfo
Lärare och kurslitteratur
LärareKursansvarig, föreläsningar och övningar Björn von
Sydow
LabbhandledningEmil Djupfeldt, Pelle Evensen, Maria Öhrman,
Björn von Sydow
Rekommenderad litteraturNågon av
David J. Eck: Introduction to Programming using Java, 5th ed.Kan
laddas ner gratis från nätet.
Jan Skansholm: Java direkt.Vanlig kursbok i kurser på Chalmers;
säljs på Cremona.
Kevin Wayne, Robert Sedgewick: Introduction to Programming
inJavaBästa boken; säljs av nätbokhandlar.
Kursinfo
Examination
LaborationerSex obligatoriska programmeringsuppgifter. Görs i
grupper om tvåpersoner.
Deadlines enligt kursens webbplats.Första labben ska lämnas in i
morgon!
TentamenSkriftlig tentamen 12 mars på förmiddagen.
Kursbok får inte medföras till tentan.
Ett referensblad (två sidor) om Java medföljer tentatesen.
-
Kursinfo
Lärandemål, 1
Ur kursplanen: Efter kursen ska ni kunna
förklara grundläggande begrepp inom imperativ och
objektorienteradprogrammering, speciellt som de realiseras i det
programspråk somanvänds i kursen.
beskriva några standardalgoritmer, för till exempel sortering
ochsökning, samt veta var dessa återfinns i språkets
standardbibliotek.
definiera enkla subrutinbibliotek med utnyttjande av det
användaprogramspråkets datatyper och styrstrukturer.
definiera klasser som modellerar enkla fenomen i
objektorienteradanda, med inkapslade data som avläses och
uppdateras via publikametoder.
Kursinfo
Lärandemål, 2
Ur kursplanen: Efter kursen ska ni kunna
sätta er in i ett givet program, bestående av flera klasser, i
syfte attfelsöka, komplettera eller förbättra programmets beteende
enligtgivna anvisningar.
skriva enkla händelsestyrda program med grafiskt gränssnitt.
använda och söka i programbibliotek för några
standardändamål,som exempelvis grafiska gränssnitt och
datastrukturer.
använda enkla verktyg för att skriva in, kompilera, exekvera
ochdokumentera program.
identifiera situationer i er fortsatta utbildning där
programmering kanvara ett effektivt hjälpmedel i studierna.
identifiera ert behov av ytterligare kunskaper inom
områdetprogrammering och datavetenskap.
Kursinfo
Labbar
Programmering
Programmering
Vad är ett program?
En uppsättning instruktioner som anpassar en dator föratt lösa
en viss klass av problem.
Vad då för instruktioner?Datorns inbyggda instruktioner är
mycket enkla: adderatvå tal, jämför två tal, flytta ett tal i
minnet, . . .
Stora program består av miljontals sådana instruktioner.
Hur kan man skriva sådana program?
Skriv program i språk på högre abstraktionsnivå.
Utnyttja många lager av programbibliotek.
-
Programmering
Programspråk
Olika typer av språk
Imperativa: C, Ada, FORTRAN, . . .
Objektorienterade: C++, Java, C#, Python, . . .
Funktionella: Haskell, ML, F#, . . .
Domänspecifika: Matlab, VHDL, . . .
Varför Java?Imperativt och objektorienterat.
Gratis tillgång för olika typer av datorer.
Bra bibliotek, information på nätet.
Mycket använt.
Programmering
Algoritmer och datastrukturer
Ofta är huvudsvårigheten att finna en braalgoritm, som hittar
lösningen påtillräckligt kort tid (och utan att använda förmycket
resurser i övrigt.)
När man väl har en bra algoritm är det oftainte så svårt att
formulera den i ettprogramspråk.
För många vanliga problem finnsstandardalgoritmer och
tillhörandedatastrukturer. Vi hinner inte diskuteradessa i denna
kurs, men ska använda endel biblioteksklasser med sådanaalgoritmer
och datastrukturer.
Programmering
Software Engineering
En del programutvecklingsprojekt tillhör de mest
omfattandeingenjörsprojekt som kan genomföras (tusentals
programmerare undermånga år).
Att leda och organisera sådana projekt innebär stora utmaningar,
bådetekniskt och administrativt.
Vi kan inte alls beröra dessa svårigheter i den här kursen.
Exempel
Funktioner i matematiken
En funktion i matte
Vi kan definiera t ex f (x) = x2 + 3.Därefter kan vi använda
funktionen med olika argument:T ex har vi att f (7) = 52 (= 72 +
3)och att f (−3) = 12 (= (−3)2 + 3).
Definitions- och värdemängd
Vi måste också specificera definitionsmängden, dvs vilken
mängdargumenten tas från, och vilken mängd funktionsvärdena
tillhör.För f ovan kan dessa mängder till exempel vara
heltalen.
Alternativ definitions- och värdemängd
Vi kan också betrakta f ovan som en funktion med de reella talen
somdefinitions- och värdemängd. Då kan vi också beräknaf (0.6) =
3.36 (= 0.62 + 3).
-
Exempel
Samma funktion i Java
Med heltal som argument och resultat
I Java kan man definiera samma funktion:
public static int f(int x) {return x*x + 3;
}
Försök för tillfället bortse från nyckelorden public, static och
returnsom förklaras senare.
Typen int förekommer på två ställen:
int x säger att argumentet x ska vara ett heltal.
int f . . . säger att resultatet blir ett heltal.
Uttrycket efter return är funktionens resultat
(funktionsvärdet).
Exempel
Vårt första Java-program
Vad blir f (1234)?
Frågan kan besvaras med hjälp av programmet
public class Example1 {
public static int f(int x) {return x*x + 3;
}
public static void main(String[] args)
{System.out.println("f(1234)=" + f(1234));
}}
Det finns många saker att förstå här; vi påpekar bara några på
nästa bild.
Exempel
Mer om Example1
KommentarerViktigast: ni kan inte förstå allt fullständigt nu;
ni måste se flerexempel och förstå bättre efterhand.
Vi har definierat ett program (en klass), som innehåller
definitionenav f och en main-rutin.
Att köra programmet innebär att kommandona i main-rutinen
utförs. Idetta fall finns bara ett enda kommando, en utskrift.
Det som skrivs ut är strängen f(1234)= följt av
funktionsvärdetf(1234) (så + betyder här inte addition).
Att funktionsvärdet (som blir 1522759) skrivs ut innebär
attprogrammet först måste beräkna detta genom att använda
funktionen.
En fråga
Vad betyder argumentet till main-rutinen???
Exempel
Arbetsprocessen
Flera steg krävs innan vi kan få veta funktionsvärdet:
Programtexten skrivs in en texteditor. Man kan använda till
exempelgedit eller emacs.Programmet sparas i en fil, som för vårt
exempel måste hetaExample1.java.
Programmet kompileras (översätts) genom att man i
ettxterm-fönster skriver
> javac Example1.java
Om inga fel upptäcks, så skapas filen Example1.class.
Programmet kan nu köras genom
> java Example1f(1234)=1522759>
-
Exempel
En förbättring av Example1
Ett nytt problem att lösa
Om vi nu vill beräkna f (5678) så måste vi ändra programmet
genom attbyta ut 1234 mot 5678 (på två ställen), kompilera om
programmet och köradet igen.
En bättre idéProgram som körs kan ges kommandoradsargument:>
java Example2 1234> 1522759> java Example2
567832239687>Hur skriver man Example2??
Exempel
Användning av kommandoradsargument
Goda nyheter
main-rutinen har direkt tillgång till kommandoradsargumenten: de
heterargs[0], args[1] osv.
Dåliga nyheter
args[0] osv är en teckensträng, t ex "1234". Vi säger att
args[0] hartypen String. Den kan inte ges som argument till f , som
vill ha ett heltal(av typen int).
Lösningen
Strängen "1234" konverteras till heltalet 1234 av
funktionenInteger.parseInt ur Javas bibliotek.Programmet Example2
ges på nästa bild.
Exempel
Programmet Example2
public class Example2 {
public static int f(int x) {return x*x + 3;
}
public static void main(String[] args) {int n =
Integer.parseInt(args[0]);System.out.println(f(n));
}}
NotVi lagrar resultatet av konverteringen i variabeln n.Sedan
använder vi n som argument till f i utskriftskommandot.
Exempel
En annan matematisk funktion
Vi definierar funktionen
S(n) =n∑
k=1
k2 (= 12 + 22 + . . . + n2)
Frågor
Vad blir S(3)?
Vilken definitionsmängd har funktionen S?
Hur gör du för att räkna ut S(6) i huvudet?
S(6) = 12 + 22 + 32 + 42 + 52 + 62
-
Exempel
Vad blir S(1000)?
Svaret ges av följande Java-program
public class Example3 {
public static int squareSum (int n) {int sum = 0;for (int k=1;
k
-
Exempel
Finns det bättre sätt?
För välstuderade problem som detta exempel finns ibland andra
metoder.
Man kan visa att
squareSum(n) =n(n + 1)(2n + 1)
6
för alla positiva heltal n.Detta ger direkt att
squareSum(100) =1000 · 1001 · 2001
6.
Att komma på bästa sättet att beräkna en funktion man behöver är
iallmänhet ett svårt problem.
Exempel
Att räkna med reella tal
Vad blir 1 + 1/2 + 1/3 + . . . + 1/1000000?
Frågan kan besvaras med hjälp av funktionen
public static double hSum(int n) {double sum = 0;for (int k=1;
k
-
Grunder
Typer
Två sorters typer
I Java finns två sorters typer:
Primitiva typer.
Referenstyper. Vi återkommer till dessa.
Primitiva typer
Åtta inbyggda primitiva typer finns i Java:
Fyra heltalstyper: byte, short, int och long.
Två flyttalstyper: float och double (för "reella tal").
Typen char (för tecken).
Typen boolean (för sanningsvärden).
Ofta använder vi int för heltal och double för flyttal.
Grunder
Värden av primitiva typer
Typ Värdenbyte Heltal i intervallet [−128, 127] (8 bitar).short
Heltal i intervallet [−32768, 32767] (16 bitar).int Heltal lagrade
med 32 bitar (upp till ca ±2 · 109).long Heltal lagrade med 64
bitar (upp till ca ±9 · 1018).
float Flyttal lagrade med 32 bitar (ca 7 sign. siffror).double
Flyttal lagrade med 64 bitar (ca 16 sign. siffror).
char Tecken, lagrade med 16 bitars Unicode.
boolean true och false
Grunder
Uttryck (eng. expressions)FörekomsterUttryck förekommer bland
annat som högerled i tilldelningssatser och somargument i
funktionsanrop.
Olika former
Form ExempelLiteral 37 -3.5 true ’C’Variabel sum n
maxVoltageOperatoruttryck sum + 1.0/i n % 2 == 0Funktionsanrop
hSum(10000) Math.sin(x+y)
Typer
Varje uttryck i ett Javaprogram har en typ som kan bestämmas
avkompilatorn.
Vilka typer har ovanstående exempel?
Grunder
Operatorer
Operatorer på typen int
Aritmetiska operatorer (resultattyp int): +, -, *, /, %.
Jämförelseoperatorer (resultattyp bool): =, ==, !=.
Skiftoperatorer (resultattyp int): .
Operatorer på typen double
Aritmetiska operatorer (resultattyp double): +, -, *, /.
Jämförelseoperatorer (resultattyp bool): =, ==, !=.
Operatorer på typen bool
Logiska operatorer (resultattyp bool): &&, ||.
Unära operatorer
På numeriska typer: +, -. På bool: !.
-
Grunder
Typen String
Textsträngar som "Hello world!" har typen String.
Operatorn + kan ta två strängar som argument; den betyder
dåkonkatenering: "Hi" + " there" är samma sak som "Hi there".
Om den ena operanden till + har typ String så görs den andra om
tillString och konkatenering används.
En viktig skillnad
String s = "10000";int n = 10000;
De två variablerna s och n används på helt olika sätt.
Grunder
for-satsenSyntax-beskrivning: for-statement
for(initialization; continuation-condition; update)
{statements
}
Typvillkor
Typen av continuation-condition måste vara boolean.
Effektfor-satsen exekveras på följande sätt:
1 Exekvera initialization.2 Beräkna värdet av
continuation-condition.
Om värdet är false, avslutas for-satsen.Om värdet är true,
exekveras först statements, därefter update, ochdärefter fortsätter
man med 2).
Grunder
Härnäst
I morgon: Obligatorisk labb. Ni måste vara där och köra ert
förstaJava-program. Handledarna prickar av er när ni gjort vad ni
ska.
På torsdag: Labbtid på morgonen för den som vill öva mer. Övning
påeftermiddagen där vi övar att skriva enkla funktioner och
main-rutiner.
På fredag: föreläsning med nya begrepp. Försök förstå
dagensbegrepp innan dess.
Om du har en egen dator: Ladda ner Ecks bok och läs i kapitel
2.Bestäm dig för om du vill skaffa Jan Skansholms bok i
stället.