Välkomna till NADA. Paradigm i datalogin. Vad är ett paradigm

Relevanta dokument
Sista delen av kursen

Programspråkslingvistik. Sista delen av kursen. Ett programspråk

Sista delen av kursen

Imperativ programmering

Program & programmering

Deklarativt programmeringsparadigm

Introduktion till programmering. Programspråk och paradigmer

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

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

Objektorienterad programmering

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

Imperativ programmering. Föreläsning 2

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

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

TDP002 Imperativ programmering

IT för personligt arbete F6

TDP002 - Imperativ programmering

PROGRAMMERINGSMETODIK

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

Exempel på typer av datorspråk EXCEL

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

Imperativ programmering. Föreläsning 4

TDP002 - Imperativ programmering

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

Genicore AB. Modellbaserad ansats. En liten firma i Göteborg som gör stora datasystem. Systemspråk - När modellen är systemet. torsdag 10 maj 2012

Objektorienterad programmering, allmänt

Viktiga egenskaper hos ett program (Meyer): Objektorienterad programmering, allmänt. Vilka egenskaper vill vi att våra program ska ha?

DD1361 Programmeringsparadigm Föreläsning 1: Intro

Programmeringsteknik I

Deklarationer/definitioner/specifikationer

Datalogi I, grundkurs med Java 10p, 2D4112, Tentamen 29 november 2003, svar och lösningar

Abstraktion. Abstraktion... Abstraktion... Abstraktion...

Matematikens grundvalar och programmering av datorer

Abstraktion. procedurabstraktion. DA2001 (Föreläsning 26) Datalogi 1 Hösten / 27

Föreläsning 2. Operativsystem och programmering

Presentation. Curriculum Vitae för Lars Kristiansson,

DD1361 Programmeringsparadigm Föreläsning 1: Intro

Objektorienterade programmeringsspråk. Objektorienterade språk. Den objekt-orienterade modellen. Jämför med icke-oo

Programmering för alla!

Grundläggande programmeringsteknik Datorsystem

Programmering för alla!

Exempel på typer av datorspråk EXCEL

Imperativ programmering. Föreläsning 3

TDDD78, TDDE30, 729A Introduktion till Java -- för Pythonprogrammerare

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

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

Objektorienterad Programmering (TDDC77)

PROGRAMMERINGSMETODIK

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

Programkonstruktion och datastrukturer. Formell verifiering eller hur man bevisar att program gör rätt utan att testa dem

Datorhistoria Introduktion till PBL

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

Typsystem. Typsystem... Typsystem... Typsystem... 2 *

Typsystem. DA2001 (Föreläsning 23) Datalogi 1 Hösten / 19

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

TDDD78, TDDE30, 729A Introduktion till Java -- för Pythonprogrammerare

Introduktion till formella metoder Programmeringsmetodik 1. Inledning

CIVILINGENJÖRSEXAMEN MASTER OF SCIENCE IN ENGINEERING

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

Föreläsning 23 Programmeringens historia och paradigmer

Funktionell programmering

Introduktion till databaskursen. Välkomna. till kursen. Databasteknik och informationssystem. DD1370 (kursomgång dbtinf12)

Deklarativ programmering

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

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

Kapitel 2. Evolutionen av de viktigaste programmeringsspråken ISBN

Repetition i Pascal. Exemplen fac. Exemplen fac i Pascal. Exemplen fac motivering. Orginalet

Omgivningar. Omgivningar är viktiga eftersom de avgör vilka namn som är synliga och därmed dessas innebörd och de värden som är förknippade med dem.

Repetition i Python 3. Exemplen fac. Exemplen fac motivering. Exemplen fac i Python

Dagens föreläsning Programmering i Lisp Fö 7. Sammanfattning funktionell programmering Exempel på funktionella programspråk

Del : Funktionell programmering. I alla deluppgifterna, använd Haskell och skriv typen för de identifierare du definierar.

Introduktion till Haskell

Lågnivåprogrammering. Föreläsning 2 Lågnivåprogrammering. Binära tal. En enkel modell av datorns inre

Varför ska man lära sig sånt? Välkomna. Vad är databaser bra till? Kursansvarig. till kursen. Databasteknik och informationssystem

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

Varför ska man lära sig sånt? Välkomna. Vad är databaser bra till? Kursansvarig. till kursen. Databasteknik och informationssystem

2.4. Teckensträngar och logiska uttryck

Moment 2 Digital elektronik. Föreläsning Inbyggda system, introduktion

Kursupplägg. Examination. Föreläsning 1: Intro till kursen och. Kursmaterial. programmering. Kursboken: Programmera med a multimedia approach

Per Holm Lågnivåprogrammering 2014/15 24 / 177. int och double = = 2, 147, 483, 647

LÖSNINGSFÖRSLAG TENTAMEN PROGRAMMERING I ETT FUNKTIONELLT SPRÅK ML, 5P

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

Ett Logikprogram. Logik och Programmering. Introduktion till PROLOG, dvs. PROgramming in LOGic. Viktiga begrepp/områden i Prolog. Framtiden?

DD1361 Programmeringsparadigm. Carina Edlund

Lär dig programmera! Prova på programmering med enkla exempel! Björn Regnell

Deklarativ programmering

Datorsystem 2 CPU. Förra gången: Datorns historia Denna gång: Byggstenar i en dators arkitektur. Visning av Akka (för de som är intresserade)

Polymorfi (många skepnader) är egentligen en mängd olika abstraktionsmekanismer och en indelning skulle kunna se ut så här: polymorfi

Nada KTH 2004 jan 12 Tentamen Programmeringsparadigm 2D1350 Skrivtid 5 h 8-13

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

Programmeringsparadigm - en jämförelse

Programmering A. Johan Eliasson

1642 uppfann Blaise Pascal världens första mekaniska räknemaskin. Den kunde både addera och subtrahera. Den kan ses som en föregångare till datorn.

F1 Introduktion och ingenjörsrollen EDAA05 Datorer i system! Roger Henriksson!

Datorhistoria och datorn i samhällsutvecklingen. Moment i DD1390 Programsammanhållande kurs i datateknik

Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk

Variabler, värden och typer

Pascal... Pascal. Pascal... Pascal...

Föreläsning 1. Vad är vetenskapsteori?

Föreläsning 9 i programmeringsparadigm. Paradigmöversikt, paradigmhistoria, paradigmgeografi. Se även föreläsning 1.

Transkript:

Välkomna till NADA (Numerisk Analys och DAtalogi) och kursen Paradigm i datalogin, orienteringskurs GN, 7,5 hp (PID) Välkomna... Jag: Serafim Dahl Osquars Backe 2, plan 5 Rum 1531 Postfack: Lindstedtsvägen 3, plan 4 Tel: 790 62 76 elektronisk post: serafim@csc.kth.se / serafim@nada.kth.se Nås enklast via e-post eller i anslutning till undervisning Föreläsning 1 Bild 1 av 22 Föreläsning 1 Bild 2 av 22 Vad är ett paradigm? Paradigm i datalogin Varför är de nödvändiga? Lite datorhistoria Lite programspråkshistoria Lite om modern användning av datorer Vilka paradigm finns? Vilka är byggstenarna? Vad måste alla paradigm innehålla? Vad är ett paradigm Paradigm finns i alla vetenskaper, både på den humanistiska sidan och den naturvetenskapliga sidan. Begreppet myntades av Thomas Kuhn som egentligen använde det i flera sammanhang. Det kom att, inom vetenskapsteorin, beteckna den mängd med kunskaper forskare räknar som fakta inom en viss disciplin, men också det som följer av faktamängden hur man måste tänka och dra slutsatser med hjälp av den givna faktamängden. Dvs de tankemönster som följer. Detta har spritt sig inom alla vetenskaper och informellt betraktar man ett paradigm som ett visst sätt att tänka och vetenskapa på. Föreläsning 1 Bild 3 av 22 Föreläsning 1 Bild 4 av 22

Varför är paradigmer nödvändiga? Alla behöver enas om grundläggande fakta inför en uppgift och inom vetenskap och teknik har stora framsteg gjorts speciellt vid sk paradigmskiften. Tänk på övergången från Ptolemaios universum via Copernikus och Kepler till dagens teorier om universum. Teorier som gällt i hundratals år kullkastas plötsligt och ersätts ibland helt med nya teorier. Den stora skillnaden mellan paradigmskiften av det slaget och datalogins paradigmskiften är att i datalogin har gamla paradigmer fortsatt att leva parallellt med de nya, medan i forskningsvärlden nya paradigmer trängt undan gamla. Varför är paradigmer nödvändiga... Inom datalogin har man börjat med att betrakta datorns arkitektur, vilket gav upphov till assemblerspråk. De är helt byggda på att man ger datorn en instruktion, och sedan en till och... Med matematikens intåg har man fått andra modeller och med logik samt mängdlära har man fått ytterligare andra. Det är viktigt att betrakta dessa och förstå mönstren för att dels kunna inse vilken modell som är lämplig och dels kunna samarbeta enligt den överenskomna modellen. Föreläsning 1 Bild 5 av 22 Föreläsning 1 Bild 6 av 22 Lite datorhistoria De första datorerna var som räknedosor. De var svåra att programmera och inte förrän von Neumann 1940 föreslog en enhetlig arkitektur började man kunna skapa det vi idag kallar datorer. Experimenten var många och ganska vilda. Datorerna var gigantiska, amerikanska ENIAC tog upp en golvyta på 130 m 2 och vägde 30 ton. Tyskarna var först och tog under åren 1938-1940 fram datorerna Z1, Z2 och Z3 innan amerikanerna lyckades konstruera ENIAC 1941. Lite datorhistoria... Datorerna togs fram för militära ändamål men man insåg genast fördelarna med snabba beräkningar och började utveckla datorer för andra ändamål, främst administrativa. Den första svenska datorn hette BARK (1950), byggd med telefonreläer, tätt följd av BESK (1953) byggd med elektronrör. Man trodde att Sverige behövde 2 datorer men en del ansåg att 3 kunde komma att behövas!!! Föreläsning 1 Bild 7 av 22 Föreläsning 1 Bild 8 av 22

Lite datorhistoria... Lite programspråkshistoria Fortran Transistorn uppfanns 1947 och kom snart att användas i datorerna. Den första transistorbaserade datorn hade 10000 transistorer och kunde utföra 1000000 operationer i sekunden, att jämföra med den första relädatorn som utförde 5,33 operationer i sekunden. Simula Algol60 Algol68 Cobol PL/I Lisp 1958 uppfann Texas Instruments den integrerade kretsen och därmed börjar den moderna datorns historia. Intels senaste CPU (processor) innehåller motsvarande 800 millioner transistorfunktioner och kan utföra 3000 ggr fler operationer per sek än den första transistordatorn. En dator byggd på en sådan krets är mer än 300000 ggr snabbare än de första transistordatorerna. Smalltalk C++ Java Pascal Ada Oz C Scheme ML Miranda Haskell Prolog clpr Föreläsning 1 Bild 9 av 22 Lite programspråkshistoria... De första programspråken var egentligen bara läsbara varianter på processorinstruktioner och hade väldigt lite gemensamt med dagens programspråk. start: move 1, reg1 move n, reg0 loop: jmpz exit mul reg0, reg1, reg1 decr reg0 jmp loop exit: stop Lite programspråkshistoria... Det första något så när (för människor) läsbara programspråket var FORTRAN (FORmula TRANslation), byggt just för att förenkla programmering av beräkningar. PROGRAM FAK IMPLICIT NONE PRINT *, GE ETT POSITIVT HELTAL: READ *, N FAC = 1 DO I=N,2,-1 FAC = FAC*I END DO PRINT *, FAC STOP END PROGRAM FAK Föreläsning 1 Bild 11 av 22 Föreläsning 1 Bild 12 av 22

Lite programspråkshistoria... I språket Oz kan det bli declare fun {Fact N} if N == 0 then 1 else N * {Fact N - 1} end end I prolog Lite programspråkshistoria... fac(0, 1). fac(n, F) :- N > 0, N1 is N-1, fac(n1, F1), F is N*F1. vilket svarar direkt mot den matematiska beskrivningen n! = { 1 om n = 0 (basfall) n (n 1)! om n > 0 Föreläsning 1 Bild 13 av 22 Föreläsning 1 Bild 14 av 22 Lite om modern användning av datorer Eftersom datorer används för fler och fler områden som inte har direkt med vad vi vanligtvis menar med beräkningar måste man också analysera dessa nya områden och utveckla verktyg för programmering som stämmer med den modell man får som resultat av analysen. Många olika applikationsområden har mutats in genom åren och många olika modeller har utvecklats. Datorn används som arbetsverktyg i många olika situationer och för många nya områden. Nya medier visar också på ett ständigt ökande behov av nya modeller och, inte sällan, nya paradigmer. Vilka paradigm finns? Från början var det datorns konstruktion (von-neumann-arkitekturen) som var utgångspunkten men med Lisp (1960) visade John McCarthy att man kunde abstrahera över ett speciellt applikationsområde och med endast en handfull operatorer få ett matematiskt (λ-kalkyl) baserat programspråk. Med Lisps intåg hade man två paradigmer, det imperativa, representerat av assembler och FORTRAN och det funktionella paradigmet, representerat av Lisp. Men man talade inte om paradigm ännu. Föreläsning 1 Bild 15 av 22 Föreläsning 1 Bild 16 av 22

Vilka paradigm finns?... Norrmännen har alltid legat långt fram i tekniksammanhang och så även inom datalogin. Man hade också ett amitiöst atomprogram och redan 1952 inleddes ett arbete för att hitta bra metoder för att imulera komplicerade skeenden i atomreaktorer. Det resulterade i språket Simula 1960-67, som innehöll mekanismer för att representera fristående processer. Den grundläggande mekanismen för detta var ett klassbegrepp som tillät att man konstruerade mallar för hur objekt skulle framställas. Varje sådant objekt hade inom sig både datastrukturer och operationer för att bearbeta datastrukturernas innehåll. Simula67 (slutversionen) innebar början för det objektorienterade paradigmet Vilka paradigm finns?... Robert Kowalski (Edinburgh-universitetet) och Alain Colmerauer och Phillipe Roussel på Marseille-universitetet tog 1972 fram Prolog, ett språk för logikprogrammering och med det hade man ytterligare två paradigmer, dels logikprogrammeringsparadigmet men också det deklarativa paradigmet eftersom man i Prolog deklarerar vad man är ute efter men inte hur beräkningarna ska gå till. Redan att det sker så mycket mer än man är van vid gör att man bör testa logikprogrammering. Föreläsning 1 Bild 17 av 22 Föreläsning 1 Bild 18 av 22 Vilka paradigm finns?... Idag finns ett stort antal metodiker som alla kallar sig programmeringsparadigm men de jag räknat upp är de grundläggande. Med tillägg till de uppräknade kan man förfina uppdelningen ytteligare. Man talar idag bl.a. om Imperativt Funktionellt (som en del anser är en del av deklarativt paradigm) Objektorienterat (som är en förfining av imperativt) Logiskt (del av det deklarativa) Deklarativt Visuellt (programmera med gester) Aspektorienterat (där man strikt separerar olika aspekter) Se vidare http://en.wikipedia.org/wiki/programming paradigm Vilka byggstenar behöver alla? Alla programspråk måste kunna utföra arbete i sekvens. Alla programspråk måste innehålla någon mekanism för val, åtminstone något liknande if v then x else y Alla programspråk måste ha en mekanism för att upprepa. Alla programspråk måste ha någon form av abstraktionsmekanism. I det inledande programmet som visades i flera olika språk finns all fyra mekanismerna representerade även om de inte alla finns i alla versioner av programmet. Föreläsning 1 Bild 19 av 22 Föreläsning 1 Bild 20 av 22

Övriga byggstenar Analyserar man de olika paradigmen hittar man en grundläggande mängd med koncept (begrepp). Vi ska titta på alla dessa och se vad de innebär och med en bukett av vanligen förekommande begrepp välja så att vi får de paradigm vi skall titta närmare på. Här kommer en uppräkning utan närmare förklaring (annat än kort muntligt): Namn, variabler, värden, bindningar, omgivningar, funktions- och procedurabstraktion, inkapsling, typer, typsystem, subtypning, typkonvertering, klasser, objekt, arv, polyformi, syntax, semantik, kompilering, interpretering, ivrig evaluering, lat evaluering Funktionellt paradigm Paradigm vi ska titta på Imperativt (procedurorienterat) paradigm, det ursprungliga paradigmet Deklarativt paradigm (logik) Objektorienterat paradigm En del av dem har vi redan tittat lite på. Föreläsning 1 Bild 21 av 22 Föreläsning 1 Bild 22 av 22