Muutamia peruskäsitteitä



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

Kertaus: yleistys-erikoistus ja perintä

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

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

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

Rajapinnat ja olioiden välittäminen

Mitä on periytyminen?

Rajapinta (interface)

UML Luokkakaavio 14:41

Olio-ohjelmointi: Luokkien toteuttaminen. Jukka Juslin

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

Ohjelmistojen mallintaminen luokkamallin lisäpiirteitä

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

815338A Ohjelmointikielten periaatteet

Tenttikysymykset. + UML-kaavioiden mallintamistehtävät

Kooste. Esim. Ympyrän keskipiste voidaan ajatella ympyrän osaksi.

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

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

Olio-ohjelmointi Johdanto olio-ohjelmointiin

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

Tenttikysymykset. + UML- kaavioiden mallintamistehtävät

Ohjelmistojen mallintaminen. Luento 7,

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

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

Mikä yhteyssuhde on?

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

812341A Olio-ohjelmointi, I Johdanto

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op

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

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

Johdanto. Olio (Object) Luokka (Class) Olion kuvaaminen

UML -mallinnus LUOKKAKAAVIO EERO NOUSIAINEN

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

9. Periytyminen Javassa 9.1

11/20: Konepelti auki

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

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

Digi-tv vastaanottimella toteutetut interaktiiviset sovellukset

12. Kehysarkkitehtuurit

9. Periytyminen Javassa 9.1

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

Virtuaalifunktiot ja polymorfismi

Tällä harjoituskerralla on tarkoituksena harjoitella käyttötapaus-, luokka- ja tapahtumasekvenssikaavioiden luontia.

TIE Ohjelmistojen suunnittelu

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

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

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

19/20: Ikkuna olio-ohjelmoinnin maailmaan

Peilaus pisteen ja suoran suhteen Pythonin Turtle moduulilla

Yhteydelle voi antaa nimen kumpaankin suuntaan Sille ei tarvise antaa lainkaan nimeä Yhteysnimen asemasta tai lisäksi voidaan käyttää roolinimiä

1. Olio-ohjelmointi 1.1

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

Sisällys. 11. Rajapinnat. Johdanto. Johdanto

Ohjelmoinnin peruskurssien laaja oppimäärä

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

Operaattoreiden ylikuormitus. Operaattoreiden kuormitus. Operaattoreiden kuormitus. Operaattoreista. Kuormituksesta

1 Tehtävän kuvaus ja analysointi

Java kahdessa tunnissa. Jyry Suvilehto

Ohjelmistojen mallintaminen luokkamallin lisäpiirteitä

Periytyminen (inheritance)

C# olio-ohjelmointi perusopas

Tämän lisäksi listataan ranskalaisin viivoin järjestelmän tarjoama toiminnallisuus:

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

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

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

Ohjelmistotekniikan menetelmät, luokkamallin laatiminen

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

Ohjelmoinnin jatkokurssi, kurssikoe

Abstraktit tietotyypit ja olio-ohjelmointi

Luokka (class) esitetään suorakulmion avulla, jonka sisälle kirjoitetaan luokan nimi (vahvennettuna).

Periytyminen. Luokat ja olio-ohjelmointi

Olioiden yhteistyön mallintaminen

T Olio-ohjelmointi Osa 3: Luokka, muodostin ja hajotin, this-osoitin Jukka Jauhiainen OAMK Tekniikan yksikkö 2010

Osa I. Pohjan luominen. Copyright IT Press Tämän e-kirjan kopiointi, tulostaminen ja jakeleminen eteenpäin luvatta on kielletty.

Ohjelmistojen mallintaminen. Luento 4,

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

P e d a c o d e ohjelmointikoulutus verkossa

Ohjelmointikielet ja -paradigmat 5op. Markus Norrena

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

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

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

A TIETORAKENTEET JA ALGORITMIT

Ohjelmistojen mallintaminen. Luento 8,

815338A Ohjelmointikielten periaatteet

Olio-ohjelmointi Javalla

TIE Ohjelmistojen suunnittelu. Kopiointia ja sijoittelua

TIE Ohjelmistojen suunnittelu

Ohjelmoinnin peruskurssien laaja oppimäärä, kevät

Graafisen käyttöliittymän ohjelmointi Syksy 2013

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

UML -mallinnus TILAKAAVIO

Integrointi. Ohjelmistotekniikka kevät 2003

UML ja luokkien väliset suhteet

Ohjelmistotekniikan menetelmät, suunnittelumalleja

[Lomake.][Ohjain.]metodi [argumentit] Seuraava aliohjelma, jossa käytetään kuvakehyksen Move-metodia, luo vaikutelman etääntyvästä kuvakehyksestä:

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

TIE Ohjelmistojen suunnittelu

Ohjelmistojen mallintaminen Luokkakaaviot Harri Laine 1

11. Kehysarkkitehtuurit

Osa III. Olioiden luominen vapaalle muistialueelle

Transkriptio:

Muutamia peruskäsitteitä Huom. 1: nämä peruskäsitteet eivät muodosta hyvin määriteltyä keskenään yhteensopivien käsitteiden joukkoa, vaan käsitteet ovat osittain päällekkäisiä ja eri yhteyksissä niillä saattaa olla hieman toisistaan poikkeavia tulkintoja. Huom. 2: tätä materiaalia ei löydy kirjasta mistään erityisestä kohdasta. Huom. 3: suurin osa käsitteistä on ainakin jossain määrin tuttuja otupk:lta. Attribuutit Metodit ja käyttäytyminen Vastuu Luokittelu, olioiden luonti ja tuhoaminen Assosiaatiot Koostaminen (agregointi) ja muodostuminen Interaktio, vuorovaikutus Periytyminen Kapselointi 1 Attribuutit, jäsenmuuttujat Attribuutit ovat asioita, jotka olio tietää Ympyrällä voi olla attribuutit x-koordinaatti koordinaatti, y- koordinaatti ja säde. Oliolla kirja voi olla attribuutit nimi, tekijät, kustantaja... Toteutetaan yleensä jäsenmuuttujilla (C++, Java) Jäsenmuuttujat t ovat siis tapa implementoida id attribuutteja (ja yhteyksiä), eivät sama asia Y 2

Metodit, jäsenfunktiot, rajapintafunktiot... ja käyttäytyminen Käyttäytyminen (behaviour) ~mitä olio osaa tehdä ympyrä osaa piirtää itsensä ruudulle, poistaa itsensä ruudulta kirja osaa tulla lainatuksi Olio saadaan käyttäytymään halutulla tavalla kutsumalla sen julkisen rajapinnan funktioita Funktioita it kutsutaan t myös metodeiksi, i jäsenfunktioiksi, palveluiksi, toiminnoiksi Rajapintafunktion kutsua sanotaan toisinaan sanoman lähettämiseksi Y get, gety show, hide move 3 Vastuu Vastuut (responsibility) kuvaavat, mistä asioista olio on vastuullinen huolehtimaan (olioiden työnjako ) Ympyrän vastuulla on tietää sijaintinsa, itsensä näyttäminen ja hävittäminen kuvaruudulla, itsensä siirtäminen toiseen paikkaan Kirjan on tiedettävä kirjaan liittyvät nimiöintitiedot ja sen on osattava hoitaa lainaamiseen ja palauttamiseen liittyvät tehtävät. Oliosuunnittelussa on alkuvaiheessa kyse olioiden löytämisestä ja järjestelmän toiminnallisuuden jakamisesta olioiden vastuiksi. Tätä seuraa tarkempi rajapintojen määrittely ja interaktioiden suunnittelu. 4

Luokittelu sekä olioiden luonti ja poistaminen Samoin käyttäytyvät oliot luokitellaan samaan luokkaan (samat attribuutit ja metodit). uusia ympyröitä voidaan instantioida ympyräluokasta, ympyräolio on ympyräluokan instanssi Tyypillisessä työasema- tai palvelinsovelluksessa uusia olioita luodaan kaiken aikaa tarpeen mukaan: (esimerkiksi p = new circle()) joissain kielissä tuhoaminen on automaattista (javan roskienkeruu) joissain kielissä tuhoaminen on tehtävä eksplisiittisesti (esimerkiksi c++: delete p). Olioiden luonti ja tuhoaminen voi aiheuttaa merkittävää yleisrasitetta (hidasta), epädeterministisiä vastausaikoja reaaliaikaisiin tapahtumiin ja vaikeasti havaittavia ja jäljitettäviä virheitä. Perinteisiä toteutusvälineitä (esim. C) käytettäessä oliot ovat tavallisesti koodimoduuleja, eli siis staattisia ja aina olemassa. Kovissa reaaliaikajärjestelmissä oliot usein luodaan käynnistysvaiheessa ja ne säilyvät ikuisesti. 5 Assosiaatiot Assosiaatiot ovat olioiden välisiä yhteyksiä, joiden avulla oliosta pääsee navigoimaan toiseen olioon. Kirjaluokan instanssi C++ -kirja voi olla parhaillaan lainattuna lainaajaluokan instanssille "Ahto Simakuutio Assosiaatiot toteutetaan tavallisesti olioiden jäsenmuuttujina, eli samalla tavalla kuin attribuutitkin. book is borrowed by borrower 6

Koostaminen ja muodostaminen Koostaminen, muodostaminen (aggregation and composition) ovat assosiaation erikoistapauksia Koostamisessa olion komponenttina on toisia olioita neliö-olio voi koostua neljästä viiva-oliosta moniosainen kirja voi koostua monesta kirjasta Network Computer Muodoste (tai vahva kooste) on koosteen vahva muoto, jossa komponenttiolio ei (yleensä) voi olla olemassa ilman isäntäoliota Cat Tail 7 Vuorovaikutus, kommunikointi (interaction) Järjestelmän toiminnot toteutetaan järjestelmän olioiden välisinä interaktioina neliön piirtämiseen kuvaruudulle voivat osallistua oliot neliö, viiva ja grafiikkakirjasto: Asiakas pyytää neliötä piirtämään itsensä neliö pyytää kaikkia neljää viivaansa piirtämään itsensä jokainen viiva pyytää grafiikkakirjastoa piirtämään itsensä Jotta voisi pyytää olion palvelua, on tiedettävä, missä se on olion voi löytää assosiaation avulla navigoimalla olio (tai oikeammin viite siihen) voidaan välittää parametrina metodilla voi olla paikallisia väliaikaisia olioita olio voi olla globaali (esimerkiksi tietokantarajapinta) jos olion toteutus on koodimoduuli (esim. C-kielinen) kielinen), ongelmaa ei ole, koska olion sijainti on tiedossa jo ennen ohjelman suoritusta 8

Periytyminen Periytyminen (Inheritance) on luokkien välinen suhde luokka on toisen luokan erikoistapaus Luokat, Point, Rectangle, Line... voidaan periyttää yhteisestä kantaluokasta Shape Luokan Shape olioilla on kaikille kuvioille yhteiset attribuutit ja käyttäytyminen, esimerkiksi attribuutit ja Y sekä metodit get, gety ja move. Metodeille hide ja show voidaan antaa jonkinlainen i oletustoteutus (jos halutaan). Jälkeläisluokat perivät attribuutit ja käyttäytymisen (uudelleenkäyttö) Jälkeläisluokkiin voi lisätä attribuutteja (esimerkiksi for luokkaan ) perityn käyttäytymisen voi määritellä uudelleen (esimerkiksi show ja hide) Periytymisen käyttötavat Shape Abstraktioiden määrittely: luodaan yleisiä käsitteitä, jotka kattavat Y joukon luokkia (esimerkiksi circle, point... -> shape) rajapintojen määrittely (määritellään esimerkiksi yhteinen rajapinta kaikille Shape-oilioille) uudelleenkäyttö (luokan Shape jälkeläisluokat uudelleenkäyttävät sen koodin) get() gety() move()... resize() Point 9 Kapselointi (encapsulation) Suunnittelunäkökulmasta tärkein käsite on kapselointi eli kotelointi (eikä siis esimerkiksi periytyminen). Kapselointitavat tiedon esitystavan kapselointi (esimerkiksi ja Y grafiikkaesimerkissä) metodien toteutuksen kapselointi koostaminen eli agregointi: asiakasolioiden ei tarvitse tietää olion sisäistä rakennetta (esimerkiksi neliön asiakas ei tiedä mitään viiva-olioista) periytyminen: kantaluokan olioita käsittelevän koodin ei tarvitse tuntea lapsiluokan olioita esimerkiksi shape* T[50]; for (i=0; i<50, i++) T[i]->; Kapseloinnin i ideana on yksinkertaistaa abstraktioita niin, ettei ole pakko tietää tarpeettomia yksityiskohtia suojata vaatimusmuutoksilta: kapseloituihin asioihin kohdistuvat muutokset eivät säteile ympäristöön Kapselointi voidaan toteuttaa ohjelmointisopimuksilla (esimerkiksi C-kieltä käytettäessä) ohjelmointikielten rakenteilla (package, class), jakamalla ohjelma keskenään kommunikoiviin prosesseihin ja/tai komponenttiteknologioilla (COM+,.NET, J2EE). 10