1 Rajapinta (interface) Mikä rajapinta on? Rajapinta ja siitä toteutettu luokka Monimuotoisuus ja dynaaminen sidonta Rajapinta vs periytyminen 1 Mikä rajapinta on? Rajapintoja käytetään, kun halutaan määritellä metodille nimi siten, että kaikissa rajapinnan toteuttavissa luokissa on toteutettu ko. niminen metodi monimuotoisuus ja dynaaminen sidonta pystytään toteuttamaan helposti Rajapinta määrittelee metodien nimet, parametrit ja paluuarvot, mutta rajapinta ei toteuta niitä. Rajapintaluokasta voidaan toteuttaa useita luokkia siten, että nämä toteuttavat rajapintaluokan metodit. Rajapinnasta toteutettuun luokkaan voidaan lisäksi laittaa luokan omia metodeja ja attribuutteja. 2
2 Javassa on valmiina rajapintoja, joista on toteutettu yksi tai useampi luokka. Collection rajapinnasta on tehty Set ja List rajapinnat. List rajapinnasta on toteutettu ArrayList- ja LinkedList-luokat. List rajapintaan on määritelty mm. seuraavat metodit: boolean add ( E e) E get (int index) E remove (int index) Nämä metodi löytyvät toteutettuna eli ovat siis käytettävissä kummassakin luokassa ArrayList ja LinkedList 3 public interface X public void metodi(); public class Y implements X public void metodi() // Metodin koodi Rajapinta ja sen toteutus interface -> rajapintaluokka Rajapintaluokassa on vain metodien määrittely ja vakiot. Rajapintaluokassa ei saa olla attribuutteja. Rajapinnan ja siellä olevien metodien näkyvyys on aina public. Rajapinta Rajapinnasta toteutettu luokka kertoo, mistä rajapinnoista luokka on toteutettu Rajapinnan toteuttavassa luokassa on toteutetttava rajapinnan kaikki 4 metodit.
3 public interface Ohjelma // rajapinta public void aja() ; public class KertotauluOhjelma implements Ohjelma public void aja() for (int i = 1; I <= 10;i++) tulostakertotaulu(i); System.out.println(); private void tulostakertotaulu (int luku) for (int i = 1; i <= 10;i++) System.out.print( luku * i + " "); 5 import java.util.scanner; public class SummaOhjelma implements Ohjelma public void aja() int summa = 0; for (int i=1 ; i< 100 ; i++) summa = summa + i; System.out.print(i + " + "); summa = summa + 100; System.out.println(100 + " = " + summa); 6
4 import java.util.scanner; public class KertomaOhjelma implements Ohjelma private Scanner input; public KertomaOhjelma () input = new Scanner(System.in); public void aja() int luku = pyydaarvo(); int kertoma = 1; for (int i = 1; i <= luku; i++) kertoma = kertoma * i; System.out.println("Luvun " + luku + " kertoma on " + kertoma); 7 // pyytää käyttäjältä numeron, jonka kertoma aiotaan // laskea private int pyydaarvo() int numero; System.out.print("Anna luku, jonka kertoman haluat "+ "tulostettavan: "); numero = input.nextint(); return numero; // end of class KertomaOhjelma 8
5 Monimuotoisuus import java.util.scanner; public class PaaOhjelma public static void main(string[] args) Scanner input = new Scanner(System.in); int valinta; Ohjelma kutsuttava=null; do Määritellään muuttujan tyypiksi rajapinta Ohjelma System.out.println("1) käynnistä kertotaulu ohjelma"); System.out.println("2) käynnistä summa ohjelma"); System.out.println("3) käynnistä kertoma ohjelma"); System.out.println("0) lopeta"); System.out.print("valitse: "); valinta = input.nextint(); // ohjelma jatkuu seuraavalla sivulla 9 Monimuotoisuus ja dynaaminen sidonta Annetaan muuttujan Ohjelma kutsuttava arvoksi Ohjelma rajapinnan toteuttava olio if (valinta == 1) kutsuttava = new KertotauluOhjelma(); if (valinta == 2) kutsuttava = new SummaOhjelma(); if (valinta == 3) kutsuttava = new KertomaOhjelma(); if (valinta!= 0) Kääntäjä tutkii onko kutsuttava.aja(); muuttajalla, jonka tyyppi on Ohjelma, metodi aja(). while (valinta!= 0); ON // end of PaaOhjelma Kun ohjelma ajetaan, järjestelmä tutkii, mihin olioon muuttuja kutsuttava viittaa ja kutsuu tämän olion metodia aja() == Dynaaminen sidonta ja monimuotoisuus 10
6 Rajapinta vs periytyminen Jos periytettävä luokka on ns. normaaliluokka, jolla voi tehdä olioita, sille ei voi toteuttaa metodia, jonka periytettävät luokat joutuisivat toteuttamaan Abstrakti luokka On luokka, johon ei voi tehdä olioita Luokassa pitää olla vähintään yksi puhdas abstrakti metodi, jota ei toteuteta abstraktissa luokassa vaan se on toteutettava niissä luokissa, jotka periytetään ko. abstraktista luokasta abstrakti luokka ei ole kuitenkaan samanlainen kuin rajapinta Abtraktiin luokaan voidaan tehdä muitakin kuin abtrakteja metodeita ja luokassa voi olla attribuutteja 11