- •Раздел 4. Разработка по Тема 4.1. Проектирование интерфейса с пользователем
- •4.1.1. Типы пользовательских интерфейсов.
- •4.1.2. Пользовательская и программная модели интерфейса.
- •4.1.3. Разработка диалогов.
- •4.1.4. Основные компоненты графических пользовательских интерфейсов.
- •Тема 4.2. Реализация графических пользовательских интерфейсов.
- •4.2.1. Диалоги, управляемые пользователем.
- •4.2.2. Диалоги, управляемые системой.
- •4.2.3. Использование метафор.
- •4.2.4. Технология Drag and Drop.
- •4.2.5. Интеллектуальные элементы.
- •4.3.1. Базовые типы данных.
- •Константы
- •Область действия имен
- •4.3.2. Указатели и адресная арифметика.
- •4.3.3. Составные типы данных. Структуры
- •Битовые поля
- •Определение типов
- •Перечислимые типы
- •4.3.4. Выражения и операции.
- •4.3.5. Управляющие конструкции. Условные операторы
- •Операторы циклов
- •4.4.1. Статические одномерные массивы.
- •4.4.2. Статические многомерные массивы.
- •4.4.3. Динамические массивы.
- •4.4.4. Массивы указателей.
- •4.5.1. Стеки.
- •4.5.2. Очереди.
- •4.5.3. Списки.
- •4.5.4. Бинарные деревья.
- •4.6.1. Объявление классов и экземпляров классов.
- •4.6.2. Инкапсуляция данных и методов.
- •4.6.3. Конструкторы классов.
- •Конструктор по умолчанию
- •Конструктор копирования
- •4.6.4. Деструкторы классов.
- •4.7.1. Разделы в описании класса.
- •4.7.2. Friend-конструкции.
- •4.7.3. Статические члены классов.
- •4.7.4. Использование описателя const в классах.
- •4.8.1. Вложенность классов.
- •4.8.2. Наследование данных и методов.
- •4.8.3. Типы наследования.
- •4.9.1. Полиморфизм раннего связывания.
- •4.9.2. Полиморфизм позднего связывания и виртуальные функции.
- •4.9.3. Абстрактные методы и классы.
- •4.10.1. Функции консольного ввода-вывода.
- •4.10.2. Функции файлового ввода-вывода.
- •4.10.3. Использование библиотеки классов потокового ввода-вывода.
- •4.11.1. Перегрузка операций.
- •4.11.2. Шаблоны функций.
- •4.11.3. Шаблоны классов.
- •4.11.4. Обработка исключений.
- •Тема 4.12. Com-технология.
- •4.12.1. Основные понятия.
- •4.12.2. Типы интерфейсов.
- •Свойства интерфейсов
- •Типы интерфейсов
- •4.12.3. Типы com-объектов.
- •4.12.4. Фабрика классов.
- •Тема 4.13. Построение com-сервера.
- •4.13.1. Язык idl.
- •Содержимое файла idl
- •4.13.2. Определение пользовательского интерфейса.
- •4.13.3. Реализация пользовательского интерфейса.
- •4.13.4. Создание тестового клиента.
- •Тема 4.14. Обзор платформы ms .Net.
- •4.14.1. Общая идея архитектуры .Net.
- •4.14.2. Достоинства и недостатки .Net.
- •4.14.3. Схема трансляции программ в .Net.
- •4.14.4. Язык msil.
- •4.14.5. Объектно-ориентированная модель .Net.
Тема 4.14. Обзор платформы ms .Net.
4.14.1. Общая идея архитектуры .Net.
В течение многих лет для Windows было написано огромное число программ, и Windows не приобрела бы тот успех, который она имеет сейчас, если бы Microsoft каждый раз создавала новую технологию, которая не позволяла бы использовать существующие программистские наработки. Новые технологии, конечно же, появлялись, но основной акцент делался на развитие и расширение существующих технологий. Microsoft выбрала эволюционный путь развития по одной простой причине — обеспечение обратной совместимости с уже имеющимися продуктами.
Хотя обратная совместимость является ключевой особенностью технологий Windows и одним из ее наиболее сильных моментов, она обладает огромным недостатком. Каждый раз, когда какая-нибудь технология расширяется и приобретает новые возможности, она становится чуть более сложной. В результате этого спустя десятилетие появилось большое число областей программирования, для которых написание кода сильно затрудняется именно тем, что в них предусматривается обратная совместимость с технологиями, появившимися 10 и более лет тому назад.
Например, СОМ основывается на относительно сложных потоковых моделях, которые являются таковыми лишь потому, что им необходимо сочетать текущую многопотоковую технологию с компонентами, написанными для Windows 3.1, в которой не существовало многопотоковых процессов. СОМ — хороший пример семейства технологий, чья полезность отрицательно сказалась на сложности, когда даже опытные разработчики сталкиваются с необходимостью изучения в течение 6 месяцев, а то и года, целого лабиринта интерфейсов, GUID (Globally Unique IDentifiers), сложных процессов переноса данных (marshalling) и других низкоуровневых хитростей, которыми пользуется СОМ.
Точно так же MFC основывается на объектной модели, которая должна быть совместима с Windows 3.1, и не использует многих замечательных особенностей С++ только потому, что этих особенностей не было в то время, когда разрабатывалась MFC.
Visual Basic сохраняет относительную простоту и успешно скрывает от пользователя сложности, к примеру, низкоуровневой СОМ, но за это приходится платить. Вызов API Windows из кода VB сопряжен со значительными трудностями, и разработчики на VB в основном имеют доступ лишь к небольшой части той функциональности и гибкости, которые предлагают Windows и Windows API.
Необходимо было создать простой, но имеющий сложную структуру набор языков, сред и средств разработки, которые позволят разработчику легко создавать современные программные продукты. .NET представляет собой новую платформу, новый API для программирования в Windows, а С# — новый язык, созданный с нуля, для работы с этой платформой, а также для извлечения всех выгод из прогресса сред разработки и нашего понимания принципов объектно-ориентированного программирования в течение последних 20 лет.
Необходимо отметить, что обратная совместимость не потеряна. Существующие программы будут выполняться, а платформа -NET была спроектирована таким образом, чтобы она могла работать с имеющимся программным обеспечением. Связь между компонентами в Windows сейчас почти целиком осуществляется при помощи СОМ. С учетом этого .NET обладает способностью (а) создавать оболочки (wrappers) вокруг существующих компонентов СОМ, так что компоненты .NET могут общаться с ними, и (б) создавать оболочки вокруг компонентов .NET, что позволяет им выглядеть как обычные СОМ-компоненты.
Чтобы писать код для платформы -NET, необязательно изучать C#. Microsoft расширила язык C++ и произвела значительные изменения в VB, который превратился в еще более мощный язык VB.NET. Благодаря этому код, написанный с применением обоих этих языков, может работать на платформе -NET. Однако эти языки отягощены наследством, приобретенным в процессе длительного развития, так как они не были созданы с нуля с учетом использования современных технологий.
Платформа .NET — это среда, которую видит код в процессе исполнения. Это означает, что .NET занимается исполнением кода: запускает его, дает ему соответствующие права, выделяет память для хранения данных, помогает с освобождением памяти и ресурсов, которые больше не требуются, и т.д. Помимо этого .NET предоставляет обширную библиотеку классов, так называемую библиотеку базовых классов .NET, для выполнения большого числа задач Windows. В этом плане .NET можно рассматривать с двух сторон: как управляющую выполнением кода и предоставляющую коду различные службы.
Определения и термины, связанные с .NET.
Среда исполнения .NET (.NET runtime), также известная как общая среда исполнения или CLR,— это то, что собственно управляет кодом. Можно рассматривать ее как код, который обеспечивает загрузку программы, ее выполнение и предоставление всех необходимых служб.
Управляемый код (managed code). Любой код, который разработай для исполнения в .NET, называется управляемым. Код, который работает под управлением Windows, называется неуправляемым.
Промежуточный язык (IL). Это тот самый язык, на котором должен быть написан код, загружаемый и запускаемый средой исполнения .NET. При компиляции управляемого кода компилятор генерирует код на промежуточном языке, a CLR выполняет заключительную стадию компиляции непосредственно перед исполнением кода. Язык IL разработан таким образом, чтобы обеспечить быструю компиляцию в машинный код, но в то же время он поддерживает все особенности .NET.
Общая система типов (Common Type System, CTS). Для обеспечения совместимости языков необходимо иметь согласованный набор основных типов данных. чтобы все языки могли быть стандартизированы. Этим целям и служит CTS. Кроме того, CTS предоставляет правила для определения пользовательских классов.
Базовые классы .NET. Это обширная библиотека классов, которая содержит код для выполнения большого числа задач в Windows, начиная от отображения окон и форм и заканчивая базовыми службами Windows, чтением и записью в файлы, доступом к сети и Интернету и доступом к источникам данных.
Сборка. Это модуль, в котором хранится компилированный управляемый код. Она похожа на классический исполняемый файл или DLL, но имеет важное свойство — она полностью себя описывает. Сборки содержат метаданные, которые включают в себя сведения о сборке и обо всех определенных внутри нее типах, методах и т.п. Сборка может быть частной (доступной только одному приложению) и разделяемой (доступной любому приложению Windows).
Кэш сборок. Место на диске, где хранятся разделяемые сборки.
Общая спецификация языка (Common Language Specification, CLS). Это мини-мальный набор стандартов, который гарантирует, что доступ к коду может быть осуществлен из любого языка. Все компиляторы, предназначенные для .NET, должны поддерживать CLS. CLS формирует подмножество функций, доступных в .NET и IL, и полезна для кода, использующего особенности вне компетенции CLS. Если в сборке присутствуют какие-либо не CLS особенности, они могут быть недоступны в некоторых языках.
Отражение. То, что сборки полностью себя описывают, открывает теоретическую возможность программного доступа к метаданным сборки. На самом деле существует несколько базовых классов, которые разработаны с этой целью. Технология известна как отражение (возможно, из-за того интригующего факта, что программа может использовать эту технологию для доступа к собственным метаданным).
Компиляция Just-In-Time (JIT). Этот термин обозначает процесс выполнения заключительной стадии компиляции с промежуточного языка в машинный код. Название определяется тем, что части кода компилируются по мере необходимости.
Манифест. Область сборки, содержащая метаданные.
Область приложения. Это способ, с помощью которого CLR позволяет различным программам исполняться в одном и том же пространстве процессов. Изоляция модулей кода достигается путем использования безопасности типов IL для проверки того, что каждый сегмент кода ведет себя правильно.
Сборка мусора. CLR применяет этот способ для очистки памяти, которая больше не требуется приложению. Таким образом, приложение не несет ответственности за освобождение памяти.