Imperatiivisten ohjelmien organisointiparadigmojen. historia

Samankaltaiset tiedostot
Imperatiivisten ohjelmien organisointiparadigmojen historia

Imperatiivisten ohjelmien organisointiparadigmojen historia

1. Olio-ohjelmointi 1.1

Ohjelmoinnista. Ohjelmien toteutukseen tarjolla erilaisia välineitä:

TIE PRINCIPLES OF PROGRAMMING LANGUAGES Eiffel-ohjelmointikieli

Johdanto Meta Kielten jaotteluja Historia. Aloitusluento. TIES542 Ohjelmointikielten periaatteet, kevät Antti-Juhani Kaijanaho

815338A Ohjelmointikielten periaatteet

Ohjelmointikieli TIE Principles of Programming Languages Syksy 2017 Ryhmä 19

Tutoriaaliläsnäoloista

Ongelma(t): Miten mikro-ohjelmoitavaa tietokonetta voisi ohjelmoida kirjoittamatta binääristä (mikro)koodia? Voisiko samalla algoritmin esitystavalla

Concurrency - Rinnakkaisuus. Group: 9 Joni Laine Juho Vähätalo

Prolog kielenä Periaatteet Yhteenveto. Prolog. Toni ja Laura Fadjukoff. 9. joulukuuta 2010

Johdatus ohjelmointiin

Ongelma(t): Miten tietokoneen komponentteja voi ohjata siten, että ne tekevät yhdessä jotakin järkevää? Voiko tietokonetta ohjata (ohjelmoida) siten,

ADA. Ohjelmointikieli. Ryhmä 5 Henna Olli, Päivi Hietanen

Imperatiivisen ohjelmoinnin peruskäsitteet. Meidän käyttämän pseudokielen lauseiden syntaksi

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli

Tieto ja sen osoite (3) Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI) Osoitinmuuttujat. Tieto ja sen osoite (5)

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli

Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

C++ Kuva 1-1. C- ja C++ kielien perustana olevat kielet.

Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

Muistutus aikatauluista

kontrollivuon analyysejä optimointiensa tueksi ja myös tiettyjen merkitysopillisten

Luento 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

Ohjelmoinnin peruskurssien laaja oppimäärä

812341A Olio-ohjelmointi, I Johdanto

Ruby. Tampere University of Technology Department of Pervasive Computing TIE Principles of Programming Languages

TIE Principles of Programming Languages. Seminaariesityksen essee. Ryhmä 18: Heidi Vulli, Joni Heikkilä

Koka. Ryhmä 11. Juuso Tapaninen, Akseli Karvinen. 1. Taustoja 2. Kielen filosofia ja paradigmat 3. Kielen syntaksia ja vertailua JavaScriptiin Lähteet

Tietorakenteet ja algoritmit

TIEA255 Tietotekniikan teemaseminaari ohjelmointikielet ja kehitysalustat. Antti-Juhani Kaijanaho. 16. helmikuuta 2011

Koottu lause; { ja } -merkkien väliin kirjoitetut lauseet muodostavat lohkon, jonka sisällä lauseet suoritetaan peräkkäin.

- Komposiittityypit - Object (Mukaanlukien funktiot) - Array. - Erikoisdatatyypit - null - undefined

Ohjelmistojen varhaisesta kehityksestä Tommi Kärkkäinen (Ceruzzi ss )

Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

OHJ-1010 Tietotekniikan perusteet 4 op Syksy 2012

SIMULOINTIYMPÄRISTÖJEN SOVELTAMINEN OPETUKSESSA SIMULOINNILLA TUOTANTOA KEHITTÄMÄÄN-SEMINAARI TIMO SUVELA

Ohjelmoinnin peruskurssien laaja oppimäärä

Soveltuvuustutkimus Lifebelt-ohjelman ideologian käytettävyydestä olioorientoituneeseen

Perinteiset tietokoneohjelmat alkavat pääohjelmasta, c:ssä main(), jossa edetään rivi riviltä ja käsky käskyltä.

Ohjelmoinnin peruskurssien laaja oppimäärä

Kiertokysely. Sulautetut järjestelmät Luku 2 Sivu 1 (??)

Ylläpidettävät ohjelmat. Evoluutiolait (Lehman) Lakien keskinäiset suhteet. Muutostarpeita (evoluution syitä) Ohjelmien luokittelu (Lehman)

ELM GROUP 04. Teemu Laakso Henrik Talarmo

1. Ohjelmoinnin peruskäsitteet ja -elementit

Ohjelmointiharjoituksia Arduino-ympäristössä

13/20: Kierrätys kannattaa koodaamisessakin

Luento 1 Tietokonejärjestelmän rakenne

Luento 1 Tietokonejärjestelmän rakenne. Järjestelmän eri tasot Laitteiston nopeus

Varhaiset oliokielet Modula, CLU ja Smalltalk. T : Seminar on the History of Programming Languages Kari Koskinen Otaniemi 29.9.

Ohjelmoinnin peruskurssien laaja oppimäärä

Luento 1 Tietokonejärjestelmän rakenne

Luento 1 (verkkoluento 1) Ohjelman sijainti Ohjelman esitysmuoto Laitteiston nopeus

Luento 3 (verkkoluento 3) Ttk-91 konekielinen ohjelmointi. Ohjelman esitysmuoto Konekielinen ohjelmointi ttk-91:llä (Titokone, TitoTrainer)

1.3Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä

Luento 1 Tietokonejärjestelmän rakenne. Järjestelmän eri tasot Laitteiston nopeus

Ohjelmoinnin perusteet Y Python

Ohjelmistojen mallintaminen, mallintaminen ja UML

TIEA341 Funktio-ohjelmointi 1, kevät 2008

815338A Ohjelmointikielten periaatteet

TIE Principles of Programming Languages CEYLON

Yhteenveto. Menettelytavat

D-OHJELMOINTIKIELI. AA-kerho, 33. Antti Uusimäki. Arto Savolainen

5/20: Algoritmirakenteita III

Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

815338A Ohjelmointikielten periaatteet

Maarit Harsu. O h j e l m o i n t i k i e l e t Periaatteet, käsitteet, valintaperusteet

TERO LAHTINEN FUNKTIONAALISTEN JA OLIO-IMPERATIIVISTEN OHJELMISTOKOMPONENTTIEN YHDISTÄMINEN. Diplomityö

Ohjelmoinnin peruskurssien laaja oppimäärä

Luento 4 Aliohjelmien toteutus

Luento 4 Aliohjelmien toteutus

Esimerkkejä polynomisista ja ei-polynomisista ongelmista

1. Mitä tehdään ensiksi?

Matematiikan ohjelmointi. Joakim von Wright

A215 Tietorakenteet. Tietojenkäsittelytieteiden laitos Tampereen yliopisto. Periodit I-II, syksy 2007

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin peruskurssien laaja oppimäärä

UML -mallinnus Viestiyhteyskaavio EERO NOUSIAINEN

Ongelma(t): Miten jollakin korkeamman tason ohjelmointikielellä esitetty algoritmi saadaan suoritettua mikro-ohjelmoitavalla tietokoneella ja siinä

Luento 4 Aliohjelmien toteutus

IDL - proseduurit. ATK tähtitieteessä. IDL - proseduurit

Vasen johto S AB ab ab esittää jäsennyspuun kasvattamista vasemmalta alkaen:

Ohjelmoinnin perusteet Y Python

ATK tähtitieteessä. Osa 3 - IDL proseduurit ja rakenteet. 18. syyskuuta 2014

Java kahdessa tunnissa. Jyry Suvilehto

OHJELMOINTIA MONIPUOLISESTI MATEMATIIKAN OPETUKSESSA LUMA-PÄIVÄT, TAMPERE

Algoritmit 1. Luento 11 Ti Timo Männikkö

Rinnakkaisuus. parallel tietokoneissa rinnakkaisia laskentayksiköitä concurrent asioita tapahtuu yhtaikaa. TTY Ohjelmistotekniikka

Sisällys. JAVA-OHJELMOINTI Osa 1: Ohjelmoinnin perusteita. Ohjelmoinnin kehityssuuntia. Ohjelmointi luvuilla. Ohjelmointi luvuilla

Kertausluento luennoista 1-3 1

1.3 Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä

Aliohjelmatyypit (2) Jakso 4 Aliohjelmien toteutus

Ohjelmoinnin perusteet Y Python

11/20: Konepelti auki

Jakso 4 Aliohjelmien toteutus

Tässä tiivistelmässä standardi tarkoittaa standardia SFS-EN

Luento 1 (verkkoluento 1) Tietokonejärjestelmä

Sisällys. JAVA-OHJELMOINTI Osa 7: Abstrakti luokka ja rajapinta. Abstraktin luokan idea. Abstrakti luokka ja metodi. Esimerkki

4. Lausekielinen ohjelmointi 4.1

Transkriptio:

Imperatiivisten ohjelmien organisointiparadigmojen historia Timo Tapanainen Helsingin yliopisto, tietojenkäsittelytieteen laitos Tietojenkäsittelytieteen historia -seminaari, kevät 2007 Sisältö Paradigma, ohjelmointiparadigma? Imperatiivinen paradigma Imperatiivisten ohjelmien organisointiparadigmojen historia Rakenteeton ohjelmointi / lauseohjelmointi Proseduraalinen ohjelmointi Rakenteinen ohjelmointi Modulaarinen ohjelmointi Olio-ohjelmointi 1

Paradigma, ohjelmointiparadigma? Paradigma Nykyinen merkitys Thomas Kuhnilta, The Structure of Scientific Revolutions (1962) paradigma = ajattelun kaava, kysymättä hyväksytty periaate tai katsomus Tiede edistyy paradigman vaihdoksina Ohjelmointiparadigma Robert W Floyd, The Paradigms of Programming (1978) Useita merkityksiä Ohjelmointiparadigmalla voidaan tarkoittaa: Ajatusmalli laskennasta Imperatiivinen, funktionaalinen, logiikkaohjelmointi Ajatusmalli siitä, mistä ohjelma koostuu (rakenteen organisointimalli) Olio-ohjelmointi, proseduraalinen ohjelmointi, 2

Sisältö Paradigma, ohjelmointiparadigma? Imperatiivinen paradigma Imperatiivisten ohjelmien organisointiparadigmojen historia Rakenteeton ohjelmointi / lauseohjelmointi Proseduraalinen ohjelmointi Rakenteinen ohjelmointi Modulaarinen ohjelmointi Olio-ohjelmointi Imperatiivinen paradigma Ensimmäiset ohjelmoitavat tietokoneet perustuivat von Neumannin konearkkitehtuuriin Imperatiivinen ohjelmointi = von Neumannin koneen ohjelmointia Laskennan mallina konkreettinen kone (vrt. funktionaalinen ohjelmointi) Menestynein laskennan malli Konekielet ovat ensimmäisiä imperatiivista ohjelmointia tukevia kieliä 3

Imperatiivisen ohjelmoinnin haasteet Tietokoneiden teho ja käyttäjäkunta laajenee Prosessorien teho tuplaantuu 18 kuukauden välein (Mooren laki) Keskuskoneet, minikoneet, pc,... Tehokkaammilla koneilla voidaan ratkaista monimutkaisempia ongelmia Ohjelmien koko ja monimutkaisuus kasvaa Ennen: tietokoneet kyvyttömiä suorittamaan ihmisten antamia käskyjä Nyt: ihmiset kyvyttömiä käskyttämään konetta Tarvitaan menetelmiä monimutkaisuuden ja laajuuden hallintaan Sisältö Paradigma, ohjelmointiparadigma? Imperatiivinen paradigma Imperatiivisten ohjelmien organisointiparadigmojen historia Rakenteeton ohjelmointi / lauseohjelmointi Proseduraalinen ohjelmointi Rakenteinen ohjelmointi Modulaarinen ohjelmointi Olio-ohjelmointi 4

Ohjelman rakennetta organisoivat paradigmat Yrityksiä hallita ohjelmien monimutkaisuutta ja laajuutta Organisointiparadigmat ohjaavat ohjelman toiminnallisuuden ja tiedon organisointia Paradigmat perustuvat yleensä yhden abstraktion varaan: lause > proseduuri > moduuli > luokka Paradigmojen kehitys on kulkenut: Koneen toiminnan ohjauksesta enemmän ongelma-alueen kuvaamiseen (deklaratiivinen) Ohjelmointiin suuressa mittakaavassa Organisointiparadigmojen historia [7] [3] [5] [1] [2] [4] [6] 1. Konekielet 2. Fortran 3. Funktiot Algoliin 4. Ensimmäiset assemblerit ja linkittäjät 5. C-kieli 6. Simula 7. C++ Lähde: Raccoon, L. B. 1997. Fifty years of progress in software engineering. SIGSOFT Softw. Eng. Notes 22, 1 (Jan. 1997), 88-104 5

Rakenteeton ohjelmointi ~ 1945 1958 Rakenteeton ohjelma koostuu: yhdestä toiminnallisuuden sisältävästä pääohjelmasta julkisesta tiedosta Ohjelmointi koneläheisillä abstraktioilla esim. gotolauseet (helppo toteuttaa kääntäjiä) Rakenteettoman ohjelmoinnin ongelmia: Saman toiminnallisuuden käyttö edellytti kopiointia matala rakenne ei sovellu laajojen ohjelmien toteuttamiseen Rakenteettoman ohjelman rakenne Lähde: http://www.zib.de/visual/people/mueller/course/tutorial/node3.html 6

Proseduraalinen ohjelmointi ~ 1958 1972 Korjaa rakenteettomien ohjelmien ongelmia Samaa toiminnallisuutta voidaan käyttää ilman kopioimista Proseduurikutsut korvaavat hypyt toimintoihin => ohjelman toimintaa helpompi seurata Ensimmäisiä proseduraalisia kieliä olivat Fortran ja Algol Proseduraalisen ohjelman toiminnallisuus jaetaan proseduureihin, jotka käsittevät julkista tai parametrina välitettyä tietoa Toiminnallisuuden asteittainen osittaminen proseduureiksi Proseduraalisen ohjelman rakenne 7

Proseduraalisen ohjelmoinnin ongelmat Suurissa ohjelmissa paljon pieniä proseduureja Proseduurien välinen yhteistyö globaalin tiedon avulla Vaikea jäljittää mitkä proseduurit käyttävät mitäkin globaalia tietoa Tiedon suojaus heikkoa Laajojen proseduraalisten ohjelmien ylläpito hankalaa Heikko tuki työn osittamiselle Goto-lauseet Imperatiivisissa ohjelmissa keskeisessä roolissa on ohjelman kontrollin ohjaus Kontrollia voidaan ohjata erilaisilla rakenteilla: Erittäin monikäyttöisillä hyppy- ja Goto-lauseilla Rajoitetummilla rakenteilla: for, if else, while Hyppylauseet ainoa tapa ohjata kontrollia konekielissä Fortran jäljitteli hyppylauseita Goto-lauseella (muut korkean tason kielet seurasivat perässä) Joissakin ohjelmointikielissä Goto-lause oli ainoa tapa hoitaa: Ennenaikaiset poistumiset funktioista Poikkeuskäsittely Silmukan keskeytys 8

Goto-lauseiden ongelma Goto-lauseiden holtiton käyttö johti vaikeasti ymmärrettävään spagettikoodiin GOTO 10! jump forward 23 CONTINUE i = i - 1 IF (i.eq. 0) GOTO 99 10 PRINT*, "Line 10" 69 j = j - 1! loop... IF (j.ne. 0) GOTO 69 GOTO 23! jump back 099 CONTINUE Rakenteinen ohjelmointi 70-luvun vaihde Tavoitteena helposti ymmärrettävät ja ylläpidettävät ohjelmat Ohjelmointi ilman goto-lauseita Käytetään rajoitetumpia, mutta helpommin ymmärrettäviä rakenteita: if else, do while, for Rakenteilla yksi sisäänmeno ja yksi ulostulo Ohjelman kontrollivuota voidaan seurata lukemalla ohjelmatekstiä ylhäältä alas Edsger Dijkstralla merkittävä rooli 1968, Go To Statement Considered Harmful Piti goto-lauseita haitallisena ohjelman ymmärtämisen kannalta Osoitti että goto-lauseita ei tarvittu, sillä kontrolli voidaan hoitaa pelkästään peräkkäisyyden, toiston ja valinnan mahdollistavilla rakenteilla 1969, Notes on Structured Programming 9

Modulaarinen ohjelmointi ~ 1972 1988 Korjaa monia proseduraalisen ohjelmoinnin ongelmia Tieto ja sitä käsittelevät proseduurit samaan rakenteeseen = moduuli. Moduuli peittää sisältämänsä tiedon esitystavan Moduulit erillään käännettäviä rajapintojen asiosta => Työ voidaan osittaa moduulitasolla Suunnittelun lähtökohtana on tieto Moduulaarisia kieliä: C, Clu, Modula-2, Ada 83, ML Moduulityyppi / moduuli manageri Modulaarisen ohjelman rakenne 10

Modulaarisen ohjelmoinnin ongelmat Algoritmit eivät ole avoimia laajennoksille A T1 toimintox() { switch (type) case T1 case T2 } Modulaarinen ohjelmointi A T1 T2 A Olio-ohjelmointi T1 T2 Olio-ohjelmointi Nousi esiin C++:an myötä 80-luvun loppupuolella Simula 60- ja Smalltalk 70-luvulla Korjaa modulaarisen ohjelmoinnin ongelmia Uusi rakenneyksikkö: luokka Laajentaa modulaarista ohjelmointia perinnällä ja monimuotoisuudella Tiedon ositus monella tasolla: globaali, moduuli (luokkataso), olio ja proseduuri Ongelmana läpileikkaavat näkökulmat (aspektiohjelmointi) 11

Yhteenveto Laskentakyvyn kasvu on johtanut monimutkaisempiin ja laajempiin ohjelmiin Ohjelmien monimutkaisuutta on hallittu erilaisilla organisointiparadigmoilla Organisointiparadigmat ohjaavat ohjelman toiminnallisuuden ja tiedon organisointia Paradigma Rakenteeton Proseduraalinen Rakenteinen Modulaarinen Olio-ohjelmointi Rakenneyksikkö - Proseduuri Kontrollirakenteet Moduuli Luokka 12