Создан заказ №3019835
15 мая 2018
Наследование. Исключения. Интерфейсы. Итераторы и блоки итераторов
Как заказчик описал требования к работе:
Разработать программу в соответствии с заданием.
ВАРИАНТЫ 1-3
Классы, свойства, индексаторы. Одномерные, прямоугольные и ступенчатые массивы
Общие требования к программе для вариантов 1-3
Определить класс Person, который имеет
закрытое поле типа string, в котором хранится имя;
закрытое поле т
ипа string, в котором хранится фамилия;
закрытое поле типа System.DateTime для даты рождения.
В классе Person определить конструкторы:
конструктор c тремя параметрами типа string, string, DateTime для инициализации всех полей класса;
конструктор без параметров, инициализирующий все поля класса некоторыми значениями по умолчанию.
В классе Person определить свойства c методами get и set:
свойство типа string для доступа к полю с именем;
свойство типа string для доступа к полю с фамилией;
свойство типа DateTime для доступа к полю с датой рождения;
свойство типа int c методами get и set для получения информации(get) и изменения (set) года рождения в закрытом поле типа DateTime, в котором хранится дата рождения.
В классе Person определить
перегруженную(override) версию виртуального метода string ToString() для формирования строки со значениями всех полей класса;
виртуальный метод string ToShortString(), который возвращает строку, содержащую только имя и фамилию.
ВАРИАНТЫ 4-6
Наследование. Исключения. Интерфейсы. Итераторы и блоки итераторов
Общие требования к программе для вариантов 4-6
В классе Person из вариантов заданий 1-3 и в классах, дополнительно указанных ниже, надо
переопределить (override) виртуальный метод bool Equals (object obj);
определить операции == и != ;
переопределить виртуальный метод int GetHashCode();
Реализация виртуального метода bool Equals (object obj) в классе System.Object определяет равенство объектов как равенство ссылок на объекты. Некоторые классы из базовой библиотеки BCL переопределяют метод Equals(). В классе System.String этот метод переопределен так, что равными считаются строки, которые совпадают посимвольно. Реализация метода Equals() в структурном типе DateTime равенство объектов DateTime определяет как равенство значений.
В лабораторной работе требуется переопределить метод Equals так, чтобы объекты считались равными, если равны все данные объектов. Для класса Person это означает, что равны даты рождения и посимвольно совпадают строки с именем и фамилией.
Определение операций == и != должно быть согласовано с переопределенным методом Equals, т.е. критерии, по которым проверяется равенство объектов в методе Equals, должны использоваться и при проверке равенства объектов в операциях == и !=.
Переопределение виртуального метода int GetHashCode() также должно быть согласовано с операциями == и !=. Виртуальный метод GetHashCode() используется некоторыми классами базовой библиотеки, например, коллекциями-словарями. Классы базовой библиотеки, вызывающие метод GetHashCode() из пользовательского типа, предполагают, что равным объектам отвечают равные значения хэш-кодов. Поэтому в случае, когда под равенством объектов понимается совпадение данных (а не ссылок), реализация метода GetHashCode() должна для объектов с совпадающими данными возвращать равные значения хэш-кодов.
В классах, указанных в вариантах лабораторной работы, требуется определить метод object DeepCopy() для создания полной копии объекта. Определенные в некоторых классах базовой библиотеки методы Clone() и Copy() создают ограниченную (shallow) копию объекта – при копировании объекта копии создаются только для полей структурных типов, для полей ссылочных типов копируются только ссылки. В результате в ограниченной копии объекта поля-ссылки указывают на те же объекты, что и в исходном объекте.
Метод DeepCopy() должен создать полные копии всех объектов, ссылки на которые содержат поля типа. После создания полная копия не зависит от исходного объекта - изменение любого поля или свойства исходного объекта не должно приводить к изменению копии.
При реализации метода DeepCopy() в классе, который имеет поле типа System.Collections.ArrayList, следует иметь в виду, что определенные в классе ArrayList конструктор ArrayList(ICollection) и метод Clone() при создании копии коллекции, состоящей из элементов ссылочных типов, копируют только ссылки.
Метод DeepCopy() должен создать как копии элементов коллекции ArrayList, так и полные копии объектов, на которые ссылаются элементы коллекции. Для типов, содержащих коллекции, реализация метода DeepCopy() упрощается, если в типах элементов коллекций также определить метод DeepCopy().
Вариант 5.
Вариант 5. Требования к программе
Определить интерфейс
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 с совпадающими данными и проверить, что ссылки на объекты не равны, а объекты равны, вывести значения хэш-кодов для объектов. 2. В блоке try/catch присвоить свойству с тиражом издания некорректное значение, в обработчике исключения вывести сообщение, переданное через объект-исключение. 3. Создать объект типа Magazine, добавить элементы в списки статей и редакторов журнала и вывести данные объекта Magazine. 4. Вывести значение свойства типа Edition для объекта типа Magazine. 5. С помощью метода DeepCopy() создать полную копию объекта Magazine. Изменить данные в исходном объекте Magazine и вывести копию и исходный объект, полная копия исходного объекта должна остаться без изменений. 6. С помощью оператора foreach для итератора с параметром типа double вывести список всех статей с рейтингом больше некоторого заданного значения. 7. С помощью оператора foreach для итератора с параметром типа string вывести список статей, в названии которых есть заданная строка.
подробнее
Заказчик
заплатил
заплатил
200 ₽
Заказчик не использовал рассрочку
Гарантия сервиса
Автор24
Автор24
20 дней
Заказчик принял работу без использования гарантии
16 мая 2018
Заказ завершен, заказчик получил финальный файл с работой
5
Наследование. Исключения. Интерфейсы. Итераторы и блоки итераторов.jpg
2018-12-14 23:04
Последний отзыв студента о бирже Автор24
Общая оценка
5
Положительно
С достаточно трудными заданиями (для 3го курса университета) автор успешно справился, В СРОК. Вообще за час решает, уже всё время у него только и заказываю))) Рекомендую!