Общие сведения о платформе .NET

Содержание

Введение. 6

1 Лабораторная работа № 1 Коллекции C#. 7

1.1 Цель работы.. 7

1.2 Теоретические сведения. 7

1.3 Порядок выполнения лабораторной работы.. 13

1.4 Задание на лабораторную работу. 19

1.5 Содержание отчета. 20

1.6 Контрольные вопросы.. 20

2 Лабораторная работа № 2 Рефлексия.. 21

2.1 Цель работы.. 21

2.2 Теоретические сведенья. 21

2.3 Порядок выполнения работы.. 51

2.4 Задание на лабораторную работу. 55

2.5 Содержание отчета. 55

2.6 Контрольные вопросы.. 55

3 Лабораторная работа № 3 ADO.NET. 56

3.1 Цель работы.. 56

3.2 Теоретические сведенья. 56

3.3 Порядок выполнения работы.. 62

3.4 Задание на лабораторную работу. 74

3.5 Содержание отчета. 74

3.6 Контрольные вопросы.. 75

4 Лабораторная работа № 4 Fluent NHibernate. 76

4.1 Цель работы.. 76

4.2 Теоретические сведенья. 76

4.3 Порядок выполнения работы.. 86

4.4 Задание на лабораторную работу. 104

4.5 Содержание отчета. 105

4.6 Контрольные вопросы.. 105

5 Лабораторная работа № 5 ASP.NET. 106

5.1 Цель работы.. 106

5.2 Теоретические сведенья. 106

5.3 Порядок выполнения работы.. 121

5.4 Задание на лабораторную работу. 143

5.5 Содержание отчета. 144

5.6 Контрольные вопросы.. 144

6 Лабораторная работа № 6 модульное тестирование. 145

6.1 Цель работы.. 145

6.2 Теоретические сведенья. 145

6.3 Порядок выполнения работы.. 149

6.4 Задание на лабораторную работу. 162

6.5 Содержание отчета. 163

6.6 Контрольные вопросы.. 163


Введение

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

Данные методические указания созданы, чтобы помочь получить практический опыт по работе с технологиями взаимодействия с базами данных, web-технологиями и технологиями модульного тестирования в платформе .NET. В данных методических указаниях рассматриваются такие технологии, как ADO.NET – технология работы с базами данных, Fluent Hibernate – технология объектно-реляционного отображения, ASP.NET технология создания web-приложений, Unit Testing Framework – технология модульного тестирования приложений, а также рассматриваются базовые механизмы платформы .NET, такие как коллекции и рефлексия.

Некоторые технологии, описанные в данной методичке, используются не только в платформе .NET, но и в платформе Java. Например, технология NHibernate используется в джаве под названием Hibernate, а подходы, которые применяются в технологии ASP.NET очень похожы на подходы которые применяються в Java-технологии Java Server Faces. Таким образом, данные методыческие указания должны помочь сформировать общую картину не только для платформы .NET, но и для платформы Java.

В некоторых лабораторных работах описаны шаблоны проектирования, которые целесообразно применять при решении той или иной задачи. Например, в лабораторной работе по объекно-реляционному отображению рассматривается архитектурный паттерн Data Acces Object, а также пат терн Factory. Это должно помочь сформировать представление о использовании паттернов проектирования при создании приложений с использованием объектно-ориетнтированных языков програмирования.

1 Лабораторная работа № 1
Коллекции C#

Цель работы

Изучить возможности коллекций языка С#, получить практические навыки по работе с коллекциями C#.

Теоретические сведения

Общие сведения о платформе .NET

Платформа - это среда выполнения программ и все то, что определяет особенности разработки и выполнения программного кода – парадигмы программирования, языки программирования, множества базовых классов и т.д.

Microsoft.NET (.NET Framework) – программная платформа, являющаяся интегрированным компонентом Windows, содержит виртуальную среду выполнения (среда CLR) и унифицированный набор библиотек классов. В платформе .NET можно выделить следующие основные компоненты:

- Common Language Specification (CLS);

- Microsoft Intermediate Language (MSIL);

- Common Language Runtime (CLR);

- .NET Framework Class Library (.NET FCL).

CLS (Common Language Specification) – общая спецификация языков программирования. Это набор конструкций и ограничений, которые являются руководством для создателей библиотек и компиляторов в среде .NET Framework. Библиотеки, построенные в соответствии с CLS, могут быть использованы из любого языка программирования, поддерживающего CLS. Языки, соответствующие CLS (к их числу относятся языки Visual Basic, Visual C++, Visual C#), могут интегрироваться друг с другом. CLS – это основа межъязыкового взаимодействия в рамках платформы Microsoft.NET.

CLR (Common Language Runtime) – среда времени выполнения или виртуальная машина - основной компонент .NET Framework. CLRобеспечивает выполнение сборки. Программный код (модуль) сборки может быть как управляемым (код, при выполнении которого CLR, в частности, активизирует систему управления памяти), так и неуправляемым.

Под виртуальной машиной (среда времени выполнения) понимают абстракцию инкапсулированной (обособленной) управляемой операционной системы высокого уровня, которая обеспечивает выполнение программного кода и предполагает решение следующих задач:

- управление кодом (загрузка и выполнение);

- управление памятью при размещении объектов;

- изоляцию памяти приложений;

- проверку безопасности кода;

- преобразование промежуточного языка в машинный код;

- доступ к метаданным (расширенная информация о типах);

- обработка исключений, включая межъязыковые исключения;

- взаимодействие между управляемым и неуправляемым кодом (в том числе и COM- объектами);

- поддержка сервисов разработки (профилирование, отладка и т.д.).

Таким образом, CLR – это набор служб, необходимых для выполнения сборки.

Сама CLR состоит из двух главных компонентов:

- ядра (mscoree.dll);

- библиотеки базовых классов (mscorlib.dll).

Ядро среды выполнения реализовано в виде библиотеки mscoree.dll. При компоновке сборки в неё встраивается специальная информация, которая при запуске приложения (.exe) или при загрузке библиотеки (обращение к .dll из неуправляемого модуля – вызов функции LoadLibrary для загрузки управляемой сборки) приводит к загрузке и инициализации CLR. После загрузки CLR в адресное пространство процесса, ядро среды выполнения производит следующие действия:

- находит местонахождение сборки;

- загружает сборку в память;

- производит анализ содержимого сборки (выявляет классы; структуры; интерфейсы);

- производит анализ метаданных;

- обеспечивает компиляцию кода на промежуточном языке (IL) в платформозависимые инструкции (ассемблерный код);

- выполняет проверки, связанные с обеспечением безопасности;

- используя основной поток приложения, передаёт управление преобразованному в команды процессора фрагменту кода сборки.

.NET FCL (.NET Framework Class Library) –объектно-ориентированная библиотека, соответствующая CLS спецификации и содержащая классы, интерфейсы и системы типов (типов-значений), которые включаются в состав платформы .NET.

Эта библиотека обеспечивает доступ к функциональным возможностям системы и выступает в качестве основы при разработке .NET приложений, компонент и элементов управления.

Библиотека .NET FCL является вторым основным компонентом платформы .NET.

Библиотеку .NET FCL могут использовать все .NET-приложения, независимо от назначения, архитектуры и используемого при разработке языка программирования. Библиотека включает более 4000 классов. В частности, она содержит:

1. Встроенные (элементарные) типы, представленные в виде классов (на платформе .NET всё построено на структурах или классах);

2. Классы для разработки графического пользовательского интерфейса (Windows Form);

3. Классы для разработки Web-приложений и Web-служб на основе технологии ASP.NET (Web Forms);

4. Классы для разработки приложений, работающих с XML и Internet-протоколами (FTP; HTTP; SMTP; SOAP);

5. Классы для разработки приложений, работающих с базами данных (ADO.NET).

.NET-приложение – приложение, разработанное для выполнения на платформе .NET и реализованное на языках программирования, соответствующих CLS.

MSIL (Microsoft Intermediate Language или IL – Intermedia Language) – промежуточный язык платформы .NET. Исходные тексты программ для .NET приложений пишутся на языках программирования, соответствующих спецификации CLS. Для языков программирования, соответствующих спецификации CLS может быть построен преобразователь в MSIL. Таким образом, программы на этих языках могут транслироваться в промежуточный код на MSIL. Благодаря соответствию CLS, в результате трансляции программного кода, написанного на разных языках, получается совместимый IL код.

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

При преобразовании программного кода в MSIL формируется блок метаданных. Этот блок содержит информацию о данных, используемых в программе.

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

Ранее такая информация сохранялась отдельно. Например, приложение могло включать информацию об интерфейсах, которая описывалась на Interface Definition Language (IDL). Теперь метаданные являются частью управляемого модуля.

В частности, метаданные используются для:

1. Сохранения информации о типах. При компиляции теперь не требуются заголовочные и библиотечные файлы. Всю необходимую информацию компилятор читает непосредственно из управляемых модулей;

2. Верификации кода в процессе выполнения модуля;

3. Управления динамической памятью (освобождение памяти) в процессе выполнения модуля;

4. Динамической подсказки (IntelliSense) при разработке программы стандартными инструментальными средствами (MS Visual Studio.NET).

Языки, для которых реализован перевод на MSIL достаточно широк:

- Visual Basic;

- Visual C++;

- Visual C#;

- и более 20 других CTS-совместимых языков.

1.2.2 Общие сведения о коллекциях C#

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

Во многих языках программирования (Java, C, C++, Pascal) единственным встроенным в язык средством хранения объектов являются массивы. Однако массивы обладают значительными недостатками, одним из них является конечный размер массива, как следствие необходимость следить за размером массива. Другим - индексная адресация, что не всегда удобно, так как ограничивает возможности добавления и удаления объектов. Чтобы избавиться от этих недостатков уже несколько десятилетий программисты используют рекурсивные типы данных, такие как списки и деревья. Стандартный набор коллекций C# служит для избавления программиста от необходимости самостоятельно реализовывать эти типы данных и снабжает его дополнительными возможностями.

Главное преимущество коллекций заключается в том, что они стандартизируют обработку групп объектов в программе. Все коллекции разработаны на основе набора четко определенных интерфейсов. Некоторые встроенные реализации таких интерфейсов, в том числе ArrayList, Hashtable, Stack и Queue, могут применяться в исходном виде и без каких-либо изменений. Имеется также возможность реализовать собственную коллекцию, хотя потребность в этом возникает крайне редко.

В среде .NET Framework поддерживаются пять типов коллекций: необобщенные, специальные, с поразрядной организацией, обобщенные и параллельные. Необобщенные коллекции реализуют ряд основных структур данных, включая динамический массив, стек, очередь, а также словари, в которых можно хранить пары «ключ-значение». В отношении необобщенных коллекций важно иметь в виду следующее: они оперируют данными типа objеct.

Таким образом, необобщенные коллекции могут служить для хранения данных любого типа, причем в одной коллекции допускается наличие разнотипных данных. Очевидно, что такие коллекции не типизированы, поскольку в них хранятся ссылки на данные типа object. Классы и интерфейсы необобщенных коллекций находятся в пространстве имен System.Collections.

Специальные коллекции оперируют данными конкретного типа или же делают это каким-то особым образом. Например, имеются специальные коллекции для символьных строк, а также специальные коллекции, в которых используется однонаправленный список. Специальные коллекции объявляются в пространстве имен System.Collections.Specialized.

В прикладном интерфейсе Collections API определена одна коллекция с поразрядной организацией — это BitArray. Коллекция типа BitArray поддерживает поразрядные операции (операции над отдельными двоичными разрядами) например AND или XOR, а, следовательно, она существенно отличается своими возможностями от остальных типов коллекций. Коллекция типа BitArray объявляется в пространстве имен System.Collections.

Обобщенные коллекции обеспечивают обобщенную реализацию нескольких стандартных структур данных, включая связные списки, стеки, очереди и словари. Такие коллекции являются типизированными в силу их обобщенного характера. Это означает, что в обобщенной коллекции могут храниться только такие элементы данных, которые совместимы по типу с данной коллекцией. Благодаря этому исключается случайное несовпадение типов. Обобщенные коллекции объявляются в пространстве имен System.Collections.Generic.

Параллельные коллекции поддерживают многопоточный доступ к коллекции. Это обобщенные коллекции, определенные в пространстве имен System.Collections.Concurrent.

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

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

Это означает, что, внеся минимальные изменения в код циклического обращения к коллекции одного типа, его можно использовать для аналогичного обращения к коллекции другого типа. Для поочередного обращения к содержимому коллекции в цикле foreach используется перечислитель.

С перечислителем непосредственно связано другое средство, называемое итератором. Это средство упрощает процесс создания классов коллекций, например специальных, поочередное обращение к которым организуется в цикле foreach.

И последнее замечание: если у вас имеется некоторый опыт программирования на С++, то вам, вероятно, будет полезно знать, что классы коллекций по своей сути подобны классам стандартной библиотеки шаблонов (Standard Template Library — STL), определенной в С++. То, что в программировании на С++ называется контейнером, в программировании на С# называется коллекцией. Это же относится и к Java. Если вы знакомы с библиотекой Collections Framework для Java, то научиться пользоваться коллекциями в С# не составит для вас большого труда.

1.2.3 Обобщенные коллекции С#

Обобщенные коллекции обеспечивают обобщенную реализацию нескольких стандартных структур данных, включая связные списки, стеки, очереди и словари. Такие коллекции являются типизированными в силу их обобщенного характера. Это означает, что в обобщенной коллекции могут храниться только такие элементы данных, которые совместимы по типу с данной коллекцией. Благодаря этому исключается случайное несовпадение типов. Обобщенные коллекции объявляются в пространстве имен System.Collections.Generic.

Обобщенные коллекции С# представлены в таблице 1.1.

Таблица 1.1 – Обобщенные коллекции C#

List<T> Представляет строго типизированный список объектов, доступных по индексу. Поддерживает методы для поиска по списку, выполнения сортировки и других операций со списками
HashSet<T> Представляет набор значений
LinkedList<T> Представляет двусвязный список
Dictionary<TKey, TValue> Представляет коллекцию ключей и значений
Queue<T> Представляет коллекцию объектов, основанную на принципе FIFO
SortedDictionary<TKey, TValue> Представляет коллекцию пар "ключ-значение", отсортированную по ключу
SortedList<TKey, TValue> Представляет коллекцию пар "ключ-значение", упорядоченных по ключу
SortedSet<T> Представляет упорядоченную коллекцию объектов
Stack<T> Представляет коллекцию экземпляров одного и того же произвольного типа, имеющую переменный размер и основанную на принципе LIFO

Наши рекомендации