[ Pobierz całość w formacie PDF ]

drugi rachunek. Proszę zwrócić uwagę na sposób zapisu wywołań metod. Wywołanie
rozpoczyna się od nazwy obiektu, którego chcemy użyć; po niej występuje nazwa metody,
którą obiekt powinien wykonać. Jest to sposób zapisu typowy dla obiektowych języków
programowania. W dalszej części rozdziału pokazano, że sposób zapisu w C# jest bardzo
podobny.
W kolejnym wierszu wykonuje się wypłatę kwoty 500 z obiektu . Operacja
kończy się sukcesem, ponieważ saldo wynosi 1000. Następnie odczytywane jest saldo;
wynikiem tej operacji jest bieżąca wartość salda. W ostatnim wierszu mamy próbę wy-
konania wypłaty kwoty 500 z drugiego rachunku. Próba ta kończy się niepowodzeniem,
gdyż saldo rachunku wynosi 100. Innymi słowy, te dwa obiekty w różny sposób reagują
na próbę wykonania tej samej operacji (wypłaty kwoty 500), gdyż stan tych obiektów
jest różny.
W trakcie dokładniejszej analizy kodu metod , i może nasunąć
się pytanie  skąd w treści metody wiadomo, którego obiektu ona dotyczy? W kodzie
nie ma informacji o obiekcie, którego saldo ulega zmianie, a jednak wpłaty i wypłaty
dotyczą właściwego rachunku. Otóż referencja do obiektu jest niejawnie przekazywana
do każdej metody i ta referencja jest wykorzystywana podczas wszystkich odwołań do
składowych klasy. Tak więc, gdy metoda jest wywoływana z obiektu
, to jej działanie można by zapisać w następujący sposób:
54 VIsuaI StudIo .NET: .NET Framework. Czarna ksIęga
Oczywiście nie widać tego w kodzie, ale metoda zawsze  wie , z którego obiektu została
wywołana. W wielu językach obiektowych w metodzie można odwołać się do obiektu,
z którego ta metoda została wywołana. W Visual Basicu służy do tego słowo kluczowe
, a w C# i w C++ słowo .
Te same zasady obowiązują oczywiście w innych językach programowania, co ilustruje
zamieszczony poniżej kod klasy zapisany w języku C#. Pomijając drobne róż-
nice w składni, zauważymy, że struktura kodu jest niemal identyczna w obu językach.
Kod, w którym korzysta się z tej klasy, zapisany w C# jest również bardzo podobny do
kodu w VB  inny jest tylko sposób tworzenia obiektów.
Dziedziczenie i polimorfizm
Dotychczas przedstawiono dwie ważne zasady programowania obiektowego: hermetyzację
i ukrywanie danych. Hermetyzacja (ang. encapsulation) to połączenie danych i funkcji
w pewną całość, zwaną obiektem, a ukrywanie danych (ang. data hiding) to ograniczenie
dostępu do zmiennych przechowujących stan obiektu1. Omówimy teraz dwie inne bardzo
ważne cechy występujące w każdym  prawdziwym języku obiektowym, a mianowicie
dziedziczenie (ang. inheritance) i polimorfizm (ang. polymorphism).
1
W literaturze na ogół używa się bardziej ogólnego pojęcia, a mianowicie ukrywanie informacji
(ang. information hiding). Jest to zasada, która mówi, że programista korzystający z jakiegoś składnika
oprogramowania może go poprawnie zastosować bez znajomości jego budowy lub implementacji. Zobacz,
na przykład,: Subieta K.:  Słownik terminów z zakresu obiektowości , Warszawa 1999.  przyp. tłum.
RozdzIał 2. ModeI programowanIa w środowIsku .NET 55
Obiekty świata rzeczywistego często są klasyfikowane i przydzielane do różnych typów
czy też kategorii. Na przykład samochód sportowy to samochód, ale również pojazd.
Można więc powiedzieć, że samochód sportowy należy do trzech typów  jest samo-
chodem sportowym, jest samochodem i jest pojazdem. W zależności od okoliczności,
możemy użyć każdego z tych typów, mówiąc o samochodzie sportowym. Gdybyśmy na
przykład mieli policzyć wszystkie samochody na parkingu, to uwzględnilibyśmy rów-
nież samochody sportowe, gdyż są samochodami. Taka umiejętność dokonywania hie-
rarchicznej klasyfikacji obiektów jest bardzo naturalna dla ludzi oraz jest bardzo przy-
datna w programowaniu.
Dziedziczenie pozwala zapisać w kodzie związki  jest (ang. is-a relationship), zacho-
dzące między klasami. Na rysunku 2.2 przedstawiono prostą hierarchię dziedziczenia,
która pokazuje, w jaki sposób różne typy pojazdów są ze sobą powiązane.
Rysunek 2.2.
Hierarchia
dziedziczenia
W języku Visual Basic związki te zapisuje się w kodzie w sposób następujący:
Jak widać w przykładzie, do wyrażenia relacji dziedziczenia używane jest słowo klu-
czowe . Klasa taka jak nazywana jest klasą bazową (ang. base class)
lub nadklasą (ang. superclass), a klasy takie jak i nazywane
są klasami pochodnymi (ang. derived class) lub podklasami (ang. subclass).
Widać również, że zakodowanie relacji dziedziczenia jest proste, ale prawdziwą sztuką
w programowaniu obiektowym, tak samo zresztą jak w życiu, jest umiejętne zdefinio-
wanie relacji.
Jakie korzyści daje stosowanie dziedziczenia? Rozważmy następujący przykład. Zwiadek
wypadku stwierdził, że wyprzedził go pojazd. Opis ten nie jest zbyt dokładny  mógł
to być zarówno motocykl, samochód, jak i samochód sportowy. Gdyby powiedział, że
był to samochód, to mógł mieć na myśli samochód lub samochód sportowy, ale nie
motocykl  motocykl nie jest rodzajem samochodu. Podobnie można postąpić w kodzie
56 VIsuaI StudIo .NET: .NET Framework. Czarna ksIęga
programu. Ponieważ samochód jest pojazdem, to obiekt samochód może wystąpić w ko-
dzie wszędzie tam, gdzie zapisano, że ma wystąpić obiekt . Ma to ogromne zna-
czenie. Można napisać program korzystający z klas i i korzystać z tych
klas wszędzie tam, gdzie wymagane są obiekty . Gdy zajdzie taka potrzeba, można
pózniej dodać do programu inny rodzaj pojazdu, na przykład autobus. I znowu  ponie-
waż autobus jest pojazdem, może wystąpić wszędzie tam, gdzie wymagane są obiekty
. Oznacza to, że można dodawać nowe funkcje do programu bez konieczności
wprowadzania zmian w istniejącym już kodzie. Jest to bardzo istotne podczas tworzenia
dużych programów.
Te same zasady obowiązują w innych językach programowania, co widać na poniższym
przykładzie w języku C#.
Omówiliśmy już dziedziczenie, ale co z polimorfizmem? Jest to bardzo ważna i uży-
teczna cecha języków obiektowych. Słowo polimorfizm pochodzi z greki i oznacza
 wiele kształtów . Tutaj oznacza, że dany obiekt należy jednocześnie do wielu typów.
Załóżmy, że naszym zadaniem jest napisanie programu do obsługi grafiki. W programie
zdefiniowaliśmy klasę (figura), od której będą pochodziły wszystkie klasy opisu-
jące inne figury. W każdej z tych klas powinna znajdować się metoda, której zadaniem [ Pobierz całość w formacie PDF ]

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • supermarket.pev.pl
  •