Статья
Версия для печати
Обсудить на форуме
.NET или Кому это надо?


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

C. Это сам по себе очень красивый язык, но и в нем есть некоторые неудобства. Начнем с того, что он достаточно непрост в изучении. Ведь в C программист должен сам управлять памятью и указателями, что для начинающего весьма непросто. Если же Вы опытный программист, то возникает сложность с отладкой кода: попробуй найди ошибку в программе, которая напрямую вызывает тысячи API функций! Плюс ко всему недостаточные возможности по использованию объектно-ориентированного программирования.

C++/MFC. Очень мощная система, но опять же встает вопрос об обучении. Легче язык не стал, что многих начинающих просто отпугивает. И они переходят на Бейсик. Но о нем чуть ниже. Безусловный шаг вперед - это возможность использования преимуществ объектно-ориентированного программирования (инкапсуляция, наследование, полиморфизм). Однако MFC - это всего лишь надстройка над WinAPI, так что программисту все равно приходится зачастую разбираться в сложном коде, откуда вероятность ошибок существенно возрастает.

Visual Basic. Исторически сложилось, что этот язык пользуется у программистов дурной славой. И в общем-то это правильно. Basic очень прост. Сначала это привлекает, но при ближайшем рассмотрении... За простоту приходится расплачиваться возможностями языка. Главное, что Basic - это не объектно-ориентированный язык (хотя так думают очень многие программисты, пишущие на Basic), а язык "для работы с объектами". Не поддерживаются классическое наследование, многопоточные приложения и много-много чего другого.

Java. Это полностью объектно-ориентированный язык с очень элегантными синтаксическими конструкциями. Программировать на нем не только эффективно, но еще и эстетически приятно. Однако и здесь не избежать некоторых проблем. Главная из них - отсутствие межъязыкового взаимодействия в полном смысле этого слова. Да, существует такая вещь, как JNI (Java Native Interface). Этот интерфейс позволяет программам, написанным на другом языке программирования, взаимодействовать с Java. Но и здесь есть некоторые ограничения. Главный недостаток JNI состоит в том, что при его использовании теряется суть идеи WORA (Write Once, Run Anywhere), поскольку любой native-код прочно связывает Java-приложение с какой-либо платформой. К тому же JNI - это набор API только для C/C++, остальные же языки остаются в стороне. Маленькое лирическое отступление: на сайте java.sun.com случайно прочитал такое высказывание: By writing programs using the JNI, you ensure that your code is completely portable across all platforms. Напомню, при использовании native-кода кроссплатформенность теряется, в свете чего не совсем понятно последнее утверждение приведенной выше цитаты.

COM (Microsoft Component Object Model). Эта технология позволяет частично скрыть недостатки, связанные с переносимостью кода. Безусловное преимущество COM - к COM-объектам можно обращаться из любых других языков программирования. Казалось бы, проблема решена! Ан нет. В COM не реализовано наследование, так что каждый компонент "мертв", от него не может произойти ни один класс. Напрашивается ответ: "Так напишите же новый класс!" И вот теперь начинаются настоящие неудобства. Каждый компонент COM - как ящик Пандоры. Его устройство довольно сложно и на обучение написанию собственных COM-объектов уйдет несколько месяцев.
Интернет-программирование. Вы скажите: "А в чем проблема? Ведь каждый язык сделан под свои конкретные нужды и отлично исполняет работу в своей области! Зачем что-то менять?" Все правильно, если забыть о такой мелочи, как Интернет. Современный Интернет-программист должен знать ASP, HTML, XML, JavaScript, VBScript, COM, COM+, ADO и т.д. И здесь опять-таки возникает проблема взаимодействия между языками. И проблема довольно серьезная. Ведь тип данных int это не то же самое, int в C, который в свою очередь отличается от integer и Visual Basic. И как же быть?

Решение .NET
Что же позволяет .NET?
1. Полное взаимодействие с существующим кодом. Кстати, файлы .NET отлично уживаются с компонентами COM.
2. Полное межъязыковое взаимодействие. Поддержка межъязыкового наследования, отладки и обработки исключений.
3. Общая исполняемая среда. Неважно, на каком языке создана программа - среда выполнения одна и та же. Главное преимущество - общий набор типов данных.
4. Библиотека базовых классов. Она обеспечивает сокрытие вызовов WinAPI и, соответственно, избавление от многих тонких и неприятных моментов.
5. Упрощение развертывания приложений. При развертывании больше нет необходимости редактировать реестр.

Детально возможности .NET будут рассмотрены позднее.

Автор: Archangel
Версия для печати
Обсудить на форуме