Pytanie dotyczące OOP, klas - gdzie umieścić metodę

1

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.

1

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).

1

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ę?

0

Wiem, że to trochę "na siłę", ale ma być program, który będzie miał przynajmniej dwie klasy bazowe i pochodne.

1

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.

0

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".

2

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

0

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.

1
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.

0

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.

1 użytkowników online, w tym zalogowanych: 0, gości: 1