Universitetet i Linköping Institutionen för datavetenskap Anders Haraldsson

Relevanta dokument
Syfte : Lära sig objektorienterad programmering Syfte : Lära sig programmering i ett OO-språk vilket?

Imperativ programmering

Välkomna till DIT012 IPGO

Programmering, grundkurs

Välkomna till DIT012 IPGO. Tyvärr en bug i Google Docs: Sidnummer stämmer inte alltid. Alla anteckningar börjar på sidan 1.

Objektorienterad Programmering (TDDC77)

Grundläggande programmering med matematikdidaktisk inriktning för lärare som undervisar i gy eller komvux gy nivå, 7,5 hp

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

Kursinformation Grundkurs i programmering med Python

Programmeringsteknik II

TDIU01 (725G67) - Programmering i C++, grundkurs

Objektorienterad programmering

729G06 Föreläsning 1 Objektorienterad programmering

Objektorienterad Programmering (TDDC77)

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

Objektorienterad programmering

Datavetenskapligt program, 180 högskolepoäng

TDP001/TDP002. Introduktionsföreläsning. Eric Elfving Institutionen för Datavetenskap (IDA)

IT OCH PROGRAMMERING I SKOLAN. Jan Erik Moström Peter Vinnervik

Programmering. Seminarier i datavetenskap, datorteknik och informationsteknik. Niklas Broberg

Program & programmering

TDDE44 Programmering, grundkurs

Grundläggande programmering med matematikdidaktisk inriktning för lärare i åk 7-9

Programmering. Seminarier i datavetenskap, datorteknik och informationsteknik. Niklas Broberg

Föreläsning 1: Introduktion till kursen

TDDC74 PROGRAMMERING: ABSTRAKTION OCH MODELLERING VT 2017

Programmering - abstraktion och modellering

Datamodeller och databaser, avancerad kurs

Föreläsning 1: Introduktion till kursen

Exempel på typer av datorspråk EXCEL

Programming in C# and.net Framework

Grundläggande programmering med matematikdidaktisk inriktning för lärare i åk 7-9

Föreläsning 2. Operativsystem och programmering

Föreläsning 1: Introduktion till kursen

Datorsystem och programmering

EDAA01 Programmeringsteknik - fördjupningskurs

Introduktionsmöte Innehåll

Imperativ och Funktionell Programmering i Python #TDDD73

Programutveckling med Java 7.5 p, ht 2007 (D0019N) STUDIEHANDLEDNING - ALLMÄN INFORMATION

PROGRAMMERING. Ämnets syfte. Kurser i ämnet

Föreläsning 5 5DV086 - Programspråk

Kurs-PM HI2011, Programutveckling i funktionella och objektorienterande spra k, P3 VT17

Introduktion till programmering

Datavetenskapliga programmet, 180 högskolepoäng

Introduktion till programmering. Programspråk och paradigmer

Introduktion till programmering

Programmering. Seminarier i datavetenskap, datorteknik och informationsteknik. Niklas Broberg niklas.broberg@chalmers.

Design och konstruktion av grafiska gränssnitt

b) NY KURS (Ange kursnamn, årskurs, önskad läsperiod, schemablocksplacering. Bifoga utkast till kursplan.)

Föreläsning 1: Intro till kursen och programmering

Datavetenskapligt program, 180 högskolepoäng

Kurs-PM fo r HI1027, Objektorienterad programmering, period 1 HT15

729G75: Programmering och algoritmiskt tänkande. Tema 1. Föreläsning 1 Jody Foo

TDDD78, TDDE30, 729A85 Objektorienterad programmering och Java

729G75: Programmering och algoritmiskt tänkande. Tema 1, föreläsning 1 Jody Foo

Design och konstruktion av grafiska gränssnitt

6. Ge korta beskrivningar av följande begrepp a) texteditor b) kompilator c) länkare d) interpretator e) korskompilator f) formatterare ( pretty-print

Tentamen i. TDDC67 Funktionell programmering och Lisp

Programvaruteknik, hp

Exempel på typer av datorspråk EXCEL

Universitetet i Linköping Institutionen för datavetenskap Anders Haraldsson 2

SKOLFS. beslutade den XXX 2017.

TDDD78, TDDE30, 729A85 Objektorienterad programmering och Java

Dagens föreläsning Programmering i Lisp Fö 5

TDDC74 Lab 04 Muterbara strukturer, omgivningar

729G06 Programmering och logik. Info om pythondelen & introduktion till objektorienterad programmering.

TDDD73-funktionell och imperativ programmering i python

Imperativ programmering i ADA

TDDC77 Objektorienterad Programmering

Datavetenskapliga programmet, Allmän inriktning 180 högskolepoäng

Introduktion till Unix och Linux

Utbildningsplan för Datavetenskapligt program, 180 högskolepoäng

PROGRAMMERING. Ämnets syfte. Kurser i ämnet

Utbildningsplan för Datavetenskapligt program, 180 högskolepoäng

Grundkurs i programmering - intro

Programmering, grundkurs, 8.0 hp, Elektro, KTH, hösten Programmering: att instruera en maskin att utföra en uppgift, kräver olika språk:

DD1361 Programmeringsparadigm Föreläsning 1: Intro

Föreläsning 1: Intro till kursen och programmering

Objekt-orienterad Programmering och Design. TDA551 Alex Gerdes, HT-2016

FÖRELÄSNING 1 PERSONAL TDDC74 PROGRAMMERING: ABSTRAKTION OCH MODELLERING VT 2017 SYFTE EXAMINATION ORGANISATION

TDP002 Imperativ programmering

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

PROGRAMMERINGSMETODIK

Datavetenskapliga programmet, Spel, 180 högskolepoäng

MATLAB-modulen Programmering i MATLAB. Höstterminen hp. Vad är MATLAB

Kursanalys DD1312 hösten 2008

Objekt-orienterad Programmering och Design. TDA552 Alex Gerdes, HT-2018

Beslut om fastställande: - - Behörighetskrav: -

Utbildningsplan Dnr CF 52-66/2007. Sida 1 (7)

Kursanalys för Programmeringsparadigm 2D1361, läsperiod 1 och 2 läsåret 2005/2006

Översikt. Programmering tillämpningar och datastrukturer. Vad kursen täcker. Lärare. Rekommenderad litteratur. Kursmål 729G58 (HKGBB7)

Presentation. Curriculum Vitae för Lars Kristiansson,

Fakulteten för ekonomi, kommunikation och IT. Utbildningsplan SGITD. IT-Designprogrammet. Study programme in IT-Design

Kursanalys DA2003 sommar 2017

LADDA NER LÄSA. Beskrivning. Programmering i Python PDF LÄSA ladda ner

Ny programansvarig och visioner för Datateknik, 300hp

Objektorienterad programmering och Java

Datavetenskapliga programmet, Mjukvaruutveckling 180 högskolepoäng

Inledande programmering med C# (1DV402) Introduktion till. eller så här är det tänkt att fungera.

Transkript:

1 2 TDDC66 Datorsystem och programmering TDDC67 Funktionell programmering Programmering i Lisp, examinator TDDC67 föreläsare i Lisp Peter Dalenius examinator TDDC66 kursassistent i Lisp + ett stort antal labbassistenter Mer info http: //www.ida.liu.se/~tddc66 //www.ida.liu.se/~tddc67 Kan göras på många olika sätt och man kan ta ställning till: Val av programmeringsparadigm, sätt att programmera: Imperativ programmering Objektorienterad programmering Funktionell programmering Logikprogrammering Val av programmeringsspråk: C/C++ Java Python, Ruby Ada Lisp/Scheme Haskell Problemlösning Problemområden som man programmerar: Enkla problem-> större problem Algoritmiska problem Programmering runt bibliotek (detaljer göms) Skriptprogrammering med web Grafikprogrammering 3 4 Vi har för C- och D-programmen valt följande strategi: Programmeringsparadigmer: Funktionell programmering (Termin 1 åk 1) -> Imperativ programmering (Termin 2 åk 1) -> Objektorienterad programmering (Termin 3 åk 2) Programmeringsspråk: Lisp (Termin 1 åk 1) -> Ada, C/C++ (Termin 2 åk 1) -> Java, C++ (Termin 3 åk 2) Problemlösning Vi börjar med enkla problem och löser successivt större problem. Vi avslutrar denna kurs med ett projekt. Efter många års lärare i programmering är det viktigaste i en första kurs att lära sig: Bryt ned ett stort problem till små enheter / funktioner. Princip: En enhet löser ett problem Ge bra namn på enheten och de ingående data som skall bearbetas. Princip: Abstraktion, program skall vara läsbara och förståeliga i sitt sammanhang Sedan kan man gå vidare me mer specifika programmeringssätt och programmeringsspråk.

5 6 Om man läser en datautbildning med mycket matematik och speciellt Diskret matematik är det speciellt lämpat att börja med den funktionella programmeringsparadigmen. Vår erfarenhet och nästan alla studenterna har under alla år tyckt att detta är ett bra sätt att börja programmeringsundervisning, och senare gå vidare med ytterligare ett antal mer specifika programmeringskurser. Efter de första 3 åren har ni fått stor erfarenhet av programmering och tillämpat detta i många andra kurser. Då skall ni kunna lösa stora klasser av problem och i stort kunna använda vilket programmeringsspråk som helst. Att börja med funktionell programmering, vad innebär detta? Innehåller ett antal svårigheter, i början kommer vi att direkt arbeta med begreppet rekursion, där vi visar många olika modeller och likheten med matematiken. Kräver mycket övning, och när man kommit över tröskeln så är det ju lätt och självklart. Vad är LISP? Ett egentligen gammalt språk, som möjliggör att illustrera många olika programmeringsparadigmer och programmeringskonstruktioner. Många konstruktioner i Lisp har dock återkommit i nya språk som Python och Ruby. 7 8 Funktionell programmering + Lisp medför att modellen att programmera blir nytt för alla studenterna. Vi börjar från början med mycket enkla exempel, programmeringen byggs upp allt eftersom. Kräver mycket övning. För nybörjare: Lyssna på oss lärare, följ bok och laborationsanvisningarna. För de som har programmerat tidigare: RISK! Detta är troligen nytt även för er och ni får inte underskatta svårigheterna i sättet att programmera och slarva med laborationerna. Varför har vi två kurser i programmering under höstterminen Delvis beroende på reformer där kurser inte skulle bli för stora i poängomfång och dels att moment har flyttats mellan kurser. Men Lisp-delen börjar i första kursen och går sedan (mer eller mindre) osynligt över i andra kursen i slutet av period 1. Ge akt på scheman. Alla Lisp-laborationer finns i samma labb-häfte. Kursen ger något nytt för ALLA studenterna. Många lärosäten i Sverige använder denna modell som första språk. Som alternativ till Lisp använder en del ML och Haskel (t ex Chalmers). På Y-programmet används Lisp-dialekten Scheme i sin första kurs: PRAM - Programmering, abstraktion och modellering.

9 10 Vad har vi gjorde sedan förra året. Vi hade sedan några år sedan senarelagt moment i laborationsserien, så att det hamnade i period 2, vilket medförde att belastningen blev fört stor i period 2 och man tyckte att man skulle flytta över moment till första perioden. Vi har även i år startat tidigare i prop-perioden med datorintroduktion. Vi börjar tidigare med Lisp-föreläsningarna, har flyttat en laboration (almanackan) till period 1. Dessutom passar det bra eftersom man gjort förändringar i matematiken, som läses parallellt under hösten. All den diskreta matematiken läses i period 1, med bättre möjlighet till samordning med den funktionella programmeringen. Vissa smärre förändringar i labbserien, bättre fokus på testning i en av laborationerna. Gruppstorlek: Lisplaborationer 1 och 2 i TDDC66 gör enskilt. Nytt för i år är att laborationerna fr o m labb 3 kan göras i labbgrupper om 2. Mål för Programmering i Lisp programmering, principer, problemlösning * strukturera program i mindre delar * bryta ned problem * läsbarhet av program huvudsaklig metodik * funktionell programmering, rekursion * abstrakta datatyper * bearbeta strukturerade dataobjekt, sekvenser, trädstrukturer mm datavetenskapliga begrepp och strukturer, likheter med matematiska begrepp i Diskret matematik (som ni läser parallellt) generella programspråksbegrepp språket Lisp - dialekten Common Lisp * listhantering * högre ordningens funktioner * imperativa konstruktioner programutveckling och hjälpmedel med Allegro * editor * felsökning projektuppgift * självständig programmering * gruppdiskussioner * dokumentation 11 12 Allegro Common Lisp Emacs (programeditor) Lispsystem på skolan Föreläsningar - introducerar begreppen - ger översikt - sammanfattar och reflekterar - ligger alltid lite före Lispsystem på egna datorer Följ länkar från kursens www-sidor. Speciellt finns Allegro CL för Windows och Linux från Franz. Kurslitteratur Haraldsson, Programmering i Lisp, Studentlitteratur Kursmaterial i Funktionell programmering och Lisp - laborationer - Allegro CL via Emacs Gruppövning/Lektioner - systemgenomgångar - laborationsförberedelser - frågor, diskussioner - övningar Laborationer - frågor, diskussioner - övningar - arbeta med de obligatoriska uppgifterna - redovisa laborationer Egen tid - läs bok, torröva - lös många problem - öva, testa, experimentera på systemen - arbeta med de obligatoriska uppgifterna Framför allt - kom igång nu på en gång, bli inte efter - det räcker inte med de schemalagda laborationerna

13 14 Examination i Programmering i Lisp I kursen TDDC66 Datorsystem och programmering skall de tre första laborationerna redovisas tillsammans med två duggor. Momentet benämns: LAB1 Inledande laborationskurs (U, G), 2 hp. I kursen TDDC67 Funktionell programmering och Lisp skall resterande laborationer utföras samt en projektuppgift. Skriftlig tentamen på hela delen Programmering i Lisp, dvs moment från båda kurserna. Momenten benämns: TEN1 Skriftlig tentamen efter andra perioden (U,3,4,5), 3 hp. LAB1 Laborationer (U,G), 3 hp UPG1 Projektuppgift (U, G), 2 hp Lisp historik 1959 John McCarthy - Lisp 1.5 LISP = LISt Processing language utvecklats inom forskningsmiljön inom artificiell intelligens INTERLISP/Medley (BBN, Xerox, Lispmaskiner) MacLISP (MIT) Scheme (används i Data och programstrukturer) I samband med kommersialisering av språket togs ny standard fram: Common Lisp Lisp/Scheme används idag bl a som inbyggt programspråk i tillämpningar: - emacs bygger på elisp - cadsystem, autocad - utvecklingsmiljöer för spelindustrin Se gärna Franz www-sidor (som tillhandahåller Allegro Lispsystem) och som grundläggande programmeringsspråk i många datautbildningar. 15 16 Egenskaper i Lisp - enkel syntax (men mycket parenteser) - interaktion med språket sker genom en REPL (Read-Eval-Print-Loop) - språket är i grund interpretativt, dvs program beräknas av en intepretator - program kan kompileras till maskinkod - möjlighet att själv anropa de centrala interpretatorfunktionerna eval och apply (funcall) - man kan själv under beräkning skapa nya program som ges till beräkning, som används för sk makroutveckling - en delmängd pure Lisp kan enkelt beskrivas i Lisp, funktionen eval. Beskriver språkets semantik Lisp s påverkan på andra språk Ett stort antal konstruktioner har sitt ursprung från Lisp-språket - listor - extern notation av dataobjekt - rekursion - minneshantering - garbage collection - eval-modell - funktioner som data, lambda-uttryck Många nya programspråk idag har idag inkluderat många konstruktioner från Lisp inbyggt i språket symboler och listor (Python, Ruby) Funktioner som dataobjekt, lambda-uttryck, closure (Python, Ruby, C++) Top loop (REPL) (Python, Ruby)

17 Funktionell programmering Har nu kommit på ropet igen. Microsoft kommer med F#. Ett Ericsson-utvecklat språk Haskell används idag av många företag (t ex Klarna) Nu är det för att få enkla program som lättare går att kompilera till parallellitet, tex när vi har fler kärnor i en dator. Man vill komma ifrån den imperativa modellen där man i programmet där man lägger satser sekventiellt (efter varandra) vilket gör det svårare att utnyttja parallelliteten.