Ero sivun ”Ohjelmointi” versioiden välillä

Wikipediasta
Siirry navigaatioon Siirry hakuun
[arvioimaton versio][arvioimaton versio]
Poistettu sisältö Lisätty sisältö
pEi muokkausyhteenvetoa
Rivi 45: Rivi 45:
* Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides: ''Design Patterns - Olio-ohjelmointi Suunnittelumallit'', IT Press 2000, ISBN 951-826-428-7
* Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides: ''Design Patterns - Olio-ohjelmointi Suunnittelumallit'', IT Press 2000, ISBN 951-826-428-7
* Steve McConnell: ''Code Complete, Second Edition''. Microsoft Press, 2004. ISBN 0-7356-1967-0
* Steve McConnell: ''Code Complete, Second Edition''. Microsoft Press, 2004. ISBN 0-7356-1967-0
* Jouni Smed, Harri Hakonen, Timo Raita: ''[http://staff.cs.utu.fi/staff/jouni.smed/SHR07-SPOO.pdf Sopimuspohjainen olio-ohjelmointi Java-kielellä]''. Elektroninen kirja, 2007. ISBN 978-952-92-1776-2


== Aiheesta muualla ==
== Aiheesta muualla ==

Versio 7. maaliskuuta 2007 kello 16.12

Ohjelmointi tarkoittaa tietokoneelle tai vastaavalle laitteelle jollakin tavalla annettavia toimintaohjeita.

Tietokoneen suoritin ymmärtää suoraan vain ohjelmia, jotka on kirjoitettu konekielellä.

Tietokonetta ohjelmoidaan tavallisesti käyttämällä jotakin ohjelmointikieltä, jolla kirjoitettu lähdekoodi yleensä käännetään konekielelle tai tulkataan kieltä suorittavalla ohjelmalla.

Ohjelmoinnin kehittyminen

1950-luvulla

Ensimmäinen (ja yhä käytetty) ohjelmointikieli oli FORTRAN (formula translator), joka nimensä mukaisesti keskittyi matemaattisten lausekkeiden kääntämiseen konekielelle. Myöhemmin kuitenkin yleistyivät kaupallis-hallinnolliset sovellukset (esimerkiksi tietokannat ja COBOL-ohjelmointikieli).

1960-luvulta 1980-luvun puoliväliin

Historiallisesti yleisin tulkattava ohjelmointikieli on ensimmäisen kerran vuonna 1964 esitelty BASIC-ohjelmointikieli ja sen monet versiot. BASIC-kielessä ei ole kehittyneitä rakenteita, mutta vaivattoman käyttönsä ja helposti tehtävän tulkkinsa vuoksi se saavutti suosiota alkuperäisen opetustarkoituksensa ulkopuoleltakin.

Ohjelmointi kehittyi vähitellen kypsäksi tieteenalaksi ja 1960-luvun alkupuolella esitelty Algol-ohjelmointikieli jäi hallitsevaksi ohjelmointikielityypiksi ongelmien ratkaisuun pyrkivään algoritmiseen eli proseduraaliseen ohjelmointiin. Algol-perinnettä ylläpitivät siitä kehitetyt kielet kuten Pascal ja C. Tämäntyyppistä ohjelmointia leimaavat hyppyjen korvaaminen toistorakenteilla, nimetyt ja parametroidut ohjelmanosat eli proseduurit, muuttujien vaikutusalueen rajoittaminen ja peittäminen sekä muuttujien vahva käännösaikainen tyypitys (käännöksessä esimerkiksi tarkastetaan, ettei tuotetulla ohjelmalla voi sijoittaa kokonaisuluvuksi määriteltyyn muuttujaan lukua 10-1). Tärkeää on myös kielen kääntämisen yksinkertaistaminen tekemällä kieli soveltuvaksi erilliseen selaus- ja jäsentämisvaiheeseen.

Myöhemmissä 1980-luvun proseduraalisissa kielissä kehitettiin keinoja modularisoida ohjelmia lisää, abstrakteja tietotyyppejä ja moduulien välisiä sopimuksia (ohjelmointikielet Modula-2, Modula-3, Oberon, Clu ja Eiffel).

Algol-tyyppisissä ohjelmointikielissä on hyvin tärkeää, että ohjelma kääntyy erittäin tehokkaasti konekieleksi. Nämä ohjelmointikielet soveltuvat suuren ohjelmoijajoukon yhteistyössä tekemien ohjelmointiprojektien tekemiseen. Tämä traditio huipentui jossain määrin Yhdysvaltain puolustusministeriön vuonna 1980 määrittelemässä Ada-ohjelmointikielessä eikä sen jälkeen ole vakavasti määritelty tai otettu käyttöön puhtaasti proseduraalisia Algol-tyyppisiä ohjelmointikieliä (eikä tällainen ole myöskään Adan myöhempi versio, Ada 95).

1980-luvun puolivälissä

1980-luvulla tekoälyjärjestelmien oletettiin korvaavan ohjelmoinnin. Puhuttiin viidennen sukupolven tietokoneista ja sovelluskehittimistä, joiden avulla varsinaisesta ohjelmoinnista piti päästä eroon. Tähän ajatteluun liittyviä ohjelmointikieliä ovat funktionaaliset ohjelmointikielet (LISP), logiikkaohjelmointikielet (Prolog) ja erilaiset asiantuntijajärjestelmät. LISP-ohjelmointikielen ajateltiin olevan erityisen sovelias tekoälyohjelmointiin, koska LISP-ohjelma ja sen käsittelemä data kuvattiin samalla tavalla sisäkkäisinä listoina. Tekoäly ei johtanut toivottuun läpimurtoon ja kielillä on tällä hetkellä vähän käytännön merkitystä. Tekoälyohjelmointikielet ovat yleensä tulkattavia ja tehottomia konekieleen verrattuna.

1990-luvulla

Proseduraalisen ohjelmoinnin seuraaja 1980-luvun loppupuolelta asti on ollut olio-ohjelmointi. Ensimmäinen olio-ohjelmointikieli on vuodelta 1968 oleva Simula. Varsinaisen olio-ohjelmointi-ilmiön aloittanut ohjelmointikieli oli kuitenkin Smalltalk ja valta-asemaan olio-ohjelmoinnin nosti C++-ohjelmointikieli. Olio-ohjelmoinnissa maailma mallitetaan itsenäisiksi olioiksi, jotka voivat periä ominaisuuksilta muilta olioluokilta. Oliot voivat kommunikoida vain viesteillä, metodeilla, niiden tilaa ei voi muuten kysellä. Olio-ohjelmoinnissa tärkeää on koodin uudelleenkäytettävyys eri tarkoituksiin, ei enää ohjelman kääntyminen tehokkaaksi konekieleksi.

1990-luvulla myös käyttöliittymien tekeminen yksinkertaistui ja standardoitui niin, ettei käyttöliittymän osuus ollut enää suurin osa tyypillisen sovelluksen tekemiseen kuluvasta työpanoksesta.

2000-luvun ensimmäisellä vuosikymmenellä

Henkilökohtaisten tietokoneiden myötä henkilökohtaisten hyötyohjelmien käyttö lisääntyi. Näissä käyttäjät pääsevät itse ohjelmoimaan esimerkiksi komentosarjakielten avulla. Komentosarjakielet ovat usein tulkattavia tai "esikäännettyjä" (missä yhdistyy tulkkauksen vaivattomuus ja kääntämisen tehokkuus), eikä tärkeintä ole enää ehdottoman nopea suoritus. Uusimmissa komentosarjakielissä käytetään myös abstraktioita, joiden toteuttaminen kääntämällä ei olisi mielekästä tai edes mahdollista (esimerkiksi koodin dynaaminen evaluointi). Merkittävimmät edistysaskeleet ohjelmointikielissä 1995-2004 ovat tapahtuneet komentosarjakielten alueella. Merkittäviä uusia tulkattavia kieliä ovat Perl, Java, Python ja Ruby.

Mahdollisia tulevaisuuden ohjelmointimenetelmiä

Ohjelmointikielet voivat perustua myös nykyisestä täysin poikkeaviin malleihin ohjelmoinnista. Esimerkiksi ohjelmointi voi perustua rinnakkaiseen käsittelyyn (CSP, Occam, LOTOS), logiikkaan (Prolog), relaatiomalliin (vrt. relaatiotietokanta), kaksisuuntaisiin rajoitteisiin (TeX Metafont), tiedon monenkertaiseen uudelleenkirjoittamiseen tai tiedon luokitteluun. Tietotekniikassa on odotettavissa rinnakkaisen käsittelyn huima yleistyminen, jolloin todennäköisesti ohjelmointikielten seuraavat edistysaskeleet liittyvät rinnakkaisuuden käyttöön.

Tulevaisuudessa myös ohjelman ja laitteiston raja hämärtyy, jolloin on mahdollista, että osa tuotetusta ohjelmasta kääntyy konekielelle, osa suorittimen mikrokoodiksi, osa porttilogiikaksi ja osa mikropiireiksi (esim. ASIC). Esimerkiksi VHDL ja SystemC ovat jo tällä hetkellä kieliä, joilla ohjelma muunnetaan laitteistoksi.

Kirjallisuutta

Aiheesta muualla

Suomalaisia ohjelmointisivustoja: