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

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

Alkalmazott modul: Programozás

Informatikai Kar. 3. fejezet. alapismeretek. Giachetta Roberto

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

Szoftvertechnológia 4. előadás. Objektumorientált tervezés: általánosítás. Giachetta Roberto. Eötvös Loránd Tudományegyetem Informatikai Kar

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

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

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

Interfészek. PPT 2007/2008 tavasz.

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

Programozási nyelvek Java

Bevezetés a Programozásba II 5. előadás. Objektumorientált programozás és tervezés

Már megismert fogalmak áttekintése

Programozási nyelvek Java

Szoftvertechnológia 3. előadás. Objektumorientált tervezés: alapismeretek. Giachetta Roberto. Eötvös Loránd Tudományegyetem Informatikai Kar

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

Objektumorientált programozás C# nyelven

é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

Alkalmazott modul: Programozás 10. előadás. Objektumorientált programozás: tervezés és megvalósítás

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

C#, OOP. Osztályok tervezése C#-ban

OOP #14 (referencia-elv)

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

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

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

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

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.

1. beadandó feladat: objektumorientált konzol felületű alkalmazás

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

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

Programozási technológia

Objektumorientált programozás C# nyelven

Java VII. Polimorfizmus a Java nyelvben

Gyakorlati vizsgatevékenység A

RESIDENT EVIL CODENAME: NIK

OOP: Java 8.Gy: Gyakorlás

Java VII. Polimorfizmus a Java nyelvben

Programozási nyelvek II.: JAVA

Objektumorientált programozás Java-ban

C++ programozási nyelv

Alkalmazott modul: Programozás 4. előadás. Procedurális programozás: iteratív és rekurzív alprogramok. Alprogramok. Alprogramok.

Programozási nyelvek Java

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

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

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

Informatikai Kar. 4. fejezet. Giachetta Roberto

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

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

2. Beadandó feladat dokumentáció

Webes alkalmazások fejlesztése 7. előadás. Autentikáció és autorizáció (ASP.NET)

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

Bevezetés a Python programozási nyelvbe

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

Globális operátor overloading

OOP. Alapelvek Elek Tibor

3. Osztályok II. Programozás II

Szoftvertechnolo gia gyakorlat

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?

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

Bevezetés a Programozásba II 2. előadás. Adattípusok megvalósítása egységbe zárással. Adattípusok megvalósítása egységbe zárással

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

Eseményvezérelt alkalmazások fejlesztése II 1. előadás. A.NET keretrendszer és a C# programozási nyelv. A.NET keretrendszer Eredete

Kalapácsvetés 2016 szöveges

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

7. K: JAVA alapok Konzultáció

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

openbve járműkészítés Leírás az openbve-hez kapcsolódó extensions.cfg fájl elkészítéséhez

Szoftvertechnológia. Feladatgyűjtemény. Eötvös Loránd Tudományegyetem Informatikai Kar Programozáselmélet és Szoftvertechnológiai Tanszék

2. Beadandó feladat dokumentáció

Bevezetés a programozásba I 10. gyakorlat. C++: alprogramok deklarációja és paraméterátadása

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

Öröklés és Polimorfizmus

Eseményvezérelt alkalmazások fejlesztése II 5. előadás. Windows Forms alkalmazások párhuzamosítása. Giachetta Roberto

Vizuális programozás Komplex számok

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

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

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

Programozási alapismeretek 4.

Programozási technológia

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

Grafikus felhasználói felületek. Dr. Szendrei Rudolf Informatikai Kar Eötvös Loránd Tudományegyetem. Programozási technológia I. Dr.

A C# programozási nyelv alapjai

Webes alkalmazások fejlesztése 12. fejezet. Szolgáltatás alapú kommunikáció (WCF) Giachetta Roberto. Eötvös Loránd Tudományegyetem Informatikai Kar

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

Programozás II. labor

BME MOGI Gépészeti informatika 1.

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

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 2.ELŐADÁS

Levelezős Programozás beugró (Java) december 1.

Programozás I. Első ZH segédlet

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

Programozási nyelvek Java

Programozási nyelvek Java

Fejlett programozási nyelvek C++

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

4. Gy: JAVA osztályok

Swedish store (C#) Óbudai Egyetem, Programozás 2 Mérnök Informatikus szak, BSc Labor. Bedők Dávid v0.1

Átírás:

Eötvös Loránd Tudományegyetem Természettudományi Kar Alkalmazott Modul III 6. gyakorlat : öröklődés és polimorfizmus 2011.10.25. Giachetta Roberto groberto@inf.elte.hu http://people.inf.elte.hu/groberto

Feladat: Készítsünk el egy geometriai alakzatokat megvalósító alkalmazást, amelybe feltölthetünk különböző típusú alakzatokat (vízszintes vonal, függőleges vonal, kör, négyzet). az alakzatokra lehessen együttesen területet és kerültet lekérdezni, valamint meghatározni, mely alakzatok tartalmaznak pontot, illetve eltolni őket egy vektorral annak érdekében, hogy egységes kezelést tudjunk megvalósítani, az összes alakzatot helyezzük egy közös listába ELTE TTK, Alkalmazott modul III 6:2

Elemzés: öröklődést és polimorfizmust kell használnunk egy közös ősosztállyal (Shape), amelyből leszármaznak a speciális osztályok (HorisontalLine, VerticalLine, Circle, Rectangle) mind a négy alakzattípus reprezentálható egy középponttal (_Center), valamint egy sugárral (_Radious), így a reprezentáció megvalósítható az ősosztályban, és az eltolás művelete (Move) is megfogalmazható annak szintjén az ősosztályban definiáljuk valamennyi további műveletet felüldefiniálhatóra, a területlekérdezés (Territory) virtuális, míg a kerületlekérdezés (Perimeter) és a pont tartalmazás (Contains) absztrakt műveletek lesznek ELTE TTK, Alkalmazott modul III 6:3

Elemzés: a megfelelő kezelésért ezen felül megvalósítjuk a pont (Point) és a vektor (Vector) osztályokat is, utóbbi az előbbi egy speciális esete a hibás paraméterek kezelésére definiáljunk egy új kivétel típust (BadParameterException), amelyet a általános kivétel típusból (Exception) származtatunk a főosztályban (Program) megvalósítjuk az alakzatok bekérését (Fill), valamint a programozási tételek végrehajtását (Perimeter, Territory, FindPoint), ezeket egy közös, alakzatokat tartalmazó listán (shapelist) futtatjuk, ebbe polimorfizmussal helyezzük a speciális osztályok példányait ELTE TTK, Alkalmazott modul III 6:4

Tervezés: class GeometricShapes Exception BadParameterException Vector + Vector(Double, Double) + BadParameterException() + BadParameterException(String) Shape Point - _X: Double - _Y: Double + Move(Double, Double) : void + Move(Vector) : void + Point(Double, Double) + X() : Double + Y() : Double -_Center # _Center: Point # _Radious: Double + Contains(Point) : Boolean + Move(Double, Double) : void + Move(Vector) : void + Shape() + Shape(Point, Double) + Center() : Point + Perimeter() : Double + Territory() : Double Program - Fill(List<Shape>) : void - FindPoint(List<Shape>, Point) : Int32 - GetChoice() : Int32 - Main(string[]) : void - Perimeter(List<Shape>) : Double - Territory(List<Shape>) : Double HorisontalLine Circle Rectangle VerticalLine + Contains(Point) : Boolean + HorisontalLine(Point, Double) + HorisontalLine(Point, Point) + Perimeter() : Double + Circle(Point, Double) + Contains(Point) : Boolean + Perimeter() : Double + Territory() : Double + Contains(Point) : Boolean + Rectangle(Point, Double) + Perimeter() : Double + Territory() : Double + Contains(Point) : Boolean + VerticalLine(Point, Double) + VerticalLine(Point, Point) + Perimeter() : Double ELTE TTK, Alkalmazott modul III 6:5

Feladat: Készítsünk el egy alkalmazást, amelyben vonatokat állíthatunk össze. A vonatok kocsikból állnak, melyek lehetnek mozdonyok, személykocsik, teherkocsik, és egy speciális a bicikliszállító. minden kocsiról ismert az azonosítószáma valamint a hossza mozdony esetén ismert a meghajtás típusa (gőz, elektromos, ), valamint a szállítható vagonok száma, személykocsik esetén ismert az ülések száma és az osztály, teherkocsik esetén ismert a kapacitás és az áru típusa a bicikliszállító személy- és teherkocsi egyben, mindig másodosztályú és mindig kerékpárt szállít ELTE TTK, Alkalmazott modul III 6:6

a vonatoknak lehessen lekérdezni a teljes hosszát, az összes ülésszámot és árukapacitást, lehessen vagonokat csatolni és leválasztani, valamint elindítani a vonatot egy megadott célállomásra (persze csak akkor, ha a mozdonyok elbírják a szerelvényt) mozdony csatolásánál ügyeljünk arra, hogy mindig a vonat elejére kapcsoljuk, és csak olyan mozdony engedélyezett, amelynek meghajtása megegyezik a már a vonathoz csatolt mozdonyokéval (ha van olyan) ELTE TTK, Alkalmazott modul III 6:7

Elemzés: felvesszük az absztrakt vasúti kocsi (RailCar) ősosztályt, valamint annak három leszármazottját, a mozdonyt (Locomotive), a személykocsit (Coach) és az áruszállítót (CargoCar) mivel a bicikliszállítónak (BikeCarrierCar) mindkét osztály leszármazottjának kéne lenni, ezért valósítsunk meg két interfészt (IPassengerCarrier, ICargoCarrier), ami lehetővé teszi a közös kezelést, így a bicikliszállító is egy speciális kocsi lesz, amely megvalósítja mindkét interfészt, míg a személyszállító és az áruszállító csak a megfelelőt valósítják meg ELTE TTK, Alkalmazott modul III 6:8

Elemzés: a vonatban egy RailCar lista segítségével tároljuk a kocsikat a vonatnál felvett lekérdező műveletek (PassengerCapacity, CargoCapacity) esetén a megfelelő interfészt fogjuk ellenőriz felüldefiniáljuk az Object-ből örökölt ToString() műveletet mindenhol, a megfelelő szöveges kiíráshoz két vasúti kocsi akkor egyenlő, ha a azonosítójuk megegyezik, ezért felüldefiniáljuk az egyelőség vizsgálatot (Equals) is, és ezt felhasználjuk, amikor egy új kocsit behelyezünk a vonatba ELTE TTK, Alkalmazott modul III 6:9

Tervezés: class Trains Train «enumeration» PropulsionType Steam Diesel Electric Hybrid Locomotive - _PowerCapacity: UInt16 - _Propulsion: PropulsionType + Locomotive(UInt16, UInt32, PropulsionType, UInt16) + ToString() : String + PowerCapacity() : UInt16 + Propulsion() : PropulsionType -_Propulsion RailCar # _Length: UInt32 # _Number: UInt16 IEquatable + Equals(RailCar) : Boolean + Equals(Object) : Boolean + RailCar(UInt16, UInt32) + ToString() : string + Length() : UInt32 -_Cars * - _Cars: List<RailCar> - _Number: UInt16 + AddCar(RailCar) : void + ContainsCar(RailCar) : Boolean + Go(String) : void + RemoveCar(RailCar) : void + ToString() : String + Train(UInt16) + CanMove() : Boolean + CargoCapacity() : UInt32 + Length() : UInt32 + NumberOfCars() : Int32 + PassengerCapacity() : UInt16 «indexer» + this(int32) : RailCar Program - Main(string[]) : void CargoCar - _Capacity: UInt32 - _Goods: String + CargoCar(UInt16, UInt32, UInt32) + ToString() : String + Capacity() : UInt32 + Goods() : String BikeCarrierCar - _Capacity: UInt32 - _NumberOfSeats: UInt16 + BikeCarrierCar(UInt16, UInt32, UInt32, UInt16) + Capacity() : UInt32 + Class() : ClassType + Goods() : String + NumberOfSeats() : UInt16 Coach - _Class: ClassType - _NumberOfSeats: UInt16 + Coach(UInt16, UInt32, ClassType, UInt16) + ToString() : String + Class() : ClassType + NumberOfSeats() : UInt16 -_Class «interface» ICargoCarrier + Capacity() : UInt32 + Goods() : String «interface» IPassengerCarrier + Class() : ClassType + NumberOfSeats() : UInt16 «enumeratio... ClassType FirstClass SecondClass ELTE TTK, Alkalmazott modul III 6:10