......................................................................................................................... 649 String............................................................................................................................... 649 Time................................................................................................................................ 650 VarType .......................................................................................................................... 650 Typ Variant zastąpiony przez Object........................................................................................ 650 ! $. 4Q\F\KCđ 6YQT\GPKGMNCU Możliwość definiowania klas i tworzenia ich egzemplarzy (instancji) jest jedną z naj- ważniejszych cech każdego języka zorientowanego obiektowo. Aż do chwili obecnej Visual Basic nie obsługiwał w pełni obiektowości. Mimo że moduły w VB6 nazywane były modułami klas, tak naprawdę były interfejsami w sensie technologii COM (ang. Component Object Model). Oznacza to, że VB6 nie obsługiwał idiomu klasy; nie umoż- liwiał korzystania z innej bardzo pożytecznej cechy programowania obiektowego — dziedziczenia. Zasadniczą różnicą pomiędzy interfejsami, a klasami jest dziedziczenie. Każda imple- mentacja interfejsu VB6 (modułu klasy) wymagała wprowadzenia wszystkich publicz- nych metod dla tego interfejsu. Klasy, w przeciwieństwie do interfejsu, obsługują dziedzi- czenie. Dziedziczenie oznacza, że mogą istnieć podklasy zawierające pola, właściwości, metody i zdarzenia klasy nadrzędnej. Tworząc nowe klasy, możesz je wykorzystywać do rozszerzania istniejących klas bazowych. Zarówno zorientowane obiektowo klasy, jak i interfejsy COM udostępniają twórcom oprogramowania potężne marzędzia do tworzenia i zarządzania zaawansowanymi pro- jektami. Obie technologie są bardzo przydatne i obie zostały zaimplementowane w Vi- sual Basic .NET. Dodatkowo, Microsoft udoskonalił i poprawił interfejsy i opisy klas w celu zapobiegnięcia niejednoznaczności podczas ich stosowania. Obie technologie po- siadają odmienne zasady składni. W tym rozdziale zostanie przedstawiona zmieniona składnia interfejsów oraz właściwości nowej definicji klasy, włączając w to dziedziczenie, polimorfizm, przeciążanie i prze- słanianie metod. Dodatkowo, rozdział ten zawiera kolejne przykłady wykorzystania ob- sługi wyjątków i wielowątkowości w Visual Basic .NET. Klasa w Visual Basic .NET nie jest klasą VB6. Klasy VB6 są w VB .NET deklarowane i definiowane przy użyciu słowa kluczowego . Klasy VB .NET są definiowa- nymi przez użytkownika typami agregacyjnymi, umożliwiającymi dziedziczenie. Różnią się one od interfejsów COM, które są dokładnie tym, czym w VB6 były moduły klasy. 236 Część II Zaawansowane programowanie zorientowane obiektowo Wszystkie klasy w Visual Basic .NET są definiowane w pliku .VB (w przeciwieństwie do pliku .CLS), a w pliku takim może być zawarta jedna lub kilka klas. (Klasy, struktury i moduły mogą być zgromadzone w jednym pliku). Podstawowa składnia klasy jest na- stępująca: Jeśli przez przypadek popełnisz błąd podczas deklarowania klasy, Visual Studio.NET IDE podkreśli linią falistą miejsce, w którym ten błąd występuje (zobacz rysunek 7.1) Visual Studio .NET IDE zaznacza linią falistą miejsca zawierające błąd Najczęściej klasy poprzedzone są specyfikatorem dostępu , możesz jednak wyko- rzystać inne specyfikatory. W podrozdziale „Używanie specyfikatorów dostępu do klas” znajdziesz więcej informacji na ten temat. Instrukcje i tworzą jednostkę hermetyzacji dla klasy. Wszystkie skła- dowe klasy umieszczane są pomiędzy tymi instrukcjami. Możesz dodawać dowolną liczbę pól, właściwości, metod i zdarzeń w celu zdefiniowania klasy, która ma spełniać określone wymagania w dziedzinie rozwiązania jakiegoś pro- blemu. Jakkolwiek liczba składowych w klasie może być dowolna, jednak przestrzeganie następujących zasad w większości przypadków pozwoli na zachowanie przejrzystości w kodzie i uproszczenie tworzonych konstrukcji. Klasy powinny składać się z maksymalnie sześciu składowych publicznych, włączając w to właściwości i metody. Liczba składowych niepublicznych może być większa, gdyż nie wpływają one na prostotę korzystania z klasy przez użytkownika. W ogólnym przypadku jakiekolwiek składowe niepubliczne powinny być chronione i wirtualne — posiadając modyfikator . Rozdział 7. Tworzenie klas 237 Pola, właściwości, zdarzenia wspólnie określane są mianem składowych. Termin skła- dowa odnosi się po prostu do czegoś, co zostało zdefiniowane jako część klasy. Jak we wszystkich regułach, także i tu są wyjątki. Istnieje zasada „wystarczająco dobry”, wprowadzona przez Grady Boocha, mówiąca, że jeśli różnorodność oraz liczba składo- wych jest rozsądna i wystarczająca, to liczba ta jest wystarczająco dobra. W książce Ja- mesa Coplien „Zaawansowany C++” zostały przedstawione zaawansowane zagadnienia, które łamią ogólne zasady. Kolejnym przykładem wyjątku od opisanych powyżej reguł są klasy ze wszystkimi składowymi typu , jak np. klasa w CLR. Jak zostało wspomniane wcześniej, podstawowe wskazówki do definiowania klas są do- brym punktem startowym, istnieją jednak inne zasady i motywacje, którymi można się kierować podczas tworzenia klas. Na przykład technika refaktoringu „Zastosuj obiekt pa- rametryczny”, której zastosowanie ulepsza przekazywanie parametrów, wymaga utwo- rzenia dodatkowych klas. W Visual Basic .NET występuje pięć specyfikatorów dostępu, opisanych w kolejnych podrozdziałach. Specyfikator dostępu , zastosowany na poziomie klasy, jest najczęściej używa- nym specyfikatorem. Klasy publiczne są to klasy, do których przewidziany jest dostęp przez każdego użytkownika. Specyfikator dostępu występuje w kodzie po atry- butach i bezpośrednio przed słowem kluczowym . (W rozdziale 12., „Definiowa- nie atrybutów”, znajdziesz więcej informacji o atrybutach). Specyfikator ma zastosowanie wyłącznie w klasach zagnieżdżonych. Klasy zagnieżdżone są są dostępne wyłącznie w danej klasie i w klasach potomnych. Nie mo- żesz zdefiniować składników egzemplarza klasy zagnieżdżonej z widocznością większą niż definicja klasy.
|