Похожие работы
|
Лабораторные работы по курсу Объектно-ориентированное программирование: язык программирования - страница №7/9
Вариант 3. Требования к программеОпределить новые версии классов Paper, Team и ResearchTeam из лабораторной работы 2. В класс Paper добавить реализацию интерфейсов System.IComparable для сравнения объектов типа Paper по дате выхода публикации; System.Collections.Generic.IComparer для сравнения объектов типа Paper по названию публикации. Определить вспомогательный класс, реализующий интерфейс System.Collections.Generic.IComparer, который можно использовать для сравнения объектов типа Paper по фамилии автора публикации. В новой версии класса ResearchTeam использовать типы System.Collections.Generic.List для списка участников проекта; System.Collections.Generic.List для списка публикаций. В новых версиях классов Team и ResearchTeam сохранить все остальные поля, свойства и методы из предыдущих версий, внести необходимые исправления в код свойств и методов из-за изменения типов полей для списка участников проекта и списка публикаций. В классе ResearchTeam определить методы для сортировки списка публикаций по дате выхода публикации; по названию публикации; по фамилии автора. Определить универсальный делегат Определить универсальный класс ResearchTeamCollection, содержащий коллекцию объектов типа ResearchTeam, в котором для хранения коллекции используется тип System.Collections.Generic.Dictionary. Типовой параметр TKey универсального класса ResearchTeamCollection определяет тип ключа в коллекции Dictionary. Метод, который используется для вычисления ключа при добавлении элемента ResearchTeam в коллекцию класса ResearchTeamCollection, отвечает делегату KeySelector и передается ResearchTeamCollection через параметр единственного конструктора класса. Класс ResearchTeamCollection содержит закрытое поле типа System.Collections.Generic.Dictionary; закрытое поле типа KeySelector для хранения экземпляра делегата с методом, вычисляющим ключ для объекта ResearchTeam; конструктор c одним параметром типа KeySelector ; метод void AddDefaults (), c помощью которого можно добавить некоторое число элементов ResearchTeam для инициализации коллекции по умолчанию; метод void AddResearchTeams ( params ResearchTeam [] ) для добавления элементов в коллекцию Dictionary; перегруженную версию виртуального метода string ToString() для формирования строки, содержащей информацию обо всех элементах коллекции Dictionary, в том числе значения всех полей, включая список участников проекта и список публикаций для каждого элемента ResearchTeam; метод string ToShortString(), который формирует строку с информацией обо всех элементах коллекции Dictionary, содержащую значения всех полей, число участников проекта и число публикаций для каждого элемента ResearchTeam, но без списков участников и публикаций. В классе ResearchTeamCollection<TKey> определить свойства и методы, выполняющие операции со словарем Dictionary с использованием методов расширения класса System.Linq.Enumerable и статические методы-селекторы, которые необходимы для выполнения соответствующих операций с коллекцией: свойство типа DateTime (только с методом get), возвращающее дату последней по времени выхода публикации среди всех элементов коллекции; если в коллекции нет элементов, свойство возвращает значение по умолчанию для типа DateTime; для поиска максимального значения среднего рейтинга статей надо использовать метод Max класса System.Linq.Enumerable; метод IEnumerable>TimeFrameGroup (TimeFrame value), возвращающий подмножество элементов коллекции Dictionary со значением продолжительности исследований, которое передается как параметр; для формирования подмножества использовать метод Where класса System.Linq.Enumerable; свойство типа IEnumerable>> (только с методом get), выполняющее группировку элементов коллекции Dictionary в зависимости от продолжительности исследований с помощью метода Group класса System.Linq.Enumerable. В методе Main()
по дате выхода публикации; по названию публикации; по фамилии автора. 61.Создать объект ResearchTeamCollection. Добавить в коллекцию несколько разных элементов ResearchTeam и вывести объект ResearchTeamCollection. 62.Вызвать методы класса ResearchTeamCollection, выполняющие операции с коллекцией-словарем Dictionary, после каждой операции вывести результат операции. Выполнить поиск даты последней по времени выхода публикации среди всех элементов коллекции; вызвать метод TimeFrameGroup для выбора объектов ResearchTeam с заданным значением продолжительности исследований; вызвать свойство класса, выполняющее группировку элементов коллекции по значениию продолжительности исследований; вывести все группы элементов из списка. 63.Создать объект типа TestCollection. Ввести число элементов в коллекциях и вызвать метод для поиска первого, центрального, последнего и элемента, не входящего в коллекции. Вывести значения времени поиска для всех четырех случаев. Лабораторная работа 4. Варианты первого уровняДелегаты. СобытияИнформация для всех вариантовВ лабораторной работе требуется определить класс, содержащий типизированную коллекцию, который с помощью событий извещает об изменениях в коллекции. Коллекция состоит из объектов ссылочных типов. Коллекция изменяется при удалении/добавлении элементов или при изменении одной из входящих в коллекцию ссылок, например, когда одной из ссылок присваивается новое значение. В этом случае в соответствующих методах или свойствах класса бросаются события. При изменении данных объектов, ссылки на которые входят в коллекцию, значения самих ссылок не изменяются. Этот тип изменений не порождает событий. Для событий, извещающих об изменениях в коллекции, определяется свой делегат. События регистрируются в специальных классах-слушателях. Вариант 1. Требования к программеОпределить новую версию класса StudentCollection из лабораторной работы 3, которая с помощью событий сообщает об изменениях в коллекции. Для событий определить делегат StudentListHandler с сигнатурой: void StudentListHandler (object source, StudentListHandlerEventArgs args); Класс StudentListHandlerEventArgs, производный от класса System.EventArgs, содержит открытое автореализуемое свойство типа string с названием коллекции, в которой произошло событие; открытое автореализуемое свойство типа string с информацией о типе изменений в коллекции; открытое автореализуемое свойство типа Student для ссылки на объект, с которым связаны изменения; конструкторы для инициализации класса; перегруженную версию метода string ToString() для формирования строки с информацией обо всех полях класса. В новую версию класса StudentCollection добавить открытое автореализуемое свойство типа string с названием коллекции; метод bool Remove (int j) для удаления элемента с номером j из списка List; если в списке нет элемента с номером j, метод возвращает значение false; индексатор типа Student (с методами get и set) с целочисленным индексом для доступа к элементу списка List с заданным номером. В новую версию класса StudentCollection добавить два события типа StudentListHandler AddDefaults(); AddStudents (params Student[] ) ; Remove (int j). Событие StudentReferenceChanged бросает метод set индексатора, определенного в классе StudentCollection. Определить класс Journal, который можно использовать для накопления информации об изменениях в коллекциях типа StudentCollection. Класс Journal хранит информацию в списке объектов типа JournalEntry. Каждый элемент списка содержит информацию об отдельном изменении, которое произошло в коллекции. Класс JournalEntry содержит открытое автореализуемое свойство типа string с названием коллекции, в которой произошло событие; открытое автореализуемое свойство типа string с информацией о типе изменений в коллекции; открытое автореализуемое свойство типа string c данными объекта Student, с которым связаны изменения в коллекции; конструктор для инициализации полей класса; перегруженную версию метода string ToString(). Класс Journal содержит закрытое поле типа System.Collections.Generic.List; обработчики событий StudentsCountChanged и StudentReferenceChanged, которые добавляют новый элемент JournalEntry в список List; для инициализации JournalEntry используется информация из объекта StudentListHandlerEventArgs, который передается вместе с событием; перегруженную версию метода string ToString() для формирования строки с информацией обо всех элементах списка List. В методе Main()
64.Создать два объекта типа Journal, один объект Journal подписать на события StudentsCountChanged и StudentReferenceChanged из первой коллекции StudentCollection, другой объект Journal подписать на события StudentReferenceChanged из обеих коллекций StudentCollection. 65.Внести изменения в коллекции StudentCollection добавить элементы в коллекции; удалить некоторые элементы из коллекций; присвоить некоторым элементам коллекций новые значения. 66.Вывести данные обоих объектов Journal. Вариант 2. Требования к программеОпределить новую версию класса MagazineCollection из лабораторной работы 3, которая с помощью событий сообщает об изменениях в коллекции. Для событий определить делегат MagazineListHandler с сигнатурой: void MagazineListHandler (object source, MagazineListHandlerEventArgs args); Класс MagazineListHandlerEventArgs, производный от класса System.EventArgs, содержит открытое автореализуемое свойство типа string с названием коллекции, в которой произошло событие; открытое автореализуемое свойство типа string с информацией о типе изменений в коллекции; открытое автореализуемое свойство типа int с номером элемента, который был изменен; конструкторы для инициализации класса; перегруженную версию метода string ToString() для формирования строки с информацией обо всех полях класса. В новую версию класса MagazineCollection добавить открытое автореализуемое свойство типа string с названием коллекции; метод bool Replace (int j, Magazine mg) для замены элемента с номером j из списка List на элемент mg; если в списке нет элемента с номером j, метод возвращает значение false; индексатор типа Magazine (с методами get и set) с целочисленным индексом для доступа к элементу списка List с заданным номером. В новую версию класса MagazineCollection добавить два события типа MagazineListHandler Событие MagazineAdded бросают методы класса MagazineCollection AddDefaults(); AddMagazines (params Magazine[] ) ; Событие MagazineReplaced бросают метод Replace (int j, Magazine mg); метод set индексатора, определенного в классе MagazineCollection. Определить класс Listener для накопления информации об изменениях в коллекциях MagazineCollection. В классе Listener информация хранится в списке из элементов типа ListEntry, каждый элемент списка содержит информацию об отдельном изменении в коллекции MagazineCollection. Класс ListEntry содержит открытое автореализуемое свойство типа string с названием коллекции, в которой произошло событие; открытое автореализуемое свойство типа string с информацией о том, какое событие произошло в коллекции; номер добавленного или измененного элемента; конструктор для инициализации полей класса; перегруженную версию метода string ToString(). Класс Listener содержит список изменений System.Collections.Generics.List; обработчик событий MagazineAdded и MagazineReplaced, который на основе информации из объекта MagazineListHandlerEventArgs, создает элемент ListEntry и добавляет его в список изменений; перегруженную версию метода string ToString() для формирования строки с информацией обо всех элементах списка List. В методе Main()
67.Создать два объекта типа Listener, один объект Listener подписать на события MagazineAdded и MagazineReplaced из первой коллекции MagazineCollection, другой объект Listener подписать на события MagazineAdded из обеих коллекций MagazineCollection. 68.Внести изменения в коллекции MagazineCollection добавить элементы в коллекции; заменить некоторые элементы из коллекций с помощью метода Replасе класса MagazineCollection; присвоить некоторым элементам коллекций новые значения c помощью индексатора класса MagazineCollection. 69.Вывести данные обоих объектов Listener. << предыдущая страница следующая страница >> |
|