...
...

Неформальное введение в объектно-ориентированное программирование на платформе .NET Framework 1

Неформальное введение в объектно-ориентированное программирование на платформе .NET Framework

Посвящается Дэвиду С. Платту

Предисловие.
Причины, побудившие меня написать эту серию статей
Тема программирования для Net Framework занимает немалое место в периодических изданиях, предназначенных для программистов. Описанию входящих в ее состав языков посвящено множество книг. Тем не менее, я решил написать свой вариант подобного введения. Причиной этого моего решения является то, что мне так и не удалось найти какого-либо издания, которое я смог бы подсунуть своим друзьям-программистам и сказать при этом: "Посмотрите, это же очень просто, но какие возможности это перед всеми нами открывает!"
Кто-то из мудрых в свое время заметил, что каждому человеку для понимания какого-либо вопроса нужно прочесть всего лишь одну-единственную книгу. Правда, для того, чтобы ее найти, приходится перечитать все остальные.
Для меня самого такой книгой в Net стала "C# и платформа Net" Эндрю Троелсена. Для вас, возможно, ею станет какая-то другая книга. Но для того, чтобы вы вообще начали искать "свою книгу" в море литературы, посвященной Net, вам необходимо сначала дать общее понятие о том, что это вообще за диковинный зверь такой. Иначе вы просто ею и не заинтересуетесь.
Все прочитанные мной книги по этой тематике страдали, на мой взгляд, теми или иными недостатками в подаче материала начинающему программисту. Интересно, а где вы видели опытных NET-программистов? Платформе-то без году неделя! Сейчас, когда я пытаюсь подобрать для вас наиболее удачный образ происходящего, у меня в голове неотступно крутится надоедливый телевизионный рекламный ролик: "Кто может быть звездой среди сыров? Этот слишком жирный… этот слишком постный..." Действительно, именно так и обстоит дело с литературой по данной тематике.

Многие книги страдают излишней легковесностью в подаче материала. Уж поверьте, в моих устах этот упрек заслуживает внимания, если учесть мой собственный стиль изложения мыслей. Вначале в этих книгах долго и муторно, с кучей иллюстраций рассказывается о вещах, которые человек со средними интеллектуальными способностями сам поймет через двадцать минут работы со средой разработки. На каком-то этапе изложения авторы этих книг, видимо, сами осознают, что делают что-то не то, и внезапно с их стороны делается ход конем, и на читателя понеслись тяжелогруженые самосвалы на манер описания Garbage Collector'а или CLR.
Второй тип книг начинается сразу с Garbage Collector'a. И дальше, с редкостной педантичностью, перечисляются все его свойства, методы а также свойства и методы встроенного в NET компилятора его собственного "байт-кода". Такие книги напоминают мне знаменитую речь персонажа "Неуловимых Мстителей". Помните, "Иоанн родил Исаака, Исаак родил Иова..."? Подобная литература хороша как справочник, но пользоваться ею как учебником совершенно невозможно.
Третьи книги концентрируются на частных аспектах какой-либо одной области программирования под Net. Для примера сошлюсь на свой настольный букварь — "Программирование для Microsoft Windows на C#" Чарльза Петцольда. Книга замечательная, язык у автора простой и понятный, книга не перегружена излишними подробностями. Проблема в одном. В ней рассматривается только программирование графического интерфейса с помощью Win Forms. Все остальные вопросы затронуты лишь в той степени, в которой это касается опять-таки программирования Win Forms. А где взять информацию по всему остальному?

Остается пользоваться MSDN. Но MSDN — это справочник, а не учебник. Помимо этого, немногие из наших соотечественников знают английский язык в степени, достаточной для чтения технической литературы.
Вот и получается, что мне нечего дать почитать своим коллегам. Особенно если учесть то обстоятельство, что им приходится изучать совершенно новые для них технологии и языки программирования. Отчаявшись найти подходящую "универсальную книгу для начинающих", я решил... написать ее самостоятельно!
Меня самого в свое время заинтересовал этой платформой весельчак по имени Дэвид С. Платт, написавший разухабистую (другого слова не подберешь) книгу, называвшуюся "Знакомство с Microsoft.NET". Надеюсь, эта моя статья, по предварительным моим расчетам, не менее разухабистая, послужит такой дверью в мир Microsoft.Net для вас самих. Приятного вам путешествия! Поехали!

Главные "пугала" начинающего программиста в Net Framework
CLR, CLS, CTS
Первыми по значимости пугалами Net-программирования для начинающего является троица, состоящая из CLR (Common Language Runtime), CLS (Common Language Specification) и CTS (Common Type System).
Об их устройстве и назначении можно писать целые тома, чем авторы многих книг охотно и пользуются. Вам как будущему программисту Net нужно знать о них на самом деле только одно — все языки программирования под Net Framework работают на едином ядре. Из-за этого обстоятельства они используют общие типы данных, одинаковый набор функций и фактически обладают одинаковыми возможностями.
Пишете ли вы на VB.NET, C#, Jscript или Perl, больше никто вас не упрекнет в том, что вы выбрали "неправильный" или "игрушечный" язык программирования. Используйте тот язык, который для вас наиболее удобен. Вне зависимости от выбранного языка результат по качеству кода будет примерно одинаковым.

Крылатая фраза "Язык определяет то, о чем вы можете мыслить" неверна по отношению к платформе Net. На ней все языки равны, и, более того, вы вольны свободно перемешивать их в рамках одного проекта. Если вам кажется, что этот кусок кода лучше написать на C++, а соседний — на Visual Basic, так и поступайте. Впоследствии можете объединить эти фрагменты в единое целое с помощью С# или вообще воспользовавшись для этого пакетом Perl от ActiveState. Но и это еще не все!
С помощью механизма наследования ООП, который мы рассмотрим ниже, фрагменты кода, написанные на одном языке программирования, могут как бы "перетекать" во фрагменты, написанные на другом языке. Вы начинаете описывать задачу на C#, а заканчиваете на VB.NET.
Программистам на C++ и Delphi, в изумлении поднявшим бровь при виде такого замысловатого определения, поясню, что Net поддерживает перекрестное межъязыковое наследование классов. Класс, написанный на любом языке Net, может послужить основой для другого класса, также написанного на любом другом языке Net. Да, вот еще: специально для этого типа программистов замечу, что под NET есть и С++ (родной от Microsoft), и бета Object Pascal от Borland.
Вот и все премудрости, связанные с этими терминами.

Garbage Collector
Другим орудием главного калибра в лобовых атаках на мозг читателя, как правило, является некая сущность под названием Garbage Collector ("сборщик мусора"). Почти каждый автор, пишущий на тему Net Framework, считает своим долгом посвятить его работе не один десяток страниц. Дополнительный шарм происходящему придает то, что вам как будущему программисту C# требуется знать о нем всего три вещи. Во-первых, то, что он вообще существует в природе. Во-вторых, то, что он вызывается последовательностью команд:
System.GC.Collect();
System.GC.WaitForPendingFi-nalizers();
System.GC.Collect();
В третьих, его следует вызывать после того, как вы создадите в программе сразу много объектов, а потом их все уничтожите. Вот, собственно, и вся нужная вам информация!
Фактически полным аналогом Garbage Collector является привычная любому пользователю Windows Корзина. Точно так же удаленные объекты попадают сначала в нее, некоторое время там болтаются, пока не будут вытеснены в никуда вновь поступающими объектами или же не уничтожатся по прошествии некоторого времени. Точно так же вы вольны в любой момент вручную "вынести" эту корзину. Аналогия практически полная, за исключением одного очень важного исключения. Корзине вы можете объяснить, сколько памяти она должна занимать на диске. Со сборщиком мусора все не так просто.

Как-то я написал несложную программу, которая выводила на экран некий рисунок и позволяла его масштабировать. Через некоторое время я обратил внимание на то, что, если долго двигать картинку взад-вперед с помощью полос скроллинга, программа начинает работать все медленнее и медленнее. Более того, после продолжительного вращения колесика мышки и сам Windows XP начал постепенно "загибаться" под деловитые звуки непрерывного шуршания винчестера. Как оказалось при ближайшем рассмотрении, удаленные объекты просто не уничтожались, по всей видимости, в связи с тем, что с точки зрения сборщика мусора у меня оперативки было просто завались, и торопиться было некуда! Целых 512 Мб плюс xxx Гб своп-файла!!! Принудительный его запуск с помощью вышеуказанных команд сразу решил все проблемы. С другой стороны, если вы не осуществляете массированного создания и удаления объектов, он работает вполне корректно. Поэтому в вопросе ручного запуска сборки мусора необходим разумный баланс, так как с точки зрения быстродействия это довольно медленная операция.
На этой ноте я считаю теоретическую часть темы "сборщика мусора" полностью рассмотренной. Позже по тексту статьи я вам приведу примеры использования механизма сборки мусора в реальном коде.

MSIL
Последнее пугало для начинающего NET-программиста — это MSIL (Microsoft Intermediate Language). Таким термином называется базовый язык Net Framework. Именно в него компилируются все приложения вне зависимости от того, написаны они на VB.NET или на C#. На этой платформе он фактически играет роль ассемблера в обычном Windows-программировании. И подобно тому обстоятельству, что вам вовсе не нужно знать ассемблер для того, чтобы писать программы под Windows, вам также совершенно необязательно разбираться в MSIL для того, чтобы писать программы под NET. С другой стороны, если вам это зачем-то потребуется, вы вполне можете создавать NET-программы прямо на MSIL или декомпилировать созданные вами на высокоуровневых языках приложения NET в MSIL. В комплект Net Framework входит как ассемблер, так и дизассемблер для этого языка.

Итог
Подведем итог. В этой главе мы с вами "изучили" CLR, CLS, CTS, Garbage Collector и MSIL. Пока вы не заинтересуетесь каким-либо аспектом их работы специально, можете смело пропускать в книгах главы, посвященные этим технологиям. Слово "изучили" я взял в кавычки не напрасно. Разумеется, я понимаю, что любой университетский преподаватель просто захлебнулся бы от ярости, услышав столь краткий курс. Тем не менее, я буду настаивать на том, что я вам дал добрые 90% знаний об этих вещах. Тех знаний, которые реально вам понадобятся для создания Net-приложений. Знание же всего остального вам как разработчику Net-приложений нужно примерно так же, как знание кодов команд процессора Intel Pentium IV разработчику на Visual Basic 6.0.

Что вам потребуется для работы...
Минимальный вариант
Итак, вы осознали, что настал момент познакомиться с этой новой технологией, и оглядываетесь вокруг в поисках нужного софта. Не тратьте свое время. Позвольте, я вам сразу ткну пальцем в нужный сайт. Выкачать Net Framework можно совершенно открыто — читай, бесплатно — по адресу http://msdn.microsoft.com/downloads/list/netdevframework.asp?frame=true .

На этой странице вам будет предложено аж четыре варианта загрузки пакетов, из которых нам с вами интересны только два.
1. Microsoft.NET Framework 1.1 Software Development Kit Final Beta.
Это последняя бета-версия пакета, предназначенного для разработчика. Весит она около 150 Мб. В комплект входит куча документации и примеров, а также, разумеется, компиляторы всех .Net-языков от "Майкрософт". Ставится только на Windows NT, Windows 2000 и Windows XP. Мне удавалось устанавливать его и на Windows 98 SE (для этого достаточно запускать вместо setup.exe лежащие рядом msi-пакеты), но добрая половина входящих в пакет приложений отказывалась при этом работать.

2. Microsoft.NET Framework 1.1 Redistributable Final Beta.
Набор, в который входят только компиляторы и базовые библиотеки. Предназначен он, с точки зрения "Майкрософт", для установки на компьютеры заказчиков ваших программ. На самом деле пакет неплохо может послужить и вам самому. Устанавливается он на любые современные версии Windows включая в их число и Windows 98 SE. Весит пакет всего около 20 Мб. В данный момент входит по умолчанию в Microsoft Net Server 2003. Именно этот пакет я вам и порекомендую для самостоятельного выкачивания из Интернет. Имеющиеся в нем программы позволяют создавать полноценные NET-приложения, и, в принципе, его вполне достаточно для первого взгляда на эту технологию.
Выбираете тот из пакетов, который вам больше приглянулся, и выкачиваете к себе на компьютер. Если на вашем компьютере не установлен Internet Explorer 6.0, установите его, или, на худой конец, прогуляйтесь по ссылке: http://msdn.microsoft.com/library/default.asp?url=/downloads/list/dataaccess.asp .
Выкачайте оттуда Microsoft Data Access Component (MDAC). Он необходим для корректной работы Net Framework. На момент написания статьи текущей является версия 2.71, хотя для работы Net Framework вполне достаточно и версии 2.6. Собственно говоря, MDAC той или иной версии входит в обычную поставку всех версий Windows. Его обновляют в момент установки Microsoft Office, SQL Server, Visual Studio 6.0 и Internet Explorer. Возможно, у вас уже имеется необходимая версия пакета. Убедиться в этом вы сможете с помощью следующего несложного скрипта. Откройте блокнот и напишите в нем следующее:

<script language="vbscript">
dim conn
set conn=CreateObject ("ADODB.Connection")
Document.Write " Версия MDAC — " & conn.Version
</script>

Сохраните полученный файл под именем testmdac.hta и щелкните по нему мышкой. Если у вас на экране будет указана версия 2.6 или старше, качать новый MDAC необязательно. Если версия младше 2.6, запускайте свой Getright.
Ну как, теперь подходящая у вас версия? Ну, тогда, собственно, вот и весь минимально необходимый вам набор. Его будет вполне достаточно для работы с теми примерами кода, с которыми вы познакомитесь в моих последующих статьях.

Стандартный вариант
Как вы уже, наверно, сами догадались, "стандартным" вариантом для разработчика NET-приложений я считаю использование им в своей работе пакета Visual Studio.Net. Тем из вас, кто знаком с Visual Studio 6.0, скажу, что по удобству работы "семерка" превосходит ее на голову, поэтому не морщитесь так, как будто я вам лимон предложил пожевать, а просто попробуйте в ней поработать. Анализируя письма читателей, встретившихся с проблемами при ее установке или в последующей работе, я сделал вывод, что большинство из них присущи лишь порезанной пиратами версии. Поэтому давайте я вам опишу, как выглядит правильный дистрибутив Visual Studio.Net (VS70).
"Майкрософт" никогда не выпускала "русской" версии VS70!!! Все диски с подобным названием являются чей-то самодеятельностью. Причем количество глюков, привнесенных подобной локализацией, превосходит то, что может породить самое буйное воображение. Ни в коем случае не связывайтесь с этими дисками.
Правильный дистрибутив, продаваемый на территории России, выглядит так:
Этикетка выдержана в зеленоватых тонах. Надпись на диске гласит: "Microsoft Visual Studio.net Enterpise Architech Final Release". Дистрибутив состоит из 7 дисков. На них находится сама Visual Studio, Net Framework 1.0 SDK, MSDN for Visual Studio Net, Visual Source Safe 6.0d и Microsoft Visio for VS NS_Net Enterprise. Помимо этого один из дисков содержит полный набор всевозможных апдейтов всех версий операционных систем Windows до достаточного для Net.Framework уровня. Там есть и MDAC, и IE6, и огромное количество других современных версий разных компонентов Windows.
Мне так в руки попала вообще довольно любопытная копия. Открыв коробку, я обнаружил внутри "фирменные" диски, выпущенные компанией "TICO Records". Точно на таких же дисках у нас обычно продается MSDN. Складывается ощущение, что это действительно "родные" копии программного обеспечения от "Майкрософт", предназначенные для их рассылки по зарегистрированным подписчикам MSDN. Есть у них такой платный сервис. По всей видимости, пираты сболванили достаточно копий с этого дистрибутива и решили его продать.

Полный вариант
Полный вариант — это "стандартный" вариант плюс дополнительно три диска Microsoft MSDN Library от July 2002. Для начала расскажу, что это вообще такое. "Майкрософт" поддерживает просто огромную онлайн базу данных всевозможных справочных материалов, посвященных разработке программного обеспечения на платформе Windows. Она охватывает все аспекты программирования, которые только могут вам прийти в голову.
Посмотреть, как она выглядит, вы можете в Интернет по адресу http://msdn.microsoft.com. Как вы сами догадываетесь, немногие cмогут постоянно ею пользоваться с помощью Интернет, иначе вся ваша зарплата будет уходить только на оплату диалап-доступа. Более правильным, на мой взгляд, решением является покупка дисков с копией содержимого этого сайта. Именно об этих дисках я и веду речь. Они содержат более 2 Гб плотно упакованной информации в специальной версии сhm-формата. После установки MSDN интегрируется в Visual Studio.Net, и вы можете проводить контекстный поиск, просто установив курсор редактора на непонятный для вас термин или забытую вами функцию и нажав кнопку Ctrl-F1. Внимательные читатели наверняка зададут вопрос: а зачем нам еще один MSDN, ведь один уже входит в Visual Studio? Входит-то он входит, но в старой и неполной версии. Выпущена Visual Studio была в январе 2001 года, с той поры утекло много воды. Да и многие статьи в "родном" MSDN то радуют красной надписью сверху — "это бета-версия страницы", то предлагают сходить в Интернет. Лучше установите более новый и полный MSDN от июля 2002 года. Конечно, если он у вас уже есть, покупать Visual Studio и MSDN сейчас не стоит. Почему? Читайте следующий абзац.

Почему вам не стоит торопиться с покупкой дисков Visual Studio.NET
Ответ прост и краток. Потому, что 23 апреля "Майкрософт" обещала выпустить Visual Studio 2003. Уже сейчас в онлайн-магазине OZON можно приобрести "Microsoft Visual Studio.NET "Everett". Final Beta November 2002, 8 компакт-дисков" за бешеную сумму в 1 (один) рубль плюс доставка. При условии самовывоза стоимость доставки на "Озоне" составляет 10 рублей. Самая дорогая форма оплаты — "срочная курьером на дом" — обходится в 80 рублей. В руки больше одной копии не дают — говорят, дисков мало. Я точно так же, как и вы, сначала отвесил челюсть до пола, а затем прочитал чуть ниже, что это совместная акция "Майкрософт" и OZON.

Состав пакета Everett:
CD1: Visual Studio.NET Prerequisites
CD2: Enterprise Architect CD1
CD3: Enterprise Architect CD2
CD4: MSDN Library for Visual Stu-dio.NET CD1
CD5: MSDN Library for Visual Stu-dio.NET CD2
CD6: MSDN Library for Visual Stu-dio.NET CD3
CD7: VISIO for Enterprise Architect
CD8: Visual SourceSafe 6.0d

Так что ждите скорого пиратского релиза, хотя назвать его в этом случае пиратским рука не поднимается. О работоспособности этой финал-беты ничего сказать не могу, пока в руках ее не держал. Хотя все демонстрации, проводимые на семинаре "Майкрософт" "День разработчика 2003", компилировались именно на ней. Своими глазами видел.

Герман Иванов


© Компьютерная газета

полезные ссылки
Аренда ноутбуков