812341A Olio-ohjelmointi, 2016 I Johdanto
Sisältö 1. Abstraktiosta 2. Olio-ohjelmoinnin historiaa 3. Olioparadigmasta 4. Peruskäsitteiden kertausta 812341A Olio-ohjelmointi, Johdanto 2
1 Abstraktiosta n Yleensä kohdejärjestelmä monimutkainen: tarvitaan abstraktio n Prosessiabstraktio Jaetaan ohjelma erilaisiin proseduureihin Varhaisin abstraktion muoto n Data-abstraktio Yhdistetään data sitä käsitteleviin operaatioihin Johti abstrakin tietotyypin syntyyn 812341A Olio-ohjelmointi, Johdanto 3
Abstraktiosta n Abstrakti tietotyyppi (abstract data type, ADT) on tietotyyppi, joka toteuttaa ehdot: Tiedon kapselointi: Määrittely ja tietotyypin operaatiot määritelty yhdessä syntaktisessa yksikössä. Muut ohjelmayksiköt voivat muodostaa tämän tyypin muuttujia. Tiedon kätkentä: Määrittelyn ja operaatioiden yksityiskohdat eivät näy ulkopuoliselle käyttäjälle. n ADT + periytyvyys + monimuotoisuus = Olio-ohjelmointi 812341A Olio-ohjelmointi, Johdanto 4
Abstraktiosta Kapseloinnin hyödyt Data ja sitä käsittelevät operaatiot yhdessä -> Ohjelman tekninen ja looginen hallinta helpompaa Mentaalinen hahmottaminen on helpompaa Ohjelman osien välinen riippuvuus vähenee Kätkennän hyödyt Tietotyypin luotettavuus paranee Ylläpidettävyys helpottuu (ulospäin näkyvä rajapinta säilyy muuttumattomana) 812341A Olio-ohjelmointi, Johdanto 5
Abstraktiosta Monimuotoisuus metodien ylikuormitus Metodien uudelleenmäärittely muuttujien monimuotoisuus generisyys 812341A Olio-ohjelmointi, Johdanto 6
2 Olio-ohjelmoinnin historiaa n 1960-1970-lukujen vaihteessa havaittiin ongelmia Projektit eivät valmistuneet ajoissa tai ollenkaan Projektien budjetit ylittyivät Ohjelmat usein huonolaatuisia n Tilanne nimettiin ohjelmistokriisiksi Otettiin käyttöön uusia tuotantoprosesseja Kehiteltiin uusia kieliä Esiteltiin uusia ohjelmointiparadigmoja mm. olioohjelmointi 812341A Olio-ohjelmointi, Johdanto 7
1960-luku: Simula67 n Olio-ohjelmoinnin isät norjalaiset Kristen Nygaard ja Ole- Johan Dahl n 1961 Simula I ohjelmointikieli simulointiin Pohjautui Algol60-kieleen Sisälsi luokan ja olion käsitteet n 1967 Simula67 Täysimittainen ja yleiskäyttöinen ohjelmointikieli The image cannot be displayed. Your computer may not have enough memory to open the image, or the image may have been corrupted. Restart your computer, and then open the file again. If the red x still appears, you may have to delete the image and then insert it again. The image cannot be displayed. Your computer may not have enough memory to open the image, or the image may have been corrupted. Restart your computer, and then open the file again. If the red x still appears, you may have to delete the image and then insert it again. Myös periytyminen Ei juuri levinnyt akateemisen maailman ulkopuolelle 812341A Olio-ohjelmointi, Johdanto 8
1980-luku n Olio-ohjelmoinnin läpimurto n Oliotekniikoiden käyttöönotto laajeni ohjelmointikielestä ja koodauksesta muihin kehitysvaiheisiin. Grady Booch 1980: Oliosuuntautuneen suunnittelun käsite n Ensimmäinen kaupallinen oliotietokanta julkaistiin 1985. 812341A Olio-ohjelmointi, Johdanto 9
1980-luku: Smalltalk n Kehittäjä Alan Kay Xeroxin Palo Alton tutkimuskeskuksessa Julkistettiin 1980 n Ohjelmointijärjestelmä Kayn kehittämälle Dynabooktietokoneelle n Puhdas oliokieli n Kaikkien olioiden kantaluokka Object Sisälsi kattavan luokkakirjaston n Ei merkittävää asemaa ohjelmistototannossa, vaikuttanut suuresti myöhempiin kieliin 812341A Olio-ohjelmointi, Johdanto 10
1980-luku: C++ n Kehittäjä Bjarne Stroustrup AT&T Bellin laboratoriossa n Työnimi C with classes C:hen lisätty oliotuki 1983 nimeksi C++ ja yleiseen käyttöön n Voimakasta kehitystä 1980-luvulla, mm. Moniperintä Parametrisoidut tyypit Poikkeusten käsittely n Standardisoitu 1997 Kieli + standardikirjasto n Ei puhdas oliokieli vaan hybridi n Melko vaikea käyttää, C-kielen perintö rasittaa The image cannot be displayed. Your computer may not have enough memory to open the image, or the image may have been corrupted. Restart your computer, and then open the file again. If the red x still appears, you may have to delete the image and then insert it again. 812341A Olio-ohjelmointi, Johdanto 11
1990-luku: Java n Pääasiallinen kehittäjä James Gosling Sun Microsystemsillä 1990-luvun puolivälissä n Alun perin pienlaitteiden sulautetuksi ohjelmointikieleksi C++:aa pidettiin liian epäluotettavana n Pohjautuu C++:aan, muutoksia: Ei moniperintää Kaikilla luokilla yhteinen kantaluokka Varattu muisti vapautetaan automaattisesti Osoitintyyppi poistettu Lisäominaisuus rinnakkaisen ohjelmoinnin tuki n Puhtaampi oliokieli kuin C++ Perustietotyypit eivät kuitenkaan olioita 812341A Olio-ohjelmointi, Johdanto 12
3 Olioparadigmasta: paradigman tavoitteet n Ongelman parempi mallintaminen n Ohjelmistokomponenttien uudelleenkäytettävyys Lisää luotettavuutta n Ohjelmistojen helppo laajennettavuus ja ylläpito n Toivotaan auttavan tuottavuuden ja laadun ristiriidassa. n Parantaa sisäistä laatua: ohjelma modulaarinen, luettava, rakenteellinen n Parantaa ulkoista laatua: loppukäyttäjän, kehittäjätiimin toisen jäsenen, jne näkökulmasta 812341A Olio-ohjelmointi, Johdanto 13
Olioparadigmasta: Uudelleenkäyttö, laatu ja ohjelmoinnin tehokkuus n Uudelleenkäyttö vs uudelleenkäytettävyys Käytetäänkö olemassa olevaa komponenttia uudelleen vai luodaanko komponentti uudelleenkäytettäväksi? n Koodia ei ole varaa kirjoittaa moneen kertaan. Ratkaisu voi soveltua sellaisenaan tai vain vähän räätälöitynä johonkin toiseenkin ongelmaan. n Laadittaessa uudelleenkäytettävää koodia myös laatu oletettavasti paranee Komponentin testaus useassa kontekstissa Ratkaisu suunniteltava yleiskäyttöiseksi ja laajennettavaksi n Uudelleenkäytettävyyden merkitys kasvaa 812341A Olio-ohjelmointi, Johdanto 14