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.



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

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

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

JAVA PROGRAMOZÁS 2.ELŐADÁS

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

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

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

Interfészek. PPT 2007/2008 tavasz.

Programozási nyelvek Java

Programozási alapismeretek 4.

Már megismert fogalmak áttekintése

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

Programozási nyelvek Java

C++ programozási nyelv

és az instanceof operátor

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

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

Objektumorientált programozás C# nyelven

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

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

Programozás módszertan p.1/46

Programozási nyelvek Java

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

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?

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

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.

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. C++ osztályok. Fodor Attila. Pannon Egyetem Műszaki Informatikai Kar Villamosmérnöki és Információs Rendszerek Tanszék

JAVA PROGRAMOZÁS 3.ELŐADÁS

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

Globális operátor overloading

OOP #14 (referencia-elv)

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

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

GENERIKUS PROGRAMOZÁS Osztálysablonok, Általános felépítésű függvények, Függvénynevek túlterhelése és. Függvénysablonok

Elemi Alkalmazások Fejlesztése II.

C++ programozási nyelv Struktúrák a C++ nyelvben

Programozási nyelvek II.: JAVA

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

Osztály és objektum fogalma

ELTE SAP Excellence Center Oktatóanyag 1

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

Objektumorientált paradigma és programfejlesztés Bevezető

Objektumelvű programozás

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

Öröklés és Polimorfizmus

Osztályok. 4. gyakorlat

OOP és UML Áttekintés

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

Programozási nyelvek Java

Objektumorientált szoftverfejlesztés alapjai

Az élet szép, környezetünk tele van fákkal, virágokkal, repdeső madarakkal, vidáman futkározó állatokkal.

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

Java és web programozás

Java és web programozás

Programozás 1. 2.gyakorlat

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

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

C++ programozási nyelv

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

Függőség injekció Konstantinusz Kft 2010

Bevezetés a Python programozási nyelvbe

Enterprise JavaBeans. Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem. Az Enterprise JavaBeans

Származtatási mechanizmus a C++ nyelvben

Objektumorientált programozás C# nyelven

OOP #1 (Bevezetés) v :39:00. Eszterházy Károly Főiskola Információtechnológia tsz. Hernyák Zoltán adj.

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

Programozás II gyakorlat. 6. Polimorfizmus

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

Adatstruktúrák, algoritmusok, objektumok

Objektumok inicializálása

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

OOP. Alapelvek Elek Tibor

Java VII. Polimorfizmus a Java nyelvben

Eseménykezelés. Szoftvertervezés és -fejlesztés II. előadás. Szénási Sándor.

Java és web programozás

Programozás III. - NGB_IN001_3

Programozás módszertan

C++ programozási nyelv

TestLine - OO Programozás alapjai Minta feladatsor

Enterprise JavaBeans 1.4 platform (EJB 2.0)

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?

III. OOP (objektumok, osztályok)

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

1. Alapok. Programozás II

OOP: Java 8.Gy: Gyakorlás

Java VII. Polimorfizmus a Java nyelvben

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

Google C++ style guide

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

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

ZH mintapélda. Feladat. Felület

Pénzügyi algoritmusok

Programozási technológia

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

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

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

Felhasználó által definiált adattípus

Programozási nyelvek II.: JAVA

Átírás:

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 III Az egyszerűség kedvéért mindegyiket a nevük alapján regisztráljuk, és egy kérdésre adott válaszként dől el, hogy milyen sportágat űznek. FACTORY, KOMPOZÍCIÓ és EGYEBEK MEGOLDÁSRÉSZLET FONTOS ÉSZREVÉTEL Vezérlő osztály: if(sportag == 1) { név bekérése; szül_év bekérése; szem_szám bekérése; az ugró létrehozása; if(sportag == 2) { név bekérése; szül_év bekérése; szem_szám bekérése; az focista létrehozása; if(sportag == 3) { név bekérése; szül_év bekérése; szem_szám bekérése; az futó létrehozása Egy jó programban NINCS kódismétlés!!! 1

MEGOLDÁSRÉSZLET FACTORY Kevésbé fapadosan : egy újabb osztály közbeiktatásával Ez az ú.n. gyártó függvény (Factory Method) tervezési minta. A minta célja: egy objektum létrehozása különböző információk alapján. bemeneti információ: az abc. Ez alapján a gyártófüggvény az x ősosztály valamelyik leszármazottját (xy vagy xz) példányosítja. A getclass hívására létrejövő objektum tényleges típusáról többnyire nem is kell tudnia a felhasználónak. A PÉLDA MEGOLDÁSA FACTORY-VAL Vezérlő osztály: Még kevésbé fapadosan ELEGÁNS MEGOLDÁS Javasolt felépítés: interface (esetleg extends Comparable) az interface-t implementáló abstract osztály az abstract osztályt kiterjesztő további osztályok 2

TERVEZÉSI MINTÁK TERVEZÉSI MINTÁK CSOPORTOSÍTÁSA Gyakran előfordul, hogy a fejlesztés során hasonló feladatokat kell megoldani. A tervezési minták olyan objektum alapú megoldásokat, megoldásvázlatokat jelentenek, amelyek már bizonyítottak a gyakorlatban, és amelyeket érdemes felhasználni a saját tervezés során. Ezek felhasználásával rugalmasabb, könnyebben újrahasznosítható, módosítható alkalmazásokat készíthetünk. TERVEZÉSI MINTÁK Létrehozási minták célja: Az objektumok létrehozása során speciális igényeket is ki lehessen elégíteni. Szerkezeti minták célja: Annak leírása, hogy hogyan lehet komplexebb struktúrákat létrehozni; jól használható program felületet nyújtó öröklési hierarchiát kialakítani; az objektumok összeillesztésének módját meghatározni. TERVEZÉSI MINTÁK Viselkedési minták célja: Az objektumok egymás közti kommunikációjának segítése. Annak, aki programozói állást szeretne: Erich Gamma, Ralph Johnson, Richard Helm, John Vlissides: Programtervezési minták (Kiskapu kiadó) Rövidke kedvcsináló bevezető: Nagy Gusztáv: Java programozás http://nagygusztav.hu/java-programozas 3

Probléma: FELADATMEGOLDÁS ÜGYESEBBEN Ha az 5 fül 5 különböző panel-osztály, akkor állandóan át kell adogatni egymásnak a bankkártyák listáját. SINGLETON (EGYKE) TERVEZÉSI MINTA Olyankor alkalmazható, amikor garantáltan egyetlen példányt akarunk létrehozni az osztályból. (Rugalmasabb, mint a statikus változó, mert bővíthető.) Megoldás: a/ statikus változó b/ singleton tervezési minta SINGLETON (EGYKE) TERVEZÉSI MINTA MÉG EGY SINGLETON PÉLDA Használata: vagy: Ekkor mindent implementálnunk kell. 4

MÉG EGY SINGLETON PÉLDA MÉG EGY PÉLDA Használata: MÁSIK PÉLDA Vannak vonatok. Minden vonatot jellemez egy egyedi azonosító, a kezdőállomása, végállomása, indulási ideje. Az állomások a nevükkel és koordinátáikkal adhatók meg. A vonat konstruktorának paraméterei: Az indulási időn kívül két Varos típusú objektum, ahol Varos egy olyan osztály, amely leírja egy város tulajdonságait, pl. a város nevét, földrajzi koordinátáit. Vagyis NEM string varosnev, int x, int y! (hasonlóan a celebes példához) OBJEKTUM KOMPOZÍCIÓ Az objektumorientált programozás magasabb lépcsőfoka, melynek lényege, hogy olyan osztályokat hozunk létre, melyek más osztályokkal paraméterezhetőek. Így olyan építőelemeket tudunk kialakítani, amelyeket jól kombinálhatunk egymással, és eltérő variációikkal eltérő működést érhetünk el. Pl: public class Vonat(){ private Varos induloallomas, celallomas; public Vonat(Varos idulo, Varos cel){ this.induloallomas = indulo;. 5

KOMPOZÍCIÓ ÁLTALÁBAN KOMPOZÍCIÓ vs AGGREGÁCIÓ Objektumok közötti tartalmazási reláció: gyenge tartalmazás: a rész kivehető az egészből erős tartalmazás: a rész nem vehető ki az egészből, a tartalmazó nem létezhet a tartalmazott nélkül aggregáció kompozíció Kompozíció: nem távolítható el a benne lévő obj., mert különben a külső is megsemmisülne. Forrás: http://stackoverflow.com/questions/11881552/implementationdifference-between-aggregation-and-composition-in-java http://javarevisited.blogspot.hu/2014/02/ifference-between-association-vscomposition-vs-aggregation.html class GyorsuloMozgas extends Mozgas{ private int gyorsulas; KOMPOZÍCIÓ vs ÖRÖKLÉS public GyorsuloMozgas(String haladasiirany, int sebesseg) { super(haladasiirany, sebesseg); A meglévő osztály bővítése helyett adjunk az új osztályhoz egy privát mezőt, amely a meglévő osztály egy példányára hivatkozik. Ez kompozíció, mert a meglévő osztály az új osztály egy komponensévé válik. class GyorsuloMozgas { private int gyorsulas, sebesseg; private String haladasiirany; private Mozgas m ; KOMPOZÍCIÓ vs ÖRÖKLÉS public GyorsuloMozgas(int gyorsulas, int sebesseg, String haladasiirany) { this.gyorsulas = gyorsulas; this.sebesseg = sebesseg; this.haladasiirany = haladasiirany; m = new Mozgas(haladasiIrany,sebesseg); public String irany() { return m.irany().haladasiirany; delegálás (továbbítás) delegált metódus 6

KOMPOZÍCIÓ vs ÖRÖKLÉS Úgy tűnik, hogy a kompozíció helyettesítheti az öröklést, de mégsem az a fő kérdés, hogy kompozíció vs öröklődés, hanem az, hogy egy adattag primitív típus-e, vagy objektum Javaslatok: KOMPOZÍCIÓ vs ÖRÖKLÉS Csak akkor használjunk öröklődést, ha egészen biztosak vagyunk benne, hogy az alkalmazás egész életciklusában is a (ez egy ) kapcsolat van, és ez meg is marad a két osztály között. Pl.: class Jarmu{ private Motor m; public Jarmu(Motor m){ this.m = m; Pl: személy alkalmazott az alkalmazott egy szerep, amit a személy játszik; mi van, ha munkanélkülivé válik? mi van, ha egyszerre főnök is és alkalmazott is? KOMPOZÍCIÓ vs ÖRÖKLÉS MÉG EGY PÉLDA Javaslatok: Ne használjunk öröklést, ha kizárólag a kódismétlés elkerülése vagy a polimorfizmus a cél, és nincs tényleges is a kapcsolat az osztályok között. 1. esetben sima kompozíció 2. esetben interfészekkel megtámogatott kompozíció Vannak hengerek, rudak, csövek definiáljuk az osztályokat kompozíció segítségével, és teszteljük egy-egy példánnyal. Megoldás: Mintapeldak\HengerCsoKompozicioval De mindez csak a vájt fülűekre vonatkozik, azokra, akik már ragyogóan tudják az öröklődést és tényleg különbséget tudnak tenni a kettő között!! 7

NEM IDE TARTOZIK, DE FONTOS NEM IDE TARTOZIK, DE FONTOS Sztárhírek példa vélemény: a névbe írhatunk számot is. Kérdés: hogy lehetne kiküszöbölni? Reguláris kifejezések használatával. NÉHÁNY IRODALOM http://www.artima.com/designtechniques/compoinh3.html http://www.javaworld.com/javaworld/jw-11-1998/jw-11- techniques.html http://www.javaworld.com/javaworld/jw-06-2001/jw-0608- java101.html http://www.javaworld.com/javaworld/jw-12-1998/jw-12- techniques.html?page=3 Google 8