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