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

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

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

Rajapinta (interface)

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

Sisällys. 11. Rajapinnat. Johdanto. Johdanto

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

9. Periytyminen Javassa 9.1

9. Periytyminen Javassa 9.1

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

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

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

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

15. Ohjelmoinnin tekniikkaa 15.1

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

Tietorakenteet. JAVA-OHJELMOINTI Osa 5: Tietorakenteita. Sisällys. Merkkijonot (String) Luokka String. Metodeja (public)

16. Javan omat luokat 16.1

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

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

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

Java kahdessa tunnissa. Jyry Suvilehto

Javan perusteita. Janne Käki

Ohjelmistojen mallintaminen. Luento 7,

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

15. Ohjelmoinnin tekniikkaa 15.1

Ohjelmoinnin jatkokurssi, kurssikoe

Kertaus: yleistys-erikoistus ja perintä

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

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

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

815338A Ohjelmointikielten periaatteet

P e d a c o d e ohjelmointikoulutus verkossa

Mitä on periytyminen?

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

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

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

Ohjelmistojen mallintaminen Luokkakaaviot Harri Laine 1

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

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

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

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

Pakkauksen kokoaminen

Metodien tekeminen Javalla

TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 27. lokakuuta 2009

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

Ohjelmistojen mallintaminen viikon 4 laskareiden mallivastauksia

20. Javan omat luokat 20.1

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

Periytyminen (inheritance)

KOHDELUOKAN MÄÄRITTELY

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

Sokkelon sisältö säilötään linkitetyille listalle ja tekstitiedostoon. Työ tehdään itsenäisesti yhden hengen ryhmissä. Ideoita voi vaihtaa koodia ei.

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

Ohjelmointi 2 / 2010 Välikoe / 26.3

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

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

12. Monimuotoisuus 12.1

Luokka Murtoluku uudelleen. Kirjoitetaan luokka Murtoluku uudelleen niin, että murtolukujen sieventäminen on mahdollista.

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

4. Olio-ohjelmoinista lyhyesti 4.1

Olio-ohjelmointi Javalla

Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 1

Linkitetystä listasta perittyä omaa listaa käytetään muun muassa viestiin liittyvien vastausten säilömiseen.

Muutamia peruskäsitteitä

Sisällys JAVA-OHJELMOINTI Osa 3: Laskennan ohjaus. Lohkolause (block) Peräkkäinen laskenta. Lohkon käyttö. Esimerkki

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

Mikä yhteyssuhde on?

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

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

Luento 2. T Ohjelmoinnin jatkokurssi T1 & T Ohjelmoinnin jatkokurssi L1. Luennoitsija: Otto Seppälä

18. Abstraktit tietotyypit 18.1

Tenttikysymykset. + UML-kaavioiden mallintamistehtävät

Ylläpitodokumentti. Boa Open Access. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

1. Omat operaatiot 1.1

Pakkauksen kokoaminen

Luokat ja oliot. Ville Sundberg

7. Näytölle tulostaminen 7.1

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

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

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

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

Rinnakkaisohjelmointi kurssi. Opintopiiri työskentelyn raportti

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

Sopimuspohjainen olio-ohjelmointi

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. IV Periytyminen ja monimuotoisuus

7/20: Paketti kasassa ensimmäistä kertaa

Common Lisp Object System

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

Ohjelmistojen mallintaminen. Luento 4,

14. Poikkeukset 14.1

1. Olio-ohjelmointi 1.1

Java-kielen perusteet

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

Hakemistojen sisällöt säilötään linkitetyille listalle.

1 Tehtävän kuvaus ja analysointi

Ohjelmistojen mallinnus Ohjelmistoarkkitehtuuri Harri Laine 1

Ohjelmoinnin peruskurssien laaja oppimäärä

Tenttikysymykset. + UML- kaavioiden mallintamistehtävät

TIES542 kevät 2009 Oliokielten erityiskysymyksiä

Rutiinin muodostaminen. 2. Rutiinin muodostaminen. specification) Määrittely (specification( Määrittelyn osapuolet. Hyvän ohjelman tunnusmerkit

// Tulostetaan double-tyyppiseen muuttujaan "hinta" tallennettu // kertalipun hinta ja vaihdetaan riviä. System.out.printf("%.1f euros.

Transkriptio:

Sisällys JAVA-OHJELMOINTI Osa 7: Abstrakti luokka ja rajapinta Abstrakti luokka ja metodi Rajapintamäärittely (interface) Eero Hyvönen Tietojenkäsittelytieteen laitos Helsingin yliopisto 13.10.2000 E. Hyvönen: Java Osa 7 2 Abstraktin luokan idea Abstrakti luokka ja metodi Abstrakteja luokkia käytetään tilanteissa, jossa yliluokan aliluokille pitäisi periyttää yhteinen metodi, mutta ko. metodia ei ole mielekäs määritellä itse yliluokalle. 13.10.2000 E. Hyvönen: Java Osa 7 4 Esimerkki class Kuvio { void draw() { // Periytettävä ominaisuus, // mutta yleistä kuviota ei voi piirtää! class Ympyra extends Kuvio { void draw() { class Nelio extends Kuvio { void draw() { Määrittelemällä yliluokka ja metodi abstrakteiksi, voidaan aliluokille esittää vaatimus ko. metodin luokkakohtaisesta määrittelystä. Kääntäjä tarkistaa, että kaikki perityt abstraktit metodit todella määritellään aliluokissa. Kuvion draw()-metodi voitaisiin määritellä tyhjänä tms. ja korvattaisiin se aliluokissa, mutta se olisi eleganttia. 13.10.2000 E. Hyvönen: Java Osa 7 5 13.10.2000 E. Hyvönen: Java Osa 7 6 1

Esimerkki Abstraktissa luokassa on Yleensä yksi tai useampia abstrakteja metodeja Näiden toteutus täytyy löytyä aliluokista. Mahdollisesti muita ei-abstrakteja metodeja ja muuttujia. Nämä periytyvät normaaliin tapaan. Abstrakti luokka ja metodi ilmaistaan etumääreellä abstract 13.10.2000 E. Hyvönen: Java Osa 7 7 abstract class Kuvio { int x =0; int y=0; abstract void draw(); // Toteutusvaatimus aliluokille String tostring() { // Tavall. ei-abstrakti metodi class Ympyra extends Kuvio {... void draw() {// Abstraktin metodin toteutus... 13.10.2000 E. Hyvönen: Java Osa 7 8 Esimerkki Tiedosto -luokalla on aliluokkina TekstiTiedosto KuvaTiedosto jne. Tulostusmetodi print() ei ole mielekäs yleiselle Tiedosto-luokalle mutta on tarpeen erikseen jokaiselle aliluokalle. 13.10.2000 E. Hyvönen: Java Osa 7 9 Määritellään abstract class Tiedosto { // Luokka on abstrakti, jos sillä on yksikin abstrakti metodi int koko() {; // Voi olla tavallisia metodeja ja muuttujia. abstract void tulosta(); // Määrittelyssä vain kutsun esittely, // ei runkoa! class TekstiTiedosto extends Tiedosto { // Aliluokalta edellytetään tulosta-metodin oma määrittely. void tulosta() {. 13.10.2000 E. Hyvönen: Java Osa 7 10 Abstraktin luokan ominaisuuksia Abstraktista luokasta ei voi luoda ilmentymiä. Abtraktia luokka on vaatimuskuvaus ilman toteutusta kaikilta osin. Muuten abstraktia luokkaa voi käyttää kuten muitakin luokkia. Abstrakti luokka on yleensä luokkahierarkian yläpäässä Käytetään esimerkiksi julkisen käyttöliittymän kuvauksena, joka toteutetaan aliluokilla. Abstrakti luokka voi olla hierarkiassa välitasollakin. 13.10.2000 E. Hyvönen: Java Osa 7 11 Abstraktissa luokassa voi olla kenttiä sekä abstrakteja että muita metodeja. Abstraktin luokan aliluokan ei tarvitse määritellä kaikkia perittyjä abstrakteja metodeja, mutta tällöin sen on itsekin oltava abstrakti. Lopulta jonkin tason ei-abstraktissa aliluokassa viimeinenkin abstrakti metodi tulee määritellyksi. 13.10.2000 E. Hyvönen: Java Osa 7 12 2

Abstrakti metodi: ominaisuuksia Abstraktilla metodilla ei voi olla static-määrettä static olettaa, että metodilla on toteutus. Abstraktilla metodilla ei voi olla final-määrettä Metodi on pakko uudelleenmääritellä aliluokissa. Rajapintamäärittely (interface) 13.10.2000 E. Hyvönen: Java Osa 7 13 Rajapinnan idea Määrittelyn muoto Rajapintamäärittely (interface) on kokoelma vakioita ja abstrakteja metodeja Liittämällä luokkaan vaatimus interfacemäärittelystä, voidaan luokkaan periyttää vakioita ja vaatimus abstraktien metodien toteuttamisesta. Rajapinta ei ole luokkamäärittely vaan apuväline luokkamäärittelyihin. 13.10.2000 E. Hyvönen: Java Osa 7 15 Syntaksi: interface nimi { vakioesittelyt abstraktit metodit Esimerkiksi: interface TiedostoSuojaus { int EXECUTE = 2; int READ=4; int WRITE=6; void tulostasuojaus(int arvo); 13.10.2000 E. Hyvönen: Java Osa 7 16 Oletusmääreet Rajapintojen käyttö Rajapinnan vakioesittelyt oletaan järjestelmän puolesta annetuiksi määreillä public final Metodien esittelyt oletaan järjestelmän puolesta annetuiksi määreillä abstract public Muuten interface määrittely ei olisi kovin mielekäs. Rajapintavaatimus ilmaistaan muodolla "implements rajapinta" luokan nimen jälkeen class KuvaTiedosto implements Tulostuva { Luokka voi samalla olla myös aliluokka ja toteuttaa useita rajapintoja class Lehma extends Elain implements Kulkeva, Lypsava { 13.10.2000 E. Hyvönen: Java Osa 7 17 13.10.2000 E. Hyvönen: Java Osa 7 18 3

Rajapinta voi myös laajentaa toista rajapintaa interface Tulostuva { interface ErikoisTulostuva extends Tulostuva { Vakiot ja metodit periytyvät kuten luokkahierarkiassa. Rajapintaluokkia voi käyttää metodien muodollisten parametrien tyyppinä. Tällöin parametrin arvona voi olla minkä tahansa rajapinnan toteuttavan luokan tai sen aliluokan ilmentymä. Tärkeä kättötapa: Luokan toteuttaja tietää, mitkä metodit argumenteille on taatusti käytettävissä 13.10.2000 E. Hyvönen: Java Osa 7 19 Kun on sovittu rajapinnasta, esim. Tulostuva, voi ohjelmoija A toteuttaa vaikka luokkaan Puskuri metodeja kuten void tulosta (Tulostuva t) joissa voidaan käyttää Tulostuva -rajapinnan kutsuja ja vakiota, esim. tulostapäätteelle(). Ohjelmoija B taas voi toteuttaa yksikseen Tulostuva -rajapinnan toteuttavia luokkia, kuten TekstiTiedosto. Vastaavia olioita voidaan surutta antaa esim. A:n Puskuri-luokan tulosta-metodille argumenttina! 13.10.2000 E. Hyvönen: Java Osa 7 20 Moniperintä Javassa Luokka voi toteuttaa useampiakin rajapintoja. Mutta periä luokkahierarkiassa vain yhdeltä vanhemmalta! Rajapinnoinnoilla voidaan siis laajentaa Javan periytymismekanimia moniperinnän (multiple inheritance) suuntaan. Moniperintä rajapintahierarkian/oiden kautta Ilmentymä luodaan luokkahierarkian perusteella Tarpeen yhdistelmäkäsitteissä Esimerkiksi Muulilla on toisaalta Aasi-ominaisuuksia, toisaalta Hevonen-ominaisuuksia. 13.10.2000 E. Hyvönen: Java Osa 7 21 Rajapinta vs. abstrakti luokka Molemmilla periytetään metodien toteutusvaatimuksia. Rajapinnasta voi periytyä vain abstrakteja metodeja ja vakioita Abstraktista luokasta voi periytyä tämän lisäksi muuttujia ja tavallisia metodeja. Luokka voi periä monelta rajapinnalta mutta vain yhdeltä luokalta tai abstraktilta luokalta. 13.10.2000 E. Hyvönen: Java Osa 7 22 Tiedon kapselointi ja peittäminen Abstraktit luokat ja rajapinnat ovat tärkeä väline tiedon kapselointiin (encapsulation) ja peittämiseen (information hiding). Määrittelyt kertovat ainoastaan käyttöliittymän vaatimukset Ne voidaan antaa projektin alussa ilman toteutusta. Toteutustapa on piilotettu luokkamäärittelyjen sisäiseksi asiaksi. Sovelluskäyttäjän ei tarvitse tietää toteutustapaa. Mahdollistavat toteutustyön riippumattomina osina. 13.10.2000 E. Hyvönen: Java Osa 7 23 Tämä helpottaa monessa asiassa ohjelmistojen hallinta, osittaminen, siirrettävyys, uudelleen käyttö, dokumentointi, 13.10.2000 E. Hyvönen: Java Osa 7 24 4

Kertausta Lisätietoja Mikä ero on luokalla ja abstraktilla luokalla? Mikä ero on luokalla ja rajapinnalla? Mikä ero on abstraktilla luokalla ja rajapinnalla? Mihin abstraktia luokkaa käytetään? Mihin rajapintaa käytetään? Arto Wikla: Ohjelmoinnin perusteet Java-kielellä, OtaDATA, 1998. John Lewis, William Loftus: Java Software Solutions, Addison-Wesley, 1998. 13.10.2000 E. Hyvönen: Java Osa 7 25 13.10.2000 E. Hyvönen: Java Osa 7 26 5