System wypożyczania
Część sekcji Programowanie obiektowe ścieżki Dart w Coddy. Lekcja 103 z 110.
Wyzwanie
ŁatwyW poprzedniej lekcji utworzyłeś klasy Book i User z podstawowymi właściwościami. Teraz czas zbudować kompletny system wypożyczania z klasą Library, która zarządza całym procesem wypożyczania.
Utworzysz nowy plik i zaktualizujesz istniejące pliki, aby zaimplementować logikę wypożyczania:
book.dart: Zachowaj istniejącą klasęBookz polamiisbn,title,author,isAvailablei metodątoString().user.dart: Zachowaj istniejącą klasęUserz polamiid,name,borrowedBooksi metodątoString().library.dart: Utwórz nową klasęLibrary, która zarządza książkami i użytkownikami. Powinna mieć dwie listy: jedną dlabooksi jedną dlausers. Dodaj metody, które:addBook(Book book)— dodają książkę do kolekcji bibliotekiregisterUser(User user)— dodają użytkownika do bibliotekiborrowBook(String isbn, String userId)— wyszukują książkę i użytkownika, a następnie, jeśli książka istnieje, jest dostępna i użytkownik istnieje, oznaczają książkę jako niedostępną, dodają ją do wypożyczonych książek użytkownika i wyświetlająuserId borrowed "title". Jeśli książka nie istnieje, wyświetlająBook not found. Jeśli książka nie jest dostępna, wyświetlająBook not available. Jeśli użytkownik nie istnieje, wyświetlająUser not found.returnBook(String isbn, String userId)— wyszukują książkę i użytkownika, a następnie, jeśli oboje istnieją i użytkownik ma tę książkę, oznaczają ją jako dostępną, usuwają ją z wypożyczonych książek użytkownika i wyświetlająuserId returned "title". Jeśli książka nie istnieje, wyświetlająBook not found. Jeśli użytkownik nie istnieje, wyświetlająUser not found.
main.dart: Zaimportuj wszystkie pliki i pokaż działanie systemu wypożyczania. Utwórz obiektLibrary, dodaj dwie książki (978-0-13-468599-1,The Pragmatic Programmer,David Thomasoraz978-0-596-51774-8,JavaScript: The Good Parts,Douglas Crockford) i zarejestruj jednego użytkownika (U001,Alice Johnson). Następnie:- Wypożycz pierwszą książkę dla Alice
- Spróbuj ponownie wypożyczyć tę samą książkę (powinno się nie udać)
- Wypożycz drugą książkę dla Alice
- Wyświetl Alice, aby pokazać liczbę wypożyczonych przez nią książek
- Zwróć pierwszą książkę
- Ponownie wyświetl Alice, aby pokazać zaktualizowaną liczbę
Oczekiwany wynik:
U001 borrowed "The Pragmatic Programmer"
Book not available
U001 borrowed "JavaScript: The Good Parts"
User U001: Alice Johnson (2 books borrowed)
U001 returned "The Pragmatic Programmer"
User U001: Alice Johnson (1 books borrowed)Spróbuj swoich sił
import 'book.dart';
import 'user.dart';
import 'library.dart';
void main() {
// TODO: Utwórz instancję Library
// TODO: Utwórz dwie książki:
// - Książka 1: isbn '978-0-13-468599-1', title 'The Pragmatic Programmer', author 'David Thomas'
// - Książka 2: isbn '978-0-596-51774-8', title 'JavaScript: The Good Parts', author 'Douglas Crockford'
// TODO: Dodaj obie książki do biblioteki
// TODO: Utwórz użytkownika z id 'U001' i imieniem i nazwiskiem 'Alice Johnson'
// TODO: Zarejestruj użytkownika w bibliotece
// TODO: Wypożycz pierwszą książkę dla Alice
// TODO: Spróbuj ponownie wypożyczyć tę samą książkę (powinno się nie udać z komunikatem 'Book not available')
// TODO: Wypożycz drugą książkę dla Alice
// TODO: Wyświetl Alice, aby pokazać liczbę wypożyczonych przez nią książek
// TODO: Zwróć pierwszą książkę
// TODO: Wypisz Alice ponownie, aby pokazać zaktualizowaną liczbę wypożyczonych książek
}
Wszystkie lekcje w sekcji Programowanie obiektowe
1Podstawy OOP
Pliki zewnętrzneBiblioteki i importyWprowadzenie do OOPKlasy a obiektySłowo kluczowe thisMetodyZmienne instancjiPodstawy konstruktorówPowtórka – prosty kalkulator4Bezpieczeństwo wartości null
Wprowadzenie do bezpieczeństwa wartości nullTypy dopuszczające null i niedopuszczające nullOperatory ? i !Słowo kluczowe late a bezpieczeństwo wartości nullOperatory uwzględniające nullBezpieczeństwo wartości null w klasachPodsumowanie — system profili użytkowników7Klasy abstrakcyjne i interfejsy
Klasy abstrakcyjneMetody abstrakcyjneInterfejsy w DartInterfejsy niejawneImplementowanie a rozszerzanieWiele interfejsówPowtórka — kalkulator kształtów10Kolekcje i typy generyczne
Przegląd List, Set i MapKolekcje bezpieczne typowoKlasy generyczneMetody generyczneOgraniczenia typów generycznychIterable i IteratorPowtórka — generyczne przechowywanie danych13Zaawansowane koncepcje OOP
Kompozycja a dziedziczenieMetody rozszerzająceKlasy wywoływalneKlasy zapieczętowane (Dart 3)Rekordy (Dart 3)Wzorce i dopasowywanie (3.0)Typy wyliczeniowe z metodami16Projekt: Zarządzanie biblioteką
Omówienie projektuKlasy książek i użytkowników2Konstruktory w Dart
Konstruktor domyślnyKonstruktory nazwaneListy inicjalizująceKonstruktory stałeKonstruktory fabryczneKonstruktory przekierowującePodsumowanie — budowanie kształtów5Hermetyzacja
Elementy publiczne a prywatneKonwencja prefiksu _Prywatność na poziomie bibliotekiGettery i settery — szczegółowoUkrywanie informacjiPodsumowanie — dane uczniów8Domieszki
Wprowadzenie do domieszekTworzenie domieszekKorzystanie z wielu domieszekSłowo kluczowe on w domieszkachDomieszka a dziedziczenieDomieszka a interfejsPodsumowanie – system zwierząt11Metody specjalne
Nadpisanie toString()Nadpisanie hashCode i ==Interfejs ComparableMetoda call()Nadpisanie noSuchMethodPodsumowanie — własna kolekcja14Wzorce projektowe, część 1
Wprowadzenie do wzorców projektowychWzorzec SingletonWzorzec FactoryWzorzec ObserverWzorzec Strategy3Właściwości klas
Elementy instancji a elementy statycznePola final i constZmienne inicjalizowane z opóźnieniemMetody i pola statyczneGettery i setteryPowtórzenie – menedżer kont bankowych6Dziedziczenie
Podstawy dziedziczeniaSłowo kluczowe superPrzesłanianie metodAdnotacja @overrideSłowo kluczowe final dla klasKonstruktory i dziedziczeniePowtórzenie – hierarchia pracowników9Polimorfizm
Podstawy polimorfizmuPolimorfizm za pomocą interfejsówSprawdzanie typu w czasie działaniaOperatory is i asSłowo kluczowe covariantPodsumowanie — procesor płatnościPoćwicz samodzielnie: Kompilator Dart online