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

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

При работе в среде VisualStudio необходимо уметь


средствами Solution Explorer добавить в проект новый класс;

с помощью диаграммы классов(Class Diagram) добавить в класс методы, поля и свойства;

с помощью диаграммы классов добавить в класс перегруженную (override) версию виртуального метода.

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


Определить тип Education - перечисление(enum) со значениями Specialist, Вachelor, SecondEducation.

Определить класс Exam, который имеет три открытых автореализуемых свойства, доступных для чтения и записи:

свойство типа string, в котором хранится название предмета;

свойство типа int, в котором хранится оценка;

свойство типа System.DateTime для даты экзамена.

В классе Exam определить:

конструктор с параметрами типа string, int и DateTime для инициализации всех свойств класса;

конструктор без параметров, инициализирующий все свойства класса некоторыми значениями по умолчанию;

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

Определить класс Student, который имеет

закрытое поле типа Person, в котором хранятся данные студента;

закрытое поле типа Education для информации о форме обучения;

закрытое поле типа int для номера группы;

закрытое поле типа Exam [] для информации об экзаменах, которые сдал студент.

В классе Student определить конструкторы:

конструктор c параметрами типа Person, Education, int для инициализации соответствующих полей класса;

конструктор без параметров, инициализирующий поля класса значениями по умолчанию.

В классе Student определить свойства c методами get и set:

свойство типа Person для доступа к полю с данными студента;

свойство типа Education для доступа к полю с формой обучения;

свойство типа int для доступа к полю с номером группы;

свойство типа Exam [] для доступа к полю со списком экзаменов.

В классе Student определить

свойство типа double ( только с методом get), в котором вычисляется средний балл как среднее значение оценок в списке сданных экзаменов;

индексатор булевского типа (только с методом get) с одним параметром типа Education; значение индексатора равно true, если значение поля с формой обучения студента совпадает со значением индекса, и false в противном случае;

метод void AddExams ( params Exam [] ) для добавления элементов в список экзаменов;

перегруженную версию виртуального метода string ToString() для формирования строки со значениями всех полей класса, включая список экзаменов;

виртуальный метод string ToShortString(), который формирует строку со значениями всех полей класса без списка экзаменов, но со значением среднего балла.

В методе Main()

5.Создать один объект типа Student, преобразовать данные в текстовый вид с помощью метода ToShortString() и вывести данные.

6.Вывести значения индексатора для значений индекса Education.Specialist, Education.Bachelor и Education.SecondEducation.

7.Присвоить значения всем определенным в типе Student свойствам, преобразовать данные в текстовый вид с помощью метода ToString() и вывести данные.

8.C помощью метода AddExams( params Exam[] ) добавить элементы в список экзаменов и вывести данные объекта Student, используя метод ToString().

9.Сравнить время выполнения операций с элементами одномерного, двумерного прямоугольного и двумерного ступенчатого массивов с одинаковым числом элементов типа Exam.


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


Определить тип Frequency - перечисление(enum) со значениями Weekly, Monthly, Yearly.

Определить класс Article, который имеет три открытых автореализуемых свойства, доступных для чтения и записи:

свойство типа Person, в котором хранятся данные автора статьи;

свойство типа string для названия статьи;

свойство типа double для рейтинга статьи.

В классе Article определить:

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

конструктор без параметров, инициализирующий все свойства класса некоторыми значениями по умолчанию;

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

Определить класс Magazine, который имеет

закрытое поле типа string c названием журнала;

закрытое поле типа Frequency с информацией о периодичности выхода журнала;

закрытое поле типа DateTime c датой выхода журнала;

закрытое поле типа int с тиражом журнала;

закрытое поле типа Article[] со списком статей в журнале.

В классе Magazine определить конструкторы:

конструктор с параметрами типа string, Frequency, DateTime, int для инициализации соответствующих полей класса;

конструктор без параметров, инициализирующий поля класса значениями по умолчанию.

В классе Magazine определить свойства c методами get и set:

свойство типа string для доступа к полю с названием журнала;

свойство типа Frequency для доступа к полю с информацией о периодичности выхода журнала;

свойство типа DateTime для доступа к полю c датой выхода журнала;

свойство типа int для доступа к полю с тиражом журнала;

свойство типа Article[] для доступа к полю со списком статей.

В классе Magazine определить

свойство типа double ( только с методом get), в котором вычисляется среднее значение рейтинга в списке статей;

индексатор булевского типа (только с методом get) с одним параметром типа Frequency; значение индексатора равно true, если значение поля типа Frequency совпадает со значением индекса, и false в противном случае;

метод void AddArticles (params Article[]) для добавления элементов в список статей в журнале;

перегруженную версию виртуального метода string ToString() для формирования строки со значениями всех полей класса, включая список статей;

виртуальный метод string ToShortString(), который формирует строку со значениями всех полей класса без списка статей, но со значением среднего рейтинга статей.

В методе Main()


  1. Создать один объект типа Magazine, преобразовать данные в текстовый вид с помощью метода ToShortString() и вывести данные.

10.Вывести значения индексатора для значений индекса Frequency.Weekly, Frequency.Monthly и Frequency.Yearly.

11.Присвоить значения всем определенным в типе Magazine свойствам, преобразовать данные в текстовый вид с помощью метода ToString() и вывести данные.

12.C помощью метода AddArticles( params Article[] ) добавить элементы в список статей и вывести данные объекта Magazine, используя метод ToString().

13.Сравнить время выполнения операций с элементами одномерного, двумерного прямоугольного и двумерного ступенчатого массивов с одинаковым числом элементов типа Article.


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


Определить тип TimeFrame - перечисление(enum) со значениями Year, TwoYears, Long.

Определить класс Paper, который имеет три открытых автореализуемых свойства, доступных для чтения и записи:

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

свойство типа Person для автора публикации;

свойство типа DateTime c датой публикации.

В классе Paper определить

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

конструктор без параметров, инициализирующий все свойства класса некоторыми значениями по умолчанию;

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

Определить класс ResearchTeam, который имеет

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

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

закрытое поле типа int – регистрационный номер;

закрытое поле типа TimeFrame для информации о продолжительности исследований;

закрытое поле типа Paper[], в котором хранится список публикаций.

В классе ResearchTeam определить конструкторы:

конструктор c параметрами типа string, string, int, TimeFrame для инициализации соответствующих полей класса;

конструктор без параметров, инициализирующий поля класса значениями по умолчанию.

В классе ResearchTeam определить свойства c методами get и set:

свойство типа string для доступа к полю с названием темы исследований;

свойство типа string для доступа к полю с названием организации;

свойство типа int для доступа к полю с номером регистрации;

свойство типа TimeFrame для доступа к полю с продолжительностью исследований;

свойство типа Paper[] для доступа к полю со списком публикаций по теме исследований.

В классе ResearchTeam определить

свойство типа Paper ( только с методом get), которое возвращает ссылку на публикацию с самой поздней датой выхода; если список публикаций пустой, свойство возвращает значение null;

индексатор булевского типа (только с методом get) с одним параметром типа TimeFrame; значение индексатора равно true, если значение поля с информацией о продолжительности исследований совпадает со значением индекса, и false в противном случае;

метод void AddPapers ( params Paper[] ) для добавления элементов в список публикаций;

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

виртуальный метод string ToShortString(), который формирует строку со значениями всех полей класса без списка публикаций.

В методе Main()


  1. Создать один объект типа ResearchTeam, преобразовать данные в текстовый вид с помощью метода ToShortString() и вывести данные.

14.Вывести значения индексатора для значений индекса TimeFrame.Year, TimeFrame.TwoYears, TimeFrame.Long.

15.Присвоить значения всем определенным в типе ResearchTeam свойствам, преобразовать данные в текстовый вид с помощью метода ToString() и вывести данные.

16.С помощью метода AddPapers (params Paper []) добавить элементы в список публикаций и вывести данные объекта ResearchTeam.

17.Вывести значение свойства, которое возвращает ссылку на публикацию с самой поздней датой выхода;

18.Сравнить время выполнения операций с элементами одномерного, двумерного прямоугольного и двумерного ступенчатого массивов с одинаковым числом элементов типа Paper.

Лабораторная работа 2

Наследование. Исключения. Интерфейсы. Итераторы и блоки итераторов

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


В классе Person из лабораторной работы 1 и в классах, дополнительно указанных в вариантах, надо

переопределить (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().


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