Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛекцияC#1.doc
Скачиваний:
24
Добавлен:
13.08.2019
Размер:
75.26 Кб
Скачать

11

Лекция 1

1. Введение

1.1. Роль C# и .NET

Язык С# и связанная с ним платформа .NET (.NET Framework) относятся к наиболее важным новым технологиям для разработчиков ПО за последние годы. Концепция .NET предложила новую среду, в которой можно раз­рабатывать почти любое приложение для Windows. В свою очередь, С# – новый язык программирования, созданный специально для работы с платформой .NET. С помощью С# можно создать традиционное оконное приложение Windows, динамическую web-страницу, компонент распределенного приложения, компонент доступа к базе данных и т. д., на основе единой среды разработки.

За последние 15-20 лет опе­рационные системы Windows прошли путь от Windows 3.1 (выпущен­ной в 1992 г.; это еще не операционная система, а оболочка на DOS) до Win­dows 7. Несмотря на существенные отличия более поздних систем от Windows 3.1 (Windows 2000 уже имела новое ядро), процесс классического про­граммирования для всех этих систем чрезвычайно схож. Все они имеют в своей основе хорошо известный Windows API, к которому по мере появления новых версий добавлялось большое количество но­вых функций, т.е. в целом это был процесс расширения и развития, а не замены API.

То же можно сказать и о других технологиях, которые сегодня еще используются для разработки Windows-приложений. Так, была технология OLE, дающая метод связи различных приложений. На ее основе была создана СОМ, затем DCOM (распределенная СОМ) и, наконец, СОМ+ – сложная технология, обеспечивающая взаимодействие практически всех компонентов в Windows.

Эти и многие другие примеры показывают эволюционное развитие – расширение существующих технологий. Одной из главных была цель обес­печения обратной совместимости с уже имеющимися продуктами. Обратная совместимость, являясь одной из наиболее сильных сторон семейства Windows, в то же время обладает и огромным недостатком. Каждый раз, когда какая-нибудь технология расширяется, она становится более сложной. В результате появилось много областей программирования, написание кода для которых существенно усложнено обратной совместимостью с технологиями 15-летней давности.

Это не могло продолжаться слишком долго. Наступил момент, когда возникла необхо­димость начать с нуля. Такой отправной точкой можно считать С# и .NET, которые позволяют разработчику легко создавать современные программные продукты широчайшего спектра, не оглядываясь на устаревшие технологии. Если говорить упрощенно, то .NET представляет собой новую платформу, новый API для программирования в Win­dows. С# – новый язык для работы с этой платформой, позволяющий использовать все достижения прогресса сред разработки и принципов объектно-ориентированного программирования в течение последних 20 лет.

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

Следует отметить, что в определенной мере прообразом C# + .NET послужила система Delphi, сделавшая большой шаг в сторону облегчения программирования Windows-приложений без существенных ограничений возможностей разработчика. Недаром одним из основных идеологов C# является А. Хейлсберг, ранее игравший главную роль в создании Delphi 1–2.

Чтобы писать программы для платформы .NET, необязательно изучать С#. Microsoft модифицировала для .NET язык C++ и произвела значительные изменения в VB, который превратился в более мощный язык VB.NET. Множество языков для .NET предлагается также сторонними разработчиками. В частности, Delphi 8 была целиком ориентирована на платформу .NET. Особенность C# в том, что это – новый язык, созданный специально и исключительно для .NET Framework.

Платформа .NET аналогично Windows представляет собой одновременно два качества. Во-первых, это биб­лиотека, не меньшая, чем Windows API. Ее можно использовать для вызова тех функций, которые традиционно выполнялись операционной системой Windows: ото­бражение окон, проверка удостоверений безопасности, вызов основных служб операционной системы, создание потоков и т. д. Кроме того, предлагается много новых возможностей: доступ к базам данных, соединение с Интернетом, пре­доставление служб Web и т. д. В отличие от предыдущего Windows API, который содержит огромный набор функций языка C, библиотека .NET (называемая также библиотекой базовых классов .NET) является полностью объектно-ориентиро­ванной. Она выглядит как набор классов, каждый из которых реализует определенный набор методов.

Во-вторых, платформа .NET – это среда, в которой выполняется программа (называется общей средой ис­полнения – CLR). Она содержит программное обеспечение для выполнения пользовательских программ. Когда исполняется .NET-код (обычно применяется термин управляемый код – managed code), платформа .NET запус­кает программы, управляет потоками, предоставляет различные вспомогательные службы и фактически является той средой, которую «видит» вокруг себя исполняемая программа. Выполняемые в .NET программы представлены промежуточным кодом на языке MSIL (Microsoft Intermediate Language), являющемся языком ассемблера некоторой виртуальной машины. Программы на MSIL переводятся в машинный язык реального процессора лишь непосредственно перед выполнением c помощью так называемой компиляции времени выполнения (Just-In-Time compilation). Указанная виртуальная

машина является объектно-ориентированной: структура MSIL отражает разбиение кода на классы, методы и т. п.

Таким образом, можно рассматривать .NET как среду, обеспечивающую некоторый уровень абстракции от операционной системы. Если это необходимо (например, для увеличения производительности), то в ряде случаев можно отказаться от преимуществ .NET и напрямую использовать Windows API. Это можно делать с помощью С# или управляемого кода, созданного на других .NET-языках.

Резюме

  • Платформа .NET и связанный с ней язык C# позволяют разрабатывать приложения Windows различных типов в единой среде разработки.

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

  • Наряду с C# существует множество других языков разработки для .NET; C# является новым языком, созданным специально для .NET.

  • Роль API в .NET играет объектно-ориентированная библиотека базовых классов, являющаяся основой для всех языков программирования .NET.

  • .NET является также исполняющей средой для программ, предварительно переведенных в код MSIL.

1.2. Преимущества .Net

Кратко рассмотрим основные преимущества платформы .NET.

Объектно-ориентированное программирование.

Старый Windows API был написан на C и является целиком процедурным. Напротив, .NET и С# пол­ностью основаны на принципах ООП. Идеология ООП реализована на уровне исполняющей среды.

Хороший дизайн.

Это свойство субъективно, однако Microsoft в течение долгого времени обсуждала с разработчиками структуру классов .NET и извлекла уроки из накопленных за десятилетие ошибок прошлого. В результате библиотека базовых клас­сов .NET разработана с нуля и сделана интуитивно ясной. В большинстве случаев достаточно взглянуть на объявление метода, чтобы понять, что он делает и как его использовать. Этого нельзя сказать о Windows API, функции которого не всегда понятны. Они часто требуют передачи пара­метров, необходимых не для выполнения цели данной функции, а для внутренней работы API или обеспечения обратной совместимости.

Языковая независимость.

С применением платформы .NET все языки, включая VB.NET, С# и управляемый C++, компилируются в общий промежуточный язык MSIL. Это означает, что языки совместимы на новом уровне. Например, в отлад­чике можно перешагивать с кода C++ на код С# или код VB.NET без ка­ких-либо проблем. Более того, эти языки используют теперь общую среду разработки.

Языковая независимость достигнута добавлением в каждый язык свойств, хорошо зарекомендовавших себя в других языках. VB.NET теперь содержит классы и наследование подобно C++. Если для программирова­ния используется C++, то среда разработки поддерживает элементы управления drag-and-drop точно так же, как это было реализовано в VB.

Однако некоторые важные особенности языка C++ (множественное наследование, шаблоны) не поддерживаются в языках .NET и соответственно не могут использоваться в управляемом коде. В C# со второй версии появились generics – аналоги шаблонов.

Улучшенная поддержка динамических web-страниц.

До появления .NET стандартным способом размещения динамических страниц на Windows-серверах являлось использование технологии ASP. Это гибкое средство, но оно неэффективно из-за применения интерпретирующихся языков сценариев, а отсутст­вие объектно-ориентированной разработки часто приводит к созданию нечитаемого кода. Платформа .NET предлагает встроенную поддержку web-страниц с использовани­ем новой технологии – ASP.NET. При помощи ASP.NET код в web-страницах компили­руется и может быть написан на любом языке высокого уровня, предназначенном для .NET, например, на С# или VB.NET. Это повышает эффективность обработки запросов, по­ступающих от браузеров. Языки сценариев для работы на стороне сервера теперь счи­таются устаревшими (хотя их применение допускается). В то же время клиентский JScript для браузеров используется по-прежнему. Большое число других возможностей ASP.NET позволяет создавать страницы с более четким разделением пользовательского интерфейса и фоновой обработки данных. Таким образом, разработчик может сконцентрировать усилия на биз­нес-логике web-страниц, остальное сделает ASP.NET.

Доступ к данным.

Доступ к данным, который был добавлен в Windows позже, является теперь одной из основных составляющих библиотеки базовых классов. Набор компонентов .NET, известный как ADO.NET, обеспечивает эффективный доступ к реляционным базам данных и большо­му числу источников данных. Имеются также компоненты для доступа к файловой систе­ме и каталогам. В .NET встроена поддержка XML, что позволяет работать с данными, портированными с/на нe-Windows платформы.

Отказ oт применения DLL.

В свое время концепция DLL (dynamic linked libraries) стала большим достижением в плане экономии дискового пространства и памяти, а также позволила различным процессам совместно использовать один и тот же код. Однако по мере работы с DLL выяснилось, что их применение приводит к проблемам из-за отсутствия системы контроля над версиями. Бо­лее новая версия DLL, как правило, затирает собой предыдущую. Часто новая версия оказывается не полностью совместимой с предыдущей, в результате чего некоторые программы, использующие старую DLL, больше не работают на данной машине. Такие ошибки трудно отыскать. Платформа .NET полностью изменила способ, с помощью которого некоторый код совместно используется приложениями. Введена концепция сборки (assembly), заменившая традиционную DLL. Сборки имеют встроенные средства контроля версий, а разные версии сборок могут со­существовать одновременно.

Улучшенная безопасность.

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

Простая установка приложений.

Начиная с Windows 95, СОМ-объекты должны были регистрироваться в реестре. Эта практика позволяет централизованно хранить информацию об установленных в системе программах. Однако, в результате использования системой СОМ-объектов библиотек типов, появляются дополнительные проблемы, так как информация об одном объекте хранится в нескольких местах. Например, код некоторого компонента может находиться в файле ЕХЕ или DLL; описания методов и интерфейсов могут храниться где-то еще в библиотеке типов; a GUID и т. п. будут описаны в реестре.

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

Мож­но также различать общие сборки, доступные для других приложений, и частные сборки, которые могут использоваться только установившим их приложением. Это решает еще одну проблему СОМ – проблему того, что реестр постепенно забива­ется информацией о тысячах компонентов, не предназначенных для совместного использования.

Поддержка Web-сервисов.

Web-сервисы, по признанию многих высококвалифицированных специалистов, будут приобретать все возрастающее значение в течение последующих лет. Идея состоит в том, что различные методы объекта могут быть вызваны по Интернету при помощи стандартных web-протоколов. Это придает новый смысл технологии распределенных приложений. Различные компании путем разработки указанных Web-методов смогут предоставлять различные услуги: прогнозы погоды, состоя­ния счетов, проверки кредитных карт и т. д., а клиенты смогут вы­зывать эти методы по Интернету с помощью собственного программного обеспечения. До появления .NET Microsoft уже обеспечивала ограниченную поддержку web-сервисов посред­ством инструментария SOAP (Simple Object Access Protocol). Платформа .NET имеет встроенную поддержку разработки web-сервисов, и создавать их теперь так же легко, как и любые другие типы приложений.

C#

Одним из важнейших преимуществ .NET является наличие самого языка C#. Это новый хорошо продуманный язык, совместимый с новыми технологиями и не отягощенный проблемами обратной совместимости. В нем устранен ряд недостатков, имеющихся в существующих языках про­граммирования. Чтобы понять его преимущества, нужно изучить язык C#. Здесь пока лишь кратко перечислим его особенности.

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

  • Хорошо определенный набор основных типов; все типы ведут себя как объекты.

  • Встроенная поддержка автоматической генерации XML-документации.

  • Автоматическое освобождение динамически распределенной памяти.

  • Возможность отметки классов и методов атрибутами, определяемыми пользова­телем; эти атрибуты могут быть прочитаны во время выполнения.

  • Полный доступ к библиотеке базовых классов .NET, а также легкий доступ к Windows API, когда это необходимо.

  • Язык раз­работан таким образом, что практически всегда можно обойтись без указателей и прямого доступа к памяти. Однако при необходимости они могут быть использованы.

  • Поддержка свойств и событий в стиле VB или Delphi.

  • Возможность использования С# для разработки динамических web-страниц ASP.NET.

  • Простота в изучении.

Отметим также некоторые ограничения С# и .NET. Эта платформа не предназначена для разработки наиболее критичных по времени и высокопроизводитель­ных программ, т. к. целевым при компиляции C# (и других .NET – языков) является промежуточный MSIL, а не машинный язык. Неуправляемый C++ остается в этой области более предпочтительным. В С# отсутствуют некоторые ключевые моменты, необходимые для создания высокопроизводительных приложений, в частно­сти, подставляемые функции и деструкторы, выполнение которых гарантируется в опре­деленных точках кода. Однако число приложений, попадающих в эту категорию, невелико.

В то же время Microsoft утверждает, что JIT-компиляция имеет свои преимущества в плане повышения производительности. Поскольку компиляция происходит непосредственно перед выполнением, то при генерации кода могут быть учтены оптимизирующие особенности конкретного процессора.