- •Лекции по курсу "Технология программирования" (1-й семестр) Оглавление
- •Технология .Net Предыдущее состояние дел.
- •Главные компоненты платформы .Net (clr, cts и cls)
- •Общеязыковая среда выполнения (clr)
- •О бщая система типов и общеязыковые спецификации (cts и cls)
- •Библиотека базовых классов
- •Роль языка с#
- •Компоновочные блоки
- •Роль метаданных типов .Net
- •Роль манифеста компоновочного блока
- •Общая система типов.
- •Объектно-ориентированное программирование
- •Главные элементы объектно-ориентированного подхода
- •Дополнительные элементы ооп
- •Принципы объектно-ориентированного программирования.
- •Классы Инкапсуляция
- •Объект (экземпляр класса).
- •Ключевое слово this
- •Отношения между объектами.
- •Основные отличительные особенности класса
- •Спецификаторы доступа
- •Состав класса
- •Поля класса
- •Доступ к полям
- •Статические и экземплярные переменные
- •Методы (функции-члены класса)
- •Переменное число параметров метода
- •Статические методы
- •Конструкторы
- •Закрытые конструкторы или классы без экземпляров
- •Статические конструкторы.
- •Деструкторы
- •Абстрактные методы и классы.
- •Свойства
- •Индексаторы
- •Статические классы
- •Частичные классы
- •Рекомендации по программированию
- •Наследование Понятие наследования в программировании
- •Типы наследования
- •Наследование реализации
- •Определение наследующих классов
- •Уровень доступа protected и internal
- •Ссылка на объект базового класса
- •Протоклассы
- •Предотвращение наследования с помощью ключевого слова sealed.
- •Отношения между классами
- •Абстрактные классы.
- •Класс object
- •Функциональные замыкания
- •Разработка функциональных замыканий с помощью наследования
- •Разработка функциональных замыканий с помощью экземпляров класса
- •Заключение.
- •Полиморфизм
- •Полиморфизм наследующих классов.
- •Переопределение методов родительского класса. Раннее связывание.
- •Виртуальные методы и их переопределение.
- •Как вызывают виртуальные методы
- •Виртуальные функции и принцип полиморфизма
- •Перегрузка.
- •Перегруженные конструкторы
- •Рекомендации программисту.
Технология .Net Предыдущее состояние дел.
Подход Си/Win32API. Традиционно разработка программного обеспечения для операционных систем семейства Windows предполагает использование языка программирования Си в сочетании с Windows API (интерфейс программирования приложений). Несмотря на то, что в рамках такого подхода было разработано очень много вполне успешных приложений, процесс их создания непосредственно с помощью API оказывается очень трудоемким делом.
Первая проблема заключается в том, что Си является очень лаконичным языком. Поэтому разработчики программ вынуждены "вручную" управлять памятью, используя не совсем удачную арифметику указателей и сложные для понимания синтаксические конструкции. К тому же, поскольку Си является структурным языком программирования, то ему явно не хватает преимуществ, обеспечиваемых объектно-ориентированным подходом.
Подход С++/MFC. Огромным шагом вперед явился переход к применению языка программирования С++, который можно рассматривать как объектно-ориентированную надстройку над Си. Поэтому, несмотря на то, что С++ уже способен реализовывать основные преимущества объектно-ориентированного программирования (инкапсуляцию, наследование, полиморфизм), но он все еще продолжает сохранять многие недостатки заимствованные из языка Си. Несмотря на это, существует множество вспомогательных средств для программирования на С++. Например, MFC (библиотека базовых классов) предоставляет разработчикам наборы готовых С++ классов, которые упрощают создание Win32 API приложений. Несмотря на очевидную пользу MFC и других инструментальных средств, программирование на языке С++ продолжает оставаться достаточно трудной задачей. В том числе и из-за "тяжелой наследственности", обусловленной связью с языком Си.
Подход Visual Basic 6.0. Visual Basic 6.0 (VB6) стал популярным благодаря тому, что он дает возможность строить сложные интерфейсы пользователя, библиотеки программного кода (например, СОМ-серверы) и системы доступа к данным, затрачивая минимум усилий. В сравнении с MFC, VB6 еще глубже скрывает от разработчика сложность Win32 API, используя для этого целый ряд интегрированных серверов, внутренних типов данных классов, и специфических для VB6 функций.
Главным недостатком является то, что он является скорее "объектно-осведомленным языком", а не полностью объектно-ориентированным.Так, например, он не позволяет реализовать классического наследования. Кроме того, он не позволяет строить многопоточные приложения.
Подход Java/J2EE. Язык программирования Java является объектно-ориентированным и имеет синтаксические корни в С++. Поддержка межплатформенной независимости - далеко не единственное преимущество Java. Язык Java избавлен от многих синтаксических несообразностей С++, поскольку его платформа предлагает программисту большое количество встроенных пакетов, содержащих различные определения типов. С помощью этих типов можно строить приложения со сложным интерфейсом пользователя и обеспечивать связь с базами данных, обмен сообщениями или работу клиентов в Web.
Потенциальной проблемой Java является то, что его использование в цикле разработки обычно означает использование Java и для взаимодействия между клиентом и сервером. Поэтому Java не позволяет возлагать большие надежды на возможности языковой интеграции, так как это противоречит декларируемой цели Java как единого языка программирования для решения всех задач.
В чистом виде Java просто не подходит для приложений, использующих графику или сложные вычисления (низкая скорость работы). Пока Java не обеспечивает более широкие возможности доступа к "чужеродным" API. Таким образом, истинная интеграция различных языков оказывается практически невозможной.
Подход СОМ. СОМ (Модель компонентных объектов) представляет собой архитектуру, заявившую следующее: если класс будет построен в соответствии с правилами СОМ, то получится блок двоичного кода, который можно будет многократно использовать.
Преимущество двоичного СОМ-сервера в том, что способ доступа к нему уже не зависит от языка. Однако, независимость СОМ от языка несколько ограничена. Например, нет возможности получить новый СОМ-класс из уже существующего, поскольку СОМ не предполагает поддержки классического наследования. Вместо этого, для использования типов СОМ-класса приходится использовать несколько неуклюжее отношение "обладания".
Другим преимуществом СОМ является прозрачность дислокации. Используя такие конструкции, как идентификаторы приложения (AppID), "заглушки" (stub) и "заместители" (proxy) в среде выполнения СОМ, программист может избежать непосредственного обращения к сокетам, RPC-вызовам и другим низкоуровневым элементам.
Хотя СОМ и можно считать очень успешной объектной моделью, внутренне она очень сложна. С целью упрощения процесса разработки бинарных СОМ-объектов было создано множество каркасов разработки приложений с поддержкой СОМ. Например, библиотека ATL (библиотека активных шаблонов), которая обеспечивает еще одно множество С++ классов, шаблонов и макросов, упрощающих создание СОМ-типов.
Многие другие языки в значительной степени скрывают инфраструктуру СОМ от программиста. Однако, поддержки самого языка оказывается недостаточно для того, чтобы скрыть всю сложность СОМ.
Подход Windows DNA. С появлением Internet фирма Microsoft добавила в свое семейство операционных систем и других продуктов множество новых возможностей. В результате появилась совместимая с СОМ архитектура распределенных сетевых приложений (Windows DNA). Однако создание Web-приложений в рамках этой архитектуры, оказалось довольно непростым делом.
Некоторая доля этой сложности вытекает из того факта, что Windows DNA требует использования множества технологий и языков (ASP, HTML, XML, Java, COM, ADO). Одной из проблем является то, что с синтаксической точки зрения многие из этих технологий совершенно не связаны между собой. В результате получилась чрезвычайно запутанная смесь технологий. При этом каждый язык и каждая технология имеют свои собственные (уникальные) системы типов.
Решение технологии .NET.
Технология .NET является достаточно радикальной "силовой" попыткой сделать работу программиста легче. Решение, предложенное технологией .NET, предполагает "изменить все". Технология .NET – это совершенно новая модель для создания систем как в семействе операционных систем Windows, так и множестве других операционных систем (ОС), таких как Mac OS X и различные варианты Unix\Linux.
Технология .NET предоставляет следующие базовые возможности:
Полноценная возможность взаимодействия с существующим программным кодом. Существующие бинарные СОМ-объекты могут комбинироваться (взаимодействовать) с более новыми бинарными .NET-объектами и наоборот. Кроме того, сервисы PInvoke (сервисы вызова платформ) позволяют вызывать библиотеки на базе Си (включая API ОС) непосредственно из программного кода .NET.
Полная и тотальная интеграция языков. В отличие от СОМ, платформа .NET поддерживает межъязыковое наследование, межъязыковую обработку исключений и межъязыковую отладку.
Общий механизм выполнения программ для всех языков с поддержкой .NET. Одной из особенностей этого механизма является четкий набор типов, "понятных" каждому языку.
Библиотека базовых классов. Эта библиотека позволяет избежать сложностей прямого обращения к API и предлагает согласованную объектную модель, используемую всеми языками с поддержкой с .NET.
Отсутствие детализации СОМ. В собственном бинарном .NET-объекте не будет места для IClassFactory, IUnknown, IDispatch, IDL-кода и "злобных" типов данных наподобие VARIANT (BSTR, SAFEARRAY и т.д.)
Упрощенная модель инсталляции. Согласно спецификации .NET, нет необходимости регистрировать соответствующую бинарную единицу в реестре системы. К тому же .NET вполне допускает существование множества версий одной *.dll на одной машине.
На основе перечисленных достоинств можно сделать вывод о том, что платформа .NET не имеет ничего общего с СОМ. Единственным способом взаимодействия типов .NET и СОМ оказывается использование возможностей слоя взаимодействия.
В результате технология .NET позволяет программистам:
-Разрабатывать приложения на любом (или почти на любом) языке программирования.
-Обеспечить независимость своих приложений от особенностей разных операционных систем, а также от особенностей архитектуры и системы команд процессора.
-универсальный доступ к данным.
-защиту информации (типов).
-упростить процесс проектирования и отладки сложных приложений
-Упростить разработку распределенных приложений
-Повысить эффективность процесса разработки Интернет-приложений
