Ohjelmointiparadigmojen historia - PowerPoint PPT Presentation

About This Presentation
Title:

Ohjelmointiparadigmojen historia

Description:

Ohjelmointiparadigmojen historia 10.5.2001 Tietojenk sittelytieteen historia -seminaari Mikko Ter s Ohjelmoinnin esihistoriaa Ensimm iset algoritmit Mesopotamiassa ... – PowerPoint PPT presentation

Number of Views:72
Avg rating:3.0/5.0
Slides: 28
Provided by: MIKK157
Category:

less

Transcript and Presenter's Notes

Title: Ohjelmointiparadigmojen historia


1
Ohjelmointiparadigmojen historia
  • 10.5.2001
  • Tietojenkäsittelytieteen historia -seminaari
  • Mikko Teräs

2
Ohjelmoinnin esihistoriaa
  • Ensimmäiset algoritmit Mesopotamiassa n. 2000
    e.Kr.
  • Ohjelmointi 1800-luvulta alkaen
  • Korkean tason kielet 1945

3
Ohjelmointiparadigmoista
  • Ohjelmointiparadigmat liittyvät korkean tason
    ohjelmointiin
  • Kuvaavat kielissä käytettyä ajattelutapaa,
    idiomia, filosofiaa
  • Esim. imperatiiviset, funktionaaliset,
    deklaratiiiviset, olio-, rinnakkais- ja
    logiikkakielet

4
1940-1960
  • Ensimmäinen korkean tason kieli Zusen
    Plankalkül, 1945
  • Ensimmäinen yleisesti tunnettu kieli Short Code,
    1949
  • Ensimmäinen kääntäjä AUTOCODE, 1952
  • 1945-1957 tutkittiin n. 20 korkean tason kieltä,
    pääasiassa imperatiivisia

5
Fortran
  • 1950-luvulla vain konekieltä pidettiin riittävän
    tehokaana, vaikka se ymmärrettiin hankalaksi ja
    siirtokelvottomaksi
  • Fortranin tarkoituksena oli tuottaa yhtä
    tehokasta koodia kuin hyvä konekieliohjelmoija
  • Ensimmäinen toteutus 1957

6
  • Object programs produced by Fortran will be
    nearly as efficient as those written by good
    programmers.
  • Saavutti heti huomattavan suosion.

7
TPK-algoritmi, C
  • int i
  • float y
  • float a11
  • float f (float t)
  • return sqrt(fabs(t)) 5 t t t
  • int main (void)
  • for (i 0 i lt 10 i)
  • scanf(d, ai)
  • for (i 10 i gt 0 --i)
  • y f(ai)
  • if (y gt 400)
  • printf(d TOO LARGE\n, i)
  • else
  • printf(d d\n, i, y)
  • return 0

8
TPK-algoritmi, Fortran 0
  • DIMENSION A(11)
  • READ A
  • 2 DO 3, 8, 11 J 1, 11
  • 3 I 11 - J
  • Y SQRT(ABS(A(I1))) 5 A(I 1)3
  • IF (400 gt Y) 8, 4
  • 4 PRINT I, 999.
  • GO TO 2
  • 8 PRINT I, Y
  • 11 STOP

9
TPK-algoritmi, Fortran 1
  • FUNF(T) SQRTF(ABSF(T))
  • 5.0T3
  • DIMENSION A(11)
  • FORMAT(6F12.4)
  • 1 READ 1, A
  • DO 10 J 1,11
  • I 11 - J
  • Y FUNF(A(I1))
  • IF (400.0-Y) 4, 8, 8
  • 4 PRINT 5, I
  • 5 FORMAT(I10, 10H TOO LARGE)
  • GO TO 10
  • PRINT 9, I, Y
  • 9 FORMAT(I10, F12.7)
  • 10 CONTINUE
  • STOP 52525

10
LISP 1956-1959
  • Listakieli tekoälyohjelmointiin
  • Fortranin listalaajennus FLPL
  • LISP 1 1958 rekursio, ehtolausekkeet,
    roskienkeruu...
  • LISP 1.5 1959 paranteluja, erityisesti
    laskennassa

11
1960-luku ALGOL
  • ALGOL 60 uudisti imperatiiviset kielet
    esittelemällä lohkorakenteen
  • ALGOLin kaltaiset kielet
  • Käytettiin laajasti yliopistomaailmassa ja
    julkaisuissa, ei menestystä teollisuudessa
  • ALGOL 68 komitean suunnittelema hevonen

12
TPK-algoritmi, ALGOL 60
  • procedure TPK (a) b
  • array (a010, b021)
  • begin for i 10(-1)0
  • begin y f(ai)
  • f(t) sqrt(abs(t)) 5 t ? 3 ?
  • if (y gt 400) y 999
  • b20 - 2 i i
  • b21 - 2 i y
  • end
  • return
  • integer (i)
  • end TPK

13
1960 ja ohjelmistokriisi
  • 1960-luvulla jouduttiin etsimään uusia tapoja
    tuottaa oikein toimivia ohjelmia
  • Matalan tason rakenteet joutuivat kritiikin
    kohteeksi
  • Yrityisesti goto-lause puhutti gotottomia
    kokeiluja jo vuonna 1960

14
Ohjelmistokriisi...
  • Dijkstra Go To Statement Considered Harmful
  • For a number of years I have been familiar with
    the observation that the quality of programmers
    is a decreasing function of the density of go to
    statements in the programs they produce.

15
  • Kokeilut jatkuivat
  • It is my aim to write programs with no labels. I
    am doing quite well. I have got the operating
    system down to 5 labels and I am planning to
    write a compiler with no labels at all. --
    Christopher Strachey, 1971 --
  • ACM National Conference 1972 ja gotot

16
LISP 60-luvulla
  • LISPin kehitys hajosi monelle taholle
  • Matemaattinen eleganssi kävi ilmeiseksi LISPistä
    poistettiin imperatiivisia rakenteita
  • Kontrollirakenteena rekursio
  • Kaikki data ja koodi samanmuotoista (listoja)

17
LISP-esimerkki
  • Palauta listan l viimeinen alkio
  • (defun (rac l)
  • (cond ((eq l ()) ())
  • ((eq (cdr l) ()) (car l))
  • (rac (cdr l))))

18
Simula 67 oliot
  • Kristen Nygaard Ole-Johan Dahl
    ohjelmointikieli simulaatioihin
  • Ensimmäinen versio vain simulaatioihin, jonot
    perusrakenteena
  • Simula 67 ALGOL 60n yleiskäyttöinen
    luokkalaajennus
  • Luokat, oliot, virtuaalifunktiot, perintä

19
70-luku modulaarisuus
  • Ohjelmistot kasvoivat edelleen
  • Moduulit tulivat muotiin vasta 70-luvulla, vaikka
    toteutuksen kätkeminen oli keksitty jo paljon
    aiemmin
  • Uusia kieliä Pascal, C, Modula

20
Smalltalk 1970-1980
  • Xeroc PARC kannettava Dynabook maallikoille,
    erityisesti lapsille
  • Tarvittiin yleistajuinen ohjelmointikieli
    järjestelmän laajentamiseen
  • Viestinvälitys ja periytyminen
  • 100 puhdas oliokieli kaikki toiminnot
    palautuvat olioihin

21
Smalltalk-esimerkki
  • s f
  • s Prompter prompt Enter line
  • default .
  • f bag new.
  • s do c c isLetter ifTrue f add c
  • asLowerCase.
  • f

22
Smalltalk...
  • Paljon kiinnostusta, vähän menestystä
  • Edesauttoi myöhemmin uusien oliokielien syntyä

23
70-luvun jälkeen
  • Oliot herättivät suurta kiinnostusta, tutkittiin
    proverbiaalisena hopealuotina
  • Olioiden integrointi imperatiivisiin kieliin
    C, CLOS
  • Olio-ohjelmointi on muodissa, mutta ei puhtaassa
    muodossaan

24
Funktiokielet tänään
  • Uusia funktionaalisia kieliä ML, Haskell,
    Miranda, Gofer...
  • Teoreettiset ansiot käytännöllisiä suuremmat
  • Ei juuri menestystä kaupallisessa maailmassa...
  • ...mutta tutkimus, GNU-projekti?

25
Viimeinen alkio LISPillä
  • Palauta listan l viimeinen alkio
  • (defun (rac l)
  • (cond ((eq l ()) ())
  • ((eq (cdr l) ()) (car l))
  • (rac (cdr l))))

26
...ja sama MLksi
  • fun rac (nil) nil
  • rac (ax) if null(x) then a
  • else rac(x)

27
  • APL is like a beautiful diamond - flawless,
    beautifully symmetrical. But you cant add
    anything to it. If you try to glue on another
    diamond, you dont get a bigger diamond. LISP is
    like a ball of mud. Add more and its still a
    ball of mud - it still looks like LISP.
    -- Joel Moses --
Write a Comment
User Comments (0)
About PowerShow.com