Итоги — Менеджер банковского счета
Часть раздела Объектно-ориентированное программирование путешествия по Dart на Coddy — урок 22 из 110.
Задание
ЛегкоДавайте создадим систему управления банковскими счетами, которая объединит все концепции свойств классов, изученные вами в этой главе. Вы создадите систему, которая отслеживает данные отдельных счетов, а также ведет общебанковскую статистику.
Вы организуете свой код в двух файлах:
bank_account.dart: Определите классBankAccount, который управляет отдельными счетами и отслеживает общую статистику банка. Ваш класс должен включать:- Поле
final String accountNumber, которое не может быть изменено после создания - Поле
String holderNameдля имени владельца счета - Приватное поле
double _balance, начинающееся с0.0 - Статическое поле
static int totalAccounts, начинающееся с0, для отслеживания количества существующих счетов - Статическое поле
static double totalDeposits, начинающееся с0.0, для отслеживания всех депозитов, сделанных в банке - Конструктор, который принимает
accountNumberиholderNameи увеличиваетtotalAccounts - Геттер
balance, который возвращает текущий баланс - Метод
deposit(double amount), который пополняет баланс только в том случае, если сумма положительна, а также увеличиваетtotalDepositsпри успешном выполнении - Метод
withdraw(double amount), который вычитает сумму из баланса только в том случае, если сумма положительна и не превышает текущий баланс - Метод
displayInfo(), который выводит информацию о счете - Статический метод
getBankStats(), который возвращает строку с общебанковской статистикой
- Поле
main.dart: Импортируйте ваш класс банковского счета и продемонстрируйте работу системы:- Создайте счет с номером
'ACC001'для'Alice' - Создайте счет с номером
'ACC002'для'Bob' - Внесите
500.0на счет Alice - Внесите
300.0на счет Bob - Снимите
150.0со счета Alice - Попробуйте снять
1000.0со счета Bob (операция должна быть проигнорирована — недостаточно средств) - Попробуйте внести
-50.0на счет Alice (операция должна быть проигнорирована — отрицательная сумма) - Вызовите
displayInfo()для счета Alice, затем для счета Bob - Выведите статистику банка, используя
BankAccount.getBankStats()
- Создайте счет с номером
Метод displayInfo() должен выводить данные в следующем формате:
Account [accountNumber] | Holder: [holderName] | Balance: $[balance]Метод getBankStats() должен возвращать:
Bank Stats - Total Accounts: [totalAccounts] | Total Deposits: $[totalDeposits]Ожидаемый вывод:
Account ACC001 | Holder: Alice | Balance: $350.0
Account ACC002 | Holder: Bob | Balance: $300.0
Bank Stats - Total Accounts: 2 | Total Deposits: $800.0Попробуйте сами
import 'bank_account.dart';
void main() {
// TODO: Создать счет с номером 'ACC001' для 'Alice'
// TODO: Создать счет с номером 'ACC002' для 'Bob'
// TODO: Внести 500.0 на счет Alice
// TODO: Внести 300.0 на счет Bob
// TODO: Снять 150.0 со счета Alice
// TODO: Попробовать снять 1000.0 со счета Bob (должно быть проигнорировано)
// TODO: Попробовать внести -50.0 на счет Alice (должно быть проигнорировано)
// TODO: Вызвать displayInfo() для счета Alice
// TODO: Вызвать displayInfo() для счета Bob
// TODO: Вывести статистику банка, используя BankAccount.getBankStats()
}
Все уроки раздела Объектно-ориентированное программирование
1Основы ООП
Внешние файлыБиблиотеки и импортВведение в ООПКлассы и объектыКлючевое слово thisМетодыПеременные экземпляраОсновы конструкторовИтоги — Простой калькулятор4Null-безопасность
Введение в Null-безопасностьNullable и Non-Nullable типыОператоры ? и !Ключевое слово Late и Null-безопасностьNull-aware операторыNull-безопасность в классахИтоги — Система профилей пользователей7Абстрактные классы и интерфейсы
Абстрактные классыАбстрактные методыИнтерфейсы в DartНеявные интерфейсыРеализация против наследованияМножественные интерфейсыИтоги — Калькулятор фигур10Коллекции и обобщения
Обзор List, Set, MapТипобезопасные коллекцииОбобщенные классыОбобщенные методыОграничения обобщенийIterable и IteratorИтоги: Обобщенное хранилище13Продвинутые концепции ООП
Композиция против наследованияМетоды расширенияВызываемые классыЗапечатанные классы (Dart 3)Записи (Dart 3)Паттерны и сопоставление (3.0)Перечисления с методами16Проект: Управление библиотекой
Обзор проектаКлассы Book и User2Конструкторы в Dart
Конструктор по умолчаниюИменованные конструкторыСписки инициализацииКонстантные конструкторыФабричные конструкторыПеренаправляющие конструкторыИтоги — Shape Builder5Инкапсуляция
Публичные и приватные членыСоглашение о префиксе _Приватность на уровне библиотекГеттеры и сеттеры: подробный разборСкрытие данныхИтоги — Записи о студентах8Mixins
Введение в MixinsСоздание MixinsИспользование нескольких MixinsКлючевое слово on в MixinsMixin и наследованиеMixin и интерфейсИтоги: Система животных11Специальные методы
Переопределение toString()Переопределение hashCode и ==Интерфейс ComparableМетод call()Переопределение noSuchMethodПовторение — Пользовательская коллекция14Паттерны проектирования. Часть 1
Введение в паттерны проектированияПаттерн SingletonПаттерн FactoryПаттерн ObserverПаттерн Strategy3Свойства классов
Члены экземпляра и статические членыПоля Final и ConstПеременные LateСтатические методы и поляГеттеры и сеттерыИтоги — Менеджер банковского счета6Наследование
Основы наследованияКлючевое слово superПереопределение методовАннотация @overrideКлючевое слово final для классовКонструкторы и наследованиеИтоги: Иерархия сотрудников9Полиморфизм
Основы полиморфизмаПолиморфизм через интерфейсыПроверка типов во время выполненияОператоры is и asКлючевое слово covariantИтоги — Обработчик платежей12Асинхронное ООП
Futures и async/awaitОсновы StreamsКонтроллеры StreamАсинхронные конструкторыАсинхронность в методах классовИтоги — Data Fetcher15Паттерны проектирования. Часть 2
Паттерн КомандаПаттерн АдаптерПаттерн ДекораторПаттерн Шаблонный методПаттерн СостояниеПаттерн КомпоновщикПаттерн Репозиторий