test
ТЗ:
- Создайте абстрактный класс BankCard, который будет описывать сущность «Банковская карта». Этот класс должен предоставлять свойство «Баланс», а также функции: o «Пополнить» — пополняет карту на переданную сумму; o «Оплатить» — списывает с карты переданную сумму и возвращает результат типа Boolean; o «Получить информацию о балансе»; o «Получить информацию о доступных средствах» — возвращает информацию о балансе, кредитном лимите и любых других средствах.
- Создайте два производных от BankCard класса DebitCard и CreditCard.
- В классе DebitCard реализуйте функции «Пополнить» и «Получить информацию о балансе».
- Класс CreditCard должен иметь дополнительное свойство «Кредитный лимит». Основные средства кредитной карты состоят из двух частей: кредитная часть и собственные средства.
При пополнении кредитной карты необходимо сначала погасить кредитную часть, и только затем увеличивать собственные средства.
При оплате сначала списываются собственные средства, затем кредитные.
Пример Кредитная карта с лимитом 10 000. Кредитные средства: 10 000. Собственные средства: 0.
После пополнения карты на 5 000: Кредитные средства: 10 000. Собственные средства: 5 000.
После оплаты на 5 000: Кредитные средства: 10 000. Собственные средства: 0.
После оплаты на 3 000: Кредитные средства: 7 000. Собственные средства: 0.
После пополнения на 2 000:
Кредитные средства: 9 000.
Собственные средства: 0.
После пополнения на 2 000:
Кредитные средства: 10 000.
Собственные средства: 1 000.
Реализуйте функции «Пополнить», «Оплатить» и «Получить информацию о балансе». Должны учитываться как собственные, так и кредитные средства.
5. Создайте несколько производных классов от DebitCard и CreditCard.
6. Добавьте для конкретных дебетовых и кредитных карт различные бонусные программы в виде отдельных переменных.
Примеры
Бонусные баллы в размере 1% от покупок. (см ниже)
Потенциальный кэшбэк 5% от покупок при условии трат больше 5 000 тыс.
Накопление в размере 0.005% от суммы пополнений.
7. Для конкретных дебетовых и кредитных карт скорректируйте функции «Пополнить» и «Оплатить» так, чтобы они учитывали конкретные бонусные программы.
8. Для конкретных дебетовых и кредитных карт реализуйте функцию «Получение информации обо всех доступных средствах». Функция должна учитывать собственные и кредитные средства, а также соответствующие бонусы.
9. Проанализируйте получившиеся классы. При необходимости перенесите реализацию функций на уровень выше.
10. Убедитесь, что все функции ваших классов работают корректно. Для этого создайте экземпляры классов и проверьте работу каждой из описанных функций.
Что оценивается
● Программа запускается, корректно работает и выводит необходимую информацию.
● Выполнены все пункты задания.
● Соблюдена инкапсуляция, доступны только публичные члены классов.
● Функции соответствуют принципам чёрного ящика, выполняют атомарные операции и независимы друг от друга.
● Функции возвращают неизменяемые коллекции.
● Названия переменных отражают суть данных, на которые они ссылаются.
● Переменные, которые не изменяются в программе, объявлены неизменяемыми.
● Открыты только необходимые для переопределения функции.
● Открыты только необходимые для наследования классы.
● Различные выводы в консоль начинаются с новой строки.