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

Podobné dokumenty
Zapouzdření. Tomáš Pitner, upravil Marek Šabo

Seminář Java II p.1/43

5. Objektové modelování v Javě

Programování v Javě I. Leden 2008

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

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

PB161 Programování v jazyce C++ Přednáška 7

PB161 Programování v jazyce C++ Přednáška 7

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

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

Datové typy v Javě. Tomáš Pitner, upravil Marek Šabo

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

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

Programování v C++ 2, 4. cvičení

PREPROCESOR POKRAČOVÁNÍ

Úvod do programovacích jazyků (Java)

10 Balíčky, grafické znázornění tříd, základy zapozdření

Dědění, polymorfismus

typová konverze typová inference

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

1. Dědičnost a polymorfismus

Předmluva k aktuálnímu vydání Úvod k prvnímu vydání z roku Typografické a syntaktické konvence... 20

7.5 Diagram tříd pokročilé techniky

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.

Výčtový typ strana 67

1. Programování proti rozhraní

Programové konvence, dokumentace a ladění. Programování II 2. přednáška Alena Buchalcevová

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

Základy objektové orientace I. Únor 2010

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

dovolují dělení velkých úloh na menší = dekompozice

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

type Obdelnik = array [1..3, 1..4] of integer; var M: Obdelnik;

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

První kapitola úvod do problematiky

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

IB111 Programování a algoritmizace. Objektově orientované programování (OOP)

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

PB161 Programování v jazyce C++ Přednáška 9

Programování II. Návrh programu I 2018/19

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

7.5 Diagram tříd pokročilé techniky

"Václav Klaus". public class Clovek { protected String jmeno; protected int roknarozeni; public Clovek(String j, int rn) {

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

Programování v C++ 3, 3. cvičení

Jazyk C++ 1. Blok 3 Objektové typy jazyka C++ Třída. Studijní cíl. Doba nutná k nastudování. Průvodce studiem

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

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

20. Projekt Domácí mediotéka

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu:

Programování II. Dědičnost změna chování 2018/19

7. Datové typy v Javě

Jazyk C# (seminář 3)

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

RMI Remote Method Invocation

Jazyk C# (seminář 6)

Třída. Atributy. Operace

7.3 Diagramy tříd - základy

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.

Programování v C++ 1, 6. cvičení

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

Algoritmizace a programování

State. Známý jako. Účel. Použitelnost. Stav, Object for States. umožňuje objektu měnit svoje chování v závislosti na stavu objekt mění svou třídu

7.3 Diagramy tříd - základy

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

Řídicí struktury. alg3 1

Vaše jistota na trhu IT. Balíčky. Rudolf Pecinovský

Diagramy tříd - základy

Teoretické minimum z PJV

Sdílení dat mezi podprogramy

Obsah. October 2, Polymorfizmus. Typologie testování. Problém polymorfizmu. Vady/Anomálie. Vazební sekvence ČVUT FEL, K13132

NPRG030 Programování I, 2015/16 1 / :25:32

Seminář Java IV p.1/38

Sada 1 - Základy programování

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

Dědičnost (inheritance)

Výjimky. Tomáš Pitner, upravil Marek Šabo

Programování v C++ 1, 5. cvičení

Z. Kotala, P. Toman: Java ( Obsah )

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/

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

9. Polymorfismus a rozhraní

Operátory, výrazy. Tomáš Pitner, upravil Marek Šabo

Generické programování

Pokud neuvedeme override, vznikne v synu nová (nevirtuální) metoda (a pochopitelně se nezavolá, jak bychom

IoC/DI. Tomáš Herceg Microsoft MVP (ASP.NET)

NPRG031 Programování II 1 / :25:46

NMIN201 Objektově orientované programování 1 / :36:09

15. Projekt Kalkulačka

Objektové programování

Tematický celek Proměnné. Proměnné slouží k dočasnému uchovávání hodnot během provádění aplikace Deklarace proměnných

Pole a Funkce. Úvod do programování 1 Tomáš Kühr

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

DSL manuál. Ing. Jan Hranáč. 27. října V této kapitole je stručný průvodce k tvorbě v systému DrdSim a (v

Obsah. Úvod 11 Základy programování 11 Objektový přístup 11 Procvičování 11 Zvláštní odstavce 12 Zpětná vazba od čtenářů 12 Errata 13

TÉMATICKÝ OKRUH Softwarové inženýrství

Algoritmizace. Cíle předmětu

Programátorská příručka

Funkční objekty v C++.

Transkript:

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

Viditelnost Přístup ke třídám i jejim prvkům lze (podobně jako např. v C++) regulovat. Přístupem se rozumí jakékoli použití dané třídy, prvku prostě už vůbec výskyt daného identifikátorů tím může být omezen. Omezení přístupu/viditelnosti je kontrolováno hned při překladu není-li přístup povolen, nelze program ani přeložit. Tímto způsobem lze regulovat přístup/viditelnosti, mezi celými třídami, nikoli pro jednotlivé objekty! Nelze tedy pomocí viditelnosti zajistit, že "objekt Franta může volat metodu transferto na objektu bankovního účtu, který mu patří, a nikdo jiný ne". Jiný způsob zabezpečení představuje tzv. security manager, který lze aktivovat při spuštění JVM. Granularita viditelnosti/omezení přístupu Přístup/viditelnost je v Javě regulován/a pro celou třídu nebo jednotlivě po prvcích (metodách, atributech), nikoli jako v C++ po blocích prvků. Omezení přístupu/viditelnosti je určeno uvedením jednoho z tzv. modifikátoru přístupu nebo neuvedením žádného. Přístup ke třídě vs. prvkům Nastavení viditelnosti pomocí modifikátoru k celé třídě omezuje viditelnost příslušné třídy jako takové (vůbec možnost použití jejího názvu) i jejich statických vlastnosti (atributů, metod). Dílčí vlastnosti uvnitř třídy pak mohou mít viditelnost stejnou nebo nižší. Typy viditelnosti/přístupu Existují čtyři možnosti: public = veřejný protected = chráněný modifikátor neuveden = říká se lokální v balíku (package local) nebo chráněný v balíku (package protected) evt. "přátelský" (friend) private = soukromý Kde jsou která omezení aplikovatelná? Třídy mohou být: veřejné 1

public neveřejné lokální v balíku soukromé ale to jen u tzv. vnořených tříd (tříd uvnitř ve třídách), mimo rozsah předmětu PB162 Vlastnosti tříd = atributy a metody mohou být: veřejné public chráněné protected neveřejné lokální v balíku soukromé private Veřejný (public) Viditelnost public, přístupné odevšad public class Account {... Třída Account je veřejná, tj. lze např. vytvořit objekt typu Account i v metodě jiné třídy; deklarovat podtřídu třídy Account ve stejném i jiném balíku. Ovšem ne všechny vlastnosti uvnitř Account musejí být veřejné (ale mohou). Použití public Veřejné bývají obvykle některé konstruktory (nikoli nezbytně všechny) a některé metody. Veřejné jsou typicky metody předepsané implementovaným rozhraním. Atributy téměř nikdy, jedině konstanty ano (nikoli nezbytně). Chráněný (protected) Viditelnost protected, tj. přístupné jen z podtříd a ze tříd stejného balíku 2

public class Account { // attribute can be protected (but it is better to have it private) protected float creditlimit; Použití protected Pro metody (občas) a atributy (málokdy). U metod tam, kde se nutně očekává použití z podtříd nebo překrývání. Vcelku často u konstruktorů, protože konstruktor se často volá právě ze stejné třídy nebo její podtřídy. Lokální v balíku Viditelnost lokální v balíku = přátelský přístupné jen ze tříd stejného balíku, už ale ne z podtříd, jsou-li v jiném balíku. public class Account { Date created; // attribute is package-local Použití "lokálního v balíku" Používá se málo, a to spíše u atributů než metod, ale dost často se vyskytuje z lenosti programátora, kterému se nechce psát protected či private. Nelze moc doporučit, protože svazuje viditelnost/přístupová práva s organizací do balíků ( a ta se může přece jen měnit častěji než např. vztah nadtřída-podtřída.) Mohlo by mít význam, je-li práce rozdělena tak, že na jednom balíku pracuje jen jeden vývojář či skupina pak si může přátelským přístupem chránit své neveřejné prvky/třídy nesmí ovšem nikdo jiný chtít jeho třídy rozšiřovat a používat přitom přátelské prvky. Používá se pro neveřejné třídy napsané v jednom zdrojovém souboru se třídou veřejnou, když už to tak chceme psát. Soukromý (private) Viditelnost private (soukromý), tj. viditelné/přístupné jen v rámci třídy, ani v podtřídách používá se častěji pro proměnné než metody Označením private prvek zneviditelníme i případným podtřídám. 3

public class Account { private String owner;... Atribut owner je soukromý = nelze k němu přímo přistoupit ani v podtřídě je tedy třeba zpřístupnit proměnnou pro "vnější" potřeby jinak, např. přístupovými metodami setowner(string owner) a String getowner(). Výhodou pak je, že skrýváme konkrétní implementaci datové položky, tzn. případně vůbec nemusí existovat jako proměnná, ale může se v případě potřeby (volání metody get) spočítat. Použití private atributy téměř vždy private kromě konstant, které chceme vidět odjinud, metody kromě těch nabízených veřejně je taky vhodné použít private, U metod trochu pozor, někdy je lepší nechat protected kvůli možnému překrývání v podtřídách. Je třeba rozmyslet dopředu, jak (zda vůbec) se bude třída moci dědit. Volbou private nic zásadně nepokazíme, případně lze při pozdějších modifikacích změnit na protected. Shrnutí viditelnosti Obvykle se řídíme následujícím: metoda by měla být public, je-li užitečná i mimo třídu či balík "navenek", což je typické u metod předepsaných v rozhraní. Je metoda určená/vhodná k překrytí případných podtřídách? pak protected, jinak klidně private. atribut by měl být private a zcela výjimečně protected tehdy, je-li potřeba přímý přístup v podtřídě. Téměř nikdy bychom neměli deklarovat atributy jako public (vyjma případů, kdy jde o konstanty určené ke sdílení vně)! Viditelnost a umístění deklarací do souborů Třídy deklarované jako veřejné (public) musí být umístěné do souborů s názvem totožným s názvem třídy (a přípona.java) i na systémech Windows (vč. velikosti písmen). 4

Kromě takové třídy však může být v tomtéž souboru i libovolný počet deklarací neveřejných tříd (lokálních v balíku). 5