Принципы объектно-ориентированного программирования

проститутки Санкт-Петербург viagra|canadian pharmacy

Architecture Net или что такое Microsoft.NET?

Новая технология .NET, предложенная компанией Microsoft, отражает видение этой компанией приложений в эпоху Internet. Технология .NET обладает улучшенной функциональной совместимостью, в основе которой лежит использование открытых стандартов Internet. Кроме того, она повышает устойчивость классического пользовательского интерфейса операционной системы Windows — рабочего стола. Разработчикам программного обеспечения технология .NET предоставляет новую программную платформу и великолепные инструментальные средства разработки, в которых основную роль играет язык XML (extensible Markup Language — расширяемый язык разметки).
Microsoft .NET — платформа, построенная на верхнем слое операционной системы. Технология .NET явилась главным объектом инвестиций компании Microsoft. С момента начала работ над этой технологией и до момента ее публичного анонсирования прошло три года. Несомненно, на развитие технологии .NET оказали влияние другие технологические достижения, в частности расширяемый язык разметки XML, платформа Java™, a также модель компонентных объектов Microsoft (Component Object Model — COM).
Платформа Microsoft .NET предоставляет:
  • устойчивую общеязыковую среду выполнения CLR (Common Language Runtime), которая входит в состав данной платформы;
  • средства разработки приложений на любом из многих языков программирования, поддерживаемых платформой .NET;
  • лежащую в основе открытой модели программирования огромную библиотеку классов .NET Framework. Эти классы содержат многократно используемый код. Они доступны в любом языке программирования, поддерживаемом платформой .NET;
  • поддержку сетевой инфраструктуры, построенной на верхнем слое стандартов Internet, вследствие чего обеспечивается высокий уровень взаимодействия между приложениями;
  • поддержку нового промышленного стандарта, а именно технологии Web-служб. Технология Web-служб предоставляет новый механизм создания распределенных приложений. По сути, она является распространением технологии создания приложений на базе компонентов и на сферу Internet;
  • модель безопасности, которую программисты могут легко использовать в своих приложениях;
  • мощные инструментальные средства разработки.


Глава 1. Что такое Microsoft.NET?
Новая технология .NET, предложенная компанией Microsoft, отражает видение этой компанией приложений в эпоху Internet. Технология .NET обладает улучшенной функциональной совместимостью, в основе которой лежит использование открытых стандартов Internet. Кроме того, она повышает устойчивость классического пользовательского интерфейса операционной системы Windows — рабочего стола. Разработчикам программного обеспечения технология .NET предоставляет новую программную платформу и великолепные инструментальные средства разработки, в которых основную роль играет язык XML (extensible Markup Language — расширяемый язык разметки). Microsoft .NET — платформа, построенная на верхнем слое операционной системы.

Что такое Microsoft .NET?
Microsoft и Web
Приложения в эпоху Internet
Web-службы
ASP.NET
Открытые стандарты и возможность взаимодействия (функциональная совместимость)
Протоколы обмена
Windows на рабочем столе
Проблемы с Windows
Стеклянный дом и тонкие клиенты
Устойчивая Windows
Новая платформа программирования
Каркас NET Framework
Общеязыковая среда выполнения CLR (Common Language Runtime)
Разработка приложений на разных языках
Инструментальные средства разработки
Важность инструментальных средств разработки
Роль языка XML
Факторы, определяющие успех Web-служб
Резюме

Глава 2. Основы технологии .NET
Платформа .NET решает многие проблемы, которые досаждали программистам в прошлом. К их числу относятся проблемы, связанные с развертыванием приложений, управлением версиями, утечкой памяти, а также проблемы безопасности. Платформа .NET позволяет разрабатывать мощные, независимые от языка программирования, настольные приложения и масштабируемые (расширяемые) Web-службы, построенные на базе новой мощной полнофункциональной библиотеки классов .NET Framework.

Основы технологии .NET
Проблемы, связанные с разработкой Windows-приложений
Приложения будущего
Обзор платформы .NET
Волшебство метаданных
Библиотека классов .NET Framework
Программирование на основе интерфейсов
Объектом является все
Общая система типов
ILDASM — дисассемблер промежуточного языка Microsoft
Возможность взаимодействия языков, или функциональная совместимость
Управляемый код
Сборки
JIТ-компиляция, или оперативная компиляция
Производительность
Резюме

Глава 3. Программирование на управляемом C++
В каждой новой версии Visual C++ компания Microsoft расширяет возможности языка во многих направлениях. Visual C++.NET не является исключением, поддерживая множество новых возможностей, для использования которых введены новые ключевые слова и атрибуты. В частности, появилась поддержка разработки кода на управляемом C++ для платформы .NET. В этой главе представлены несколько примеров, которые помогут читателю познакомиться с основными классами .NET Framework и приступить к самостоятельному написанию кода на управляемом C++. На примере использования класса Console (Консоль) продемонстрированы стандартные ввод и вывод, а кроме того, рассмотрены необычайно полезные классы String (Строка) и Array (Массив). Далее представлена программа управления системой бронирования гостиничных номеров, к которой мы еще не раз вернемся в следующих главах.

Программирование на управляемом C++
Место C++ в мире .NET
Использование расширений управляемого C++
Ваша первая программа на управляемом C++.NET
Программа HelloWorld (Привет, мир)
Директива #using и оператор using
Стандартный ввод-вывод
Класс System:: string (Система::Строка)
Класс System: :Array (Система::МAССИВ)
Программа Hotel (Гостиница)
Отображение C++ на спецификацию общего (универсального) языка (CLS) и .NET Framework
Типы данных C++ и общеязыковая среда выполнения CLR
Типы данных C++ и .NET Framework
Программирование на C++ для платформы .NET
Управляемые и неуправляемые типы
Управление сборкой мусора
Типовая безопасность
Типы значений
Абстрактные типы
Интерфейсы
Упаковка и распаковка примитивных типов данных
Делегаты
События
Свойства
Закрепление управляемых объектов
Конечные классы
Управляемое приведение типов
Определение ключевых слов в качестве идентификаторов
Обработка исключений
Атрибуты C++
Резюме

Глава 4. Объектно-ориентированное программирование на управляемом C++
В предыдущеи главе были наложены основы программирования на управляемом C++. Учитывая ваш богатый опыт работы с C++ бьпо охвачено много материала В этой паве мы изменим темп вместо того, чтобы осваивать новый мат ерши потратим ботьше времени на углубление понимания объектно ориентированной стороны управляемого С++ в частности, абстракции и наследования Сначала мы повторим основы объектно-ориентированного программирования, потом рассмотрим пример Бюро путешествии Acme. Этот пример будет разрабатываться в последующих павах по мере изучения татформы NET Мы рассмотрим, какие абстракции подходят для того чтобы реализовать систему резервирования ресурсов, и реализуем систему резервирования (бронирования) гостиничных номеров В абстрактные базовые классы мы поместим повторно иелользхемыи код с помощью которого можно легко реализовать и другие системы резервирования Вы увидите что правильное использование абстракции — ключ к такой реализации.

Объектно-ориентированное программирование на управляемом C++
Обзор основных понятий объектно-ориентированного программирования
Объекты
Классы
Полиморфизм
Проект: "Бюро путешествий Acme"
Проектирование абстракций
Логика базовых классов
Проектирование инкапсуляции
Наследование в управляемом C++
Основные принципы наследования
Реализация примера "Бюро путешествий Acme"
Запуск программы примера
Класс HotelReservation
Класс HotelBroker
Класс Customers (Клиенты)
Пространство имен
Класс TestHotel
Резюме

Глава 5. Управляемый C++ в .NET Framework
Язык C++ — мощный инструмент разработки программ, оказавший огромное влияние на развитие вычислительной науки. Управляемые (managed) расширения от Microsoft добавили в язык C++ целый новый мир — мир .NET. Для того чтобы полностью использовать возможности Visual C++ .NET, необходимо понимать, как он работает с .NET Framework. Мы начнем рассмотрение с базового класса Object (Объект) из пространства имен System. Затем рассмотрим коллекции, а также методы класса Object (Объект), которые следует перегрузить для использования возможностей, предоставляемых .NET Framework. Далее познакомимся с интерфейсами, позволяющими строго определить свойства реализуемых классов.

Управляемый C++ в .NET Framework
Объект системы: System::Object
Общедоступные методы экземпляров класса Object (Объект)
Защищенные методы экземпляров класса object (Объект)
Родовые интерфейсы и обычное поведение
Использование методов класса object (Объект) в классе Customer (Клиент)
Коллекции
Пример класса ArrayList (Список массивов)
Интерфейсы
Основные сведения об интерфейсах
Программирование с использованием интерфейсов
Динамическое использование интерфейсов
Программа Бюро путешествий Acme (Acme Travel Agency)
Явное определение интерфейсов
Родовые интерфейсы в .NET
Интерфейсы коллекций
Копирование объектов и интерфейс icioneable
Сравнение объектов
Что такое каркасы приложений
Делегаты
Объявление делегата
Определение метода
Создание экземпляра делегата
Вызов делегата
Объединение экземпляров делегатов
Полный пример
Моделирование фондовой биржи
События
События в управляемом C++ и .NET
Описание сервера
Описание клиента
Комната для дискуссий: пример чат-программы
Резюме

Глава 6. Создание графических пользовательских интерфейсов
К сожалению, конструктор форм (Forms Designer) не поддерживается в C++ Тем не менее, вы можете использовать конструктор форм (Forms Designer) в С#, и потом перенести полученный с помощью С# код графического интерфейса пользователя в программу на C++ Для переноса графического интерфейса пользователя в программу на C++ необходимы дополнительные усилия, и, в большинстве случаев, такой перенос особой пользы не дает Как правило, C++ не используют для разработки пользовательских графических интерфейсов, вместо этого применяется подход смешения языков, в котором для создания почьзовательского интерфейса используется С#, а в других аспектах разработки проекта из разных соображений используется C++

Создание графических пользовательских интерфейсов
Иерархия Windows Forms (Формы Windows)
Создание простых форм с помощью комплекса инструментальных средств разработки программ .NET SDK
Шаг 0: Создание простой формы
Шаг 1: Отображение текста на форме
Обработка событий в Windows Forms (Формы Windows)
Документация по обработке событий
Событие MouseDown (Кнопка мыши нажата)
Шаг 2: Обработка событий мыши
Шаг 2М: Несколько обработчиков для события
Шаг 3: События MouseDown (Кнопка мыши нажата) и Keypress (Нажатие клавиши)
Меню
Шаг 4: Меню для выхода из программы
Код меню
Код события Menu (Меню)
Управляющие элементы
Шаг 5: Использование управляющего элемента TextBox (Поле)
Visual Studio.NET и формы
Демонстрация Windows Forms (Формы Windows)
Окно конструктора (Design window) и окно кода (Code window)
Добавление события
Код обработчика события
Использование управляющего элемента Menu (Меню)
Закрытие формы (Выход из формы)
Диалоговые окна
Документация по диалогам .NET
Демонстрация диалогового окна
Управляющий элемент ListBox (Список элементов)
Начальная загрузка списка элементов
Выбор элемента в списке элементов ListBox
Пример бюро путешествий Acme (Acme Travel Agency) — шаг 3
Резюме

Глава 7. Сборки и развертывание
Эта глава начинается с обсуждения понятий сборки, которая является основной единицей развертывания при частном развертывании сборки в .NET. Затем описано и общедоступное развертывание сборки. Управление версиями и цифровое подписание сборок обсуждаются в контексте общедоступного развертывания. После этого на примере программы Hotel (Гостиница) демонстрируется инсталляция и приемы развертывания сборок. Наконец, представлены развертывание Visual Studio.NET и мастера установки. По ходу обсуждения мы иллюстрируем множество полезных инструментальных средств, которые являются частью комплекса инструментальных средств разработки программ .NET Framework SDK.

Сборки и развертывание
Сборки
Содержимое сборки
Частное развертывание сборки
Общедоступное развертывание сборки
Строгие имена
Цифровые сигнатуры (подписи)
Цифровая подпись и развертывание общедоступной сборки
Управление версиями общедоступных компонентов
Подписание в цифровой форме после компиляции
Конфигурация сборки
Проводимая по умолчанию политика управления версиями
Файлы конфигурации политики управления версиями
Обнаружение физического местоположения сборки
Многомодульные, или мультимодульные сборки
Инсталляция примера программной системы
Установка и развертывание проектов
CAB Project (Проект CAB)
Проект установки (Setup Project)
Merge Module Project (Проект модуля слияния)
Развертывание по сети
Резюме

Глава 8. Классы каркаса .NET Framework
Невозможно описать в одной главе, или даже в одной книге, все классы каркаса .NET Framework. Хотя и не полностью, классы .NET охватывают большую часть интерфейса 32-разрядных Windows-приложений (Win32 API), так же как и много чего другого. Несмотря на то, что основное внимание было уделено функциональным возможностям, связанным с Internet, однако изменилась и модель разработки приложений в среде Windows. В этой главе мы сосредоточим наше внимание на классах, которые иллюстрируют ключевые концепции и модели, проявляющиеся повсюду в каркасе .NET Framework. Такой подход представляется нам более плодотворным, чем просто попытаться немного рассказать о каждом классе, который когда-либо мог бы понадобиться, без того, чтобы дать читателю общее представление о классах .NET.

Классы каркаса .NET Framework
Метаданные и отражение
Класс туре (Тип)
Динамическое связывание
Ввод и вывод в .NЕТ
Потоковые классы
Примитивные типы данных и потоки
TextReader И TextWriter
Обработка файлов
Сериализация, или преобразование в последовательную форму
Объекты сериализации
ISerializable
Модель приложений .NET
Потоки
Изоляция потоков
Синхронизация коллекций
Контекст
Заместители и заглушки
ContextBoundObject
Изоляция приложений
Прикладная область
Прикладные области и сборки
Класс AppDomain (Прикладная область)
События AppDomain (Прикладная область)
Пример AppDomain (Прикладная область)
Маршализация, прикладные области и контексты
Асинхронное программирование
Асинхронные шаблоны проектирования
lAsyncResult
Использование делегатов в асинхронном программировании
Организация поточной обработки с параметрами
Удаленный доступ
Краткий обзор удаленного доступа
Удаленные объекты
Активация
Пример удаленного объекта
Пример программы, реализующей удаленный доступ
Метаданные и удаленный доступ
Конфигурационные файлы удаленного доступа
Программируемые атрибуты
Использование самостоятельно созданного атрибута
Определение класса атрибута
Определение базового класса
Сборка мусора
Уничтожение объектов
Неуправляемые ресурсы и освобождение ранее выделенной области памяти
Поколения
Завершение и раскручивание стека
Управление сборкой мусора с помощью класса сборщика мусора GC
Программа-пример
Резюме

Глава 9. Программирование в ADO.NET
Классы каркаса, предназначенного для работы с базами данных, собраны в ADO.NET. Класс DataSet (Набор данных) позволяет работать с реляционными данными реляционным же способом, независимо от того, есть ли в текущий момент соединение с источником данных. Разъединенный (disconnected) доступ к данным становится все более значимым в многоярусном и Internet-ориентированном мире данных. При использовании такого типа доступа к данным необходимо установить соединение с базой данных только для изменения или получения ее содержимого. Конечно, при желании, можно работать и обычным соединенным (connected) способом.

Программирование в ADO.NET
Источники данных
Проводник Visual Studio.NET по серверу: Server Explorer
Установление соединения
Устройства считывания данных
Работа с базой данных в соединенном режиме
Выполнение операторов SQL
DataReader
Множественное результирующее множество
Коллекция параметров
Классы SqlDataAdapter и DataSet (Набор данных)
Отсоединенный режим
Коллекции объектов DataSet (Набор данных)
Основные сведения о наборах данных
Обновление источника данных
Автоматически генерируемые свойства команд
Транзакции и обновление базы данных
Объект DataSet (Набор данных) и сравнение пессимистического блокирования с оптимистическим
Использование наборов данных
Множественные таблицы в объекте DataSet (Набор данных)
Создание таблицы без обращения к источнику данных
Ограничения и связи
Получение информации о схеме размещения данных в объекте DataTabie (Таблица данных)
Изменение объекта DataRow
Пример приложения Acme Travel Agency (Туристическое агентство Acme)
Доступ к данным XML
Схема и данные XML
XmlDataDocument
DataSet (Набор данных) и XML
База данных AirlineBrokers
DataSet (Набор данных) и XML
Создание документа XML из объекта DataSet (Набор данных)
Резюме

Глава 10. ASP.NET и Web-формы
Технология ASP.NET, предназначенная для создания Web-приложении, является важной частью платформы .NET. По сравнению с очередной усовершенствованной версией ASP (Active Server Pages — Активные страницы сервера), эта новая технология представляет собой более унифицированную платформу, которая значительно упрощает реализацию сложных Web-приложений В данной главе мы ознакомимся с основами технологии ASP.NET, а также рассмотрим Web-формы, облегчающие создание интерактивных Web-страниц. В главе 11 "Web-службы" мы изучим построение Web-служб на основе технологии ASP.NET.

ASP.NET и Web-формы
Что такое ASP.NET?
Основные принципы создания Web-приложения
Программа на С#: Echo (Эхо)
Возможности ASP.NET
Архитектура Web-форм
Класс Page (Страница)
Время существования страниц с Web-формами
Состояние представления (вида)
Модель событий Web-форм
Обработка страницы
Трассировка
Программирование запросов и ответов
Класс HttpRequest
Класс HttpResponse
Изучение конкретного примера
Web-страница с информацией о гостиницах
Привязка данных
Приложения ASP.NET
Сеансы
Global.asax
Состояния в приложениях ASP.NET
Статические элементы данных
Объект Application (Приложение)
Объект Session (Сеанс)
Конфигурация ASP.NET
Файлы конфигурации
Дополнительная информация об ASP.NET
Резюме

Глава 11. Web-службы
Распределение функций приложений и возможность использования данных за пределами предприятия, на котором они хранятся, — следующий шаг в развитии компонентной технологии. Количество служб, которые разработчики могут интегрировать в свои приложения, настолько велико, что не приходится даже мечтать о том, чтобы создать их все самостоятельно. Рассмотренный нами конкретный пример, — система бронирования Acme (Acme Reservation System), — представляет собой простую службу. Бюро путешествий Acme (Acme Travel Agency), в состав которого входит система бронирования билетов на авиарейсы и система бронирования мест в гостинице, предоставляет клиентам более широкий спектр услуг.

Web-службы
Протоколы
Язык XML
Пространства имен XML (XML Namespeces)
Схема XML (XML schema)
Протокол SOAP
Язык описания Web-служб WSDL
Архитектура Web-службы
Пример Web-службы Add (Сложение)
Просмотр Web-службы Add (Сложение) при помощи броузера
Отладка Web-службы Add (Сложение)
Клиент для Web-службы Add (Сложение)
Язык описания Web-служб (Web Services Description Language — WSDL)
Классы-заместители
Клиент web-службы, использующий необработанные данные SOAP и протокол передачи гипертекстовых файлов HTTP
Особенности форматирования данных согласно спецификации SOAP
Класс WebService
Использование шаблона Managed C++ web Service (Web-службы на управляемом C++)
Код, генерируемый шаблоном Managed C++ Web Service (Web-служба на управляемом C++)
Арифметическая Служба Сети, или Web-служба Arithmetic (Арифметика)
Использование внутренних объектов
Web-служба Hotel Broker (Брокер гостиницы)
Web-служба Customer (Клиент)
Web-служба Hotel Broker (Брокер гостиницы)
Соображения по поводу проектирования
Резюме

Глава 12. Web-узлы и Web-службы,работающие на основе ATL Server
Создавать Web-приложения и Web-службы можно несколькими способами Один из них — это использовать технологию ASP NET Такой подход поддерживается в разной степени большинством языков платформы NET Есть и другой подход, поддерживаемый только языком Visual C++ Он состоит в применении сервера ATL Server [ATL Server реализован с помощью неуправляемого C++ и поэтому не относится к основной предметной области NET Впрочем, для некоторых программистов, работающих на Visual C++ ATL является достаточно важной темой]. Остальные, традиционные подходы заключаются в использовании общего шлюзового интерфейса CGI (Common Gateway Interface), и интерфейса прикладного программирования Internet-сервера ISAPI

Web-узлы и Web-службы, работающие на основе ATL Server
История технологий, работающих с динамическим содержимым Web
Приложения на основе ATL Server
ATL Server основан на интерфейсе прикладного программирования Internet-сервера (ISAPI)
Архитектура приложения, использующего ATL server
Создание проекта ATL Server Project (Проект на основе ATL Server)
Динамически подключаемая библиотека (DLL) расширения интерфейса прикладного программирования Internet-сервера (ISAPI)
Динамически подключаемая библиотека (DLL) Web-приложения
Создание и запуск проекта на основе ATL Server
Добавление в сервер еще одного обработчика
Добавление на сервер обработки управляющей структуры if-else-endif
Добавление на сервер обработки управляющей структуры while-endwhile
Передача параметров серверному обработчику
Поддержка состояния сеанса
Получение доступа к переменным сервера
Обработка форм
Службы сеанса
Создание проекта Web-службы на основе ATL Server (ATL Server Web Service Project)
Код Web-службы на основе ATL Server: ATLServerWebService.h
Создание клиентской программы, обращающейся к Web-службе
Добавление функций в Web-службу на основе ATL Server
Изменение клиентской программы, работающей с Web-службой
Передача структур в качестве входных и выходных параметров
Резюме

Глава 13. Защита
Защита, или безопасность — это одно из основных требований к приложениям и при разработке ее следует учитывать не в последнюю очередь Однако из педагогических соображений говорить о защите легче тогда, когда уже состоялось знакомство с прикладной моделью NET, а также с ASP NET и Web-службами Эта глава должна познакомить вас с основными концепциями защиты NET. Защита не дает пользователю или коду делать то, что им не позволено Традиционно основная задача защиты состояла в том, чтобы ограничивать действия пользователей

Защита
Защита на основе пользователей
Защита доступа к коду
Политика безопасности
Разрешения
lnternet-безопасность
Информационный сервер Internet: Internet Information Server (IIS)
Защита .NET на основе ролей
Принципалы и личности
Роли .NET в Windows
Другие классы личностей
Личность в операционной системе и общеязыковой среде выполнения CLR
Разрешения коду на доступ
Простой запрос разрешения кодом
Как работает запрос на разрешение
Стратегия запроса разрешений
Запрет разрешений
Утверждение разрешений
Другие методы разрешений
Класс SecurityPermission
Неуправляемый код
Разрешения на основе атрибутов
Разрешение принципала
Класс PermissionSet
Личность кода
Классы разрешений для личности
Подтверждение
Политика безопасности
Уровни политики безопасности
Кодовые группы
Именованные наборы разрешений
Изменение политики безопасности
Резюме

Глава 14. Трассировка и отладка в .NET
Cложные приложения не всегда удается эффективно отлаживать под управлением отладчика, чтобы узнать, что пошло не так, как надо Дублирование, а также написание условий, необходимых для отладки, становится зачастую сложной задачей В пространстве имен System: : Diagnostics (Система Диагностика) есть определенные классы, которые помогают оснастить ваше приложение инструментальными средствами Оснастив приложение необходимыми инструментальными средствами, в процессе отладки и трассировки вы сможете сделать его более устойчивым При этом также проясняется общий шаблон того, как каркас разбивает классы на отдельные задачи (запись вывода, управление выводом, назначение вывода) так, чтобы можно было настроить эти отдельные части, и в остальном полностью полагаться на классы Framework Механика оснащения приложения имеет три аспекта

Трассировка и отладка в .NET
Пример TraceDemo
Разворачивание TraceDemo.exe.config
Использование классов Debug (Отладка) и Trace (Трассировка)
Использование переключателей для активизации диагностики
Активация и деактивация переключателей
Установка переключателей в файле конфигурации
Установка переключателей программным путем
Использование переключателей для управления выводом
Класс TraceListener
Коллекция слушателей
Резюме

Глава 15. Смешивание управляемого и неуправляемого кода
Архитектура .NET поддерживает многочисленные языки программирования. В основном язык C++ выбирают из-за того, что в интерфейс 32-разрядных Windows-приложений (Win32 API), в программирование на основе модели компонентных объектов Microsoft (Component Object Model, COM) и в существующие программы были вложены большие средства. Таким образом, взаимодействие между управляемыми программами .NET общеязыковой среды выполнения CLR (Common Language Runtime) и неуправляемыми решениями и компонентами, написанными на C++, будет представлять интерес для многих программистов, во всяком случае, в обозримом будущем.

Смешивание управляемого и неуправляемого кода
Сравнение управляемого и неуправляемого кода
Причины смешивания управляемого и неуправляемого кодов
Неуправляемый или опасный?
Управляемые и неуправляемые ссылки и типы значений
Ограничения на использование управляемых типов в C++
Вызов управляемого кода из неуправляемого и обратный вызов
Сравнение программирования на C++ с использованием модели компонентных объектов Microsoft (COM) и .NET
Доступ из управляемого кода к компонентам, построенным на основе модели компонентных объектов Microsoft (COM)
Сервисная программа Tibinp.ехе
Унаследованный компонент на основе модели компонентных объектов Microsoft (COM)
Действующий клиент на основе модели компонентных объектов Microsoft (COM)
Создание клиента на основе модели компонентных объектов Microsoft (COM) с помощью управляемого C++
Разработка управляемого клиента на основе модели компонентных объектов Microsoft (COM) с помощью С#
Создание с помощью управляемого C++ клиента на основе модели компонентных объектов Microsoft (COM) без метаданных
Создание с помощью С# управляемого клиента на основе модели компонентных объектов Microsoft (COM) без метаданных
Доступ к управляемым компонентам из клиентов на основе модели компонентных объектов Microsoft (COM)
Раннее связывание клиента на основе модели компонентных объектов Microsoft (COM) с компонентами .NET
Динамическое связывание клиента на основе модели компонентных объектов Microsoft (COM) с компонентами .NET
Явное определение интерфейса
Службы обращения к платформе: Plnvoke (Platform Invocation Services)
Резюме

Приложение. Visual Studio.NET
Хотя в .NET можно программировать, используя лишь компилятор командной строки, намного легче и приятнее использовать Visual Studio.NET. В этом приложении мы рассмотрим основы использования среды Visual Studio для редактирования, компиляции, запуска и отладки программ. Ознакомившись с ним, вы будете готовы использовать Visual Studio при знакомстве с остальными частями книги. В приложении рассмотрены основы, достаточные для того, чтобы вы смогли начать самостоятельно использовать Visual Studio. Дополнительная информация о возможностях Visual Studio излагается в главах книги по мере необходимости. При написании этой книги использовались бета-версии программного обеспечения, так что коммерческие его версии могут немного отличаться от описанных здесь. Кроме того, Visual Studio — сложное приложение для Windows, с широкими возможностями конфигурирования, поэтому могут отличаться также конфигурации окон и т.д.

Visual Studio.NET
Обзор Visual Studio.NET
Панели инструментов
Создание консольного приложения
Создание проекта C++
Добавление файла на C++
Использование текстового редактора Visual Studio
Компиляция проекта
Запуск программы
Запуск программы в отладчике
Конфигурирование проектов
Создание новой конфигурации
Установка параметров компоновки приложения в конфигурации
Отладка
Оперативная отладка
Обычная отладка, точки останова
Резюме
Приложение

Интегрированные сети ISDN

Сети Token Ring были разработаны фирмой IBM в 1970-х годах и рассчитана на скорость обмена 4.16 Мбит/c при числе сегментов до 250. По своей популярности она уступает лишь Ethernet/IEEE 802.3. Спецификация IEEE 802.5 практически идентична ей и полностью совместима (см. [13], или, например, bbs.uniinc.msk.ru/product/bay/routers/interf/toking.htm или www.oil.unh.edu/training/vganylan/teach/vgconcept/frame/802.-5). Сеть Token Ring имеет топологию звезды, все оконечные станции которой подключаются к общему устройству (MSAU - MultiStation Access Unit). В IEEE 802.5 топология не оговаривается, не регламентирована здесь и сетевая среда. В Token Ring сеть базируется на скрученных парах. Обе эти разновидности сети используют схему передачи маркера (небольшой пакет - token).
В отличие от сетей с csma/cd доступом (например, Ethernet) в IEEE 802.5 гарантируется стабильность пропускной способности (нет столкновений). Сети Token Ring имеют встроенные средства диагностики, они более приспособлены для решения задач реального времени, но в то же время более дороги.

IEEE (Token Ring)
AppleTalk
Разводка разъемов
Алгоритм DES
Электронная торговля в Интернет
Канальный протокол Fibre Channel
Протокол G3
Статический алгоритм Хафмана
Гипертекстный протокол HTTP
Схема беспроводной локальной сети
Таблица локальных дескрипторов
Маршрутная политика
Стандарт MPEG
Синтетические объекты
Протокол аутентификации Нидхэма-Шредера
Оптоволоконные каналы
Таблица программируемого драйва
Квантовая криптография
Беспроводные (радио) каналы и сети
Расширение RPSL
Модель машины конечных состояний
Таблица Структура BatchStatus
Таблица Базовые SPI процедуры передачи данных Winsock 2
Цифровые каналы Tи Е1
Протокол обмена UUCP
Видеоконференции по каналам Интернет и ISDN
Таблица Команды WAIS Основные
Протоколы сетей X
Алгоритм Зива-Лемпеля

Принципы объектно-ориентированного программирования

Вы познакомитесь с терминологией объектно-ориентированного программирования (ООП) и убедитесь в важности применения в программировании объектно-ориентированных концепций. Бытует мнение, что во многих языках, таких как C++ и Microsoft Visual Basic, есть "поддержка объектов", однако на самом деле лишь немногие из них следуют всем принципам, составляющим основу ООП, и язык С# — один из них. Он изначально разрабатывался как настоящий объектно-ориентированный язык, в основе которого лежит технология компонентов. Поэтому, чтобы чтение этой книги принесло максимальную пользу, вам следует очень хорошо усвоить представленные здесь понятия.

Глава 1. Принципы объектно-ориентированного программирования
Сразу хочу предупредить новичков в ООП: опыт, полученный при работе с не объектно-ориентированными языками, вам не пригодится. Объектно-ориентированное программирование — это иной способ осмысления, формулирования и решения задач по созданию программ. Практика показывает, что начинающие программисты намного быстрее овладевают объектно-ориентированными языками, чем те, кто начинал с процедурных языков вроде BASIC, COBOL и С. Им не нужно "забывать" навыки работы с процедурами, которые лишь мешают в освоении ООП. Тут лучше всего начинать "с чистого листа".

Глава 2. Введение в Microsoft .NET
Не имея четкого представления о Microsoft .NET и роли, которую играет в этой новой инициативе Microsoft язык С#, вам будет трудно разобраться в ключевых элементах С#, поддерживаемых платформой Microsoft .NET. Представленный в этой главе обзор технологии Microsoft .NET поможет вам усвоить терминологию, применяемую в этой книге, и понять, почему некоторые элементы языка С# ведут себя так, а не иначе. Если просмотреть в Интернете материалы по Microsoft .NET, можно заметить разнобой в трактовке и употреблении терминов этой технологии. Двусмысленные, а порой и просто противоречивые высказывания мешают уловить суть излагаемого материала.

Глава 3. Hello, C#
Прежде чем приняться за главное в нашей теме — части II "Основы классов С#" и III "Написание программ", я предлагаю вам поучаствовать в разработке небольшого С#-приложения. В начале этой главы вы узнаете о достоинствах и недостатках редакторов, в которых можно писать программы на С#. Выбрав подходящий редактор, мы создадим каноническое приложение "Hello, World" и попутно познакомимся с основным синтаксисом и схемой создания С#-приложений.

Глава 4. Система типов
Эта глава посвящена универсальной системе типов .NET Common Type System (CTS), которая находится в центре Microsoft .NET Framework. CTS определяет не только все типы, но и правила, которым Common Language Runtime (CLR) следует в отношении объявления и использования этих типов приложениями. Вы познакомитесь с типами, доступными разработчикам на С#, и узнаете об особенностях их применения в программах на С#.

Глава 5. Классы
Классы — сердце каждого объектно-ориентированного языка. Как вы помните, класс представляет собой инкапсуляцию данных и методов их обработки (см. главу 1). Это справедливо для любого объектно-ориентированного языка и отличаются они в этом плане лишь типами тех данных, которые можно хранить в виде членов, а также возможностями классов. В том, что касается классов и многих функций языка, С# кое-что заимствует из C++ и Java, и привносит немного изобретательности, помогающей найти элегантные решения старых проблем.

Глава 6. Методы
Как вы узнали из главы 1, классы — это инкапсулированные наборы данных и методов, обрабатывающих эти данные. Иначе говоря, методы определяют поведение классов. Мы называем методы в соответствии с действиями, выполняемыми классами по нашему желанию в наших интересах. До сих пор я не вдавался в подробности определения и вызова методов на С#. Вот этому и будет посвящена данная глава: здесь вы узнаете о ключевых словах параметров методов re/и out, а также как с их помощью определяются методы, которые возвращают вызывающему коду больше одного значения. Вы также научитесь определять перегруженные методы — когда несколько методов с одинаковым именем могут по-разному функционировать в зависимости от типов и/или числа переданных им аргументов.

Глава 7. Свойства, массивы и индексаторы
Я уже описал основные поддерживаемые С# типы, способы их объявления и использования в классах и приложениях. А теперь мы нарушим порядок изложения, при котором каждая глава посвящена описанию какой-либо одной из важных функций языка, — в этой главе вы узнаете о свойствах, массивах и индексаторах, так как у этих функций языка много общего. Они позволяют разработчику классов на С# расширять возможности базовых структур классов (полей и методов), чтобы члены классов предоставляли более понятный и естественный интерфейс.

Глава 8. Атрибуты
Большинство языков программирования разрабатываются с учетом набора необходимых возможностей. Так, в начале создания компилятора вы думаете, какова будет структура приложений на новом языке, как один фрагмент кода будет вызывать другой, как распределить функциональность и о многих других проблемах, решение которых сделает язык продуктивным средством создания ПО. Обычно разработчикам компиляторов приходится иметь дело со статическими сущностями. Например, вы определяете класс на С#, помещая перед его именем ключевое слово class. После этого вы определяете производный класс, вставляя двоеточие после его имени, за которым следует имя базового класса. Это может служить примером решения, которое принимается разработчиком языка однажды и после этого не может быть изменено.

Глава 9. Интерфейсы
Ключ к пониманию интерфейсов лежит в их сравнении с классами. Классы — это объекты, обладающие свойствами и методами, которые на эти свойства воздействуют. Хотя классы проявляют некоторые характеристики, связанные с поведением (методы), они представляют собой предметы, а не действия, присущие интерфейсам. Интерфейсы позволяют определять характеристики или возможности действий и применять их к классам независимо от иерархии последних. Допустим, у вас есть дистрибьюторское приложение, сущности которого можно упорядочить. Среди них могут быть классы Customer, Supplier и Invoice.

Глава 10. Выражения и операторы
В этой главе мы рассмотрим основу любого языка программирования — его способность выполнять присваивания и сравнения с помощью операторов. Мы увидим, какие операторы есть в С# и каково их старшинство, а затем углубимся в отдельные категории выражений для выполнения арифметических операций, присваивания значений и сравнения операндов.

Глава 11. Управление ходом программы
Операторы, позволяющие управлять ходом выполнения программы, в приложениях С# разбиты на три категории: операторы выбора, итерационные операторы и операторы перехода. Во всех выполняется проверка вычисленного булевского значения, и на основе этой проверки изменяется выполнение приложения. В этой главе вы узнаете, как с помощью операторов каждого из этих типов управлять ходом программы.

Глава 12. Обработка ошибок с помощью исключений
Одно из основных назначений .NET Common Language Runtime (CLR) — недопущение ошибок (что достигается такими средствами, как автоматическое управление памятью и ресурсами в управляемом коде) или хотя бы их обнаружение во время компиляции (благодаря строго типизированной системе). Однако некоторые ошибки можно обнаружить только в период выполнения, а значит, для всех языков, соответствующих спецификации Common Language Specification (CLS), должен быть предусмотрен единый метод реакции на ошибки. Эта глава посвящена системе обработки ошибок, реализованной в CLR, — обработке исключений. Сначала мы изучим общий механизм и основы синтаксиса обработки исключений. Вы увидите, как обработка исключений соотносится с наиболее распространенными на сегодняшний день методами обработки ошибок, и поймете преимущества обработки исключений над другими методиками.

Глава 13. Перегрузка операторов и нестандартные преобразования
Из главы 7 вы узнали о применении оператора [] для индексации объектов, как если бы они были массивами. В этой главе мы рассмотрим две тесно связанные функции С# для создания интерфейсов структур и классов, упрощающих их понимание и применение: перегрузку операторов (operator overloading) и нестандартные, определенные пользователем преобразования. Я начну с общего обзора перегрузки операторов, чтобы были ясны ее преимущества, затем рассмотрю конкретный синтаксис переопределения поведения операторов по умолчанию, а также реальный пример приложения, в котором оператор + перегружается для объединения нескольких объектов Invoice. Потом вы увидите листинг с перегружаемыми бинарными и унарными операторами и применением некоторых ограничений.

Глава 14. Делегаты и обработчики событий
Одно из полезных нововведений в С# — делегаты (delegates). Их назначение по сути совпадает с указателями функций в C++, но делегаты являются управляемыми объектами и привязаны к типам. Это значит, что исполняющая среда (runtime) гарантирует, что делегат указывает на допустимый объект, а это в свою очередь означает получение всех достоинств указателей функций без связанных с этим опасностей, таких как применение недопустимых адресов или разрушение памяти других объектов. В этой главе мы рассмотрим делегаты в сравнении с интерфейсами, их синтаксис и проблемы их применения. Мы также увидим несколько примеров использования делегатов с функциями обратного вызова и асинхронными обработчиками событий.

Глава 15. Программирование многопоточности
С формальной точки зрения потоки не являются чем-то характерным для С#; поэтому многие книги по С# стремятся обойти этот вопрос. Хотя я старался не отклоняться от рассмотрения С#, многопоточность — это один из общих предметов, который должен быть хорошо знаком программисту при изучении этого нового языка. Конечно, в одной главе я не смогу раскрыть все вопросы, связанные с организацией потоков, но дам основы и даже расскажу о несколько более продвинутых вещах, касающихся аварийного завершения, планирования и управления временем жизни потоков. Мы также обсудим синхронизацию потоков с помощью классов System. Monitor и System.Mutex и оператор lock.

Глава 16. Получение метаданных с помощью отражения
В главе 2 я говорил, что компилятор генерирует переносимый в Win32 исполняемый модуль (portable executable, РЕ), состоящий главным образом из MSIL-кода и метаданных. Одна из очень мощных возможностей .NET позволяет вам писать код, чтобы обращаться к метаданным приложения посредством отражения (reflection). Если просто, то отражение — это способность получать информацию о типе в период выполнения. В этой главе будет описан API отражения и способы его использования при обработке модулей и типов, входящих в сборки для получения различных характеристик типа, определенных в период разработки.

Глава 17. Взаимодействие с неуправляемым кодом
Продолжительность жизни нового языка или среды разработки сильно ограничена, если он или она игнорируют унаследованные системы и программы, предоставляя лишь средства для написания новых систем. Независимо от привлекательности новой технологии ее создатели должны учесть, что какое-то время ей придется сосуществовать со старой технологией. Поэтому команды разработчиков .NET и С# решили облегчить программистам взаимодействие с существующим кодом посредством неуправляемого (unmanaged) кода, т. е. кода, которым нельзя управлять (контролировать) средствами поддержки периода выполнения .NET.

Глава 18. Работа со сборками
В этой главе описаны наиболее важные преимущества сборок (assemblies), включая упаковку компонентов .NET и управление их версиями. Вы также узнаете, как создавать однофайловые и многофайловые сборки с помощью утилиты Assembly Generation (al.exe), создавать совместно используемые сборки, применяя утилиту Strong Name (sn.exe), просматривать глобальный кэш сборки с помощью Assembly Cache Viewer (shfu-sion.dll) и как утилита Global Assembly Cache (gacutil.exe) помогает манипулировать кэшем сборки.

Статьи

*