Programowanie obiektowe

Omawiając aspekty programowania w Unity, nie sposób pominąć programowanie obiektowe C#, którego zasady, krok po kroku wyjaśnia niniejszy poradnik.

Aby do końca zrozumieć wcześniej opisane przykłady, zagadnienia klas i obiektów, będziemy musieli powiedzieć sobie co nieco o samym programowaniu obiektowym, jego zasadach i własnościach. Jest to podejście bardzo naturalne, dlatego lubiane przez wielu programistów. Na nim oparty jest język C#, z którego korzystamy.

 

Pojęcie klasy i obiektu.

Te dwa pojęcia zą ze sobą ściśle powiązane. Najprościej tę zależność opisać można zdaniem: Klasa jest przepisem na obiekt„.

Innymi słowy: klasa jest schematem posiadającym zadeklarowane zmienne (w przypadku programowania obiektowego określanych jako pola klasy) oraz zachowania w postaci metod. Na podstawie tak zdefiniowanej klasy można w prosty sposób tworzyć obiekty, które będą przypisywać tym polom jakieś wartości. Oczywiście każdy obiekt posiada swój osobisty zestaw takich pól, przez co pozostają niezależne od siebie. Takie podejście jest bardzo podobne do tego, co zaobserować możemy w rzeczywistym świecie. Dla każdego istniejącego na świecie obiektu możemy stworzyć instancję o podobnym lub identycznym zestawie cech, ale innych ich wartościach.

Przykład:

Choćby człowiek. Każdy człowiek posiada wzrost, wagę, kolor oczu, kolor włosów, imię czy datę urodzenia. Różnimy się między sobą jedynie wartościami tych danych.

Dlatego prowizoryczna pseudo-przepis na człowieka wyglądałby mniej więcej tak:

 

Poznajemy programowanie obiektowe C# - Unity3D

 

Natomiast w języku C#, w formie bardziej zrozumiałej dla komputera, tak:

 

Poznajemy programowanie obiektowe C# - Unity3D

 

Zwróćmy uwagę na metodę przedstawSie(). Wypisuje ona na ekran imię, które teoretycznie jest puste. Dzieje się tak dlatego, że jest to jedynie definicja tej metody w klasie, a wywoływana ona będzie tylko przez stworzone obiekty, które nadadzą polu imie jakąś konkretną wartość. Dlatego też wywołanie tej metody dla kilku różnych obiektów da inne wyniki, gdyż każdy obiekt przedstawi się imieniem, które przydzielił swojej kopii tego pola.

 

 

„Konstruktory”, tworzenie obiektów i dostęp do pól.

 

Tworzenie obiektów i dostęp do ich pól oraz metod.

Nowym, kluczowym słówkiem, występującym przy tworzeniu obiektów jest słówko new.

Podstawowa definicja obiektu pewnej klasy wygląda następująco:

NazwaKlasy nazwaObiektu = new NazwaKlasy();

Nazwa obiektu jest dowolna, warto jednak zadbać by nazewnictwo tak obiektów, jak i pól oraz metod było jak najbliższe przeznaczeniu tych danych. Obiekt czy pole o nazwie „abcdefg” sprawi, że nawet osoba, która pisała ten kod w końcu się zagubi.

Dostęp do konkretnych pól tudzież metod danego obiektu odbywa się poprzez rozdzielenie jego nazwy oraz nazwy pola kropką, w następujący sposób:

 

Poznajemy programowanie obiektowe C# - Unity3D

 

Takie pole zachowuje się jak standardowa zmienna. Należy jedynie sprecyzować o które pole, którego obiektu chodzi. Można nimi dowolnie manipulować, tak jak standardowymi zmiennymi. To samo tyczy się metod, ich wywoływanie wygląda identycznie.

Powyższy kod, choć prawidłowy, nie jest napisany optymalnie – i to co najmniej z dwóch powodów. Po pierwsze, taki bezpośredni dostęp do pól jest kiepską praktyką, zalecane jest używanie tzw. getterów i setterów, o których opowiemy sobie kiedy indziej. Po drugie, tworzenie pustego obiektu, a dopiero później nadawanie mu wartości niepotrzebnie wydłuża kod i robi bałagan. Im więcej pól do ustawienia, tym dłuższy kod trzeba by napisać. Strata czasu i miejsca. Całość załatwić można jednym wywołaniem, służy do tego konstruktor.

 

 

Konstruktor.

Konstruktor jest metodą, która umożliwia tworzenie obiektów na podstawie klasy. Konstruktor można zdefiniować samemu, określając w jakiś sposób tworzone mają być obiekty danej klasy. Jeżeli tego nie zrobimy, skorzystać możemy tak zwanego konstruktora domyślnego, który jedyne co zrobi, to zarezerwuje w pamięci miejsce na obiekt, nie ustawiając żadnych wartości jego pól.

Konstruktor deklarujemy jak każdą inną metodę w klasie, z tą różnicą, nazywać się identycznie jak klasa, a przed samą nazwą stawiamy słówko kluczowe public.

Tak wygląda deklaracja podstawowego, pustego konstruktora, dołączonego do kodu z poprzedniego przykładu.

 

Poznajemy programowanie obiektowe C# - Unity3D

 

Konstruktory możemy definiować w dowolny sposób, a ich ilość ograniczona jest poprzez parametry. Nie mogą występować dwa konstruktory o identycznych parametrach, gdyż kompilator zgłupieje i nie będzie wiedział, z którego powinien skorzystać.

 

Spójrzmy na poniższy przykład:

 

Poznajemy programowanie obiektowe C# - Unity3D

 

Pierwsza, rzucająca się w oczy rzecz  – nowe słówko kluczowe „this„. Używamy go w przypadku, gdy chcemy wskazać pole konkretnego obiektu, ale ten obiekt nie jest jeszcze utworzony. Konstruktor gdy natrafi na te słówko tworząc obiekt, będzie wiedział, że dana linijka odnosi się do pola tego konkretnego obiektu, który właśnie tworzy. Dzięki temu rozróżnić możemy pole klasy od parametru konstruktora, które mają takie same nazwy. Utrzymywanie identycznego nazewnictwa pól oraz przypisywanych do nich parametrów konstruktora nie jest konieczne, ale zalecane – bardziej czytelne.

 

Zaprojektowałem dwa przykłady konstruktora. Pierwszy ustawia wszystkie pola, a drugi z kolei pobiera jedynie imię i nazwisko, a resztę pól ustawia z automatu. Jak widać działanie konstruktora możemy definiować dowolnie.

Przejdź do poradnika Unity3D:

Unity3D – poradnik krok po kroku.

Podziel się wiedzą z innymi

Komentarz do postu