10. interfészekusers.iit.uni-miskolc.hu/~szucs/oop/oa/16_10.pdf · 2017-04-20 · 31/14 b it man...

31
31/1 B IT M A N v: 2017.04.19 B IT M A N Objektum Orientált Programozás 10. Interfészek

Upload: others

Post on 30-Dec-2019

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 10. Interfészekusers.iit.uni-miskolc.hu/~szucs/oop/oa/16_10.pdf · 2017-04-20 · 31/14 B IT MAN Gyakorló példa a számonkérésre Volt féléves gyakorlati beszámoló feladat!

31/1 B IT MANv: 2017.04.19B IT MAN

Objektum Orientált Programozás

10. Interfészek

Page 2: 10. Interfészekusers.iit.uni-miskolc.hu/~szucs/oop/oa/16_10.pdf · 2017-04-20 · 31/14 B IT MAN Gyakorló példa a számonkérésre Volt féléves gyakorlati beszámoló feladat!

31/2 B IT MAN

Interface – Interfész

Csak abstract metódusokat (konstansokat, abstract adattagokat)

tartalmaz.

Nem osztály, hanem egy viselkedési leírás,

Létrehozása: public interface név { . . . }

Szintén .java fájlba kerül, lefordítva .class

A kockák a saját interfészeik nevét I betűvel kezdik!

Több szülő interfésze lehet, ekkor minden szülői viselkedést meg

kell valósítani! (Többszörös öröklődés interfészeknél!)

– Pl. interface ISK extends IA, IB, IC { . . . }

Mindig minden metódusa public abstract, ezt nem kell megadni!

Az interfész megvalósításakor OSZTÁLY jön létre, pl:

– public interface A { . . . }

– public class B implements A { . . . }

Page 3: 10. Interfészekusers.iit.uni-miskolc.hu/~szucs/oop/oa/16_10.pdf · 2017-04-20 · 31/14 B IT MAN Gyakorló példa a számonkérésre Volt féléves gyakorlati beszámoló feladat!

31/3 B IT MAN

Mindkét interfészt

megvalósítja!

Alkalmazott

<<interface>>

Pénzügy

getFizetés();

setFizetés();

<<interface>>

Főnök

getFeladat();

setFeladat();

Alkalmazott melos = new Alkalmazott(…);

void PenzugyFizetes(Pénzügy p){

p.getFizetés();

p.setFizetés();

p.getFeladat();

}

void FonokFeladat(Főnök f){

f.getFeladat();

f.setFeladat();

f.getFizetés();

}

FonokFeladat(melos); PenzugyFizetes(melos);

A Főnök a Főnök

interfészen keresztül

látja a melóst.

A Pénzügyes a

Pénzügy interfészen

keresztül látja a melóst.

Page 4: 10. Interfészekusers.iit.uni-miskolc.hu/~szucs/oop/oa/16_10.pdf · 2017-04-20 · 31/14 B IT MAN Gyakorló példa a számonkérésre Volt féléves gyakorlati beszámoló feladat!

31/4 B IT MAN

Feladatok

1. Készítsen egy interface-t szines.Szinezheto néven

- legyen metódusa egy szín lekérdezésére

- legyen metódusa egy szín megváltoztatására

- legyen egy adata az alapértelmezett szín, értéke Color.GREEN

Készítsen egy pontos.SzinesPont osztályt amely (ha már csinált Pont osztályt

akkor származhat abból.)

- legyen x, y koordináta adata és szin adata

- legyen konstruktora mindhárom adat megadására

- legyen adatait String-ben visszaadó metódusa (definiálja felül az Object-től

örökölt toString() metódust!)

- implementálja a Szinezheto interface-t

Page 5: 10. Interfészekusers.iit.uni-miskolc.hu/~szucs/oop/oa/16_10.pdf · 2017-04-20 · 31/14 B IT MAN Gyakorló példa a számonkérésre Volt féléves gyakorlati beszámoló feladat!

31/5 B IT MAN

Létrehozás Eclipse-ben

Page 6: 10. Interfészekusers.iit.uni-miskolc.hu/~szucs/oop/oa/16_10.pdf · 2017-04-20 · 31/14 B IT MAN Gyakorló példa a számonkérésre Volt féléves gyakorlati beszámoló feladat!

31/6 B IT MAN

package szines;

import java.awt.Color;

public interface Szinezheto {

public Color getSzin();

public void setSzin(Color szin);

public static final Color ALAPSZIN = Color.GREEN;

}

Szinezheto.java

B IT MAN

Szinezheto interfész

Page 7: 10. Interfészekusers.iit.uni-miskolc.hu/~szucs/oop/oa/16_10.pdf · 2017-04-20 · 31/14 B IT MAN Gyakorló példa a számonkérésre Volt féléves gyakorlati beszámoló feladat!

31/7 B IT MAN

package pontos;

public class Pont {private int x;private int y;

public Pont(int x, int y) {this.x = x;this.y = y;

}public String toString() {return "Pont(" + this.x + ", " + this.y + ")";

}public double origoTav() {return Math.sqrt(x * x + y * y);

}}

Pont.java

B IT MAN

Pont osztály

Page 8: 10. Interfészekusers.iit.uni-miskolc.hu/~szucs/oop/oa/16_10.pdf · 2017-04-20 · 31/14 B IT MAN Gyakorló példa a számonkérésre Volt féléves gyakorlati beszámoló feladat!

31/8 B IT MAN

Page 9: 10. Interfészekusers.iit.uni-miskolc.hu/~szucs/oop/oa/16_10.pdf · 2017-04-20 · 31/14 B IT MAN Gyakorló példa a számonkérésre Volt féléves gyakorlati beszámoló feladat!

31/9 B IT MAN

package pontos;import java.awt.Color;import szines.Szinezheto;

public class SzinesPont extends Pont implements Szinezheto {private Color szin;

public SzinesPont(int x, int y, Color szin) {super(x, y);this.szin = szin;

}@Overridepublic Color getSzin() {

// TODO Auto-generated method stubreturn this.szin;

}

SzinesPont.java

B IT MAN

SzinesPont osztály

(2/1)

Page 10: 10. Interfészekusers.iit.uni-miskolc.hu/~szucs/oop/oa/16_10.pdf · 2017-04-20 · 31/14 B IT MAN Gyakorló példa a számonkérésre Volt féléves gyakorlati beszámoló feladat!

31/10 B IT MAN

@Overridepublic void setSzin(Color szin) {

// TODO Auto-generated method stubthis.szin = szin;

}@Overridepublic String toString() {

return super.toString() + ", " + this.szin;}

}

SzinesPont.java

B IT MAN

SzinesPont osztály

(2/2)

Page 11: 10. Interfészekusers.iit.uni-miskolc.hu/~szucs/oop/oa/16_10.pdf · 2017-04-20 · 31/14 B IT MAN Gyakorló példa a számonkérésre Volt féléves gyakorlati beszámoló feladat!

31/11 B IT MAN

Feladatok

Készítsen egy szines.SzinProba futtatható osztályt, amelyben egy Szinezheto

típusú referenciának SzinesPont példányt add értékül, kiírja az adatait, majd

átszinezi és kiírja az adatait.

Page 12: 10. Interfészekusers.iit.uni-miskolc.hu/~szucs/oop/oa/16_10.pdf · 2017-04-20 · 31/14 B IT MAN Gyakorló példa a számonkérésre Volt féléves gyakorlati beszámoló feladat!

31/12 B IT MAN

package szines;

import java.awt.Color;

import pontos.SzinesPont;

public class SzinProba {

public static void main(String[] args) {

Szinezheto sz1 = new SzinesPont(4, 3, Color.BLACK);

System.out.println(sz1);

sz1.setSzin(Color.YELLOW);

System.out.println(sz1);

Color sk = new Color(254,228,82);

sz1.setSzin(sk);

System.out.println(sz1);

}

}

SzinProba.java

B IT MAN

SzinProba osztály

Page 13: 10. Interfészekusers.iit.uni-miskolc.hu/~szucs/oop/oa/16_10.pdf · 2017-04-20 · 31/14 B IT MAN Gyakorló példa a számonkérésre Volt féléves gyakorlati beszámoló feladat!

31/13 B IT MAN

SzinProba osztály

Pont(4, 3), java.awt.Color[r=0,g=0,b=0]

Pont(4, 3), java.awt.Color[r=255,g=255,b=0]

Pont(4, 3), java.awt.Color[r=254,g=228,b=82]

Konzol

Page 14: 10. Interfészekusers.iit.uni-miskolc.hu/~szucs/oop/oa/16_10.pdf · 2017-04-20 · 31/14 B IT MAN Gyakorló példa a számonkérésre Volt féléves gyakorlati beszámoló feladat!

31/14 B IT MAN

Gyakorló példa a számonkérésre

Volt féléves gyakorlati beszámoló feladat!

1.1.

a. Definiáljon egy IPolinom nevű interfészt.

b. Deklaráljon benne egy „szamol” nevű metódust, amely egy valós számot kap

és egy valós számot ad vissza.

Szerepe, egy megadott x értékre visszaadni a kiszámolt y-t.

c. Deklaráljon benne egy „foka” nevű metódust, amely paraméter nélküli és egy

egészet ad vissza.

Szerepe: a polinom fokát visszaadni.

1.2.

a. Definiáljon egy LinearisPolinom osztályt, amely egy első fokú egyváltozós

polinomot reprezentál, (amelynek képlete: y=ax +b).

b. Legyen két adattagja, amely a polinom együtthatóit tárolja (a képletben a és

b), ezek legyenek valósak.

Page 15: 10. Interfészekusers.iit.uni-miskolc.hu/~szucs/oop/oa/16_10.pdf · 2017-04-20 · 31/14 B IT MAN Gyakorló példa a számonkérésre Volt féléves gyakorlati beszámoló feladat!

31/15 B IT MAN

Gyakorló példa a számonkérésre

c. Legyen egy konstruktora, amely paraméterben megadott értékekkel

inicializál.

d. Az osztály implementálja értelemszerűen az IPolinom interfészt.

e. Legyen egy toString felüldefiniálás, amely a polinom képletét adja vissza egy

string-ben a konkrét együtthatókkal.

(Tehát ha pl. az együtthatók 2 és -3, akkor a visszaadott érték: „y=2x-3”

1.3.

a. Definiáljon egy futtatható osztályt PolinomProba néven.

b. Ebben hozzon létre egy osztályszintű metódust, amely paraméterként

megkap egy IPolinom-t és kiírja a kapott polinom függvénytáblázatát 0 és 1

között 0.1 lépéssel.

c. A main-ben hozzon létre 5 lineáris polinomot beolvasott együtthatókkal és

tárolja egy tömbbe. Majd írja ki az összes polinom képletét, majd írassa ki az

előző metódus segítségével az utolsó polinom függvény táblázatát.

Page 16: 10. Interfészekusers.iit.uni-miskolc.hu/~szucs/oop/oa/16_10.pdf · 2017-04-20 · 31/14 B IT MAN Gyakorló példa a számonkérésre Volt féléves gyakorlati beszámoló feladat!

31/16 B IT MAN

public interface Ipolinom {

public double szamol(double x);

public int foka();

}

Ipolinom.java

Ipolinom interfész

double szamol (double) metódus

int foka() metódus

Page 17: 10. Interfészekusers.iit.uni-miskolc.hu/~szucs/oop/oa/16_10.pdf · 2017-04-20 · 31/14 B IT MAN Gyakorló példa a számonkérésre Volt féléves gyakorlati beszámoló feladat!

31/17 B IT MAN

public class LinearisPolinom implements Ipolinom{

private double a;

private double b;

public LinearisPolinom (double a, double b){

this.a = a;

this.b = b;

}

public double szamol(double x){

return a*x - b;

}

public int foka(){

return 1;

}

LinearisPolinom.java

B IT MAN

LinearisPolinom osztály, megvalósítja az Ipolinom interfészt, (y=ax +b)

adattagok: a, b

konstruktor, toString()-y=ax +b alak visszaadása

Page 18: 10. Interfészekusers.iit.uni-miskolc.hu/~szucs/oop/oa/16_10.pdf · 2017-04-20 · 31/14 B IT MAN Gyakorló példa a számonkérésre Volt féléves gyakorlati beszámoló feladat!

31/18 B IT MAN

public String toString(){

String p="";

if (b >= 0) p="+";

return "y="+a+"x"+p+b;

}

}

LinearisPolinom.java

B IT MAN

LinearisPolinom osztály,

toString()- y=ax +b alak visszaadása

Page 19: 10. Interfészekusers.iit.uni-miskolc.hu/~szucs/oop/oa/16_10.pdf · 2017-04-20 · 31/14 B IT MAN Gyakorló példa a számonkérésre Volt féléves gyakorlati beszámoló feladat!

31/19 B IT MAN

import java.util.Scanner;

public class PolinomProba {

public static void kiir (Ipolinom ip){

double y = 0d;

for (double x=0d; x<=1; x=x+0.1){

y = ip.szamol(x);

System.out.println("X= "+x+" Y= "+y);

}

}

PolinomProba.java

B IT MAN

PolinomProba programosztály

osztályszintű kiir(Ipolinom) metódus, y=ax+b kiírása, 0-1 között, 0.1 lépésközzel

5 db polinom beolvasása tömbbe, kiíratásuk, utolsó függvénytáblázat kiíratása

Page 20: 10. Interfészekusers.iit.uni-miskolc.hu/~szucs/oop/oa/16_10.pdf · 2017-04-20 · 31/14 B IT MAN Gyakorló példa a számonkérésre Volt féléves gyakorlati beszámoló feladat!

31/20 B IT MAN

public static void main(String[ ] args) {

Scanner sc = new Scanner(System.in);

LinearisPolinom[ ] lp = new LinearisPolinom[5];

String s1, s2;

double d1, d2;

for (int i=0; i<5; i++) {

System.out.println(i+". X-érték: ");

s1 = sc.nextLine();

d1 = Double.parseDouble(s1);

System.out.println(i+". Konstans: ");

s2 = sc.nextLine();

d2 = Double.parseDouble(s2);

lp[i] = new LinearisPolinom(d1, d2);

}

for (int i=0; i<5; i++) System.out.println(lp[i]);

PolinomProba.kiir(lp[4]);

}

}

PolinomProba.java

B IT MAN

PolinomProba programosztály

osztályszintű kiir(Ipolinom) metódus, y=ax+b kiírása, 0-1 között, 0.1 lépésközzel

5 db polinom beolvasása tömbbe, kiíratásuk, utolsó függvénytáblázat kiíratása

Page 21: 10. Interfészekusers.iit.uni-miskolc.hu/~szucs/oop/oa/16_10.pdf · 2017-04-20 · 31/14 B IT MAN Gyakorló példa a számonkérésre Volt féléves gyakorlati beszámoló feladat!

31/21 B IT MAN

0. X-érték: 2

0. Konstans: 2

1. X-érték: 4

1. Konstans: 0

2. X-érték: -3

2. Konstans: 2

3. X-érték: 5

3. Konstans: -3

4. X-érték: 4

4. Konstans: 2

y=2.0x+2.0

y=4.0x+0.0

y=-3.0x+2.0

y=5.0x-3.0

y=4.0x+2.0

Konzol

X= 0.0 Y= -2.0

X= 0.1 Y= -1.6

X= 0.2 Y= -1.2

X= 0.30000000000000004 Y= -0.7999999999999998

X= 0.4 Y= -0.3999999999999999

X= 0.5 Y= 0.0

X= 0.6 Y= 0.3999999999999999

X= 0.7 Y= 0.7999999999999998

X= 0.7999999999999999 Y= 1.1999999999999997

X= 0.8999999999999999 Y= 1.5999999999999996

X= 0.9999999999999999 Y= 1.9999999999999996

Konzol

Page 22: 10. Interfészekusers.iit.uni-miskolc.hu/~szucs/oop/oa/16_10.pdf · 2017-04-20 · 31/14 B IT MAN Gyakorló példa a számonkérésre Volt féléves gyakorlati beszámoló feladat!

31/22 B IT MAN

0. X-érték: 2

0. Konstans: 2

1. X-érték: 4

1. Konstans: 0

2. X-érték: -3

2. Konstans: 2

3. X-érték: 5

3. Konstans: -3

4. X-érték: 4

4. Konstans: 2

y=2.0x+2.0

y=4.0x+0.0

y=-3.0x+2.0

y=5.0x-3.0

y=4.0x+2.0

Konzol

Page 23: 10. Interfészekusers.iit.uni-miskolc.hu/~szucs/oop/oa/16_10.pdf · 2017-04-20 · 31/14 B IT MAN Gyakorló példa a számonkérésre Volt féléves gyakorlati beszámoló feladat!

31/23 B IT MAN

Gyakorló példa a számonkérésre

Volt féléves gyakorlati beszámoló feladat!

1. feladatrész (11 pont)

Definiáljon osztályt "vizsgazh" modellezésére (VizsgaZh). Egy vizsga

jellemzői: írójának neve, elért pontszám.

Az osztályhoz tartozzon egy konstans, amely az elérhető maximális

pontszámot tartalmazza. Ez most legyen 100.

Definiáljon konstruktort, amellyel egy példány írójának neve beállítható.

Definiáljon egy pontBe metódust, amellyel a pontszám beállítható.

Definiáljon egy megfeleltE metódust. Egy zh megfelelt, ha a pontszáma

nagyobb, mint a maximum fele.

Page 24: 10. Interfészekusers.iit.uni-miskolc.hu/~szucs/oop/oa/16_10.pdf · 2017-04-20 · 31/14 B IT MAN Gyakorló példa a számonkérésre Volt féléves gyakorlati beszámoló feladat!

31/24 B IT MAN

Gyakorló példa a számonkérésre

Volt féléves gyakorlati beszámoló feladat!

2. feladatrész (11 pont)

Definiáljon a fenti osztály leszármazottjaként egy InfosVizsgaZh osztályt,

amely a zh-hoz csatolt, elvett puskák számát is kezeli.

Definiáljon konstruktort, amellyel egy példány írójának neve beállítható.

Definiáljon egy pontBe metódust, amellyel a pontszám és a puskák száma

beállítható.

Definiálja felül a megfeleltE metódust. Egy InfosVizsgaZh megfelelt, ha

VizsgaZh-ként megfelelt és a puskák száma 0.

Page 25: 10. Interfészekusers.iit.uni-miskolc.hu/~szucs/oop/oa/16_10.pdf · 2017-04-20 · 31/14 B IT MAN Gyakorló példa a számonkérésre Volt féléves gyakorlati beszámoló feladat!

31/25 B IT MAN

Gyakorló példa a számonkérésre

Volt féléves gyakorlati beszámoló feladat!

3. feladatrész (5 pont)

Írjon egy ProbaZH osztályt, amely futtatható.

Ebben állítson elő egy InfosVizsgaZh objektumot tetszőleges (de érvényes)

adatokkal, majd írja ki a standard outputra, a "megfelelt" vagy "nem felelt

meg" szöveget az objektum vizsgálata alapján.

Page 26: 10. Interfészekusers.iit.uni-miskolc.hu/~szucs/oop/oa/16_10.pdf · 2017-04-20 · 31/14 B IT MAN Gyakorló példa a számonkérésre Volt féléves gyakorlati beszámoló feladat!

31/26 B IT MAN

public class VizsgaZH {

private String irta;

private int pontszam;

private final static int MAXPONTSZAM = 100;

public VizsgaZH(String tulaj) {

irta = new String(tulaj);

}

public void pontBe(int elertPontszam) {

pontszam = elertPontszam;

}

public boolean megfeleltE() {

return (pontszam > MAXPONTSZAM / 2);

}

public String getIrta(){

return irta;

}

VizsgaZh.java

B IT MAN

VizsgaZH osztály, adattagok: név, pontszám

MaxPontszám konstans

konstruktor, pontBe, megfeleltE, getIrta

public int getPont(){

return pontszam;

}

}

Page 27: 10. Interfészekusers.iit.uni-miskolc.hu/~szucs/oop/oa/16_10.pdf · 2017-04-20 · 31/14 B IT MAN Gyakorló példa a számonkérésre Volt féléves gyakorlati beszámoló feladat!

31/27 B IT MAN

public class InfosVizsgaZH extends VizsgaZH {

private int puskakSzama;

public InfosVizsgaZH(String iro) {

super(iro);

}

public void pontBe(int elertPontszam, int elvettPuskakSzama) {

pontBe(elertPontszam);

puskakSzama = elvettPuskakSzama;

}

public boolean megfeleltE() {

if (puskakSzama > 0) return false;

else return super.megfeleltE();

}

public String toString(){

return getIrta()+" Pont: "+getPont()+" Puska: "+puskakSzama;

}

}

InfosVizsgaZH.java

InfosVizsgaZh osztály, adattagok: puskák száma

MaxPontszám konstans

konstruktor, pontBe, megfeleltE, toString

Page 28: 10. Interfészekusers.iit.uni-miskolc.hu/~szucs/oop/oa/16_10.pdf · 2017-04-20 · 31/14 B IT MAN Gyakorló példa a számonkérésre Volt féléves gyakorlati beszámoló feladat!

31/28 B IT MAN

public class ProbaZH {

public static void main(String[ ] args) {

InfosVizsgaZH probaZh = new InfosVizsgaZH("Kiss Béla");

probaZh.pontBe(75,0);

if (probaZh.megfeleltE())

System.out.println("Megfelelt!");

else

System.out.println("Nem felelt meg!");

}

}

ProbaZH.java

ProbaZH programosztály

példányosítás, pontbeállítás, megfelelt kiíratása

Megfelelt!

Konzol

Page 29: 10. Interfészekusers.iit.uni-miskolc.hu/~szucs/oop/oa/16_10.pdf · 2017-04-20 · 31/14 B IT MAN Gyakorló példa a számonkérésre Volt féléves gyakorlati beszámoló feladat!

31/29 B IT MAN

Gyakorló példa a számonkérésre

Házi feladat:

4. feladatrész (15 pont)

Írjon egy ProbaZH2 osztályt, amely futtatható.

Olvassa be a zh-t írók számát, deklaráljon ennek megfelelő méretű

InfosVizsgaZH tömböt.

Töltse fel véletlenszerű adatokkal a tömböt (pontszám 0-100 közötti, puskák

száma 0 vagy 1 legyen), a vizsgázók neve: ZH_író0, ZH_író1, ZH_író2…

legyen.

Írassa ki minden vizsgázó adatait, és hogy megfelelt-e.

Írassa ki a megfeleltek részarányát százalékosan.

Page 30: 10. Interfészekusers.iit.uni-miskolc.hu/~szucs/oop/oa/16_10.pdf · 2017-04-20 · 31/14 B IT MAN Gyakorló példa a számonkérésre Volt féléves gyakorlati beszámoló feladat!

31/30 B IT MAN

ZH-t írók száma: 10

ZH_Író0 Pont: 86 Puska: 0 Megfelelt!

ZH_Író1 Pont: 99 Puska: 0 Megfelelt!

ZH_Író2 Pont: 44 Puska: 1 Nem felelt meg!

ZH_Író3 Pont: 14 Puska: 0 Nem felelt meg!

ZH_Író4 Pont: 86 Puska: 0 Megfelelt!

ZH_Író5 Pont: 4 Puska: 1 Nem felelt meg!

ZH_Író6 Pont: 91 Puska: 1 Nem felelt meg!

ZH_Író7 Pont: 57 Puska: 1 Nem felelt meg!

ZH_Író8 Pont: 25 Puska: 1 Nem felelt meg!

ZH_Író9 Pont: 43 Puska: 0 Nem felelt meg!

Megfeleltek részaránya: 30.0%

Konzol

Okuljon a futtatási eredményből! :-)

Page 31: 10. Interfészekusers.iit.uni-miskolc.hu/~szucs/oop/oa/16_10.pdf · 2017-04-20 · 31/14 B IT MAN Gyakorló példa a számonkérésre Volt féléves gyakorlati beszámoló feladat!

31/31 B IT MAN

VÉGEVÉGE