Как правильно писать тесты 46 Цикл разработки 46 Структура проекта с тестами 51 Утверждения (Asserts) 52 Утверждения в форме ограничений 54 Категории 56
Вид материала | Тесты |
- Некорректные задания, 1276.79kb.
- К техническому регламенту, 835.7kb.
- Правительства Российской Федерации от 11 ноября 2005 г. N 679 о порядке разработки, 494.44kb.
- Постановлением Правительства Российской Федерации от 11 ноября 2005 г. N 679 о порядке, 652.85kb.
- Постановлением Правительства Российской Федерации от 11 ноября 2005 г. N 679 о порядке, 623.18kb.
- Правительства Российской Федерации от 11. 11. 2005 N 679 о порядке разработки и утверждения, 533.6kb.
- Постановления Правительства Российской Федерации от 11. 11. 2005 n 679 о порядке разработки, 613.63kb.
- Об утверждении требований к схемам теплоснабжения, порядку их разработки и утверждения, 450.79kb.
- Рабочая программа учебной дисциплины. Общие требования, порядок разработки, согласования, 414.77kb.
- Постановлением Правительства Российской Федерации от 11 ноября 2005 г. N 679 о порядке, 1924.26kb.
Библиотека классов .NET Framework
В .NET Framework включены сборки библиотеки классов .NET Framework Class Library (FCL), содержащие определения нескольких тысяч типов, каждый из которых предоставляет некоторую функциональность. Пользователи с их помощью могут создавать такие приложение, как
Web-сервисы — методы, которые позволяют легко обрабатывать сообщения на основе XML (веб-сайт как сервис не только для людей, но и для других сайтов и программ).
Web Forms — приложения, основанные на HTML (Web-сайты). Обычно приложения Web Forms выполняют запросы к базам данных и вызовы Web-сервисов, объединяют и фильтруют полученные данные, а затем выводят их в браузере, предоставляя развитый пользовательский интерфейс, основанный на HTML.
Windows Forms — Windows-приложения с богатым графическим пользовательским интерфейсом. Вместо создания пользовательского интерфейса на базе страниц Web Forms можно задействовать мощь настольных приложений Windows. В приложениях Windows Forms можно использовать преимущества поддержки элементов управления, меню, событий мыши и клавиатуры и взаимодействия напрямую с ОС. Как и приложения Web Forms, приложения Windows Forms выполняют запросы баз данных и вызовы Web-сервисов.
Консольные приложения Windows — для задач, не требующих богатого пользовательского интерфейса, это оптимальное решение. Многие компиляторы, утилиты и инструменты обычно реализованы как консольные приложения.
Службы Windows — .NET Framework позволяет строить приложения-службы, которыми управляет диспетчер Windows Service Control Manager (SCM).
Библиотеки компонентов — .NET Framework позволяет создавать автономные компоненты (типы), которые легко использовать со всеми перечисленными выше видами приложений.
Поскольку FCL насчитывает тысячи типов, наборы «родственных» типов скомпонованы в отдельные пространства имен. Так, пространство имен System (которое следует знать лучше всего) содержит базовый класс Object, который в конечном счете порождает все остальные типы. Кроме того, пространство имен System содержит типы для целых чисел, символов, строк, обработки исключений, консольного ввода/вывода, а также группу полезных типов для безопасного преобразования типов, форматирования данных, генерирования случайных чисел и выполнения различных математических операций. Типами из пространства имен System пользуются все приложения.
Чтобы задействовать ту или иную функцию платформы, нужно знать пространство имен, содержащее тип, реализующий нужную функциональность. Чтобы изменить поведение FCL-типа, обычно просто создают производный тип. Объектно-ориентированная природа .NET Framework обеспечивает мощную основу для разработки. Разработчикам не возбраняется создавать собственные пространства имен, содержащие собственные типы. Эти пространства имен и типы четко соответствуют принципам программирования, предлагаемым платформой.
Большинство пространств имен FCL предоставляет типы, которые можно задействовать в любых видах приложений. В след. табл. представлены наиболее распространенные пространства имен и краткое описание назначения их типов. Это всего лишь малая толика имеющихся пространств имен.
System | Все базовые типы, используемые практически в любом приложении |
System.Data | Типы для обмена информацией с базами данных и для обработки данных |
System.Drawing | Типы для работы с двумерной графикой; обычно применяются в приложениях Windows Forms, а также при создании картинок для страниц Web Forms |
System.IO | Типы, реализующие потоковый ввод/вывод, работу с файлами и каталогами |
System.Net | Типы, реализующие низкоуровневое сетевое взаимодействие и поддерживающие стандартные протоколы Интернета |
System.Runtime.-InteropServices | Типы, позволяющие управляемому коду получать доступ к неуправляемым функциям ОС, таким как СОМ-компоненты и Win32-функции в DLL-библиотеках |
System.Security | Типы, используемые для защиты данных и ресурсов |
System.Text | Типы для работы с текстом в различной кодировке, |
| например ASCII или Unicode |
System. Threading | Типы, используемые для асинхронных операций и синхронизации доступа к ресурсам |
System.Xml | Типы для обработки XML-схем и данных |
Общая система типов (Common Type System, CTS)
Ясно, что CLR тесно связана с типами. Типы предоставляют определенную функциональность приложениям и компонентам. Они являются механизмом, позволяющим коду, написанному на одном языке программирования, взаимодействовать с кодом, написанным на другом. Поскольку типы являются основой CLR, Microsoft создала формальную спецификацию — общую систему типов (Common Type System, CTS), описывающую определение типов и их поведение.
В спецификации CTS утверждается, что любой тип может содержать ноль или более членов. В целом, в состав типа входят:
Поле — переменная, являющаяся частью состояния объекта. Поля идентифицируются по имени и типу.
Метод — функция, выполняющая некоторое действие над объектом, зачастую изменяя его состояние. Метод имеет имя, сигнатуру и модификаторы. Сигнатура определяет соглашение о вызове метода, число параметров (и их последовательность), типы параметров, а также тип значения, возвращаемого методом.
Свойство — для вызывающей стороны этот член выглядит, как поле, но в реализации типа он выглядит, как метод (или два). Свойства позволяют типу, в котором они реализованы, проверить входные параметры и состояние объекта, прежде чем предоставить доступ к своим значениям и/или вычислять значения только при необходимости. Свойства также упрощают синтаксис обращения к типу. И, наконец, свойства позволяют создавать «поля» только для чтения или только для записи.
Событие — обеспечивает механизм взаимных уведомлений объектов. Так, кнопка может предоставлять событие, уведомляющее другие объекты о том, что ее щелкнули.
CTS также определяет правила видимости типов и доступа к их членам. Например, если тип помечен как открытый (public) (в С# — также public), он экспортируется, видим и доступен любой сборке. С другой стороны, если тип помечен как сборочный (assembly) (в С# — internal), он видим и доступен только коду той сборки, в которой реализован. Таким образом, CTS определяет правила, по которым сборки формируют границы видимости типа, a CLR реализует эти правила.
Видимый вызывающему коду тип контролирует доступ к своим членам со стороны вызывающего кода. Вот допустимые варианты управления доступом к методам или полям.
Закрытый (private) — метод может вызываться другими методами только из того же типа.
Родовой (family) — метод может вызываться производными типами независимо от того, в какой они сборке. Во многих языках (например, в С++ и С#) такой модификатор называется protected.
Родовой и сборочный (family and assembly) — метод может вызываться производными типами, но только если они определены в той же сборке. Многие языки (вроде С# и Visual Basic) не реализуют такое ограничение доступа. В ассемблере IL такой модификатор, естественно, предусмотрен.
Сборочный (assembly) — метод может вызываться любым кодом из той же сборки. Во многих языках этому соответствует модификатор internal.
Родовой или сборочный (family or assembly) — метод может вызываться производными типами из любой сборки и любыми типами из той же сборки. В С# этому соответствует protected internal.
Открытый (public) — метод доступен любому коду из любой сборки.
Кроме того, CTS определяет правила для наследования типов, виртуальных функций, времени жизни объектов и т. д. Эти правила введены для реализации семантики современных языков. На самом деле не обязательно знать правила CTS как таковые: выбранный язык представит свой синтаксис и правила для типов и установит соответствие собственного специфического синтаксиса синтаксису «языка» CLR при создании управляемого модуля.
Интересно отметить такой факт. Язык С++ позволяет определить собственный тип со своими членами. Естественно, тот же тип с теми же членами можно определить на С# или Visual Basic. Конечно, синтаксис, используемый при определении типа, зависит от языка, но поведение типа от языка не будет зависеть, так как оно определяется общей системой типов CLR.
Чтобы пояснить эту мысль, рассмотрим пример. CTS поддерживает только единичное наследование. Таким образом, поскольку С++ поддерживает типы, наследуемые от нескольких базовых типов, CTS не может принять и оперировать такими типами. Чтобы помочь разработчику, компилятор Visual С++ сообщает об ошибке, обнаруживая попытку создать управляемый код, включающий типы, наследуемые от нескольких базовых типов.
Еще одно правило CTS: все типы должны (в конечном счете) наследовать от типа System.Object. Как видите, Object — имя типа, определенного в пространстве имен System. Object является корнем всех остальных типов, гарантируя наличие некоторой минимальной функциональности у каждого экземпляра типа. В частности, тип System.Object позволяет:
сравнивать два экземпляра;
получать хеш-код экземпляра;
определять истинный тип экземпляра;
получать поверхностную (побитную) копию экземпляра;
получать текущее состояние экземпляра объекта в виде строки.