PJV15 1 Vnořené ( nested ) a vnitřní ( inner ) členy Třídy či interfejsy mohou být členy tříd či interfejsů. Je-li X obalem Y a Y obalem Z, pak Z získá.

Slides:



Advertisements
Podobné prezentace
Funkce Připomeňme si program pro výpočet faktoriálu:
Advertisements

PJV151 Vnořené a vnitřní členy mohou být členy tříd a interfejsů. Je-li X obalem Y a Y je obalem Z, pak Z získá jméno X$Y$Z - kompilací vzniknou classy.
C++ Přednáška 3 Konstantní a statické členy tříd, ukazatel this, konstantní instance třídy Ing. Jiří Kulhánek , kat. 352, VŠB TU Ostrava 2004.
Páté cvičení Dědičnost Interface Abstarktní třídy a metody
Seminář C++ 9. cvičení Šablony Ing. Jan Mikulka. Šablony ► template – vzory, podle kterých může překladač tvořit skupiny podobných tříd nebo funkcí, které.
Jedenácté cvičení Vlákna. Java cv112 Vlákna Operační systém Mutitasking – více úloh se v operačním programu vykonává „současně“ Java Multithreading -
KIV/PPA1 cvičení 8 Cvičící: Pavel Bžoch. Osnova cvičení Objekty v Javě Třída Konstruktor Metody Metody a proměnné třídy x instance Program sestávající.
Dědičnost - inheritance dědičnost je jednou z forem znovupoužitelnosti dědičnost je jednou z forem znovupoužitelnosti B A Třída A je předkem třídy B Třída.
Netrvaloppa21 Vytvořte třídu Student pro reprezentaci struktury student na ZČU. Atributy třídy budou fakulta a osobniCislo. Název třídy: Student proměnné.
PJV031 Přetypování (casting) Objekty, atributy, lokální proměnné, parametry a návratové hodnoty metod mají definovaný, neměnný typ. Jsou dva druhy typů:
Objektově orientované programování. Objektově orientovaný přístup k programování je zcela jiný způsob přemýšlení. Jedná se o moderní styl programování,
Praha & EU: Investujeme do vaší budoucnosti Evropský sociální fond Gymnázium, Praha 10, Voděradská 2 Projekt OBZORY Java – úvod.
Uvedení autoři, není-li uvedeno jinak, jsou autory tohoto výukového materiálu a všech jeho částí. Tento projekt je spolufinancován ESF a státním rozpočtem.
Elektrotechnická měření Dimenzování sítí nn - PAVOUK 2.
Cestovní náklady podnikatele a zaměstnance. Paušální cestovní výdaje  Podnikatel si může do nákladů započítat paušální odpočet 5000 Kč/měs. na jedno.
Programování v jazyce C++ Dědičnost a polymorfismus.
Memento. Motivace – kalkulačka 210° sin * /20 ? 0.25 ^2 ?
©Ing. Václav Opatrný. V úvodních hodinách elektrotechniky jsou žáci seznamováni s veličinami, které popisují známý fyzikální svět, získávají představu.
KURZ ALGORITMIZACE A PROGRAMOVÁNÍ V JAZYCE C Lekce č. 10: Tvorba vlastních funkcí Bc. Radek Libovický.
Definice: Funkce f na množině D(f)  R je předpis, který každému číslu z množiny D(f) přiřazuje právě jedno reálné číslo. Jinak: Nechť A, B jsou neprázdné.
NÁZEV ŠKOLY: S0Š Net Office, spol. s r.o., Orlová-Lutyně
Tutoriál ~ eKnihy Stahování
Programování II 1. cvičení Alena Buchalcevová
Počet čísel Počet hodnot
COM – Práce s objektovým modelem jiné aplikace
OOP - Objektově Orientované Programování
Generické typy jsou třídy či interfejsy deklarující tzv. typové parametry jimiž: systematizují typovou kontrolu kompilátorem, vyjadřují jasněji smysl,
Způsoby zápisu algoritmů
Obrázky Ram Rom Nástupci ROM Počítačová pamět Obrázky Paměti Ram rom
Přetěžování Datové typy.
Kurz algoritmizace a programování v jazyce C
Uživatelem definované datové typy
State 1.
Jmenné autority - změny podle RDA Personální autority
Financováno z ESF a státního rozpočtu ČR.
Programování v jazyce C++
Přístupový systém aneb kontrola vstupů
Financováno z ESF a státního rozpočtu ČR.
Struktury.
Rysy MS Windows Možnost multitaskingu a multithreadingu
TÉMA: Počítačové systémy
Abstract Factory.
Polymorfismus = Mnohotvarost
Lexikální atomy jazyka C
C# Vícevláknové aplikace
Jméno autora Mgr. Stanislava Junková Datum vytvoření prosinec 2012
C# konzole – Program pro výpočet výrazu
SÁRA ŠPAČKOVÁ MARKÉTA KOČÍBOVÁ MARCELA CHROMČÁKOVÁ LUKÁŠ BARTOŠ B3E1
Výukový materiál zpracován v rámci projektu
Cvičení 4 Dědičnost objektů.
Reflexe jako introspekce
Dotazovací jazyk SQL I.
Builder „Návrhový vzor oddělující konstrukci složitých objektů od jejich reprezentace. Čímž je možné použít stejný proces konstrukce pro rozdílné reprezentace.“
Název školy: Autor: Název: Číslo projektu: Název projektu:
název projektu: Šablony Špičák číslo projektu: CZ.1.07/1.4.00/
A5M33IZS – Informační a znalostní systémy
C# přehled vlastností.
DIAGNOSTIKA ELEKTRONICKÝCH SYSTÉMŮ
Navigace v aplikaci Ing. Petr Voborník, Ph.D..
Vázání dat Data Binding
Lineární funkce a její vlastnosti
Informatika – Základní operace s buňkami
Funkce v jazyce C = „množina“ operací, která provádí nějakou činnost s různými vstupy odstranění vícenásobného psaní či vkládání téhož kódu a lepší přehlednost.
DIAGNOSTIKA ELEKTRONICKÝCH SYSTÉMŮ
Výčtové typy ( Java 5 ) Výčtové typy jsou speciální třídy zavedené pro větší bezpečí a pohodlí. V nejjednodušší variantě se definují příkladmo takto:
Aktivně a zdravě Marketingová akce podporovaná ČPP
Opakování ze 4. cvičení int a; printf("Zadej číslo: ");
Adapter
Bridge.
Class Diagrams.
Transkript prezentace:

PJV15 1 Vnořené ( nested ) a vnitřní ( inner ) členy Třídy či interfejsy mohou být členy tříd či interfejsů. Je-li X obalem Y a Y obalem Z, pak Z získá jméno X$Y$Z - kompilací vzniknou classy X, X$Y a X$Y$Z. Z vidí členy všech obalů – nedbá na jejich modifikátory přístupu. Hlavičky umožňuji uvést extends resp. implements i generiku. [ public | protected | private ] [ strictfp ] - [ static ] [ abstract ] interface - nested interfejs, neb je vždy static - static [ abstract | final ] class - nested třída - [ abstract | final ] class - inner třída - lokální: bez modifikátorů přístupu - anonymní: bez hlavičky Nested člen má přístup jen ke static členům svých obalů. Může mít statické i nestatické členy. Inner třídy nejsou static a kromě static final konstant nemohou deklarovat žádné statické členy - mohou je však zdědit.

PJV15 2 Lokální třída je vnitřní třída deklarovaná v kódovém bloku. -jen s modifikátory [ strictfp ] [ abstract | final ] -typ lokální třídy je známý v bloku až za její deklarací. -lze ji instanciovat pouze z vnitřku metody - není přístupná zvnějšku. -má přístup jen k finálním lokálním proměnným resp. finálním parametrům metody či konstruktoru – to proto, aby je nešlo měnit z lokální třídy. ( Finální lokální proměnné se tak stávají dodatečnými parametry. ) -sice return umožňuje objekt vrátit, avšak jeho vlastní typ není vně znám, neb v hlavičce metody nelze zadat jméno lokální třídy jako návratový typ. Lokální třída získá jméno s prefixem ze jmen vnějších tříd a pořadovým číslem metody $n v níž jsou deklarovány stejnojmenné lokální třídy. Tento typ, např. Out$3Loc, je vně neznámý, tudíž nelze jím přetypovat. Lze užít vně známých typů, které lokální třída rozšiřuje či implementuje. Lokální interfejs není možný - vnitřní interfejsy neexistují.

PJV15 3 Anonymní třída je lokální třída bez hlavičky avšak : nemá jméno, modifikátory ani nelze použít extends či implements, nemůže mít potomky ani explicitní konstruktory, má jen bezejmenný defaultní konstruktor, roli konstruktorů nahrazují nestatické inicializátory, zkompilovaná třída má jméno sestavené dle obalů a ukončené $i, i>=1, lze vytvořit podle ní jen jeden objekt. Například: TX x = new T(…) { // T je třída či interfejs // TX je T či jeho nadtyp či Object... // nestatické členy... // jen statické finální atributy { … } // nestatický inicializátor }; Hojně se využívá v listenerech pro odchyt událostí v awt/swing,

PJV15 4 Adapter je obecně třída, implementující nějaký interfejs tak, že zděděné abstraktní metody přepíše na konkrétní - avšak prázdné. Adapter mívá triviální funkcionalitu a bývá s modifikátorem abstract. Slouží totiž jako předek potomkům, kteří mají některé metody přepsány na neprázdné, čímž s žádanou funkcionalitou - aniž programátor musí psát prázdné, nepotřebné metody. Např.: interface java.awt.WindowListener má sedm metod. Adapter definovaný takto: abstract class WindowAdapter implements WindowListener je všechny metody konkretizuje prázdnými metodami. Ovládat okénko ikonou lze pomocí tzv. handleru, což je objekt vytvořený buď dle normální anebo anonymní třídy. Důležité je, že v obou případech je splněn interfejs WindowListener.

PJV15 5 Použití adapteru Pojmenovaně: WindowListener wl = new WindowHandler( ); kde: class WindowHandler extends WindowAdapter { public void WindowClosing( WindowEvent ev ) { System.exit(0); // end of application } či anonymně: WindowListener wl = new WindowAdapter( ) { public void WindowClosing( WindowEvent ev ) { System.exit(0); // end of application } };

PJV15 6 Inner class Vnitřní třída umožňuje seskupit věcně související kódy a případně je skrýt. public class Outer { private int x; public class Inner { public void m( ) { x++; } } public void test( ) { Inner n = new Inner( ); n.m( ); } public static void main(... ) { Outer o = new Outer( ); o.test( ); } main( test( m( this n Outer Inner Outer.this stackheap o x

PJV15 7 Inner class public class Outer { private int x; public class Inner { public void m( ) { x++; } } public class OuterTest { public static void main(... ) { Outer p = new Outer( ); Outer.Inner n = p.new Inner( ); // n = new Outer( ). new Inner( ); n.m( ); } main( m( p n this Outer Inner x Outer.this stackheap Instanciovat Inner lze jen prostřednictvím instance Outer.

PJV15 8 Inner class public class Outer { private int x; public class Inner { private int x; public void m( int x ) { x++; this.x++; Outer.this.x++; } public static void main(... ) { Outer p = new Outer( ); Outer.Inner n = p.new Inner(); n.m( ); } main( m( x n x Outer Inner x Outer.this x this stack heap

PJV15 9 Local class public class Outer { private int x = 5; public Object get( final int y ) { final int z = 6; class Local { public String toString ( ) { return ""+(x+y+z); } } return new Local( ); } public static void main( String [ ] args ) { Outer p = new Outer( ); Object obj = p.get( 700 ); System.out.println( obj ); // vytiskne 711 }

PJV15 10 Využití vnořených tříd Bod, úsečku, obdélník, elipsu atd. v rovině pojednávají balíčky java.awt s přesností int a java.awt.geom s přesností double a float abstract class Point2D { // nedeklaruje atributy static class Point2D.Float extends Point2D { float x, y;... get } static class Point2D.Double extends Point2D { double x, y;... get } public double distance( Point2D pt ) { return … } public abstract double getX( ); … // getry a setry } class Point extends Point2D { int x, y; public double getX( ) {…} … } Od třídy Point2D dědí ostatní metody distance, distanceSq a další. Díky polymorfismu lze: Point2D p1 = new Point2D.Double( 1.1, 2.2 ); Point p2 = new Point( 3, 4 ); double d = p1.distance( p2 );