Piszę na zajęcia program do obsługi wypożyczalni. I mam mały problem. Gdzie umieścić metodę wypożycz() ? Wiadomo, że wypożyczyć może klient wypożyczalni, logiczne. Tylko nie wiem, co będzie poprawne (lub "bardziej poprawne"). Umieszczenie tej metody w klasie Klient (tak jak to zrobiłem, bo "Klient wypożycza") czy może jednak umieszczenie jej w klasie Zbiór, która jest klasą bazową dla klas Książka, Film, etc. (bo "Książka jest wypożyczana") ? Bo tak zacząłem nad tym myśleć i mam wątpliwości.
Zależy to od logiki aplikacji, ja bym się jednak zastanawiał nad tym, czy książka nie jest wypożyczana przez osobę z biblioteki, czyli tam dać metodę biblioteka.wypożycz(książka{czy jej klasa bazowa}, osoba). Zbiór jest trochę niefortunną nazwą dla klasy bazowej, bardziej bym się po takiej nazwie spodziewał kolekcji, ale teraz nie mogę wpaść na jakąś dobrą (może ObiektWypożyczany, lub Materiał, Dokument).
Ja bym się zastanowił jaki jest sens istnienia klas Książka i Film posiadających jakąś klasę bazową. Gdy do oferty dodamy majtki, długopisy i siodła, to będziemy za każdym razem tworzyć nową klasę?
Wiem, że to trochę "na siłę", ale ma być program, który będzie miał przynajmniej dwie klasy bazowe i pochodne.
To ja bym zrobił tak, żeby Książka
i Film
dziedziczyły z Produkt
(nietrafna nazwa, ale chwilowo nie mam pomysłu), a klasa Wypożyczalnia
miała kolekcję obiektów typu Produkt
i metodę Wypożycz
.
To ja bym zrobił tak, żeby Książka i Film dziedziczyły z Produkt (nietrafna nazwa, ale chwilowo nie mam pomysłu), a klasa Wypożyczalnia miała kolekcję obiektów typu Produkt i metodę Wypożycz.
Czyli klasą abstrakcyjną byłaby Wypożyczalnia, z której dziedziczy Produkt (albo Kolekcja ?). Z klasy Wypożyczalnia dziedziczy też Człowiek, który jest klasą bazową dla Klient i Pracownik (Klient może wypożyczać, etc., a Pracownik ma określoną pensję, etc.). Nie wiem, czy to dobre rozumowanie.
Wcześniej z Kolekcji dziedziczyły Książka, Płyta Audio oraz Film, bo miały różne pola, tzn. Książka ma liczbę stron, okładkę (miękka/twarda), ISBN oraz wydawnictwo. Z kolei płyta z muzyką będzie mieć jakiś nośnik (CD, 2CD, a może winyl), liczbę utworów, wytwórnię i czas trwania. Film będzie miał reżysera, produkcję (kraj/-e), itd. Tak to "rozumiałem".
Nigdy bym nie wpadł, na to żeby Człowiek dziedziczył z Wypożyczalni o_O Z tego co kojarzę to człowiek nie jest szczególnym przypadkiem wypożyczalni, ale mogę się mylić :p
Czyli poprawniejsze będzie coś takiego ?
Klasa Kolekcja (albo ElementKolekcji ?), która jest bazowa dla Książki, Audio i Filmu. Klasa Człowiek, która jest bazowa dla Klienta i Pracownika.
cichociemny napisał(a):
Czyli klasą abstrakcyjną byłaby Wypożyczalnia, z której dziedziczy Produkt (albo Kolekcja ?). Z klasy Wypożyczalnia dziedziczy też Człowiek, który jest klasą bazową dla Klient i Pracownik (Klient może wypożyczać, etc., a Pracownik ma określoną pensję, etc.). Nie wiem, czy to dobre rozumowanie.
Wydawało mi się, że napisałem zrozumiale...
abstract class JednostkaBiblioteczna // nazwa zasugerowana przez @Zjarek
{
// cośtam
}
class Film : JednostkaBiblioteczna
{
// cośtam
}
class Książka : JednostkaBiblioteczna
{
// cośtam
}
class Klient
{
// cośtam
}
class Wypożyczalnia
{
// cośtam
JednostkaBiblioteczna[] rzeczyDoWypożyczenia; // wewnętrzna kolekcja wypożyczalni, która jest jakoś tam uzupełniana
public void WypożyczCośCzłowiekowi(Klient ludź)
{
}
}
cichociemny napisał(a):
Wcześniej z Kolekcji dziedziczyły Książka, Płyta Audio oraz Film, bo miały różne pola, tzn. Książka ma liczbę stron, okładkę (miękka/twarda), ISBN oraz wydawnictwo. Z kolei płyta z muzyką będzie mieć jakiś nośnik (CD, 2CD, a może winyl), liczbę utworów, wytwórnię i czas trwania. Film będzie miał reżysera, produkcję (kraj/-e), itd. Tak to "rozumiałem".
Miej tylko świadomość, że to wszystko, to taki absurdalny akademicki przykład dziedziczenia. W normalnym programie byłaby klasa Produkt
, która miałaby listę swoich Atrybutów
, które z kolei zależałyby od typu produktu, ale nie tworzyłoby się nowych klas przy każdej zmianie asortymentu.
No, jakbym "normalnie" coś pisał, tzn. dla siebie czy dla kogoś, ale nie na uczelnię, to bym inaczej podszedł. Na uczelni wymagają czasem absurdów, więc trzeba jakoś to przeboleć, a chcę żeby chociaż trochę poprawności OOP tam było, stąd temat. Dzięki za pomoc.