Undervisning. Examination

Relevanta dokument
Undervisning. Examination

Undervisning. Examination

Föreläsning 1 & 2 INTRODUKTION

Vem är vem på kursen. Objektorienterad programvaruutveckling GU (DIT011) Kursbok Cay Horstmann: Big Java 3rd edition.

Programmering A. Johan Eliasson

SMD 134 Objektorienterad programmering

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

Du ska nu skapa ett litet program som skriver ut Hello World.

Typkonvertering. Java versus C

Inledande programmering med C# (1DV402) 27+15=42 1 (22)

Introduktion till programmering D0009E. Välkomna!

Programmeringsteknik med C och Matlab

729G04 - Hemuppgift, Diskret matematik

Klasser och objekt i C#

Grundläggande programmering med C# 7,5 högskolepoäng

(Man brukar säga att) Java är... Denna föreläsning. Kompilering av Java. Historik: Java. enkelt. baserat på C/C++ Allmänt om Java

Tentamen OOP

Kapitel 6. f(x) = sin x. Figur 6.1: Funktionen sin x. 1 Oinas-Kukkonen m.fl. Kurs 6 kapitel 1

OOP Objekt-orienterad programmering

Algebra, polynom & andragradsekvationer en pampig rubrik på ett annars relativt obetydligt dokument

Översikt 732G11 PROGRAMMERING 1. Personal. Kursens mål. Litteratur. Kursens innehåll

Hej Då, Karel! Programmering. Vårt första Javaprogram. hh.se/db2004. Java. Grundtyper, variabler och arrayer

I Skapa Hej.java och skriv programmet. I Kompilera med javac Hej.java. I Rätta fel och repetera tills du lyckas kompilera ditt program

Föreläsning 5: Rekursion

Objektorienterad Programmering (TDDC77)

912 Läsförståelse och matematik behöver man lära sig läsa matematik?

1 Datorn som miniräknare. 1.1 Räkneoperationer. 1.2 Variabler

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

SMD 134 Objektorienterad programmering

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet

Idag: Dataabstraktion

Två konstiga klockor

Programmering för språkteknologer I, VT2012. Rum

Sveriges Trafikskolors Riksförbund Film om körkort för nysvenskar Speakertext - Svensk

Vi skall skriva uppsats

Tentamen i Programmering grundkurs och Programmering C

SF1625 Envariabelanalys

Lathund, procent med bråk, åk 8

a n = A2 n + B4 n. { 2 = A + B 6 = 2A + 4B, S(5, 2) = S(4, 1) + 2S(4, 2) = 1 + 2(S(3, 1) + 2S(3, 2)) = 3 + 4(S(2, 1) + 2S(2, 2)) = = 15.

Tillämpad UNIX. Laborations-PM Christian von Schultz, Programpaket och processhantering

Avsikt På ett lekfullt sätt färdighetsträna, utveckla elevers känsla för hur vårt talsystem är uppbyggt samt hitta mönster som uppkommer.

Rekursion: varför? Problem delas upp i mindre bitar algoritm för att lösa problemet erhålls från problemformuleringen

Chapter 3: Using Classes and Objects

Individuellt Mjukvaruutvecklingsprojekt

Objektorienterad Programmering (TDDC77)

Erfarenheter från ett pilotprojekt med barn i åldrarna 1 5 år och deras lärare

Att komma igång. Vad är ett program? Kompilerande-Interpreterande Programmeringsmiljö Hello World! Att programmera och ett enkelt program

Objektorienterad programmering D2

Programexempel: tärningsspel

Introduktion. Den objektorienterade modellen Grundläggande begrepp Klass Klassen som abstraktion

Träning i bevisföring

Introduktion till Datalogi DD1339. Föreläsning 2 22 sept 2014

( ostream ) << ( annan datatyp ) : ostream

Konsten att multiplicera (stora) heltal

Ekvationssystem, Matriser och Eliminationsmetoden

Praktisk programmering

OOP F1:1. Föreläsning 1. Introduktion till kursen OOP Vad är Java? Ett första Java-program Variabler Tilldelning. Marie Olsson

Snabbslumpade uppgifter från flera moment.

Föreläsning 1 & 2 INTRODUKTION

Särskilt stöd i grundskolan

Vad är det och hur definierar vi en Biblioteksfunktioner (math) Top-down-programmering lokala globala variabler Arrays som in-parametrar

Föreläsnings 10 - Överlagring, Konstruerare, Arv, Mer Exceptions, Reguljära Uttryck

Sammanfatta era aktiviteter och effekten av dem i rutorna under punkt 1 på arbetsbladet.

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

Övningshäfte i matematik för. Kemistuderande BL 05

Datorövning 2 Statistik med Excel (Office 2007, svenska)

Systematiskt kvalitetsarbete

Lokal pedagogisk planering i matematik för årskurs 8

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

TDIU01 - Programmering i C++, grundkurs

VÄRDERINGSÖVNINGAR. Vad är Svenskt?

Boken om Teknik. Boken om Teknik är en grundbok i Teknik för åk 4 6.

Handledning för digitala verktyg Talsyntes och rättstavningsprogram. Vital, StavaRex och SpellRight

Tentamen. 2D4135 vt 2005 Objektorienterad programmering, design och analys med Java Lördagen den 28 maj 2005 kl

Programmering A C# VT Ett kompendie över Programmering A (50p) i c# Stefan Fredriksson

SF1620 Matematik och modeller

Programmera en NXT Robot

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

Distribuerade system. CORBA eller RMI

Modul 6: Integraler och tillämpningar

konstanterna a och b så att ekvationssystemet x 2y = 1 2x + ay = b 2 a b

SEPARABLA DIFFERENTIALEKVATIONER

Varför är det så viktigt hur vi bedömer?! Christian Lundahl!

Studiehandledning för kurs:

Introduktion till programmering. Standardfunktioner. Vad används datorer till? Standardfunktioner. Föreläsning 2. Prelude. $ ghci...

Exempel på tentamensuppgifter i LMA100, del 1

Idag. Hur vet vi att vår databas är tillräckligt bra?

Matematik. Bedömningsanvisningar. Vårterminen 2009 ÄMNESPROV. Delprov B ÅRSKURS

Tankar om elevtankar. HÖJMA-projektet

1 Funktioner och procedurell abstraktion

08/11/13. Databasteknik och informationssystem DD1370 F3. Ett urval ur databasen bestäms av en SQL-fråga. Påminnelse: Deadline på tisdag

Examination i. PROGRAMMERINGSTEKNIK F1/TM1 TIN212 (Dugga) Dag: Onsdag Datum: Tid: (OBS 3 tim) Rum: V

Introduktion till programmering. Undervisning. Litteratur och examination. Lärare. Föreläsning 1

Något om permutationer

Föreläsning 2 sept 05 (Onsdag v 36). DD Chapter 2.

Mera om generik. Innehåll. Generik och arv Wildcards Vektorer och generik Generiska metoder. EDA690 (Mera om generik) HT / 24

4-3 Vinklar Namn: Inledning. Vad är en vinkel?

Linjära system av differentialekvationer

Skriva B gammalt nationellt prov

Transkript:

Kursinfo Objektorienterad programmering Undervisning Föreläsning 1 Kursinformation Allmänt om programmering Java - några inledande exampel Grundbegrepp: variabler, uttryck, satser, typer. 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 Fem obligatoriska programmeringsuppgifter. Görs i grupper om två personer. Deadlines onsdagar vecka 1, 2, 3, 5 och 7. Första labben ska lämnas in i morgon! Tentamen Skriftlig tentamen 8 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 Kursinfo Labbar Ur kursplanen: Efter kursen ska ni kunna använda klasser, objekt, variabler, metoder, imperativa styrstrukturer, subklasser, arv och rekursion. förstå och implementera enkla klasser och klass-hierarkier. använda några standardklasser t.ex. grafiska gränssnittsbibliotek, Containerklasser och I/O-klasser. konstruera enkla väl strukturerade (objektorienterade) program utifrån en given uppgift. förklara polymorfism, gränssnitt och felhanteringsmekanismen. Programmering Programmering Programmering Programspråk Vad är ett program? En uppsättning instruktioner som anpassar en dator för att lösa en viss klass av problem. Vad då för instruktioner? Datorns inbyggda instruktioner är mycket enkla: addera två 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. 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 bra algoritm, som hittar lösningen på tillräckligt kort tid (och utan att använda för mycket resurser i övrigt.) När man väl har en bra algoritm är det ofta inte så svårt att formulera den i ett programspråk. För många vanliga problem finns standardalgoritmer och tillhörande datastrukturer. Vi hinner inte diskutera dessa i denna kurs, men ska använda en del biblioteksklasser med sådana algoritmer och datastrukturer. Programmering Software Engineering En del programutvecklingsprojekt tillhör de mest omfattande ingenjörsprojekt som kan genomföras (tusentals programmerare under många år). Att leda och organisera sådana projekt innebär stora utmaningar, både tekniskt och administrativt. Vi kan inte alls beröra dessa svårigheter i den här kursen. Funktioner i matematiken En funktion i matte Vi kan definiera t ex f (x) = x 2 + 3. Därefter kan vi använda funktionen med olika argument: T ex har vi att f (7) = 52 (= 7 2 + 3) och att f ( 3) = 12 (= ( 3) 2 + 3). Definitions- och värdemängd Vi måste också specificera definitionsmängden, dvs vilken mängd argumenten 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 som definitions- och värdemängd. Då kan vi också beräkna f (0.6) = 3.36 (= 0.6 2 + 3). 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 static, public och return som 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 värde.

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. Mer om Example1 Kommentarer Viktigast: ni kan inte förstå allt fullständigt nu; ni måste se fler exempel och förstå bättre efterhand. Vi har definierat ett program (en klass), som innehåller definitionen av f och en main-rutin. Att köra programmet innebär att kommandona i main-rutinen utförs. I detta fall finns bara ett enda kommando, en utskrift. Det som skrivs ut är strängen f(1234)= följt av funktionsvärdet f(1234) (så + betyder här inte addition). Att funktionsvärdet (som blir 1522759) skrivs ut innebär att programmet först måste beräkna detta genom att använda funktionen. En fråga Vad betyder argumentet till main-rutinen??? Arbetsprocessen En förbättring av Example1 Flera steg krävs innan vi kan få veta funktionsvärdet: Programtexten skrivs in en texteditor. Man kan använda till exempel nedit eller emacs. Programmet sparas i en fil, som för vårt exempel måste heta Example1.java. Programmet kompileras (översätts) genom att man i ett xterm-fönster skriver > javac Example1.java Om inga fel upptäcks, så skapas filen Example1.class. Programmet kan nu köras genom > java Example1 f(1234)=1522759 > Ett nytt problem att lösa Om vi nu vill beräkna f (5678) så måste vi ändra programmet genom att byta ut 1234 mot 5678 (på två ställen), kompilera om programmet och köra det igen. En bättre idé Program som körs kan ges kommandoradsargument: > java Example2 1234 > 1522759 > java Example2 5678 32239687 > Hur skriver man Example2??

Användning av kommandoradsargument Goda nyheter main-rutinen har direkt tillgång till kommandoradsargumenten: de heter args[0], args[1] osv. Dåliga nyheter args[0] osv är en teckensträng, t ex "1234". Vi säger att args[0] har typen 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 funktionen Integer.parseInt ur Javas bibliotek. Programmet Example2 ges på nästa bild. 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)); Not Vi lagrar resultatet av konverteringen i variabeln n. Sedan använder vi n som argument till f i utskriftskommandot. En annan matematisk funktion Vi definierar funktionen n S(n) = k 2 (= 1 2 + 2 2 +... + n 2 ) k=1 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) = 1 2 + 2 2 + 3 2 + 4 2 + 5 2 + 6 2 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<=n; k++) { sum = sum + k*k; return sum; public static void main(string[] args) { int s = squaresum(1000); System.out.println("Summan blir " + s);

Analys av funktionen squaresum Analys av programmet Example3 Funktionsdeklarationen beskriver hur funktionsvärdet ska beräknas när man väl vet värdet på argumentet n. Kroppen till funktionen består av tre satser (eng.statements): int sum = 0; Variabeln sum av typ int deklareras och ges startvärdet 0. for (int k=1; k<=n; k++) sum = sum + k*k; Variabeln k får i tur och ordning värdena 1, 2, 3,..., n; för varje värde beräknas k*k och läggs till sum. return sum; Funktionens resultat är värdet av variabeln sum; Programmet består av funktionsdeklarationen och en main-rutin. Om man skulle ta bort main-rutinen så går programmet att kompilera, men kan inte längre köras. Det är main som beskriver vad som görs vid körning. Kroppen till main består av två satser: int s = squaresum(1000); Funktionen squaresum anropas med argumentet 1000; resultatet lagras i variabeln s. System.out.println("Summan blir " + squaresum(1000)); Biblioteksmetoden System.out.println används för att skriva ut värdet av n med förklarande text före. Förbättring : Låt användaren bestämma antalet termer public class Example4 { public static int squaresum(int n) { int sum = 0; for (int k=1; k<=n; k++) sum = sum + k*k; return sum; public static void main(string[] args) { int n = Integer.parseInt(args[0]); System.out.print("Summan med " + n + " termer "); System.out.println("blir " + squaresum(n)); Finns det bättre sätt? För välstuderade problem som detta exempel finns ibland andra metoder. Man kan visa att för alla positiva heltal n. Detta ger direkt att n(n + 1)(2n + 1) squaresum(n) = 6 squaresum(100) = 1000 1001 2001. 6 Att komma på bästa sättet att beräkna en funktion man behöver är i allmänhet ett svårt problem.

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 i=k; k<=n; k++) sum = sum + 1.0/k; return k; Kommentarer Typen för reella tal heter double. Lägg till en main-rutin som svarar på frågan ovan. Tilldelningssatsen Grundform variable = expression; Både variabeln i vänsterledet och uttrycket i högerledet har en typ som kan bestämmas av kompilatorn. I det enklaste fallet är dessa samma typ. sum = sum + k*k; Här har bägge led typen int. Effekt Värdet av högerledet beräknas och lagras i variabeln i vänsterledet. Variabler Typer Regler för variaber En variabel är (ett namn på) en minnescell. En variabel måste deklareras, varvid också variabelns typ specificeras. I minnescellen kan endast värden av denna typ lagras. När en variabel förekommer i ett uttryck (t ex i högerledet i en tilldelningssats), betecknar variabeln det värde som lagras i variabeln. När en variabel förekommer i vänsterledet i en tilldelningssats, betecknar variabeln minnescellen. x y a 1.5 2.0 3.7 y = x * y + a; x y a 1.5 6.7 3.7 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.

Värden av primitiva typer Typ Värden byte 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 10 9 ). long Heltal lagrade med 64 bitar (upp till ca ±9 10 18 ). float double char boolean Flyttal lagrade med 32 bitar (ca 7 sign. siffror). Flyttal lagrade med 64 bitar (ca 16 sign. siffror). Tecken, lagrade med 16 bitars Unicode. true och false Uttryck (eng. expressions) Förekomster Uttryck förekommer bland annat som högerled i tilldelningssatser och som argument i funktionsanrop. Olika former Form Literal 37-3.5 true C Variabel sum n maxvoltage Operatoruttryck sum + 1.0/i n % 2 == 0 Funktionsanrop hsum(10000) Math.sin(x+y) Typer Varje uttryck i ett Javaprogram har en typ som kan bestämmas av kompilatorn. Vilka typer har ovanstående exempel? 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:!. 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 till String 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.

for-satsen Härnäst Syntax-beskrivning: for-statement for(initialization; continuation-condition; update) { statements Typvillkor Typen av continuation-condition måste vara boolean. Effekt for-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, och därefter fortsätter man med 2). I morgon: Obligatorisk labb. Ni måste vara där och köra ert första Java-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å dagens begrepp 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.