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

(c) Герман Иванов.

Главные "пугала" начинающего программиста в 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#, требуется знать о нем всего три вещи. Во первых то, что он вообще существует в природе. Во вторых то, что он вызывается последовательностью команд:

// Используем Garbage Collector

System.GC.Collect();

System.GC.WaitForPendingFinalizers();

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.

  • Продолжение. Что вам нужно для работы....
  •  

    Ссылки:


    При перепечатке сохранение раздела "Ссылки" обязательно!!!