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

Samankaltaiset tiedostot
812341A Olio-ohjelmointi, I Johdanto

1. Olio-ohjelmointi 1.1

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. II Johdanto olio-ohjelmointiin

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

TIE Principles of Programming Languages CEYLON

Ohjelmoinnin peruskurssien laaja oppimäärä

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

815338A Ohjelmointikielten periaatteet

.NET ajoympäristö. Juha Järvensivu 2007

Imperatiivisten ohjelmien organisointiparadigmojen. historia

Imperatiivisten ohjelmien organisointiparadigmojen historia

Common Lisp Object System

Olio-ohjelmointi Johdanto olio-ohjelmointiin

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

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

ELM GROUP 04. Teemu Laakso Henrik Talarmo

Dart. Ryhmä 38. Ville Tahvanainen. Juha Häkli

815338A Ohjelmointikielten periaatteet

Erlang. Miika Heinonen ja Lassi Uosukainen (Group 92) TIE Principles of Programming Languages Seminaariessee. Yleistä

JAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++?

PERL. TIE Principles of Programming Languages. Ryhmä 4: Joonas Lång & Jasmin Laitamäki

Ohjelmoinnin peruskurssien laaja oppimäärä, kevät

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

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

Ohjelmoinnin peruskurssien laaja oppimäärä

4. Lausekielinen ohjelmointi 4.1

Johdatus ohjelmointiin

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

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

Haskell ohjelmointikielen tyyppijärjestelmä

Chapel. TIE Ryhmä 91. Joonas Eloranta Lari Valtonen

7/20: Paketti kasassa ensimmäistä kertaa

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

Ohjelmointi 1 Taulukot ja merkkijonot

TIE PRINCIPLES OF PROGRAMMING LANGUAGES Eiffel-ohjelmointikieli

Teollisuusautomaation standardit Osio 9

JReleaser Yksikkötestaus ja JUnit. Mikko Mäkelä

815338A Ohjelmointikielten periaatteet Harjoitus 4 vastaukset

SEMINAARI ESSEE: DYLAN. TIE Principles of Programming Languages

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

Ohjelmoinnin peruskurssien laaja oppimäärä

Objective-C. Ryhmä 35: Ilpo Kärki Aleksi Pälä

815338A Ohjelmointikielten periaatteet

Java-kielen perusteet

tään painetussa ja käsin kirjoitetussa materiaalissa usein pienillä kreikkalaisilla

Java-kielen perusteet

.NET ja C# Virtuaalikone. Common Language Infrastructure (CLI) Periaate. Etuja. Haittoja. Mikä on CLI. CLI standardin merkitys (CLS, Ecma)

Kielioppia: toisin kuin Javassa

Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 5: Python

Luento 4 Aliohjelmien toteutus

Ohjelmoinnista. Ohjelmien toteutukseen tarjolla erilaisia välineitä:

Ohjelmoinnin peruskurssien laaja oppimäärä

2. Olio-ohjelmoinnin perusteita 2.1

TIE Ohjelmistojen suunnittelu. Luento 2: protot sun muut

Ohjelmistotekniikan menetelmät, UML

C++11 lambdat: [](){} Matti Rintala

Ohjelmoinnin perusteet Y Python

Sisällys. 1. Omat operaatiot. Yleistä operaatioista. Yleistä operaatioista

Imperatiivisten ohjelmien organisointiparadigmojen historia

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op

TIE Ohjelmistojen suunnittelu. Luento 8..9: moniperintä

18. Abstraktit tietotyypit 18.1

Groovy. Samuli Haverinen, Aki Hänninen. 19. marraskuuta 2015

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

Ohjelmointi 2. Jussi Pohjolainen. TAMK» Tieto- ja viestintäteknologia , Jussi Pohjolainen TAMPEREEN AMMATTIKORKEAKOULU

CODEONLINE. Monni Oo- ja Java-harjoituksia. Version 1.0

2. Lisää Java-ohjelmoinnin alkeita. Muuttuja ja viittausmuuttuja (1/4) Muuttuja ja viittausmuuttuja (2/4)

Samanaikaisuuden hallinta

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

Sisällys. 7. Oliot ja viitteet. Olion luominen. Olio Java-kielessä

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

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. IX Suunnittelumallit Proxy, Factory Method, Prototype ja Singleton

11/20: Konepelti auki

TIEA341 Funktio-ohjelmointi 1, kevät 2008

lausekkeiden tapauksessa. Jotkin ohjelmointikielet on määritelty sellaisiksi,

Sopimuspohjainen olio-ohjelmointi

Ohjelmoinnin peruskurssien laaja oppimäärä

811120P Diskreetit rakenteet

1. Omat operaatiot 1.1

Clojure, funktionaalinen Lisp murre

Olio-ohjelmointi Javalla

Visual Basic -sovelluskehitin Juha Vitikka

Java-kielen perusteet

Sisällys. 18. Abstraktit tietotyypit. Johdanto. Johdanto

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

Sisällys. 9. Periytyminen Javassa. Periytymismekanismi Java-kielessä. Periytymismekanismi Java-kielessä

Tutoriaaliläsnäoloista

Olion elinikä. Olion luominen. Olion tuhoutuminen. Olion tuhoutuminen. Kissa rontti = null; rontti = new Kissa();

15. Ohjelmoinnin tekniikkaa 15.1

Sisällys. 9. Periytyminen Javassa. Periytymismekanismi Java-kielessä. Periytymismekanismi Java-kielessä

Aliohjelmatyypit (2) Jakso 4 Aliohjelmien toteutus

Ohjelmoinnin perusteet Y Python

Jakso 4 Aliohjelmien toteutus

20. Javan omat luokat 20.1

Operaattoreiden ylikuormitus. Operaattoreiden kuormitus. Operaattoreiden kuormitus. Operaattoreista. Kuormituksesta

13/20: Kierrätys kannattaa koodaamisessakin

PRINCIPLES OF PROGRAMMING LANGUAGES - DEBUGGER

Sisällys. 20. Javan omat luokat. Java API. Pakkaukset. java\lang

2. Olio-ohjelmoinnin perusteita 2.1

Ohjelmointikielien kehittyminen

Transkriptio:

Varhaiset oliokielet Modula, CLU ja Smalltalk T-106.5800: Seminar on the History of Programming Languages Kari Koskinen Otaniemi 29.9.2009

Luennon sisältö Modula CLU (CLUster programming language) Smalltalk Pohdintaa

Modula perhe ETH (Die Eidgenössische Technische Hochschule )/Xerox PARC (Palo Alto Research Center) Niklaus Wirth Ideat 1970-luvulla, implementaatio (Modula 2) 1980 Vaikuttanut voimakkaasti oliokielien kehittymiseen

Ohjelmointikielten tilanne 1970-luvulla Yleisimmät kielet Fortran (yliopistomaailma), Cobol (yritysmaailma), PS/I (laajenemassa), MESA (PARC) ja Pascal Kielissä useita puutteita: datatyypit (Fortran, Cobol), komponenttien riippumattomuuden puutteet (Pascal), epäyhtenäinen toteutus (PS/I) Laajojen ohjelmistojen hallinta hankalaa

Modulan 2:n erityispiirteitä Pascal-tyylinen syntaksi Yksi päätarkoituksista opetuskäyttö (kuten myös Pascalissa) Ensimmäinen toteutus Lilith järjestelmään Joitakin pienimuotoisia korjauksia Pascaliin (mm. proseduurien parametrit ja elserakenne) Moduulirakenne

Modula-kielen rajoitteita Muistinhallinta (ei roskien keräämistä, ei huomioitu moniajoa) Ei keskeytysten hallintaa Ei varsinainen oliokieli (ei perintää, ) Ei rinnakkaisuutta Liian kevytkenkäisesti toteutetut alimman tason operaatiot, mm. tyypinvaihto (N. Wirthin mukaan)

Modulan moduulirakenne Moduulien määrittelytiedot erotetaan toteutuksesta (vrt. C:n header-tiedostot) Moduulien vuorovaikutus määritellään vahvan tyypityksen periaatteella Yllämainittujen seurauksena tyyppitarkastukset tehdään jo käännosvaiheessa (eikä esimerkiksi linkityksessä) Moduulien näkyvyys mahdollistaa hierarkisen moduulirakenteen Moduulit voidaan tulkita myös abstraktiksi tietotyypiksi

Moduulirakenne, esimerkki Objektien näkyvyys, export-komento: DEFINITION MODULE M1; EXPORT QUALIFIED a, b, c, P;... Objektien näkyvyys, import-komento: MODULE M2; IMPORT M1; #Menetelmä 1 IMPORT M1.c; # Menetelmä 2 Objekteihin viittaaminen: M1.a:=2; c:=6

Oliokielten kehityspolku Algol (1958) Pascal (1970) Modula (modula-2, 1980) Oberon (1986) Oliokielet

CLU Barbara Liskov, MIT, 1974 1975 Alun perin tarkoituksena oli tutkia konseptitasolla abstrakteja tietotyyppejä Nimi sanan cluster alkuosasta Ensimmäinen kieli, joka toteutti datan abstraktoinnin ohjelmointikielen tasolla Syntaksi Algolista, semantiikka Lisp:stä Myös muilla kielillä vaikutusta (Simula, PL/I, Pascal, SETL, jne.)

CLU:n lähtökohdat Haluttu toiminnallisuus ja toteutus ovat eri asioita Ohjelman osien riippumattomuus: Toteutuksen määritykset (specification) Toteutuksen kapsulointi (encapsulation) Monet, mahdollisesti tärkeät, osat jätettiin kehityksen ulkopuolelle: rinnakkaisuus, kontrollirakenteet Yksinkertaisuus, ilmaisuvoimaisuus, yhdenmukaisuus, turvallisuus ja tehokkuus

CLU ja olio-ohjelmointi Ohjelman kokonaisuuden erottaminen toisistaan hyvin samantyyppinen kuin ajatustapa nykyisessä olio-ohjelmoinnissa Datatyypit ja niitä käsittelevät funktiot sijoitetaan samaan kokonaisuuteen Ohjelmoijan vapautta rajoitetaan, jotta kokonaisuus saadaan paremmin hallintaan Painotus on enemmän ohjelmarakenteiden erottelussa kuin toiminnallisessa erottelussa (operaatiot kuuluvat tyyppimäärittelyyn, eivätkä olioon itseensä) tai semanttisessa ajattelutavassa Käyttämättömät oliot poistetaan roskankeräyksellä Ei perintää eikä oliohierarkiaa, oliot eivät voi sisältää olioita (CLUssa klustereita)

CLU, luokan määrittely complex_number = cluster is add, subtract, multiply,... rep = record [ real_part: real, imag_part: real ] add = proc... end add; subtract = proc... end subtract; multiply = proc... end multiply;... end complex_number;

Smalltalk Kehitys 1970-luvulla, PARC:ssa Alan Kay, Dan Ingalls, Adele Goldberg, Ted Kaeuhler, Scott Wallace ja muut Ensimmäinen versio 1971 syntyi ideasta totetuttaa viestinvälitykseen perustuva kieli yhdellä koodisivulla Lukuisia hyvin erilaisia versioita 1970-luvun kuluessa Enimmäinen julkaistu versio 1980 (Smalltalk-80) Erilaisia toteutuksia (mm.apple, Visual Works, Object Works, IBM), mutta ei koskaan levinnyt laajemmin

Smalltalkin ominaispiirteitä Kaikki elementit ajatellaan olioina ( everything is an object ) Myös perustietotyypit (int, boolean ) Poikkeus: olioiden sisäiset muuttujat Tässä mielessä puhtaampi oliokieli, verrattuna esimerkiksi Javaan ja C++:aan Olioiden toiminta perustuu viestien vastaanottoon, käsittelyyn ja lähettämiseen Minimalistinen syntaksi (ainoat varatut pseudomuuttujat : true, false, nil, self, super ja thiscontext ) Bytecode ja virtuaalikone Perintä (Smalltalk-76)

Smalltalkin paradigma 1. Kaikki muodostuu olioista 2. Oliot vuorovaikuttavat lähettämällä viestejä 3. Olioilla on oma muistiavaruus 4. Olio on luokan ilmentymä 5. Luokka sisältää olioiden jaetun käyttäytymisen 6. Oliot on järjestetty yksijuuriseksi puuksi perintähierarkiaan (Smalltalk 76 )

Smalltalkin viestinvälitys, esimerkki Viestinvälitys (postfix): 442 factorial 2 raisedto: 4 3 + 4 Objekteihin viittaaminen (ennen Smalltalk-80 julkaisua): grow >> (SELF undraw. size <- size + :. SELF draw) Smalltalk-80: Grow: amount method to change size of a box self undraw. size <- size + amount. self draw

Smalltalk-kielen vaikutukset ohjelmointikielten kehitykseen 1. Syntaksi ja semantiikka 2. Prototyyppi viestinvälitys-malliin (message passing) 3. Graaffisen käyttöliittymän kehitys (ikkunointijärjestelmä) 4. Pohja integroitujen kehitysympäristöjen (IDE=Integrated Developing Enviroment) kehittämiseen

Pohdintaa Ideat ovat syntyneet 60-luvulla, ensimmäiset toteutukset 70-luvulla ja tuotantokäyttö 80-luvulta lähtien Paradigmojen kehitys liittynyt kiinteästi mahdollisuuksiin (muisti, laskentateho, yms.) ja toisaalta tarpeisiin (ohjelmistojen monimutkaistuminen, graafiset käyttöliittymät yms.) Toteuttaminen on eri asia kuin teoria ( running code wins -IETF) Toteutukset ovat aina jossain määrin kompromisseja

Lähdekirjallisuutta Modula Niklaus Wirth, 2007: Modula-2 and Oberon, teoksessa: History of programming languages III, pp. 3-1 10, URL:http://www.inf.ethz.ch/personal/wirth/Articles/Modula-Oberon-June.pdf, käyty 20.9.2009 Wikipedia yhteisö: Modula-2, URL:http://en.wikipedia.org/wiki/Modula-2, käyty 20.9.2009 Smalltalk Allan C. Kay, 1996: The early history of Smalltalk, teoksessa: History of programming languages II, pp. 511 598, URL:http://gagne.homedns.org/~tgagne/contrib/EarlyHistoryST.html, käyty 20.9.2009 Wikipedia yhteisö: Smalltalk, URL:http://en.wikipedia.org/wiki/Smalltalk, käyty 20.9.2009 CLU Barbara Liskov, 1996: A History of CLU, teoksessa: History of programming languages II, pp.471 510, URL:http://www.lcs.mit.edu/publications/pubs/pdf/MIT-LCS-TR-561.pdf, käyty 20.9.2009 Wikipedia yhteisö, CLU (programming language), URL:http://en.wikipedia.org/wiki/CLU_%28programming_language%29, käyty 20.9.2009