Luokkien (olioiden) tunnistaminen



Samankaltaiset tiedostot
Periytymisen tunnistaminen

TIETORAKENTEET JA ALGORITMIT

Tietorakenteet ja algoritmit

A TIETORAKENTEET JA ALGORITMIT

Ohjelmien analysointi. ER-kaaviot

Listarakenne (ArrayList-luokka)

12. Monimuotoisuus 12.1

Tietorakenteet ja algoritmit

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

Tietorakenteet ja algoritmit

1. Olio-ohjelmointi 1.1

Pino S on abstrakti tietotyyppi, jolla on ainakin perusmetodit:

Rakenteiset tietotyypit Moniulotteiset taulukot

tietueet eri tyyppisiä tietoja saman muuttujan arvoiksi

12. Monimuotoisuus 12.1

1.1 Pino (stack) Koodiluonnos. Graafinen esitys ...

Algoritmit 1. Luento 3 Ti Timo Männikkö

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

Ohjelmointi 2. Jussi Pohjolainen. TAMK» Tieto- ja viestintäteknologia , Jussi Pohjolainen TAMPEREEN AMMATTIKORKEAKOULU

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

2. Olio-ohjelmoinista lyhyesti 2.1

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

UML Luokkakaavio 14:41

Tieto ja sen osoite (3) Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI) Osoitinmuuttujat. Tieto ja sen osoite (5)

Tietueet. Tietueiden määrittely

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

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

Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

Kääreluokat (oppikirjan luku 9.4) (Wrapper-classes)

Aliohjelmatyypit (2) Jakso 4 Aliohjelmien toteutus

Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

Kehittää ohjelmointitehtävien ratkaisemisessa tarvittavia metakognitioita!

Kaksiloppuinen jono D on abstrakti tietotyyppi, jolla on ainakin seuraavat 4 perusmetodia... PushFront(x): lisää tietoalkion x jonon eteen

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

Tietorakenteet ja algoritmit

18. Abstraktit tietotyypit 18.1

Olio-ohjelmoinnin toteuttaminen Fortran 90 -kielellä

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

3. Binääripuu, Java-toteutus

Algoritmit ja tietorakenteet / HL Copyright Hannu Laine

Rajapinta (interface)

Algoritmit 1. Luento 4 Ke Timo Männikkö

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

Oliosuunnittelu. Oliosuunnittelu

Luento 4 Aliohjelmien toteutus

Luento 3: Tietorakenteiden esittäminen

Abstraktit tietotyypit. TIEA341 Funktio ohjelmointi 1 Syksy 2005

Jakso 4 Aliohjelmien toteutus

Luento 4 (verkkoluento 4) Aliohjelmien toteutus

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

Algoritmit ja tietorakenteet / HL 1 Copyright Hannu Laine. Lista. Yleistä

1 Tehtävän kuvaus ja analysointi

Tietorakenteet ja algoritmit

C++11 Syntaksi. Jari-Pekka Voutilainen Jari-Pekka Voutilainen: C++11 Syntaksi

Olio-ohjelmointi Suunnittelumallit Adapter ja Composite. 1. Adapter

Jakso 4 Aliohjelmien toteutus

Luento 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

Tietorakenteet ja algoritmit

Dynaaminen muisti Rakenteiset tietotyypit

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

Sisällys. Metodien kuormittaminen. Luokkametodit ja -attribuutit. Rakentajat. Metodien ja muun luokan sisällön järjestäminen. 6.2

Demo 6 vastauksia. 1. tehtävä. #ifndef #define D6T1 H D6T1 H. #include <iostream> using std::ostream; using std::cout; using std::endl;


Luento 4 (verkkoluento 4) Aliohjelmien toteutus

815338A Ohjelmointikielten periaatteet

Tieto- ja tallennusrakenteet

Luento 4 Aliohjelmien toteutus

Kielioppia: toisin kuin Javassa

Olioperustaisuus (object oriented)

Tietorakenteet ja algoritmit

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

Metodit. Metodien määrittely. Metodin parametrit ja paluuarvo. Metodien suorittaminen eli kutsuminen. Metodien kuormittaminen

Ohjelmoinnin peruskurssien laaja oppimäärä

Olio-ohjelmointi Javalla

TIE Principles of Programming Languages CEYLON

Antti-Jussi Lakanen Ohjelmointi 1, C# / kevät 2011

Ohjelmistojen mallintaminen Luokkakaaviot Harri Laine 1

Luento 4 Aliohjelmien toteutus

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

4. Olio-ohjelmoinista lyhyesti 4.1

STL:n uudistukset. Seppo Koivisto TTY Ohjelmistotekniikka

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

12. Kehysarkkitehtuurit

2. Olio-ohjelmoinnin perusteita 2.1

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

Ohjelmointiharjoituksia Arduino-ympäristössä

sama tyyppi (joka vastaa kaikkien mahdollisten arvojen summa-aluetta). Esimerkiksi

Luento 4 Aliohjelmien toteutus. Tyypit Parametrit Aktivointitietue (AT) AT-pino Rekursio

Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

Vertailulauseet. Ehtolausekkeet. Vertailulauseet. Vertailulauseet. if-lauseke. if-lauseke. Javan perusteet 2004

Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

Ohjelmoinnin perusteet Y Python

Analyysi, staattinen mallintaminen, kohdealueen malli ja luokkakaavio

14. Poikkeukset 14.1

Aliohjelmatyypit (2) Jakso 4 Aliohjelmien toteutus

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

Rinnakkaisuus. parallel tietokoneissa rinnakkaisia laskentayksiköitä concurrent asioita tapahtuu yhtaikaa. TTY Ohjelmistotekniikka

Java-kielen perusteet

Transkriptio:

object identification objectifying (oliointi) Luokkien (olioiden) tunnistaminen Luonteeltaan takaisinmallinnusta ohjelmia ei muuteta Ensimmäinen vaihe konvertoitaessa proseduraalisia (tai muita ei-olio-ohjelmia) olio-ohjelmiksi konversio voi olla täydellistä tai epätäydellistä Tunnistaminen voi olla automaattista ei riipu sovellusalueesta sovellusalueen tuntemukseen perustuvaa ei onnistu täysin automaattisesti Muita tunnistuksen kohteita: suunnittelumallit (design pattern) aspektit tunnistaminen (takaisinmallinnus) konversio TTY Ohjelmistotekniikka 1 Olioparadigman ominaisuuksien tunnistaminen Luokkien tunnistaminen tietueet ja unionit (vaihtelevat e at tietueet) moduulit (abstraktit tietotyypit) Periytymisen tunnistaminen tietueen sisällä määritelty tietue tai unioni tyypin muunnokset toisiaan muistuttavat tietorakenteet Operaatioiden liittäminen luokkiin viittaukset globaaleihin muuttujiin muodolliset parametrit ja paluutyypit operaatioiden ominaisuuksien tarkastelu (käsiteanalyysi) Monimuotoisuuden (polymorphism) tunnistaminen monivalintalauseet (case, switch) funktio-osoittimet ja aliohjelman välittäminen parametrina TTY Ohjelmistotekniikka 2 1

Luokkien tunnistaminen tietueista typedef struct { float re; float im; } complex; class complex { private: float re; float im; }; TTY Ohjelmistotekniikka 3 Luokkien tunnistaminen moduuleista DEFINITION MODULE StackManager; TYPE Stack; PROCEDURE Push ( S: Stack; X: CARDINAL ); PROCEDURE Pop ( S: Stack ): CARDINAL; PROCEDURE IsEmpty ( S: Stack ): BOOLEAN; PROCEDURE Init ( VAR S: Stack ); END StackManager; DEFINITION MODULE DataRepository; TYPE Stack; TYPE Queue; PROCEDURE Push ( S: Stack; X: CARDINAL ); PROCEDURE Pop ( S: Stack ): CARDINAL; PROCEDURE Enque ( Q: Queue; X: CARDINAL ); PROCEDURE Deque ( Q: Queue ); PROCEDURE Init ( VAR S: Stack; VAR Q: Queue ); Ohjelmien ylläpito ja END evoluutio DataRepository; TTY Ohjelmistotekniikka 4 2

Periytymisen tunnistaminen typedef struct { union { int student_number; t int teacher_office; }; char name [ 30 ]; } person; class person { char name [ 30 ]; }; class student: public person { int student_number; }; class teacher: public person { int teacher_office; }; type personkind = ( student, t teacher, ); persontype = record name: array [ 1..30 ] of Char; case persontag: personkind of student: ( studentnumber: Integer ); teacher: ( teacheroffice: Integer ); end; Huom! Lueteltu tyyppi TTY Ohjelmistotekniikka 5 Operaatioiden liittäminen luokkiin Globaaleihin muuttujiin perustuva tunnistaminen Tyyppeihin perustuva tunnistaminen parametrien ja funktion paluuarvojen tyypit Käsiteanalyysi ja sen soveltaminen tunnistamisessa TTY Ohjelmistotekniikka 6 3

Globaalit muuttujat #define SIZE 100 int stack [ SIZE ]; int top; int queue [ SIZE ]; int first, last; struct list_type { int elem; struct list_type *next; } list; void inits ( ) { /* top */ } int isemptys ( ) { /* top */ } int isfulls ( ) { /* top */ } void push ( int i ) { /* stack, top */ } int pop ( ) {*/stack stack, top */ } void initq ( ) { /* first, last */ } int isemptyq ( ) { /* first, last */ } int isfullq ( ) { /* first, last */ } void enque ( int i ) { /* queue, last */ } int deque ( ) { /* queue, first */ } void initl ( ) {/* list */ } void add ( int i ) { /* list */ } void remove ( int i ) { /* list */ } TTY Ohjelmistotekniikka 7 stack push pop top inits isemptys isfulls push pop p Globaalit muuttujat (lopputulos) list initl add remove last initq isemptyq isfullq enque deque queue enque deque first initq isemptyq isfullq enque deque TTY Ohjelmistotekniikka 8 4

Globaalit muuttujat (kaksijakoinen verkko) inits isemptys isfulls push pop initq inemptyq isfullq enque deque initl add remove top stack first last queue list TTY Ohjelmistotekniikka 9 typedef struct stack_t { item_type item; struct stack_t t *next; } stack_type; Parametrit ja paluutyypit void push ( stack_type **p, item_type s ) { stack_type *q; /* allocate space for q */ q->item = s; q->next = *p; *p = q; } TTY Ohjelmistotekniikka 10 5

Käsiteanalyysi Konteksti C = ( O, A, R ) O: olioiden äärellinen joukko A: attribuuttien äärellinen joukko R: binaarirelaatio O:n ja A:n välillä Sovitukset ( X ) = { a A o X: ( o, a ) R } etsii olioille attribuutit esim. ( { kissat, apinat } ) = { karvapeitteinen } ( Y ) = { o O a Y: ( o, a ) R } etsii attribuuteille oliot esim. ( { meressä elävä } ) = { delfiinit, valaat } TTY Ohjelmistotekniikka 11 Esimerkki kontekstista neli- jalkainen karva- peitteinen i älykäs meressä elävä ä kädel- linen kissat koirat delfiinit apinat ihmiset valaat TTY Ohjelmistotekniikka 12 6

Lisää käsiteanalyysista Käsite koostuu oliojoukosta ja attribuuttijoukosta mahdollisimman i suuri kokoelma k sellaisia i olioita, it joilla on yhteiset attribuutit esim. ( { kissat, koirat }, { nelijalkainen, karvapeitteinen } ) on käsite esim. ( { kissat, apinat }, { karvapeitteinen } ) ei ole käsite Käsiteristikko käsitteiden osittainen järjestys esim. ( { delfiinit, it valaat }, { älykäs, meressä elävä ä } ) ( { apinat, delfiinit, ihmiset, valaat }, { älykäs } ) Erikoistapaukset huippu-käsite: kaikki oliot pohja-käsite: kaikki attribuutit TTY Ohjelmistotekniikka 13 Jakamattomien käsitteiden laskenta ( ( { kissat } ) ) = ( { nelijalkainen, karvapeitteinen } ) = { kissat, koirat } ( ( { koirat } ) ) = ( { nelijalkainen, karvapeitteinen } ) = { kissat, koirat } ( ( { delfiinit } ) ) = ( { älykäs, meressä elävä } ) = { delfiinit, valaat } ( ( { apinat } ) ) = ( { karvapeitteinen, älykäs, kädellinen } ) = { apinat } ( ( { ihmiset } ) ) = ( { älykäs, kädellinen } ) = { apinat, ihmiset } ( ( { valaat } ) ) = ( { älykäs, meressä elävä } ) = { delfiinit, valaat } TTY Ohjelmistotekniikka 14 7

Jakamattomat käsitteet: Löydetyt käsitteet c 0 = ( { kissat, koirat }, { nelijalkainen, karvapeitteinen } ) c 1 = ( { apinat }, { karvapeitteinen, älykäs, kädellinen } ) c 2 = ( { delfiinit, valaat }, { älykäs, meressä elävä } ) c 3 = ( { apinat, ihmiset }, { älykäs, kädellinen } ) Johdetut käsitteet: c 4 = c 0 c 1 = ( { kissat, koirat, apinat }, { karvapeitteinen } ) c 5 = c 1 c 2 = ( { apinat, delfiinit, valaat, ihmiset }, { älykäs } ) TTY Ohjelmistotekniikka 15 c 0 = ( { kissat, koirat }, { nelijalkainen, karvapeitteinen } ) c 1 = ( { apinat }, { karvapeitteinen, älykäs, kädellinen } ) c 2 = ( { delfiinit, valaat }, { älykäs, meressä elävä } ) c 3 = ( { apinat, ihmiset }, { älykäs, kädellinen } ) työlista = [ (c 0, c 1 ), (c 0, c 2 ), (c 0, c 3 ), (c 1, c 2 ), (c 2, c 3 ) ] c 4 = c 0 c 1 = ( { kissat, koirat, apinat }, { karvapeitteinen } ) työlista = [(c 0,c 2 ), (c 0,c 3 ), (c 1,c 2 ), (c 2,c 3 ), (c 2,c 4 ), (c 3,c 4 )] c 0 c 2 = huippu työlista = [ (c 0, c 3 ), (c 1, c 2 ), (c 2, c 3 ), (c 2, c 4 ), (c 3, c 4 ) ] c 0 c 3 = huippu työlista = [ (c 1, c 2 ), (c 2, c 3 ), (c 2, c 4 ), (c 3, c 4 ) ] c 5 = c 1 c 2 = ( { apinat, delfiinit, valaat, ihmiset }, { älykäs } ) työlista = [ (c 2, c 3 ), (c 2, c 4 ), (c 3, c 4 ), (c 0, c 5 ), (c 4, c 5 ) ] c 2 c 3 = c 5 tölit työlista = [( (c 2, c 4 ), (c 3, c 4 ), (c 0, c 5 ), (c 4, c 5 )] Johdettujen c 2 c 4 = huippu työlista = [ (c 3, c 4 ), (c 0, c 5 ), (c 4, c 5 ) ] c 3 c 4 = huippu työlista = [ (c 0, c 5 ), (c 4, c 5 ) ] c 0 c 5 = huippu ja c 4 c 5 = huippu työlista = Ø käsitteiden etsintä TTY Ohjelmistotekniikka 16 8

huippu ( { kaikki oliot }, Ø ) Käsiteristikko c5 ( { delfiinit, apinat, ihmiset, valaat }, { älykäs } ) c4 ( { kissat, koirat, apinat }, huippu { karvapeitteinen } ) c3 ( { apinat, ihmiset }, c 4 c 5 { älykäs, kädellinen } ) c2 ( { delfiinit, valaat }, c 3 { älykäs, meressä elävä } ) c 0 c1 ( { apinat }, c 1 c 2 { karvapeitteinen, i älykäs, kädellinen } ) c0 ( { kissat, koirat }, { nelijalkainen, karvapeitteinen } ) pohja pohja ( Ø, { kaikki attribuutit } ) TTY Ohjelmistotekniikka 17 Käsiteanalyysin soveltaminen ohjelmiin 1. Muodosta kontekstik oliojoukko: ohjelman aliohjelmat attribuuttijoukko: aliohjelmien ominaisuuksia ominaisuudet kuvaavat esim. aliohjelmien ja tietorakenteiden välisiä suhteita 2. Rakenna käsiteristikko 3. Etsi käsitteille ryhmittelyt TTY Ohjelmistotekniikka 18 9

Esimerkkiohjelma struct stack{ }; struct queue { }; struct stack inits ( ) { /* stack */ } struct queue initq ( ) { /* queue */ } int isemptys ( struct stack *s ) { /* stack */ } int isemptyq ( struct queue *q ) { /* queue */ } void push ( struct stack *s, int i ) { /* stack */ } void enque ( struct queue *q, int i ) { /* queue */ } int pop ( struct stack *s ) { */ stack */ } int deque ( struct queue *q ) { /* queue */ } TTY Ohjelmistotekniikka 19 Esimerkkiohjelman konteksti paluutyyppinä paluutyyppinä parametrina parametrina viittaa stack:n viittaa queue:n stack queue stack queue kenttiin kenttiin inits initq isemptys isemptyq push enque pop deque TTY Ohjelmistotekniikka 20 10

huippu ( { kaikki oliot }, Ø ) Käsiteristikko huippu c5 ( { initq, isemptyq, enque, deque }, { käyttää queue:n kenttiä } ) c4 ( { inits, isemptys, push, pop }, { käyttää stack:n kenttiä } ) c3 ( { isemptyq, enque, deque }, { parametrina queue, käyttää queue:n kenttiä } ) c2 ( { isemptys, push, pop }, { parametrina stack, käyttää stack:n kenttiä } ) c1 ( { initq }, Ryhmittelyt { paluutyyppinä queue } ) R 1 {h huippu } c0 ( { inits }, R 2 { c 4, c 5 } { paluutyyppinä stack } ) R 3 { c 0, c 2, c 5 } pohja ( Ø, { kaikki attribuutit } ) R 4 { c 4, c 1, c 3 } c 4 pohja c 5 c 0 c 2 c 1 c 3 R 5 { c 0, c 2, c 1, c 3 } TTY Ohjelmistotekniikka 21 Sovellusaluetietämyksen hyödyntäminen y 1. Suunnitteluratkaisun jäljittäminen 2. Sovelluksen mallintaminen 3. Olioiden sovittaminen 4. Lähdekoodin mukauttaminen TTY Ohjelmistotekniikka 22 11

Suunnitteluratkaisun jäljittäminen Aloitetaan matalan tason suunnitteludokumenteista kulkukaaviot, tietovuokaaviot Tuotetaan ER-kaavio sisältää periytymissuhteita, osasuhteita Lopulta saadaan oliokeskeinen sovellusmalli (peruuttava) ER-kaavion oliot esim. ohjelmakoodissa esiintyvät tietuemäärittelyt TTY Ohjelmistotekniikka 23 Sovelluksen mallintaminen Rakennetaan oliokeskeinen sovellusmalli (etenevä) lähdetään sovelluksen vaatimuksista Sovellus on aikaisemmin suunniteltu muilla kuin oliokeskeisillä menetelmillä Sovellus mallinnetaan nyt uudestaan oliomenetelmiä käyttäen TTY Ohjelmistotekniikka 24 12

Olioiden sovittaminen Peruuttavan ja etenevän mallin oliot sovitetaan yhteen etenevä malli antaa kehykset peruuttava mallista saadaan yksityiskohdat Proseduraalinen jäännös sisältää osat, joille ei löydy vastaavuuksia TTY Ohjelmistotekniikka 25 Lähdekoodin mukauttaminen Yhteensovitetut oliot kapseloidaan löydetyt attribuutit ja operaatiot sekä globaalit tietoalkiot Proseduraalinen jäännös mukautetaan olioparadigman mukaiseksi Proseduraaliseen jäännökseen voivat kuulua: proseduraalisen ohjelman pääohjelma lajittelu- ja etsintätoimintoja, jotka eivät sovi mihinkään luokkaan TTY Ohjelmistotekniikka 26 13

Suunnittelumallien tunnistaminen Esimerkkejä tunnistettavista malleista: MVC-malli (arkkitehtuurimalli) GoF-mallit (mikroarkkitehtuuri) muut mallit (esim. oliomallit) Tunnistamismenetelmiä: osittava (top-down) olio-ohjelmatohjelmat kokoava (bottom-up) UML-kaaviot metriikat peittävyyden mittaaminen käsiteanalyysi Mahdollisia lähteitä: proseduraaliset ohjelmat Ohjelmien laadun parantaminen TTY Ohjelmistotekniikka 27 Mallilähtöinen etsintä (top-down) Oliomallin (esim. Roles Played) ilmentymien tunnistaminen koodista mallin ilmentymät määritellään sovellusalueen termeillä esim. asiakas, työntekijä malli ilmaistaan i ohjelmointikielen l rakenteilla mallin ilmentymien etsintä TTY Ohjelmistotekniikka 28 14

Koodilähtöinen etsintä (bottom-up) Abstraktien tietotyyppien sovittaminen suunnittelumalleihin ll ihi sopivien tietotyyppien etsintä esim. henkilö, työntekijä, asiakas tarkastellaan tietotyyppien ryppäitä ja niiden suhteita esim. henkilö voi olla osa työntekijää löydetyt suhteet muokataan oliokeskeisiksi esim. periytymissuhde suhteet sovitetaan suunnittelumalliin esim. periytymissuhde Roles Played malliin, jolloin tuloksena saadaan luokka PlayerRole ja sen aliluokat TTY Ohjelmistotekniikka 29 Player PlayerRole TimeStart: date TimeEnd: date Esimerkki Mallilähtöinen etsintä PlayerRole1 type Employee = record data: Person; salary: Salary_type; end PlayerRole2 Employee Person type Person = record name: Name_type;... end Customer Koodilähtöinen etsintä type Customer = record data: Person; number: Number_type; end TTY Ohjelmistotekniikka 30 15

Composite-suunnittelumalli Client Component Operation ( ) Add ( Component ) Remove ( Component ) GetChild ( int ) Leaf Operation ( ) Composite Operation ( ) Add ( Component ) Remove ( Component ) GetChild ( int ) children forall g in children g.operation ( ); TTY Ohjelmistotekniikka 31 Esimerkki Composite-mallin tunnistamisesta AbstractDocument print ( ) AbstractDocument Element print ( ) Document Element nbofelements Title getelements ( ) Document Paragraph ParaIndent Title Paragraph nbofelements getelements ( ) Main ParaIndent TTY Ohjelmistotekniikka Main 32 16

Aspektit ja niiden tunnistaminen Lähtökohta: luokkien välillä esiintyy myös horisontaalista samankaltaisuutta Terminologiaa: concern mielenkiinnon kohde, jaotteluperuste (huolenaihe) eri mielenkiinnon kohteet johtavat erilaisiin jaotteluihin cross-cutting concerns läpileikkaavat jaotteluperusteet separation of concerns mielenkiinnon kohteiden tarkastelu erikseen aspect modulaarinen yksikkö, joka mahdollistaa mielenkiinnon kohteiden toteuttamisen erikseen TTY Ohjelmistotekniikka 33 Erilliset luokkahierarkiat Fruit peelable color ripeness pick ( ) refrigerate ( ) Gadget color turnon ( ) turnoff ( ) Grapes globespercluster sour seedless Grapes Orange Wireless Wired juiceable frequency connectortype tanginess range makewine ( ) getsugar ( ) squeeze ( ) drypeel ( ) acquiresignal ( ) receive ( ) isconnected ( ) reset ( ) TTY Ohjelmistotekniikka 34 17

Läpileikkaavat jaotteluperusteet Grapes makewine ( ) getsugar ( ) Orange squeeze ( ) drypeel ( ) Wireless acquiresignal ( ) receive ( ) Wired isconnected ( ) reset ( ) drawlabel ( ) weigh ( ) drawlabel ( ) weigh ( ) drawlabel ( ) weigh ( ) drawlabel ( ) weigh ( ) Pakkaaminen buy ( ) sell ( ) buy ( ) sell ( ) buy ( ) sell ( ) buy ( ) sell ( ) Osto ja myynti store ( ) retrieve ( ) store ( ) retrieve ( ) store ( ) retrieve ( ) store ( ) retrieve ( ) Varastointi TTY Ohjelmistotekniikka 35 Esimerkkejä aspekteista Aspekteja, joita ohjelmointikieli voi tukea poikkeusten hallinta try, throw, catch rinnakkaisuus synchoronized, wait, notify invariantit invariant, ensure, require Muita aspekteja lokitietojen ylläpito peruminen (undo) tarkistukset (esim. parametrien) ja virhetilanteiden käsittely vrt. viipalointi TTY Ohjelmistotekniikka 36 18

Aspektien tunnistaminen Staattisia menetelmiä fan-in-analyysi tunnusten analysointi Dynaamisia menetelmiä kutsuryhmien analysointi esim. resurssien varaaminen ja vapauttaminen esim. monivaiheiset toiminnot käsiteanalyysin soveltaminen ajetaan instrumentoitua koodia erilaisilla käyttötapauksilla ja kerätään ajojäljet ajojäljet: kontekstin olioita suoritetut operaatiot: kontekstin ominaisuuksia (attribuutteja) löydetään operaatiot, jotka suoritetaan samassa käyttötapauksessa TTY Ohjelmistotekniikka 37 19