Laboratorium z PO Zestaw 03

background image

Programowanie obiektowe

1

L

L

a

a

b

b

o

o

r

r

a

a

t

t

o

o

r

r

i

i

u

u

m

m

z

z

p

p

r

r

z

z

e

e

d

d

m

m

i

i

o

o

t

t

u

u

P

P

r

r

o

o

g

g

r

r

a

a

m

m

o

o

w

w

a

a

n

n

i

i

e

e

o

o

b

b

i

i

e

e

k

k

t

t

o

o

w

w

e

e

-

-

z

z

e

e

s

s

t

t

a

a

w

w

0

0

3

3

Cel zajęć. Celem zajęć jest zapoznanie z praktycznymi aspektami projektowania oraz implementacji klas
abstrakcyjnych i interfejsów.

Wprowadzenie teoretyczne. Rozważana w ramach niniejszych zajęć tematyka jest ważna, gdyż klasy abstrakcyjne
i interfejsy są powszechnie wykorzystywane przy okazji stosowania mechanizmu dziedziczenia. Aby ze zrozumieniem

zrealizować zadania, przewidziane do wykonania w ramach zajęć laboratoryjnych, należy znać znaczenie pojęć takich
jak: klasa abstrakcyjna, metoda abstrakcyjna, interfejs. Należy również znać podstawy języka modelowania systemów
informatycznych UML.

1. Klasy i metody abstrakcyjne

Klasa abstrakcyjna to klasa, która nie posiada swoich reprezentantów pod postacią obiektów. Jest ona
wykorzystywana wyłącznie w roli klasy bazowej dla innych klas. Klasa potomna względem klasy
abstrakcyjnej musi implementować jej wszystkie abstrakcyjne metody i właściwości. Klasa abstrakcyjna

może zawierać także pola oraz metody i właściwości, które nie są abstrakcyjne. Klasa, która zawiera
abstrakcyjną właściwość lub metodę, również musi być abstrakcyjna. Klasa abstrakcyjna jest oznaczona
modyfikatorem „abstract”.

Metoda abstrakcyjna jest metodą oznaczoną modyfikatorem „abstract”. Posiada ona jedynie deklarację
w klasie abstrakcyjnej. Definicja metody znajduje się w klasach potomnych, dziedziczących po klasie
abstrakcyjnej. Metody abstrakcyjne nie mogą być prywatne.

Mechanizm dziedziczenia po klasie abstrakcyjnej przedstawia poniższy przykład:

Przykład 1 – Dziedziczenie klasy abstrakcyjnej


background image

Programowanie obiektowe

2




Proszę zwrócić uwagę na to, że metody klas potomnych, które implementują metody abstrakcyjne klasy
bazowej, posiadają modyfikator „override”.

2. Interfejsy

Interfejs jest abstrakcyjną reprezentacją klasy, która deklaruje swoje składowe, ale ich nie implementuje.
Tworzenie obiektów interfejsu nie jest możliwe. Klasy dziedziczące po interfejsie muszą implementować
wszystkie jego składowe. Interfejsy nie mogą zawierać pól. Wszystkie składowe interfejsu muszą być

publiczne. Klasa może dziedziczyć po kilku interfejsach jednocześnie. Interfejs tworzy się z wykorzystaniem
słowa kluczowego „interface”.










background image

Programowanie obiektowe

3

Mechanizm dziedziczenia po interfejsie przedstawia poniższy przykład:


Przykład 2 – Dziedziczenie po interfejsie

Dziedziczenie po wielu interfejsach odbywa się za pomocą konstrukcji:

class <nazwa klasy> : <nazwa interfejsu 1>, <nazwa interfejsu 2>, ...

3. UML – klasy abstrakcyjne i interfejsy

Klasy abstrakcyjne w języku UML przedstawia się pisząc ich nazwę oraz nazwę ich metod abstrakcyjnych

kursywą.

Rys. 1 – Reprezentacja klasy abstrakcyjnej w języku UML

background image

Programowanie obiektowe

4

Interfejs oraz dziedziczenie po interfejsie na diagramach klas można przedstawić w dwojaki sposób:

Rys. 2 – Reprezentacja interfejsów w języku UML

Wybór konkretnej metody przedstawienia interfejsu, zależy od twórcy diagramu. Projekty bardziej

rozbudowanych systemów składają się najczęściej z wielu diagramów klas. Ponieważ pierwsza metoda
pozwala na przedstawienie szczegółów interfejsu, powinna zostać wykorzystana na pierwszym diagramie,
który go prezentuje. Na kolejnych diagramach ten sam interfejs może być przedstawiany za pomocą drugiej
metody, co pozwala na zwiększenie czytelności schematu.

Zadanie 1. Proszę zrealizować aplikację obiektową, która powinna odznaczać się następującymi cechami:

Aplikacja powinna zawierać klasy zaimplementowane zgodnie z zamieszczonym poniżej diagramem klas.

Metody „WypiszInfo” powinny wypisywać na ekranie konsoli informacje na temat wartości wszystkich pól

obiektów.

Metody „ZnajdzPozycje…” powinny wyszukiwać w katalogu pozycję spełniającą dane kryteria i zwracać
odpowiednią referencję. Jeśli żaden obiekt w katalogu nie spełnia danego kryterium, metoda powinna zwrócić
wartość „null”.

Metoda „WypiszWszystkiePozycje” powinna wypisywać informacje o wszystkich pozycjach w katalogu.

Przechowywanie obiektów pozycji w klasie „Katalog” oraz przechowywanie obiektów autorów w klasie
„Ksiazka” powinno być zrealizowane za pomocą kolekcji typu „List<T>”.

Należy zwrócić uwagę na to, że klasa „Pozycja” jest klasą abstrakcyjną.

Po wykonaniu zadania należy je przetestować za pomocą własnego kodu testowego.

background image

Programowanie obiektowe

5

Przy ocenie zadania główny nacisk będzie kładziony na:

Prawidłową implementację klasy abstrakcyjnej.

Prawidłową implementację metod.

Utworzony kod testowy i wyniki testów.

Zadanie 2. Proszę zrealizować aplikację obiektową, która powinna odznaczać się następującymi cechami:

Aplikacja stanowi rozszerzenie i modyfikację aplikacji z zadania nr 1.

Aplikacja powinna zawierać klasy zaimplementowane zgodnie z zamieszczonym poniżej diagramem klas.

Metody do zarządzania pozycjami zostały zdefiniowane w interfejsie „IZarzadzaniePozycjami”.

Metody „ZnajdzPozycje…” i „WypiszWszystkiePozycje” z klasy „Biblioteka” mają przeszukiwać wszystkie
katalogi zawarte w bibliotece.

Metoda „DodajPozycje” z klasy biblioteka ma dodawać pozycję do katalogu o podanej nazwie działu

tematycznego.

background image

Programowanie obiektowe

6

Należy zauważyć, że metody do zarządzania pozycjami z klasy „Biblioteka” będą wykonywać operacje na
obiektach typu „Katalog”, wykorzystując przy tym metody zdefiniowane w klasie „Katalog”.

Po wykonaniu zadania należy je przetestować za pomocą własnego kodu testowego.

Przy ocenie zadania główny nacisk będzie kładziony na:

Prawidłową implementację interfejsu.

Prawidłową implementację metod odziedziczonych z interfejsu.

Utworzony kod testowy i wyniki testów.

Zadanie do domu. Proszę zmodyfikować zadanie 2, realizując operacje zarządzania bibliotekarzami za pomocą
metod odziedziczonych z interfejsu „IZarzadzanieBibliotekarzami”.

background image

Programowanie obiektowe

7

Zagadnienia, które należy uznać za przyswojone w trakcie zajęć. Po zajęciach będzie obowiązywać praktyczna
znajomość:

Pojęcia klasy abstrakcyjnej i interfejsu.

Wykorzystanie klas abstrakcyjnych i interfejsów.

Przedstawienie klas abstrakcyjnych i interfejsów na diagramie klas.

Wybrane aspekty dotyczące implementacji z wykorzystaniem języka Java. Rozważane w ramach niniejszych
zajęć aspekty mogą być implementowane w różnorodnych technologiach służących do realizacji aplikacji
obiektowych, m.in. języku JAVA. Zasadnicze różnice w korzystaniu z języków C# i JAVA w kontekście tematyki
niniejszego laboratorium są następujące:

W języku Java dziedziczenie interfejsów odbywa się przy użyciu słowa kluczowego „implements”.

Z kolei analogie w korzystaniu z języka C# i JAVA w kontekście tematyki niniejszego laboratorium są następujące:

Klasy i metody abstrakcyjne oznaczone są słowem kluczowym „abstract”.

Interfejsy oznaczone są słowem kluczowym „interface”.


Wyszukiwarka

Podobne podstrony:
Laboratorium z PO Zestaw 03 id 261885
Laboratorium z PO Zestaw 09 id 261888
Laboratorium z PO Zestaw 02
Laboratorium z PO Zestaw 10
Laboratorium z PO Zestaw 01
Laboratorium z PO Zestaw 04 id 261886
Laboratorium z PO Zestaw 07
Laboratorium z PO Zestaw 05
Laboratorium z PO Zestaw 06
Laboratorium z PO Zestaw 09 id 261888
Laboratorium z PO Zestaw 10
Laboratorium z PO Zestaw 04
Laboratorium z PO Zestaw 09
Laboratorium z PO Zestaw 06
Laboratorium z PO Zestaw 02
Laboratorium z PO Zestaw 01
Laboratorium z PO Zestaw 05

więcej podobnych podstron