oliokeskeinen kieli on tietokoneen ohjelmointikieli, joka pyörii olion käsitteen ympärillä. Oliopainotteiset kielet kehitettiin helpottamaan ohjelmistojen kehittämistä, debugausta, uudelleenkäyttöä ja ylläpitoa kuin aiemmilla kielillä on mahdollista. Objektien ja oliokeskeisten kielten ymmärtäminen edellyttää tietämystä tietokoneen ohjelmointikielten ja tietorakenteiden evoluutiosta.
- Tietokoneohjelmointikielten evoluutio
- Assembly Language.
- korkean kertaluvun kielet.
- strukturoidut kielet.
- Oliopainotteiset kielet.
- Oliopainotteisen ohjelmoinnin ominaisuudet
- kapselointi ja tietojen piilottaminen.
- periytyminen.
- polymorfismi.
- yleisiä Oliopainotteisia kieliä
- Smalltalk.
- C+ +.
- Java.
- muita kieliä.
- bibliografia
Tietokoneohjelmointikielten evoluutio
Tietokoneohjelmointikielet ovat kehittyneet jatkuvasti vuosien varrella. Tämä kehitys on esitetty yksityiskohtaisesti seuraavissa esimerkeissä.
Assembly Language.
ensimmäiset tietokoneohjelmat kirjoitettiin assembly-kielellä. Kyseessä on alkeellinen kielityyppi, jossa jokainen lauseke vastaa yhtä koneopetusta; se on tietokoneen alkeellisinta mahdollista toimintaa. Kaiken hyödyllisen toteuttaminen vaatii monia koneen ohjeita. Assembly-kieli on spesifinen tietyntyyppiselle tietokoneelle; ohjelman siirtäminen toiseen konetyyppiin vaatii kokonaan uuden ohjelman kirjoittamista. Assembly-kieliohjelmia on vaikea kirjoittaa, debugata ja ylläpitää. Vaikka muita kieliä käytetään nykyään useimmissa tietokonesovelluksissa, assembly-kieltä käytetään edelleen ensimmäisenä kielenä, kun uutta sirua kehitetään.
korkean kertaluvun kielet.
assembly-kielen jälkeen kehitettiin korkeamman kertaluvun kieliä; varhaisia olivat muun muassa FORTRAN ja BASIC. Yksi lausahdus korkeakielellä vastaa englannin kielen lausetta. Kääntäjäksi kutsuttu ohjelma lukee lähdetiedoston lausunnot ja luo koneen ohjeita sisältävän tiedoston, jota kutsutaan objektitiedostoksi. Objektitiedosto voidaan sitten ladata ja suorittaa tietokone. Korkean kertaluvun kieli on kannettavampi kuin assembly-kieliohjelma; sama lähdekooditiedosto voidaan kääntää mille tahansa tietokoneelle niin kauan kuin sopiva Kääntäjä on olemassa.
varhaiset korkean kertaluvun kielet sallivat vain yksinkertaiset tietotyypit, kuten kokonaisluku, liukulukuluku tai merkkijono (kirjainten sarja). Ainoa käytettävissä oleva tietorakenne oli array. Array on luettelo elementeistä, jotka ovat kaikki samaa tietotyyppiä; esimerkiksi numeroluettelo tai merkkijonoluettelo. Tietokanta luotiin käyttäen ryhmää taulukoita. Esimerkiksi tuotetietokanta saattaa sisältää kolme ryhmää, joita kutsutaan Tuotenumeroksi, Tuotekuvaukseksi ja tuotteen hinnaksi. Se oli jopa ohjelmoija pitää ryhmät linjassa; esimerkiksi varmistaa, että kolmas elementti kunkin array vastasi samaa tuotetta.
strukturoidut kielet.
seuraava askel tietokoneohjelmointikielten kehityksessä oli strukturoitujen kielten, kuten C: n ja Pascalin, kehittäminen ja tietorakenteiden käyttöönotto. Tietorakenne on yksinkertaisempien tietotyyppien kokoaminen yhdeksi tietueeksi. Esimerkiksi tuotetietokanta voitaisiin rakentaa tuotevalikoimaksi, jossa jokainen tietue sisältää tuotenumeron, tuotekuvauksen ja tuotteen Hintakentät. Nyt yksi levy voisi sisältää kaiken tarvittavan tiedon yhdestä esineestä. Rakenteet tarkentuivat myös kielen prosessiosassa. Funktio tai toimenpide on pieni osa suurempaa ohjelmaa, joka voitaisiin kirjoittaa tarjoamaan jokin perustoiminto tietorakenteelle, kuten tietueelle.
Oliopainotteiset kielet.
seuraava askel tietokoneiden ohjelmointikielten kehityksessä, olio-orientaatio, otettiin käyttöön Smalltalk-kielessä. Olio-orientaatio vie strukturoidun ohjelmoinnin käsitteet askeleen pidemmälle. Nyt tietorakenteiden ja erillisten ohjelmarakenteiden sijaan sekä data että ohjelmaelementit yhdistetään yhdeksi rakenteeksi, jota kutsutaan olioksi. Olio-tietoalkioita kutsutaan attribuuteiksi, kun taas olio-ohjelmaelementtejä kutsutaan menetelmiksi. Kollektiivisesti attribuutteja ja menetelmiä kutsutaan olion jäseniksi. Yleensä olion menetelmät ovat ainoita ohjelmia, jotka pystyvät toimimaan olion attribuuteilla.
olio-orientaation myötä tuli perustavanlaatuinen muutos siihen, miten ohjelmia katsotaan. Aiempi näkemys oli, että dataa täytyy manipuloida jollain tavalla lopullisen tuloksen saavuttamiseksi, ja ohjelmaa pidettiin peräkkäisenä keinona manipuloinnin suorittamiseen. Objektisuuntautuneisuuden näkökulmasta ohjelmaa tarkastellaan ryhmänä objekteja, jotka reagoivat käyttäjän, muiden ohjelmien tai muiden objektien viesteihin. Tämä näkemys johti ajatukseen tapahtumavetoisesta ohjelmoinnista; ts. kun tapahtuma a tapahtuu, tämä objekti suorittaa toiminnon B. viesti lähetetään objektille kutsumalla jotakin sen menetelmistä.
Oliopainotteisen ohjelmoinnin ominaisuudet
Oliopainotteisen ohjelmoinnin keskeisiä ominaisuuksia ovat kapselointi ja tiedon piilottaminen, periytyminen ja polymorfismi.
kapselointi ja tietojen piilottaminen.
olio-orientoituneessa ohjelmoinnissa (OOP) keskeinen ajatus on, että olion attribuutit ja attribuuteilla toimivat menetelmät sidotaan yhteen eli kapseloidaan olioon. Olion menetelmät tarjoavat ainoat rajapinnat olion ja ohjelman muiden osien välillä. Tämä eroaa aiemmista kielistä, joissa mikä tahansa ohjelman osa voi toimia millä tahansa datalla milloin tahansa. Vaikka tämä vaikuttaa rajoittavalta, rajoitukset johtavat modulaarisempaan ohjelmaan, joka on helpompi kehittää ja jossa on vähemmän todennäköisesti virheitä. Se tarkoittaa myös sitä, että on helpompaa siirtää esine toiseen ympäristöön ja saada se silti toimimaan oikein.
ohjelmistoobjekti muistuttaa jonkin verran fyysistä objektia. Auton voimanlähteenä voidaan käyttää esimerkiksi moottoria. Siinä on sisäisiä komponentteja, jotka vastaavat ominaisuuksia, mutta ei tarvitse olla huolissaan siitä, mitä ne ovat tai miten ne toimivat. Moottorin on liityttävä kaasuläppään, polttoainejärjestelmään, voimansiirtoon, imuun ja pakosarjoihin, jotka kaikki vastaavat menetelmiä. On käsittämätöntä, että polttoainetta pääsisi moottoriin millään muulla tavalla kuin polttoainejärjestelmän kautta. Niin kauan kuin oikeat liitännät säilyvät, moottori toimii. Samoin on esineiden laita. Objektin attribuutit on piilotettu ulkopuolelta. Objekti on vuorovaikutuksessa ympäristönsä kanssa menetelmiensä kautta.
periytyminen.
toinen olio-ohjelmoinnin tärkeä käsite on periytyminen. Objektiluokka määritellään hierarkiassa, ja sen sanotaan perivän esi-isiensä käyttäytymisen (ne objektit, jotka ovat sen yläpuolella hierarkiassa). Esimerkiksi piirto-ohjelma voi sisältää kolme objektiluokkaa: Muoto, Suorakulmio ja ympyrä. Ne voitaisiin määritellä niin, että suorakulmio ja ympyrä ovat molemmat muodoltaan descendents.
muoto sisältää mille tahansa muodolle yhteisiä ominaisuuksia, kuten muodon sijainnin piirtopinnalla. Shape tarjoaa myös menetelmiä näiden ominaisuuksien manipulointiin. Esimerkiksi move-menetelmä muuttaisi muodon sijaintia. Lisäksi se antaisi määritelmän menetelmille, joihin kaikkien muotojen on kyettävä vastaamaan, esimerkiksi piirtomenetelmällä, jolla muoto voidaan esittää piirtopinnalla. Tässä tapauksessa arvontamenetelmän sanotaan olevan abstrakti; se ei tee mitään muuta kuin luo vaatimuksen, että jälkeläisluokkien on toteutettava se.
koska suorakulmio on muodon jälkeläinen, se perii muodosta attribuutteja (sijainti) ja menetelmiä (liikkua). Se tarjoaa tarvitsemansa lisäominaisuudet (leveys ja korkeus) ja uusia menetelmiä, joilla näitä ominaisuuksia manipuloidaan (setWidth, setHeight). Suorakulmion on myös tarjottava piirtomenetelmä, joka maalaa suorakulmion piirtopinnalle, koska jokaisen muotoisen jälkeläisen on toteutettava piirtomenetelmä. Samoin ympyrä tarjoaa uuden attribuutin (säde), sen manipulointimenetelmät (setrius) ja oman piirtomenetelmänsä.
tällaisella järjestelyllä piirustuksenhallintaohjelmalla olisi hahmolista piirustuspinnalla. Objektin siirtämiseksi se kutsuisi objektin siirtomenetelmää. Objektin piirtämiseksi johtaja kutsuu objektin piirtämistapaa. Johtaja ei tiedä eikä välitä, miten esine liikkuu tai piirtää itseään, kunhan homma hoituu. Itse asiassa se ei välttämättä edes tiedä, minkälainen muoto jokin tietty esine todellisuudessa on. Se voi olla suorakulmio, ympyrä tai mikä tahansa muu objekti, joka polveutuu muodosta. Sen tarvitsee vain tietää, että se polveutuu muodosta, joten se voi lähettää sille minkä tahansa viestin, jonka muoto voi vastaanottaa.
oliokeskeisen kielen periytymiskyky toi ohjelmointiin aivan uuden ulottuvuuden. Aikaisemman korkean kertaluvun kielen oppiminen liittyi pääasiassa kielen syntaksin (miten kielilauseet rakennetaan) oppimiseen, mikä ei ole kovin vaikeaa. Oliokeskeisessä kielessä syntaksin opettelu on edelleen tarpeen, mutta perehdyttäminen standardiluokkahierarkioihin—joihin voi kuulua tuhansia luokkia, jokainen luokka omine menetelmineen—on paljon suurempi tehtävä. Se kannattaa kuitenkin, koska objekti perii emonsa attribuutit ja käyttäytymisen. Ohjelmoija voi välttää turhaa työtä löytämällä olemassa olevan objektin, joka tekee jo suurimman osan tarvittavasta. Sitten uusia ominaisuuksia voidaan lisätä asteittain. Tuloksena on halvemmat, laadukkaammat ohjelmistot.
Tämä ominaisuus johti myös automaattisten dokumentointiominaisuuksien sisällyttämiseen useisiin oliopainotteisiin kieliin. Varhaisemmissa kielissä dokumentointi—jos sitä ylipäätään luotiin-tehtiin erikseen, lähes jälkiviisaana. Nyt dokumentaatiotiedot voidaan sisällyttää objektin lähdekoodiin ja luoda Hypertext Markup Language (HTML) – dokumentti automaattisesti, jossa on hyperlinkkejä luokkahierarkioita ylös ja alas, joita voidaan tarkastella Internet-selaimella. Näin on paljon helpompi ylläpitää tarkkaa ja ajantasaista dokumentaatiota.
polymorfismi.
oliokeskeisen kielen seuraava tärkeä ominaisuus on polymorfismi, joka tarkoittaa sitä, että jälkeläisen olion ei tarvitse vastata viestiin aivan kuten sen esi-isä. Uusi objekti voi ohittaa vanhemman menetelmät, jolloin uusi objekti reagoi viestiin eri tavalla. Yleinen luokka esimerkiksi windowing-järjestelmässä on komponentti, joka edustaa näkyvää esinettä. Komponentti on esi-isäluokka jokaiselle näytöllä näkyvälle kohteelle: kuvakkeille, painikkeille, valikoille, liukupalkeille, valintaruuduille, radiopainikkeille, jopa ikkunoille. Kaikki nämä jälkeläisluokat ohittavat osan menetelmistä käyttäytymisen muuttamiseksi. Esimerkiksi Ikoniobjektin on näytettävä itsensä pienenä kuvana. Kuvake ohittaa osan piirtotavan kuvan näyttämiseksi.
yleisiä Oliopainotteisia kieliä
yleisiä oliopainotteisia kieliä ovat Smalltalk, C, Java ja muita kieliä kuten BASIC ja PASCAL.
Smalltalk.
Smalltalk oli Xeroxin 1970-luvun alussa kehittämä alkuperäinen oliopainotteinen kieli. Sittemmin on otettu käyttöön useita muunnelmia. Sitä käytetään edelleen, mutta yleistä hyväksyntää on vaikeuttanut Yleismaailmallisen standardin puuttuminen.
C+ +.
C+ + on OOP-valmiuksia tarjonneen C-kielen laajennus. Se on luultavasti laajimmalle levinnyt tällä hetkellä käytössä oleva oliopainotteinen kieli. C on hybridikieli, koska se kokoaa tavallisia C-ohjelmia; se ei vaadi objektien käyttöä. Näin se voi hyödyntää olemassa olevaa C-ohjelmistoa ja käyttää samalla olio orientaatiota uusiin ohjelmistoihin. C: tä ohjaavat ANSI-standardit.
Java.
Java on laajimmin hyväksytty puhdas oliopainotteinen kieli. Sen kehitti Sun Microsystems alun perin pienten laitteiden ohjauskieleksi. Se osoittautui kuitenkin ihanteelliseksi käytettäväksi Internetin kanssa. Java-sovelman voi upottaa verkkosivulle. Kun selain lataa web-sivun, se myös lataa ja näyttää sovelman. Sun pitää edelleen tiukasti kiinni kielistandardista.
alustan välisen toiminnan helpottamiseksi (Työskentely täysin eri tietokonetyypeillä ilman uudelleen kääntämistä) Java toteutetaan kahdessa osassa. Kääntäjä tuottaa oliotiedoston, jonka voi suorittaa vain Java-virtuaalikoneella (JVM). Jokaiselle tuetulle käyttöjärjestelmälle (Windows, Unix/Linux tai Solaris) on saatavilla erillinen JVM. Tämä tekee Java-ohjelmat voivat ajaa tahansa näistä järjestelmistä ilman kääntämistä.
muita kieliä.
useimmat nykyisin yleisesti käytetyt kielet mahdollistavat jonkinlaisen olio-orientaation. BASIC on kehittynyt oliopainotteiseksi Visual BASICIKSI, PASCAL oliopainotteiseksi DELPHIKSI. Yleensä nämä ovat C: n kaltaisia hybridikieliä, jotka tukevat olio-orientaatiota sitä vaatimatta.
Katso myös kääntäjät; Hiiri; Menettelykielet.
Donald M. McIver
bibliografia
Deitel, Harvey M. ja Paul J. Deitel. Java: miten ohjelma, 2nd ed. Upper Saddle River, NJ: Prentice Hall, 1998.
Voss, Greg. Olio-Ohjelmointi, Johdanto. New York: Osborne McGraw-Hill, 1991.