Lekcja 19. Projekt końcowy — system wypożyczalni w konsoli
Trudny / egzaminacyjnyPo co się tego uczymy?
Pojedyncze umiejętności — klasa, dziedziczenie, wyjątek — to jedno. Prawdziwa wartość pojawia się dopiero wtedy, gdy złożysz je w jeden, spójny, DZIAŁAJĄCY program — dokładnie tak, jak wygląda zadanie praktyczne na egzaminie INF.04 i jak wygląda prawdziwa praca programisty.
Teoria
To podsumowanie całego działu — zbudujesz KOMPLETNY, działający system wypożyczalni w konsoli, łącząc wszystkie 17 poprzednich lekcji w jeden spójny projekt: klasy i obiekty, hermetyzację, konstruktory, dziedziczenie, polimorfizm, klasy abstrakcyjne, wyjątki, kolekcje generyczne i (opcjonalnie) jeden z poznanych wzorców projektowych.
Wymagane elementy projektu:
1. Klasa abstrakcyjna Produkt (pola: Tytul, CzyWypozyczony; metoda abstrakcyjna OplataZaDzien()).
2. Co najmniej dwie klasy pochodne, np. Film i Konsola, każda z własną implementacją OplataZaDzien().
3. Klasa Wypozyczalnia przechowująca List<Produkt> (Lekcja 8 + 16), z metodami: Wypozycz(Produkt p) (rzuca wyjątek, jeśli produkt jest już wypożyczony — Lekcja 16), Zwroc(Produkt p), WyswietlDostepne() (wypisuje tylko produkty z CzyWypozyczony == false).
4. Obsługa błędów przez try-catch przy próbie wypożyczenia niedostępnego produktu.
5. Menu tekstowe w pętli (Lekcja 7) pozwalające użytkownikowi wybrać akcję (wypożycz/zwróć/pokaż dostępne/zakończ) przez instrukcję switch (Lekcja 5).
To dokładnie ten poziom złożoności, jakiego można się spodziewać w rozbudowanym zadaniu praktycznym z programowania obiektowego na egzaminie INF.04.
Schemat
Produkt (klasa abstrakcyjna)
- Tytul, CzyWypozyczony
- abstract OplataZaDzien()
/
/
Film Konsola
OplataZaDzien()=2zł OplataZaDzien()=15zł
Wypozyczalnia
- List<Produkt> produkty
- Wypozycz(produkt), Zwroc(produkt), WyswietlDostepne()
Przykład z życia
To dokładnie taki projekt, jaki mógłbyś zobaczyć jako zadanie na egzaminie INF.04 w części praktycznej — aplikacja konsolowa z hierarchią klas, kolekcją obiektów i menu sterowanym przez użytkownika.
Ćwiczenie samodzielne
Zanim zaczniesz kodować, narysuj na kartce diagram klas (podobny do diagramu w tej lekcji) z dokładnymi polami i metodami każdej klasy Twojego projektu.
Zadania do pracy własnej
Zbuduj same klasy:
Produkt(abstrakcyjna) i dwie klasy pochodne, bez jeszcze klasyWypozyczalnia— na razie tylko utwórz kilka obiektów wMain()i wypisz ich dane oraz opłaty za dzień.Dodaj klasę
Wypozyczalniaz listą produktów i metodamiWypozycz/Zwroc/WyswietlDostepne, ale jeszcze bez obsługi wyjątków ani menu — testuj wywołania bezpośrednio w kodzieMain().Zbuduj CAŁY system zgodnie ze specyfikacją z tej lekcji: hierarchia klas, wyjątek przy próbie wypożyczenia zajętego produktu, oraz pętla z menu tekstowym (
switch) pozwalająca użytkownikowi wielokrotnie wypożyczać, zwracać i przeglądać dostępne produkty, aż wybierze opcję "Zakończ".
Typowe błędy
Największy błąd na tym etapie to próba napisania wszystkiego naraz — buduj projekt DOKŁADNIE w kolejności z listy wymaganych elementów, testując każdy fragment osobno, zanim przejdziesz do kolejnego (dokładnie tak, jak w zadaniach łatwym/średnim/trudnym powyżej). Drugi błąd: kopiowanie fragmentów kodu z poprzednich lekcji bez zastanowienia, czy dokładnie pasują do nowego kontekstu — wróć do konkretnej lekcji, jeśli czegoś nie pamiętasz, zamiast zgadywać. Trzeci: pominięcie obsługi wyjątków "bo to tylko projekt szkolny" — to właśnie umiejętność łączenia obsługi błędów z resztą logiki biznesowej jest tym, co odróżnia solidny projekt od prowizorki.
Nawiązanie do egzaminu zawodowego
Ten projekt w komplecie odpowiada strukturze zadania praktycznego z części obiektowej egzaminu INF.04 — aplikacja konsolowa wykorzystująca hierarchię klas, kolekcje, obsługę wyjątków i interakcję z użytkownikiem. To najlepsze możliwe przygotowanie do tej części egzaminu, jakie może dać ten dział, i naturalny pomost do aplikacji okienkowych WPF, gdzie te same klasy i wzorce znajdziesz ponownie, tylko z graficznym interfejsem zamiast tekstowego menu.