Luentokalvot - Johdanto
Transcription
Luentokalvot - Johdanto
*x++=*y++ 815338A Ohjelmointikielten periaatteet 2014 - 2015 I Johdanto *x++=*y++ Sisältö 1. 2. 3. 4. 5. Ohjelmointikielen määritelmä Syitä tutkia ohjelmointikieliä Ohjelmointiparadigmat Suunnittelu- ja arviointikriteerit Suunnitteluun vaikuttavia tekijöitä Ari Vesanen, Tietojenkäsitttelytieteiden laitos 815338A Ohjelmointikielten periaatteet , Johdanto 2 *x++=*y++ I.1 Ohjelmointikielen määritelmä Merkintäjärjestelmä, joka kuvaa laskentaa sellaisessa muodossa, että se on koneen ja ihmisen luettavissa. (Louden) Tyhjentävä määritelmä hankala keksiä, yo. riittää tässä Laskenta Määritellään usein formaalisti Turingin koneen avulla Tässä (epätarkasti): mikä tahansa tietokoneen suorittama toiminto Ohjelmointikieli koneen luettavissa Mahdollisuus kääntää automaattisesti konekielelle Ari Vesanen, Tietojenkäsitttelytieteiden laitos 815338A Ohjelmointikielten periaatteet , Johdanto 3 *x++=*y++ I.1 Ohjelmointikielen määritelmä (2) Ohjelmointikieli ihmisen luettavissa Epätarkempi vaatimus Kielessä oltava koneen toimintaa kuvaavia abstraktioita, jotta kielen käyttäminen ei vaadi koneen syvällistä ymmärtämistä Ohjelmointikielet muistuttavat usein jossain määrin luonnollista kieltä Ari Vesanen, Tietojenkäsitttelytieteiden laitos 815338A Ohjelmointikielten periaatteet , Johdanto 4 *x++=*y++ I.2 Syitä tutkia ohjelmointikieliä 1. Ohjelmointitaito kehittyy • Ohjelmointi-ideoiden ilmaisuvalmius kasvaa • Konstruktiot kielelle ominaisia • Käytettävän kielen valinta helpottuu • Kielen syvempi ymmärtäminen auttaa virhetilanteissa • Oheistyökalujen käyttö tehostuu 2. Valmius oppia uusia kieliä kasvaa • Perusperiaatteiden tuntemus auttaa 3. Periaatteita tarvitaan ohjelmoinnin opettamisessa Ari Vesanen, Tietojenkäsitttelytieteiden laitos 815338A Ohjelmointikielten periaatteet , Johdanto 5 *x++=*y++ I.2 Syitä tutkia ohjelmointikieliä (2) 4. Uusien kielten suunnittelu helpottuu • Olemassaolevat kielet tunnettava • Suunnitteluperiaatteet tunnettava 5. Tietojenkäsittely edistyy yleisesti • Parhaat ratkaisut yleistyvät, jos tunnetaan periaatteet Ari Vesanen, Tietojenkäsitttelytieteiden laitos 815338A Ohjelmointikielten periaatteet , Johdanto 6 *x++=*y++ I.3 Ohjelmointiparadigmat Ohjelmointikielen tyyppi läheisessä yhteydessä ohjelmointitapaan (paradigmaan) Paradigman osat: 1. laskennallinen malli, 2. käsitteistö ja 3. välineistö Yleisjako: Imperatiivinen ohjelmointi vs. deklaratiivinen ohjelmointi Ari Vesanen, Tietojenkäsitttelytieteiden laitos 815338A Ohjelmointikielten periaatteet , Johdanto 7 *x++=*y++ I.3.1 Imperatiivinen ohjelmointi Luonnollisin ohjelmointiparadigma von Neumanntietokoneympäristössä Tunnuspiirteet: 1. Muistia mallintavat muuttujat, 2. Muistia manipuloivat sijoituslauseet 3. Komentojen peräkkäinen suorittaminen Suurin osa nykyisistä ohjelmointikielistä pääosin imperatiivisia Ari Vesanen, Tietojenkäsitttelytieteiden laitos 815338A Ohjelmointikielten periaatteet , Johdanto 8 *x++=*y++ I.3.1.1 Olio-ohjelmointi Lasketaan joskus omaksi paradigmaksi Ohjelma koostuu olioista ja toiminta niiden kommunikaatiosta Nykyiset oliokielet luonteeltaan enimmäkseen imperatiivisia Ari Vesanen, Tietojenkäsitttelytieteiden laitos 815338A Ohjelmointikielten periaatteet , Johdanto 9 *x++=*y++ I.3.1.2 Rinnakkainen ohjelmointi Viitataan usein ohjelmointimallina (peräkkäinen vs. rinnakkainen) Voidaan myös laskea ohjelmointiparadigmaksi Voidaan määritellä samanaikaisesti suoritettavia toimenpiteitä -> huolehdittava operaatioiden kommunikoinnin synkronoimisesta Monet nykyiset ohjelmointikielet tukevat Ari Vesanen, Tietojenkäsitttelytieteiden laitos 815338A Ohjelmointikielten periaatteet , Johdanto 10 *x++=*y++ I.3.2 Deklaratiivinen ohjelmointi Paradigmaan lasketaan kuuluvaksi 1. Funktionaalinen ohjelmointi 2. Logiikkaohjelmointi 3. Tietokantakielet Ari Vesanen, Tietojenkäsitttelytieteiden laitos 815338A Ohjelmointikielten periaatteet , Johdanto 11 *x++=*y++ I.3.2.1 Funktionaalinen ohjelmointi Perustaa laskennan funktioiden soveltamiseen Perusmekanismi on funktiokutsu Muuttujat ja toistorakenteet puuttuvat Kielet tunnetaan myös nimellä applicative languages Tunnettuja kieliä LISP ja Haskell Ari Vesanen, Tietojenkäsitttelytieteiden laitos 815338A Ohjelmointikielten periaatteet , Johdanto 12 *x++=*y++ I.3.2.2 Logiikkaohjelmointi Pohjautuu symbolisen logiikan käyttöön Ohjelma koostuu väitteistä (statements) Ei tarvita kontrollirakenteita Käyttää muuttujia, mutta eivät mallinna muistialueita vaan muistuttavat matematiikassa käytettäviä muuttujia Prolog harvoja yleisesti tunnettuja logiikkaohjelmointikieliä Ari Vesanen, Tietojenkäsitttelytieteiden laitos 815338A Ohjelmointikielten periaatteet , Johdanto 13 *x++=*y++ I.4 Suunnittelu- ja arviointikriteerit Yksi kurssin päätavoitteista: arvioida olemassa olevia ohjelmointikieliä -> periaatteita, joiden avulla kieliä voidaan arvostella 1950-luvulla kielet mahdollisimman yksinkertaisia 1970-luvun alkupuolella Hoaren kriteerit: 1.Yksinkertaisuus (Simplicity) 2.Turvallisuus (Security) 3.Nopea käännettävyys (Fast translation) 4.Käännetyn ohjelmakoodin tehokkuus (Efficient object code) 5. Luettavuus (Readibility) Ari Vesanen, Tietojenkäsitttelytieteiden laitos 815338A Ohjelmointikielten periaatteet , Johdanto 14 *x++=*y++ I.4.1 Loudenin kriteerit 1. 2. 3. 4. 5. 6. 7. 8. 9. Tehokkuus (Efficiency) Yleisyys (Generality) Ortogonaalisuus (Orthogonality) Sisäinen yhdenmukaisuus (Uniformity) Yksinkertaisuus (Simplicity) Ilmaisuvoima (Expressiveness) Täsmällisyys (Preciseness) Laiteriippumattomuus (Machine independence) Turvallisuus (Security) Ari Vesanen, Tietojenkäsitttelytieteiden laitos 815338A Ohjelmointikielten periaatteet , Johdanto 15 *x++=*y++ I.4.1 Loudenin kriteerit (2) 10. Yhdenmukaisuus yleisesti käytettyjen merkintöjen ja sopimusten kanssa (Consistency with accepted notations and conventions) 11. Laajennettavuus (Extensibility) 12. Rajoitettavuus (Restrictability) Ari Vesanen, Tietojenkäsitttelytieteiden laitos 815338A Ohjelmointikielten periaatteet , Johdanto 16 *x++=*y++ I.4.1 Loudenin kriteerit (3) Tehokkuus Käännetyn koodin tehokkuus: yksi tärkeimpiä mittareita (varsinkin aiemmin) Käännöksen tehokkuus Kielellä ohjelmoimisen tehokkuus Yleisyys Kielen piirre koota ominaisuutensa muutamista peruskäsitteistä Esimerkki: Pascalissa kahdentyyppisiä aliohjelmia (proseduuri ja funktio), C:ssä vain funktio. Samat toiminnot mahdolliset -> C yleisempi Ari Vesanen, Tietojenkäsitttelytieteiden laitos 815338A Ohjelmointikielten periaatteet , Johdanto 17 *x++=*y++ I.4.1 Loudenin kriteerit (4) Ortogonaalisuus Kielen piirteiden riippumattomuus toisistaan, mahdollisimman vähän perusrakenteita, joita voidaan yhdistellä riippumattomasti ALGOL 68-kielen suunnittelun pääperiaate Yhdenmukaisuus Johdonmukaisuus kielen rakenteiden ulkoasussa ja käyttäytymisessä Rikotaan kahdella tavalla: 1. Samankaltaisesti käyttäytyvät asiat näyttävät erilaisilta 2. Samalta näyttävät asiat käyttäytyvät eri lailla Ari Vesanen, Tietojenkäsitttelytieteiden laitos 815338A Ohjelmointikielten periaatteet , Johdanto 18 *x++=*y++ I.4.1 Loudenin kriteerit (5) Yksinkertaisuus Aikoinaan yksi tärkeimmistä suunnitteluperiaatteista Pascalissa tärkeä Sotii monia muita tavoiteltavia asioita vastaan Yksinkertaisen kielen käyttäminen voi olla vaikeata Täsmällisyys Kielellä tarkka määrittely Lisää kielen luotettavuutta Ari Vesanen, Tietojenkäsitttelytieteiden laitos 815338A Ohjelmointikielten periaatteet , Johdanto 19 *x++=*y++ I.4.1 Loudenin kriteerit (6) Ilmaisuvoima Kuinka helppoa kielessä on ilmaista monimutkaisia toimintoja ja rakenteita Auttaa tuottamaan ohjelmia tehokkaammin Yleensä ristiriidassa yksinkertaisuuden kanssa Nykyään lisätään luokkakirjastojen tai pakkausten avulla Esimerkki C:n ilmaisuvoimasta: strcpy(char *s, char *t){ while( *s++ = *t++); } Ari Vesanen, Tietojenkäsitttelytieteiden laitos 815338A Ohjelmointikielten periaatteet , Johdanto 20 *x++=*y++ I.4.1 Loudenin kriteerit (7) Laiteriippumattomuus Saavutetaan pääasiassa käyttämällä tietotyyppejä, jotka eivät vaadi koneen sisäisten ominaisuuksien tuntemusta Esimerkki: C-kielen int voi olla 16- tai 32-bittinen, Javassa aina 32-bittinen -> Java laiteriippumattomampi Turvallisuus Estää ohjelmointivirheiden (sekä syntaktisten että semanttisten) syntymistä Edistää ohjelmointivirheiden havaitsemista Turvallisuusperiaate -> tyypintarkistus Ari Vesanen, Tietojenkäsitttelytieteiden laitos 815338A Ohjelmointikielten periaatteet , Johdanto 21 *x++=*y++ I.4.1 Loudenin kriteerit (8) Yhdenmukaisuus yleisesti käytettyjen merkintöjen ja sopimusten kanssa Edistää kokeneen ohjelmoijan mahdollisuuksia oppia ja käyttää ohjelmointikieltä Laajennettavuus Mekanismi, jonka avulla kieleen voidaan lisätä ominaisuuksia Rajoitettavuus Ei tarvitse tuntea kaikkia kielen ominaisuuksia, jotta pystyisi käyttämään kieltä hyödyllisesti Ari Vesanen, Tietojenkäsitttelytieteiden laitos 815338A Ohjelmointikielten periaatteet , Johdanto 22 *x++=*y++ I.4.2 Sebestan kriteerit Ainoastaan arviointikriteerejä Neljä pääkategoriaa, jakaantuvat alikategorioihin: 1. Luettavuus (Readibility) i. Yksinkertaisuus (Simplicity) ii. Ortogonaalisuus (Orthogonality) iii. Tietotyypit (Data types) iv. Syntaksi (Syntax design) Ari Vesanen, Tietojenkäsitttelytieteiden laitos 815338A Ohjelmointikielten periaatteet , Johdanto 23 *x++=*y++ I.4.2 Sebestan kriteerit (2) 2. Kirjoitettavuus (Writability) i. Luettavuuden kriteerit ii. Abstraktiotuki (Support for abstraction) iii. Ilmaisuvoima (Expressivity) 3. Luotettavuus i. Luettavuus ja kirjoitettavuus ii. Tyypin tarkistus (Type checking) iii. Poikkeusten käsittely (Exception handling) iv. Moninimisyys (Aliasing) 4. Resurssivaatimukset Ari Vesanen, Tietojenkäsitttelytieteiden laitos 815338A Ohjelmointikielten periaatteet , Johdanto 24 *x++=*y++ I.4.2 Sebestan kriteerit (3) Luettavuus Yksi tärkeimmistä kriteereistä Arvioi kuinka hyvin ihminen ymmärtää kirjoitettua ohjelmakoodia Tietotyypit liittyvät ilmaisuvoimaan Syntaksin vaikutus: Varsinkin erikoissanat, kuten while, if, for, ... Ari Vesanen, Tietojenkäsitttelytieteiden laitos 815338A Ohjelmointikielten periaatteet , Johdanto 25 *x++=*y++ I.4.2 Sebestan kriteerit (4) Kirjoitettavuus Arvioi, kuinka helposti kielellä voi tuottaa valitun sovellusalueen ohjelmia Yksinkertaisuus ja ortogonaalisuus edesauttavat Tapa tukea abstraktiota vaikuttaa suuresti kirjoitettavuuteen Erityisesti tuki tietorakenteille Ilmaisuvoima monitahoinen käsite Kielessä mahdollisuus ilmaista operaatioita lyhyesti Lisääminen edistää kirjoitettavuutta, ei aina luettavuutta Ari Vesanen, Tietojenkäsitttelytieteiden laitos 815338A Ohjelmointikielten periaatteet , Johdanto 26 *x++=*y++ I.4.2 Sebestan kriteerit (5) Luotettavuus Kieli käyttäytyy määritellyllä tavalla kaikissa tilanteissa Tyypin tarkistus Tyyppivirheiden tarkistus ohjelmassa (käännöksen tai ohjelman ajon aikana) Poikkeusten käsittely Kielen kyky havaita ajonaikaiset virheet ja mahdollisesti toipua niistä Moninimisyys Kielen kyky muodostaa eri muuttujia viittaamaan samaan muistipaikkaan Voi aiheuttaa virhetilanteita, mutta hankala karsia kokonaan Ari Vesanen, Tietojenkäsitttelytieteiden laitos 815338A Ohjelmointikielten periaatteet , Johdanto 27 *x++=*y++ I.4.2 Sebestan kriteerit (6) Resurssivaatimukset Resurssit kouluttamaan ohjelmoijia Ohjelman kirjoittamisen vaatimat resurssit Kääntämisen tehokkuus Ohjelmien suorittamisen tehokkuus Implementointijärjestelmän kustannukset Ari Vesanen, Tietojenkäsitttelytieteiden laitos 815338A Ohjelmointikielten periaatteet , Johdanto 28 *x++=*y++ I.5 Suunnitteluun vaikuttavia tekijöitä I.5.1 Tietokoneen arkkitehtuuri Keskeisimpiä seikkoja - von Neumannin arkkitehtuuri vallitseva: Ohjelman muistialue: DATA KÄSKYT Laskennan tulokset . . . Käskyt ja data CPU Aritmeettislooginen yksikkö (ALU) Ari Vesanen, Tietojenkäsitttelytieteiden laitos Kontrolliyksikkö Käskyjen dekoodaus IO 815338A Ohjelmointikielten periaatteet , Johdanto 29 *x++=*y++ I.5.1 Tietokoneen arkkitehtuuri (2) von Neumannin arkkitehtuurin perusominaisuudet: Data ja ohjelma samassa muistissa, ei voi erottaa toisistaan Keskusyksikkö muistista erillään, suorittaa käskyt -> käskyt ja data siirrettävä muistista keskusyksikköön von Neumannin arkkitehtuurin käyttöönotto -> mahdollisuus manipuloida tietokoneohjelmia samoin kuin dataa -> ohjelmointikielten synty Imperatiiviset ohjelmointikielet pohjautuvat von Neumannin arkkitehtuuriin Ari Vesanen, Tietojenkäsitttelytieteiden laitos 815338A Ohjelmointikielten periaatteet , Johdanto 30 *x++=*y++ I.5.2 Ohjelmistojen suunnitteluperiaatteet 1950-luvulla ”automaattinen ohjelmointi” FORTRAN lähellä konekieltä 1960-luvulla eri periaatteiden kokeilua Satoja kieliä suunniteltiin 1970-luvulla rakenteinen ohjelmointi Top-down suunnittelu ja askeleittain tarkentaminen Monet merkittävimmistä ideoista 1970 –luvulla 1980-luvulta alkaen abstraktit tietotyypit ja olioohjelmointi Dataorientoitunut suunnittelumalli Nykyään vallitseva Ari Vesanen, Tietojenkäsitttelytieteiden laitos 815338A Ohjelmointikielten periaatteet , Johdanto 31