Powtórzenie – menedżer kont bankowych
Część sekcji Programowanie obiektowe ścieżki Dart w Coddy. Lekcja 22 z 110.
Wyzwanie
ŁatwyZbudujmy system zarządzania rachunkami bankowymi, który łączy wszystkie poznane w tym rozdziale zagadnienia dotyczące właściwości klas. Utworzysz system, który śledzi dane poszczególnych rachunków, a jednocześnie przechowuje statystyki całego banku.
Podzielisz kod na dwa pliki:
bank_account.dart: Zdefiniuj klasęBankAccount, która zarządza poszczególnymi rachunkami i śledzi statystyki całego banku. Twoja klasa powinna zawierać:final String accountNumber, którego nie można zmienić po utworzeniuString holderNameprzechowujący imię i nazwisko właściciela rachunku- Prywatne pole
double _balance, którego początkową wartością jest0.0 static int totalAccountso początkowej wartości0, które śledzi liczbę istniejących rachunkówstatic double totalDepositso początkowej wartości0.0, które śledzi wszystkie wpłaty dokonane w całym banku- Konstruktor przyjmujący
accountNumberiholderNameoraz zwiększający wartośćtotalAccounts - Getter
balance, który zwraca bieżące saldo - Metodę
deposit(double amount), która zwiększa saldo tylko wtedy, gdy kwota jest dodatnia, a po udanej wpłacie zwiększa również wartośćtotalDeposits - Metodę
withdraw(double amount), która zmniejsza saldo tylko wtedy, gdy kwota jest dodatnia i nie przekracza bieżącego salda - Metodę
displayInfo(), która wyświetla szczegóły rachunku - Metodę statyczną
getBankStats(), która zwraca tekst ze statystykami całego banku
main.dart: Zaimportuj klasę rachunku bankowego i zademonstruj działanie systemu:- Utwórz rachunek o numerze
'ACC001'dla'Alice' - Utwórz rachunek o numerze
'ACC002'dla'Bob' - Wpłać
500.0na rachunek Alice - Wpłać
300.0na rachunek Bob - Wypłać
150.0z rachunku Alice - Spróbuj wypłacić
1000.0z rachunku Bob (operacja powinna zostać zignorowana — niewystarczające środki) - Spróbuj wpłacić
-50.0na rachunek Alice (operacja powinna zostać zignorowana — kwota ujemna) - Wywołaj
displayInfo()dla rachunku Alice, a następnie rachunku Bob - Wyświetl statystyki banku za pomocą
BankAccount.getBankStats()
- Utwórz rachunek o numerze
Metoda displayInfo() powinna wyświetlać informacje w takim formacie:
Account [accountNumber] | Holder: [holderName] | Balance: $[balance]Metoda getBankStats() powinna zwracać:
Bank Stats - Total Accounts: [totalAccounts] | Total Deposits: $[totalDeposits]Oczekiwany wynik:
Account ACC001 | Holder: Alice | Balance: $350.0
Account ACC002 | Holder: Bob | Balance: $300.0
Bank Stats - Total Accounts: 2 | Total Deposits: $800.0Spróbuj swoich sił
import 'bank_account.dart';
void main() {
// TODO: Utwórz konto o numerze 'ACC001' dla 'Alice'
// TODO: Utwórz konto o numerze 'ACC002' dla 'Bob'
// TODO: Wpłać 500.0 na konto Alice
// TODO: Wpłać 300.0 na konto Bob
// TODO: Wypłać 150.0 z konta Alice
// TODO: Spróbuj wypłacić 1000.0 z konta Bob (operacja powinna zostać zignorowana)
// TODO: Spróbuj wpłacić -50.0 na konto Alice (operacja powinna zostać zignorowana)
// TODO: Wywołaj displayInfo() dla konta Alice
// TODO: Wywołaj displayInfo() dla konta Bob
// TODO: Wypisz statystyki banku za pomocą BankAccount.getBankStats()
}
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