- •Часть 3
- •Общие сведения Сведения об эумк
- •Методические рекомендации по изучению дисциплины
- •Рабочая учебная программа
- •Часть 3
- •По изучаемой учебной дисциплине с другими дисциплинами специальности
- •Пояснительная записка
- •Содержание дисциплины
- •Наименование тем, их содержание
- •Тема 8. Средства сетевого взаимодействия и сервисно-ориентированная архитектура программ.
- •Перечень индивидуально практических работ, их наименование и объем в часах
- •Перчень контрольных работ, их наименование и объем в часах
- •Перечень тем курсового проектировния, и объем в часах
- •Учебно-методические материалы по дисциплине
- •Перечень компьютерных программ, наглядных и других пособий, методических указаний и материалов к техническим средствам обучения
- •Теоретический раздел Лекции Тема 1. Введение в платформу .Net
- •Тема 2. Модульное программирование в среде .Net
- •Тема 3. Система типов и объектная модель среды .Net
- •Тема 4. Модели управление памятью, механизм сборки мусора
- •Тема 5. Делегаты и события
- •Тема 6. Средства параллельного программирования и синхронизации в среде .Net
- •Тема 7. Прикладное программирование в среде .Net
- •Тема 8. Средства сетевого взаимодействия и сервисно-ориентированная архитектура программ
- •Практический раздел Контрольные работы
- •Контрольная работа №1 Указания по выбору варианта
- •Теоретическая часть (вопросы)
- •Методические указания по выполнению
- •Последовательность описания Образцы выполнения
- •Примеры образцов
Перечень тем курсового проектировния, и объем в часах
№ пп |
Название темы |
Объем в часах |
1. |
Разработка грамматики проблемно-ориентированного языка и транслятора с данного языка на некоторый метаязык. |
40 |
2. |
Разработка операционной среды для поддержания многопрограммного режима работы с разделением времени; |
|
3. |
Разработка драйверов. |
|
4. |
Разработка компонентов для среды визуального программирования. |
|
5. |
Разработка распределенных программ, взаимодействующих по принципу клиент-сервер. |
*Конкретная тема курсового проекта выдаются преподавателем после обсуждения со студентом.
Учебно-методические материалы по дисциплине
1. Рихтер Дж. CLR via C#. Программирование на платформе Microsoft .NET Framework 2.0 на языке С#. - СПб.: «Питер», 2007. – 656 c.
2. Троелсен Э. Язык программирования С# 2005 и платформа .NET. – М.: ООО «И.Д. Вильямс», 2007. – 1168 с.
3. Прайс Дж., Гандэрлой М. Visual С# . NET. – К.: ВЕК, М.: Энтроп, 2004. – 960 с.
4. Д. А. Сурков, К. А. Сурков, Ю. М. Четырько. Модели утилизации динамической памяти – Мир ПК #01/2008, (Электронный ресурс: http://www.osp.ru/pcworld/2008/01/4794170).
5. [Электронный ресурс] http://msdn.microsoft.com/
6. [Электронный ресурс] http://www.rsdn.ru/
Перечень компьютерных программ, наглядных и других пособий, методических указаний и материалов к техническим средствам обучения
5.1. Операционная система Windows XP, Windows Vista или Windows 7.
5.2. Интегрированная среда программирования Visual Studio 2008.
5.3. Программная документация к среде программирования.
5.4. УМК по предмету «Операционные системы и системное программирование», Часть 3.
5.5. Индивидуально-практические работы выполняются удаленно.
Теоретический раздел Лекции Тема 1. Введение в платформу .Net
История создания и общие принципы платформы .NET
.NET Framework представляет собой программную платформу, которую выпустила компания Microsoft. Основой платформы является виртуальная машина Common Language Runtime (далее - CRL). Данная виртуальная машина способна выполнять как прикладной программное обеспечение, так и web приложения. Отличительной особенностью .NET Framework является способность выполнять программы, написанные на разных языках программирования.
Программа, написанная языке программирования поддерживаемым платформой .NET Framework, переводится компилятором в низкоуровневый язык Common Intermediate Language (CIL), который затем компилятор переводит в байт-код. Полученный байт-код или исполняется виртуальной машиной CRL или транслируется в исполняемый код для конкретной целевого процессора, при помощи утилиты NGen.exe. При использовании виртуальной машины CLR, встроенный в неё JIT-компилятор «на лету» (just in time — компиляция на лету) преобразует промежуточный байт-код в машинные коды нужного процессора.
Использование виртуальной машины CLR дает следующие преимущества:
Избавляет разработчика от необходимости заботиться об особенностях аппаратной части.
Виртуальная машина CLR также сама заботится о базовой безопасности, управлении памятью и системе исключений.
История развития технологии .NET Framework
Компания Microsoft начала разрабатывать NET Framework в конце 1990-х под именем «Next Generation Windows Services» (NGWS). В 2000 году была выпущена первая бета-версия .NET 1.0. Окончательный релиз .NET 1.0 произошел 1 мая 2002 года.
В таблице 1.1 представлена история выходов различных версий платформы .NET Framework.
Таблица 1.1 История выходов различных версий платформы .NET Framework
Версия |
Номер версии |
Дата выхода |
Visual Studio |
По умолчанию в Windows |
Нововведения |
1.0 |
1.0.3705.0 |
1 мая 2002 года |
Visual Studio .NET |
|
|
1.1 |
1.1.4322.573 |
1 апреля 2003 года |
Visual Studio .NET 2003 |
Windows Server 2003 |
|
2.0 |
2.0.50727.42 |
11 июля 2005 года |
Visual Studio 2005 |
|
|
3.0 |
3.0.4506.30 |
6 ноября 2006 года |
Visual Studio 2005 + расширения |
Windows Vista, Windows Server 2008 |
|
3.5 |
3.5.21022.8 |
9 ноября 2007 года |
Visual Studio 2008 |
Windows 7, Windows Server 2008 R2 |
|
4.0 |
4.0.30319.1 |
12 апреля 2010 года |
Visual Studio 2010 |
|
|
Сравнительная характеристика технологий .NET и Java
Технология Java изначально разрабатывалась для встраивания в переносимые устройства, и лишь потом была преобразована для переносимого ПО в настольных компьютерах, позднее для серверного ПО. .Net – сразу для настольных компьютеров и серверов.
Обе технологии используют понятие промежуточного кода (для Java – Java-байт код, .Net – IL)
Обе среды используют автоматическое управление памятью.
Обе среды используют средства безопасности и контроля, которые позволяют использовать в Internet.
Основное преимущество .Net – более высокая продуктивность во всех сферах (более высокая производительность программного кода).
Более высокоуровневый промежуточный язык. Промежуточный Java-байт код был разработан для создания виртуальных Java-машин. Java-байт код является упрощением всех команд процессора, а модель виртуальной Java-машины – пересечение всех архитектур. В виртуальной Java-машине ограничено количество ресурсов (их 4):
на стек;
на динамическую память;
на текущую исполняемую инструкцию;
вспомогательный регистр.
Промежуточный язык IL среды .Net принципиально был разработан не для интерпретации, а для динамической компиляции.
В Java нет деления на размерные типы и ссылочные, а в .Net – есть. Следовательно, для платформы Java стек организован следующим образом: все элементы стека имеют фиксированный размер (8 байт). При этом в этом элементе хранится признак типа (либо это число, либо это указатель), или само значение, или ссылка на объект. Из-за этого при передаче параметров возьмет в качестве параметра функцию рисования прямоугольника (принимает две точки). Элементом стека такой объект быть не может, этот объект выделяется в динамической памяти (heap).
Передача Point в .Net: Point в .Net является не ссылочным типом, а размерным. Следовательно, он может передаваться следующим образом:
Но если объект достаточно большой, его выгодней передавать через указатели (как в Java).
void DrawPoint (Point p1, Point p2)
{
Point temp = new Point (p1);
}
Тогда мы имеем следующее представление:
Для Java |
Для NET |
|
|
Среда Java является многоязыковой, .Net - полиязыковой. Это обеспечивается благодаря тому, что в .Net стандартизирован промежуточный язык IL; в .Net разработана общая система типов (CTS), стандартизированы базовые и структурные типы данных, стандартизированы представления данных. Существует стандарт CLS (Common Language Specification) – набор правил, типов данных для межъязыковых вызовов (для доступа к программам, написанных на многих языках). Согласно CLS, программы могут обмениваться только ограниченным набором данных (если целые числа, то только знаковые).
CLS – исполняющая система (вызывает динамический компилятор, базовую библиотеку, сборщик мусора). В Java нет межъязыкового взаимодействия.
Отличия в организации взаимодействия с подпрограммами, написанными на Assembler целевого процессора (на С, С++, Assembler). В Java это организуется так: виртуальная Java-машина предоставляет API JNI-набор процедур прикладного программирования, который получает, например, по символическому имени адрес процедур, находит по имени какой-то объект или адрес параметра на стеке по его имени. Требуется специальное программирование, чтобы организовать вызов dll-библиотеки из программы, написанной на Java. Этот вызов работает медленно.
В .Net это решено по-другому: средства вызова разных процедур встроены в саму вызывающую систему, преобразование параметров осуществляется автоматически. Вызов из dll-библиотеки происходит быстрее.
Промежуточный язык IL и байт-код Java
По определению байт-код Java (byte-code), — машинно-независимый код низкого уровня, создаваемый транслятором и исполняемый виртуальной машиной Java. Большинство инструкций байт-кода эквивалентны одной или нескольким командам ассемблера. Перед исполнением байт-код транслируется в машинный код «на лету» - с помощью JIT-компиляции.
Байт-код называется так, потому что длина каждого кода операции — один байт, но длина кода команды различна. Каждая инструкция представляет собой однобайтовый код операции от 0 до 255, за которым следуют такие параметры, как регистры или адреса памяти. Это в типичном случае, но спецификация байт-кода значительно различается в разных языках.
В код на промежуточном языке CIL (ранее он назывался - Microsoft Intermediate Language или MSIL или IL) переводится код программ, написанных на языках высокого уровня поддерживаемых платформой .NET Framework. Данный код не зависит от системного и аппаратного обеспечения, на котором выполняется платформа .NET. В дальнейшем, в процессе выполнения приложения данный IL-код на лету (при помощи JIT компилятора) преобразуется в машинно-зависимый код, который в последствии и выполняется.
Язык CIL по синтаксису и мнемонике напоминает язык ассемблера. Его можно рассматривать как ассемблер виртуальной машины .NET. В то же время язык CIL содержит некоторые достаточно высокоуровневые конструкции, повышающие его уровень по сравнению с ассемблером для любой реально существующей машины, и писать код непосредственно на CIL легче, чем на ассемблере для реальных машин. Поэтому его можно рассматривать как своеобразный «высокоуровневый ассемблер».
Описание выполнения:
3 – объявляется статическая функция main с атрибутом cil (common intermediate language), managed – код может инспектироваться во время работы;
entrypoint – точка входа в функцию;
maxstack – сколько элементов стека будет использоваться;
ldstr – загружает на стек (исполняющие системы Java и .Net являются стековыми) указатель на строку;
вызывается функция WriteLine для вывода этой строки на экран;
ret – выход из процедуры.
Когда запускается программа, то исполняющая система загружает промежуточный код и преобразовывает в двоичную систему.
Пример на языке С#:
Объявление класса:
public class Test
{
public static int Add(int a, int n)
{
return a + b;
}
}
Вызов метода Add класса Test:
int sum = Test.Add(4, 5);
Отображение на IL-языке:
Объявление класса:
.class public Test
{
.method public static int32 Add(int32, int32) cil managed
{
.maxstack 2 // используем в стеке 2 элемента
ldarg.0 // загружаем первый аргумент
ldarg.1 // загружаем второй аргумент
add // складываем их
ret // возвращаем результат
}
}
Вызов метода Add класса Test:
ldc.i4.4
ldc.i4.5
call int32 Test::Add(int32, int32)
stloc