BankCards

0
2 года назад
2 года назад
2 года назад
2 года назад
README.md

Задача от партнера Нетологии компании Экосистема Альфа

Приложение "Банковские карты"

Требования:

  1. Создайте абстрактный класс BankCard, который будет описывать сущность «Банковская карта». Этот класс должен предоставлять свойство «Баланс», а также функции: • «Оплатить» — списывает с карты переданную сумму и возвращает результат типа Boolean; • «Получить информацию о балансе»; • «Получить информацию о доступных средствах» — возвращает информацию о балансе, кредитном лимите и любых других средствах.
  2. Создайте два производных от BankCard класса DebitCard и CreditCard.
  3. В классе DebitCard реализуйте функции «Пополнить» и «Получить информацию о балансе».
  4. Класс CreditCard должен иметь дополнительное свойство «Кредитный лимит». Основные средства кредитной карты состоят из двух частей: кредитная часть и собственные средства. При пополнении кредитной карты необходимо сначала погасить кредитную часть, и только затем увеличивать собственные средства. При оплате сначала списываются собственные средства, затем кредитные.

Реализуйте функции «Пополнить», «Оплатить» и «Получить информацию о балансе». Должны учитываться как собственные, так и кредитные средства.

  1. Создайте несколько производных классов от DebitCard и CreditCard.
  2. Добавьте для конкретных дебетовых и кредитных карт различные бонусные программы в виде отдельных переменных.

Примеры

• Бонусные баллы в размере 1% от покупок. • Потенциальный кэшбэк 5% от покупок при условии трат больше 5 000 тыс. • Накопление в размере 0.005% от суммы пополнений.

  1. Для конкретных дебетовых и кредитных карт скорректируйте функции «Пополнить» и «Оплатить» так, чтобы они учитывали конкретные бонусные программы.
  2. Для конкретных дебетовых и кредитных карт реализуйте функцию «Получение информации обо всех доступных средствах». Функция должна учитывать собственные и кредитные средства, а также соответствующие бонусы.
  3. Проанализируйте получившиеся классы. При необходимости перенесите реализацию функций на уровень выше.
  4. Убедитесь, что все функции ваших классов работают корректно. Для этого создайте экземпляры классов и проверьте работу каждой из описанных функций.

Что оценивается:

  1. Программа запускается, корректно работает и выводит необходимую информацию.
  2. Выполнены все пункты задания.
  3. Соблюдена инкапсуляция, доступны только публичные члены классов.
  4. Функции соответствуют принципам чёрного ящика, выполняют атомарные операции и независимы друг от друга.
  5. Названия переменных отражают суть данных, на которые они ссылаются.
  6. Переменные, которые не изменяются в программе, объявлены неизменяемыми.
  7. Открыты только необходимые для переопределения функции.
  8. Открыты только необходимые для наследования классы.
  9. Различные выводы в консоль начинаются с новой строки.