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.
Pytanie dotyczące OOP, klas - gdzie umieścić metodę
- Rejestracja:prawie 14 lat
- Ostatnio:prawie 11 lat
- Rejestracja:ponad 14 lat
- Ostatnio:ponad 12 lat
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).

- Rejestracja:ponad 17 lat
- Ostatnio:dzień
- Lokalizacja:Wrocław
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.
- Rejestracja:prawie 14 lat
- Ostatnio:prawie 11 lat
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".

- Rejestracja:ponad 15 lat
- Ostatnio:ponad 7 lat
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

- Rejestracja:prawie 14 lat
- Ostatnio:prawie 11 lat
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.

- Rejestracja:ponad 17 lat
- Ostatnio:dzień
- Lokalizacja:Wrocław
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.
- Rejestracja:prawie 14 lat
- Ostatnio:prawie 11 lat
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.
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.