Похожие работы
|
Лабораторные работы по курсу Объектно-ориентированное программирование: язык программирования - страница №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 ББК 32.973-018я73
ВведениеВ учебном пособии представлены лабораторные работы по практикуму, который сопровождает курс «Объектно-ориентированное программирование: Язык программирования 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, который имеет
В классе 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 выводятся на консоль. Вывод должен быть подписан, т.е. вывод должен содержать информацию о том, какому типу массива отвечает выведенное значение. следующая страница >> |
|