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

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

по дате выхода публикации;

по названию публикации;

по фамилии автора.

Определить универсальный делегат
delegate TKey KeySelector( ResearchTeam rt);

Определить универсальный класс 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()


  1. Создать объект ResearchTeam и вызвать методы, выполняющие сортировку списка публикаций List по разным критериям, после каждой сортировки вывести данные объекта. Выполнить сортировку

по дате выхода публикации;

по названию публикации;

по фамилии автора.

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

StudentsCountChanged, которое происходит при добавлении нового элемента в коллекцию или при удалении элемента из коллекции; через объект StudentListHandlerEventArgs cобытие передает имя коллекции, строку с информацией о том, что в коллекцию был добавлен новый элемент или из нее был удален элемент, ссылку на добавленный или удаленный элемент Student;

StudentReferenceChanged, которое происходит, когда одной из ссылок, входящих в коллекцию, присваивается новое значение; через объект StudentListHandlerEventArgs событие передает имя коллекции, строку с информацией о том, что был заменен элемент в коллекции, и ссылку на новый элемент Student.
Событие StudentsCountChanged бросают следующие методы класса StudentCollection

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


  1. Создать две коллекции StudentCollection.

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, которое происходит при добавлении элемента в коллекциию; cобытие передает через объект MagazineListHandlerEventArgs имя коллекции, строку с информацией о том, что в коллекцию был добавлен элемент, и номер добавленного элемента в списке List;

MagazineReplaced, которое происходит, когда одной из ссылок, входящих в коллекцию, присваивается новое значение; событие передает через объект MagazineListHandlerEventArgs имя коллекции, строку с информацией о том, что в коллекции был заменен элемент, и номер замененного элемента.

Событие 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()


  1. Создать две коллекции MagazineCollection.

67.Создать два объекта типа Listener, один объект Listener подписать на события MagazineAdded и MagazineReplaced из первой коллекции MagazineCollection, другой объект Listener подписать на события MagazineAdded из обеих коллекций MagazineCollection.

68.Внести изменения в коллекции MagazineCollection

добавить элементы в коллекции;

заменить некоторые элементы из коллекций с помощью метода Replасе класса MagazineCollection;

присвоить некоторым элементам коллекций новые значения c помощью индексатора класса MagazineCollection.

69.Вывести данные обоих объектов Listener.


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