Programozási nyelvek Java

Hasonló dokumentumok
Programozási nyelvek Java

é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

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

Osztályok. 4. gyakorlat

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

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

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

JAVA PROGRAMOZÁS 3.ELŐADÁS

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

JAVA PROGRAMOZÁS 2.ELŐADÁS

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?

Programozási nyelvek Java

Java VII. Polimorfizmus a Java nyelvben

Java VII. Polimorfizmus a Java nyelvben

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

Virtuális függvények (late binding)

Interfészek. PPT 2007/2008 tavasz.

Bevezetés a programozásba előadás: Öröklődés

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

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

Öröklés és Polimorfizmus

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

Objektumorientált programozás C# nyelven

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

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

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

Programozási nyelvek Java

C++ programozási nyelv

Visual C++ osztály készítése, adattagok, és metódusok, láthatóság, konstruktor, destruktor. Objektum létrehozása, használata, öröklés.

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

Programozás. C++ osztályok. Fodor Attila. Pannon Egyetem Műszaki Informatikai Kar Villamosmérnöki és Információs Rendszerek Tanszék

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

Objektumorientált programozás C# nyelven

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

C++ programozási nyelv

Objektumelvű alkalmazások fejlesztése 6. gyakorlat. Öröklődés, polimorfizmus. Öröklődés Kódismétlődés objektum-orientált szerkezetben

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

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

Már megismert fogalmak áttekintése

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

Java és web programozás

OOP #14 (referencia-elv)

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

Miután létrehoztuk, szeretnénk neki beszédesebb nevet adni. A név változtatásához a következőt kell tenni:

Programozás BMEKOKAA146. Dr. Bécsi Tamás 5. előadás

Programozási nyelvek II.: JAVA

TestLine - OO Programozás alapjai Minta feladatsor

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

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

Programozási technológia

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

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.

Programozás módszertan p.1/46

1. Mi a fejállományok szerepe C és C++ nyelvben és hogyan használjuk őket? 2. Milyen alapvető változókat használhatunk a C és C++ nyelvben?

OOP és UML Áttekintés

Programozási technológia

OOP. Alapelvek Elek Tibor

Web-technológia PHP-vel

III. OOP (objektumok, osztályok)

JUnit. JUnit használata. IDE támogatás. Parancssori használat. Teszt készítése. Teszt készítése

Objektumok inicializálása

Bevezetés a programozásba Előadás: A const

Java és web programozás

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

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

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

Programozás I. Első ZH segédlet

Bevezetés a programozásba Előadás: Objektumszintű és osztályszintű elemek, hibakezelés

PHP5 Új generáció (2. rész)

Programozás II gyakorlat. 6. Polimorfizmus

Programozási nyelvek Java

3. gyakorlat. Objektumorientált programozás

Interfészek. Programozás II. előadás. Szénási Sándor.

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

Bevezetés a Python programozási nyelvbe

Generikus osztályok, gyűjtemények és algoritmusok

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

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

Programozás II gyakorlat. 4. Öröklődés

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

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

Objektumorientált Programozás C++ ADATSZERKEZETEK ÉS ALGORITMUSOK 2. GYAKORLAT

Objektumorientált paradigma és programfejlesztés Bevezető

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

Concurrency in Swing

Vé V g é r g e r h e a h j a tá t s á i s s z s ál á ak a Runnable, Thread

Alkalmazott modul: Programozás 11. előadás. Objektumorientált programozás: öröklődés

A szemantikus elemzés helye. A szemantikus elemzés feladatai. A szemantikus elemzés feladatai. Deklarációk és láthatósági szabályok

Objektumelvű programozás

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

Algoritmusok és adatszerkezetek II.

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

Bevezetés a programozásba II. 8. Előadás: Osztályok, objektumok, osztályszintű metódusok

ELTE SAP Excellence Center Oktatóanyag 1

Komponensek együttműködése web-alkalmazás környezetben. Jónás Richárd Debreceni Egyetem T-Soft Mérnökiroda KFT

Objektumorientált programozás C# nyelven

Számítógép és programozás 2

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

Átírás:

Programozási nyelvek Java Kozsik Tamás előadása alapján Készítette: Nagy Krisztián 8. előadás Öröklődés - megnyitunk egy osztályt egy másik előtt zárt egységeket szeretünk készíteni (láthatósági kérdés: protected) - A gyakorlatban általában hozzáférés kell a bázisosztály protected adataihoz (mező, metódus,) - Veszély: a felüldefiniálással felborítható a bázisosztály eredeti viselkedése (funkciója) - Gyakran más eszközt választunk, mint az öröklődés class Base{ public void serve(){ class Sub extends Base{ Sub s = new Sub(); s.serve(); // Lehetnek nem várt következményei! Másképp: class Forwarder{ private Base b = new Base(); public void serve(){ b.serve(); Forwarder f = new Forwarder(); f.serve(); Ha sok művelet van a Base-ben, mindegyiket beírni bosszantó, a kód is csúnya lesz. Örökléssel megkapnám mindet. Base és Forwarder ugyanolyan.

Interface interface Service{ public void serve(); // public abstract void serve(); Nem inicializálhatok, nincs konstruktora. Általában implementáció nélküli műveleteket teszünk bele. class Base implements Service{ public void serve(){ // meg kell valósítani az interface működését new Base.serve(); class Sub extends Base (implements Service){ van közük egymáshoz new Sub().serve(); // A Sub osztály serve művelete a Service interface-ből jön class Forwarder implements Service { private Base b = new Base(); public void serve() { b.serve(); new Forwarder().serve(); 1) Object 2) Object Service Base Base Forwarder Sub Forwarder Sub Irányított fa Irányított körmentes gráf (DAG) (directed acyclic graph)

class interface Object extends irányítatlan körök sincsenek. parciális rendezés implements összeköti a két világot extends irányított körök nem, de irányítatlan körök lehetnek parciális rendezés Példa: interface I extends { : interface-ek class: Nem lehet több szülőosztály, de implements lehet több! interface: lehet több szülőinterface osztály implements interface Lehet több interface (irányítatlan körök) Az interface egy típus, de objektumot nem hozhatunk belőle létre Service s; // statikus típus s = new Service(); // hibás! s = new Base(); // dinamikus típus (altípusos polimorfizmus) (mint reláció) Szeretjük úgy használni, hogy interface statikus típus, dinamikus típus pedig egy osztály.

Absztrakt metódus: Olyan metódusok, melyeket nem definiálunk, nincs törzsük, csak deklaráltuk őket. Az interface-kben csak absztrakt metódusok lehetnek és public static final mezők (ez utóbbi ritka!) A metódusok public-ok ( Nem static, mert nem lenne példányszintű és nem final, mert nem lehetne felüldefiniálni (definiálni) ) interface I extends { public static final int x = 1; int y = 2; // automatikusan public static final lesz! void serve(); // automatikusan public abstract lesz! [public] interface - más csomagokban is hozzáférhető lesz A megvalósító osztály definíciót [törzset] rendel az interfaceben deklarált metódusokhoz. dinamikus kötés Megvalósítás szabályai ugyanolyanok, mint a felüldefiniálásé. (később) Túlterhelés Metódus: több ugyanolyan nevű metódus lehet osztályon belül, más paraméterlistával. public Base implements Service{ public void serve() { // public int serve(){ ez a különbség nem elég a túlterheléshez public int serve(int x){ // ez már igen! System.out.print(x); serve(); // a paraméter(ek)ből derűl ki melyik hívódik meg return x; A visszatérési érték típusa nem határozza meg. (hívás után nem kell használnom) Felüldefiniálás: futás közben dől el, hogy ugyanannak a műveletnek melyik változata fusson. Túlterhelés: Fordítási időben, nem ugyanannak a metódusnak!

döntés mik közül választhatok felüldefiniálás túlterhelés futási időben (dinamikus kötés alapján) a példánymetódus hívását fogadó objektum dinamikus típusa szerint ugyanazon metódus különböző törzsei közül fordítási időben (statikus típus alapján) az aktuális paramétereknek megfelelően statikus típus alapján egy osztály ugyanazon nevű, de különböző metodusai közül class C{ void m(base b){ b.serve(); void m(sub s){ s.serve(); Sub-beli felüldefiniálás miatt, dinamikus kötés A fentebbi m() esetén túlterhelésről beszélünk, mivel a formális paraméterekben deklarált típusok eltérnek. (Egyik Base a másik Sub) Base b = new Sub(); new C().m(b); // Túlterhelés m(base b) re (HA van void m(service k), ez is jó lenne, de nem olyan pontos, mint az m(base b)) class X{ void m(base, Sub ){ void m(sub, Base ){ m(new Sub(), new Sub()) egyformán pontatlan, fordítási hiba! NE terheljünk túl altípuson keresztül! (, hogy csak bázis-altípus különbségek vannak)