116
Объектно-ориентированное программирование Вафин Р.Р.,Медведев В.И.

презентация конспекта лекций

Embed Size (px)

Citation preview

Page 1: презентация конспекта лекций

Объектно-ориентированное программирование

Вафин Р.Р.,Медведев В.И.

Page 2: презентация конспекта лекций

Причина и цель создания .NET

Платформа .NET создана для кроссплатформенности программного обеспечения, разработанного на основе технология .NET

Лекция 1-1

Page 3: презентация конспекта лекций

Краткая характеристика .NET

Платформа .Net в отличие от API- Window, представляющих собой по сути дела набор функций языка C, предлагает разработчику объектно-ориентированную библиотеку классов .Net.

Лекция 1-2

Page 4: презентация конспекта лекций

Корни языка C#

C

C++

Java C#

Лекция 1-3

Page 5: презентация конспекта лекций

Преимущества .NET

Полная поддержка ООП Языковая независимость Общая система типов (CTS) Отказ от применения DLL Безопасность кода Встроенные поддержка и создание web-служб

Лекция 1-4

Page 6: презентация конспекта лекций

Полная поддержка ООП

Библиотека .NET является библиотекой классов, а не функций. Это означает, что при использовании библиотеки можно создавать объекты (экземпляры) этих классов, а так же порождать новые классы, используя библиотечные в качестве базовых.

Лекция 1-5

Page 7: презентация конспекта лекций

Языковая независимость

В среде .NET все программы, не зависимо от того, на каком языке они написаны, компилируются в некоторый промежуточный язык Microsoft Intermediate Language (MSIL). Этим самым достигается языковая совместимость на уровне MSIL.

Лекция 1-6

Page 8: презентация конспекта лекций

Языковая независимость

MSIL реализован в принципах классического объектно-ориентированного программирования, допускающего только одиночное наследование. На уровне MSIL возможно осуществить межъязыковое наследование.

Лекция 1-7

Page 9: презентация конспекта лекций

Общая система типов CTS

Общая система типов – Common Type System (CTS) обеспечивает совместимость языков программирования на уровне данных, предоставляя согласованный набор основных типов данных.

Лекция 1-8

Page 10: презентация конспекта лекций

Отказ от применения DLL

DLL в среде .NET заменены сборками. Сборки имеют встроенные средства контроля версий. Различные версии сборок могут сосуществовать совместно. Этим самым исключается так называемый «ад DLL», который заключался в том, что новые версии DLL затирали старые и, в силу не полной совместимости версий DLL, ранее установленные программные продукты переставали работать.

Лекция 1-9

Page 11: презентация конспекта лекций

Безопасность кода

Среда .NET обеспечивает безопасность на уровне кода, строгий контроль типов промежуточного языка позволяет среде .NET перед запуском определить политики безопасности.

Лекция 1-10

Page 12: презентация конспекта лекций

Встроенные поддержка и создания web-служб

Среда .NET имеет встроенную поддержку и создание web-служб, а также встроенную поддержку динамических web-страниц с помощью новых технологий ASP .NET.

Лекция 1-11

Page 13: презентация конспекта лекций

Процесс выполнения программы

1. Подготовка исходного текста программы2. Компиляция в промежуточный язык MSIL3. Загрузка и анализ сборки средой CLR4. Компиляция сборки компилятором JIT5. Запуск сборщика «мусора»

Лекция 1-12

Page 14: презентация конспекта лекций

Подготовка исходного текста программы

Проверка и анализ синтаксиса текста программы.

Лекция 1-13

Page 15: презентация конспекта лекций

Компиляция в язык MSIL

Исходный текст компилируется в промежуточный низкоуровневый язык MSIL. При этом формируется пакет, состоящий из некоторого числа сборок, одна из которых является исполняемой и содержит точку входа в программу.

Лекция 1-14

Page 16: презентация конспекта лекций

Компиляция в язык MSIL

В других - содержатся библиотечные файлы. Сборки содержат метаданные и код на промежуточном языке. Метаданные включают в себя информацию о типах данных, методах сборки и ХЭШ. ХЭШ содержит информацию о версиях и привилегиях, а так же какие другие сборки будут вызываться этой сборкой.

Лекция 1-15

Page 17: презентация конспекта лекций

Загрузка и анализ сборки средой CLR

Среда CLR загружает сборку, содержащую точку входа в программу и анализирует ХЭШ для проверки целостности сборки и требуемых привилегиях, происходит обращение к политике безопасности системы и учетной записи пользователя.

Лекция 1-16

Page 18: презентация конспекта лекций

Загрузка и анализ сборки средой CLR

CLR осуществляет так же проверку безопасности кода по типу памяти. Т.е. исполняемый код не должен пытаться читать или записывать в область памяти не принадлежащей ему. Если данное требование нарушается, то приложение снимается с выполнения.

Лекция 1-17

Page 19: презентация конспекта лекций

Компиляция сборки компилятором JIT

CLR компилирует с помощью компилятора JIT (Just-in-time) программу на промежуточном языке MSIL в машинный код и запускает ее на выполнение. Причем компилируется только та часть программы, выполнение которой требуется в данный момент времени.

Лекция 1-18

Page 20: презентация конспекта лекций

Компиляция сборки компилятором JIT

Скомпилированный код сохраняется в ОЗУ ЭВМ и при повторном обращении к нему, перекомпиляции не происходит, а, следовательно, не происходи потери производительности, свойственных, например, компилятору-интерпретатору.

Лекция 1-19

Page 21: презентация конспекта лекций

Запуск сборщика мусора

Во время выполнения кода периодически запускается так называемый сборщик мусора, который на основе анализа данных освобождает области памяти из-под объектов, которые больше не используются.

Лекция 1-20

Page 22: презентация конспекта лекций

Принципы ООП

Наследование Полиморфизм Инкапсуляция

Лекция 2-1

Page 23: презентация конспекта лекций

Наследование

Наследование — способ получение классов (типов) из существующих классов (типов).

Лекция 2-2

Page 24: презентация конспекта лекций

ПолиморфизмПолиморфизм — свойство кода ООП вести

себя по разному в зависимости от ситуации, возникающей в момент выполенния программы.

Различают: Специальный полиморфизм Чистый полиморфизм

Лекция 2-3

Page 25: презентация конспекта лекций

Инкапсуляция

Инкапсуляция — сокрытие информации о деталях и строениях класса или типа. Пользователю предоставляется минимальная и достаточная информация для использования классов.

Лекция 2-4

Page 26: презентация конспекта лекций

Система типов

Систем типов среды .NET подразделяется на систему типов по ссылке и систему типов по значению.

Лекция 2-5

Page 27: презентация конспекта лекций

Типы по значению

типы по значению

Встроенные типыпо значению

Пользовательскиетипы по значению

Перечисления

Лекция 2-6

Page 28: презентация конспекта лекций

Пользовательские типы

Лекция 3-1

Пользовательские типы по значению – это структуры.

В C# структура это особый вид класса, который

имеет тип по значению, т.е. экземпляр

структуры хранится в стеке

Page 29: презентация конспекта лекций

Типы по ссылке

Ссылочные типы

Указатели Самоописывающиеся типы Интерфейсы

Типы с классами массивы

Делегаты Классы Упакованные типы по значению

Лекция 3-2

Page 30: презентация конспекта лекций

Упакованные типы

Преобразование типа по значению, хранящегося в стеке, в ссылочный тип в куче называется упаковкой.

Лекция 3-3

Page 31: презентация конспекта лекций

Классы

Классы - абстрактный тип данных, определяемый пользователем.

Синтаксис объявления класса:

class имя_типа{

// члены данные// члены функции

}

Лекция 3-4

Page 32: презентация конспекта лекций

Члены данные класса

Поле Константы События

Лекция 3-5

Page 33: презентация конспекта лекций

Члены функций класса

Методы Конструктор Деструктор Свойства Массивы Индексаторы

Лекция 4-1

Page 34: презентация конспекта лекций

Метод

Метод — функция общего назначения.

Различают: Методы с параметрами (модификаторы ref, out) Метод с переменными параметрами Статические методы Перегруженные методы Сокрытые методы Виртуальные методы Абстрактные методы

Лекция 4-2

Page 35: презентация конспекта лекций

Метод с параметрами

Методы – аналогичны функциям языка С и синтаксически объявляются так же:

модификатор_доступа тип_значения имя_метода(список принимаемых параметров)

{…//тело метода}

Лекция 4-3

Page 36: презентация конспекта лекций

Метод с параметрами

Часто необходимо, чтобы метод возвращал более одного значения. В C# для этого используются ключевые слова ref и out:

модификатор_доступа тип_значения имя_метода(ref тип объект1, out тип объект2)

{…//тело метода}

Лекция 4-4

Page 37: презентация конспекта лекций

Метод с переменными параметрами

Метод с переменными параметрами – метод, коорому можно передавать произвольное количество объектов указанного типа. Компилятор сформирует из них массив, который и передаст в метод. Внутри метода все параметры будут видны как массив.

модификатор_доступа тип_значения имя_метода(param тип[] имя)

{…//тело метода}

Лекция 4-5

Page 38: презентация конспекта лекций

Статический метод

Статически объявленные функции (методы) считаются связанными с классом, а не с объектом этого класса.

static модификатор_доступа тип_значения имя_метода(список принимаемых параметров)

{…//тело метода}

Лекция 4-6

Page 39: презентация конспекта лекций

Особенность статических методов

Статически объявленные методы не должны пытаться получить доступ к не статическим членам класса. Статически объявленные методы не могут быть вызваны как методы экземпляра класса.

Лекция 4-7

Page 40: презентация конспекта лекций

Перегруженный метод

В С# можно объявить несколько функций с одинаковыми именами. Функции должны отличаться списком принимаемых параметров. Список может отличаться либо количеством, либо типом либо порядком следования параметров.

Лекция 4-8

Page 41: презентация конспекта лекций

Перегруженный метод

Тип возвращаемого значения функции роли не играет. При вызове функций транслятор по списку параметров определяет, какая именно функция среди одноименных, должна быть вызвана.

Лекция 4-9

Page 42: презентация конспекта лекций

Конструктор

Конструктор – специальная функция для инициализации полей класса.

Различают: Конструкторы по умолчанию Статические конструкторы Перегруженные конструкторы Вызов конструктора из конструктора

Лекция 4-10

Page 43: презентация конспекта лекций

Конструктор по умолчанию

Конструктор, объявленный без аргументов, называется конструктором по умолчанию.

Если в классе программистом не определен конструктор по умолчанию, то, в отсутствии других конструкторов, компилятор создает его сам.

Пример конструктора:class CA{

public CA(){ //Тело конструктора}}

Лекция 4-11

Page 44: презентация конспекта лекций

Статический конструктор

Статистический конструктор не имеет спецификации доступа, так как он никогда не вызывается кодом C#, а только самой средой исполнения .NET, и вызывается он только один раз, до создания какого-либо экземпляра класса.

Пример конструктора:class CA{ static public CA()

{ //Тело конструктора}}

Лекция 5-1

Page 45: презентация конспекта лекций

Конструктор с аргументами

Конструктор, принимающий параметры, называется конструктором с аргументами. Конструкторы с аргументами позволяют разные объекты одного и того же класса по-разному инициализировать.

Лекция 5-2

Page 46: презентация конспекта лекций

Конструкторы и поля readonly

Классы могут содержать поля только для чтения (readonly). Поле только для чтения – это константное поле, значение которого изменить нельзя. Начальное значение поля только для чтения может быть установлено только внутри конструктора.

Лекция 5-3

Page 47: презентация конспекта лекций

Перегруженный конструктор

В С# можно объявить несколько конструкторов в одном классе. Конструкторы должны отличаться списком принимаемых параметров.

Лекция 5-4

Page 48: презентация конспекта лекций

Перегруженный конструктор

Список может отличаться либо количеством, либо типом либо порядком следования параметров. При вызове конструктора транслятор по списку параметров определяет, какой именно конструктор среди одноименных, должен быть вызван.

Лекция 5-5

Page 49: презентация конспекта лекций

Вызов конструктора из конструктора

Для сокращения повторяющего кода инициализации в C# есть возможность вызова конструктора из другого конструктора. Для этого используются ключевые слова this и base.

Лекция 6-1

Page 50: презентация конспекта лекций

Деструктор

Деструктор – специальная функция для принудительного освобождения полей класса.

Вызывается при завершении работы с объектом класса для освобождения системных ресурсов.

Лекция 6-2

Page 51: презентация конспекта лекций

Свойства

Свойства— специфические методы классаОбъявление свойства:модификатор_доступа тип имя_свойства

{get{return значение_переменной;}set{значение_переменной = value;}}

Лекция 6-3

Page 52: презентация конспекта лекций

Массивы

Массивы – объекты класса, создание которых производится точно так же, как и объектов ссылочного типа.

Различают: Одномерные массивы Многомерные массивы Невыровненные массивы

Лекция 6-4

Page 53: презентация конспекта лекций

Одномерный массив

Поскольку массивы – это объекты класса, то их создание производится точно так же, как и объектов ссылочного типа.

Синтакси объявления массива:тип[] имя;имя = new тип[размер];или, что - то же самое:тип[] имя = new тип[размер];

Лекция 6-5

Page 54: презентация конспекта лекций

Многомерный массив

При объявлении многомерного массива в С# в квадратных скобках через запятую перечисляют размерность каждого измерения массива, например:

float [, ,] ms = new float[3,2,2];

Лекция 6-6

Page 55: презентация конспекта лекций

Невыровненный массив

Не выровненный массив – это внешний массив, состоящий из внутренних массивов разной длины:

тип[][] имя = new тип[размер][];

Лекция 6-7

Page 56: презентация конспекта лекций

Индексаторы

Индексаторы – “умные” массивыОбъявление индексатора:модификатор_доступа тип this[типимя_индекса]

{get {//Возврат необходиммых данных}set {//Установка необходиммых данных} }

Лекция 7-1

Page 57: презентация конспекта лекций

Наследование

Наследование — способ получение классов (типов) из существующих классов (типов).

Лекция 7-2

Page 58: презентация конспекта лекций

Наследование

Порядок вызовов

конструкторов при наследовании

class CA

class CB

class CD

Лекция 7-3

Page 59: презентация конспекта лекций

Изолированный класс

Классы, от которых запрещено наследовать, называются запечатанными или изолированными классами.Изолировать класс можно с помощью ключевого слова sealed.Например:

sealed class CM{

//Тело класса}

Лекция 7-4

Page 60: презентация конспекта лекций

Сокрытый метод

Если в производном классе объявить функцию с точно таким же заголовком, что и в базовом классе, то говорят, что новый метод сокроет метод базового класса.

Лекция 7-5

Page 61: презентация конспекта лекций

ПолиморфизмПолиморфизм — свойство кода ООП вести

себя по разному в зависимости от ситуации, возникающей в момент выполенния программы.

Различают: Специальный полиморфизм Чистый полиморфизм

Лекция 8-1

Page 62: презентация конспекта лекций

Специальный полиморфизм

Специальный полиморфизм реализуется с помощью перегруженных функций.

Лекция 8-2

Page 63: презентация конспекта лекций

Чистый полиморфизм

Чистый полиморфизм реализуется с помощью виртуальных функций с помощью механизма наследования.

Лекция 8-3

Page 64: презентация конспекта лекций

Виртуальный метод

Виртуальные функции объявляются с помощью ключевого слова virtual. Это слово при объявлении функции определяет для нее механизм позднего связывания. Виртуальными могут быть только не статические функции-члены, так как характеристика virtual наследуется.

Лекция 8-4

Page 65: презентация конспекта лекций

Абстрактный метод

При разработке коллективного проекта, или создании библиотек классов, бывает на начальном этапе неясно, как реализовать методы. Поэтому создаются базовые классы, содержащие абстрактные методы, то есть методы, не имеющие тела (кода); При объявлении абстрактного метода используется модификатор abstract. Абстрактный метод автоматически становится виртуальным.

Лекция 8-5

Page 66: презентация конспекта лекций

Переопределение виртуальных и абстрактный

методовФункция, объявленная в производном классе, переопределяет виртуальную функцию в базовом классе только тогда, когда имеет модификатор override, то же имя и работает с тем же количеством и типом аргументов, что и виртуальные функции базового класса. Если они отличаются хоть одним аргументом, то функция в производном классе считается совершенно другой (новой) и переопределения не происходит.

Лекция 8-6

Page 67: презентация конспекта лекций

Абстрактный класс

Класс, содержащий один или более методов abstract, также должен быть объявлен как абстрактный (с модификатором abstract). Абстрактные классы создаются для нужд производных классов. Поскольку абстрактный класс не определен полностью, объекты этого класса создать невозможно.

Лекция 8-7

Page 68: презентация конспекта лекций

Интерфейс

Если в абстрактном классе объявить только абстрактные функции, то можно полностью отделить интерфейс всего класса от реализации самого класса. Будет ли это реализовано в абстрактном классе или нет, в общем, то зависит от дисциплины программиста, или будем говорить, от его желания.

Лекция 9-1

Page 69: презентация конспекта лекций

Интерфейс

Интерфейсы подобны абстрактным классам, но в отличие от них:

Ни при каких условиях не поддерживает реализацию методов (нет тела). По умолчанию в интерфейсе устанавливается спецификация public.

Лекция 9-2

Page 70: презентация конспекта лекций

Интерфейс

Интерфейсы подобны абстрактным классам, но в отличие от них:

Все методы интерфейса являются абстрактными, т.е. чистыми виртуальными функциями. Для интерфейсов в C# разрешено множественное наследование.

Лекция 9-3

Page 71: презентация конспекта лекций

Запрос о реализации интерфейса

Если клиент попытается вызвать метод класса, который в нем не реализован, то произойдет ошибка периода исполнения.

Лекция 9-4

Page 72: презентация конспекта лекций

Запрос о реализации интерфейса

Для того, чтобы избежать такой ситуации можно использовать оператор is, который позволяет проверять во время выполнения совместимость одного типа с другим.

Синтаксис оператора is :

выражение is тип

Лекция 9-5

Page 73: презентация конспекта лекций

Делегаты

Для передачи ссылки на методы в качестве параметров другим методам в язык C# введен новый тип данных – делегат.

Лекция 10-1

Page 74: презентация конспекта лекций

ДелегатыПо своей структуре делегат – это объект, который ссылается на метод, то есть делегат указывает на адрес области памяти, являющейся точкой входа в метод.

Синтаксис объявления события:модификатор_доступа тип delegate

тип_делегата(аргументы);тип_делегата имя = new

тип_делегата(имя_функции);

Лекция 10-2

Page 75: презентация конспекта лекций

Многоадресные делегаты

Делегаты могут хранить несколько адресов областей памяти. То есть делегат может указывать на несколько различных методов. Это позволяет, последовательно инициализируя адреса вызывать метод за методом.

Лекция 10-3

Page 76: презентация конспекта лекций

События

С помощью событий приложения Windows в С# получают уведомление, что что-то произошло.ОС Windows вырабатывает несколько сот сообщений, уведомляющих приложение о происходящем.

Лекция 10-4

Page 77: презентация конспекта лекций

События

Сообщения Windows относятся к низкоуровневым структурам языка С. В С# сообщения ОС оборачиваются высокоуровневым каркасом, в котором события являются объектами, призванными упростить задачу программиста по обработке сообщений Windows.

Лекция 10-5

Page 78: презентация конспекта лекций

Событие

Чтобы создать событие необходимо три составляющих: генератор, издатель и подписчик на событие.

Лекция 11-1

Page 79: презентация конспекта лекций

Исключения

Исключения сигнализируют о возникновении ошибочной ситуации, и содержат информацию, которая может позволить проанализировать возникшую ситуацию и корректно выйти из нее.

Лекция 11-2

Page 80: презентация конспекта лекций

Обработка исключений

В процессе выполнения программы могут возникать серьезные ошибки, которые, если не принять никаких мер, для корректного выхода из ошибочного состояния, могут привести к краху программы.

Лекция 11-3

Page 81: презентация конспекта лекций

Обработка исключений

Обработка ошибок исполнения программы

осуществляется с помощью исключений.

Лекция 11-4

Page 82: презентация конспекта лекций

Генерация исключений

Генерация исключения осуществляется с помощью ключевого слова throw.

Лекция 11-5

Page 83: презентация конспекта лекций

Генерация исключений

При генерации исключения создается объект исключения – экземпляр класса, производного от базового класса System.Exception.

Лекция 12-1

Page 84: презентация конспекта лекций

Поле

Поле – любые переменные объявленные в классе (член-переменная, содержащая некоторое значение)

Синтаксис объявления метода:

модификатор_доступа тип имя;

Лекция 12-2

Page 85: презентация конспекта лекций

Константы

Константы – поле, объявленное с модификатором const (поле, значение которого изменить нельзя).

Синтаксис объявления констант:

const тип имя;

Лекция 12-3

Page 86: презентация конспекта лекций

Windows-приложение

Пространство имен System. Windows. Forms содержит все классы для создания пользовательских приложений под Windows.

Лекция 12-4

Page 87: презентация конспекта лекций

Windows-приложение

Каждое приложение Windows представляет собой объект класса, являющийся производным от System. Windows. Forms.Form.

Лекция 12-5

Page 88: презентация конспекта лекций

Использование мастера

Интегрированная рабочая среда Visual Studio.NET поддерживает технологию быстрой разработки приложения – RAD (Rapid Application Development) .

Лекция 13-1

Page 89: презентация конспекта лекций

Технология быстрой разработки приложений

RAD Создание элементов управления и задание их

свойств При определении свойств объекта мастер

приложения добавляет для каждого элемента управления свойство TabIndex

В классе формы мастером создается закрытый объект контейнерного типа

Лекция 13-2

Page 90: презентация конспекта лекций

Технология быстрой разработки приложений

RAD Мастер приложения в классе формы

производит переопределение виртуальной функции Dispose() базового класса

Добавление элементов на форму осуществляется путем вызова функции Controls.AddRange()

Лекция 13-3

Page 91: презентация конспекта лекций

Объекты управления

C# содержит богатый набор объектов управления, таких как кнопки, выпадающие списки, текстовые редакторы и т.д., для проектирования полноценного интерфейса пользователя.

Лекция 13-4

Page 92: презентация конспекта лекций

События

События – являются членами класса, позволяющие объекту класса информировать клиента класса об изменениях (событиях), произошедших при выполнении кода.

Синтаксис объявления события:модификатор_доступа тип delegate

тип_делегата(аргументы);модификатор_доступа event тип_делегата

имя_события;

Лекция 13-5

Page 93: презентация конспекта лекций

Модификаторы доступаpublic – общедоступный (доступ вне класса)

protected – защищенный член, к нему могут обращаться только члены данного класса и производных от него классов

private – член доступен только членам данного класса (производным классам он не доступен)

internal – член доступен только в пределах данной сборки и нигде больше

Лекция 13-6

Page 94: презентация конспекта лекций

Графические примитивы

точки (координат) − Point и PointF размера − Size и SizeF прямоугольных областей − Rectangle и RectangleF.

Лекция 14-1

Page 95: презентация конспекта лекций

Структура Size

Структура Size предназначена для хранения ширины и высоты объекта и имеет, для этого, соответствующие открытые свойства Width и Height, доступные как для записи, так и для чтения. Для создания объекта Size с нулевыми значениями Width и Height с помощью конструктора по умолчанию, используется следующую запись:

Size sz = new Size();

Лекция 14-2

Page 96: презентация конспекта лекций

Структура Point

Структура Point содержит открытые свойства X и Y целого типа, доступные, как для записи, так и для чтения.

Для создания точки “pt” можно использовать конструктор по умолчанию:

Point pt = new Point();

Лекция 14-3

Page 97: презентация конспекта лекций

Структура Rectangle

Структура предназначена для определения координат и размера прямоугольника. Для хранения и изменения координат используются свойства, доступные для записи и чтения.

Лекция 14-4

Page 98: презентация конспекта лекций

Представление цвета

Представление цвета осуществляется с помощью экземпляров структуры System.Drawing.Color. Для задания цвета используется статический метод класса:

public static Color.FromArgb( int red, int green, int blue);

Лекция 14-5

Page 99: презентация конспекта лекций

Кисти

Кисти описываются объектами классов, производных от класса System.Drawing.Brush. Класс Brush является абстрактным классом, то есть нельзя создать объект этого класса. Сплошные кисти создаются как экземпляры класса System.Drawing.SolidBrush, например:

Brush br2 = new SolidBrush(Color.Magenta);Brush br3 = new

SolidBrush(Color.FromArgb(200,10,120));

Лекция 14-6

Page 100: презентация конспекта лекций

Перья

Перья описываются классом System.Drawing.Pen. В классе System.Drawing.Pens содержится множество статических свойств, описывающих перья с интернет цветом и толщиной в один пиксель. Создание таких перьев выглядит следующим образом:

Pen pn6 = Pens.Brown; Pen pn7 = Pens.Magenta;

Лекция 14-7

Page 101: презентация конспекта лекций

Интерфейс GDI+

Разработчики среды .NET - предлагают новый интерфейс графического устройства - GDI+. GDI+ - представляет по сути дела объектно-ориентированную оболочку GDI с новыми свойствами и при этом, если верить заявлению компании Microsoft, удалось повысить быстродействие системы.

Лекция 15-1

Page 102: презентация конспекта лекций

Рисование линий и фигур

Контекст устройства в среде .NET инкапсулирован («завернут») в базовом классе System.Drawing.Graphics. Для создания объекта класса Graphics необходимо использовать метод CreateGraphics(), возвращающий ссылку на объект класса Graphics и затем через данный объект рисовать объекты:

Graphics dc = CreateGraphics();dc.DrawRectangle(Pens.OrangeRed,5,10,25,45);

Лекция 15-2

Page 103: презентация конспекта лекций

Рисование текста

Для рисования текста используют перегруженный метод DrawString.Для вывода текста необходимо задать тип и размер шрифта, кисть и координаты текста. Например:

Font fnt = new Font("Arial",10); //Шрифт Arial, размер 10

dc.DrawString("Привет!",fnt, Brushes.Green,10,20);

Лекция 15-3

Page 104: презентация конспекта лекций

Рисование изображений

Вывод изображений осуществяется с помощью класса Image:

Graphics g = e.Graphics;Image curImage = Image.FromFile("имя_изображения");g.DrawImage(curImage, 10, 10);

Лекция 15-4

Page 105: презентация конспекта лекций

Рисование анимации

Для вывода анимаций использется класс Animate и Image. Создается объект класса Image, в который загружается GIF изображение. Далее с помощью встроенных событий смены кадра происходит перерисовка изображения.

Лекция 15-5

Page 106: презентация конспекта лекций

Перерисовка приложения

Восстановлением графики и текста должно заниматься само приложение. Операционная система в необходимых случаях вырабатывает сообщение (событие Paint), которое «говорит», что окно приложения не корректно и его необходимо перерисовать. Перерисовка окна должна происходить по событию Paint.

Лекция 15-6

Page 107: презентация конспекта лекций

Потоки

Выполнение кода в С# всегда начинается с метода Main. Метод Main - образует главный поток приложения. Поток представляет собой последовательность операций исполняемых в программе. Главный поток может запустить несколько подчиненных или говорят рабочих потоков.

Лекция 16-1

Page 108: презентация конспекта лекций

Потоки

Многопоточная система инкапсулирована в класс Thread. Данный класс объявлен как запечатанный (sealed) класс, то есть от него нельзя породить новый класс. В классе Thread определено ряд свойств и методов для управления потоками.

Лекция 16-2

Page 109: презентация конспекта лекций

Создание потока

Для создания потока необходимо создать объект класса Thread.

Один из конструкторов этого класса имеет

следующий вид:

public Thread ( ThreadStart start)

Лекция 16-3

Page 110: презентация конспекта лекций

Приоритеты потоков

Каждый поток имеет определенный приоритет. Потоки с более высоким приоритетом имеют преимущество перед другими потоками и могут полностью блокировать работу потоков с более низкими приоритетами. Приоритет потока можно прочитать или изменить с помощью свойства Priority, которое является членом класса Thread.

Лекция 16-4

Page 111: презентация конспекта лекций

Остановка и возобновление потока

Запущенный на выполнение поток может быть остановлен путем вызова метода Suspend(), а возобновление выполнения – путем вызова метода Resume()

Лекция 16-5

Page 112: презентация конспекта лекций

Синхронизация потоков

Синхронизацией работы потоков называется обеспечение корректной работы нескольких потоков с общими (разделяемыми) данными или ресурсами.

Лекция 17-1

Page 113: презентация конспекта лекций

Синхронизация потоков

Синхронизация обеспечивается путем организации монопольного доступа одного из потоков на время работы с разделяемыми ресурсами, и блокирования доступа к разделяемым ресурсам на это время со стороны других потоков.

Лекция 17-2

Page 114: презентация конспекта лекций

Синхронизация потоков

В основе синхронизации лежит понятие блокировки, т.е. управление доступом к некоторому блоку кода в объекте. На то время, когда объект заблокирован одним потоком, никакой другой поток не может получить доступ к блоку кода для работы с этим объектом.

Лекция 17-3

Page 115: презентация конспекта лекций

Класс Interlocked

Класс Interlocked предназначен для организации неделимых операций, таких как сложение, увеличение на единицу, уменьшение на единицу, сравнение и других. Для этого в этом классе определено ряд статических методов.

Лекция 17-4

Page 116: презентация конспекта лекций

Класс Monitor

В классе Monitor определено несколько статических методов для организации синхронизации. Для блокировки некоторого объекта, необходимо вызвать метод Enter (), а чтобы снять блокировку — метод Exit ().

Лекция 17-5