создать абстрактный класс «Календарь»

Создать абстрактный класс «календарь». Объявить в классе следующие функции:

a.GetWeekDay(DateTime dt): WeekDay, определяющую день недели по заданной дате;

b.IsWeekend(DateTime dt): boolean, определяющую является ли заданная дата выходным днем по календарю (учесть несколько праздников);

c.GetDaysCount(DateTime dt /*или Month month*/): Integer, определяющую количество дней в заданном датой (или специальным типом) месяце.

Унаследовать от этого класса два других: «юлианский календарь» и «григорианский календарь». В основном коде программы реализовать функцию GetCalendar(CalendarType type): Calendar, возвращающую полиморфный тип календаря (юлианский или григорианский). Тип календаря задается с помощью параметра. С помощью этой функции получить необходимый календарь и вывести дни недели для нескольких (желательно заданных с консоли) дат.