FANDOM


DefinicjaEdytuj

Słowo kluczowe class służy do deklaracji klasy.

Czym jest klasa?Edytuj

Zapamiętaj sobie, że klasa sama w sobie nie jest obiektem, a jedynie typem obiektów. W jej wnętrzu możemy zadeklarować inne obiekty jak zmienne (pola) lub nawet funkcje (metody).

Klasa grupuje tak jakby zestaw obiektów, z których składa się jeden większy obiekt. Obrazowo: klasa to schemat, wg. którego budowany jest telewizor. Aby obiekt telewizor mógł działać, w środku musi mieć kilka mniejszych części, obiektów. Przyciski są metodami, dzięki którymi możemy np. zmienić kanał. Dwa telewizory mogą się składać z takich samych części, ale nadal są to dwa oddzielne obiekty. Jeśli przełączymy kanał w jednym, to nie zmieni się on w drugim.

Po co jest klasa?Edytuj

Zwiększa czytelność programu i ułatwia jego ewentualną zmianę. Oczywiście zależy to od umiejętności i doświadczenia programisty. Przeczytaj o programowaniu obiektowym. Poza tym w języku CBOT klasa jest jedynym sposobem na przesyłanie sobie informacji pomiędzy robotami.

Jak zdefiniować klasę?Edytuj

Klasę definiuje się w bardzo prosty sposób, poza główną funkcją programu, najlepiej na górze pliku:

public class NazwaKlasy
{
 // cialo klasy
}

Niespodzianką może być tu słowo public, z którym można było się spotkać już przy funkcjach publicznych. Oznacza ono mniej więcej to samo:

Publiczne klasy są dostępne dla wszystkich robotów na danej mapie.

W CBOT nie ma innego rodzaju klas, innymi słowy:

W języku CBOT mogą istnieć tylko klasy publiczne.

Ciało klasyEdytuj

W ciele klasy możemy deklarować dowolne obiekty, nawet te będące instancjami innej klasy. Robimy to dokładnie tak, jak w zwyczajnych funkcjach:

public class NazwaKlasy
{
 int Liczba;
 string Tekst;
 point Pozycja;
 
 void F(int n)
 {
  return;
 }
}

Składnia więc wygląda tak:

public class NAZWA
{
 [specyfikator_dostepu]
  [obiekty]
}

Wszystko byłoby jasne, gdyby nie specyfikator dostępu. Jak sama nazwa wskazuje, określa on gdzie obiekty będą dostępne. Domyślnie obiekty są publiczne, dlatego powyższy przykład zadziała. Oprócz tego obiekty mogą być jeszcze prywatne. Przeczytaj strony o tych specyfikatorach, aby dowiedzieć się więcej.

Treść metod musi być definiowana wewnątrz klasy.

Tworzenie instancji klasyEdytuj

Obiekty klas działają nieco inaczej od zwykłych. Same w sobie nie przechowują żadnej sensownej wartości, ale pozwalają się odwoływać do pól, których wartości są inne dla każdej instancji, i metod, które są wykonywane na rzecz danego obiektu. Definicja obiektu typu klasa (czyli instancji klasy) wygląda tak:

NazwaKlasy NazwaObiektu;

Zapewne przeczytałeś tę linijkę tak: NazwaObiektu jest obiektem typu NazwaKlasy.

Jeśli tak, popełniłeś w tej chwili błąd. W rzeczywistości: NazwaObiektu jest wskaźnikiem do instancji klasy NazwaKlasy.

Tylko, że w tej chwili NazwaObiektu nie pokazuje na żaden obiekt, zawiera w sobie adres null, czyli nic. W celu stworzenia obiektu używa się operatora new:

NazwaObiektu = new NazwaKlasy;

Teraz możemy już się odwoływać do tego obiektu. Przeczytaj więcej na temat operatora new.

Odwoływanie się do obiektuEdytuj

Odwołujemy się do poszczególnych składowych obiektu przy pomocy operatora wyłuskania '.':

NazwaObiektu.NazwaSkladowej

Inicjalizacja domyślnaEdytuj

W ciele klasy możemy przypisać wartości obiektom, mimo że one jeszcze nie istnieją:

public class NazwaKlasy
{
 int Liczba = 0;
 string Tekst = "ABC";
 point Pozycja(0, 0, 0);
}

Klasa sobie zapamiętuje te wartości i w momencie kreacji obiektu (patrz paragraf wyżej) inicjalizuje nimi nowo utworzone zmienne.

Lepszym wyjściem w przypadku nie-statycznych zmiennych jest użycie konstruktora.

Inicjalizacja obiektuEdytuj

Istnieje możliwość utworzenia wskaźnika i obiektu w jednej linijce:

NazwaKlasy NazwaObiektu();

Po tej operacji NazwaObiektu już jest wskaźnikiem do istniejącego obiektu i można go używać.

W nawiasie możemy podać argumenty dla konstruktora.

KonstruktoryEdytuj

W trakcie kreacji obiektu zawsze jest wywoływany konstruktor. Domyślny konstrutktor nie robi nic, ale można zdefiniować własny konstruktor, aby ułatwić pracę w obiektami:

public class NazwaKlasy
{
// jakies pola
int Liczba;
string Tekst;
point Pozycja;

 // konstruktory
void NazwaKlasy() // domyslny konstruktor
{
  Liczba = 0;
  Tekst = "";
  Pozycja.x = 0;
  Pozycja.y = 0;
  Pozycja.z = 0;
}

void NazwaKlasy(int n, string txt, float x, float y, float z) // konstruktor z argumentami
{
  Liczba = n;
  Tekst = txt;
  Pozycja.x = x;
  Pozycja.y = y;
  Pozycja.z = z;
}

}

Od teraz obiekty będzie można tworzyć tak:

NazwaKlasy NazwaObiektu(); // wywola domyslny konstruktor, czyli np. Liczba = 0

Lub tak:

NazwaKlasy NazwaObiektu(12, "ABC, 1, 2, 3); // wywola konstruktor z argumentami, czyli np. Liczba = n

Analogicznie sytuacja wygląda w przypadku użycia operatora new.

Konstruktor ma taką samą nazwę jak klasa.

Konstruktor może być wywołany tylko RAZ, w trakcie tworzenia nowego obiektu.

DestruktorEdytuj

Każdy obiekt jest w końcu niszczony. Następuje to w chwili skończenia się bloku instrukcji, w których został utworzony. Możemy chcieć przed zniszczeniem obiektu wykonać jakieś operacje.

UWAGA: Istnienie destruktora w języku CBOT nie ma większego sensu, bo nie ma narzędzi umożliwiających ręczne zarządzanie pamięcią, innymi słowy: nie ma po czym sprzątać, bo wszystkie odpowiednie czynności są wykonywane automatycznie. Jest jednak jeden przypadek, w którym destruktor może się przydać: w pracy z obiektami statycznymi.

Tworzy się go tak samo jak konstruktor, tylko że przed nazwą dodaje się znak tyldy "~". W jednej klasie może istnieć tylko jeden destruktor.

​public class MojaKlasa
{

static int licznik = 0;

MojaKlasa() { licznik += 1; }
~MojaKlasa() { licznik -= 1; }

}

Przydatne linkiEdytuj

Więcej na temat klas na następujących podstronach:

  • class - Deklaracja klasy
  • public - Deklaracja funkcji publicznej
  • private - Deklaruje prywatnego członka klasy
  • static - Deklaruje stałego członka klasy
  • new - Tworzy nową instancję
  • this - Odniesienie do bieżącej instancji

Ad blocker interference detected!


Wikia is a free-to-use site that makes money from advertising. We have a modified experience for viewers using ad blockers

Wikia is not accessible if you’ve made further modifications. Remove the custom ad blocker rule(s) and the page will load as expected.

Więcej z Fandomu

Losowa wiki