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

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



МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

имени М.В. ЛОМОНОСОВА


Факультет вычислительной математики и кибернетики


Н.И. Березина
Лабораторные работы по курсу
Объектно-ориентированное программирование:

язык программирования C#


Учебное пособие

МАКС Пресс

____________________________________________________

Москва-2010

УДК 004.43(075.8)

ББК 32.973-018я73

Б48
Печатается по решению Редакционно-издательского совета

факультета вычислительной математики и кибернетики

Московского государственного университета имени М.В.Ломоносова

Рецензенты:



Корухова Ю.С. - к.ф.-м.н.

ассистент кафедры алгоритмических языков;


Лопушенко В.В. - к.ф.-м.н.

старший научный сотрудник лаборатории математической физики



Березина Н.И.

Б48 Лабораторные работы по курсу «Объектно-ориентированное программирование: язык программирования C : Учебное пособие – М.: Издательский отдел факультета ВМиК МГУ имени М.В.Ломоносова (лицензия ИД N 05899 от 24.09.2001 г.); МАКС Пресс, 2010. – 76 с.

ISBN 978-5-89407-424-5

ISBN 978-5-317-03375-0
В учебном пособии представлены лабораторные работы по практикуму, который сопровождает курс «Объектно-ориентированное программирование: Язык программирования C#». Курс читается в 5 семестре как обязательный кафедральный курс для студентов 3 курса кафедр математической физики, общей математики, функционального анализа и квантовой информатики. Курс также входит в учебный план отделения бакалавров, которые обучаются по направлению “Информационные технологии”.
УДК 004.43(075.8)

ББК 32.973-018я73




ISBN 978-5-89407-424-5

© Факультет вычислительной математики

ISBN 978-5-317-03375-0

и кибернетики МГУ имени М.В.Ломоносова, 2010



Введение


В учебном пособии представлены лабораторные работы по практикуму, который сопровождает курс «Объектно-ориентированное программирование: Язык программирования C#». Курс читается в 5 семестре как обязательный кафедральный курс для студентов 3 курса кафедр математической физики, общей математики, функционального анализа и квантовой информатики. Курс также входит в учебный план для бакалавров, которые обучаются по направлению “Информационные технологии”.

Курс является первым из цикла курсов, посвященных платформе Microsoft .NET, его предметом является язык C# как основной язык программирования технологии Microsoft .NET Framework.

Представленная в пособии программа ориентирована на версию .NET Framework 4.0 (3.5), которая поддерживается VisualStudio 2010 (2008).

Программа курса составлена с учетом того, что студенты 3-го курса уже знакомы с объектно-ориентированным языком C++, имеющим много общих синтаксических конструкций с языком C#. По этой причине в курсе акцентируется внимание на различиях в решении проблем, которые возникают при написании управляемого и неуправляемого кода, и больше внимания уделяется конструкциям C#, которых нет в языке С++ - делегатам, событиям, интерфейсам, атрибутам.

Значительная часть курса посвящена изучению типов, определенных в базовых библиотеках Microsoft .NET Framework. Подробно изучается механизм сериализации и определенные в стандартных библиотеках интерфейсы и классы-коллекции, так как они используются в типах, поддерживающих программную модель пользовательского интерфейса, которая изучается в 6 семестре.

Лабораторные работы составлены так, чтобы в процессе работы они давали практические навыки работы со всеми основными конструкциями языка C#.

Для первой лабораторной работы представлены три варианта одного уровня сложности. Лабораторная работа 2 содержит дополнительное задание повышенного уровня сложности. Лабораторные работы 3-5 предлагаются в вариантах двух уровней сложности.

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

Автор пользуется возможностью выразить искреннюю благодарность зам. декана факультета ВМК доц. Березину Б.И., зав. кафедрой математической физики проф. Денисову А.М. и зав. лабораторией математической физики проф. Дмитриеву В.И. за постоянную поддержку и помощь.

Рекомендуемая литература


1.Троелсен Э. Язык программирования С# 2008 и платформа .NET 3.5- Изд. Вильямс, 2010.

2.Трей Нэш. C# 2010. Ускоренный курс для профессионалов. - Изд. Вильямс, 2010.

3.Нейгел К., Ивьен Б. и др. С# 2008 и платформа NET 3.5 для профессионалов. – Изд. Диалектика, 2008.

4.Герберт Шилдт. С# 3.0. Полное руководство. - Изд. Вильямс, 2010.



Программа курса «Объектно-ориентированное программирование: Язык программирования C#»

Общеязыковая среда выполнения (CLR). Единая система типов .NET Framework


Введение. Общеязыковая среда выполнения (CLR). Базовая библиотека классов (BCL). Сборка (assembly) как минимальная единица повторного использования. Метаданные и манифест сборки. Единая система типов .NET Framework как основа межъязыкового взаимодействия. Типы-значения (value types) и ссылочные типы (reference types). Класс System.Object как общий базовый класс всех типов C#. Упаковка(boxing) и распаковка(unboxing) типов-значений. Анонимные типы. Арифметические типы. Вычисления с плавающей запятой. Допустимые преобразования типов. Тип dynamic.

Массивы и строки


Массивы. Определение и инициализация. Одномерные массивы. Прямоугольные и ступенчатые (jagged) многомерные массивы. Допустимые приведения типов массивов. Классы System.String и System.Text.StringBuilder для работы со строками.

Пространства имен. Классы и структуры


Структура программы на языке С#. Пространства имен. Классы и структуры в C#. Члены класса. Доступ к членам класса (полям и методам). Константы и поля, доступные только для чтения. Статические методы и данные. Инициализация объектов. Конструкторы. Статический конструктор. Статические классы. Вложенные классы. Частичные классы. Частичные методы. Свойства и индексаторы (свойства с параметрами). Автореализуемые свойства. Инициализаторы объектов. Передача параметров размерных и ссылочных типов. Модификаторы ref и out. Методы с переменным числом параметров. Модификатор params. Перегрузка операторов.

Исключения. Типы с явным освобождением ресурсов. Сборщик мусора


Механизм исключений. Блоки catch и finally. Иерархия библиотечных классов-исключений. Жизненный цикл объекта. Деструкторы и метод Finalize. Сборщик мусора. Типы с явным освобождением ресурсов. Сравнение подходов к решению задачи освобождения ресурсов в языках С# и C++.

Наследование. Полиморфные типы


Наследование. Отношение агрегации и отношение наследования. Наследование и конструкторы. Полиморфные типы. Переопределение виртуальных и невиртуальных методов. Виртуальные свойства. Абстрактные классы. Преобразование типов. Операторы as и is.

Тип интерфейс (interface)


Тип интерфейс - определение и реализация. Явная и неявная реализация интерфейса. Интерфейс как параметр или как тип возвращаемого значения. Реализация интерфейсов и наследование.

Типы-коллекции


Классы-коллекции из пространства имен System.Collections. Итераторы. Блок итератора. Оператор yield. Интерфейсы IEnumerable и IEnumerator. Оператор foreach. Интерфейсы ICollection и IList. Класс ArrayList. Интерфейс IDictionary и класс Hashtable. Интерфейсы IComparable и IComparer.

Универсальные (обобщенные) типы (generics)


Универсальные типы и CLR. Универсальные методы. Ограничения (constraints) для типовых параметров. Универсальные типы и наследование. Обобщения и явное и неявное приведение типов. Статические универсальные методы в System.Array. Тип System.Tuple. Универсальные интерфейсы ICollection, IList и IDictionary. Универсальные классы-коллекции в базовой библиотеке классов. Классы List и Dictionary.

Тип делегат (delegate)


Тип delegate. Цепочки делегатов. Классы System.Delegate и System.MulticastDelegate. Анонимные методы. Обобщенные делегаты.

Тип событие (event)


Определение и реализация событий. Свойства события (event properties). События и интерфейсы. События, определенные в базовой библиотеке классов. Делегаты EventHandler и EventHandler. Тип System.EventArgs. Интерфейс System.ComponentModel.INotifyPropertyChanged.

Расширяющие методы (extension methods) и язык интегрированных запросов LINQ


Делегаты System.Func<�·>. Лямбда-выражения как способ объявления анонимных методов. Выражения запросов. Стандартные операции запросов.

Потоковые классы. Механизм сериализации. Версия сборки


Классы для работы с файлами и каталогами, потоковый класс System.IO.FileStream, классы читатели/писатели System.IO.BinaryReader и System.IO.BinaryWriter. Механизм сериализации. Общая схема сериализации. Нестандартная (пользовательская) сериализация. Версия сборки. Сборки со строгим именем. Толерантность по отношению к внешним или неожидаемым данным, толерантность по отношению к пропущенным данным при сериализации.

Отражение (reflection). Атрибуты


Механизм отражения (reflection) как способ получения из метаданных полной информации о типе в период выполнения. Класс System.Type. Атрибуты. Позиционные и именованные параметры атрибута. Определение пользовательских атрибутов. Атрибуты, определенные в базовой библиотеке классов.

Взаимодействие управляемого и неуправляемого кода


Взаимодействие управляемого и неуправляемого кода. Сервис PInvoke. Атрибуты DllImport и MarshalAs. Маршалинг типов-значений и ссылочных типов. Копирование (copying) и прикрепление (pinning) данных при маршалинге.

Глобализация и локализация приложения


Глобализация и локализация приложения. Региональные настройки (culture). Класс System.Globalization.CultureInfo.

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

Классы, свойства, индексаторы. Одномерные, прямоугольные и ступенчатые массивы

Требования к программе, общие для всех вариантов


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

  • закрытое поле типа string, в котором хранится имя;

  • закрытое поле типа string, в котором хранится фамилия;

  • закрытое поле типа System.DateTime для даты рождения.

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

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

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

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

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

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

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

свойство типа int c методами get и set для получения информации(get) и изменения (set) года рождения в закрытом поле типа DateTime, в котором хранится дата рождения.

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

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

виртуальный метод string ToShortString(), который возвращает строку, содержащую только имя и фамилию.

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

Для этого в методе Main() создать

одномерный массив;

двумерный прямоугольный массив;

двумерный ступенчатый массив.

Тип элементов массивов зависит от варианта лабораторной работы. Массивы должны иметь одинаковое число элементов. Если число строк в двумерном прямоугольном массиве равно nrow, а число столбцов ncolumn, то одномерный массив должен содержать nrow*ncolumn элементов, в двумерном ступенчатом массиве общее число элементов также должно быть равно nrow*ncolumn.

Значения nrow и ncolumn вводятся в процессе работы приложения в виде одной строки с разделителями. В приглашении, которое получает пользователь, должна быть информация о том, какие символы можно использовать как разделители, число разделителей должно быть больше 1. С помощью метода Split класса System.String приложение разбирает введенную пользователем текстовую строку с информацией о числе строк и числе столбцов двумерного массива и присваивает значения переменным, которые содержат значения nrow и ncolumn. В первой лабораторной работе не требуется обрабатывать ошибки ввода, предполагается, что пользователь правильно ввел данные.

Приложение распределяет память для всех массивов и инициализирует элементы массивов. Для инициализации элементов можно использовать конструктор без параметров.

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

Для измерения времени выполнения операций можно использовать свойство Environment.TickCount. Cтатическое свойство TickCount класса Environment имеет тип int, использует информацию системного таймера и содержит время в миллисекундах, которое прошло с момента перезагрузки компьютера.

Чтобы получить время выполнения некоторого блока кода, необходимо вызвать Environment.TickCount непосредственно перед блоком и сразу же после последнего оператора блока и взять разность значений.

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

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


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