A JAVA PROGRAMOZSI NYELVRL Balzs Katalin Marosvsrhely 2019
A JAVA PROGRAMOZÁSI NYELVRŐL Balázs Katalin Marosvásárhely, 2019 május 9.
Az előző órai házifeladat megoldása A Rectangle osztály bővítése 3 új metódussal: 1. Ellenőrző metódus, amely megvizsgálja, hogy egy adott p pont az adott téglalapon belül van-e : public boolean benn. Van. E(Point p) { … } 2. Egy metódus, amely meghatározza az adott pontnak a téglalap oldalaihoz viszonyított legkisebb távolságát: public int legkozelebb. Oldal(Point p) { … } 3. Egy metódus, amely meghatározza az adott pontnak a téglalap csúcsaihoz viszonyított legkisebb távolságát public double legkozelebb. Csucs(Point p) { … }
2. Az objektumorientált programozás alapjai a. Osztályok közötti kapcsolatok b. Öröklődés c. Polimorfizmus d. Absztrakt osztályok e. Interfészek f. Beágyazott osztályok g. Az Object ősosztály
a. Osztályok közötti kapcsolatok Az osztályok közötti kapcsolatok: • ismeretségi viszony • tartalmazási viszony • számosság szerinti viszony egyirányú kétirányú Ø egy az egyhez (one to one association) Ø egy a többhöz (one to many) Ø több a többhöz (many to many) erős (composition) gyenge (aggregation)
b. Öröklődés (inheritance) Egy osztályból további osztályokat származtathatunk. Származtatott osztály: - örökli az alaposztály tulajdonságait - specifikus attribútumokat és metódusokat deklarálhat - újradefiniálhatja az alaposztály bizonyos metódusait (method overriding) Származtatás: - extends kulcsszó segítségével
Példa egyszerű származtatási viszonyra: Person + name: String + age: int + learn (): void + talk (): void Student + year: int Professor + department: String + learn (): void + talk (): void
Származtatás megvalósítása Java-ban: class A { // az alaposztály A (String a) { System. out. println( “Az A osztály konstruktora” + a); } } class B extends A { // a származtatott osztály B (String b) { super (b); // az alaposztály konstruktorának meghívása System. out. println( “A B osztály konstruktora” + b); } } public class Example { // példányosítás a származtatott osztályból public static void main(String[] args) { B b = new B ( “Szia” ); } }
c. Polimorfizmus (többalakúság) Egy B típusú objektum egy adott helyzetben A típusúként jelenik meg (B is A) Csak származtatott osztályok esetében lehetséges! Példa: származtatás négyszög osztály (A) négyzet osztály (B) A négyzet négyszög aktuális példány azonosítása: this referencia öröklődés és polimorfizmus esetében: super referencia
d. Absztrakt osztályok A származtatás és polimorfizmus egyik felhasználási lehetősége: ü Egy rendszeren belül közös alap létrehozása különböző, de azonos alaptulajdonságokkal rendelkező objektumok számára ü Ha az ősosztálynak nem lehetnek példányai absztrakt metódusok absztrakt osztályok abstract kulcsszó Nem adunk meg konkrét implementációt Nem példányosíthatunk belőlük
e. Interfészek Az interfész : • különböző rendszerek közötti kommunikáció (általánosan) • más osztályok hogyan férnek hozzá az adott osztályhoz (OOP) • egy típus deklaráció, amely egy bizonyos viselkedési módot ír le (Java) konstansok nem implementált metódusok interfészt megvalósító (implementáló) osztályok Megjegyzések: Ø egy osztályt nem származtathatunk több különböző alaposztályból Ø de egy osztály több különböző interfészt is megvalósíthat Ø egymástól független osztályok is megvalósíthatják ugyanazt az interfészt
Példa egyszerű interfész alkalmazásra: public interface Resizable { public void resize (Dimension d); } // interfész létrehozása // nem implementált metódus public class Circle implements Resizable { // interfész implementálása public void resize (Dimension d) { // a kör átméretezését megvalósító kód – kötelező! … } } public static void main ( String[] args) { Circle c = new Circle (); c. resize ( new Dimension ( 100, 100 )); Resizable s = new Circle (); s. resize ( new Dimension ( 100, 100 )); }
f. Beágyazott osztályok A beágyazás: osztályokat hozunk létre más osztályokon belül • statikus beágyazott osztályok (static nested classes) • nem statikus beágyazott osztályok = belső osztályok (inner classes) Megjegyzések: Ø a belső osztályok hozzáférhetnek a külső osztály minden adattagjához és metódusához Ø a belső osztályok nem tartalmazhatnak statikus metódusokat Ø példányosításukat mindig a külső osztály példányosítása előzi meg Ø a statikus beágyazott osztályok úgy viselkednek, mint az egyszerű osztályok
Példa a beágyazásra: 1. Statikus beágyazott osztály létrehozása és használata class A { A () { } static class B { // statikus beágyazás B () { } public static void do. It () { System. out. println (“Hello”); } } } public class Example { public static void main ( String [] args) { A. B. do. It (); } } 2. Belső osztály létrehozása és használata class A { A () { } class B { // belső osztály B () { } public void do. It () { System. out. println (“Hello”); } } } public class Example { public static void main ( String [] args) { A a = new A(); A. B b = a. new B(); b. do. It (); } }
g. Az Object ősosztály A „Nagy Közös Előd” – minden osztály közvetlen vagy közvetett leszármazottja ennek az ősosztálynak! Az Object ősosztály metódusai: clone, equals, finalize, get. Class, hash. Code, notify. All, to. String és wait Ø get. Class() - az objektum típusának meghatározása futási időben Ø equals() - az objektumok egyenlőségét vizsgálja Ø Hash. Code() - az objektum hash kódját téríti vissza Ø to. String() - az osztály egy szöveges reprezentációját adja meg Ø finalize() - meghívja a szemétgyűjtőt Ø clone() - az osztály egy már létező példányáról készít másolatot
Gyakorlat A megadott osztálydiagram alapján hozd létre a diagramban feltüntetett csomagokat (core és collection), interfészt (Student. Iterator) és osztályokat (Person, Student. List, Student. List. Impl). Írj programot az osztályok kipróbálására. A Test. Student. List osztály main metódusán belül hozz létre néhány Student objektumot. Hozz létre egy listát (Student. List példány) és add hozzá ehhez a létrehozott Student objektumokat. Egy ciklusban járd be az iterátor segítségével a listát, és írasd ki a konzolra a hallgatókra vonatkozó információkat.
core collection Person #name: String #age: int +Person (String, int) +get. Name (): String +set. Name (String): void +get. Age (): int +set. Age (int): void Student - faculty: String +Student (String, int, String) +get. Faculty (): String +set. Faculty (String): void +to. String (): String Test. Student. List +main (String[] args): static void Student. Iterator +has. More. Elements (): Boolean +next. Element (): Student << inner class>> Student. Iterator. Impl - index: int +Student. Iterator. Impl () +has. More. Elements (): boolean +next. Element (): Student. List - current: int - students: array of Student +Student. List (int size) +add. Student (Student) +get. Enumeration (): Enumeration
Felhasznált irodalom: • Simon Károly: A Java programozás alapjai • Sedgewick R. , Wayne K. - Introduction to Programming in Java, 2 nd edition – 2017 • Nagy Gusztáv – Java programozás– 2007
- Slides: 17