Kontrola dostepu kapsulkowanie Nieznany

background image

W.Kasprzak: JiMP3

6. Kontrola dostępu - kapsułkowanie

1

6. Kontrola dost

ę

pu -

kapsułkowanie

background image

W.Kasprzak: JiMP3

6. Kontrola dostępu - kapsułkowanie

2

Treść

1.

Obszar nazw

2.

Kwalifikatory dostępu

3.

Zestaw (assembly)

4.

Przykłady obszarów nazw w .NET

background image

W.Kasprzak: JiMP3

6. Kontrola dostępu - kapsułkowanie

3



1. Obszary nazw

Zasięg widoczności

(zakres definicji) nazwy:



To taki zakres programu źródłowego (tekstu), w którym do nazwy
możemy odwoływać się w sposób prosty – bez kwalifikacji nazwy.

public class Bank

{

public class Rachunek

{

public void Wplata(decimal wartosc)

{

saldo

+= wartosc;

// Nazwy proste

}

private decimal saldo;

}

public Rachunek OtworzRachunek( ){...}

// Nazwa prosta

}

public class Bank

{

public class Rachunek

{

public void Wplata(decimal wartosc)

{

saldo

+=

wartosc

;

// Nazwy proste

}

private decimal saldo;

}

public

Rachunek

OtworzRachunek( ){...}

// Nazwa prosta

}

background image

W.Kasprzak: JiMP3

6. Kontrola dostępu - kapsułkowanie

4

Konflikty nazw



W dużym programie liczącym tysiące nazw:



Pewne nazwy mogą się powtórzyć;



Ale nie chcemy stosować nazw kwalifikowanych dla
wszystkich klas;



Nie chcemy zmieniać raz nadanych nazw typów.

// Od producenta A

public class Widget public class ProdAWidget

{ ... } { ... }

// Od producenta B

public class Widget public class ProdBWidget

{ ... } { ... }

// Od producenta A

public class Widget public class ProdAWidget

{ ... } { ... }

// Od producenta B

public class Widget public class ProdBWidget

{ ... } { ... }





background image

W.Kasprzak: JiMP3

6. Kontrola dostępu - kapsułkowanie

5

Deklaracja obszaru nazw



W obszarze nazw w C# można definiować jedynie

klasy

i

typy



Definicja obszaru nazw może wystąpić

wielokrotnie

w

programie (rozszerzalna postać definicji obszaru nazw).



Obszar nazw można

zagnieżdżać

w innym obszarze nazw.



Dostęp do obszaru nazw – jest zawsze

niejawnie publiczny

.

namespace

ProducentA

{

public class Widget

{ ... }

}

namespace

ProducentA

{

public class Widget

{ ... }

}

namespace

ProducentB

{

public class Widget

{ ... }

}

namespace

ProducentB

{

public class Widget

{ ... }

}

namespace

Producent

{

namespace Office

{

...

}

}

namespace

Producent

{

namespace Office

{

...

}

}

namespace

Producent.Office

{

}

namespace

Producent.Office

{

}

W C# możliwy jest skrót

W C# mo

W C# mo

ż

ż

liwy jest

liwy jest

s

s

kr

kr

ó

ó

t

t

background image

W.Kasprzak: JiMP3

6. Kontrola dostępu - kapsułkowanie

6

W pełni kwalifikowane nazwy



W pełni

kwalifikowana

nazwa zawiera nazwę obszaru nazw



Niekwalifikowane

nazwy klas można stosować jedynie w ich

zasięgach widoczności.

namespace ProducentA

{

public class Widget { ... }

...

}

class Aplikacja

{

static void Main( )

{

Widget w = new Widget( );

// Bł

ą

d!

ProducentA.

Widget w= new ProducentA.Widget( );

}

}

namespace ProducentA

{

public class Widget { ... }

...

}

class Aplikacja

{

static void Main( )

{

Widget w = new Widget( );

// Bł

ą

d!

ProducentA.

Widget w= new ProducentA.Widget( );

}

}





background image

W.Kasprzak: JiMP3

6. Kontrola dostępu - kapsułkowanie

7

Deklaracja

using-namespace



Taka deklaracja nadaje nazwom definiowanym w pewnym
obszarze nazw

widoczność w ramach aktualnego zasięgu

(

aktualny

to ten, w którym znajduje się instrukcja

using

).



Deklaracja

using

jeśli występuje to musi wystąpić

przed

deklaracjami

składowych danego zasięgu.

using ProducentA.ZestawB;

class Aplikacja

{

static void Main( )

{

Widget w = new Widget( );

}

}

using ProducentA.ZestawB;

class Aplikacja

{

static void Main( )

{

Widget w = new Widget( );

}

}

namespace ProducentA.ZestawB

{

public class Widget { ... }

}

namespace ProducentA.ZestawB

{

public class Widget { ... }

}

background image

W.Kasprzak: JiMP3

6. Kontrola dostępu - kapsułkowanie

8

Deklaracja

using-alias



Tworzy

synonim nazwy

(jest to skrót kwalifikowanej nazwy,

zwykle głęboko zagnieżdżonej w obszarze nazw i klasie).



Deklaracja

using

jeśli występuje to musi wystąpić

przed

deklaracjami

składowych danego zasięgu.

using Widget = ProducentA.ZestawB.Widget;

class Aplikacja

{

static void Main( )

{

Widget w = new Widget( );

}

}

using Widget = ProducentA.ZestawB.Widget;

class Aplikacja

{

static void Main( )

{

Widget w = new Widget( );

}

}

namespace ProducentA.ZestawB

{

public class Widget { ... }

}

namespace ProducentA.ZestawB

{

public class Widget { ... }

}

background image

W.Kasprzak: JiMP3

6. Kontrola dostępu - kapsułkowanie

9



2. Kwalifikatory dostępu

Kwalifikatory dostępu do klas i składowych klas (lub klas

zagnieżdżonych):



public

– klasa lub składowa dostępna ze wszystkich

innych klas.



protected

– składowa dostępna w swojej klasie i klasach

pochodnych tej klasy.



private

– składowa dostępna jedynie w swojej klasie.



internal

– obiekt klasy lub składowa dostępne w ramach

zestawu (assembly) do którego należy.



protected internal

– składowa obiektu dostępna w ramach

zestawu (assembly), do którego należy lub w klasach
dziedziczonych z klasy, do której składowa ta należy.

background image

W.Kasprzak: JiMP3

6. Kontrola dostępu - kapsułkowanie

10

Dostęp chroniony

(protected)

do składowych

dziedziczonych



Dziedziczone składowe

chronione (protected)

są też

chronione w klasie pochodnej



Metody klasy pochodnej mają dostęp do tych składowych

dziedziczonych, które są

chronione

lub

publiczne (public).



Modyfikator dostępu do składowych

protected

nie może

występować w strukturze

struct

.

class Token
{ ... class Pomocnicza

protected

string name; {

} void Fails(Token t)
class CommentToken: Token {
{ ... ...

public string Name( ) t.name ...

// Tu

{ ...

// niedost

ę

pne!

return name;

// Tak - dost

ę

pne

}

}

}

}

class Token
{ ... class Pomocnicza

protected

string name; {

} void Fails(Token t)
class CommentToken: Token {
{ ... ...

public string Name( ) t.name ...

// Tu

{ ...

// niedost

ę

pne!

return name;

// Tak - dost

ę

pne

}

}

}

}









background image

W.Kasprzak: JiMP3

6. Kontrola dostępu - kapsułkowanie

11

Wewnętrzny dostęp

(Internal)



Motywacja stosowania

wewnętrznego

dostępu

:



Podział programu na „

małe” obiekty

poprawia jego czytelność, ale takie obiekty nie
są samodzielne – muszą współpracować w
celu symulacji działania „większego” obiektu.



Wymagane jest ograniczenie dostępu do

grupy współpracujących obiektów

.



Poziomy dostępu



Publiczny

i

prywatny

dostęp to pojęcia

logiczne

(odnoszą się do samych

klas

).

Chroniony

dostęp również odnosi się do

klas

-

powiązanych relacją dziedziczenia.



Wewnętrzny dostęp

jest pojęciem

fizycznym

(odnosi się do

grupy obiektów

).

public

internal
private

internal

background image

W.Kasprzak: JiMP3

6. Kontrola dostępu - kapsułkowanie

12

Składnia – dostęp wewnętrzny



Domyślnym dostępem do klasy niezagnieżdżonej jest

internal

(wewnętrzny)

.



Klasa niezagnieżdżona może być dostępna jedynie

publicznie

lub

wewnętrznie

.



Klasy zagnieżdżone i składowe klas mogą być dostępne na
pełne 5 sposobów.

internal

class <outername>

{ internal class <nestedname> { ... }

internal

<type> pole;

internal

<type> Metoda( ) { ... }

protected internal

class <nestedname> { ... }

protected internal

<type> pole;

protected internal

<type> Metoda( ) { ... }

}

internal

class <outername>

{ internal class <nestedname> { ... }

internal

<type> pole;

internal

<type> Metoda( ) { ... }

protected internal

class <nestedname> { ... }

protected internal

<type> pole;

protected internal

<type> Metoda( ) { ... }

}

protected internal oznacza: protected lub internal

protected internal

oznacza: protected

lub

internal

background image

W.Kasprzak: JiMP3

6. Kontrola dostępu - kapsułkowanie

13

Przykład – dostęp wewnętrzny

public interface IBankAccount { ... }

internal

abstract class CommonBankAccount { ... }

internal

class DepositAccount: CommonBankAccount,

IBankAccount { ... }

public class Bank
{

public IBankAccount OpenAccount( )
{

return new DepositAccount( );

}

}

public interface IBankAccount { ... }

internal

abstract class CommonBankAccount { ... }

internal

class DepositAccount: CommonBankAccount,

IBankAccount { ... }

public class Bank
{

public IBankAccount OpenAccount( )
{

return new DepositAccount( );

}

}

background image

W.Kasprzak: JiMP3

6. Kontrola dostępu - kapsułkowanie

14



3. Zestaw

(assembly)

Moduł a zestaw



Pliki źródłowe (*.cs) mogą być najpierw kompilowane
do postaci modułu (*.netmodule) – samodzielnej
jednostki zawierającej zarządzany w .NET kod :



Samodzielny moduł nie może być jeszcze dołączony do
wykonywalnego programu. Moduł musi być najpierw
dodany do jakiegoś

zestawu

.



Zestaw

jest z punktu widzenia logicznego (kompilatora)

biblioteką DLL

.

csc /target:module Bank.cs

csc /target:module Bank.cs

background image

W.Kasprzak: JiMP3

6. Kontrola dostępu - kapsułkowanie

15

Zestawy



Zestaw

to jednostka programu, wielokrotnego użytku, z

możliwością

specyfikacji

wersji,

udostępniająca

opisy

zawartych w niej klas i obiektów.



Zestaw wyznacza wewnętrzny zakres dostępu

(internal)

dla

obiektów klas i składowych w nim zawartych:

Zestaw 4 klas z
niektórymi
składowymi o
dostępie
wewnętrznym

public

internal
private

background image

W.Kasprzak: JiMP3

6. Kontrola dostępu - kapsułkowanie

16

Tworzenie zestawu



Tworzenie zestawu złożonego z jednego pliku



Tworzenie zestawu złożonego z wielu plików



Kod MSIL zestawu i jego manifest są bezpośrednio zawarte w pliku
zestawu.



Moduły i zasoby zestawu mogą być referowane w zestawie jako
zewnętrzne pliki.



Elementem identyfikacji zestawu jest numer wersji zestawu
przyjmujący format:

<major>.<minor>.<build number>.<revision>

csc /target:library /out:Bank.dll

Bank.cs Account.cs

csc /target:library /out:Bank.dll

Bank.cs Account.cs

csc /t:library /addmodule:Account.netmodule

/out:Bank.dll Bank.cs

csc /t:library /addmodule:Account.netmodule

/out:Bank.dll Bank.cs

background image

W.Kasprzak: JiMP3

6. Kontrola dostępu - kapsułkowanie

17

Porównanie obszaru nazw i zestawu



Obszar nazw: logiczny mechanizm nazw



Klasy należące do jednego obszaru nazw mogą
wystąpić w wielu zestawach.



W jednym zestawie mogą wystąpić klasy należące do
wielu obszarów nazw.



Zestaw: fizyczny mechanizm grupujący obiekty

background image

W.Kasprzak: JiMP3

6. Kontrola dostępu - kapsułkowanie

18



4. Przykłady obszarów nazw w

.NET



System.IO



System.Xml



System.Data



Inne użyteczne obszary nazw

background image

W.Kasprzak: JiMP3

6. Kontrola dostępu - kapsułkowanie

19

Obszar nazw

System.IO



System.IO

zapewnia klasy dla dostępu do systemu plików:



File, Directory –

tworzenie, usuwanie plików i kartotek



StreamReader, StreamWriter –

odczyt/zapis znakowy



FileStream –

swobodny dostęp do pliku



BinaryReader, BinaryWriter –

odczyt/zapis bitowy wartości

podstawowych typów danych

background image

W.Kasprzak: JiMP3

6. Kontrola dostępu - kapsułkowanie

20

Obszar nazw

System.IO

Przykład współpracy z plikami:

background image

W.Kasprzak: JiMP3

6. Kontrola dostępu - kapsułkowanie

21

Obszar nazw

System.Xml



Zapewnia przetwarzanie dokumentów w

Extensible Markup

Language (XML)



Implementuje różne standardy przetwarzania XML



Podstawowe klasy



XmlDocument, XmlElement, XmlAttribute

background image

W.Kasprzak: JiMP3

6. Kontrola dostępu - kapsułkowanie

22

Obszar nazw

System.Data



Wyznacza architekturę

ADO.NET

– zarządzania bazami danych w

środowisku rozproszonym:



Podstawowe klasy:

DataSet, DataTable



Obszar nazw

System.Data.SqlClient –

zapewnia dostęp do serwera

SQL.



Obszar nazw

System.Data.OleDb

– zapewnia dostąp do relacyjnych

baz danych OLEDB.

background image

W.Kasprzak: JiMP3

6. Kontrola dostępu - kapsułkowanie

23

Inne użyteczne obszary nazw



System.Net

– zapewnia programowy interfejs do większości

protokołów sieciowych



System.Net.Sockets

– stanowi implementację narzędzi dostępu do

protokołu TCP / IP



System.Windows.Forms

podstawa graficznego interfejsu

użytkownika dla aplikacji okienkowych, umożliwiając tworzenie
formatek, kontrolek i obsługę zdarzeń.

background image

W.Kasprzak: JiMP3

6. Kontrola dostępu - kapsułkowanie

24

Informacja o dynamicznym typie („RTTI, reflection”)



Można sprawdzać typ obiektu – umożliwiają to klasy w obszarze nazw

System.Reflection

.



Klasa

System.Type

umożliwia reprezentowanie informacji o klasie – o

jej konstruktorach, metodach, własnościach, polach i zdarzeniach.



Obiekt klasy

Type

jest unikalny dla każdego typu. Można porównywać

dwa obiekty tej klasy, aby sprawdzić zachodzenie zgodności typu
obiektu z oczekiwanym typem (operatorami

==

,

!=

)

background image

W.Kasprzak: JiMP3

6. Kontrola dostępu - kapsułkowanie

25

Informacja o dynamicznym typie („RTTI, reflection”)



Operator

typeof

zwraca informację RTTI w postaci obiektu typu

Type

, ale można go wywołać jedynie dla klas znanych podczas

kompilacji – parametrem może być jedynie nazwa klasy, a nie
wyrażenie lub obiekt.



Metoda

GetType

w klasie

System.Object –

zwraca informację czasu

wykonania o dynamicznym typie dla identyfikatora obiektu.


Wyszukiwarka

Podobne podstrony:
Kontrola Dostepu id 246907 Nieznany
12 Kontrolowanie jakosci wyrobo Nieznany (2)
CW 8 pytania kontrolne id 12215 Nieznany
Chemia kliniczna kontrola id 11 Nieznany
Lista kontrolna BHP Magazynowan Nieznany
Kontrola dostępu, Metro
gls pelna kontrola przesylek ku Nieznany
Cwiczenia i kontrola magii id 9 Nieznany
9 4 Lista kontrolna do ustalani Nieznany
NO 04 A004 6 2010 Systemy Kontroli Dostępu
CW7 pytania kontrole id 123756 Nieznany
Kontrola dostępu
przeglad kontroli dostępu
04 Kontrola zageszczenia grunto Nieznany
MPiPS o kontroli zaswiadczen le Nieznany
lista kontrolna budowaid 1572 Nieznany (2)
nieformalne bariery dostepu do Nieznany
Karty kontrolne id 232711 Nieznany

więcej podobnych podstron