Merkittäviä korkean tason ohjelmointikieliä

Wikiopistosta

Korkeamman luokan ohjelmointikielet käsitetään tietojenkäsittelytieteissä kielinä, joissa käytetään mahdollisimman ihmisläheistä ja helposti kirjoitettavaa koodia. Kirjoittajan ei tarvitse itse olla selvillä suorittimesta tai muistin ohjauksesta. Kielen kääntäjä tunnistaa ne ohjelman kääntämisen yhteydessä lähdekoodista konekielelle. Se, kuinka paljon abstraktioita kielessä on, määrittää kuinka korkean tason ohjelmointikieli on kyseessä.[1][2][3]


Historia[muokkaa]

Korkeamman luokan ohjelmointikieliä edeltäneet symboliset kielet (assembly) olivat edistys suorasta konekielestä. Niiden komennot olivat merkkipohjaisia ja näin ollen havainnollisempia ja tältä osin parannus. Koodi oli kuitenkin työlästä kirjoittaa ja tietty koodi toimi vain käytetyssä laitteistossa.

Tämän myötä kehittyi nk. kolmannen sukupolven ohjelmointikielet, joista mainittakoon Fortran ja Cobol. Näissä oli ensimmäistä kertaa korkeamman luokan primitiivejä, jotka mahdollistivat koodin kirjoittamisen useammalle kuin yhdelle tietylle laitteistopohjalle kerrallaan. Tällöin kehitettiin ohjelman ajamista varten kääntäjä (compiler) ja tulkki (interpreter). Tulkki käänsi kirjoitettua ohjelmaa suoraan ylemmältä tasolta, kun taas kääntäjä loi koodista suoran konekielisen ohjelman myöhempää käyttöä varten.

Kolmannen sukupolven jälkeen ohjelmointikielet kohtasivat uusia haasteita. Alettiin puhua ohjelmoinnin kehityssuuntien sijaan ohjelman kehityksen suunnista. Nämä voidaan karkeasti jaotella neljään ryhmään. 1. Proseduraalinen (procedural / imperative) ohjelmointi, joka pyrkii ajamaan ohjelman rivi riviltä algoritmin mukaan.

2. Ennustava (declarative) ohjelmointi, joka pyrkii laajemman algoritmin avulla ennustamaan tai määrittämään annetun ongelman tai lähtökohdan jossain tulevassa havaintopisteessä. Hyvä esimerkki on säämalli, jossa annetaan joukko alkuarvoja ja mallinnetaan kehitys tietylle tulevalle ajankohdalle.

3. Funktionaalinen ohjelmointi, jossa ohjelman suoritus perustuu erilaisten funktioiden ryhmään, jossa alkutilanne ajetaan yhdeltä tai useammalta funktiolta aina seuraaville funktioille, kunnes lopputulos on saavutettu.

4. Olio-ohjelmointi (Object oriented -paradigm), joka on nykyään laajalti käytössä tunnetuimpien korkeamman asteen ohjelmointikielen osalta. Ohjelma rakentuu näissä objekteista, jotka suorittavat eri toimintoja itsenäisesti mutta myös vuorovaikuttavat keskenään. Esimerkiksi ohjelman graafisessa käyttöliittymässä eri painikkeet suorittavat toimintonsa, kun ne aktivoidaan hiirellä tai näppäimistön napilla.[4]

Abstraktiosakko[muokkaa]

Korkeamman tason ohjelmointikielet tarjoavat ohjelmoijille suuren joukon valmiita luokkia ja funktioita käytettäväksi. Hintana on kuitenkin se, että useimmiten ohjelman käännösvaiheessa ajetaan lukuisa joukko abstrakteja luokkia jopa moneen kertaan ennen kuin saadaan käännetty konekielinen ohjelma. Valmis ohjelma on kooltaan isompi kuin suoraan assembly-kielillä toteutettu vastine ja on poikkeuksetta ajettaessa kuormittavampi suorittimelle ja muistin käytölle. Lisäksi ajonaikaisten virheiden todennäköisyys on suurempi. Puhutaan abstraktiosakosta (Abstraction penalty).

Matalan tason ohjelmointikielet ovat selkeä valinta tilanteissa, joissa käytettävän systeemin suorituskyky ja muistin hallinta asettavat selkeät rajoitteet, esimerkkinä mikrokontrolleihin perustuvat laitteet. Matalan tason ohjelmointikielten haittapuolena on, että ohjelma toimii vain kyseisessä laitteistossa. Kun vanha laitteisto korvataan uudella, joudutaan kirjoittamaan myös ohjelmisto uusiksi.[5]

Korkean tason ohjelmointikielissä on abstraktiosakon minimointia yritetty enemmän ja vähemmän onnistuneesti.

Aihiometaohjelmointi (Template metaprogramming) on yksi näistä menetelmistä. Erityisesti C++, mutta myös CURL, D ja XL tukevat kyseistä menetelmää, jossa aihiot kääntämisen aikana korvataan täsmällisellä lähdekoodilla. Tämä kasvattaa kääntämisaikaa ja muistin käyttöä. Suorituskyvyn parannus käännetyllä ohjelmalla on vaihteleva.[6][7]

C++ tarjoaa myös inline-funktion, jossa käännöksen aikana korvataan määritetyt funktiokutsut sen sijaan, että tämä tapahtuisi ohjelman ajon aikana. Ohjelman suoritus ehkä nopeutuu, mutta tiedostokoko kasvaa. Lisäksi inline-funktioille on tiukat rajoitteet.[8]

Merkittävin tekijä abstraktiosakon minimoinnissa on kuitenkin kääntäjien kehittyminen kunkin ohjelmointikielen kehittäjän toimesta.

Java[muokkaa]

Java on Sun Microsystemsin johdolla kehitetty suosittu oliopohjainen ohjelmointikieli ja virtuaalikone avoimen lähdekoodin kehityksessä. Java-ohjelmia ajetaan käyttäen Java-virtuaalikonetta ja niitä voidaan myös kääntää natiiveiksi ohjelmiksi. Java oli alun perin kaupallisesti lisensoitu, mutta vuodesta 2007 alkaen se on ollut vapaan GNU GPL -lisenssin alainen. Ensimmäinen suurempaan levitykseen tarkoitettu Java-versio julkistettiin toukokuussa 1995. Samaan aikaan WWW-kuume oli maailmanlaajuisesti nousemassa.[9]

Java-arkkitehtuuri perustuu lähdekoodatun tiedoston kääntämiseen. Tätä kutsutaan Java-välikoodiksi (Java Bytecode). Se toteuttaa eräänlaisen virtuaaliprosessorin (Java Virtual Machine, VM) konekieltä. Tällaista pseudokonekieltä ei voi sellaisenaan ajaa missään oikeassa prosessorissa, vaan sen suorittamiseen tarvitaan halutussa ympäristössä toimiva Java-tulkki. Tällainen koneriippumattomuus onkin yksi Javan tärkeimmistä ominaisuuksista.


Historia[muokkaa]

Javan historian voidaan sanoa alkaneen vuonna 1990 Sun Microsystemsin vuorovaikutteiseen televisiotekniikkaan liittyvästä tutkimusprojektista. Tutkimusprojektissa James Gosling ja Arthur van Hoff kehittivät uuden ohjelmointikielen nimeltä Oak. Sun Microsystemsin luopuessa televisiohankkeestaan, alkoi Oakin kehittäminen yleiskäyttöiseksi WWW-ohjelmointikieleksi. Nimi Oak vaihdettiin Javaksi ennen ensimmäistä julkistusta vuonna 1992. Javasta julkaistiin uusia beeta-versioita vuosittain, kunnes toukokuussa 1995 julkistettu 1.0 JDK (Java Developer’s Kit) alfa-versio saavutti suuren yleisön tietoisuuden – ja suosion. Valtavan julkisuuden siivittämänä Sun Microsystems päätti syksyllä 1995 eriyttää jatkokehityksen ja markkinoinnin uuteen yhtiöön, JavaSoftiin. Keväällä 1997 julkaistussa JDK 1.1. oli käyttöliittymän ohjelmointi muuttunut oliomaisempaan suuntaan. JDK 1.2 taas julkaistiin vuonna 1998 ja se sisälsi uuden JFC-luokkakirjaston. Vuonna 2016 Sun Microsystems ilmoitti julkaisevansa Javan GNU GPL -lisenssillä. Viestintävirasto ilmoitti vuonna 2012, että Java 7 aiheuttaa Windows-ympäristössä tietoturva-aukon. Tietoturva-aukkoon tuli korjaava päivitys myöhemmin samana vuonna. Java SE 10 esiteltiin vuonna 2018.


Java kielenä[muokkaa]

Varsinainen Java-ohjelmointikieli on eräänlainen C++ kielen johdannainen. Siihen on lisätty joitakin C++:ssa tuntemattomia piirteitä ja muutamia piirteitä on muutettu tai poistettu. Kieli kuitenkin muistuttaa niin paljon C++:aa, että kokeneen C++ -ohjelmoijan on helppo päästä siihen sisälle. Java-kieli on oliopohjainen, koska kaikki ohjelmointi tapahtuu luokkien sisällä. Globaaleita muuttujia tai itsenäisiä funktioita ei sallita lainkaan. Javan luokkahierarkian juurena on luokka nimeltä Object, josta kaikki muut luokat on joko suoraan tai epäsuorasti peritty. Jokainen ohjelman olio sisältää siis vähintäänkin Object-luokan tarjoamat perusominaisuudet.

Java Development Kit (JDK) sisältää valmiina kattavan luokkakirjaston, josta löytyvät luokat esimerkiksi merkkijonojen käsittelyyn, grafiikan tekemiseen ja verkkoliikennöintiin. Java-alustan käyttöä ei ole rajattu pelkästään Java-ohjelmointikieleen, vaan mm. Python-, Ruby- ja Scheme-kielille on olemassa kääntäjä, joka tuottaa Java-tavukoodia. Lisäksi ainakin GNU ja IBM ovat kehittäneet oman Java-kääntäjänsä. IBM, Novell, BEA Systems ja Apache ovat myös kehittäneet oman virtuaalikoneensa lukuisten avoimen lähdekoodin toteutusten lisäksi. GNU:n kääntäjäympäristöön kuuluva GCJ (GNU Compiler for Java) osaa kääntää Javaa konekielelle.


Java sovelluksissa[muokkaa]

Javan ensimmäinen kohdeympäristö oli web-selaimet, joissa voitiin ajaa Java-sovelmia turvallisesti. Appletit olivat myös osa ensimmäistä Java-julkaisua 1995. Tätä tekniikkaa käytti esimerkiksi Netscape selainsodissa Microsoftia vastaan. Myöhemmin myös Microsoft kehitti oman virtuaalikoneensa, jonka toteutuksen takia se joutuikin oikeusjutun kohteeksi. Microsoft luopui Javan kehityksestä 2001 ja loi myöhemmin oman lähes samanlaisen tekniikkansa. Applettien suosio on laskenut ja muut tekniikat kuten Flash ovat ottaneet sen paikan yksinkertaisten selainsovellusten luonnissa. Oraclella on Java Web Start -tekniikka verkon yli ladattavien sovellusten luontiin. Se mahdollistaa täydellisten sovellusten suorittamisen verkon yli. Java Web Start esiteltiin 2001 ja se on ollut osana ajoympäristöä Java versiosta 1.4 lähtien.

Java Servlet API on dynaamisten websivujen kehittämiseen tarkoitettu rajapinta. Se kuuluu osaksi Java EE -pakettia. Servlet-rajapinnan toteuttaa servlet container. Se tarjoaa web-palvelimen, jota voi laajentaa omilla komponenteilla hyödyntäen Javan rajapintoja. Container tarjoaa palveluita, kuten esimerkiksi istunnonhallinnan. JavaServer Pages eli JSP on Servlet API:a käyttävä tekniikka. Se käyttää yksinkertaista merkkauskieltä HTML:n seassa hyödyntämään palvelimella olevien komponenttien toiminnallisuutta tai sisältää suoraan Java-koodia.

Enterprise Javabeans eli EJB on Servlet APi:n kaltainen tekniikka, joka on tarkoitettu tietokantakäyttöön. EJB:n komponentit ajetaan sovelluspalvelimessa, joka tukee hajauttamista, transaktioita ja rinnakkaisuuden hallintaa. Servlet ja EJB-tekniikoiden hyötynä on se, että sama sovellus on ajettavissa kaikissa rajapinnan toteuttavissa sovelluspalvelimissa. Näihin kuuluvat esimerkiksi JBoss, IBM WebSphere Application Server ja Oracle GlassFish.[10]

Python[muokkaa]

Python on monipuolinen ohjelmointikieli, jossa on pyritty yksinkertaiseen ja havainnolliseen rakenteeseen. Se on lähestymistavaltaan olio-ohjelmointikieli. Ohjelmoija voi määritellä jokaiselle datarakenteelle operaatioita, jotka voidaan nähdä asioina, jotka datarakennetta vastaava olio ”tekee”. Pythonilla on samoja piirteitä kuin Perlillä. Pythonia voidaan kutsua ns. tulkittavaksi kieleksi. Python-kielisen ohjelman suorittamiseksi käynnistetään Python-tulkki eli ohjelma, joka lukee Python-kielisen koodin ja toteuttaa sen käskyt suoraan. Pythonia pidetään helposti opittavana sen yksinkertaisen syntaksin ja korkean tason tietorakenteiden takia. Monet suosittelevatkin sitä ensimmäiseksi ohjelmointikieleksi.[11]


Historia[muokkaa]

Guido van Rossum aloitti kehittämään kieltä harrastuksenaan jouluna 1989. Hän onkin pysynyt kielen kehityksessä mukana koko sen historian ajan. Van Rossumin tarkoituksena oli sijoittaa Python shell-skriptikielen ja C-kielen väliin. Myöhemmin kehitystyötä varten perustettiin Python Software Foundation, joka julkaisi kielelle virallisen tulkin vuonna 2001. Pian tämän jälkeen syntyikin alkuperäisestä Python kielestä jalostettu Python 2.0. Python 3.0 puolestaan julkaistiin joulukuussa 2008. Python on myös yhtä vanha kuin GNU/Linux, sillä sen kehittely alkoi samoihin aikoihin vuonna 1991. Pythonin nimi perustuu Monty Pythonin lentävään sirkukseen. Nimi koettiin tarpeeksi lyhyenä ja mysteerisenä, joten se jätettiin siihen muotoon.[12]


Python kielenä[muokkaa]

Python on yksinkertainen kieli, jonka seurauksena moni aloittaakin sillä ohjelmoinnin opettelun. Python on tulkattava kieli ja sillä kirjoitetut ohjelmat ovat heti valmiita ajettaviksi ilman erillistä kääntämistä. Tämän seurauksena ohjelmoimisen ja testaamisen voi tehdä nopeasti. Pythonin tulkattavuus tarkoittaa, että se ei ole yhtä suorituskykyinen kuin käännettävillä kielillä kirjoitetut ohjelmat. Siihen sisältyy suuri joukko erilaisia kirjastoja. Pythoniin voidaan myös liittää muiden tekemiä avoimen lähdekoodin kirjastoja. Tästä syystä kehitystyö Pythonia käyttäen voi olla nopeaa. Pythonista sanotaankin, että sitä käyttäen ohjelmoija voi olla 10 kertaa tuottavampi kuin Javaa käyttäen, sekä 100 kertaa tuottavampi kuin C-kieltä käyttäen. Yhtenä merkittävänä Pythonilla tehtynä ohjelmistona voidaan pitää avoimen lähdekoodin yritysohjelmistoa Odoo:ta.[13][14]

C++[muokkaa]

C++ on 1980-luvulla Bjarne Stroustrupin C-kielen pohjalta kehittämä ohjelmointikieli. Kieli standardoitiin kuitenkin vasta 1998 ensimmäisen kerran. C-kielestä eroten, C++:ssa on lisäksi olio-ohjelmoinnin ja geneerisyyden ominaisuuksia. Lisäksi se tukee useaa nimiavaruutta. Yhtenä tärkeänä erona C-kieleen verrattuna on C++:n turvallisuus. Resurssivuodoista, puskuriylivuodoista, odottamattomista syötearvoista tai muista tyypillisistä tietoturva-aukoista ei kertakaikkiaan ole vaaraa, kun käytetään C++-kieltä. C++:lle olennaista on kääntäjä ja sen kanssa toimivat esikääntäjä ja linkkeri. C++ toimii lähes kaikilla alustoilla ja kehitysymäpristöillä. C++ ei ole aloittelijalle se kaikkein paras vaihtoehto, sillä kieltä käyttäessa joutuu kirjoittamaan paljon enemmän kuin esimerkiksi Pythonissa. C++-koodit eivät ole kovin kauniita, vaan ne saattavat näyttää sotkuisilta ja monimutkaisilta varsinkin aloittelevan koodaajan silmissä.

Lähteet[muokkaa]

  1. https://techterms.com/definition/high-level_language
  2. https://www.britannica.com/technology/computer-programming-language
  3. https://www.techopedia.com/definition/3925/high-level-language-hll
  4. Brookshear, J.Glenn (2007). Computer Science: An Overview (9th Edition), Addison-Wesley Longman Publishing Co
  5. https://en.wikipedia.org/wiki/High-level_programming_language
  6. https://en.wikipedia.org/wiki/Template_metaprogramming
  7. Karri Kulmala Markus Silván Juho Yli-Honkola ["Staattinen metaohjelmointi" http://users.jyu.fi/~antkaij/opetus/okp/2002/semma/meta.pdf] Ohjelmointikielten pääperiaatteet, Päätösseminaari , Jyväskylän Yliopisto - Tietotekniikan laitos, 2.12.2002
  8. http://www.cplusplus.com/articles/2LywvCM9/
  9. https://www.tivi.fi/Arkisto/2001-01-01/Java-ohjelmointikieli-3093184.html
  10. https://fi.wikipedia.org/wiki/Java
  11. http://jkorpela.fi/python/
  12. https://punomo.fi/tvt-ict-tekniikka/johdanto-pythoniin/
  13. https://fi.wikipedia.org/wiki/Python_(ohjelmointikieli)
  14. https://wiki.metropolia.fi/pages/viewpage.action?pageId=16288055