View
8
Download
0
Category
Preview:
Citation preview
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.
Recommended