Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






  • Как продвинуть сайт на первые места?
    Вы создали или только планируете создать свой сайт, но не знаете, как продвигать? Продвижение сайта – это не просто процесс, а целый комплекс мероприятий, направленных на увеличение его посещаемости и повышение его позиций в поисковых системах.
    Ускорение продвижения
    Если вам трудно попасть на первые места в поиске самостоятельно, попробуйте технологию Буст, она ускоряет продвижение в десятки раз, а первые результаты появляются уже в течение первых 7 дней. Если ни один запрос у вас не продвинется в Топ10 за месяц, то в SeoHammer за бустер вернут деньги.
    Начать продвижение сайта
  • 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 вывести список статей, в названии которых есть заданная строка.

     

     

    Дополнительное задание:

    В классе Magazine

    · реализовать интерфейс System.Collections.IEnumerable для перебора

    статей (объектов типа Article), авторы которых не входят в список редакторов журнала; для этого определить вспомогательный класс MagazineEnumerator, реализующий интерфейс System.Collections.IEnumerator.

    · определить итератор для перебора статей (объектов типа Article), авторы которых являются редакторами журнала, для этого определить метод, содержащий блок итератора и использующий оператор yield.


    · определить итератор для перебора редакторов журнала (объектов типа Person), у которых нет статей в журнале, для этого определить метод, содержащий блок итератора и использующий оператор yield.

    В методе Main()

    8. С помощью оператора foreach для объекта типа Magazine вывести список статей, авторы которых не являются редакторами журнала.

    9. С помощью оператора foreach для итератора, определенного в классе Magazine, вывести список статей, авторы которых являются редакторами журнала.

    10.С помощью оператора foreach для итератора, определенного в классе Magazine, вывести список редакторов, у которых нет статей в журнале.

     

     

    Вариант 3. Требования к программе

    Определить интерфейс

     






    © 2023 :: MyLektsii.ru :: Мои Лекции
    Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
    Копирование текстов разрешено только с указанием индексируемой ссылки на источник.