cyanic-selkie/wikianc huggingface dataset:
IPsec
Standardit
IPsec on määritelty pakolliseksi IPv6:een, nykyisen Internet-protokollan seuraajaan. Sitä voi käyttää myös nykyisen IPv4:n kanssa ilman, että välissä olevien reitittimien tarvitsee osata IPsec-protokollia. Tämänhetkiset IPsec-protokollat on määritelty RFC-dokumenteissa IKE:stä ollaan kehittämästa uutta IKEv2-versiota.
Huomaa, että aikaisemmin IPsec kirjoitettiin usein myös IPSec isolla S-kirjaimella, mutta kirjoitusmuoto pienellä s-kirjaimella on standardeissa käytetty oikea muoto.
IPsec-protokollan käyttö
IPsec-protokollaa voidaan käyttää vaihtoehtoisesti joko IPsec-protokollaa voidaan käyttää VPN-ratkaisun eli näennäisen yksityisverkon rakentamiseen kummallakin tavalla. On huomioitava että saavutettava tietoturva eroaa huomattavasti näiden kahden mallin välillä.
Päästä päähän turvattujen yhteyksien yleistyminen Internetissä on ollut hitaampaa kuin on odotettu. Luottamuksellisen tiedonsiirron tarpeet on täytetty erillisratkaisuilla tai TLS-protokollalla.
Toteutukset
IPsec sisältyy uudempiin Windows-versioihin, kuten myös useisiin kaupallisiin Unix-toteutuksiin, kuten esimerkiksi Solaris-käyttöjärjestelmään. Linux-käyttöjärjestelmässä yleisimmät toteutukset ovat FreeS/WAN-toteutuksesta johdetut Libreswan, Openswan ja Strongswan. IPsec on hyvin tuettu Linux-käyttöjärjestelmäytimen versiosta 2.6 lähtien.
Kokonainen funktio
Funktioteoriassa kokonainen funktio on holomorfinen funktio koko kompleksitasossa. Tyypillisiä esimerkkejä kokonaisesta funktioista ovat polynomit, eksponenttifunktio sekä kokonaisten funktioiden summat, tulot ja yhdisteet. Jokainen kokonainen funktio voidaan esittää kaikkialla suppenevan potenssisarjan avulla.
Huomaa, että kokonaisella funktiolla voi olla singulariteetti tai jopa oleellinen singulariteetti laajennetun kompleksitason äärettömyyspisteessä. Jälkimmäisessä tapauksessa funktiota kutsutaan transsendenttiseksi kokonaiseksi funktioksi. Liouvillen lauseesta seuraa, että funktio, joka on kokonainen koko Riemannin pallolla, on vakio.
Liouvillen lause antaa tärkeän kokonaisia funktioita koskevan tuloksen: Rajoitettu kokonainen funktio on vakio. Tätä ominaisuutta voidaan käyttää algebran peruslauseen todistukseen. Picardin lause on merkittävä yleistys Liouvillen lauseesta: ei-vakio kokonainen funktio saa jokaisen kompleksiarvon korkeintaan yhtä lukuun ottamatta. Jälkimmäisestä poikkeuksesta on esimerkkinä eksponenttifunktio, joka ei saa arvokseen nollaa missään pisteessä.
Hevonoja (Myrskylä)
Hevonoja on 192 henkilön asuttama kylä Myrskylässä Lapin­järven rajalla. Siellä sijaitsee Hevonojan kartano, jolle aikoinaan kuului noin 1000 hehtaaria maata, josta 400 hehtaaria peltoa.
Vuonna 1945 alueelle asutettiin Uuku­niemen Latvasyrjän asukkaat, jotka oli välillä siirretty Laihialle sen jälkeen, kun Latva­syrjä oli jäänyt Neuvosto­liitolle luovutetulle alueelle Moskovan välirauhansopimuksella 19. syyskuuta 1944. Kartanon maat pyrittiin saamaan sarkajakoon 1945, ja lopullisesti maat olivat lohkotut erillisiksi maatiloiksi omistajaperheiden kesken 1951. Rahoitusolojen järjestämiseksi Uukuniemen Latvasyrjän osuuskassan toiminta siirrettiin Myrskylään ja siitä tuli Myrskylän Osuuspankki (nykyisin Orimattilan Osuuspankki), kunnan toinen pankki Myrskylän Säästöpankin jälkeen. Uukuniemen Latvasyrjän Osuuskassa, 17.196, poistettiin kaupparekisteristä vasta 23.3.1962.
Kylässä on edelleen kohtalainen asutus ja kyläyhdistystoimintaa.
Amos Ekhalie
Amos Paul Ekhalie (s. 8. heinäkuuta 1988 Mombasa, Kenia) on kenialainen jalkapalloilija, joka edustaa Veikkausliigassa pelaavaa IFK Mariehamnia. Hän on pelipaikaltaan keskikenttäpelaaja. Ekhaliella on myös Suomen kansalaisuus.
Björn Andrésen
Björn Andrésen (s. 26. tammikuuta 1955, Tukholma, Ruotsi) on ruotsalainen näyttelijä, joka tunnetaan parhaiten neljätoistavuotiaana tekemästään Tadzion roolista Luchino Viscontin elokuvassa Kuolema Venetsiassa. Sitä ennen hän oli sivuroolissa Roy Anderssonin elokuvassa Eräs rakkaustarina (1970).
Visconti ja muut elokuvatyöryhmän miehet kuljettivat Andrésenia tämän kertoman mukaan Venetsian homobaareissa, joissa hän tunsi olevansa ”lihanpala susien keskellä”.
Andrésen on myöhemmin näytellyt joissakin ruotsinkielisissä elokuvissa, kuten Yksinkertainen murhaaja (Den enfaldige mördaren, 1982), Kesälesket (Gräsänklingar, 1982) sekä Kissanviiksiä ja herneitä (Morrhår och ärtor, 1986). Suomessa hän on näytellyt pienen sivuosan elokuvassa Pelikaanimies.
Norbert Elias
thumb|Norbet Eliaksen Qu'est-ce que la sociologie teoksen kansisivu
Norbert Leo Elias (22. kesäkuuta 1897 Breslau – 1. elokuuta 1990 Amsterdam) oli saksanjuutalainen sosiologi, joka työskenteli Amsterdamissa. Hänen sivilisaatioprosessia käsittelevä pääteoksensa Über den Prozess der Zivilisation ilmestyi vuonna 1939.
Elias tutki muun muassa hoviyhteisöjä. Hän loi oman sivilisaatioteorian, jonka mukaan sivilisaation perusta on ulkoisen pakon sisäistäminen väestön keskuudessa. Teoria on tullut tunnetuksi 1970-luvulta lähtien.
Elias opetti Heidelbergin yliopistossa 1924–1929 ja Frankfurtin yliopistossa 1930–1933. Kansallissosialistien valtaannousun myötä hän pakeni Ranskaan ja asettui vuonna 1935 Englantiin, missä hän asui vuoteen 1975 saakka. Vuosina 1954–1962 hän opetti Leicesterin yliopistossa ja 1962–1964 Ghanan yliopistossa.
Katharine Lee Bates
Katharine Lee Bates (1859–1929) oli yhdysvaltalainen runoilija ja lauluntekijä. Hänen tunnetuin laulunsa on vuonna 1893 kirjoitettu ”America the Beautiful”, jota pidetään joskus Yhdysvaltojen vaihtoehtoisena kansallislauluna ”Tähtilipun” ohella.
Bates syntyi Falmouthissa, Massachusettsissa ja muutti lapsena perheensä mukana Wellesleyhin. Hän suoritti alemman ja ylemmän korkeakoulututkinnon Wellesley Collegessa ja opiskeli jonkin aikaa myös Oxfordin yliopistossa. Hän toimi vuosina 1880–1925 Wellesley Collegessa englanninkielisen kirjallisuuden opettajana. Hän julkaisi paljon runoja, kirjoja ja näytelmiä.
”America the Beautiful” -runon Bates kirjoitti vuonna 1893. Se julkaistiin ensimmäisen kerran kaksi vuotta myöhemmin Yhdysvaltain itsenäisyyspäivänä The Congregationalist -lehdessä. Yhdysvaltalainen säveltäjä Silas G. Pratt sävelsi sanoihin melodian pian sen ilmestymisen jälkeen, ja laulu alkoi saada nopeasti huomiota. Vuonna 1904 Bates, jolle runon suosio tuli yllätyksenä, muotoili sanoituksen uudelleen. Tämä versio julkaistiin 19. marraskuuta 1904 The Boston Evening Transcript -lehdessä. Nykyään laulu tunnetaan parhaiten Samuel A. Wardin säveltämän ”Materna”-kappaleen melodialla laulettuna.
Koko elämänsä naimattomana ja lapsettomana elänyt Bates jäi eläkkeelle opettajan työstä vuonna 1925. Hän kuoli 28. maaliskuuta 1929.
Olio-ohjelmointi
Olio-ohjelmointi (, OOP) on ohjelmoinnin ohjelmointiparadigma, jossa ohjelmointiongelmien ratkaisut jäsennetään olioiden yhteistoimintana.
Räjä Elektrik Millenium
Räjä Elektrik Millenium on garage rock -yhtye Räjäyttäjien seitsemäs studioalbumi ja ensimmäinen tupla-albumi. Se julkaistiin digitaalisessa formaatissa 6. toukokuuta 2016. CD-painos julkaistiin 4. heinäkuuta 2016, jolloin sitä sai levykauppojen lisäksi Porin torilta suoraan yhtyeeltä ostettuna. . Albumi on tyyliltään elektronista musiikkia ja psykedeelistä musiikkia sekoittelevaa rockia.
Albumi ylsi Soundin toimittajien ”Vuoden 2016 parhaat kotimaiset levyt top-20” -listan sijalle 8.
Olio-ohjelmointi
Luokkapohjaisessa ohjelmoinnissa luokat määritellään etukäteen ja oliot luodaan näiden luokkien perusteella, jolloin oliot saavat tilan ja toiminnallisuuden luokan jäsenten mukaan. Esimerkiksi jos kaksi oliota, kuten kissa ja koira, toteutetaan luokasta Eläin, niin ne ovat luonnollisesti eläimiä ja niitä voidaan käsitellä samalla tavalla. Tämä tarkoittaa sitä, että näillä eläinolioilla on samat ominaisuudet.
Räjä Elektrik Millenium
Taustaa
Maaliskuussa 2016 Nousiainen kertoi Soundin haastattelussa yhtyeen julkaisevan toukokuussa jotain ”todella jännittävää ja täysin ennenkuulumatonta”. Albumilta julkaistiin maistiaisena kappale ”Räjä Elektrik” 15. huhtikuuta 2016. Räjä Elektrik Milleniumin levynjulkaisukeikka järjestettiin 9. kesäkuuta Helsingin Tavastia-klubilla. Tupla-albumi Räjä Elektrik Millenium julkaistiin digitaalisessa muodossa 22. toukokuuta 2016, ja sen 2CD-painos julkaistiin 4. heinäkuuta sekä 2LP-painos 19. elokuuta 2016.
COVID-19 eläimillä
COVID-19-taudin aiheuttava SARS-CoV-2 voi tarttua ihmisten lisäksi myös muihin eläimiin, mutta tapauksia on ollut vain vähän. Virus pystyy siirtymään lajista toiseen ja se on lajienvälisessä tartuttavuudessa hyvä. Tällä hetkellä tartunta on tullut eläimille aina ihmisen kautta, mutta eläimet ovat myös tartuttaneet toisiaan saatuaan taudin. Yhtään lemmikin tartuttamaa ihmistä ei ole vielä tällä hetkellä todettu. Sen sijaan turkistarhoilla kasvatuista minkeistä tauti on tarttunut ihmisiin.
Lemmikkieläimet
Vaikka todennäköisyyttä taudin siirtymisestä lemmikkieläimeltä ihmiselle pidetään pienenä, COVID-19 on kuitenkin tarttunut ihmisiltä lemmikkieläimille. Vuoden 2021 helmikuussa SARS-CoV-2 on todistetusti tarttunut ainakin 84 kissaan ja 60 koiraan sekä yhteen frettiin. Kissaa pidetään lemmikeistä herkimmin alttiina sairastumiselle.
Kliinisissä tutkimuksissa on havaittu, että tauti lisääntyy heikosti koirissa ja niiden kykyä levittää tautia pidetään vähäisenä. Eläinkokeissa on todettu että tauti myös voi tarttua kaniin ja hamsteriin. Tiettävästi ensimmäinen ihmisestä eläimeen siirtynyt SARS-CoV-2-tartunta todettiin vuoden 2020 tammikuussa Hong Kongissa koiralta.
Lemmikin sairastuessa
Koirat ja kissat, jotka ovat sairastuneet COVID-19-tautiin eivät ole juuri oireilleet. Lemmikit ovat pääsääntöisesti sairastuessaan oireettomia tai oireet ovat mietoja ja lemmikki tervehtyy täysin. Yhdysvalloissa ei tiedetä yhdenkään lemmikin kuolleen tautiin. Muualla tautiin sairastuneita koiria ja kissoja on jouduttu lopettamaan. Lemmikkieläintä ei tarvitse, eikä tule hylätä sen sairastuessa tautiin.
Sairastuneen lemmikin kanssa tulee sairauden ajan välttää lähellä olemista, halauksia, pusuja ja nuolaisuita, yhdessä nukkumista sekä silittämistä. Perheen ulkopuolisten ei tule koskea lemmikkeihin niiden ollessa sairastuneita. Omakotitaloissa koirat tulee pitää vain omassa pihassa, eikä niitä tule viedä lenkille sairastuneena.
Kaikki tartunnan saaneet eläimet tulee pitää sisällä. Sairastuneet lemmikit tulee eristää ihmisistä ja muista lemmikeistä, kunnes ne ovat parantuneet. Kissoja ei saa päästää ulos kävelemään vapaana niiden sairastuessaan. Kissat saattavat levittää tautia muihin eläimiin. Sairastunutta lemmikiä ei saa viedä koirapuistoon, leikkimään muiden eläinten kanssa tai eläinten hoitopaikkaan. Sairastunutta lemmikkiä ei myöskään saa viedä terveydenhoitolaitoksiin, sairaaloihin tai julkisiin tiloihin.
Eläimille ei tule laittaa hengityssuojaa, sillä kasvomaski saattaa vahingoittaa niitä. Lemmikkieläintä ei saa pyyhkiä desinfiontiaineella, alkoholilla tai käsidesillä. Mahdollisuuksien mukaan sairastuneelle kissalle tulee järjestää oma huone ja kissanhiekka. Sairastuneen lemmikin astiat tulee desinfioida käytön jälkeen. Viltit, peitot ja pyyhkeet voidaan pestä käytön jälkeen pesukoneessa.
Olio-ohjelmointi
Prototyyppipohjaisessa olio-ohjelmoinnissa oliot saavat toiminnallisuuden ja ominaisuudet prototyyppioliolta eikä luokkia ole edes olemassa. Olion prototyyppi on vain toinen olio, johon olio on linkitetty. Jokaisella oliolla on vain yksi prototyyppilinkki. Uusia olioja voidaan luoda niiden prototyypeiksi valittujen jo olemassa olevien oliojen perusteella. Kahta eri olioa, kissa ja koira, voi kutsua eläimeksi, jos eläin-olio on olemassa ja se on molempien kissan ja koiran prototyyppi. Voidaan sanoa eläin luokan olevan saman prototyypin jakavien oliojen ekvivalenssiluokka. Prototyypin ominaisuudet ja metodit delegoituvat kaikille tämän prototyypin määrittämän ekvivalenssiluokan olioille. Olion omistamia yksilöllisiä ominaisuuksia ja metodeja ei saa jakaa muiden saman ekvivalenssiluokan oliojen kanssa. Prototyypin kautta voidaan toteuttaa vain yksi perimä, joka tapahtuu prototyypin kautta.
Olio-ohjelma muodostuu kokoelmasta yhteistyössä toimivia olioita, kun taas perinteinen proseduraalinen tietokoneohjelma on lista suoritettavia ohjeita tietokoneelle.
Olio-ohjelmoinnissa tieto ja sitä käsittelevä toiminnallisuus tyypillisesti kootaan yhteen tietorakenteeksi, jota kutsutaan olioksi. Olio käsittelee sisältämäänsä tietoa ja voi vastaanottaa viestejä ja lähettää tietoa muille olioille. Jokainen olio voidaan nähdä itsenäisenä pienenä koneena, jolla on tietty rooli tai vastuu.
Olio-ohjelmointi on kehitetty helpottamaan ja selkeyttämään yhä monimutkaisemmiksi tullutta ohjelmistojen kehittämistä ja ylläpitoa. Olio-ohjelmoinnin yhtenä tavoitteena on tehdä ohjelmistojen laajentamisesta ja ylläpidosta helpompaa. Yksittäinen olio vastaa jostakin itsenäisestä osa-alueesta ohjelman kokonaisuudessa. Olio on merkityksellinen myös irrotettuna välittömästä asiayhteydestään, jolloin sitä voidaan käyttää myös uusissa asiayhteyksissä. Oliota käyttävän tarvitsee vain tietää mihin tarkoitukseen olio on suunniteltu ja miten sitä pitää käyttää. Koska yhden pienen olion sisäinen ohjelmakoodi on lyhyt, se on yleensä helpommin ymmärrettävissä ja ylläpidettävissä.
Tietokoneohjelmat voivat hyödyntää olioita monella tapaa. Puhtaissa oliokielissä kaikki kielen alkiot ovat olioita. Useat ohjelmointikielet, kuten C++ sallivat olioiden käyttämisen yhdessä perinteisen ohjelmointimallin sisällä. Oikein käytettynä olio-ohjelmointi nopeuttaa kehitystyötä, vähentää redundanssia, ohjelmointivirheitä ja helpottaa merkittävästi ohjelmistojen ylläpitoa. Nykyaikaisten tietokoneohjelmien kehittämisessä olio-ohjelmointi on yksi tärkeimmistä työkaluista. Suosittuja olio-ohjelmointia tukevia kieliä ovat muun muassa C++, C#, Java, Python ja Visual Basic.
Merkittäviä oliokieliä ovat: Ada, ActionScript, C++, Common Lisp, C#, Dart, Eiffel, Haxe, Java, JavaScript, Kotlin, logo, MATLAB, Objective-C, Object Pascal, Perl, PHP, Python, R, Ruby, Scala, Simula, Pharo, Smalltalk ja Swift.
Käsitteitä
Olio on ohjelmiston rakenteellinen perusyksikkö. Se ei ole puhtaasti toiminnallinen tai puhtaasti tietoa säilyttävä, vaan se sisältää kummankin aspektin.
Oliota käytetään ohjelmistosuunnittelussa esittämään jonkun abstraktin tai reaalimaailman käsitteen ilmentymää ohjelmistossa. Oliokielillä laaditut ohjelmat koostuvat tavallisesti lukuisista olioista, joiden yhteistoiminnan tuloksena on ratkaisu ohjelmointiongelmaan. (kts. myös oliomalli)
Olio pystyy pyydettäessä tekemään sille ominaiset toiminnot, joita kutsutaan metodeiksi tai jäsenfunktioiksi kielestä riippuen. Metodi koostuu nimestä, mahdollisista parametreista ja toiminnan määrittelevästä rungosta. Olio tallettaa tietoja attribuutteihin.
Räjä Elektrik Millenium
Vastaanotto
Albumi sai erinomaisen vastaanoton. Keskisuomalaisen antoi albumille täydet viisi pistettä, ylistäen Jukka Nousiaisen sanoituksellisia intertekstuaalisia taitoja muiden yhtyeiden aiempien tuotoksien mukailussa sekä viraalimedian menneiden ilmiöiden uudelleen pinnalle tuomisessa.
Olio-ohjelmointi
Käsitteitä
Luokka (class) on määritelmä, joka kuvaa samanlaisten olioiden yhteisen rakenteen ja yhteisen käytöksen. Toisin sanoin luokka on ohje olion luomiselle ja sitä voidaan pitää olion tyyppinä. Olio on siten luokan ilmentymä, instanssi. Esimerkiksi henkilörekisteriohjelmassa määritellään luokka Henkilö, joka määrittelee millaista tietoa henkilöistä halutaan esittää ja millä tavalla näitä tietoja voidaan käsitellä. Ohjelman ajon aikana luokasta Henkilö luodaan olioita esittämään yksittäisiä henkilöitä. Olioiden toiminnallisuus määritellään useimmiten luokkien jäsenfunktioissa, jolloin kaikki saman luokan oliot sisältävät täsmälleen saman toiminnallisuuden tiedon käsittelyyn. On olemassa myös vähemmän tunnettuja prototyyppipohjaisia kieliä, jotka eivät tunne luokkakäsitettä.
Sidonta (binding) tarkoittaa sitä, miten symbolinen nimi yhdistetään dataan tai koodiin. Kaksi tapaa ovat myöhäinen ja varhainen sidonta. Joko kääntäjä tekee sen käännöksen yhteydessä, jolloin puhutaan staattisesta (varhainen) sidonnasta, tai se tapahtuu ajonaikana, jolloin kyseessä on dynaaminen (myöhäinen) sidonta. Jossain tilanteissa objektin tyyppi ei ole tiedossa vielä käännösaikana, jolloin on käytettävä dynaamista eli myöhäistä sidontaa.
Perintä (inheritance) mahdollistaa uusien luokkamääritysten tekemisen vanhojen määritysten pohjalta. Periyttämisen ansiosta on mahdollista käyttää uudestaan jo tehtyä ohjelmakoodia uusien luokkien pohjana. Periyttäminen mahdollistaa myös abstraktien perus-/kantaluokkien, joista periytetään useita luokkia, joita kaikkia voidaan käyttää samannimisillä funktioilla ja samoilla parametreilla kuin abstraktia kantaluokkaa, käytön. Itse abstraktista kantaluokasta ei voi luoda omia instansseja eli olioita new-operaattoria käyttäen. Oliot on luotava tässä tapauksessa abstraktin luokan lapsiluokista. Esimerkkinä abstrakti luokka voisi olla ajoneuvot-luokka, jolla olisi vuosimalli jäsenmuuttujana ja funktiona/metodina "rekisteröi"-toiminto. Lapsiluokkia voisivat olla esimerkiksi auto- ja laiva-lapsiluokat, jotka perivät ajoneuvoluokan jäsenmuuttujat ja funktiot. Perinnässä tärkeä huomionarvo on myös kantaluokan näkyvyysmääreiden asettaminen. Tämä johtunee siitä, että kantaluokan "private"-nimikkeellä määritetyt jäsenmuuttujat ja funktiot eivät periydy alempiin luokkiin. Näkyvyysmääreeksi on asetettava vähintään "protected", jotta lapsiluokka perii kyseisen jäsenmuuttujan tai funktion onnistuneesti. Periyttäminen ja abstraktien perusluokkien käyttö ovat oliopohjaisten kielien vahvimpia mutta myös vaikeimpia ominaisuuksia. Periyttäminen mahdollistaa abstraktit rajapinnat, joiden kautta voidaan käsitellä tuntemattomien tahojen rakentamia olioita ennalta määritellyllä tavalla.
Moniperintä (multiple inheritance), mahdollistaa uuteen luokkaan periyttämisen useista kantaluokista. Moniperintä on hyödyllistä tilanteessa, jossa "lepakko" sisältää "lentävä eläin"- ja "nisäkäs"-luokkien ominaisuudet. Moniperintä on tuettu kielissä kuten C++, Eiffel, OCaml ja Scala. C++ tukee virtuaalista moniperintää, jonka avulla periytyy vain yksi toteutus yhteisen kantaluokan jäsenistä. Kaikissa oliokielissä moniperintä ei ole mahdollista. Eräissä kielissä moniperintä on vain rajatusti mahdollista. Rajattua moniperintää (interface eli rajapintaperintää) tukevat kielet kuten Ada, C# ja Java. JavaScript käyttää perimisen toteuttamiseen prototyyppejä.
Kapselointi (encapsulation) -termiä käytetään kahdessa merkityksessä. Ensimmäisen merkityksen mukaan kapseloinnin ideana on datan ja käyttäytymisen kokoaminen yhteen yksikköön, olioon. Toinen merkitys lisää tähän vielä tiedonpiilotuksen: olion sisäisiin muuttujiin ei (pääsääntöisesti) päästä suoraan käsiksi olion ulkopuolelta, jolloin ohjelmointivirheiden määrä vähenee. Olion käyttäjän ei tarvitse tietää enää käyttövaiheessa sitä, miten olio toimii sisäisesti: riittää, kun tietää, miten oliota itseään käytetään ja miten olio käyttäytyy. Olion käyttäjät voivat käyttää oliota sen julkisen rajapinnan kautta (public interface). Olion luokkakuvauksessa voi olla myös yksityisiä muuttujia tai funktiota (private interface), jotka ovat vain olion itsensä käytettävissä.
Destruktori (destructor, hajottaja tai purkaja) on metodi, joka vapauttaa olion varaamat resurssit.
Polymorfismi eli monimuotoisuus tarkoittaa sitä, että yhtä rajapintaa käytetään eri tyyppien käsittelyyn, tai yksi symboli edustaa monia tyyppejä. Esimerkiksi funktio tai datatyyppi voidaan kirjoittaa siten, että se voi käsitellä dataa riippumatta sen tyypistä.
Virtuaalimetodi on ominaisuus, jolla perintää käyttävä olio voi korvata yliluokassa olevan metodin toteutuksen toisella.
Abstrakti luokka (Abstract class) on yksi olio-ohjelmoinnin peruskäsitteistä, joka mahdollistaa yleisten ominaisuuksien ja toimintojen jakamisen eri luokkien välillä. Abstrakti luokka ei pysty luomaan olioita, mutta se voi sisältää yhden tai useamman abstraktin metodin. Abstrakti metodi on määritelty luokassa, mutta sille ei ole toteutusta. Abstrakti luokka toimii pohjana lapsiluokille, joissa ne pitää toteuttaa.
Singleton (ainokainen) on suunnittelumalli, joka varmistaa että tietyn luokan oliolla on vain yksi instanssi ja että kaikkilla osilla on pääsy tähän samaan instanssiin. Singleton toteutetaan yleensä staattisella metodilla, joka palauttaa saman instanssin jokaiselle kutsujalle. Singleton on hyödyllinen erityisesti silloin, jos halutaan varmistaa että luokalla on vain yksi käyttötapaus.
Perintö (inheritance) on keskeinen olio-ohjelmoinnin käsite, joka tarkoittaa sitä, että uusi luokka voi periä vanhemman luokan toimintoja tai ominaisuuksia. Perintö auttaa koodin järjestelyssä ja ylläpitämisessä ja mahdollistaa sen uudelleenkäytön, jos niin halutaan.
Rajapinta (interface) on määritelmä siitä, miten luokka kommunikoi ja toimii muiden luokkien kanssa. Rajapinta määrittelee, mitä toimintoja ja ominaisuuksia luokka tarjoaa muille luokille. Rajapinta mahdollistaa erilaisten luokkien yhteensopivuuden ja helpottaa koodin ylläpitoa. Rajapinta ei siis ole itse toteutus vaan kertoo pelkästään, mitä toimintoja luokalla on. Rajapinnan toiminnot täytyy määritellä erikseen niissä luokissa, jotka käyttävät tätä pintaa.
Esimerkki
Pseudokielinen esimerkki luokkakuvauksesta luokalle "Oppilas":
Esimerkki olion käytöstä:
Ensimmäiset kielet
Terminologia, joka liittyy "olioihin" ja "orientaatioon" modernissa mielessä oliopohjaisessa ohjelmoinnissa, ilmestyi ensimmäisen kerran MIT:ssä 1950- ja 1960-lukujen vaihteessa. Jo vuodesta 1960 lähtien tekoälyä tutkivan ja kehittävän ryhmän yhteydessä "olio" saattoi viitata tunnistettuihin kohteisiin (LISP-atomeihin), joilla oli ominaisuuksia (attribuutteja). Olioperustainen ohjelmointi syntyi Norjassa 1960-luvun jälkipuoliskolla, jolloin norjalaisessa Norsk Regnesentral -laskentakeskuksessa kehitettiin ensimmäinen oliokieli, Simula. Ole-Johan Dahl ja Kristen Nygaard kehittivät kieltä simulointitarkoituksiin. Jo vuonna 1961 kehitetyssä Simula I:ssa käytettiin luokkia ja niistä luotuja olioita, mutta vuonna 1967 Simula I:n seuraaja Simula67 oli ensimmäinen varsinainen olio-ohjelmointikieli. Simulan rungon muodosti Algol60, joka oli laajennettu olio-ohjelmoinnin luokkakäsitteellä. Simulassa oli mukana jo kaikki olio-ohjelmoinnin peruskäsitteet.
Niin kutsutun ohjelmistokriisin takia 1970-luvulla syntyi useita kieliä, joissa ohjelmistojen modularisointi oli keskeisenä ajatuksena. Kielet eivät olleet tiukassa mielessä olioperustaisia, mutta niihin kuului abstraktin tietotyypin käsite, joka on oleellinen myös olio-ohjelmoinnissa. Nämä kielet loivat maaperää olioperustaisen ohjelmoinnin läpimurrolle tuomalla tietoabstraktion ohjelmistokehitykseen.
Vuonna 1981 Goldberg toimitti Byte Magazinen elokuun numeroa esitellen Smalltalkin ja olio-ohjelmoinnin laajemmalle yleisölle. Vuonna 1986, the Association for Computing Machinery järjesti ensimmäisen konferenssin “Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA), joka käsitteli olio-ohjelmointia, järjestelmiä ja kieliä. Yllättäen konferenssiin osallistui tuhat ihmistä. 1980-luvun puolivälissä Brad Cox kehitti Objective-C. Hän oli käyttänyt Smalltalkia ITT Inc.:ssä, ja Bjarne Stroustrup, joka oli käyttänyt Simulaa väitöskirjassaan, kehittivät olio-ohjelmointikieli C++:n. Vuonna 1985, Bertnard Meyer myös tuotti ensimmäisen Eiffel kielen mallin. Keskittyen ohjelmiston laatuun, Eiffel oli puhdas olio-ohjelmointikieli ja merkintä tukien koko ohjelmiston elinkaarta. Meyer kuvaili Eiffelin ohjelmistokehitysmenetelmää perustuen pieneen määrään pääideoita ohjelmistosuunnitelusta ja tietokonetieteestä kirjassa Object-Oriented Software Construction. Eiffelin keskittyminen laatuun on olennainen osa Meyerin luotettavuus mekanismia, Design by Contract, joka on olennainen osa molempia, sekä menetelmiä, että kieltä.
1990-luvun alussa ja puolivälissä olio-ohjelmoinnista oli tullut vallitseva tapa ohjelmoida, kun kielet alkoivat tukea tekniikaa. Eri kielet, jotka tukivat olio-ohjelmointia olivat mm. C++ and Delphi. Sen dominointia edisti edelleen graafisten käyttöliittymien suosion kasvu, joka nojaa vahvasti olio-ohjelmoinnin tekniikoihin. Esimerkki läheisesti liittyvästä dynaamisesta käyttöliittymäkirjastosta ja OOP-kielestä löytyy Mac OS X:n Cocoa viitekehyksestä, joka on kirjoitettu Objective-C:llä. Cocoa on dynaaminen oliosuuntautunut viestintälaajennus C:hen, pohjautuen Smaltalkiin. OOP-työkalusarjat lisäsivät myös tapahtumapohjaisen ohjelmoinnin suosiota (vaikkakin tämä konsepti ei rajoitu ainoastaan OOP:iin).
Viime aikoina on myös ilmaantunut useita kieliä, jotka ovat pääosin oliopohjaisia, mutta yhteensopivia proseduraalisten ohjelmointikielien kanssa. Python ja Ruby ovat esimerkkejä tällaisista. Luultavasti kaupallisesti tärkeimmät viimeaikaiset ohjelmointikielet ovat Java, jonka on kehittänyt Sun Microsystems, sekä C# ja Visual Basic.NET (VB.NET), jotka molemmat on kehitetty Microsoftin .NET-alustalle. Kumpikin näistä kahdesta viitekehyksestä osoittaa omalla tavallaan oliopohjaisen ohjelmoinnin käytön edut luomalla abstraktion implementoinnista. VB.NET ja C# tukevat kieltenvälistä periytymistä, jolloin yhdellä kielellä määritellyt luokat voivat siirtyä toisella kielellä määritettyihin aliluokkaluokkiin.
Läpimurto
Olioperustainen ohjelmointi teki läpimurtonsa 1980-luvun puolivälissä, kun useat tahot kehittivät olioperustaisia kieliä, ohjelmistojen suunnittelumenetelmiä ja niitä tukevia CASE-välineitä sekä yksittäisiä sovelluksia. Lisäksi kiinnostuksen kasvu näkyi uusissa olioperustaisuutta käsittelevissä konferenssisarjoissa, lehdissä ja kirjoissa. Ensimmäinen tuotantokäytössä yleistynyt ohjelmointikieli oli C++. Bjarne Stroustrup kehitti sen Bell Labs -tutkimuskeskuksessa. Vuonna 1980 julkaistu versio oli kehitetty C-kielestä, johon oli lisätty oliotuki. Stroustrup kutsui sitä nimellä ”C with classes”. Kieli otettiin 1983 käyttöön myös Bell Labsin ulkopuolella, jolloin Rick Mascitti keksi nimen C++. Kielen kehittämisen motiivina oli alkuun saada simulointisovelluksiin Simulaa tehokkaampi kieli. Uuden kielen pohjaksi valittiin C, koska se oli suhteellisen matalan tason ohjelmointikieli ja sille oli valmiina toteutuksia lähes kaikissa ympäristöissä. C++ kehittyi vielä voimakkaasti 1980-luvun aikana: siihen lisättiin muun muassa moniperintä, parametrisoidut tyypit ja poikkeusten käsittely. Borland lisäsi omaan Turbo Pascal -kehitysympäristöönsä olio-ohjelmoinnin mahdollisuuden vuonna 1986 (Macintosh-versio). MS-DOS versio julkaistiin vuonna 1989.
Python-kieli on tullut suosituksi vuosituhannen vaihteen jälkeen. Python on tulkattu ja dynaamisesti tyypitetty ohjelmointikieli, jossa tyyppitarkastukset tehdään ajon aikana. Pythonia pidetään varsin puhdasoppisena oliokielenä ja se on rakenteeltaan yksinkertainen. Pythonia käytetään eniten pienimuotoisten prototyyppien nopeaan kehitykseen.
2000-luvulla on syntynyt ainakin yksi uusi merkittävä oliokieli. Javaa hyvin paljon muistuttava C# on Microsoftin vuonna 2002 lanseeraama .NET-alustassa käytettävä kieli. Toinen Microsoftin .NET alustalle lanseerattu oliopohjainen kieli on Visual Basic.NET (VB.NET). Kumpikin näistä kahdesta .NET -alustan ohjelmistokehysratkaisusta osoittaa omalla tavallaan olio-ohjelmoinnin käytön hyödyn luomalla abstraktioita toteutuksesta. VB.NET ja C# tukevat kielten välistä periytymistä, jolloin toisella kielellä määritellyt luokat voivat periytyä toisella kielellä määritellyistä luokista.
Nykypäivä
Olio-ohjelmointi nykypäivänä on yksi ohjelmointialan tärkeimmistä työkaluista, joka auttaa kehittäjiä luomaan tehokkaampia, joustavampia ja helpommin ylläpidettäviä ohjelmistoja. Se on laajalti käytössä monissa ohjelmointikielissä, kuten Java, C++, C# ja Python, ja se tarjoaa ohjelmoijille kätevän tavan organisoida ja hallita koodiaan.
Olio-ohjelmoinnin perusperiaatteisiin kuuluvat kapselointi, periytyminen, polymorfismi ja abstraktio. Nämä käsitteet auttavat ohjelmoijia kehittämään modulaarisia ohjelmistoja, joissa eri osat ovat itsenäisiä ja helposti korvattavissa tai laajennettavissa. Tämä mahdollistaa paremman koodin uudelleenkäytön ja parantaa ohjelmistojen ylläpidettävyyttä.
Nykypäivän ohjelmistokehitysprojekteissa olio-ohjelmointi on erityisen tärkeässä roolissa, kun luodaan monimutkaisia ja laajoja järjestelmiä, kuten pilvipalveluita, älypuhelinsovelluksia, tekoälyjärjestelmiä ja esineiden internet -ratkaisuja (IoT). Olio-ohjelmointi tekee koodin organisoinnista selkeämpää, mikä auttaa kehittäjiä työskentelemään tehokkaammin yhdessä ja hallitsemaan järjestelmän monimutkaisuutta.
Olio-ohjelmoinnin käyttö on lisääntynyt erityisesti ohjelmistokehityksen ketterien menetelmien yleistyessä. Scrum, Kanban ja muut ketterät menetelmät korostavat iteratiivista ja inkrementaalista kehitystä, mikä edellyttää koodin joustavuutta ja modulaarisuutta. Olio-ohjelmointi tukee näitä vaatimuksia tarjoamalla selkeät rakenteet ja työkalut koodin organisointiin ja muokkaamiseen.
Lisäksi olio-ohjelmoinnin merkitys kasvaa jatkuvasti, kun ohjelmistoalalla otetaan käyttöön uusia teknologioita ja menetelmiä, kuten pilvipohjaiset mikropalveluarkkitehtuurit, konttiteknologiat, kuten Docker ja Kubernetes, ja hajautetut sovellusalustat, kuten blockchain. Näissä konteksteissa olio-ohjelmointi tarjoaa kehittäjille välttämättömät välineet sovellusten rakentamiseen, jotka ovat helposti skaalattavissa, ylläpidettävissä ja integroitavissa.
Olio-ohjelmoinnin käytön leviäminen on johtanut uusien kehitysympäristöjen ilmentymiseen, jotka tuovat ohjelmoijille lisää uusia työkaluja koodin testaamiseen. Monissa integroiduissa kehitysympäristöissä, kuten Visual Studio, on valmiiksi sisäänrakennettuja työkaluja, jotka tukevat olio-ohjelmointia. Näitä työkaluja ovat esimerkiksi debugger ja automaattinen koodin generointi.
Olio-ohjelmointi on myös tärkeässä asemassa ohjelmistojen tietoturvan osalta. Sen avulla kehittäjä voi esimerkiksi piilottaa joitakin ohjelmiston toiminnallisuuksia ulkopuolisilta, mikä auttaa suojaamaan tietoja. Olio-ohjelmointi myös helpottaa ohjelmistojen testausta, mikä johtaa parempaan laatuun.
Nykypäivänä olio-ohjelmointiin liittyy jatkuvaa kehitystä sekä tutkimusta, ja uusia menetelmiä ja tekniikoita kehitetään jatkuvasti sen parantamiseksi. Tähän liittyy esimerkiksi ohjelmointikielten kehityksen, suorituskyvyn optimoimisen ja uusien menetelmien kehittämisen olio-ohjelmointia varten.
Olio-ohjelmointi on avannut uusia mahdollisuuksia ohjelmistokehittäjille parantamaan käyttäjäkokemusta. Ohjelmoijat voivat esimerkiksi käyttää olioita luodakseen entistä kattavampia käyttöliittymiä, joihin liittyy esimerkiksi erilaisia animaatioita ja toimintoja.
Lisäksi olio-ohjelmointi on ollut tärkeässä roolissa pelinkehityksessä. Oliot ovat peleissä keskeisiä, sillä ne mahdollistaa objektien ja pelihahmojen luomisen. Pelialan lisäksi olio-ohjelmointi on ollut tärkeässä asemassa myös esimerkiksi terveysalan ohjelmistokehityksessä, jossa vaaditaan luotettavuutta ja turvallisuutta. Olio-ohjelmointi on tarjonnut kehittäjille erilaisia apuvälineitä ja tekniikoita, joita käyttäen voidaan luoda aina vain parempia ja monipuolisempia ohjelmistoja erilaisiin käyttötarkoituksiin.
Periaatteita
Abstraktio tarkoittaa kokonaisuuksien käsittelyä, jossa tarkennetaan vain tarvittaessa. Kokonaisuuksien hahmotus katoaa, kun alamme lisäämään yksityiskohtia. Abstraktio on tällöin juuri yksityiskohtien piilottamista, jotta kokonaiskuvaa parannee. Tätä tiedon piilottamista kutsutaan olio-ohjelmoinnissa kapseloimiseksi.
Kapselointi on attribuuttien ja metodien sitomista yhteen luokassa. Kapseloinnin avulla luokan sisäiset yksityiskohdat voidaan piilottaa ulkopuolisilta. Luokalla on metodeja, jotka tarjoavat käyttöliittymiä, joiden avulla luokan tarjoamia palveluita voidaan käyttää. Kapselointi estää ulkoista koodia käsittelemästä olion sisäistä toimintaa, eli olio tarjoaa palvelut ainoastaan rajapintansa kautta, jolloin olion luokan sisäisellä toiminnalla ei ole merkitystä, kunhan metodikutsut toimivat samalla tavalla. Tämä mahdollistaa luokan sisäisen koodin uudelleenkirjoituksen, jos rajapinta (parametrit, paluuarvot ja metodikutsut) pidetään samana. Kapselointi motivoi ohjelmoijat sijoittamaan samaan kokonaisuuteen liittyvän datan yhteen luokkaan, mikä lisää koodin ymmärrettävyyttä ja ylläpidettävyyttä. Koska selkeärajaisten luokkien kapselointi vähentää luokkien välistä datan siirtoa, minimoi se samalla koheesiota.
Olioiden kapselointia voidaan edistää näkyvyysmääreillä, jotka piilottavat olioiden dataa, jolloin olion jäsenmuuttujiin ei pääse ulkopuolelta käsiksi, mikä vähentää niiden väärinkäyttöä. Tällaista abstraktiota syntyy, jos luokka ei salli pääsyä sen sisäisiin tietoihin ilman, että jotain luokan metodia kutsutaan. Jotkin kielet (esimerkiksi Java) mahdollistavat luokkien pääsyrajoitusten eli näkyvyysmääreiden muokkaamisen, jolloin luokan sisäisiä tietoja voidaan merkitä  avainsanalla, ja luokan ulkopuoliseen käyttöön tarkoitetut metodit voidaan merkitä avainsanalla. Myös näiden kahden vaihtoehdon välillä on avainsana, joka mahdollistaa metodin tai jäsenmuuttujan periytymisen luokan alaluokkiin, pitäen ne kuitenkin muiden luokkien olioilta piilossa. Muissa kielissä (kuten Pythonissa) abstraktiota helpottavien näkyvyysmääreiden suoraa vastinetta ei ole, vaan ohjelmoija toimii yleisesti hyväksyttyjen tapojen mukaan (esimerkiksi yksityisillä metodeilla voi olla alaviivalla alkavia nimiä).
Abstraktiot voidaan luokitella: "is-a" ja "has-a" -abstraktioihin. Asiaa pilkkoessamme käytämme "has-a"-abstraktiota, kun pohdimme, mistä kokonaisuus koostuu esim: Pullo koostuu itse pullosta, etiketistä, korkista ja sisällöstä. Erikoistuminen taas kuvaa "is-a" -abstraktiota. Tällöin mietimme, mitkä luokat kuuluvat laajempiin luokkiin. Tämä muodostaa perustan luokkien väliselle periytymielle esim: lasipullo on pullo, ja pullo on pakkaus.
Hierarkia olioiden tietojäsenten välillä on tärkeä osa olio-ohjelmointia. Toisin sanoen se on abstraktion järjestämistä tai järjestelyä. Hierarkia mahdollistaa systeemin kokoamisen pienemmistä yhdistetyistä kokonaisuuksista, jotka voivat koostua vielä pienemmistä kokonaisuuksista, kunnes pienin mahdollinen systeemin taso on saavutettu. Hierarkian perustuu "Hajota ja hallitse" -periaatteeseen, jossa ongelmaa pilkotaan pienempiin helposti ratkaistavampiin osiin, joista lopullinen ratkaisu kootaan.
COVID-19 eläimillä
Lemmikin sairastuessa
Lemmikkieläimet saattavat tarvita oman SARS-CoV-2-rokotteen. Arvellaan, että tauti saattaisi muuntua lemmikkieläimissä ja levitä uudestaan takaisin ihmisiin uutena muunnoksena. Lemmikkien SARS-CoV-2-rokotteille ei kuitenkaan oltu myönnetty myyntilupia Yhdysvalloissa vuoden 2021 helmikuussa.
Ihmisen sairastuessa lemmikkitaloudessa
Lemmikkiä suositellaan pidettäväksi kaukana tautiin sairastuneista ihmisistä, eikä lemmikkiä suositella otettavan sairastuneena syliin, eikä sen kanssa kanssa tulisi nukkua. Terveen ihmisen tulisi hoitaa ja ruokkia lemmikki, erityisesti kissojen tapauksessa. Jos sairastunut ihminen hoitaa lemmikkiä, tulee lemmikkejä hoitaa hengityssuojan kanssa sekä pestä kädet ennen lemmikin hoitamista ja sen jälkeen.
Lemmikkieläintä ei saa viedä eläinlääkäriin, kun on itse sairastunut, vaan tällöin tulee pyytää jonkun apua.
Tartunnat eläintarhoissa
SARS-CoV-2 on tarttunut eläintarhojen eläimiin muun muassa Yhdysvalloissa, Ruotsissa ja Virossa. Tartuntoja on vuoden 2021 helmikuuhun mennessä havaittu isoista kissaeläimistä leijonilla (10 tartuntaa), tiikereillä (8 tartuntaa), lumileopardeilla (3 tartuntaa) sekä yhdellä puumalla (1 tartunta). SARS-CoV-2 tarttuu myös ihmisensukuisiin apinoihin; tauti on tarttunut ainakin gorillaan Yhdysvalloissa (3 tartuntaa gorilloihin). Korkeasaaren eläintarhan eläinlääkärin Sanna Sainmaan mukaan tartunnat eläintarhojen eläimiin korreloivat maan COVID-19-tartuntojen kanssa. Sainmaan mukaan eläintarhassa noudatetaan eläinten kanssa samoja varotoimenpiteitä kuin ihmisten kanssa, eli kahden metrin etäisyyttä ja hyvää käsihygieniaa,
Turkiseläimet
SARS-CoV-2 voi tarttua minkkeihin. Esimerkiksi helmikuun alussa vuonna 2021 epidemioita oli todettu 320 mikkitarhoissa maailmanlaajuisesti. Vuonna 2020 jo Yhdysvalloissa yksistään kuoli 12000 minkkiä COVID-19-tautiin. Tartuntoja on havaittu minkkitarhoilla muun muassa Tanskassa, Alankomaissa, Espanjassa, Yhdysvalloissa ja Ruotsissa. Marraskuussa 2020 Tanskan viranomaiset määräsivät kaikki maan 15–17 miljoonaa minkkiä tapettavaksi SARS-CoV-2-tartuntojen vuoksi. Syynä oli minkeissä syntynyt uusi mutaatio, jonka arvioidaan uhkaavan ihmisille tarkoitettujen SARS-CoV-2-rokotteiden toimivuutta. Tauti on levinnyt tarhoilta toisille ilman ihmisen levitystä – mahdollisesti kissojen tai lintujen välittämänä. Virusta on myös havaittu tarhoilla olevasta pölystä.
Suomessa COVID-19-tautia ei vuoden 2021 helmikuuhun mennessä ole havaittu minkeillä, mutta se on havaittu yhdellä turkistarhaajalla. Tautia on myös todettu Vaasaan ja Pohjanmaalle minkkitarhoihin töihin tulleilla ukrainalaisille työntekijöillä. Suomessa Ruokavirasto todennäköisesti määräisi eläintautilain nojalla kaikki minkit tapettavaksi, mikäli tarhan eläimillä havaittaisiin SARS-CoV-2-tartunta. Ruokaviraston mukaan turkistarhojen suojaustoimia ei aiota valvoa, sillä ne on vapaaehtoisia.
COVID-19 käyttäytyy minkeissä samalla tavoin kuin ihmisessä. Nuoret minkit saavat taudin helpommin kun taas vanhemmat, 1-4 vuoden ikäiset, minkit kuolevat siihen helpommin. Minkkien keuhkoissa oleva proteiini altistaa ne muita eläimiä helpommin taudille. Minkkien SARS-CoV-2-tartunnan oireita ovat ripuli ja hengitystieoireet. Yleinen havaittu oire on vaikeus hengittää. Yhdysvalloissa tartunta on edennyt nopeasti ja eläin on monesti kuollut seuraavana jo päivänä. Virus tappaa noin 20 prosenttia sairastuneista minkeistä. Virus on helpommin löydettävissä tutkimuksissa kuolleilta minkeiltä. Myös supikoirat ovat alttiita saamaan taudin.
SARS-CoV-2-rokotteita on myös kehitelty minkeille.
Muut tuotantoeläimet
Kliinisissä tutkimuksissa on havaittu, että tauti lisääntyy heikosti sioissa, kanoissa ja ankoissa.
Villieläimet ja esiintyvyys luonnossa
Texasissa tutkimusryhmä on selvittänyt SARS-CoV-2:n tarttumista eri eläinlajeihin. Ryhmä on testannut muun muassa villidelfiinejä ja sivettikissoja. Näiltä ei virusta ole kuitenkaan löydetty. On pelätty, että virus leviäisi luontoon eläinten keskuuteen, joskaan tästä ei ole löydetty todisteita ainakaan vuoden 2021 tammikuuhun mennessä. Monet uhanalaiset lajit, kuten kädelliset, ovat vaarassa sairastua tautiin, mikäli se leviää luontoon. Tautia on havaittu luonnossa villiminkeillä ja turkistarhoilta karanneilla minkeillä.
Jyrsijät voivat mahdollisesti toimia taudin levittäjinä. Myös lepakot voivat saada tartunnan.
Olio-ohjelmointi
Periaatteita
Olio-ohjelmoinnissa pyritään olioiden hyvään koheesioon. Olioiden tulee vastata jotakin yksiselitteistä ja selkeärajaista käsitettä. Olion tietojäsenet liittyvät kiinteästi toisiinsa. Esimerkiksi opintorekisteritietojärjestelmässä ei samaan olioon tallenneta opiskelijan ja hänen käymiensä kurssien tietoja, vaan opiskelijaolio sisältää pelkästään opiskelijan tiedot ja viittaukset opintosuoritusolioihin.
Olioiden välisten riippuvuuksien hallinta on tärkeää laajoissa oliojärjestelmissä. Oliolla on riippuvuus kaikkiin niihin olioihin, joille se lähettää viestejä. Olioiden tulisi kommunikoida vain muutamien läheisesti olioon liittyvien olioiden kanssa. On vältettävä tilannetta, jossa järjestelmän kaikki oliot joutuvat olemaan tietoisia suuresta määrästä muita olioita eri puolilta järjestelmää.
Olioita pyritään ohjelmoimaan niiden rajapintoja vastaan. Rajapinta kuvaa olion tarjoamat palvelut, eli mitä olio tekee. Olion toteutuksen yksityiskohdat, eli miten olio toimii, pyritään piilottamaan muilta olioilta. Käytännössä olion rajapinta koostuu sen julkisista metodeista ja jäsenmuuttujista. Oliolla voi olla myös suojattuja metodeja ja jäsenmuuttujia, jotka eivät ole käytettävissä olion ulkopuolelta. Usein jäsenmuuttujien käsittely olion ulkopuolelta estetään ja olion tilaa voidaan käsitellä vain sen jäsenfunktioiden avulla.
Rajapintaluokat (interface) määrittelevät pelkästään rajapinnan ilman toteutusta. Rajapintaluokkien käyttö mahdollistaa tietyn toiminnon toteutuksen varioimisen ohjelmassa. Konkreettiset luokat, jotka perivät rajapintaluokan, voivat toteuttaa rajapintaluokan määrittelemän rajapinnan haluamallaan tavalla.
SOLID on yksi olio-ohjelmoinnin pääperiaatteista. Periaatteet esitteli ensin Robert J. Martin, mutta SOLID lyhennettä käytti ensin Michael Feathers.
SOLID koostuu seuraavista säännöistä:
Polymorfismi tarkoittaa olioiden kykyä ottaa monta muotoa. Sen nimi tulee kreikan “poly”, joka tarkoittaa lukuista ja “morphs” tarkoittaa muotoa. Esimerkiksi ihminen voi olla jonkun lapsi, puoliso ja työntekijä samaan aikaan ja käyttäytyä eri tavalla eri tilanteessa. Samalla tavalla kantaluokan lapsiluokat voivat määrittää oman käyttäytymisensä ja jakaa osan kantaluokan samoista toimintatavoista.
Polymorfismin ominaisuudet ovat metodien toiminnallisuuden eri käyttäytyminen eri skenaarioissa, metodien käyttäytymisen riippuvuus eri annetuista tiedoista, jäsenien tai metodien sama nimi erityyppisissä luokassa, implisiittisen tyyppimuunnoksen tukeminen.
Javassa on kaksi tyyppiä polymorfismia. Staattisessa polymorfismissa luokassa on useita metodeja, joilla on sama nimi samassa luokassa, mutta jokaisella on eri määrä parametreja tai eri tietotyyppien parametreja. Sellaisia funktioita kutsutaan ylikuormituksiksi (method overloading). Metodikutsun käsittelee kääntäjä. Toinen polymorfismin tyyppi on dynaaminen. Se esiintyy, kun lapsiluokalla on oma määritelmänsä yhdelle kantaluokan jäsenmetodeista. Tätä kutsutaan metodin ohitukseksi (method overriding). Näiden kahden polymorfismin välillä ero on se, että staattinen polymorfismi kerää tiedot metodin kutsumiseksi käännöshetkellä, kun taas dynaaminen polymorfismi kerää tiedot metodin kutsua varten ajon aikana.
Polymorfismi eroaa periytymisestä. Periytymisessä ilman polymorfiaa lapsiluokka perii samat kantaluokan attribuutit ja metodit ilman muutoksia niiden toimivuuteen. Polymorfismissa lapsiluokka perii attribuutit ja metodit, mutta tarjoaa näille menetelmille oman toteutuksen.
Periytymisessä aliluokan vastuulla on jäsenmuuttujien ja muiden tietorakenteiden alustaminen ja kantaluokan vastuulla on pitää huoli, että aliluokan olion kantaluokkaosa alustetaan oikein. Aliluokka tarjoaa kaikki samat palvelut mitä kantaluokkakin ja mahdollisesti vielä jotain omaa. Aliluokan olio on tyypiltään myös kantaluokan olio.
Toinen käytetty olio-ohjelmoinnin periaatteista on Craig Larmanin kirjassaan Applying UML and Patterns kuvailema GRASP, eli General Responsibility Assignment Software Patterns. Se on kahdeksan periaatteen kuvailema suhde suunnittelun ja vastuunjakamisen välillä. GRASP periaatteet ovat ohjaaja, luoja, informaatioasiantuntija, alhainen yhteenliittäminen, korkea koheesio, polymorfismi, suojatut variaatiot ja täydellinen fabrikaatio. GRASP periaatteita voidaan käyttää SOLID periaatteiden tapaan hahmottamaan ja kuvailemaan yleisiä olio-ohjelmoinnin ongelmia sekä niiden ratkaisuja. Olio-ohjelmoinnin periaatteet eivät ole fyysisiä työkaluja, vaan ajatusmalleja, joiden avulla voidaan kehittää parempaa sekä selkeämpää koodia. Yhdessä kummatkin periaatteet määrittelevät keskeisiä olio-ohjelmoinnin konsepteja sekä kehitysmalleja.
Menetelmiä
Olio-ohjelmointi on vaikuttanut suuresti ohjelmistotuotannon menetelmiin ohjelmiston elinkaaren kaikissa eri vaiheissa.
Olioanalyysi on keskeinen osa olio-ohjelmiston määrittelyä ja suunnittelua. Olioanalyysissa selvitetään ongelma-alueen (problem domain) käsitteet (concepts) ja niiden väliset rakenteelliset ja toiminnalliset suhteet. Olioanalyysin tuloksena on käsitemalli (concept model), josta toteutuksen luokkamäärittelyt voidaan suoraviivaisesti johtaa.
Olioanalyysia varten on kehitetty useita mallinnuskieliä. Mallinnuskielet poikkeavat monella tavalla tavallisista oliokielistä: Mallinnuskielet eivät ole suoritettavia, vaan ne kuvaavat järjestelmän rakennetta korkeammalla abstraktiotasolla ilman yksityiskohtia. Mallinnuskieliä käytetään pääasiassa graafisella notaatiolla, mikä mahdollistaa suurten kokonaisuuksien havainnollistamisen diagrammien avulla. Mallinnuskielten rakenne on kuitenkin tarkoin määritelty, jotta mallit eivät olisi tulkinnanvaraisia. Object Management Groupin (OMG) Unified Modeling Language (UML) on saavuttanut hallitsevan aseman yleiskäyttöisten mallinnuskielien joukossa. UML on standardi graafinen mallinnuskieli, joka tarjoaa useita erilaisia kaavioita, joista tunnetuimpia ovat luokkakaavio, sekvenssikaavio, käyttötapauskaavio sekä tilakaavio.
Luokkakaavio sisältää luokan, attribuutit (luokan sisältämä tieto), metodit (luokan toiminnallisuus) sekä luokkien väliset yhteydet. Alla esimerkki luokkakaaviossa kuvatusta Nappula-luokasta, jolla on muuttujia dataa varten sekä funktioita. Esimerkin taulukossa viisi ylintä ovat yksityisiä attribuutteja ja kolme alinta ovat julkisia metodeja.
Rakennemallit ovat hyödyllisiä muodostaessa suuria, joustavia ja tehokkaita rakenteita olioista, jotka ovat muuten olisivat erillään. Näillä rakenteilla pystytään siis esimerkiksi määrittelemään komponenttien välisiä yhteyksiä ja ne ovat erityisen hyödyllisiä suurissa järjestelmissä. Rakennemalleista esimerkki voisi olla decorator (kuorruttaja), jonka avulla pystyy lisäämään toimintoja olioon muuttamatta sen pohjalla olevaa rakennetta. Uusia "kerroksia" lisätessä kuitenkin kannattaa olla varovainen, että niitä tule lisättyä liian monta, joka johtaisi turhaan monimutkaisuuteen.