Esittely latautuu. Ole hyvä ja odota

Esittely latautuu. Ole hyvä ja odota

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

Samankaltaiset esitykset


Esitys aiheesta: "© Lammi-Niskala-Kossarev 1 2.8.4 ADT:n toteutus Imperatiivinen paradigma Imperatiivinen paradigma toimenpiteet aktiivisia, tiedot passiivisia toimenpiteet."— Esityksen transkriptio:

1 © Lammi-Niskala-Kossarev 1 2.8.4 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 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

3 © 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 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 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 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 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 2.8.5 Oliokeskeinen ohjelmointi

8 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 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 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 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 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 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 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 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


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

Samankaltaiset esitykset


Iklan oleh Google