programowanie obiektowe 10, c c++, c#


Kolekcje

Przegląd zagadnień

0x08 graphic

Zajęcia są poświęcone omówieniu przydatnych rodzajów kolekcji. Kolejno pojawią się opisy i przykłady listy, kolejki, stosu i słownika.

W ostatniej części laboratorium zadaniem studentów będzie napisanie kilku programów spełniających określone wymogi w zakresie kolekcji.

Lista

0x08 graphic

Klasa List jest tablicą rozwiązującą jeden z podstawowych problemów pojawiających się przy używaniu standardowych obiektów klasy System.Array - konieczność ustalenia już na samym początku rozmiaru.

Wraz z klasą dostarczanych jest wiele przydatnych metod i właściwości. Szczególnie interesuje nas metoda Add().

Lista - przykład (1)

0x08 graphic

Przygotowujemy przestrzeń nazw Kolekcja z klasą publiczną Pracownik, którą będziemy przechowywać na liście.

Lista - przykład (2)

0x08 graphic

W drugiej części kodu używam klasy testowej, w której najpierw tworzymy dwie listy, a następnie w pętlach for dodajemy do nich elementy przy pomocy wspomnianej wcześniej metody Add().

Kolejka

0x08 graphic

Kolejki wykorzystywane są często w sytuacjach, gdy dysponujemy ograniczoną pulą zasobów. Pierwszy dodany element jest zawsze pierwszym obsłużonym. Podstawowy mechanizm usuwa element z kolejki po zwróceniu jego wartości.

Kolejki tworzy się w języku C# wykorzystując do tego klasę Queue. Podstawowe mechanizmy dodawania i usuwania elementu (ze zwracaniem wartości) są obsługiwane przez metody Enqueue() oraz Dequeue().

Kolejka - przykład

0x08 graphic

Przykład ilustruje sposób użycia kolejki.

Najpierw dodajemy elementy do kolejki w pętli for, a następnie wyświetlamy zawartość kolejki wraz z elementami zwracanymi przez metody Peek() oraz Dequeue().

Analizując efekt wykonania programu można wyraźnie dostrzec różnice między działaniem obu metod.

W metodzie Wyświetl() wykorzystany został interfejs IEnumerable, zawierający metodę GetEnumerator(), która zwraca w tym przypadku implementację typu IEnumerator<Int32>. Jak się łatwo domyślić, jest ona związana z licznikiem.

Stos

0x08 graphic

Stos zawsze obsługuje jako pierwszy ten element, który zostanie dodany na końcu. Można o nim myśleć, jak o kupce książek na biurku - żeby dostać się do którejś na spodzie, najpierw trzeba usunąć wszystkie książki położone na niej.

Obsługa stosu przypomina obsługę kolejki - prym wiodą tu metody Push(), Pop() oraz Peek() - służące odpowiednio do umieszczania elementu na stosie, usuwania go z jednoczesnym zwracaniem wartości oraz do zwracania wartości.

Stos - przykład

0x08 graphic

Przykład zastosowania stosu jest analogiczny do prezentowanego kilka slajdów wcześniej sposobu działania kolejki.

Jedynymi różnicami są zastosowanie metod z klasy Stack oraz sposób obsługi właściwy dla stosu (ostatni dodany element jest zawsze obsługiwany na początku)

Słownik

0x08 graphic

Słownik jest rodzajem kolekcji, który doskonale sprawdza się w przypadku operacji na danych dwuczłonowych jak chociażby państwa i ich stolice, czy na przykład leki i ich producenci.

Regułą, której powinno się trzymać, jest prostota klucza. Bardziej skomplikowane elementy można przechowywać jako powiązaną z kluczem wartość.

Klasa Dictionary języka C# umożliwia łatwe dodawanie elementów oraz szybkie wyszukiwanie wartości w słowniku.

0x08 graphic

Podsumowanie

Kolekcje często są dużo lepszym rozwiązaniem niż standardowe tablice. Wybór odpowiedniego rodzaju kolekcji powinien być zdeterminowany przez indywidualne potrzeby aplikacji. Warto poświęcić trochę czasu na zastanowienie się nad właściwym wyborem typu kolekcji.

Kolejnym krokiem po opanowaniu kolekcji powinno być bliższe przyjrzenie się interfejsom, potrafiącym znacznie ułatwić życie programisty.

0x08 graphic
Pytania sprawdzające

Pytania sprawdzające:

1.Wymień podstawowe różnice między kolejką a stosem.

2. Kiedy lepiej używać tablic zamiast podanych na bieżących zajęciach typów kolekcji?

Laboratorium

0x08 graphic

1. Napisz aplikację pełniącą funkcję książki telefonicznej.

2. Przygotuj program przenoszący monety ułożone jedna na drugiej w inne miejsce na stole (po jednej monecie).

3. Napisz prosty system informujący pacjenta czekającego w kolejce do lekarza, że przyszła jego kolej wejścia. Uwzględnij proces rejestracji.

L

L



Wyszukiwarka