Programowanie obiektowe w .NET

Platforma .NET Framework jest technologią wspierającą w pełni programowanie obiektowe. Rozpatrując konkretnie język C#, każdy tworzony przez programistę element jest obiektem danej klasy. Programowanie obiektowe, tworzenie klas oraz korzystanie z obiektów klas są zagadnieniami niezbędnymi do świadomego tworzenia aplikacji bazujących na platformie .NET Framework.

Czym jest programowanie obiektowe?

Głównym założeniem programowania obiektowego jest to, że każdy element w kodzie programu jest obiektem danej klasy. Nawet zmienną można postrzegać jako obiekt, gdyż posiada ona metody, które można wywołać z jej poziomu.

Metoda ToString() wywołana z poziomu zmiennej a dokonuje konwersji zmiennej typu liczbowego Integer na typ łańcucha znaków String. W podobny sposób odbywa się wywołanie metody CompareTo(), która przyjmuje jeden argument.

Niestety na samym początku nauki programowania pojęcie klasy jest często mylnie pojmowane. Uczniowie, studenci często rozumieją pojęcie programowania obiektowego w odniesieniu do wizualnych części programu – kontrolek znajdujących się na głównej formatce. Oczywiście elementy takie jak button’y, pola tekstowe, label’e są obiektami klas, ale nie należy utożsamiać obiektów wyłącznie z kontrolkami. Podobna sytuacja ma miejsce w matematyce: każdy kwadrat jest prostokątem, ale nie każdy prostokąt jest kwadratem (pomijając rozważania przestrzeni). Niemal identyczna zasada obowiązuje w przypadku obiektów oraz kontrolek: każda kontrolka jest obiektem, ale nie każdy obiekt jest kontrolką.

Programowanie obiektowe Visual Studio 2010
Programowanie obiektowe Visual Studio 2010

Programowanie obiektowe w praktyce

Więc w jaki sposób należy rozumieć pojęcie obiektu danej klasy? Zacznijmy od utworzenia własnej, prostej klasy z kilkoma właściwościami. Możemy utworzyć nową klasę w obrębie pliku z kodem programu naszej formatki na końcu tego pliku (przed klamrą zamykającą) lub w nowym pliku klasy, co jest wskazane dla zachowania porządku. Aby utworzyć plik nowej klasy w oknie Solution Explorer klikamy prawym przyciskiem myszy na nazwę naszego programu (zazwyczaj zaraz pod pozycją Solution) i wybieramy z menu kolejno Add -> Class lub Add -> New Item , gdzie wyberamy Class, a następnie nadajemy nazwę klasy: Prostokat.

Na samym początku struktury klasy decydujemy, czy ma być ona dostępna w sposób publiczny (public) czy prywatny (private), dla osób początkujących nie ma to większego znaczenia, więc można założyć dostępność publiczną (dostępne są również inne opcje, ale zachowajmy przejrzystość). Słowo kluczowe class definiuje utworzoną strukturę jako klasę, po czym podajemy własną nazwę klasy (Prostokat).

Klasa Prostokat zawiera dwie właściwości. Czym są właściwości? W najprostszy sposób (zwłaszcza na początku) właściwości można zrozumieć jako zmienne zawarte w klasie. W odróżnieniu od zmiennych możemy natomiast zdefiniować sposób odczytu (przy pomocy get) oraz zapisu (przy pomocy set) wartości właściwości. Polecam oczywiście zapamiętanie struktury właściwości, ale dla zaoszczędzenia czasu Visual Studio potrafi wykonać wiele pracy za nas. Aby w szybki sposób utworzyć nową właściwość należy wpisać słowo kluczowe “prop”, a następnie nacisnąć dwa razy klawisz Tab. W posobny sposób możemy tworzyć również inne struktury w kodzie w pakiecie Visual Studio.

W takiej postaci możemy już korzystać z naszej klasy. Programowanie obiektowe pozwala na korzystanie z klas i tworzenie nowych obiektów klas w prosty sposób.

Klikając dwukrotnie na dowolnym, dodanym do formatki button’ie wypełniamy jego metodę zdarzenia Click następująco:

W pierwszej kolejności należy utworzyć obiekt naszej klasy Prostokat. Wywoływany jest wówczas standardowy konstruktor klasy (w późniejszych kursach poruszone zostaną konstruktory niestandardowe). Utworzony obiekt nowy_prostokat należący do klasy Prostokat umożliwia korzystanie ze wszystkich publicznych właściwości oraz metod udostępnionych w jego klasie. Możemy odczytywać i zapisywać poszczególne właściwości obiektu nowy_prostokąt. Do najważniejszych udogodnień oferowanych przez programowanie obiektowe należy tutaj fakt, że parametry get oraz set przy właściwościach naszej klasy umożliwiają nam decydowanie, czy dana właściwość pozwala na jej odczyt oraz zapis, czy jest jedynie do odczytu lub tylko do zapisu. Jest do jedna z bazowych różnic względem tradycyjnych zmiennych. Dzięki możliwościom oferowanym przez parametry get oraz set nie jesteśmy ograniczeni jedynie do tradycyjnej polityki dostępu bazującej na słowach kluczowych public, private oraz protected.

Aby poznać bardziej strukturę, na której opiera się programowanie obiektowe dokonamy modyfikacji naszej klasy:

Język C# wrażliwy jest na wielkość znaków w nazwach zmiennych, pól, właściwości, metod, klas, obiektów itp. Do naszej klasy dodaliśmy możliwość obliczania i zwracania wartości pola prostokąta przy wykorzystaniu i zademonstrowaniu pozostałych struktur dostępnych w klasach. Na pierwszej pozycji zauważyć można zmienną pole, która w przypadku klasy nosi nazwę: pole klasy. Pola klasy z założenia powinny być ukryte dla obiektów zewnętrznych, dlatego dostęp do niego ustawiony jest na private.

Utworzona została również właściwość Pole, jest ona odrębnym elementem, pamiętamy, że wielkość liter ma znaczenie. W tym przypadku zdarzenie get właściwości Pole wywołuje metodę getPole przyjmującą dwa argumenty w postaci właściwości klasy: BokA, BokB. Metoda ta dokonuje obliczenia pola prostokąta oraz zapisania wyniku – nie następuje zwrócenie wyniku przez metodę, wskazuje na to słowo kluczowe void przed nazwą metody. Zdarzenie get zwraca natomiast pole.

Programowanie obiektowe w celu jego zrozumienia, zwłaszcza na początku, wymaga przejście po kolejnych krokach wykonywania algorytmu w kodzie programu. Visual Studio również daje nam taką możliwość. Modyfikacja kodu wywołującego w metodzie Click button’a wygląda następująco:

Wszytko wygląda więc jak do tej pory, posługujemy się właściwościami klasy Prostokat. Dokonajmy jednak analizy wykonywania kody. W tym celu w linii, gdzie deklarujemy obiekt nowy_prostokat, z lewej strony zaznaczmy poprzez kliknięcie czerwoną kropkę stop.

Programowanie Obiektowe w .NET
Programowanie Obiektowe w .NET – proces debugowania

Od tego momentu, kiedy uruchomimy program przy pomocy Visual Studio i naciśniemy wybrany Button, proces zatrzyma się we wskazanym miejscu. Teraz możemy śledzić wykonywanie programu krok po kroku naciskając F11. Możliwe jest wówczas podejrzenie wartości poszczególnych właściwości poprzez najechanie na nie kursorem myszy. Zauważmy, że właściwość Pole uzyskuje swoją wartość zaraz po przypisaniu wartości do właściwości BokB. Oznacza to, że wartości właściwości obiektu są aktualizowane z każdą operacją na innych właściwościach obiektu, jest to cecha użyteczna, ale bez jej świadomości podczas wykonywania programu mogą dziać się dziwne rzeczy, możemy w ten sposób też zaoszczędzić wiele linii pisanego kodu. Nie należy też przesadzać z liczbą zbędnych właściwości, ponieważ każda operacja na nich wymusza wykonanie operacji na pozostałych właściwościach, a kiedy są one skomplikowane, potrafią znacznie obciążyć proces programu.

Ostatnia linia kodu próbuje przypisać wartość do właściwości Pole. Nie jest to możliwe, ponieważ właściwość Pole jest jedynie do odczytu, jednak taka próba nie kończy się w tym przypadku zgłoszeniem wyjątku.

Mam nadzieję, że powyższy przykład był w stanie przybliżyć początkującym pojęcie, którym jest programowanie obiektowe. Warto zwrócić uwagę na zalety pisania kodu z użyciem IntelliSense. Kiedy napiszemy kropkę po nazwie obiektu (np. nowy_prostokat), pojawia się menu z możliwymi do wywołania metodami i właściwościami, które możemy użyć w kodzie programu, są to elementy udostępniane publiczne poprzez daną klasę. Wywołać podpowiedzi IntelliSense możemy również poprzez naciśnięcie klawiszy Ctrl + Spacja, dzięki czemu w dowolnym momencie możemy podejrzeć dostępne elementy oraz ich opisy wraz z wymaganymi argumentami oraz typami argumentów.

Loading Disqus Comments ...
Loading Facebook Comments ...