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

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

Pakkauksen kokoaminen

Rajapinta (interface)

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

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

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

Olio-ohjelmointi Javalla

Luokat ja oliot. Ville Sundberg

Ohjelmistojen mallintaminen, sekvenssikaaviot

Mikä yhteyssuhde on?

1. Omat operaatiot 1.1

Metodien tekeminen Javalla

Lohkot. if (ehto1) { if (ehto2) { lause 1;... lause n; } } else { lause 1;... lause m; } 16.3

Java kahdessa tunnissa. Jyry Suvilehto

UML -mallinnus LUOKKAKAAVIO EERO NOUSIAINEN

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

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

9. Periytyminen Javassa 9.1

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

Lohkot. if (ehto1) { if (ehto2) { lause 1;... lause n; } } else { lause 1;... lause m; } 15.3

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

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

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

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

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

Kompositio. Mikä komposition on? Kompositio vs. yhteyssuhde Kompositio Javalla Konstruktorit set-ja get-metodit tostring-metodi Pääohjelma

4. Luokan testaus ja käyttö olion kautta 4.1

9. Periytyminen Javassa 9.1

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

Pakkauksen kokoaminen

812347A Olio-ohjelmointi, X Reflektiivisyys

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

815338A Ohjelmointikielten periaatteet

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

Sisällys. 15. Lohkot. Lohkot. Lohkot

Ohjelmoinnin jatkokurssi, kurssikoe

Periytyminen (inheritance)

Ohjelmointi 2 / 2010 Välikoe / 26.3

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

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

Olio-ohjelmointi: Luokkien toteuttaminen. Jukka Juslin

Muutamia peruskäsitteitä

A) on käytännöllinen ohjelmointitekniikka. = laajennetaan aikaisemmin tehtyjä luokkia (uudelleenkäytettävyys)

1. Olio-ohjelmointi 1.1

15. Ohjelmoinnin tekniikkaa 15.1

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

17. Javan omat luokat 17.1

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

Ohjelmoinnin perusteet, syksy 2006

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op. Tietorakenneluokkia 2: HashMap, TreeMap

19. Olio-ohjelmointia Javalla 19.1

Javan perusteita. Janne Käki

Tehtävä 1. Tehtävä 2. Arvosteluperusteet Koherentti selitys Koherentti esimerkki

Java-API, rajapinnat, poikkeukset, UML,...

16. Javan omat luokat 16.1

1 Tehtävän kuvaus ja analysointi

private TreeMap<String, Opiskelija> nimella; private TreeMap<String, Opiskelija> numerolla;

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

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

7. Näytölle tulostaminen 7.1

14. Poikkeukset 14.1

JavaRMI 1 JAVA RMI. Rinnakkaisohjelmoinnin projekti 1 osa C Tekijät: Taru Itäpelto-Hu Jaakko Nissi Mikko Ikävalko

Rinnakkaisohjelmointi, Syksy 2006

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

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

Ohjelmistojen mallintaminen. Luento 3, 9.11.

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

20. Javan omat luokat 20.1

Sisällys. 20. Javan omat luokat. Java API. Pakkaukset. java\lang

Olio-ohjelmointi Suunnittelumallit Adapter ja Composite. 1. Adapter

Poikkeustenkäsittely

Yleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma.

YHTEYSSUHDE (assosiation)

Java ja grafiikka. Ville Sundberg

Oliot viestivät metodeja kutsuen

JAVA-OHJELMOINTI 3 op A274615

5. HelloWorld-ohjelma 5.1

Olion elinikä. Olion luominen. Olion tuhoutuminen. Olion tuhoutuminen. Kissa rontti = null; rontti = new Kissa();

KOHDELUOKAN MÄÄRITTELY

Sisällys. 19. Olio-ohjelmointia Javalla. Yleistä. Olioiden esittely ja alustus

13. Loogiset operaatiot 13.1

Osio 4: Tietovirrat. Properties- eli ominaisuustiedostot Logger: lokitietojen käsittely

Ohjelmointi 2 / 2008 Välikoe / Pöytätestaa seuraava ohjelma.

Ohjelmistotekniikan menetelmät, luokkamallin laatiminen

Sisältö. 22. Taulukot. Yleistä. Yleistä

58131 Tietorakenteet ja algoritmit (syksy 2015)

5. HelloWorld-ohjelma 5.1

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

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

Listarakenne (ArrayList-luokka)

Tietorakenteet (syksy 2013)

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op

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

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

7. Oliot ja viitteet 7.1

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op. Poikkeukset ja tietovirrat: Virhetilanteiden ja syötevirtojen käsittely

Sisällys. 11. Rajapinnat. Johdanto. Johdanto

Ohjelmointi 2, välikoe

Sisältö. 2. Taulukot. Yleistä. Yleistä

Transkriptio:

2016 IX Olioiden välisistä yhteyksistä

Sisältö 1. Johdanto 2. Kytkentä 3. Koheesio 4. Näkyvyydestä 2

Johdanto n Ohjelmassa syntyy kytkentöjä olioiden välille Toivottuja ja epätoivottuja n Näkyvyys vaikuttaa olioiden välisiin suhteisiin Näkyvyyssäännöt vaikuttavat saatavuuteen n Riippuvuus olioiden välillä: olio ei voi järkevästi olla olemassa ilman toista oliota Aito kooste Aliluokka riippuu yleensä emoluokastaan n Riippuvuutta arvioidaan käsitteillä kytkentä ja koheesio Stevens 1974 3

Kytkentä n Riippuvuus eri luokkien ja eri luokkien olioiden välillä n Tavoite: minimoidaan kytkennät n Muodot huonoimmasta parhaimpaan 1. Kytkentä olion jäsenmuuttujiin 2. Globaalin tiedon käytöstä aiheutuva kytkentä 3. Ohjelman suorituspolusta aiheutuva kytkentä 4. Komponenttien välinen kytkentä 5. Parametrien aiheuttama kytkentä 6. Luokan ja sen aliluokan kytkentä 4

Kytkentä olion jäsenmuuttujiin n Jonkin luokan instanssi muokkaa suoraan toisen luokan jäsenmuuttujaa n Yleensä erittäin epätoivottua n Heikentää ohjelman ymmärrettävyyttä Hankala havaita, miten ja missä jäsenmuuttujien arvot muuttuvat n Altistaa ohjelmointivirheille 5

Globaalin tiedon käytöstä aiheutuva kytkentä n Kahden eri luokan oliot voivat kommunikoida globaalin muuttujan välityksellä n Epäilyttävää: heikentää koodin ymmärrettävyyttä, virhealtis n Javassa ei globaaleja muuttujia, voidaan tehdä luokka, jossa kaikkialle näkyviä muuttujia 6

Ohjelman suorituspolusta aiheutuva kytkentä n Luokan operaatiot tehtävä tietyssä järjestyksessä, mutta toinen luokka kontrolloi suoritusta n Esimerkki: Internet-yhteyden toteuttava luokka. Metodit yhteyden avaus, yhteys palvelimeen, pyyntö, yhteyden sulkeminen Asiakkaan kutsuttava tässä järjestyksessä n Yleensä huonohkoa suunnittelua, joskus välttämätön n Luokan itsensä kontrolloitava, ettei väärä suoritusjärjestys onnistu 7

Komponenttien välinen kytkentä n Luokan jäsenmuuttuja toisen luokan olio n Hyvin toteutettuna ei haitallinen n Osaolio ei saisi tietää isäntäoliosta mitään n Erittäin yleinen kytkennän muoto 8

Komponenttien välinen kytkentä public class Main { public static void main(string [] args ){ Matkailija eka = new Matkailija(); eka.aloitamatka(); class Matkailija { Auto a = new Auto(); void aloitamatka(){ a.liiku(); class Auto{ void liiku(){ System.out.println("Hur hur..."); 9

Komponenttinen välinen kytkentä public class Main { public static void main(string [] args ){ Matkailija eka = new Matkailija(); Polkupyora p1 = new Polkupyora(); eka.asetakulkuvaline( b1 ); eka.aloitamatka(); Auto a1 = new Auto(); eka.asetakulkuvaline(a1); System.out.println("Eiku..."); eka.aloitamatka(); 10

Komponenttine välinen kytkentä public class Matkailija { Kulkuvaline kv; public void asetakulkuvaline(kulkuvaline kv) { this.kv = kv; } } void aloitamatka() { v.liiku(); } 11

Komponenttien välinen kytkentä public interface Kulkuvaline { void liiku(); public class Auto implements Kulkuvaline { public void liiku() { System.out.println("Hur hur"); class Polkupyora implements Kulkuvaline { public void liiku() { System.out.println("Pyorailemaan..."); 12

Parametrien aiheuttama kytkentä Luokan ja aliluokan kytkentä n Parametrien aiheuttama kytkentä Luokasta kutsutaan toisen luokan metodia n Ei muita suhteita kuin metodien parametreista ja paluuarvoista aiheutuva Yleinen ja ongelmaton Luokan ja aliluokan kytkentä Syntyy luokan ja sen perivän luokan välille Aliluokan oliota voidaan yleensä käsitellä myös emoluokan oliona Olennaista olio-ohjelmoinnissa 13

Kytkentöjen vähentäminen n Yleensä tavoiteltavaa n Yksi nyrkkisääntö toteuttamiseksi: n Demeterin laki, vahva muoto: Olion metodissa on sallittua kutsua vain seuraavien olioiden metodeja 1. Olion itsensä ja metodin parametriolioiden 2. Olion jäsenmuuttujien 3. Globaalien muuttujien 4. Metodin paikallisten muuttujien Auttaa ymmärtämään ohjelman koodia, koska luokat kytkeytyvät toisiin yksinkertaisesti ja hyvin määritellysti 14

Koheesio n Luokan sisäiset riippuvuussuhteet n Yleensä toivottavaa: sitoo luokan jäsenet luokan tehtävän suorittamiseen n Muodot huonoimmasta parhaimpaan 1. Satunnainen koheesio 2. Looginen koheesio 3. Temporaalinen koheesio 4. Kommunikaatioon perustuva koheesio 5. Suoritusjärjestykseen perustuva koheesio 6. Funktionaalinen koheesio 7. Datakoheesio 15

Satunnainen koheesio n Syntyy valittaessa luokan jäsenet ilman eritystä syytä Yleensä jaettaessa laaja ohjelma osiin sattumanvaraisesti n Esiintyy, kun luokan metodeilla ei ole yhteyttä toisiinsa n Yleensä merkki puutteellisesta suunnittelusta 16

Looginen koheesio Temporaalinen koheesio n Looginen koheesio Luokan metodit ovat loogisesti yhteydessä n Ei muuta yhteyttä Esimerkiksi kirjastoluokka, joka sisältää loogisesti samantapaisia hyötyfunktioita n Javan luokka Collections (sisältää tietosäiliöalgoritmeja) n Temporaalinen koheesio Luokan metodeja käytetään samaan aikaan ohjelmassa n Esim. alustustoimenpiteet Yleensä parempi jakaa toisiin luokkiin 17

Kommunikaatioon perustuva koheesio, Suoritusjärjestykseen perustuva koheesio n Kommunikaatioon perustuva koheesio Luokan metodit käsittelevät samaa laitetta tai input/ output- dataa Luokka toimii kommunikaation kontrolliluokkana n Suoritusjärjestykseen perustuva koheesio Luokan metodit on aktivoitava tietyssä järjestyksessä Syntyy usein poistettaessa ohjelman suorituspolusta aiheutuvaa kytkentää 18

Funktionaalinen koheesio, Datakoheesio n Funktionaalinen koheesio Tavoiteltavaa Syntyy, kun kaikki luokan jäsenet ovat yhteydessä yhden tehtävän suoritukseen n Datakoheesio Luokan metodit liittyvät jäsenmuuttujien datan käsittelyyn ja luokan jäsenmuuttujat muodostavat jonkinlaisen struktuurin Yleistä esimerkiksi tietorakenteita toteuttavissa luokissa 19

Näkyvyydestä Näkyvyys Javassa n Javan näkyvyysmääreet private, protected, public, oletus Oletus, kun jätetään määre merkitsemättä n Luokan jäsenten näkyvyys ei muutu perinnässä n public-jäsenet näkyvät kaikkialle Luokan julkinen rajapinta n private-jäsenet eivät näy luokan ulkopuolelle Näkyvät luokan sisäisissä luokissa 20

Näkyvyys Javassa n Pakkaukset (package) Tapa muodostaa näkyvyysalueita Oletusnäkyvyydellä varustetut jäsenet näkyvät kaikkialla pakkauksen sisällä protected-jäsenet pakkauksessa ja luokan aliluokissa n Suositus: Käytä protected-määrettä näkyvyyteen aliluokissa ja oletusta näkyvyyteen pakkauksessa 21