812347A Olio-ohjelmointi, 2015 syksy 2. vsk. II Johdanto olio-ohjelmointiin

Samankaltaiset tiedostot
812341A Olio-ohjelmointi, I Johdanto

Olio-ohjelmointi Johdanto olio-ohjelmointiin

815338A Ohjelmointikielten periaatteet

1. Olio-ohjelmointi 1.1

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Rajapinnat ja sisäluokat

JAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++?

812341A Olio-ohjelmointi, IX Olioiden välisistä yhteyksistä

Muutamia peruskäsitteitä

P e d a c o d e ohjelmointikoulutus verkossa

TIE Samuel Lahtinen. Lyhyt UML-opas. UML -pikaesittely

Ohjelmistojen mallintaminen luokkamallin lisäpiirteitä

Sisällys. 9. Periytyminen Javassa. Periytymismekanismi Java-kielessä. Periytymismekanismi Java-kielessä

Sisällys. JAVA-OHJELMOINTI Osa 7: Abstrakti luokka ja rajapinta. Abstraktin luokan idea. Abstrakti luokka ja metodi. Esimerkki

815338A Ohjelmointikielten periaatteet

9. Periytyminen Javassa 9.1

TIE Ohjelmistojen suunnittelu. Luento 8..9: moniperintä

UML Luokkakaavio 14:41

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op

Abstraktit tietotyypit ja olio-ohjelmointi

Tenttikysymykset. + UML- kaavioiden mallintamistehtävät

13/20: Kierrätys kannattaa koodaamisessakin

Tenttikysymykset. + UML-kaavioiden mallintamistehtävät

9. Periytyminen Javassa 9.1

Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 1

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. VII Suunnittelumallit Adapter ja Composite

Ohjelmistojen mallintaminen Luokkakaaviot Harri Laine 1

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. IX Suunnittelumallit Proxy, Factory Method, Prototype ja Singleton

Olio-ohjelmoinnissa luokat voidaan järjestää siten, että ne pystyvät jakamaan yhteisiä tietoja ja aliohjelmia.

HELIA 1 (21) Outi Virkki Tietokantasuunnittelu

Aalto Yliopisto T Informaatioverkostot: Studio 1. Oliot ja luokat Javaohjelmoinnissa

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. VIII Suunnittelumallit Observer ja State

Objective-C. Ryhmä 35: Ilpo Kärki Aleksi Pälä

Ohjelmointikielet ja -paradigmat 5op. Markus Norrena

Ohjelmistoarkkitehtuurit kevät

3. Komponentit ja rajapinnat

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Pakkaukset ja määreet

15. Ohjelmoinnin tekniikkaa 15.1

Olioperustaisuus (object oriented)

Luokka- ja oliokaaviot

Sisällys. JAVA-OHJELMOINTI Osa 6: Periytyminen ja näkyvyys. Luokkahierarkia. Periytyminen (inheritance)

Johdatus sovellussuunnitteluun, s99, osa2 Helsingin yliopisto;/tktl Harri Laine 1. Olioperustaisuus (object oriented)

Johdatus sovellussuunnitteluun, s99, osa2 Helsingin yliopisto;/tktl Harri Laine 1. Olioperustainen ohjelmistokehitys

Concurrency - Rinnakkaisuus. Group: 9 Joni Laine Juho Vähätalo

on ohjelmoijan itse tekemä tietotyyppi, joka kuvaa käsitettä

HELIA 1 (14) Outi Virkki Käyttöliittymät ja ohjlmiston suunnittelu

815338A Ohjelmointikielten periaatteet

15. Ohjelmoinnin tekniikkaa 15.1

Olio-ohjelmointi: Luokkien toteuttaminen. Jukka Juslin

Sisällys. 9. Periytyminen Javassa. Periytymismekanismi Java-kielessä. Periytymismekanismi Java-kielessä

Sisällys. 18. Abstraktit tietotyypit. Johdanto. Johdanto

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. X Poikkeusten käsittelystä

Ohjelmistokehykset ohjelmistorunkoja uudelleenkäyttö olioperustaisista ohjelmistorunko

Luokkamalli LUOKKAKAAVIO. Tämän osan sisältö. Luokkamalli. Luokka ja olio. Luokkakaavio (class diagram)

Tietorakenteet ja algoritmit

Kertaus: yleistys-erikoistus ja perintä

KOHDELUOKAN MÄÄRITTELY

Ohjelmistojen mallintaminen luokkamallin lisäpiirteitä

Rajapinnasta ei voida muodostaa olioita. Voidaan käyttää tunnuksen tyyppinä. Rajapinta on kuitenkin abstraktia luokkaa selvästi abstraktimpi tyyppi.

Javan perusteita. Janne Käki

18. Abstraktit tietotyypit 18.1

Sisällys. 11. Rajapinnat. Johdanto. Johdanto

Common Lisp Object System

Sisällys. Mitä on periytyminen? Yksittäis- ja moniperiytyminen. Oliot ja perityt luokat. Periytymisen käyttö. 8.2

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Taulukot & Periytyminen

Ohjelmistoarkkitehtuurit kevät

UML -mallinnus LUOKKAKAAVIO EERO NOUSIAINEN

Ohjelmistotekniikan menetelmät, luokkamallin laatiminen

Komponentit ja rajapinnat

Mitä on periytyminen?

Sisällys. 1. Omat operaatiot. Yleistä operaatioista. Yleistä operaatioista

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

T Olio-ohjelmointi Osa 5: Periytyminen ja polymorfismi Jukka Jauhiainen OAMK Tekniikan yksikkö 2010

Rajapinta (interface)

1. Omat operaatiot 1.1

Imperatiivisen ohjelmoinnin peruskäsitteet. Meidän käyttämän pseudokielen lauseiden syntaksi

P e d a c o d e ohjelmointikoulutus verkossa

Paikkatiedon mallinnus Dokumentoinnin ymmärtäminen. Lassi Lehto

Varhaiset oliokielet Modula, CLU ja Smalltalk. T : Seminar on the History of Programming Languages Kari Koskinen Otaniemi 29.9.

lausekkeiden tapauksessa. Jotkin ohjelmointikielet on määritelty sellaisiksi,

815338A Ohjelmointikielten periaatteet

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. IV Periytyminen ja monimuotoisuus

UML-kielen formalisointi Object-Z:lla

ADA. Ohjelmointikieli. Ryhmä 5 Henna Olli, Päivi Hietanen

Ohjelmistojen mallintaminen, mallintaminen ja UML

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2

Sisällys. 6. Metodit. Oliot viestivät metodeja kutsuen. Oliot viestivät metodeja kutsuen

TIE Principles of Programming Languages CEYLON

Soveltuvuustutkimus Lifebelt-ohjelman ideologian käytettävyydestä olioorientoituneeseen

Oliosuunnittelu. Oliosuunnittelu

Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari Korhonen

Tietorakenteet ja algoritmit - syksy

Ohjelmistotekniikan menetelmät, suunnittelumalleja

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä. Tiedonkätkentä. Aksessorit. 4.2

Sisällys. 19. Unified Modeling Language (UML) Johdanto. Johdanto. Johdanto. Luokkakaavio:

12 Mallit (Templates)

Olio-ohjelmointi Johdanto suunnittelumalleihin. 1. Yleistä

- Komposiittityypit - Object (Mukaanlukien funktiot) - Array. - Erikoisdatatyypit - null - undefined

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

Oleelliset vaikeudet OT:ssa 1/2

Ohjelmistotekniikan menetelmät, UML

Transkriptio:

812347A Olio-ohjelmointi, 2015 syksy 2. vsk II Johdanto olio-ohjelmointiin

Sisältö 1. Abstraktiosta 2. Olio-ohjelmoinnin historiaa 3. Olioparadigmasta 4. Peruskäsitteiden esittely 2

II.1 Abstraktiosta Yleensä kohdejärjestelmä monimutkainen: tarvitaan abstraktio Prosessiabstraktio Jaetaan ohjelma erilaisiin proseduureihin Varhaisin abstraktion muoto Data-abstraktio Yhdistetään data sitä käsitteleviin operaatioihin Johti abstrakin tietotyypin syntyyn 3

II.1 Abstraktiosta (2) 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. ADT + periytyminen + monimuotoisuus = Olioohjelmointi 4

I.1 Abstraktiosta (3) 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) 5

II.2 Olio-ohjelmoinnin historiaa 1960-1970-lukujen vaihteessa havaittiin ongelmia Projektit eivät valmistuneet ajoissa tai ollenkaan Projektien budjetit ylittyivät Ohjelmat usein huonolaatuisia Tilanne nimettiin ohjelmistokriisiksi Otettiin käyttöön uusia tuotantoprosesseja Kehiteltiin uusia kieliä Esiteltiin uusia ohjelmointiparadigmoja mm. olioohjelmointi 6

I.2.1. 1960-luku: Simula67 Olio-ohjelmoinnin isät norjalaiset Kristen Nygaard (27.8.1926-10.8.2002) ja Ole-Johan Dahl (12.10.1931-29.6.2002) 1961 Simula I ohjelmointikieli simulointiin Pohjautui Algol60-kieleen Sisälsi luokan ja olion käsitteet 1967 Simula67 Täysimittainen ja yleiskäyttöinen ohjelmointikieli Myös periytyminen Ei juuri levinnyt akateemisen maailman ulkopuolelle 7

II.2.2 1980-luku Olio-ohjelmoinnin läpimurto Oliotekniikoiden käyttöönotto laajeni ohjelmointikielestä ja koodauksesta muihin kehitysvaiheisiin. Grady Booch 1980: Oliosuuntautuneen suunnittelun käsite Ensimmäinen kaupallinen oliotietokanta julkaistiin 1985. 8

I.2.2 1980-luku: Smalltalk Kehittäjä Alan Kay Xeroxin Palo Alton tutkimuskeskuksessa Julkistettiin 1980 Ohjelmointijärjestelmä Kayn kehittämälle Dynabook-tietokoneelle Puhdas oliokieli Kaikkien olioiden kantaluokka Object Sisälsi kattavan luokkakirjaston Ei merkittävää asemaa ohjelmistotuotannossa, vaikuttanut suuresti myöhempiin kieliin 9

II.2.2 1980-luku: C++ Kehittäjä Bjarne Stroustrup AT&T Bellin laboratoriossa http://www.research.att.com/~bs/homepage.html Työnimi C with classes C:hen lisätty oliotuki 1983 nimeksi C++ ja yleiseen käyttöön Voimakasta kehitystä 1980-luvulla, mm. Moniperintä Parametrisoidut tyypit Poikkeusten käsittely Standardisoitu 1997 Kieli + standardikirjasto Ei puhdas oliokieli vaan hybridi Melko vaikea käyttää, C-kielen perintö rasittaa 10

I.2.3 1990-luku: Java Pääasiallinen kehittäjä James Gosling Sun Microsystemsillä 1990-luvun puolivälissä Alun perin pienlaitteiden sulautetuksi ohjelmointikieleksi C++:aa pidettiin liian epäluotettavana Pohjautuu C++:aan, muutoksia: Ei moniperintää Kaikilla luokilla yhteinen kantaluokka Varatun muistin automaattinen vapautus Osoitintyyppi poistettu Lisäominaisuus rinnakkaisen ohjelmoinnin tuki Puhtaampi oliokieli kuin C++ Perustietotyypit eivät kuitenkaan olioita 11

II.3 Olioparadigmasta: paradigman tavoitteet Ongelman parempi mallintaminen Ohjelmistokomponenttien uudelleenkäytettävyys Lisää luotettavuutta Ohjelmistojen helppo laajennettavuus ja ylläpito Toivotaan auttavan tuottavuuden ja laadun ristiriidassa Parantaa sisäistä laatua: ohjelma modulaarinen, luettava, rakenteellinen Parantaa ulkoista laatua: loppukäyttäjän, kehittäjätiimin toisen jäsenen, jne näkökulmasta 12

II.3 Olioparadigmasta: Uudelleenkäyttö, laatu ja ohjelmoinnin tehokkuus Uudelleenkäyttö vs uudelleenkäytettävyys Käytetäänkö olemassa olevaa komponenttia uudelleen vai luodaanko komponentti uudelleenkäytettäväksi? Koodia ei ole varaa kirjoittaa moneen kertaan Ratkaisu voi soveltua sellaisenaan tai vain vähän räätälöitynä johonkin toiseenkin ongelmaan Laadittaessa uudelleenkäytettävää koodia myös laatu oletettavasti paranee Komponentin testaus useassa kontekstissa Ratkaisu suunniteltava yleiskäyttöiseksi ja laajennettavaksi Uudelleenkäytettävyyden merkitys kasvaa 13

II.3 Olioparadigmasta: paradigman haasteet Oliotekniikoiden täysi hyödyntäminen edellyttää erityistä olioajattelua Olioajattelun tulee kantaa koko kehitysprosessin läpi Miten soveltuu erilaisiin kehitysmenetelmiin? Ei sovi kaikkiin tilanteisiin 14

II.4 Peruskäsitteistön esittely: Luokka Ohjelmoijan määrittelemä tietotyyppi, joka toteuttaa tiedon kapseloinnin ja kätkennän Yhdistää siis tiedot ja niitä käsittelevät operaatiot Luokan jäsenet Jäsenmuuttujat (tietojäsenet) määrittelevät datan Metodit määrittelevät luokan operaatiot 15

II.4 Peruskäsitteistön esittely: Tiedon kätkentä Toteutetaan näkyvyysmääreillä Säätelevät miten jäsen näkyy luokan ulkopuolelle C++:ssa private, protected ja public Javassa lisäksi oletusnäkyvyys Private-tyyppiset jäsenet käytettävissä vain luokan sisällä Protected-tyyppiset myös luokan aliluokissa Public-tyyppiset kaikkialla Public-tyyppiset jäsenet = luokan ulospäin näkyvä rajapinta 16

II.4 Peruskäsitteistön esittely: Olio Luokasta tehty ilmentymä, instanssi Muuttuja, jonka tietotyyppi on luokka Yhdistelmä tilasta ja käyttäytymisestä Olion tila = sen jäsenmuuttujien kulloisetkin arvot Olion käyttäytymisen määräävät metodit 17

II.4 Peruskäsitteistön esittely: Periytyminen ja kooste Periytyminen: Luokan aliluokka perii kantaluokan piirteet Käytetään, kun aliluokan oliot ovat erikoistapauksia kantaluokan olioista ( is-a-relationship ) Kooste: Luokka (pääluokka) sisältää jäsenenään toisen luokan olion (komponentin) has-a-relationship Erikoistapaus aito kooste (kompositio) Komponentti voi olla olemassa ainoastaan pääluokan olion osana Komponentti voi olla osana ainoastaan yhdessä pääluokan oliossa 18

II.4 Peruskäsitteistön esittely: Luokkakaaviot Näkyvyydet: + julkinen - Yksityinen # suojattu ~ pakkaus (ei C++:ssa) Luokan nimi Luokan jäsenmuuttuja Luokan metodit Huomautus 19

II.4 Peruskäsitteistön esittely: Luokkakaaviot (2) Kooste. Strategy on Context-olion komponentti Periytyminen. ConcreteStrategy perii luokan Strategy 20

II.4 Peruskäsitteistön esittely: Luokkakaaviot (3) Assosiaatio. Client kutsuu Componentin metodia operation() Aito kooste (kompositio) 21