OOP: Java 8.Gy: Abstract osztályok, interfészek

Hasonló dokumentumok
és az instanceof operátor

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán

OOP: Java 8.Gy: Gyakorlás

Java programozási nyelv 5. rész Osztályok III.

OOP: Java 4.Gy: Java osztályok

Széchenyi István Egyetem. Programozás III. Varjasi Norbert

Java VII. Polimorfizmus a Java nyelvben

OOP: Java 7.Gy: Öröklődés, referenciák

Java VII. Polimorfizmus a Java nyelvben

OOP: Java 11.Gy: Enumok, beágyazott osztályok. 13/1 B ITv: MAN

Objektum Orientált Programozás. 5. JAVA osztályok 21/1B IT MAN

7. K: JAVA alapok Konzultáció

JAVA PROGRAMOZÁS 2.ELŐADÁS

Abstract osztályok és interface-ek. 7-dik gyakorlat

Osztályok. 4. gyakorlat

OOP: Java 5.Gy: Osztály, referencia, konstruktor

Helyes-e az alábbi kódrészlet? int i = 1; i = i * 3 + 1; int j; j = i + 1; Nem. Igen. Hányféleképpen lehet Javaban megjegyzést írni?

OBJEKTUM ORIENTÁLT PROGRAMOZÁS JAVA NYELVEN. vizsgatételek

Programozási nyelvek Java

OOP: Java 6.Gy: Java osztályok. Definíció, static, túlterhelés

Objektum Orientált Programozás. 11. Kivételkezelés 44/1B IT MAN

Java VI. Miskolci Egyetem Általános Informatikai Tanszék. Utolsó módosítás: Ficsor Lajos. Java VI.: Öröklődés JAVA6 / 1

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás:

Programozás I. 5. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Programozási nyelvek Java

Programozás I. Első ZH segédlet

Osztályok. construct () destruct() $b=new Book(); $b=null; unset ($b); book.php: <?php class Book { private $isbn; public $title;

Szoftvertechnolo gia gyakorlat

Elemi Alkalmazások Fejlesztése II.

JAVA PROGRAMOZÁS 3.ELŐADÁS

Objektumorientált programozás C# nyelven

4. Gy: JAVA osztályok

Az osztályok csomagokba vannak rendezve, minden csomag tetszőleges. Könyvtárhierarhiát fed: Pl.: java/util/scanner.java

Java programozási nyelv 4. rész Osztályok II.

OOP #14 (referencia-elv)

Programozási nyelvek Java

Java bevezet o Kab odi L aszl o Kab odi L aszl o Java bevezet o

Osztálytervezés és implementációs ajánlások

Osztálytervezés és implementációs ajánlások

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

Java és web programozás

Java Programozás 1. Gy: Java alapok. Ismétlés ++

Web-technológia PHP-vel

Programozási nyelvek II.: JAVA, 3. gyakorlat

Pelda öröklődésre: import java.io.*; import java.text.*; import java.util.*; import extra.*;

3. Osztályok II. Programozás II

BME MOGI Gépészeti informatika 8.

Dr. Pál László, Sapientia EMTE, Csíkszereda WEB PROGRAMOZÁS 2.ELŐADÁS. Objektumorientált programozás

List<String> l1 = new ArrayList<String>(); List<Object> l2 = l1; // error

Java Programozás 3. Ea: Java osztályok. OOP alapalapok

Programozás II. 3. gyakorlat Objektum Orientáltság C++-ban

C# osztálydeníció. Krizsán Zoltán 1. .net C# technológiák tananyag objektum orientált programozás tananyag

Öröklés és Polimorfizmus

Kivételkezelés, beágyazott osztályok. Nyolcadik gyakorlat

Objektumorientált programozás C# nyelven

Java és web programozás

Java III. I I. Osztálydefiníció (Bevezetés)

Statikus adattagok. Statikus adattag inicializálása. Speciális adattagok és tagfüggvények. Általános Informatikai Tanszék

Java V. Osztályszint. lyszintű ű tagok. Példányváltozó. Osztályváltozó. Általános Informatikai Tanszék Utolsó módosítás:

Java Programozás 9. Gy: Java alapok. Adatkezelő 5.rész

Objektum Orientált Programozás. 6. JAVA öröklődés 30/1B IT MAN

Java III. I I. Osztálydefiníció (Bevezetés)

Gelle Kitti Algoritmusok és adatszerkezetek gyakorlat - 07 Hasítótáblák

Mi a különbség az extends és az implements között. Mikor melyiket kell használni? Comperable-t megvalósító oasztályokban össze lehet hasonlitani

Java Programozás 4. Gy: Java GUI. Tipper, MVC kalkulátor

Programozás II. labor

Java IX. telkezelés a Java-ban

Java IX. telkezelés a Java-ban

Java és web programozás

Java Programozás 5. Ea: OOP alapok. Abstract Javaságok

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

PHP II. WEB technológiák. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) PHP II / 19

Programozási nyelvek II. JAVA EA+GY 1. gyakolat

Segédanyag: Java alkalmazások gyakorlat

Programozás II. 2. gyakorlat Áttérés C-ről C++-ra

Alkalmazott Modul III 6. előadás. Objektumorientált programozás: öröklődés és polimorfizmus

Programozási nyelvek II.: JAVA

C++ programozási nyelv Konstruktorok-destruktorok

Bevezetés a Programozásba II 8. előadás. Polimorfizmus Giachetta Roberto

Segédanyag: Java alkalmazások gyakorlat

Programozási nyelvek II.: JAVA

Java II. I A Java programozási nyelv alapelemei

Már megismert fogalmak áttekintése

Programozási nyelvek II.: JAVA, 11. gyakorlat

Programozás III KIINDULÁS. Különböző sportoló típusok vannak: futó, magasugró, focista, akik teljesítményét más-más módon határozzuk meg.

Interfészek. PPT 2007/2008 tavasz.

Java Programozás 11. Ea: MVC modell

Java programozási nyelv 6. rész Java a gyakorlatban

C# Nyelvi Elemei. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) C# Nyelvi Elemei / 18

Programozási nyelvek Java

C# osztályok. Krizsán Zoltán

Magas szintű programozási nyelvek 2 Előadás jegyzet

Programozási nyelvek II.: JAVA

Segédanyag: Java alkalmazások gyakorlat

Java és web programozás

Programozási technológia

Java Programozás 3. Gy: Java GUI. Swing, AWT

Programozási technológia

Bánsághi Anna 2014 Bánsághi Anna 1 of 33

WEBFEJLESZTÉS 2. ADATBÁZIS-KEZELÉS, OSZTÁLYOK

Átírás:

OOP: Java 8.Gy: Abstract osztályok, interfészek 26/1 B ITv: MAN 2019.04.03

Abszrakt metódus és absztrakt osztály. Gyakran előfordul a tervezés során, hogy egy osztály szintjén tudjuk, hogy valamilyen metódus szükséges lesz a leszármazottakban, de még nem lehet megadni az implementációját. Ezért a Java nyelv megengedi törzs nélküli metódus definiálását. Az ilyen metódust az abstract minősítővel kell ellátni. Ha az osztály tartalmaz absztrakt metódust, az osztályt is az abtract minősítővel kell ellátni. abstract class Termek{ private String nev; 26/2 Termek(String nev){ this.nev = new String(nev); abstract void kiir();

Abszrakt metódus és absztrakt osztály. Az absztrakt metódusokra vonatkozó szabályok: Absztrakt egy metódus, ha nincs törzse, megvalósítást csak a felüldefiniálás során kap. Absztrakt metódusnak nem lehet a módosítója a private, final, static hiszen az ilyen módosítókkal ellátott metódusokat nem lehet felüldefiniálni! 26/3

Abszrakt metódus és absztrakt osztály. Az absztrakt osztályokra vonatkozó szabályok: Absztrakt egy osztály, ha van legalább egy absztrakt metódusa Absztrakt osztályt nem lehet példányosítani Egy absztrakt osztály arra szolgál, hogy ős osztálya legyen további osztályoknak A leszármazott osztály(ok) feladata az absztrakt metódusok felüldefiniálása Absztrakt osztály gyermeke lehet absztrakt, ha nem minden absztrakt metódust valósít meg Az absztrakt osztály is használható referencia statikus típusaként 26/4

Abszrakt metódus és absztrakt osztály. Az absztrakt metódusok szerepe: rögzít egy tervezési döntést (szükséges metódusok halmaza), kényszeríti a leszármazott osztály(ok) programozóját az így meghatározott metódusok definiálására. Hibalehetőségek: törzs nélküli metódus, abstract minősítő nélkül, absztrakt metódust tartalmazó osztály abstract minősítő nélkül. 26/5

A Java interface fogalma, a definíció szintaktikája. Interface implementálása. Interfész fogalma: Egy osztály interfészén a nyilvános elemeinek összességét értjük, ami a használatához szükséges. Az információ rejtés elve miatt, általában csak metódusokból áll. Specifikáció, tervezés során készül. Kényszeríti az osztály késztőjét a megfelelő elemek implementálására. Protokollok az objektumok között. interface Nyomtathato{ void nyomtat(); 26/6 class Konyv implements Nyomtathato{ String tartalom = "ABC"; public void nyomtat(){ System.out.println(tartalom);

A Java interface fogalma, a definíció szintaktikája. Interface implementálása. Interfész Javaban: Szintaktikája hasonló az osztályhoz, de a class kulcsszó helyett interface. Kiterjeszthet más interfészeket (extends) Létezik többszörös interfész öröklés. Az interfész nem tartalmaz végrehajtható kódot, azt a megvalósító osztályban (implements) kell megadni. Megállapodás, hogy I -vel kezdődik a neve. [módosító] interface Iazonosító extends If1, If2 { [elemek deklarációja] 26/7 Módosító lehet: public vagy abstract

A Java interface fogalma, a definíció szintaktikája. Interface implementálása. Interfész implementálása: [módosító] class osztálynév implements If1, If2() { Szabályok: Ha egy osztály implementál egy interfészt, akkor köteles annak minden metódusát implementálni Az implementált elemeket nem módosíthatja Metódusok esetében a fejlécnek teljesen egyeznie kell Azonos nevű elemet az öröklődés során és az implementálás során nem kaphat meg 26/8

A Java interface fogalma, a definíció szintaktikája. Interface implementálása. Interfész használata: egy interfész új referencia típust vezet be -> mindenhol használható, ahol egy osztály. Változó deklarációban szerepelhet. Bármelyik osztállyal helyettesíthető, amely implementálja. 26/9

Feladat Készítsen saját csomagban Hasáb absztrakt osztályt. Adattagja: magasság (int) Konstruktora: a paraméterben kapott értékkel inicializálja a magasságot Metódusok: Getter metódus, amely visszaadja a magasságot. Abstract metódus az alapterület visszaadására. Metódus a térfogat visszaadására. Összehasonlító metódus, amely igazat ad ha a hasáb nagyobb térfogatú, mint egy paraméterben kapott másik hasáb térfogata. 26/10

A PrismShape osztály kódja package myshapes; public abstract class PrismShape { private int height; public PrismShape(int height) { this.height = height; public int getheight() { return height; public abstract double getbasearea(); public double getvolume() { return height*getbasearea(); public boolean hasbiggervolumethan(prismshape prism) { if (this.getvolume() > prism.getvolume()) { return true; else return false; 26/11

Feladat Ugyanebben a csomagban készítsen Henger osztályt, amely a Hasáb leszármazottja. Adattagja: sugár (double) Konstruktor: a paraméterben kapott sugár és magasság értékekkel inicializálja az objektumot Metódusok: Definiálja felül az örökölt alapterületet visszaadó metódust. Definiálja felül a tostring() metódust: ez összefűzve adja vissza a henger sugarát, magasságát és térfogatát. 26/12

A Cylinder osztály kódja package myshapes; public class Cylinder extends PrismShape { private double radius; public Cylinder(int height, double radius) { super(height); this.radius = radius; @Override public double getbasearea() { return radius*radius*math.pi; @Override public String tostring() { return "Cylinder [radius= " + radius + ", getheight()= " + getheight() + ", getvolume()= " + getvolume() + "]"; Cylinder [radius= 3.0, getheight()= 5, getvolume()= 141.3716694115407] 26/13

Feladat Készítsen ugyanebben a csomagban Téglatest osztályt, amely a Hasáb leszármazottja. Adattagjai: az alap két oldala (double) Konstruktor: a három adattagot a paraméterben megkapott értékkel inicializálja Metódusok: Definiálja felül az örökölt alapterületet visszaadó metódus. Definiálja felül a tostring() metódust: ez összefűzve adja vissza a téglatest alapjának oldalait, magasságát és térfogatát. 26/14

A Cuboid osztály kódja package myshapes; public class Cuboid extends PrismShape { private double a; private double b; public Cuboid(int height, double a, double b) { super(height); this.a = a; this.b = b; @Override public double getbasearea() { return a*b; @Override public String tostring() { return "Cuboid [a= " + a + ", b= " + b + ", getheight()= " + getheight() + ", getvolume()= " + getvolume() + "]"; 26/15 Cuboid [a= 2.0, b= 4.0, getheight()= 5, getvolume()= 40.0]

Feladat Alcsomagban készítsen futtatható osztályt, amelyben létrehoz egy hengert majd kiírja az adatait és a térfogatát. Hozzon létre egy téglatestet és írja ki az adatait és a térfogatát, majd azt hogy melyik a nagyobb térfogatú. 26/16

A ShapeTest osztály kódja package myshapes.runnable; import myshapes.*; public class ShapeTest { public static void main(string[] args) { Cylinder cylinder = new Cylinder(5,3); System.out.println(cylinder + " Volume: " + cylinder.getvolume()); Cuboid cuboid = new Cuboid(5, 2, 4); System.out.println(cuboid + " Volume: " + cuboid.getvolume()); if(cuboid.hasbiggervolumethan(cylinder)) System.out.println("\nA téglatest térfogata nagyobb\n"); else System.out.println("\nA henger térfogata nagyobb\n"); Cylinder [radius= 3.0, getheight()= 5, getvolume()= 141.3716694115407] Volume: 141.3716694115407 Cuboid [a= 2.0, b= 4.0, getheight()= 5, getvolume()= 40.0] Volume: 40.0 A henger térfogata nagyobb 26/17

Feladat Készítsen új csomagban egy olyan osztályt, amely hasábokat képes tárolni. Adattagja: Hasáb típusú tömb adattag Konstruktor: paraméterben megkapja a hasábok max. számát és ezzel a mérettel hozza létre a tömböt. Metódusok: 26/18 Setter metódus, amely paraméterben megkap egy indexet és egy hasábot és a tömb adott indexű elemének értékül adja a kapott hasáb referenciáját. Getter metódus, amely visszaadja a tömb méretét, azaz a hasábok max. számát. Getter metódus, amely paraméterként egy indexet kap és visszaadja a tömb adott indexű elemét. Getter metódus, amely visszaadja, hogy hány darab nem null értékű tömbelem van. Getter metódus, amely visszaadja a hasábok átlagos térfogatát. Getter metódus, amely visszaadja a Henger típusú hasábok számát.

A PrismData osztály kódja package mydata; import myshapes.*; public class PrismData { private PrismShape[] prism; Hasáb típusú tömb adattag public PrismData(int numberofprisms) { prism= new PrismShape[numberOfPrisms]; Konstruktor létrehoz egy tömböt public void setprism(prismshape prism, int index) { this.prism[index] = prism; setter egy tömbelemnek ad értéket public int getnumberofprisms() { return prism.length; public PrismShape getprism(int index) { return prism[index]; 26/19 getter tömb mérete getter egy adott indexű elemet ad vissza

A PrismData osztály kódja public int getnumberofnonnulls() { int counter = 0; for (PrismShape p : prism) { if (p!= null) { counter++; return counter; public double getavgvolume() { double volume = 0; for (PrismShape p : prism) { if (p!= null) { volume += p.getvolume(); getter nem null elemek számát adja vissza getter átlagos hasáb térfogat return volume /= getnumberofnonnulls(); 26/20

A PrismData osztály kódja public int getnumberofcylinders() { int counter = 0; for (PrismShape p : prism) { if (p instanceof Cylinder) { counter++; return counter; getter hengerek darabszáma 26/21

Feladat Készítsen ugyanebben a csomagban futtatható osztályt, amelyben létrehoz egy 5 elemű hasáb-tömb objektumot. A tömb elemeinek adjon értéket úgy, hogy legyen null értékű tömbelem is. Két henger és egy téglatest adatait olvassa be. Írja ki az összes hasáb adatát, majd a hasábok átlagos térfogatát, és a hengerek számát. 26/22

A PrismDataTest osztály kódja package mydata; import myshapes.*; public class PrismDataTest { public static void main(string[] args) { PrismData prismarray = new PrismData(5); PrismShape cuboid = new Cuboid(4, 2, 4); PrismShape cylinder1 = new Cylinder(2, 6); PrismShape cylinder2 = new Cylinder(4, 2); prismarray.setprism(cuboid, 0); prismarray.setprism(cylinder1, 1); prismarray.setprism(cylinder2, 2); for (int i = 0; i < prismarray.getnumberofprisms(); i++) { System.out.println(prismarray.getPrism(i)); System.out.println(prismarray.getAvgVolume()); System.out.println(prismarray.getNumberOfCylinders()); 26/23

A PrismDataTest osztály kódja Cuboid [a= 2.0, b= 4.0, getheight()= 4, getvolume()= 32.0] Cylinder [radius= 6.0, getheight()= 2, getvolume()= 226.1946710584651] Cylinder [radius= 2.0, getheight()= 4, getvolume()= 50.26548245743669] null null 102.82005117196728 2 26/24

26/25

VÉGE VÉGE 26/26