Undervisning. Examination

Relevanta dokument
Undervisning. Examination

Undervisning. Examination

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

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

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

Objektorienterad Programmering (TDDC77)

(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

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

Typkonvertering. Java versus C

Föreläsning 1 & 2 INTRODUKTION

Föreläsning 1 & 2 INTRODUKTION

OOP Objekt-orienterad programmering

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

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

Programmering A. Johan Eliasson

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

Objektorienterad Programmering (TDDC77)

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

TDIU01 - Programmering i C++, grundkurs

SMD 134 Objektorienterad programmering

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

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

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

Klassdeklaration. Metoddeklaration. Parameteröverföring

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

TDDC30. Kursledning Kursledare: Jonas Lindgren. Labassistent: Jonas Lindgren Labassistent: Niklas Holma Labassistent: Erik Nilsson

Föreläsning 1-2 innehåll

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

TDDC77 Objektorienterad Programmering

TDDC77 Objektorienterad Programmering

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 1 Jonas Lindgren, Institutionen för Datavetenskap, LiU

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

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal??

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Checklista. Föreläsning 1-2 Innehåll. Programmering.

DD1314 Programmeringsteknik

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

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Om att lära sig programmera. Föreläsning 1-2 Innehåll.

Programmeringsteknik med C och Matlab

F2 Datatyper och variabler. ID1004 Objektorienterad programmering Fredrik Kilander

Föreläsning 3: Typomvandling, villkor och val, samt textsträngar

Programmering för språkteknologer II, HT2011. Rum

F4. programmeringsteknik och Matlab

Laboration 1. "kompilera"-ikonen "exekvera"-ikonen

Objektorienterad programmering i Java I. Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6

Parameteröverföring. Exempel. Exempel. Metodkropp

Planering Programmering grundkurs HI1024 HT 2014

Föreläsning 5&6 LOGISKA VARIABLER; IMPLEMENTERA KLASSER; MER ALGORITMER

SMD 134 Objektorienterad programmering

Digitalitet. Kontinuerlig. Direkt proportionerlig mot källan. Ex. sprittermometer. Elektrisk signal som representerar ljud.

Tentamen. Datalogi I, grundkurs med Java 10p, 2D4112, Lördagen den 30 november 2002 kl , salar E33, E34

Övning2. Variabler. Data typer

Lite mer om Javas stöd för fält. Programmering. Exempel: vad är det största talet? hh.se/db2004. Fält samt Input/Output

Objektorienterad programmering. Fält som funktionsresultat. Mer om fält: att uppdatera ett parameterfält. Kontrast: Parametrar av primitiv typ

Lite om reella tal. Programmering. I java. Om operatorers associativitet och prioritet

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

Anteckningar 1: Grundläggande saker

Objektorienterad programmering Föreläsning 4

Föreläsning 3: Booleans, if, switch

Datastrukturer. Erik Forslin. Rum 1445, plan 4 på Nada

Objektorienterad Programmering (TDDC77)

Introduktion till Datalogi DD1339. Föreläsning 1 8 sept 2014

Objektorienterad programmering i Java

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

Föreläsning 2. Täcker material från lektion 1, 2, 3 och 4:

Laboration 1. "kompilera"-ikonen "exekvera"-ikonen

Planering Programmering grundkurs HI1024 HT data

1/15/2013. DD1310/DD1314/DA3009 Programmeringsteknik. Lärandemål... Vilka läser kursen? ...fler lärandemål VARFÖR? Föreläsning 1

DD1310/DD1314/DA3009 Programmeringsteknik LÄRANDEMÅL... Vilka läser kursen? ...FLER LÄRANDEMÅL. Föreläsning 1

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

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

Föreläsning REPETITION & EXTENTA

Planering Programmering grundkurs HI1024 HT TIDAA

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

Kompilera och exekvera Javakod

2D1311 Programmeringsteknik för Bio1 och Bio2, vt 2003 Fiktivt prov På flervalsfrågorna är endast ett svar rätt om inget annat anges i frågan! Det rik

TDDC77 Objektorienterad Programmering

Studentportalen UNIX-konton (systemansvariga P4118) Lärare: Tom Smedsaas,

Föreläsning 2 Programmeringsteknik och C DD1316. Mikael Djurfeldt

Föreläsningsmaterial (Syntax och variabler)

Tentamen OOP

Objektorienterad Programmering DAT043. Föreläsning 1 15/1-18 Moa Johansson

Introduktion till programmering D0009E. Föreläsning 1: Programmets väg

Datalogi I, grundkurs med Java 10p, 2D4112, Fiktiv tentamen, svar och lösningar och extra kommentarer till vissa uppgifter 1a) Dividera förs

Classes och Interfaces, Objects och References, Initialization

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

Introduktion till programmering SMD180. Föreläsning 2: Variabler, uttryck och satser

Objektorienterad Programmering (TDDC77)

F5 Selektion och iteration. ID1004 Objektorienterad programmering Fredrik Kilander

Chapter 3: Using Classes and Objects

Tentamen , Introduktion till Java, dtaa98, dtea53

TENTAMEN OOP

Outline. Objektorienterad Programmering (TDDC77) Kursinfo. Outline. Hemsida. Organization. Ahmed Rezine Examination. Webreg.

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy. Funktioner / metoder. Punktnotation. Evalueringsordning

Föreläsning 3-4 Innehåll

Klasser i Java kan ha metoder och egenskaper. Metoder beskriver funktioner som klassen kan utföra. Egenskaper beskriver innehållet i klassen.

DD1361 Programmeringsparadigm. Carina Edlund

Enkla datatyper minne

Programstruktur och terminologi. Programmet producerar följande utskrift i terminalfönstret: Ett Javaprogram består av en eller flera klasser

Lektion Java Grunder. Javas historia. Programmeringsspråket Java. Skillnaderna mellan Java och C++ JVM (Javas Virtuella Maskin)

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

Kursinfo Lärandemål, 1 Ur kursplanen: Efter kursen ska ni kunna förklara grundläggande begrepp inom imperativ och objektorienterad programmering, speciellt som de realiseras i det programspråk som används i kursen. beskriva några standardalgoritmer, för till exempel sortering och sökning, samt veta var dessa återfinns i språkets standardbibliotek. definiera enkla subrutinbibliotek med utnyttjande av det använda programspråkets datatyper och styrstrukturer. definiera klasser som modellerar enkla fenomen i objektorienterad anda, med inkapslade data som avläses och uppdateras via publika metoder. 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 att felsöka, komplettera eller förbättra programmets beteende enligt givna 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 och dokumentera program. identifiera situationer i er fortsatta utbildning där programmering kan vara ett effektivt hjälpmedel i studierna. identifiera ert behov av ytterligare kunskaper inom området programmering och datavetenskap. Kursinfo Labbar Programmering Programmering 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.

Programmering Programspråk Programmering Algoritmer och datastrukturer 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. 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 public, static 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 resultat (funktionsvärdet). 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 Flera steg krävs innan vi kan få veta funktionsvärdet: Programtexten skrivs in en texteditor. Man kan använda till exempel gedit 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 >

En förbättring av Example1 Användning av kommandoradsargument 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?? 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 En annan matematisk funktion 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. 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 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; Analys av programmet Example3 Förbättring : Låt användaren bestämma antalet termer 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 " + s); Biblioteksmetoden System.out.println används för att skriva ut värdet av s med förklarande text före. 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? Att räkna med reella tal 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. 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<=n; k++) sum = sum + 1.0/k; return sum; 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; Variabler 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. Här har bägge led typen int. x 1.5 y = x * y + a; x 1.5 Effekt Värdet av högerledet beräknas och lagras i variabeln i vänsterledet. y a 2.0 3.7 y a 6.7 3.7

Typer Värden av primitiva 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. 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 for-satsen Syntax-beskrivning: for-statement 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(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). Härnäst 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.