Лабораторные работы по курсу Объектно-ориентированное программирование: язык программирования C# - umotnas.ru o_O
Главная
Поиск по ключевым словам:
Похожие работы
Название работы Кол-во страниц Размер
Конспект лекций по дисциплине «Объектно-ориентированное программирование» 3 374.25kb.
Программа вступительного экзамена по специальности 05. 13. 18 Математическое... 1 113.98kb.
Рабочая программа по дисциплине «Объектно-ориентированное программирование»... 1 129.85kb.
Рабочая программа по курсу «Объектно-ориентированное программирование»... 1 58.66kb.
Объектно-ориентированное программирование 3 568.1kb.
Объектно-ориентированное программирование 6 944.02kb.
Пояснительная записка к курсовому проекту по дисциплине «Объектно-ориентированное... 1 189.09kb.
Курсовой проект предполагает создание проекта на С#, отвечающего... 1 7.82kb.
Объектно-ориентированное программирование на современном фортране 1 288.94kb.
Структура, содержание и методические подходы к преподаванию в области... 1 59.03kb.
Контрольная работа по дисциплине «Объектно-ориентированное программирование» 1 46.12kb.
Вопросы обеспечения балансовой и оперативной надежности энергосистемы 1 80.87kb.
Викторина для любознательных: «Занимательная биология» 1 9.92kb.

Лабораторные работы по курсу Объектно-ориентированное программирование: язык программирования - страница №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()



  1. Создать два объекта типа Person с совпадающими данными и проверить, что ссылки на объекты не равны, а объекты равны, вывести значения хэш-кодов для объектов.

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()


  1. Создать два объекта типа Edition с совпадающими данными и проверить, что ссылки на объекты не равны, а объекты равны, вывести значения хэш-кодов для объектов.

28.В блоке try/catch присвоить свойству с тиражом издания некорректное значение, в обработчике исключения вывести сообщение, переданное через объект-исключение.

29.Создать объект типа Magazine, добавить элементы в списки статей и редакторов журнала и вывести данные объекта Magazine.

30.Вывести значение свойства типа Edition для объекта типа Magazine.

31.С помощью метода DeepCopy() создать полную копию объекта Magazine. Изменить данные в исходном объекте Magazine и вывести копию и исходный объект, полная копия исходного объекта должна остаться без изменений.

32.С помощью оператора foreach для итератора с параметром типа double вывести список всех статей с рейтингом больше некоторого заданного значения.

33.С помощью оператора foreach для итератора с параметром типа string вывести список статей, в названии которых есть заданная строка.


<< предыдущая страница   следующая страница >>