© Lammi-Niskala-Kossarev 1 2.8.4 ADT:n toteutus Imperatiivinen paradigma Imperatiivinen paradigma toimenpiteet aktiivisia, tiedot passiivisia toimenpiteet.

Slides:



Advertisements
Samankaltaiset esitykset
Tuloksellinen Java-ohjelmointi Luku 3 Luokkien käyttäminen
Advertisements

18. Abstraktit tietotyypit
6. Metodit.
5.1. Tason yhtälö a(x – x0) + b(y – y0) + c(z – z0) = 0
© Jukka Harju, Viittausmuuttujat. © Jukka Harju, Viittaukset •Viittausmuuttuja sisältää tiedon siitä missä muistipaikassa olio.
© Hannu Laine 1 Tietorakenteet ja algoritmit Funktio-osoittimet Funktio-osoittimen ja taulukko-osoittimen vertailu Funktio-osoittimen käyttötapoja.
16. Javan omat luokat.
Luokkakaaviot Luokkakaaviot Tekninen suunnittelu.
Ict1td002: Ohjelmointitaito Kertaus Osio 2 - luokat - ilmentymät - viittaus- ja arvomuuttuja - ilmentymien taulukointi HAAGA-HELIA IltaTiko.
© 2010 IBM Corporation1 Sisältö  Uusi sisältö luodaan aina sisällönhallinnassa –Uusi -> Sisältö –Tallenna nimellä olemasta olevasta sisällöstä  Tavallinen.
2. Olio-ohjelmoinnin perusteita
Olio-ohjelmointi. Mitä olio-ohjelmointi on ?  Pyritään mallintamaan jotain reaalimaailman kohdetta tietokoneohjelman avulla  Olio on luokan ilmentymä.
2.8.3 Abstraktit tietotyypit
1. Olio-ohjelmointi.
13. Pakkaukset.
Perintä. Yleistä Olio-ohjelmoinnin menetelmä muodostaa uusia luokkia aiemmin määriteltyjen luokkien avulla Luokka saa automaattisesti käyttöönsä kaikki.
Ohjelmiston toteutus (teknisestä näkökulmasta)
C-ohjelmointi, kevät 2006 Taulukot Binääritiedostot Luento
OHJELMAN OSITTAMINEN LUOKKA ATTRIBUUTIT METODIT. LUOKKA JAVA ohjelma koostuu luokista LUOKKA sisältää metodeja molemmat sisältävät attribuutteja eli muuttujia.
@ Leena Lahtinen OHJELMAN OSITTAMINEN LUOKKA ATTRIBUUTIT METODIT.
Ohjelman jakaminen useampaan tiedostoon Olio-ohjelmointi (C++) KYAMK, Jarkko Ansamäki 2001.
VB:n tietokantakäsittely
5.3.3 Koodin generointi Koodin generointi tarkoittaa objektikoodin eli konekielisen ohjelman tuottamista. Generointi jakautuu kolmeen osatehtävään: 1.Muistin.
TAULUKKO YKSIULOTTEINEN TAULUKKO. TAULUKKO  Taulukon tarkoitus Ohjelmassa tarvitaan paljon samantyyppisiä samaan kohdealueeseen kuuluvia muuttujia Näitä.
Virtuaaliset jäsenfunktiot tMyn1 Virtuaaliset jäsenfunktiot Virtuaalinen jäsenfunktio on esiteltävä monimuotoisessa kantaluokassa. Virtuaalisen jäsenfunktion.
© Jukka Harju, Jukka Juslin
1 Kertaus koetta varten oleellisista asioista Jukka Juslin.
Johdatus ohjelmointiin Ohjelmistosuunnittelu Jaana Holvikivi.
Luokan määrittely class-määreellä tMyn1 Luokan määrittely class-määreellä Luokan määrittely tarkoittaa luokan tietojäsenten esittelyä ja jäsenfunktioiden.
Map-luokka Mikä Map on? Mapin esittely ja luonti Map-luokan metodeja Mappiin lisääminen Mapin läpikäynti Mapista poistaminen 1.
Visual Basic -ohjelmointi
Metodit – Arvotyyppi Ellei metodi palauta arvoa, sen arvotyyppi on void Tällöin ”return;”-lauseke ei ole metodissa pakollinen, vaikka sen käyttö on sallittua.
2.8 TIETO- JA TALLETUSRAKENTEET
Muuttujat ja vakiottMyn1 Muuttujat ja vakiot PHP-kielen syntaksi on lainattu suurimmaksi osaksi C- kielestä. PHP on erityisesti HTML-dokumenttien sisään.
4. Attribuutit 4.1. Sisällys Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2.
5. Kapselointi Yleistä Kapseloinnilla (encapsulation) tarkoitetaan luokan tietojen ja toimintojen pakkaamista yhdeksi suojatuksi kokonaisuudeksi.
10. Abstrakti luokka Johdanto Abstrakti luokka (abstract class) poikkeaa konkreettisesta luokasta (ei-abstrakti luokka) siten, että siitä ei.
@ Leena Lahtinen OHJELMAN OSITTAMINEN LUOKKA ATTRIBUUTIT METODIT.
17. Kooste Kooste Kooste (aggregation) on luokkien A ja B välinen suhde, joka tarkoittaa “A on B:n osa” tai “A kuuluu B:hen”. − Koostesuhteessa.
Mallinnustavat.
Toteutus. Ohjelmointikielen valinta Käytetään samaa kuin muutkin Työkalujen laatu Usein asiakas määrää Yleensä valittu jo ennen toteutusta Osaaminen vs.
Rinnakkaisuus Järjestelmässä, jossa voi olla useita prosesseja rinnakkain suorituksessa voi tulla tilanteita, joissa prosessien suoritusta täytyy kontrolloida.
Jouni Juntunen Oulun seudun ammattikorkeakoulu Liiketalouden yksikkö
MultiMaker 7.0 Workshop Ohjelma, jossa voidaan luoda näyttäviä multimediasisältöjä. Yhtä sisältökoko-naisuutta kutsutaan esitykseksi. Ohjelmointitaitoja.
Johdetun luokan olion esittely... tMyn1 Johdetun luokan olion esittely ja määrittely Esittelyluokka tarkoittaa olion tunnuksen luokkaa. Määrittelyluokka.
2. Lisää Java-ohjelmoinnin alkeita
Oliot ja luokat Oliot ja luokat Oliot (object) ja luokat (class) ovat keskeisiä olio- ohjelmoinnin käsitteitä. Olio-ohjelmointi on ohjelmointiparadigma,
Vesa Ollikainen & Outi Grotenfelt
Visual Basic -ohjelmointi
11. Rajapinnat Sisällys Mitä rajapinnat ovat? Kuinka ne määritellään ja otetaan käyttöön? Moniperiytyminen rajapintojen avulla. Varoituksen.
Monimuotoinen luokka tMyn1 Monimuotoinen luokka Monimuotoinen luokka mahdollistaa saman jäsenfunktion toteutuksen monella tavalla. Tällöin puhutaan virtuaalisesta.
Johdetun luokan olion alustus tMyn1 Johdetun luokan olion alustus määrätyillä arvoilla Kun ohjelmassa esiintyy johdetun luokan olion määrittely, järjestelmä.
Kantaluokan määrittely tMyn1 Kantaluokan määrittely Perinnän käyttöön liittyvät varatut sanat private, protected, public, final ja abstract. Ne tarkoittavat.
1 © Jukka Juslin Luokat, attribuutit ja metodit Yleistietoa: seuraavalla koulutusviikolla tarkempi käsittely.
15. Ohjelmoinnin tekniikkaa
FOR i := 0...N-1 DO summa := summa + A[i] tulo := tulo * A[i] ENDFOR.
Ohjelmassa tänään Ohjelmointimallit Pseudokieli Modulaarisuus.
Scalan valmiit kokoelmat. Mikä on kokoelma?  Tietorakenne jonka tehtävänä on pitää kirjaa (useista) tietyn tyyppisistä arvoista. Kokoelman sisältämiä.
5. Kapselointi.
11. Rajapinnat.
1. Olio-ohjelmointi.
Kantaluokan määrittely
15. Ohjelmoinnin tekniikkaa
3. Luokat, oliot ja metodit Java-kielessä (Lausekielinen ohjelmointi I ja II –kursseilla opitun kertausta.)
Toisto Toistolausekkeet for, while(ehto){…} ja do {…} while(ehto)
Aakkosnumeerinen tieto
3. Attribuutit.
4. Luokan testaus ja käyttö olion kautta
2. Olio-ohjelmoinnin perusteita
1. Olio-ohjelmointi.
Esityksen transkriptio:

© Lammi-Niskala-Kossarev ADT:n toteutus Imperatiivinen paradigma Imperatiivinen paradigma toimenpiteet aktiivisia, tiedot passiivisia toimenpiteet aktiivisia, tiedot passiivisia toimenpiteitä tarkennetaan aliohjelmissa toimenpiteitä tarkennetaan aliohjelmissa toteutus piilotetaan modularisoinnilla toteutus piilotetaan modularisoinnilla tietorakenteita käytetään tarpeen mukaan tietorakenteita käytetään tarpeen mukaan käytetään klassisissa kielissä kuten Basic, Fortran, Pascal, C käytetään klassisissa kielissä kuten Basic, Fortran, Pascal, C

2© Lammi-Niskala-Kossarev ADT:n toteutus Mitä jos tiedot aktivoitaisiin? Mitä jos tiedot aktivoitaisiin? suunnittelu lähtisi ei toimenpiteiden, vaan tietojen formalisoinnista suunnittelu lähtisi ei toimenpiteiden, vaan tietojen formalisoinnista abstraktin tietotyypin toteutus kätkettäisiin käyttäjältä tiedon modularisoinnilla ja koteloinnilla abstraktin tietotyypin toteutus kätkettäisiin käyttäjältä tiedon modularisoinnilla ja koteloinnilla ADT:lla olisi käytös, joka käsittäisi kaikki ne ADT:hen sovellettavat operaatiot ADT:lla olisi käytös, joka käsittäisi kaikki ne ADT:hen sovellettavat operaatiot

© Lammi-Niskala-Kossarev 3 Pinon toteutus vektorilla DEFINE DATATYPE Pino[T] (* kapseloimaton *) IMPLEMENTATION pinon_max_koko = 100 Pino=RECORD pinon_koko: Integer alkiot: ARRAY[1... pinon_max_koko] OF T ENDRECORD OPERATIONS MODULE push(p: Pino, a: T) (* asettaa alkion a pinon paallimmaiseksi alkioksi IF p.pinon_koko = pinon_max_koko THEN 'virhe' ELSE p.pinon_koko:=p.pinon_koko+1 p.alkiot[p.pinon_koko]:=a ENDIF ENDMODULE MODULE pop(p: Pino, a: T) (* ottaa pinon p paallimmaisen alkion ja sijoittaa sen a:n arvoksi *) IF p.pinon_koko=0 THEN 'virhe' ELSE a := p.alkiot[p.pinon_koko]; p.pinon_koko := p.pinon_koko -1 ENDIF ENDMODULE (* alustaa,luo tyhjan pinon: *) MODULE make(p: Pino) p.pinon_koko := 0 ENDMODULE ENDDEFINE taitamaton käyttäjä lisää alkion pinoon: p.alkiot[1]=2 (eikä tee muuta) näin pinon eheys rikkoontuu: kenttää pinon_koko ei päivitetä  suora pääsy pinon toteutukseen on estettävä jollakin tapaa!  ratkaisu: kotelointi (kapselointi)

4© Lammi-Niskala-Kossarev Toteutuksen kapselointi edell. esim.:ssa pino ei suojattu väärältä käytöltä edell. esim.:ssa pino ei suojattu väärältä käytöltä alkiot tallennettu vektoriin, periaatteessa on pääsyä mihin tahansa vektorin alkioon viittamalla sen indeksiin alkiot tallennettu vektoriin, periaatteessa on pääsyä mihin tahansa vektorin alkioon viittamalla sen indeksiin ristiriidassa pinon idean kanssa ristiriidassa pinon idean kanssa pääsy vain viimeksi lisättyyn alkioon, LIFO-periaate pääsy vain viimeksi lisättyyn alkioon, LIFO-periaate alkion lisäys vain pinon päälle, eli tässä tapauksessa vektorin loppuun alkion lisäys vain pinon päälle, eli tässä tapauksessa vektorin loppuun ratkaisu: toteutuksen (implementoinnin) kätkeminen käyttäjältä ratkaisu: toteutuksen (implementoinnin) kätkeminen käyttäjältä

5© Lammi-Niskala-Kossarev Toteutuksen kapselointi kapselointi (=kotelointi) kapselointi (=kotelointi) julkinen osa: tietotyypin nimi ja operaatioiden nimet ja niiden tarvitsemat parametrit julkinen osa: tietotyypin nimi ja operaatioiden nimet ja niiden tarvitsemat parametrit yksityinen osa: talletusrakenne, jossa ADT toteutettu, operaatioiden toteutukset yksityinen osa: talletusrakenne, jossa ADT toteutettu, operaatioiden toteutukset ei mahdollinen kaikissa kielissä (Basic, Fortran..) ei mahdollinen kaikissa kielissä (Basic, Fortran..) mahdollistaa abstraktin mallin ja sen toteutuksen erottamisen toisistaan mahdollistaa abstraktin mallin ja sen toteutuksen erottamisen toisistaan

6© Lammi-Niskala-Kossarev Pinon kapseloitu toteutus DEFINE DATATYPE Pino[T] (* kapseloitu *) PUBLIC (* julkinen osa *) pinon_max_koko=100 MODULE push(p: Pino, a: T) MODULE pop(p: Pino, a: T) MODULE make(p:Pino) PRIVATE (* yksityinen osa *) Pino=RECORD pinon_koko: Integer alkiot: ARRAY[1... pinon_max_koko] OF T ENDRECORD MODULE push(a.p) … ENDMODULE MODULE pop(p.a)… ENDMODULE MODULE make(p: Pino) … ENDMODULE ENDDEFINE käyttäjälle näkyvät vain julkisessa osassa määritellyt tiedot ja operaatiot - suora pääsy pinoa toteuttavan vektoriin on kielletty - alkioiden lisäys ja poisto vain pushin ja popin kautta

7© Lammi-Niskala-Kossarev Tiedon modularisointi + tiedon ”aktivointi” = oliokeskeinen paradigma Tiedon modularisointi + tiedon ”aktivointi” = oliokeskeinen paradigma Suunnittelu alkaa tietokokonaisuuksien (tieto- objektien), eikä toimintojen selvittämisellä Suunnittelu alkaa tietokokonaisuuksien (tieto- objektien), eikä toimintojen selvittämisellä Todellisen maailman kohteille etsitään sopivat abstraktit tietorakenteet (ADT:t), jotka sitten toteutetaan => oliokeskeinen analyysi Todellisen maailman kohteille etsitään sopivat abstraktit tietorakenteet (ADT:t), jotka sitten toteutetaan => oliokeskeinen analyysi Oliokeskeinen ohjelmointi

8© Lammi-Niskala-Kossarev Oliokeskeinen analyysi löydetään tieto-objektit, joilla tehtävän kannalta merkitystä abstrahoidaan objektit – saadaan abstraktit tietotyypit (ADT) : - ominaisuudet (tiedot) - operaaatiot (toiminnot) 2 objektilla on sama käytös, jos niiden ADT on sama ADT määrittelee luokan, joka kuvaa saman käytöksen omaavat oliot

9© Lammi-Niskala-Kossarev Luokka Luokka Luokka ADT:n toteutus, esim. pinon kapseloitu toteutus ADT:n toteutus, esim. pinon kapseloitu toteutus olion ”tyyppi” olion ”tyyppi” vrt. a:kokonaisluku vs. LautasPino :Pino vrt. a:kokonaisluku vs. LautasPino :Pino Pino-luokka eroaa kokonaislukutyypistä s.e. se määrittele Pino-tyyppisille olioille myös operaatiot (push, pop) Pino-luokka eroaa kokonaislukutyypistä s.e. se määrittele Pino-tyyppisille olioille myös operaatiot (push, pop)

10© Lammi-Niskala-Kossarev Olio luokan esiintymä, samoin kuin a on Integerin esiintymä luokan esiintymä, samoin kuin a on Integerin esiintymä olioita luodaan ohjemaa käynnistettäessä, olio aina kuuluu johonkin luokkaan ja on sen esiintymä olioita luodaan ohjemaa käynnistettäessä, olio aina kuuluu johonkin luokkaan ja on sen esiintymä sen tila muutetaan vaikuttamalla sen julkisiin muuttujiin, attribuutteihin ja soveltamalla sille määriteltyjä operaatioita, metoodeja sen tila muutetaan vaikuttamalla sen julkisiin muuttujiin, attribuutteihin ja soveltamalla sille määriteltyjä operaatioita, metoodeja

11© Lammi-Niskala-Kossarev Luokan määrittely DEFINE CLASS Pino[Tyyppi] (*Pino jonka alkioit ovat alkeistyyppiä Tyyppi *) PRIVATE pinon_koko: Integer alkiot: ARRAY[1... pinon_koko] OF Tyyppi MODULE Sisäinen() (* vain luokan metodien käytössä *) … ENDMODULE PUBLIC MODULE push(a:Tyyppi) … ENDMODULE MODULE pop() RETURNS alkion tyyppiä Tyyppi … ENDMODULE MODULE make(n:Integer) … ENDMODULE MODULE is_empty() RETURNS T jos pino on tyhjä muuten F … ENDMODULE MODULE is_full() RETURNS T jos pino on tyhjä muuten F … ENDMODULE MODULE size() RETURNS pinon koko … ENDMODULE ENDDEFINE HUOM: metodeissa ei enää parametria p:pino, miksi?

12© Lammi-Niskala-Kossarev Olioiden käyttö ohjelmassa (*määritellään ensin luokka kuten edellä: *) DEFINE Class Pino [Tyyppi] … ENDDEFINE (* ilmoita että MinunPino tulee säilyttämään kokonaislukuja: *) MinunPino : Pino[Integer] MinunPino : Pino[Integer] (* alusta pino säilyttämään 100 kokonaislukua: *) MinunPino.make(100) (* lisää luku 5 pinoon *) MinunPino.push(5)

13© Lammi-Niskala-Kossarev Periytyminen todelliset maailman kohteet muodostavat hierarkioita: esim. luennoilla esitetyt esimerkit puista todelliset maailman kohteet muodostavat hierarkioita: esim. luennoilla esitetyt esimerkit puista yleisempi luokka määritellään yliluokaksi, yleisempi luokka määritellään yliluokaksi, esim. Kulkuneuvo esim. Kulkuneuvo konkreettisempi luokka – aliluokaksi, konkreettisempi luokka – aliluokaksi, esim. Auto, Polkupyörä esim. Auto, Polkupyörä ominaisuudet voivat siirtyä yliluokasta aliluokkaan ominaisuudet voivat siirtyä yliluokasta aliluokkaan Kulkuneuvo ajettu km (*attr*) aja(A, B) (*metodi*) Auto ajettu km (*attr*) ovien lkm (*attr*) aja(A, B) (*metodi*) Polkupyörä ajettu km (*attr*) miesten/naisten (*attr*) aja(A, B) (*metodi*)

14© Lammi-Niskala-Kossarev Yhteenveto I Oliokeskeisessä paradigmassa: Oliokeskeisessä paradigmassa: tiedot ovat etusijalla tiedot ovat etusijalla toiminnot takasijalla toiminnot takasijalla Oliot lähettävät toisilleen viestejä Oliot lähettävät toisilleen viestejä niissä metodien tai attribuuttien käyttö niissä metodien tai attribuuttien käyttö Kokonaisuutta tarkkaileva algoritmi ei enää keskeinen, vaan on olioiden keskinäinen kommunikointi Kokonaisuutta tarkkaileva algoritmi ei enää keskeinen, vaan on olioiden keskinäinen kommunikointi

15© Lammi-Niskala-Kossarev ei vain ohjelmointi, mutta myös suunnittelu (lähestymistapa ongelmanratkaisuun) eroaa imperatiivisen paradigman vastaavasta ei vain ohjelmointi, mutta myös suunnittelu (lähestymistapa ongelmanratkaisuun) eroaa imperatiivisen paradigman vastaavasta suoritetaan em. oliokeskeinen analyysi suoritetaan em. oliokeskeinen analyysi suunnitellaan luokkarakenteet ja –hierarkia suunnitellaan luokkarakenteet ja –hierarkia käytetään hyväksi olemassa olevat luokkakirjastot (palvelut) käytetään hyväksi olemassa olevat luokkakirjastot (palvelut) listojen, pinojen, jonojen, puiden käsittelyyn listojen, pinojen, jonojen, puiden käsittelyyn tulostusoperaatioihin (näytölle ja tulostimelle) tulostusoperaatioihin (näytölle ja tulostimelle) näin vältetään pyörän keksimistä uudelleen näin vältetään pyörän keksimistä uudelleen Yhteenveto II