8035


Klasy

Przegląd zagadnień

0x08 graphic

Na zajęciach tego modułu studenci nauczą się tworzyć klasy, wraz ze zmiennymi składowymi i metodami, w języku C#. Na początku powtórzone zostaną pojęcia klasy i instancji, wprowadzone na poprzednich laboratoriach, aby mieć pewność, że te absolutnie fundamentalne pojęcia są dobrze rozumiane i rozróżniane.

Obok kodu w języku C# pojawią się schematy UML odpowiadające definiowanym i wykorzystywanym w przykładach klasom, które stosuje się w inżynierii programowania w diagramach klas.

Celem zajęć będzie zdobycie umiejętności tworzenia instancji klas, wykorzystanie konstruktorów oraz poznanie składowych statycznych.

Zajęcia kończą się podsumowaniem i pytaniami sprawdzającymi, po czym studenci wykorzystają praktycznie swoje umiejętności w środowisku Visual Studio 2005.

0x08 graphic
Obiekty wokół nas

Jak wspominaliśmy na poprzednich zajęciach, w otaczającym nas świecie bez trudu można wskazać wiele obiektów.

Obiekty podobne ze względu na strukturę - cechy i zachowanie - należą do jednej klasy, na przykład uczestnicy kursu należą do klasy student, przejeżdżające lub zaparkowane przed uczelnią samochody należą do klasy pojazd.

Wśród obiektów dostrzec można pewną hierarchię klas - mamy samochody osobowe, jak i ciężarowe, jednak obie te klasy możemy włączyć do klasy pojazd.

Definicja klasy i instancji

0x08 graphic

Sama klasa student czy pojazd nie istnieje w rzeczywistości: jest to tylko opis, prototyp wszystkich obiektów, które należą do tej klasy - mają określone w niej cechy i zachowanie. Tak też definiujemy klasę.

Klasa pojazd może zatem zawierać: liczbę osi, moc silnika, masę, maksymalną prędkość, a zachowaniem pojazdu jest jego poruszanie się, spalanie paliwa i tak dalej. Klasa student może się składać z nazwiska studenta, numeru indeksu, roku studiów, do regulaminowych zachowań należy uczestniczenie w wykładach.

Obiekty, z którymi mamy do czynienia w rzeczywistym świecie, są instancjami - czyli egzemplarzami - różnych klas. Jeden z naszych kolegów jest więc studentem o znanym nam nazwisku, pewnym numerem indeksu i znanym roku studiów; chodzącym na określone wykłady.

Instancje klas to zatem obiekty, które mają zestaw cech opisanych przez tą klasę wraz z przypisanymi wartościami oraz zachowujących się w sposób również opisany przez klasę.

Składowe klasy

0x08 graphic

Powiedzieliśmy, że klasa opisuje zestaw cech i zachowanie obiektu. W programowaniu obiektowym odpowiadają temu składowe klasy. Składowymi klasy mogą być przede wszystkim zmienne składowe - liczby, napisy, zmienne logiczne, oraz metody, które stanowią funkcjonalność obiektu.

Ponadto klasy definiowane w języku C# mogą zawierać obiekty, właściwości czy definicje wewnętrznych klas, o czym później.

Dla przykładu weźmy klasę drzwi, której przynajmniej jedna instancja powinna znajdować się w zasięgu wzroku. Na pierwszy rzut oka można określić takie cechy, jak kolor drzwi oraz to, czy drzwi są otwarte. Wiemy też, że drzwi można otwierać i zamykać.

Jeśli chcielibyśmy utworzyć model tego wycinka rzeczywistości w języku obiektowym, zdefiniujemy klasę drzwi o zmiennych składowych: kolor (łańcuch znaków) i zmienną logiczną określającą, czy drzwi są otwarte. Klasa drzwi będzie miała również dwie metody - otwórz i zamknij.

Na slajdzie znajduje się schemat klasy drzwi w języku UML (Unified Modeling Language), wykorzystywanym w projektowaniu i inżynierii oprogramowania. Schemat składa się z trzech części - w pierwszej podana jest nazwa klasy, poniżej wymienione są zmienne składowe tej klasy oraz ich typ, w dolnej części podane są metody tej klasy.

Definicja klasy

0x08 graphic

Klasę drzwi możemy zdefiniować w języku C# następująco. Rozpoczynamy od słowa kluczowego class. Po nim podajemy nazwę klasy. Składowe klasy umieszczane są wewnątrz bloku oznaczonego klamrami.

Kolejno deklarowane są zmienne składowe: ich typ oraz nazwa. Niżej znajdują się definicje metod - to proste funkcje, w tym przypadku nie przyjmujące żadnych parametrów ani nie zwracające żadnego wyniku (słowo kluczowe void).

Słowo kluczowe public zostanie wyjaśnione na kolejnych zajęciach.

Instancjonowanie klas (1)

0x08 graphic

Po zdefiniowaniu klasy (w projekcie C# zapisujemy klasę w nowym pliku), z programu możemy utworzyć jej instancję.

Instancję tworzy się za pomocą słowa kluczowego new, instancja otrzymuje nazwę. Składnia podana jest na slajdzie: tworzymy tu instancję klasy Drzwi o nazwie mojeDrzwi.

Na slajdzie pokazany jest również schemat UML instancji klasy, jakiego używa się w diagramach obiektów. W górnym polu podana jest nazwa instancji (podkreślona) oraz jej klasa (po dwukropku). Pozostała część schematu nie zmieniła się.

Po utworzeniu instancji klasy, można korzystać z jej zmiennych składowych i metod, podając nazwę instancji i po kropce zmienną lub metodę.

Na przykładzie przypisujemy zmiennej składowej Kolor wartość zielony i przypisujemy wartość zmiennej składowej Otwarte do zmiennej logicznej stanDrzwi. Niżej wywołujemy metody Otworz() i Zamknij().

Instancjonowanie klas (2)

0x08 graphic

Definiując klasę, możemy napisać konstruktor - czyli metodę, która uruchomi się automatycznie przy tworzeniu instancji tej klasy. Konstruktor w języku C# jest metodą o tej samej nazwie co klasa.

W przykładzie na slajdzie tworzymy konstruktor klasy Drzwi, który przyjmuje jako parametr zmienną - łańcuch znaków. Przy tworzeniu instancji klasy Drzwi, konstruktor przypisze wartość łańcucha do zmiennej składowej Kolor, po czym wyświetli w konsoli komunikat o zbudowaniu nowego obiektu o podanym kolorze.

Niżej przykład utworzenia instancji przy wykorzystaniu konstruktora.

Na schemacie UML klasy pojawił się konstruktor oznaczony przez słowo <<constructor>>.

Instancjonowanie klas (3)

0x08 graphic

W niektórych językach obiektowych można nie tylko tworzyć, ale i usuwać obiekty, gdy przestaną być już potrzebne w programie. W C# obiekty usuwane są automatycznie gdy program przestaje z nich korzystać. Na moment usunięcia nie mamy wpływu, ale możemy wyzerować instancję poleceniem podanym na dole slajdu.

Podobnie jak w przypadku konstruktora, możemy napisać metodę, która będzie uruchamiana podczas usuwania obiektu - destruktor. Metodę destruktora oznaczamy przez tyldę i nazwę klasy.

Przykład na ekranie w momencie usuwania obiektu wyświetli komunikat w oknie konsoli.

Obiekty składowe

0x08 graphic

Jak wspomniano na początku tych zajęć, w skład klasy mogą wchodzić nie tylko zmienne składowe prostych typów (liczbowych, logicznych, łańcuchowych), mogą to być również obiekty innych klas.

Na przykładzie widzimy definicje dwóch klas: Silnik oraz Pojazd. W skład klasy Pojazd wchodzi między innymi obiekt klasy Silnik.

Na schemacie UML przedstawiona została ta sytuacja. Ten rodzaj relacji między klasami nazywany jest agregacją - do budowy jednej klasy wykorzystano drugą. Agregację oznaczamy strzałką z pustym rombem. Można zwrócić uwagę, że niezależnie od tworzenia instancji klasy Pojazd możemy utworzyć samą instancję klasy Silnik.

Składowe statyczne (1)

0x08 graphic

Niektóre składowe klasy możemy oznaczyć jako statyczne - będą miały wówczas dwie cechy:

Definiujemy przykładową klasę Bilet. Klasa ma statyczny Licznik oraz statyczną metodę IleWydano(). Nie tworząc instancji, można już korzystać z tych składowych.

Ponadto mamy zmienną składową Numer oraz konstruktor. Zwróćmy uwagę, że konstruktor zwiększa statyczny Licznik i przypisuje jego wartość do zmiennej Numer.

Uwaga - metody statyczne nie mogą korzystać ze składowych klasy, które nie są statyczne!

Na schemacie UML zmienna i metoda statyczna oznaczone są podkreśleniem.

Składowe statyczne (2)

0x08 graphic

Jak wspomniano przed chwilą, nawet nie tworząc instancji klasy Bilet możemy korzystać z jego statycznych składowych. W przykładzie odwołujemy się do statycznej metody IleWydano(). Metoda zwraca stan licznika, który na początku wynosi 0.

Następnie tworzymy instancję klasy Bilet. Konstruktor zwiększy licznik i przypisze jego stan jako numer biletu. Numer zostanie wyświetlony w oknie konsoli.

Tworzymy drugą i trzecią instancję klasy. Każdy z utworzonych w ten sposób biletów będzie miał inny numer, natomiast statyczny licznik będzie pokazywał liczbę utworzonych instancji.

Podsumowanie

0x08 graphic

Na zajęciach powtórzono definicję klasy i jej instancji. Podana została składnia definicji klasy w języku C#, wraz z jej składowymi. Omówiony został sposób tworzenia instancji klasy oraz dostęp do jej składowych.

Studenci zapoznali się z pojęciem i implementacją konstruktora i destruktora klasy oraz ze statycznymi składowymi klasy.

Pytania sprawdzające

0x08 graphic

Pytania sprawdzające wiedzę przyswojoną podczas tych zajęć:

  1. Jakie są składowe klasy?

  2. W jaki sposób definiujemy klasę i tworzymy jej instancje?

  3. Czym są składowe statyczne?

Laboratorium

0x08 graphic

W ramach ćwiczeń, korzystając z umiejętności zdobytych na zajęciach, studenci piszą w języku C# klasy według poniższych poleceń.

  1. Napisz kilka klas reprezentujących obiekty, które znajdują się w laboratorium. Utwórz po kilka ich instancji. Dodaj klasy do diagramu klas.

  2. Laboratorium ma kilka drzwi, którymi można wejść lub wyjść - specjalne czujniki rozpoznają te sytuacje. Wszystkie drzwi blokowane są elektrycznym ryglem, który może odblokować tylko uprawniona osoba (podaje kod). Gdy z sali wyjdzie ostatnia osoba, drzwi są automatycznie blokowane. Napisz oprogramowanie dla tego systemu.

  3. Napisz klasę, będącą modelem samochodu. Uwzględnij jak najwięcej cech i funkcjonalności (na przykład dane administracyjne, charakterystyka modelu, kierowanie i ruch, przewóz towarów, spalanie paliwa…). Dodaj klasę do diagramu klas.

L

L



Wyszukiwarka

Podobne podstrony:
8035
8035,01 tuleja,tłok,zawory
8035
8035
praca-magisterska-wa-c-8035, Dokumenty(2)
8035
8035
8035
3 CNC 8035 T Podręcznik błędów

więcej podobnych podstron