kursinfo objektorienterad programmering undervisning ...€¦ · kursinfo lärandemål, 2 ur...

9
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ärare Kursansvarig, föreläsningar och övningar Björn von Sydow Labbhandledning Emil Djupfeldt, Pelle Evensen, Maria Öhrman, Björn von Sydow Rekommenderad litteratur Nå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 in Java Bästa boken; säljs av nätbokhandlar. Kursinfo Examination Laborationer Sex obligatoriska programmeringsuppgifter. Görs i grupper om två personer. Deadlines enligt kursens webbplats. Första labben ska lämnas in i morgon! Tentamen Skriftlig tentamen 12 mars på förmiddagen. Kursbok får inte medföras till tentan. Ett referensblad (två sidor) om Java medföljer tentatesen.

Upload: others

Post on 28-Jan-2021

4 views

Category:

Documents


0 download

TRANSCRIPT

  • 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.