Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

GMSAPR

.pdf
Скачиваний:
11
Добавлен:
16.03.2016
Размер:
9.01 Mб
Скачать

31

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

2.4.NET Framework

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

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

Новые технологии Microsoft .NET призваны облегчить создание сложных современных приложений, в том числе и распределённых географически, их документирование и внедрение. В рамках Microsoft .NET разработчикам программ предоставляется новый интерфейс программирования, пригодный для создания обычных настольных приложений, системных сервисов, а также Web-приложений и Web-сервисов.

.NET Framework состоит из двух частей: общеязыковой исполняющей среды (common language runtime, CLR) и библиотеки классов Framework Class Library (FCL).

Microsoft реализовала CLR и FCL для различных версий Windows,

включая Windows 98 / 98SE / Me / NT 4 / 2000 / 32- и 64-разрядные версии Windows ХР и Windows .NET Server Family. Существует также «облегченная» версия .NET Framework — .NET Compact Framework — для карманных компьютеров (с Windows СЕ и Palm) и портативных устройств.

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

32

многоязыковой разработки, защиты, развертывания и администрирования. Ниже приведён далеко не полный список преимуществ CLR и FCL:

Единая программная модель. В отличие от существующего подхода, когда одни функции ОС доступны через процедуры динамически подключаемых библиотек (DLL), а другие — через СОМ-объекты, теперь весь прикладной сервис представлен общей объектно-ориентированной программной моделью.

Упрощенная модель программирования CLR избавляет от работы с разными «потаенными» структурами, как это было с Win32 и СОМ. Так, разработчику не нужно разбираться с реестром, глобально-уникальными идентификаторами (GUID), IUnknown, AddRef, Release, HRESULT и т. д. CLR

не просто позволяет разработчику абстрагироваться от этих концепций — их просто нет в CLR в каком бы то ни было виде. Это значительно упрощает как изучение, так и разработку различных многокомпонентных программных комплексов (особенно САПР систем).

Отсутствие проблем с версиями. Ранее существовала проблема совместимости версий различных DLL-библиотек. Эта проблема даже получила определенное название «Hell DLL» - «Ад DLL». Эта проблема возникает, когда компоненты, устанавливаемые для нового приложения, заменяют компоненты старого приложения, и в итоге последнее начинает вести себя, по меньшей мере, «странно» или перестает работать вообще. Архитектура .NET Framework позволяет изолировать прикладные компоненты, так что приложение всегда загружает именно те компоненты, с которыми оно создавалось и тестировалось. Если приложение работает после начальной установки, оно будет работать всегда. С технологией .NET врата «ада DLL» теперь закрыты.

Упрощенная разработка. Ранее Windows-приложения было очень трудно устанавливать и разворачивать (install, инсталлировать): обычно нужно создать массу файлов, параметров реестра и ярлыков, зарегистрировать используемые COM-компоненты.

33

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

Работа на нескольких платформах. При компиляции кода для .NET Framework компилятор генерирует код на общем промежуточном языке

(common intermediate language, CIL или MSIL – Microsoft intermediate language),

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

Поскольку трансляция выполняется в период выполнения, генерируются команды конкретного процессора. Это значит, что вы можете развертывать ваше приложение для .NET Framework на любой машине, где работает версия CLR и FCL, соответствующая стандарту ЕСМА: с архитектурой x86, IA64, Alpha, PowerPC и т. д. Количество поддерживаемых платформ растёт с каждым днём. Информация становится доступной для любых устройств, освобождая программистов от необходимости привязываться к конкретной аппаратной архитектуре (системе команд процессора, разрядности машинного слова, количеству регистров и т. д.).

Кроме того, существуют проекты создания .NET платформ не только под

Windows, но и под Linux (DotGNU) и другие ОС.

Интеграция языков программирования. СОМ позволяет разным языкам взаимодействовать. .NET Framework позволяет разным языкам интегрироваться, то есть одному языку использовать типы, созданные на других языках.

Например, CLR позволяет создать на C++ класс, производный от класса, реализованного на Visual Basic. CLR делает это возможным, так как она определяет и предоставляет общую систему типов (Common Type System, CTS),

34

которую должны использовать все языки, ориентированные на CLR. То есть «Строка» для класса на Visual Basic.NET означает то же самое понятие, что и «Строка» для программы на C# (и представляется в памяти совершенно одинаковым образом). Если сравнивать с обычным C++, то только в нём создано несколько классов, поддерживающих понятие строки, несовместимых друг с другом.

Общеязыковая спецификация (Common Language Specification, CLS)

определяет правила, которым должны следовать разработчики компиляторов, чтобы их языки интегрировались с другими. Сама Microsoft предлагает несколько таких языков:

С#

Managed C++

Visual J# .NET

Visual Basic .NET

JScript .NET

Список языков, удовлетворяющих CLS, растёт с каждым днём. Последние версии Borland Delphi так же уже поддерживают .NET.

Будем надеяться, что бушевавшие несколько десятилетий «религиозные войны» между сторонниками различных языков программирования наконец-то останутся в прошлом.

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

Автоматическое управление памятью (Garbage collection, сборка мусора). Программирование требует большого мастерства и дисциплины, особенно, когда речь идет об управлении использованием ресурсов (файлов, памяти, графических объектов, пространства экрана, сетевых соединений, ресурсов баз данных и пр.). Одна из самых распространенных ошибок (особенно не очень опытных программистов) — небрежное отношение к

35

освобождению этих ресурсов, что может привести к некорректному выполнению программы в непредсказуемый момент. Однако и очень опытный программист может забыть освободить тот или иной ресурс. В итоге программа может начать работать нестабильно. Проявляться это может только в некоторых определённых случаях, в результате чего программа теряет надёжность, а такие ошибки бывает очень не просто отловить. Например, некоторые ошибки могут проявляться только после функционирования программы в течение нескольких часов (суток, месяцев)… Или только при определённом стечении обстоятельств (набора переменных, действий пользователя), которое бывает весьма редко, но всё-таки бывает…

CLR автоматически отслеживает использование ресурсов, гарантируя, что не произойдет их утечки. По сути, она исключает возможность явного освобождения памяти. Уходят в прошлое утилиты поиска утечек ресурсов (BoundsChecker и др.), программирование отныне доступно всем.

Проверка безопасности типов. CLR может проверять безопасность использования типов в коде, что гарантирует корректное обращение к существующим типам.

Если входной параметр метода объявлен как 4-байтное значение, CLR обнаружит и предотвратит применение 8-байтного значения для этого параметра. Безопасность типов также означает, что управление может передаваться только в определенные точки (точки входа методов). Невозможно указать произвольный адрес и заставить программу исполняться, начиная с этого адреса. Совокупность всех этих защитных мер избавляет от многих распространенных и часто «трудноотлавливаемых» программных ошибок.

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

Кроме того, необходимо ответить, что благодаря предыдущим двум пунктам большинство ошибок обнаруживается ещё на этапе компиляции

36

программ, а не на этапе выполнения, что значительно сокращает время, как на разработку, так и на тестирование программ.

Единый принцип обработки сбоев. Один из самых неприятных моментов Windows-программирования — несогласованный стиль сообщений о сбоях. Одни функции возвращают коды состояний Win32, другие — HRESULT, третьи генерируют исключения. В CLR обо всех сбоях сообщается через исключения, которые позволяют отделить код, необходимый для восстановления после сбоя, от основного алгоритма. Такое разделение облегчает написание, чтение и сопровождение программ. Кроме того, исключения работают в многомодульных и многоязыковых приложениях. И в отличие от кодов состояний и HRESULT исключения нельзя проигнорировать. CLR также предоставляет встроенные средства анализа стека, заметно упрощающие поиск фрагментов, вызывающих сбои.

Безопасность. Традиционные системы безопасности обеспечивают управление доступом на базе учетных записей пользователей. Это проверенная модель, но она подразумевает, что любому коду можно доверять в одинаковой степени. Такое допущение оправданно, когда весь код устанавливается с физических носителей или с доверенных корпоративных серверов. Но по мере увеличения объема мобильного кода, например, Web-сценариев, приложений, загружаемых из Интернета, и вложений, содержащихся в электронной почте, нужен способ контроля поведения приложений. Такой подход реализован в модели безопасности доступа к коду.

Взаимодействие с существующим кодом. Работники из Microsoft

понимают, что разработчики накопили огромный объем кода и компонентов. Переписывание всего этого кода так, чтобы он задействовал все достоинства

.NET Framework значительно замедлило бы переход к этой платформе. Поэтому в .NET Framework реализована полная поддержка доступа к СОМ-компонентам и Win32-функциям в существующих DLL.

Отметим, что язык Managed C++ был специально создан для облегчения перехода и переноса программ из обычного C++ на платформу .NET – он имеет

37

практически тот же самый синтаксис, что и C++, но позволяет использовать все преимущества .NET Framework. Точно также язык J# был придуман специально, чтобы обеспечить переход на .NET с конкурирующей платформы

Java.

И это далеко не полный список преимуществ новой платформы.

В .NET внесено новое языковое средство – атрибуты. С помощью атрибутов мы можем создавать новые виды метаданных (метаданные – данные о данных) и позволять программе анализировать их по своему усмотрению. Например, можно указать, что цвет описываемого класса — зелёный, а цвет его метода MyFunction — синий.

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

GDI+ (System.Drawing и System.Imaging): Функции рисования и работы с изображениями. Включает в себя реализацию классов

GDI+ для .NET;

Windows Forms (System.Windows.Forms): система реализации оконного графического интерфейса. Включает в себя описание окон (forms), визуальных компонентов (controls) и невизуальных компонентов (components).

ASP.NET (System.Web): система для создания веб-приложений при помощи .NET и интернет-сервера Microsoft — Internet Information Server (IIS). Позволяет программистам начать создавать интернетверсии своих настольных программ;

Internet classes (System.Net): компоненты для работы с интернет-

протоколами. Готовые классы для использования HTTP- и почтовых протоколов, а также набор низкоуровневых классов для программирования сокетов;

38

Text processing (System.Text): средства различной обработки текстовых данных, в том числе для преобразования кодировок текста и использования регулярных выражений (regular expressions);

Reflection (System.Reflection): богатая коллекция компонентов для работы с метаданными. Содержит не только средства изучения существующих метаданных, но и добавления новых метаданных в выполняющуюся программу (и даже конструирование программы «на лету»);

Security Services (System.Security): классы для обеспечения безопасности в .NET. Включают в себя как средства проверки и ограничения доступа, так и набор криптографических классов для работы с сильным шифрованием;

ADO.NET (System.Data): средства доступа к различным источникам (в том числе, конечно, и к базам) данных и представления их в виде XML;

XML (System.Xml): богатые средства обработки XML. Можно сказать, что этот формат — основа для всей библиотеки. И для работы с XML в этом пространстве имен существуют десятки вспомогательных классов, решающих задачи разбора и создания XML-файлов, а также сохранения («сериализации») объектов в

формате XML.

Для получения справки по другим классам, входящим в .NET, настоятельно рекомендуем обратиться к документации Microsoft по .NET Framework.

.NET Framework версии 3.0 (первоначально называвшейся WinFX) — это интерфейс программирования приложений, который входит в состав операционной системы Windows Vista. Старый интерфейс Win32 API по-

39

прежнему доступен, но из него не будет прямого доступа ко всей новой функциональности, появившейся в .NET Framework 3.0.

Кроме того, .NET Framework 3.0 включает в себя четыре новых части:

Windows Presentation Foundation (WPF, кодовое имя Avalon) —

новая подсистема интерфейса пользователя и программный интерфейс на основе XML и векторной графики

Windows Communication Foundation (WCF, кодовое имя

Indigo) — сервис-ориентированная система обмена сообщениями, которая позволяет программам взаимодействовать локально или удалённо подобно веб-сервисам

Windows Workflow Foundation (WF) — система визуального декларативного программирования (программист чертит декларативную диаграмму в виде блок-схемы и закладывает в неё требуемую функциональность).

Windows CardSpace (WCS, кодовое имя InfoCard) — технология, которая представляет собой решение для управления идентификацией при работе с Интернетом. WCS — это способ простой и безопасной идентификации пользователей при перемещении между ресурсами Интернета без необходимости повторного ввода имен и паролей.

2.5C# - новый уровень языка C++

С# входит в состав .NET Framework и относится к семье языков с С- подобным синтаксисом, из них его синтаксис наиболее близок к C++ и Java. Язык имеет строгую статическую типизацию, поддерживает полиморфизм, перегрузку операторов, указатели на функции-члены классов, атрибуты, события, свойства, исключения, комментарии в формате XML. Переняв многое от своих предшественников — языков C++, Delphi, Modula и SmallTalk — С#, опираясь на практику их использования, исключает некоторые модели,

40

зарекомендовавшие себя как проблематичные при разработке программных систем. Именно язык C# Microsoft рекомендует для разработки сложных приложений, к которым, бесспорно, относятся САПР-системы.

Предполагается, что при изучении данной дисциплины студенты уже освоили язык C++. Поэтому в данном разделе вкратце рассмотрим только отличия C# от C++ и постараемся понять – чем же он, по мнению Microsoft, лучше C++.

Классы и наследование. Не допускается множественное наследование классов (как и в Java). Для множественного наследования используются интерфейсы. Для перегружаемых методов необходимо явно указывать new и overridden.

Всегда создаётся конструктор по умолчанию, по этому все объекты всегда проинициализированы. К классам относятся даже типы (такие как bool

и int). Деструкторов же не существует вообще (эту функцию выполняет сборщик мусора).

Параметры методов не могут иметь значения по умолчанию.

Не существует глобальных переменных или методов – все определения должны быть членами классов.

Типы данных. Тип bool нельзя преобразовывать в int, он может принимать только значения true или false. Тип long определён как 64 бита.

Для хранения строк используется только стандарт Unicode – когда символы хранятся не одним байтом (как ANSI ASCII), а двумя, что устраняет извечные проблемы отображения текстов на ОС различных языков (злополучные квадраты, вопросы или «абракадабра» вместо букв).

В C# не используются битовые поля.

Указатели. Не используются указатели на функции, вместо них используется механизм делегирования (с помощью функций обратного вызова,

Callback function).

Операторы. В операторе switch после каждого блока case должен быть оператор break. Чтобы добиться прежней функциональности C++ (в

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]