Похожие работы
|
Лабораторные работы по курсу Объектно-ориентированное программирование: язык программирования - страница №3/9
Вариант 1. Требования к программеОпределить интерфейс interface IDateAndCopy { object DeepCopy(); DateTime Date { get; set; } } Определить новые версии классов Exam, Person и Student из лабораторной работы 1. В классы Exam, Person и Student добавить реализацию интерфейса IDateAndCopy. Новую версию класса Student определить как класс, производный от класса Person. Все поля новой версии класса Person определить с доступом protected, сохранить все свойства, определенные в первой версии класса. В новой версии класса Person дополнительно переопределить метод virtial bool Equals (object obj) и определить операции == и != так, чтобы равенство объектов типа Person трактовалось как совпадение всех данных объектов, а не ссылок на объекты Person; переопределить виртуальный метод int GetHashCode(); определить виртуальный метод object DeepCopy(); реализовать интерфейс IDateAndCopy. Определить класс Test, который имеет два открытых автореализуемых свойства, доступных для чтения и записи: свойство типа string, в котором хранится название предмета; свойство типа bool для информации о том, сдан зачет или нет. В классе Test определить: конструктор c параметрами типа string и bool для инициализации свойств класса; конструктор без параметров, инициализирующий все свойства класса некоторыми значениями по умолчанию; перегруженную(override) версию виртуального метода string ToString() для формирования строки со значениями всех свойств класса. Класс Student определить как производный от класса Person. Новая версия класса Student имеет следующие поля: закрытое поле типа Education для информации о форме обучения; закрытое поле типа int для номера группы; закрытое поле типа System.Collections.ArrayList, в котором хранится список зачетов (объекты типа Test); закрытое поле типа System.Collections.ArrayList для списка экзаменов (объекты типа Exam). Код следующих конструкторов, методов и свойств из старой версии класса Student необходимо изменить с учетом того, что часть полей класса перемещена в базовый класс Person, и в новой версии класса Student список экзаменов хранится в коллекции System.Collections.ArrayList: конструктор c параметрами типа Person, Education, int для инициализации соответствующих полей класса; конструктор без параметров для инициализации по умолчанию; свойство типа Person; метод get свойства возвращает объект типа Person, данные которого совпадают с данными подобъекта базового класса, метод set присваивает значения полям из подобъекта базового класса; свойство типа double ( только с методом get), в котором вычисляется средний балл как среднее значение оценок в списке сданных экзаменов; свойство типа System.Collections.ArrayList с методами get и set для доступа к полю со списком экзаменов; метод void AddExams ( params Exam[] ) для добавления элементов в список экзаменов; перегруженная версия виртуального метода string ToString() для формирования строки со значениями всех полей класса, включая список зачетов и экзаменов; виртуальный метод string ToShortString(), который формирует строку со значениями всех полей класса без списка зачетов и экзаменов, но со значением среднего балла. Дополнительно в новой версии класса Student определить перегруженную версию виртуального метода object DeepCopy(); реализовать интерфейс IDateAndCopy; определить свойство типа int с методами get и set для доступа к полю с номером группы. В методе set бросить исключение, если присваиваемое значение меньше или равно 100 или больше 599. При создании объекта-исключения использовать один из определенных в библиотеке CLR классов-исключений, инициализировать объект-исключение с помощью конструктора с параметром типа string, в сообщении передать информацию о допустимых границах для значения свойства. В новой версии класса Student определить итератор для последовательного перебора всех элементов (объектов типа object) из списков зачетов и экзаменов (объединение); итератор c параметром для перебора экзаменов (объектов типа Exam) с оценкой больше заданного значения. В методе Main()
19.Создать объект типа Student, добавить элементы в список экзаменов и зачетов, вывести данные объекта Student. 20.Вывести значение свойства типа Person для объекта типа Student. 21.С помощью метода DeepCopy() создать полную копию объекта Student. Изменить данные в исходном объекте Student и вывести копию и исходный объект, полная копия исходного объекта должна остаться без изменений. 22.В блоке try/catch присвоить свойству с номером группы некорректное значение, в обработчике исключения вывести сообщение, переданное через объект-исключение. 23.С помощью оператора foreach для итератора, определенного в классе Student, вывести список всех зачетов и экзаменов. 24.С помощью оператора foreach для итератора с параметром, определенного в классе Student, вывести список всех экзаменов с оценкой выше 3. Дополнительное задание:В классе Student реализовать интерфейс System.Collections.IEnumerable для перебора названий всех предметов (объектов типа string), которые есть как в списке зачетов, так и в списке экзаменов (пересечение). Для этого определить вспомогательный класс StudentEnumerator, реализующий интерфейс System.Collections.IEnumerator. определить итератор для перебора сданных зачетов и экзаменов (объектов типа object), для этого определить метод, содержащий блок итератора и использующий оператор yield; сданный экзамен – экзамен с оценкой больше 2; определить итератор для перебора всех сданных зачетов (объектов типа Test), для которых сдан и экзамен, для этого определить метод, содержащий блок итератора и использующий оператор yield. В методе Main() 25.С помощью оператора foreach для объекта типа Student вывести список предметов, которые есть как в списке зачетов, так и в списке экзаменов. 26.С помощью оператора foreach для итератора, определенного в классе Student, вывести список всех сданных зачетов и сданных экзаменов. 27.С помощью оператора foreach для итератора, определенного в классе Student, вывести список сданных зачетов, для которых сдан и экзамен. Вариант 2. Требования к программеОпределить интерфейс interface IRateAndCopy { double Rating { get;} object DeepCopy(); } Определить новые версии классов Person, Article и Magazine из лабораторной работы 1. Класс Magazine определить как производный от класса Edition. В классы Article и Magazine добавить реализацию интерфейса IRateAndCopy. В новой версии класса Person дополнительно переопределить метод virtial bool Equals (object obj) и определить операции == и != так, чтобы равенство объектов типа Person трактовалось как совпадение всех данных объектов, а не ссылок на объекты Person; переопределить виртуальный метод int GetHashCode(); определить виртуальный метод object DeepCopy(). В новой версии класса Article дополнительно определить виртуальный метод object DeepCopy(); реализовать интерфейс IRateAndCopy. Определить класс Edition. Класс Edition имеет защищенное(protected) поле типа string c названием издания; защищенное поле типа DateTime c датой выхода издания; защищенное поле типа int с тиражом издания; В классе Edition определить: конструктор с параметрами типа string, DateTime, int для инициализации соответствующих полей класса; конструктор без параметров для инициализации по умолчанию; свойства c методами get и set для доступа к полям типа; виртуальный метод object DeepCopy(); свойство типа int с методами get и set для доступа к полю с тиражом издания; в методе set свойства бросить исключение, если присваиваемое значение отрицательно. При создании объекта-исключения использовать один из определенных в библиотеке CLR классов-исключений, инициализировать объект-исключение с помощью конструктора с параметром типа string, в сообщении передать информацию о допустимых значениях свойства. В классе Edition переопределить (override): виртуальный метод virtial bool Equals (object obj) и определить операции == и != так, чтобы равенство объектов типа Edition трактовалось как совпадение всех данных объектов, а не ссылок на объекты Edition; виртуальный метод int GetHashCode(); перегруженную версию виртуального метода string ToString() для формирования строки со значениями всех полей класса. Новая версия класса Magazine имеет базовый класс Edition и следующие поля: закрытое поле типа Frequency с информацией о периодичности выхода журнала; закрытое поле типа System.Collections.ArrayList со списком редакторов журнала (объектов типа Person). закрытое поле типа System.Collections.ArrayList, в котором хранится список статей в журнале (объектов типа Article). Код следующих конструкторов, методов и свойств из старой версии класса Magazine необходимо изменить с учетом того, что часть полей класса перемещена в базовый класс Edition, и в новой версии класса Magazine для списка статей используется тип System.Collections.ArrayList: конструктор с параметрами типа string, Frequency, DateTime, int для инициализации соответствующих полей класса; конструктор без параметров для инициализации по умолчанию; свойство типа double (только с методом get), в котором вычисляется среднее значение рейтинга статей в журнале; свойство типа System.Collections.ArrayList для доступа к полю со списком статей в журнале; метод void AddArticles (params Article[]) для добавления элементов в список статей в журнале; перегруженная версия виртуального метода string ToString() для формирования строки со значениями всех полей класса, включая список статей и список редакторов; виртуальный метод string ToShortString(), который формирует строку со значениями всех полей класса без списка статей и списка редакторов, но со значением среднего рейтинга статей в журнале. Дополнительно в новой версии класса Magazine реализовать свойство типа System.Collections.ArrayList для доступа к списку редакторов журнала; метод void AddEditors (params Person[]) для добавления элементов в список редакторов; перегруженную (override) версию виртуального метода object DeepCopy(); интерфейс IRateAndCopy; свойство типа Edition; метод get свойства возвращает объект типа Edition, данные которого совпадают с данными подобъекта базового класса, метод set присваивает значения полям из подобъекта базового класса. В новой версии класса Magazine определить итератор с параметром типа double для перебора статей с рейтингом больше некоторого заданного значения; итератор с параметром типа string для перебора статей, в названии которых есть заданная строка. В методе Main()
28.В блоке try/catch присвоить свойству с тиражом издания некорректное значение, в обработчике исключения вывести сообщение, переданное через объект-исключение. 29.Создать объект типа Magazine, добавить элементы в списки статей и редакторов журнала и вывести данные объекта Magazine. 30.Вывести значение свойства типа Edition для объекта типа Magazine. 31.С помощью метода DeepCopy() создать полную копию объекта Magazine. Изменить данные в исходном объекте Magazine и вывести копию и исходный объект, полная копия исходного объекта должна остаться без изменений. 32.С помощью оператора foreach для итератора с параметром типа double вывести список всех статей с рейтингом больше некоторого заданного значения. 33.С помощью оператора foreach для итератора с параметром типа string вывести список статей, в названии которых есть заданная строка. << предыдущая страница следующая страница >> |
|