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

Лабораторные работы по курсу Объектно-ориентированное программирование: язык программирования - страница №8/9

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


Определить новую версию класса ResearchTeamCollection из лабораторной работы 3, которая с помощью событий сообщает об изменениях в коллекции.

Для событий определить делегат TeamListHandler с сигнатурой:


void TeamListHandler

(object source, TeamListHandlerEventArgs args);

Класс TeamListHandlerEventArgs, производный от класса System.EventArgs, содержит

открытое автореализуемое свойство типа string с названием коллекции, в которой произошло событие;

открытое автореализуемое свойство типа string с информацией о типе изменений в коллекции;

открытое автореализуемое свойство типа int с номером элемента, который был добавлен или заменен;

конструкторы для инициализации класса;

перегруженную версию метода string ToString() для формирования строки с информацией обо всех полях класса.

В новую версию класса ResearchTeamCollection добавить

открытое автореализуемое свойство типа string с названием коллекции;

метод void InsertAt (int j, ResearchTeam rt), который вставляет элемент rt в список List перед элементом с номером j; если в списке нет элемента с номером j, метод добавляет элемент в конец списка;

индексатор типа ResearchTeam (с методами get и set) с целочисленным индексом для доступа к элементу списка List с заданным номером.

В новую версию класса ResearchTeamCollection добавить два события типа TeamListHandler

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

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

Событие ResearchTeamAdded бросают методы класса ResearchTeamCollection

AddDefaults();

AddResearchTeams ( params ResearchTeam []);

InsertAt (int j, ResearchTeam rt), если элемента с номером j нет в списке.

Событие ResearchTeamInserted бросает метод InsertAt (int j, ResearchTeam rt), если элемент с номером j есть в списке List.

Определить класс TeamsJournal для накопления информации об изменениях в коллекциях типа ResearchTeamCollection. В классе TeamsJournal информация хранится в списке из элементов типа TeamsJournalEntry, каждый элемент списка содержит информацию об отдельном изменении в коллекции ResearchTeamCollection.

Класс TeamsJournalEntry содержит

открытое автореализуемое свойство типа string с названием коллекции, в которой произошло событие;

открытое автореализуемое свойство типа string с информацией о том, какое событие произошло в коллекции;

номер нового элемента;

конструктор для инициализации полей класса;

перегруженную версию метода string ToString().

Класс TeamsJournal содержит

закрытое поле List для списка изменений;

обработчик событий ResearchTeamAdded и ResearchTeamInserted. Обработчик использует информацию, которая передается ему через объект TeamListHandlerEventArgs, создает элемент TeamsJournalEntry и добавляет его в список List.

перегруженную версию метода string ToString() для формирования строки с информацией обо всех элементах списка List.

В методе Main()



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

70.Создать два объекта типа TeamsJournal, один объект TeamsJournal подписать на события ResearchTeamAdded и ResearchTeamInserted из первой коллекции ResearchTeamCollection, другой объект TeamsJournal подписать на события ResearchTeamInserted из обеих коллекций ResearchTeamCollection.

71.Внести изменения в коллекции ResearchTeamCollection

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

с помощью метода InsertAt (int j, ResearchTeam rt) перед элементом с номером j, который есть в коллекции, вставить новый элемент;

вызвать метод InsertAt (int j, ResearchTeam rt) с номером j, которого нет в коллекции.

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


Лабораторная работа 4. Варианты второго уровня

Делегаты. События

Информация для всех вариантов


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

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

Класс, содержащий коллекцию, сообщает об этих изменениях в коллекции с помощью событий, для которых определяется пользовательский делегат.

Данные элементов, входящих в коллекцию, изменяются при вызове метода get в свойствах, определенных в элементах коллекции. При этом значение самой ссылки, которая входит в коллекцию, не изменяется.

Элементы сообщают об изменениях в своих данных с помощью события PropertyChange интерфейса System.ComponentModel.INotifyPropertyChanged. Делегат, отвечающий этому событию,
delegate void PropertyChangedEventHandler

(Object sender,PropertyChangedEventArgs e);

определен в базовой библиотеке. В классе PropertyChangedEventArgs есть конструктор с единственным параметром типа string, через который обработчикам события обычно передается имя свойства, которое является источником изменений данных объекта.

Класс, содержащий коллекцию, должен подписаться на событие PropertyChanged для каждого элемента коллекции. Подписку на событие PropertyChanged надо выполнить во всех методах, которые добавляют в коллекцию новые элементы. При удалении элемента из коллекции от подписки на его событие PropertyChanged необходимо отказаться.

При подписке на событие PropertyChanged как обработчик события надо использовать метод класса с коллекцией. В этом методе события PropertyChanged, которые происходят в элементах коллекции, преобразуются в события класса, содержащего коллекцию. Для этого из информации, которую получает обработчик события PropertyChanged, формируются данные для нового события, которое бросается из класса-коллекции.

События регистрируются в специальных классах-слушателях. Класс-слушатель должен отслеживать изменения только в тех объектах, которые входят в коллекцию.


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


Определить новые версии классов Student и StudentCollection из лабораторной работы 3.

Новая версия класса Student реализует интерфейс System.ComponentModel.INotifyPropertyChanged. Событие PropertyChanged из интерфейса System.ComponentModel.INotifyPropertyChanged происходит при изменении значений свойств класса Student, связанных с номером группы и формой обучения. Название свойства, значение которого изменилось, событие PropertyChanged передает своим обработчикам через свойство PropertyName класса PropertyChangedEventArgs.

Для информации о типе изменений, которые произошли в коллекциях, определить перечисление (enum) Action со значениями Add, Remove и Property.

Для события, которое бросают методы класса StudentCollection, определить делегат StudentsChangedHandler с сигнатурой:


void StudentsChangedHandler

(object source, StudentsChangedEventArgs args);

Класс StudentsChangedEventArgs, производный от класса System.EventArgs, содержит

открытое автореализуемое свойство типа string с названием коллекции;

открытое автореализуемое свойство типа Action с информацией о том, чем вызвано событие, – удалением элемента, добавлением элемента или изменением данных элемента;

открытое автореализуемое свойство типа string с названием свойства класса Student, которое является источником изменения данных элемента; для событий, брошенных при удалении или добавлении элемента, значение свойства – пустая строка;

открытое автореализуемое свойство типа TKey с ключом добавленного, удаленного или измененного элемента;

конструктор c параметрами типа string, Action, string и TKey для инициализации значений всех свойств класса;

перегруженную версию метода string ToString().

В новую версию класса StudentCollection добавить

открытое автореализуемое свойство типа string с названием коллекции;

метод bool Remove(Student st) для удаления элемента со значением st из словаря Dictionary; если в словаре нет элемента st, метод возвращает значение false;

событие StudentsChanged типа StudentsChangedHandler<TKey>, которое происходит, когда в коллекцию добавляются элементы, из нее удаляется элемент или изменяются данные одного из ее элементов.

Определить класс Journal, который можно использовать для накопления информации об изменениях в коллекциях типа StudentCollection. Класс Journal хранит информацию об изменениях в коллекциях в списке объектов типа JournalEntry. Класс JournalEntry содержит информацию об отдельном изменении, которое произошло в коллекциях.

Класс JournalEntry содержит автореализуемые свойства

типа string с названием коллекции;

типа Action c информацией о типе события;

типа string с названием свойства класса Student, которое явилось причиной изменения данных элемента;

типа string с текстовым представлением ключа добавленного, удаленного или измененного элемента;

конструктор для инициализации всех свойств класса;

перегруженную версию метода string ToString().

Класс Journal содержит

закрытое поле типа System.Collections.Generic.List;

обработчик события StudentsChanged, который на основе информации из объекта StudentsChangedEventArgs, создает элемент JournalEntry и добавляет его в список List;

перегруженную версию метода string ToString() для формирования строки с информацией обо всех элементах списка List.

В методе Main()



  1. Создать две коллекции StudentCollection с разными названиями.

73.Создать объект Journal и подписать его на события StudentsChanged из обеих коллекций StudentCollection.

74.Внести изменения в коллекции StudentCollection:

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

изменить значения разных свойств элементов, входящих в коллекцию;

удалить элемент из коллекции;

изменить данные в удаленном элементе.

75.Вывести данные объекта Journal.

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


Определить новые версии классов Edition, Magazine и MagazineCollection<TKey> из лабораторной работы 3.

Новая версия класса Edition реализует интерфейс System.ComponentModel.INotifyPropertyChanged. Событие PropertyChanged из интерфейса System.ComponentModel.INotifyPropertyChanged происходит при изменении значений свойств класса Edition, связанных с тиражом и датой выхода издания. Название свойства, значение которого изменилось, событие PropertyChanged передает своим обработчикам через свойство PropertyName класса PropertyChangedEventArgs.

Для информации о типе изменений, которые произошли в коллекциях, определить перечисление (enum) Update со значениями Add, Replace и Property.

Для события, которое бросают методы новой версии класса MagazineCollection, определить универсальный делегат MagazinesChangedHandler с сигнатурой:


void MagazinesChangedHandler

(object source, MagazinesChangedEventArgs args);

Класс MagazinesChangedEventArgs, производный от класса System.EventArgs, содержит

открытое автореализуемое свойство типа string с названием коллекции;

открытое автореализуемое свойство типа Update с информацией о том, чем вызвано событие, – добавлением нового элемента в коллекцию, заменой элемента в коллекции или изменением данных элемента;

открытое автореализуемое свойство типа string с названием свойства класса Magazine, которое является источником изменения данных элемента; для событий, порожденных добавлением или заменой элемента, значение свойства – пустая строка;

открытое автореализуемое свойство типа TKey с ключом элемента, который был добавлен в коллекцию, заменил один из элементов коллекции или элемента, у которого были изменены данные;

конструктор c параметрами типа string, Update, string и TKey для инициализации значений всех свойств класса;

перегруженную версию метода string ToString().

В новую версию класса MagazineCollection добавить

открытое автореализуемое свойство типа string с названием коллекции;

метод bool Replace(Magazine mold, Magazine mnew) для замены в словаре Dictionary элемента со значением mold на элемент со значением mnew; если в словаре нет элемента со значением mold, метод возвращает значение false;

событие MagazinesChanged типа MagazinesChangedHandler, которое происходит при добавлении нового элемента в коллекцию, замене элемента в коллекции или при изменении данных одного из ее элементов.

Определить класс Listener, собирающий информацию об изменениях в классе MagazineCollection. Класс Listener содержит список из элементов типа ListEntry. Каждый элемент ListEntry содержит информацию об отдельном изменении объекта MagazineCollection, в результате которого произошло событие MagazinesChanged.

Класс ListEntry содержит автореализуемые свойства

типа string с названием коллекции;

типа Update c информацией о типе события;

типа string с названием свойства класса Magazine, которое явилось причиной изменения данных элемента;

типа string с текстовым представлением ключа добавленного, удаленного или измененного элемента;

конструктор для инициализации всех свойств класса;

перегруженную версию метода string ToString().

Класс Listener содержит

закрытое поле типа System.Collections.Generics.List;

обработчик события MagazinesChanged, который на основе информации из объекта MagazinesChangedEventArgs, создает элемент ListEntry и добавляет его к списку;

перегруженную версию метода string ToString() для формирования строки с информацией обо всех элементах списка List.

В методе Main()



  1. Создать два объекта MagazineCollection с разными названиями.

76.Создать объект типа Listener и подписать его на события MagazinesChanged из обоих объектов MagazineCollection.

77.Внести изменения в MagazineCollection:

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

изменить значения разных свойств элементов, входящих в коллекцию;

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

изменить данные в элементе, который был удален из коллекции при замене элемента.

78.Вывести данные объекта Listener.
<< предыдущая страница   следующая страница >>