BankCards
README.md
Задача от партнера Нетологии компании Экосистема Альфа
Приложение "Банковские карты"
Требования:
- Создайте абстрактный класс BankCard, который будет описывать сущность «Банковская карта». Этот класс должен предоставлять свойство «Баланс», а также функции: • «Оплатить» — списывает с карты переданную сумму и возвращает результат типа Boolean; • «Получить информацию о балансе»; • «Получить информацию о доступных средствах» — возвращает информацию о балансе, кредитном лимите и любых других средствах.
- Создайте два производных от BankCard класса DebitCard и CreditCard.
- В классе DebitCard реализуйте функции «Пополнить» и «Получить информацию о балансе».
- Класс CreditCard должен иметь дополнительное свойство «Кредитный лимит». Основные средства кредитной карты состоят из двух частей: кредитная часть и собственные средства. При пополнении кредитной карты необходимо сначала погасить кредитную часть, и только затем увеличивать собственные средства. При оплате сначала списываются собственные средства, затем кредитные.
Реализуйте функции «Пополнить», «Оплатить» и «Получить информацию о балансе». Должны учитываться как собственные, так и кредитные средства.
- Создайте несколько производных классов от DebitCard и CreditCard.
- Добавьте для конкретных дебетовых и кредитных карт различные бонусные программы в виде отдельных переменных.
Примеры
• Бонусные баллы в размере 1% от покупок. • Потенциальный кэшбэк 5% от покупок при условии трат больше 5 000 тыс. • Накопление в размере 0.005% от суммы пополнений.
- Для конкретных дебетовых и кредитных карт скорректируйте функции «Пополнить» и «Оплатить» так, чтобы они учитывали конкретные бонусные программы.
- Для конкретных дебетовых и кредитных карт реализуйте функцию «Получение информации обо всех доступных средствах». Функция должна учитывать собственные и кредитные средства, а также соответствующие бонусы.
- Проанализируйте получившиеся классы. При необходимости перенесите реализацию функций на уровень выше.
- Убедитесь, что все функции ваших классов работают корректно. Для этого создайте экземпляры классов и проверьте работу каждой из описанных функций.
Что оценивается:
- Программа запускается, корректно работает и выводит необходимую информацию.
- Выполнены все пункты задания.
- Соблюдена инкапсуляция, доступны только публичные члены классов.
- Функции соответствуют принципам чёрного ящика, выполняют атомарные операции и независимы друг от друга.
- Названия переменных отражают суть данных, на которые они ссылаются.
- Переменные, которые не изменяются в программе, объявлены неизменяемыми.
- Открыты только необходимые для переопределения функции.
- Открыты только необходимые для наследования классы.
- Различные выводы в консоль начинаются с новой строки.