Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Podobné dokumenty
Úvod do programovacích jazyků (Java)

typová konverze typová inference

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Programování v Javě I. Leden 2008

Programování v Javě I. Únor 2009

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

1. Programování proti rozhraní

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Abstraktní třída a rozhraní

Třídy, polymorfismus. A0B36PR2-Programování 2 Fakulta elektrotechnická České vysoké učení technické

Seminář Java II p.1/43

Teoretické minimum z PJV

Seminář Java IV p.1/38

Úvod do programovacích jazyků (Java)

1. Dědičnost a polymorfismus

Úvod do programovacích jazyků (Java)

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

4. ZÁKLADNÍ POJMY Z OBJEKTOVĚ ORIENTOVANÉHO PROGRAMOVÁNÍ

Generické programování

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

3. Třídy. Základní pojmy objektového programování. Třídy

TŘÍDY POKRAČOVÁNÍ. Události pokračování. Příklad. public delegate void ZmenaSouradnicEventHandler (object sender, EventArgs e);

RMI Remote Method Invocation

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

10 Generické implementace

PŘETĚŽOVÁNÍ OPERÁTORŮ

Výčtový typ strana 67

Třídy. Instance. Pokud tento program spustíme, vypíše následující. car1 má barvu Red. car2 má barvu Red. car1 má barvu Blue.

PREPROCESOR POKRAČOVÁNÍ

8 Třídy, objekty, metody, předávání argumentů metod

Základy objektové orientace I. Únor 2010

7. přednáška - třídy, objekty třídy objekty atributy tříd metody tříd

20. Projekt Domácí mediotéka

7. Datové typy v Javě

Obsah přednášky. 12. Dokumentace zdrojového kódu Tvorba elektronické dokumentace UML. Co je diagram tříd. Ing. Ondřej Guth

Konstruktory a destruktory

Seznamy a iterátory. Kolekce obecně. Rozhraní kolekce. Procházení kolekcí

Abstraktní datové typy: zásobník

9. přednáška - třídy, objekty

boolean hasnext() Object next() void remove() Kolekce

Počítačové laboratoře bez tajemství aneb naučme se učit algoritmizaci a programování s využitím robotů CZ.1.07/1.3.12/

Bridge. Známý jako. Účel. Použitelnost. Handle/Body

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

Osnova přednášky. Programové prostředky řízení Úvod do C# II. Přístup ke členům. Členy (Members)

Dynamicky vázané metody. Pozdní vazba, virtuální metody

Paměť počítače. alg2 1

Principy objektově orientovaného programování

Reflexe. Aplikační programování v Javě (BI-APJ) - 8 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha

Výchozí a statické metody rozhraní. Tomáš Pitner, upravil Marek Šabo

Parametrizované třídy Generics generické třídy. JDK zavádí mimo jiné tzv. parametrizované třídy - generics

Java a XML. 10/26/09 1/7 Java a XML

Abstraktní třídy, polymorfní struktury

RMI - Distribuované objekty v Javě

OMO. 4 - Creational design patterns A. Singleton Simple Factory Factory Method Abstract Factory Prototype Builder IoC

Viditelnost (práva přístupu) Tomáš Pitner, upravil Marek Šabo

9. Polymorfismus a rozhraní

Obsah přednášky 9. Skrývání informací. Skrývání informací. Zapouzdření. Skrývání informací. Základy programování (IZAPR, IZKPR) Přednáška 9

UJO Framework. revoluční architektura beans. verze

11 Diagram tříd, asociace, dědičnost, abstraktní třídy

Komponenty v.net. Obsah přednášky

KTE / ZPE Informační technologie

Základní pojmy. Úvod do programování. Základní pojmy. Zápis algoritmu. Výraz. Základní pojmy

Algoritmizace a programování

Statické proměnné a metody. Tomáš Pitner, upravil Marek Šabo

Jazyk C# (seminář 6)

11. Dědičnost. Dědičnost strana 103

IRAE 07/08 Přednáška č. 2. atr1 atr2. atr1 atr2 -33

Google Web Toolkit. Martin Šurkovský, SUR března Katedra informatiky

Class loader. každá třída (java.lang.class) obsahuje referenci na svůj class loader. Implementace class loaderu

Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost rozhraním a výjimkám.

Jazyk C++ I. Polymorfismus

Více o konstruktorech a destruktorech

Úvod Třídy Rozhraní Pole Konec. Programování v C# Hodnotové datové typy, řídící struktury. Petr Vaněček 1 / 39

NetBeans platforma. Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti

3. Je defenzivní programování technikou skrývání implementace? Vyberte jednu z nabízených možností: Pravda Nepravda

Datové struktury. alg12 1

Java Enum Java, zimní semestr ,2017 1

Pokročilé programování v jazyce C pro chemiky (C3220) Operátory new a delete, virtuální metody

Objektově orientované programování v PHP 5. Martin Klíma

OSGi. Aplikační programování v Javě (BI-APJ) - 6 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat.

Tabulka symbolů. Vazba (binding) Vazba - příklad. Deklarace a definice. Miroslav Beneš Dušan Kolář

Úvod do programování - Java. Cvičení č.4

public class Karel { private int position; public boolean issmiling; public int getposition() { return position;

Java Výjimky Java, zimní semestr

IRAE 07/08 Přednáška č. 1

Třída jako zdroj funkcí

Objekty v PHP 5.x. This is an object-oriented system. If we change anything, the users object.

Fronta (Queue) Úvod do programování. Fronta implementace. Fronta implementace pomocí pole 1/4. Fronta implementace pomocí pole 3/4

Využití OOP v praxi -- Knihovna PHP -- Interval.cz

Mělká a hluboká kopie

Dědění, polymorfismus

URČITÝM ZPŮSOBEM PODOBNÉ

Java - řazení objektů

Programovací jazyk Java

Transkript:

Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 1/29

1/2 Abstraktní třída bývá používána jako nadtřída jiných tříd obsahující společné atributy a metody těchto tříd. Nemůžeme vytvořit instanci abstraktní třídy. Můžeme ale vytvořit instanci neabstraktní podtřídy. c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 2/29

2/2 jsou deklarovány klíčovým slovem abstract. abstract class Vehicle { / / a b s t r a k t n i t r i d a class Car extends Vehicle { / / n e a b s t r a k t n i t r i d a Abstraktní třídu můžeme použít jako typ reference na instanci neabstraktní třídy. Vehicle a = new Car ( ) ; a. move( Vehicle.MOVE_UP) ; Nemůžeme vytvořit instanci abstraktní třídy. Vehicle b = new Vehicle ( ) ; / / Chyba p r i prekladu c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 3/29

Abstraktní metody 1/2 mohou obsahovat abstraktní metody. Tyto metody jsou označeny klíčovým slovem abstract a mají pouze hlavičku, tělo je nahrazeno ;. abstract class Vehicle { abstract i n t move ( i n t d i r e c t i o n ) ; / / a b s t r a k t n i m. Každá abstraktní metoda musí být implementována v neabstraktní třídě. class Car extends Vehicle { i n t move( i n t d i r e c t i o n ) { / / implementace c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 4/29

Abstraktní metody 2/2 Každá třída obsahující neimplementovanou abstraktní metodu (přímo nebo zděděnou) musí být deklarována jako abstraktní. Abstraktní metody jsou volány jako jiné metody - volána je implementace metody v podtřídě. Vehicle [ ] v e h i c l e s = new Vehicle [ 1 0 0 ] ; v e h i c l e s [ 0 ] = new Car ( ) ; v e h i c l e s [ 1 ] = new Truck ( ) ; for ( i n t i = 0 ; i < v e h i c l e s. l e n g t h ; i + + ) { / / volame metodu move ( ) p r i s l u s n e t r i d y v e h i c l e s [ i ]. move (MOVE_UP) ; c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 5/29

1/6 je pojmenovaná kolekce deklarací metod. V rozhraní můžeme rovněž deklarovat konstanty. Definice rozhraní se podobá definici třídy, ale místo klíčového slova class používáme klíčové slovo interface. interface Moveable { i n t move( i n t d i r e c t i o n ) ; / / metoda i n t MOVE_UP = 0 ; / / konstanty Definice metod je jako definice abstraktních metod až na vynechání klíčového slova abstract. c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 6/29

Rozhraní 2/6 Úvod do programovacích jazyků (Java), 7 Pokud třída poskytuje implementaci metod rozhraní, říkáme že třída implementuje rozhraní. class Car implements Moveable { public i n t move ( i n t d i r e c t i o n ) { / / implementace metody r o z h r a n i c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 7/29

Rozhraní 3/6 Úvod do programovacích jazyků (Java), 7 Reference, která ukazuje na objekt implementující dané rozhraní může být použita stejně jako reference na instanci. Car c = new Car ( ) ; Moveable m = c ; m. move(move_up) ; m. randommove ( ) ; / / chyba prekladu / / randommove ( ) neni deklarovana / / v r o z h r a n i Moveable Můžeme volat pouze metody deklarované v rozhraní. c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 8/29

Rozhraní 4/6 Úvod do programovacích jazyků (Java), 7 Rozhraní definuje protokol chování, které může být implementováno libovolnou třídou v hierarchii tříd. Rozhraní deklaruje množinu metod, ale neimplementuje tyto metody. Třída implementující rozhraní musí implementovat všechny metody rozhraní. Můžeme vytvořit hierarchii rozhraní podobnou hierarchii tříd Mluvíme o nad-rozhraní (superinterfaces) a pod-rozhraní (subinterfaces). interface Flyable extends Moveable { void s e t A l t i t u d e ( double a l t i t u d e ) ; c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 9/29

5/6 Třída může implementovat více než jedno rozhraní. Jména různých rozhraní jsou oddělena,. class H o v e r c r a f t Car implements Movable, Flyable { Metody deklarované v rozhraní jsou implicitně public a abstract. Není možné toto změnit. Atributy deklarované v rozhraní jsou implicitně public, static a final. Jedná se tedy o konstanty. Není možné toto změnit. Když třída implementuje rozhraní, musí implementovat všechny metody nebo musí být deklarována jako abstraktní. c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 10/29

Rozhraní 6/6 Úvod do programovacích jazyků (Java), 7 Rozhraní vs Abstraktní třída Rozhraní neimplementuje metody, zatímco abstraktní třída může. Rozhraní nemůže deklarovat statické metody, zatímco abstraktní třída může. Rozhraní nemůže deklarovat instanční proměnné, zatímco abstraktní třída může. Rozhraní nemůže deklarovat statické proměnné které nejsou final, zatímco abstraktní třída může. Třída může implementovat více rozhraní, ale může dědit z nejvýše jedné třídy. Rozhraní není součástí hierarchie tříd, libovolná třída může implementovat stejné rozhraní. c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 11/29

1/3 jsou deklarovány klíčovým slovem final. f i n a l i n t MOVE_UP = 1 ; Hodnota takto deklarované konstantě může být přiřazena pouze při deklaraci. V případě instační proměnné také v konstruktoru. Pokud se pokusíme přiřadit hodnotu na jiném místě, překladač nahlásí chybu. MOVE_UP = 1 0 ; / / Chyba p r i prekladu často deklarujeme jako třídní (static), v tomto případě existuje pouze jedna kopie pro všechny instance. s t a t i c f i n a l i n t NUMBER = 1 0 ; c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 12/29

2/3 Konvence: Jména konstant zapisujeme velkýmy znaky a znaky _. Často používaným případem použití konstant je reprezentace konečné množiny hodnot. Každému prvku množiny je přiřazeno celé číslo celočíselná konstanta. V kódu používáme názvy deklarovaných konstant místo celočíselných hodnot. Vyvarujeme se možných chyb a kód získá na čitelnosti. c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 13/29

3/3 Konvence: konstanty se stejné množiny mají společný prefix. / / smer pohybu v o z i d l a v CarGame public f i n a l s t a t i c i n t DIRECTION_UP = 0, DIRECTION_DOWN = 1, DIRECTION_LEFT = 2, DIRECTION_RIGHT = 3 ; c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 14/29

Rozhraní, příklad 1/2 Rozhraní Enumeration z Java API slouží pro iteraci prvky datové struktury. public interface Enumeration { boolean hasmoreelements ( ) ; Object nextelement ( ) ; c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 15/29

Rozhraní, příklad 2/2 import java. u t i l. ; public s t a t i c void main ( S t r i n g args [ ] ) { Vector v = new Vector ( ) ; v. add (new I n t e g e r ( 1 ) ) ; v. add (new Double ( 2. 2 ) ) ; v. add (new I n t e g e r ( 3 ) ) ; for ( Enumeration e = v. elements ( ) ; e. hasmoreelements ( ) ; ) { System. out. p r i n t l n ( e. nextelement ( ) ) ; c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 16/29

, příklad CarGame, Vehicle.java 1/4 / Vehicle. java Vozidlo. Michal Kratky 19.11.2006 / package cargame ; public abstract class Vehicle { i n t mx = 0, my = 0 ; / / pozice GameArea mgamearea ; / / ukazatel na h r a c i pole c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 17/29

, příklad CarGame, Vehicle.java 2/4 public f i n a l s t a t i c i n t DIRECTION_UP = 0, DIRECTION_DOWN = 1, DIRECTION_LEFT = 2, DIRECTION_RIGHT = 3 ; public f i n a l s t a t i c i n t MOVE_LEGAL = 0, MOVE_OUT = 1, MOVE_CRASH = 2, MOVE_UNSUPPORTED = 3 ; c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 18/29

, příklad CarGame, Vehicle.java 3/4 public Vehicle ( i n t x, i n t y, GameArea gamearea ) { public Vehicle ( ) { public i n t getx ( ) { return mx; public i n t gety ( ) { return my; c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 19/29

, příklad CarGame, Vehicle.java 4/4 / / Nahodny pohyb v o z i d l a o jednu p o z i c i. public i n t RandomMove ( ) { / / Pohyb v o z i d l a ve smeru o jednu p o z i c i. public i n t Move ( i n t d i r e c t i o n ) { abstract void p r i n t ( ) ; c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 20/29

, příklad CarGame, Car.java 1/1 package cargame ; public class Car extends Vehicle { public Car ( i n t x, i n t y, GameArea gamearea ) { mgamearea = gamearea ; mx = x ; my = y ; public Car ( ) { void p r i n t ( ) { System. out. p r i n t ( # ) ; c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 21/29

, příklad CarGame, Truck.java 1/3 package cargame ; public class Truck extends Vehicle { i n t mlight ; public s t a t i c f i n a l i n t LIGHT_NONE = 0, LIGHT_RED = 1, LIGHT_BLUE = 2 ; public Truck ( i n t x, i n t y, GameArea gamearea ) { super ( x, y, gamearea ) ; mlight = LIGHT_NONE ; c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 22/29

, příklad CarGame, Truck.java 2/3 / / nastav nahodne s v e t l o auta public void setrandomlight ( ) { / / nastav s v e t l o auta public void s e t L i g h t ( i n t l i g h t ) { public i n t g e t L i g h t ( ) { c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 23/29

, příklad CarGame, Truck.java 3/3 public void p r i n t ( ) { char symbol = o ; i f ( mlight = = LIGHT_RED) { symbol = R ; else i f ( mlight = = LIGHT_BLUE) { symbol = B ; System. out. p r i n t ( symbol ) ; c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 24/29

, příklad CarGame, GameArea.java 1/4 package cargame ; public class GameArea { i n t mwidth, mheight ; / / s i r k a a vyska pole Vehicle marea [ ] [ ] ; / / h r a c i pole public GameArea ( i n t width, i n t h e i g h t ) { mwidth = width ; mheight = h e i g h t ; marea = new Vehicle [ width ] [ h e i g h t ] ; c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 25/29

, příklad CarGame, GameArea.java 2/4 i n t Move( Vehicle vehicle, i n t oldx, i n t oldy, i n t newx, i n t newy ) { i n t move = set (newx, newy, v e h i c l e ) ; i f ( move = = Vehicle.MOVE_LEGAL ) { marea [ oldx ] [ oldy ] = null ; return move ; public Vehicle get ( i n t x, i n t y ) { return marea [ x ] [ y ] ; c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 26/29

, příklad CarGame, GameArea.java 3/4 public i n t set ( i n t x, i n t y, Vehicle v e h i c l e ) { i n t move = MOVE_LEGAL; i f ( x >= 0 && x < mheight && y >=0 && y < mwidth ) { i f ( get ( x, y )! = null ) { move = MOVE_CRASH ; else { marea [ x ] [ y ] = v e h i c l e ; else { move = Vehicle.MOVE_OUT ; return move ; c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 27/29

, příklad CarGame, GameArea.java 4/4 public void p r i n t ( ) { / / V y t i s k n i pole System. out. p r i n t ( "GameArea : \ n " ) ; for ( i n t i = mheight 1 ; i > = 0 ; i ) { System. out. p r i n t ( " " ) ; for ( i n t j = 0 ; j < mwidth ; j + + ) { i f ( get ( i, j ) = = null ) { System. out. p r i n t ( " " ) ; else { get ( i, j ). p r i n t ( ) ; System. out. p r i n t ( " \ n " ) ; c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 28/29

, příklad CarGame, CarGame.java 1/1 public void Run ( ) { / / v y t v o r h r a c i pole a pole v o z i d e l GameArea gamearea = new GameArea ( 1 0, 1 0 ) ; Vehicle vs [ ] = new Vehicle [NUMBER_OF_CARS ] ; / / v y t v o r dve auta a poloz j e do hraciho pole vs [ 0 ] = new Car ( 4, 4, gamearea ) ; gamearea. set ( vs [ 0 ]. getx ( ), vs [ 0 ]. gety ( ), vs [ 0 ] ) ; vs [ 2 ] = new Truck ( 8, 8, gamearea ) ; gamearea. set ( vs [ 2 ]. getx ( ), vs [ 2 ]. gety ( ), vs [ 2 ] ) ; c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 29/29