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)

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

(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

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

Föreläsning 1 & 2 INTRODUKTION

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

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

Objektorienterad Programmering (TDDC77)

Programmering A. Johan Eliasson

TDIU01 - Programmering i C++, grundkurs

Typkonvertering. Java versus C

SMD 134 Objektorienterad programmering

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

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

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

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

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

TDDC77 Objektorienterad Programmering

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

Klassdeklaration. Metoddeklaration. Parameteröverföring

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

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

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

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

TDDC77 Objektorienterad Programmering

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

Programmeringsteknik med C och Matlab

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

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

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

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.

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

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 (TDDC77)

Parameteröverföring. Exempel. Exempel. Metodkropp

F2 Datatyper och variabler. ID1004 Objektorienterad programmering Fredrik Kilander

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

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

DD1314 Programmeringsteknik

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

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

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

SMD 134 Objektorienterad programmering

Planering Programmering grundkurs HI1024 HT 2014

F4. programmeringsteknik och Matlab

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

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

Planering Programmering grundkurs HI1024 HT data

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

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

Övning2. Variabler. Data typer

Objektorienterad programmering i Java

Föreläsning REPETITION & EXTENTA

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

Anteckningar 1: Grundläggande saker

Objektorienterad programmering Föreläsning 4

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

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

Tentamen OOP

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

Chapter 3: Using Classes and Objects

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

DD1361 Programmeringsparadigm. Carina Edlund

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

Föreläsningsmaterial (Syntax och variabler)

Planering Programmering grundkurs HI1024 HT TIDAA

TDDC77 Objektorienterad Programmering

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

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

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

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

F5 Selektion och iteration. ID1004 Objektorienterad programmering Fredrik Kilander

Classes och Interfaces, Objects och References, Initialization

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

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

Enkla datatyper minne

Föreläsning 3-4 Innehåll

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

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

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

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

Tentamen , Introduktion till Java, dtaa98, dtea53

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

TENTAMEN OOP

Användarhandledning Version 1.2

Introduktion till Datalogi DD1339. Föreläsning 3 29 sept 2014

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

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

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

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. Problemlösning individuellt samt (mycket få) 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 Cecilia Kjellman, Maryana Wånggren, Björn von Sydow Rekommenderad litteratur Någon av David J. Eck: Introduction to Programming using Java, 6th 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 15 mars på eftermiddagen. 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).

Vad är en funktion? Fel svar En funktion ges av en formel (som t ex x 2 + 3 på föregående bild). En sådan formel är ett möjligt sätt att definiera en funktion, som kan användas i enkla fall. Rätt svar Två mängder (definitions- och värdemängd) och en regel som till varje element i definitionsmängden bestämmer exakt ett element i värdemängden. Andra exempel Definitionsmängd: Datum under 2012. Värdemängd: N. Funktionsvärde: Antalet passagerare som flög med flygbolaget Lufthansa denna dag. Definitionsmängd: SMHI:s väderstationer. Värdemängd: R. Funktionsvärde: Genomsnittstemperaturen vid denna station kl 12.00 under december 2011. En funktion i Java Med heltal som argument och resultat I Java kan man definiera funktionen f (x) = x 2 + 3 så här: 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 Mer om Example1 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. 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 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 > 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 Programmet 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. 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; Funktionsvärdet är värdet av variabeln sum efter att vi gjort alla dessa tllägg för de olika värdena på k. 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.

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(1000) = 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 harmonicsum(int n) { double sum = 0; for (int k=1; k<=n; k++) sum = sum + 1.0/k; return sum; Namnet är valt för att i matte kallas denna summa för den harmoniska summan. Vi hade kunnat välja att kalla funktionen f, eller hsum, eller... 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 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 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. 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): &&,. 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. Unära operatorer På numeriska typer: +, -. På bool:!. for-satsen 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). Vad ska man göra nu? De närmaste stegen Efter föreläsningen: Om du inte programmerat förr har du sett mycket nytt. Läs igenom föreläsningsbilderna igen. Och igen! 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.

Till sist Allmänt Du måste lägga mycket tid på den här kursen. Fördela denna tid så att du både arbetar med labbarna och gör övningar som förbereder för tentan! En grov jämförelse Typisk mattekurs Fördjupning av bekanta begrepp Ganska mycket teori att förstå Litet antal typuppgifter Kräver mycket tid Den här kursen Många helt nya begrepp Mycket begränsad teori Stor variation i uppgifter Kräver mycket tid.