You are on page 1of 44

ZS nr 3 im.

Antoniego
Kocjana w Olkuszu

Klasy, metody i
funkcje 2/2
Nauczyciel: mgr inż. Dominik Wąs
Klasy
Klasa to pewnego rodzaju szablon, który zawiera charakterystykę obiektu
tworzonego na podstawie tego szablonu – zarówno jego dane składowe
jak i operacje, które można na nim wykonać.

Klasą może być np. kot jako gatunek ssaka. Natomiast obiektem tej klasy
jest konkretny kot (mający np. swoje imię, wagę, kolor sierści itp.).

Obiekt jest zatem egzemplarzem danej klasy. Konkretnego kota możemy


pogłaskać czy nakarmić, ale nie możemy tego zrobić z gatunkiem „kot”.
Gatunek możemy jedynie opisać, zdefiniować.
Pracowników mogą charakteryzować takie dane jak imię, nazwisko, data
urodzenia, adres zamieszkania czy zarobki. Klasa Pracownik jedynie
wyszczególnia (definiuje) dane opisujące pracowników, a obiektami tej
klasy są konkretni pracownicy.
Budowa klasy
Skoro klasa ma być szablonem, na podstawie którego tworzone będą
obiekty, należy ten szablon odpowiednio zdefiniować. Budowę klasy
opisuje szereg elementów, zostały one zgrupowane i przedstawione na
rysunku oraz w składni.
[Atrybuty][Modyfikatory] class Nazwa [:lista elementów bazowych]
{
Ciało klasy
}

Opis klasy (deklaracja klasy) zawiera dwa elementy obowiązkowe –


słowo kluczowe class oraz nazwę klasy (identyfikator), a ponadto może
zawierać kilka informacji opcjonalnych, opisujących charakter klasy. W
prezentowanej składni opis klasy zawiera się w pierwszej linii. Ciało
klasy (w składni ujęte w klamrach) definiuje zawartość szablonu (klasy),
na podstawie którego będą tworzone obiekty.
Elementy klasy (ciało klasy)
Wśród elementów klasy możemy wyróżnić dwie grupy:

elementy danych
elementy funkcyjne

Odzwierciedla to charakterystyczne w programowaniu obiektowym


powiązanie danych i zachowania (tego co się z danymi dzieje). Elementy
danych przechowują niezbędne do działania obiektu dane (np. w klasie
Osoba – nazwisko osoby, jej wiek, adres itp.).
Elementy danych
Elementy danych to tzw. pola (lub po prostu dane).

[Modyfikatory] typ Nazwa [= wartość domyślna];

Możliwe modyfikatory to modyfikator dostępu i (lub) modyfikator


określający charakter pola (np. statyczne, stałe). Typ oraz nazwa
pola to elementy obowiązkowe w definicji pola. Opcjonalnie
można przypisać wartość domyślną (dla stałych jest to
obowiązkowe).
Elementy funkcyjne
Elementy funkcyjne odpowiadają za zachowanie obiektów – są
to np. metody, konstruktory, destruktory, delegaty i zdarzenia.
Po uruchomieniu tego programu wyświetli się nazwisko pracownika i
kwota jego zarobków. Przeanalizujemy kod klasy Pracownik. Klasa ta
posiada dwa pola (nazwisko i zarobki) oraz dwa elementy funkcyjne:
konstruktor oraz metodę, co uwidocznione zostało na powyższym
rysunku.
Konstruktor
Konstruktor to specjalna metoda, która jest wykonywana w chwili
tworzenia obiektu, najczęściej służy do inicjalizacji pól obiektu.
Konstruktor musi się nazywać tak samo jak klasa, nie może nic zwracać
(nie umieszcza się w jego definicji nawet słowa kluczowego void) i
musi być publiczny.
Metody
Metody statyczne nie dotyczą konkretnego obiektu, dlatego w ich
przypadku najlepszym sposobem przekazania danych do wnętrza
metody było użycie argumentów. Metody „zwykłe” mają dostęp do
danych obiektu, dla którego są wykonywane – tych danych nie trzeba
przekazywać do metody w postaci argumentów.
Publiczna metoda PokazPracownika() nic nie zwraca (void), ani nie
przyjmuje argumentów. W jej ciele jest instrukcja Console.WriteLine()
wyświetlająca oba pola klasy – nazwisko i zarobki. Metoda ta ma dostęp
do obu tych danych (jedna jest z nich private, a druga public), ponieważ
jest zdefiniowana wewnątrz klasy i ma dostęp do wszystkich składowych
klasy.
Deklaracja obiektu
Deklarowany jest tu obiekt o nazwie p1. W języku C# każda zmienna
jest obiektem.

Pracownik p1 = new Pracownik("Kowalski", 1000);

Typ Nazwa = new Typ([lista argumentów]);


Obiekt można deklarować albo w jednej linii , albo w dwóch osobnych:

Literały "Kowalski" oraz 1000 to argumenty dla konstruktora.

Konstruktor ten nazywa się jak klasa (Pracownik), jest publiczny i nic nie
zwraca (nie ma nawet słowa kluczowego void). W ciele tego konstruktora
są tylko dwie instrukcje przypisania. Konstruktor przypisuje tu argumenty
do obu pól klasy. Konstruktor jak i każda metoda ma dostęp do
wszystkich pól własnej klasy.
Obiekty deklaruje się po to, aby wykonać na nich jakąś „pracę”, do czegoś
je użyć.
Obiekty deklaruje się po to, aby wykonać na nich jakąś „pracę”, do czegoś
je użyć.
Zmiana wartości pól obiektu
Zmiana wartości pól obiektu

Ponieważ pole nazwisko zostało zadeklarowane jako public, to jest


możliwa zmiana wartości pola obiektu poza macierzystą klasą
Pracownik. Natomiast próba kompilacji programu z instrukcją p1.zarobki
= 2000; zakończyłaby się błędem, ponieważ pole zarobki ma modyfikator
dostępu private, czyli nie można tego pola używać poza klasą.
Zmiana wartości pól obiektu
Do pola obiektu odwołujemy się podobnie jak do metody – najpierw
piszemy nazwę obiektu, kropkę, a następnie nazwę pola. Poza daną klasą
mamy dostęp jedynie do tych elementów klasy (pól i metod), które mają
odpowiedni modyfikator dostępu.
Jak komunikować się z obiektem, jeśli w danej klasie wszystkie pola
byłyby o dostępie private?
Właściwości
(ang. properties)

służą do kontrolowania
dostępu

(odczytu i zapisu)

do danego pola klasy.


W przypadku, gdy właściwości nie mają żadnej dodatkowej pracy do
wykonania, co ma miejsce w omawianych przykładach (tzn. akcesor get
udostępnia daną do odczytu, a set do zapisu – i nie robią nic więcej)
jest możliwe użycie tzw. automatycznych właściwości. Mają one
uproszczoną (zwięzłą) składnię i z tego powodu są chętnie używane.
Właściwości
(ang. properties)

służą do kontrolowania
dostępu

(odczytu i zapisu)

do danego pola klasy.


Jak można zauważyć, postać deklaracji automatycznej właściwości
upodobniła się „wizualnie” do deklaracji pól. Niemniej nadal jest to
definicja właściwości (uproszczonej) i będziemy ją traktować jako
element funkcyjny klasy.
Składniki statyczne
Klasa może zawierać
składowe statyczne,
zarówno pola jak i
metody. Składowe
statyczne nie wymagają
tworzenia obiektów i
dotyczą całej klasy, a nie
konkretnego obiektu.
Tablice obiektów
Bibliografia
1. Anna Kempa, Tomasz Staś. 2018. Wstęp do programowania w C#.
Wydawnictwo Pracowni komputerowej Jacka Skalmierskiego. [c-
sharp.ue.katowice.pl]
2. Mirosław J. Kubiak. 2012. C# Zadania z programowania z
przykładowymi rozwiązaniami. Wydawnictwo Helion
3. Joseph Albahari, Ben Albahari. 2021. C# 9.0. Leksykon
kieszonkowy. Wydawnictwo Helion

You might also like