SlideShare une entreprise Scribd logo
1  sur  116
Объектно-ориентированное
программирование

Вафин Р.Р.,Медведев В.И.
Лекция 1-1

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

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

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

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

C#

C++

C
Лекция 1-4

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

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



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



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



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



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



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

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

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

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

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

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

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

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

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

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

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

Лекция 1-12

1. Подготовка исходного
текста программы
2. Компиляция в
промежуточный язык MSIL
3. Загрузка и анализ сборки
средой CLR
4. Компиляция сборки
компилятором JIT
5. Запуск сборщика «мусора»
Лекция 1-13

Подготовка исходного текста
программы
Проверка и анализ синтаксиса текста
программы.
Лекция 1-14

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

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

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

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

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

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

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

Лекция 1-18

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

Лекция 1-19

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

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

Принципы ООП


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



Полиморфизм



Инкапсуляция
Лекция 2-2

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

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

Полиморфизм
Полиморфизм — свойство кода ООП вести
себя по разному в зависимости от ситуации,
возникающей в момент выполенния
программы.
Различают:

Специальный полиморфизм

Чистый полиморфизм
Лекция 2-4

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

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

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

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

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

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

Перечисления
Лекция 3-1

Пользовательские типы
Пользовательские типы по значению – это
структуры.
В C# структура это особый вид класса, который
имеет

тип

по

значению,

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

т.е.

экземпляр
Лекция 3-2

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

Указатели

Самоописывающиеся типы

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

Делегаты

Классы

Интерфейсы

массивы

Упакованные типы по значению
Лекция 3-3

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

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

Классы
Классы
абстрактный
тип
определяемый пользователем.
Синтаксис объявления класса:
class имя_типа
{
// члены данные
// члены функции
}

данных,
Лекция 3-5

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

Поле



Константы



События
Лекция 4-1

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

Методы



Конструктор



Деструктор



Свойства



Массивы



Индексаторы
Лекция 4-2

Метод
Метод — функция общего назначения.
Различают:

Методы с параметрами (модификаторы ref,
out)

Метод с переменными параметрами

Статические методы

Перегруженные методы

Сокрытые методы

Виртуальные методы

Абстрактные методы
Лекция 4-3

Метод с параметрами
Методы – аналогичны функциям языка С и
синтаксически объявляются так же:
модификатор_доступа
имя_метода(список
параметров)
{
…//тело метода
}

тип_значения
принимаемых
Лекция 4-4

Метод с параметрами
Часто необходимо, чтобы метод возвращал
более одного значения. В C# для этого
используются ключевые слова ref и out:
модификатор_доступа
тип_значения
имя_метода(ref тип объект1, out тип объект2)
{
…//тело метода
}
Метод с переменными
параметрами

Лекция 4-5

Метод с переменными параметрами – метод,
коорому можно передавать произвольное
количество объектов указанного типа.
Компилятор сформирует из них массив,
который и передаст в метод. Внутри метода
все параметры будут видны как массив.
модификатор_доступа
тип_значения
имя_метода(param тип[] имя)
{
…//тело метода
}
Лекция 4-6

Статический метод
Статически объявленные функции (методы)
считаются связанными с классом, а не с
объектом этого класса.
static
модификатор_доступа
тип_значения
имя_метода(список
принимаемых
параметров)
{
…//тело метода
}
Лекция 4-7

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

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

Статически объявленные методы не могут
быть вызваны как методы экземпляра класса.

Лекция 4-8

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

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

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

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

функция

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

для
Лекция 4-11

Конструктор по умолчанию
Конструктор, объявленный без аргументов,
называется конструктором по умолчанию.
Если в классе программистом не определен
конструктор по умолчанию, то, в отсутствии
других конструкторов, компилятор создает
его сам.
Пример конструктора:
class CA{
public CA()
{ //Тело конструктора
}}
Лекция 5-1

Статический конструктор
Статистический
конструктор
не
имеет
спецификации доступа, так как он никогда не
вызывается кодом C#, а только самой средой
исполнения .NET, и вызывается он только
один раз, до создания какого-либо экземпляра
класса.
Пример конструктора:
class CA
{ static public CA()
{ //Тело конструктора
}}
Лекция 5-2

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

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

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

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

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

Лекция 6-1

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

Деструктор
Деструктор – специальная функция для
принудительного освобождения полей класса.
Вызывается при завершении работы с объектом
класса для освобождения системных ресурсов.
Лекция 6-3

Свойства
Свойства— специфические методы класса
Объявление свойства:
модификатор_доступа тип имя_свойства
{
get{
return значение_переменной;
}
set{
значение_переменной = value;
}}
Лекция 6-4

Массивы
Массивы – объекты класса, создание которых
производится точно так же, как и объектов
ссылочного типа.
Различают:

Одномерные массивы

Многомерные массивы

Невыровненные массивы
Лекция 6-5

Одномерный массив
Поскольку массивы – это объекты класса, то их
создание производится точно так же, как и
объектов ссылочного типа.
Синтакси объявления массива:
тип[] имя;
имя = new тип[размер];
или, что - то же самое:
тип[] имя = new тип[размер];
Лекция 6-6

Многомерный массив
При объявлении многомерного массива в С# в
квадратных скобках через запятую перечисляют
размерность каждого измерения массива,
например:
float [, ,] ms = new float[3,2,2];
Лекция 6-7

Невыровненный массив
Не выровненный массив – это внешний массив,
состоящий из внутренних массивов разной
длины:
тип[][] имя = new тип[размер][];
Лекция 7-1

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

модификатор_доступа тип this[типимя_индекса]
{
get {
//Возврат необходиммых данных
}
set {
//Установка необходиммых данных
}
}
Лекция 7-2

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

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

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

class CB

class CD

Порядок
вызовов
конструкторов
при
наследовании
Лекция 7-4

Изолированный класс
Классы, от которых запрещено наследовать,
называются
запечатанными
или
изолированными классами.
Изолировать класс можно с помощью ключевого
слова sealed.
Например:
sealed class CM
{
//Тело класса
}
Лекция 7-5

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

Полиморфизм
Полиморфизм — свойство кода ООП вести
себя по разному в зависимости от ситуации,
возникающей в момент выполенния
программы.
Различают:

Специальный полиморфизм

Чистый полиморфизм
Лекция 8-2

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

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

с
Лекция 8-3

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

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

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

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

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

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

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

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

Интерфейс
Интерфейсы подобны абстрактным классам, но в
отличие от них:
Ни при каких условиях не поддерживает
реализацию методов (нет тела).

По умолчанию в интерфейсе устанавливается
спецификация public.

Лекция 9-3

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

Лекция 9-4

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

Лекция 9-5

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

тип
Лекция 10-1

Делегаты

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

Делегаты
По своей структуре делегат – это объект,
который ссылается на метод, то есть делегат
указывает на адрес области памяти, являющейся
точкой входа в метод.
Синтаксис объявления события:
модификатор_доступа
тип
тип_делегата(аргументы);
тип_делегата
имя
=
тип_делегата(имя_функции);

delegate
new
Лекция 10-3

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

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

События

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

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

Событие

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

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

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

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

Обработка ошибок исполнения программы
осуществляется с помощью исключений.
Лекция 11-5

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

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

с
Лекция 12-1

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

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

Поле
Поле – любые переменные объявленные в
классе
(член-переменная,
содержащая
некоторое значение)
Синтаксис объявления метода:
модификатор_доступа тип имя;
Лекция 12-3

Константы
Константы –
поле, объявленное с
модификатором
const
(поле,
значение
которого изменить нельзя).
Синтаксис объявления констант:
const тип имя;
Лекция 12-4

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

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

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

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

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

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





Создание элементов управления и задание их
свойств
При определении свойств объекта мастер
приложения добавляет для каждого элемента
управления свойство TabIndex
В классе формы мастером создается закрытый
объект контейнерного типа
Лекция 13-3

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



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

форму
функции
Лекция 13-4

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

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

События
События – являются членами класса,
позволяющие объекту класса информировать
клиента класса об изменениях (событиях),
произошедших при выполнении кода.
Синтаксис объявления события:
модификатор_доступа
тип
delegate
тип_делегата(аргументы);
модификатор_доступа
event
тип_делегата
имя_события;
Лекция 13-6

Модификаторы доступа
public – общедоступный (доступ вне класса)
protected – защищенный член, к нему могут
обращаться только члены данного класса
и производных от него классов
private – член доступен только членам
данного класса (производным классам он
не доступен)
internal – член доступен только в пределах
данной сборки и нигде больше
Лекция 14-1

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

точки (координат) − Point и PointF



размера − Size и SizeF

прямоугольных областей − Rectangle и
RectangleF.

Лекция 14-2

Структура Size
Структура Size предназначена для хранения
ширины и высоты объекта и имеет, для этого,
соответствующие открытые свойства Width и
Height, доступные как для записи, так и для
чтения. Для создания объекта Size с нулевыми
значениями Width и Height с помощью
конструктора по умолчанию, используется
следующую запись:
Size sz = new Size();
Лекция 14-3

Структура Point
Структура Point содержит открытые свойства X
и Y целого типа, доступные, как для записи, так
и для чтения.
Для создания точки “pt” можно
использовать конструктор по умолчанию:
Point pt = new Point();
Лекция 14-4

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

Представление цвета
Представление цвета осуществляется с помощью
экземпляров структуры System.Drawing.Color.
Для задания цвета используется статический
метод класса:
public static Color.FromArgb( int red, int green, int
blue);
Лекция 14-6

Кисти
Кисти
описываются
объектами
классов,
производных от класса System.Drawing.Brush.
Класс Brush является абстрактным классом, то
есть нельзя создать объект этого класса.
Сплошные кисти создаются как экземпляры
класса System.Drawing.SolidBrush, например:
Brush br2 = new SolidBrush(Color.Magenta);
Brush
br3
=
new
SolidBrush(Color.FromArgb(200,10,120));
Лекция 14-7

Перья
Перья
описываются
классом
System.Drawing.Pen.
В
классе
System.Drawing.Pens содержится множество
статических свойств, описывающих перья с
интернет цветом и толщиной в один пиксель.
Создание таких перьев выглядит следующим
образом:
Pen pn6 = Pens.Brown;
Pen pn7 = Pens.Magenta;
Лекция 15-1

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

Рисование линий и фигур
Контекст
устройства
в
среде
.NET
инкапсулирован («завернут») в базовом классе
System.Drawing.Graphics. Для создания объекта
класса
Graphics необходимо использовать
метод CreateGraphics(), возвращающий ссылку
на объект класса Graphics и затем через данный
объект рисовать объекты:
Graphics dc = CreateGraphics();
dc.DrawRectangle(Pens.OrangeRed,5,10,25,45);
Лекция 15-3

Рисование текста
Для
рисования
текста
используют
перегруженный метод DrawString.Для вывода
текста необходимо задать тип и размер шрифта,
кисть и координаты текста. Например:
Font fnt = new Font("Arial",10); //Шрифт
Arial, размер 10
dc.DrawString("Привет!",fnt,
Brushes.Green,10,20);
Лекция 15-4

Рисование изображений
Вывод изображений осуществяется с помощью
класса Image:
Graphics g = e.Graphics;
Image
curImage
Image.FromFile("имя_изображения");
g.DrawImage(curImage, 10, 10);

=
Лекция 15-5

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

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

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

Потоки

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

Создание потока
Для создания потока необходимо создать объект
класса Thread.
Один из конструкторов этого класса имеет
следующий вид:
public Thread ( ThreadStart start)
Лекция 16-4

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

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

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

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

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

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

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

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

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

Класс Interlocked

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

Класс Monitor

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

Contenu connexe

Tendances

Java Core. Lecture# 1. Intro
Java Core. Lecture# 1. IntroJava Core. Lecture# 1. Intro
Java Core. Lecture# 1. IntroAnton Moiseenko
 
C++ осень 2013 лекция 8
C++ осень 2013 лекция 8C++ осень 2013 лекция 8
C++ осень 2013 лекция 8Technopark
 
C++ осень 2013 лекция 3
C++ осень 2013 лекция 3C++ осень 2013 лекция 3
C++ осень 2013 лекция 3Technopark
 
Java core-lect6-part3-annotation.ppt
Java core-lect6-part3-annotation.pptJava core-lect6-part3-annotation.ppt
Java core-lect6-part3-annotation.pptAnton Moiseenko
 
Java Core. Lecture# 2. Classes & objects.
Java Core. Lecture# 2. Classes & objects.Java Core. Lecture# 2. Classes & objects.
Java Core. Lecture# 2. Classes & objects.Anton Moiseenko
 
Java Core. Lecture# 3. Part# 1. Abstract classes.
Java Core. Lecture# 3. Part# 1. Abstract classes.Java Core. Lecture# 3. Part# 1. Abstract classes.
Java Core. Lecture# 3. Part# 1. Abstract classes.Anton Moiseenko
 
C++ весна 2014 лекция 5
C++ весна 2014 лекция 5C++ весна 2014 лекция 5
C++ весна 2014 лекция 5Technopark
 
Custom Language Plugin for JetBrains IDEA
Custom Language Plugin for JetBrains IDEACustom Language Plugin for JetBrains IDEA
Custom Language Plugin for JetBrains IDEAAlexander Zastashkov
 
C++ осень 2012 лекция 6
C++ осень 2012 лекция 6C++ осень 2012 лекция 6
C++ осень 2012 лекция 6Technopark
 
C++ осень 2013 лекция 4
C++ осень 2013 лекция 4C++ осень 2013 лекция 4
C++ осень 2013 лекция 4Technopark
 
Java core-lect6-part2-reflection-api.ppt
Java core-lect6-part2-reflection-api.pptJava core-lect6-part2-reflection-api.ppt
Java core-lect6-part2-reflection-api.pptAnton Moiseenko
 
C++ STL & Qt. Занятие 09.
C++ STL & Qt. Занятие 09.C++ STL & Qt. Занятие 09.
C++ STL & Qt. Занятие 09.Igor Shkulipa
 
C++ осень 2013 лекция 1
C++ осень 2013 лекция 1C++ осень 2013 лекция 1
C++ осень 2013 лекция 1Technopark
 

Tendances (19)

Java Core. Lecture# 1. Intro
Java Core. Lecture# 1. IntroJava Core. Lecture# 1. Intro
Java Core. Lecture# 1. Intro
 
C++ осень 2013 лекция 8
C++ осень 2013 лекция 8C++ осень 2013 лекция 8
C++ осень 2013 лекция 8
 
C++ осень 2013 лекция 3
C++ осень 2013 лекция 3C++ осень 2013 лекция 3
C++ осень 2013 лекция 3
 
Java core-lect6-part3-annotation.ppt
Java core-lect6-part3-annotation.pptJava core-lect6-part3-annotation.ppt
Java core-lect6-part3-annotation.ppt
 
Java Core. Lecture# 2. Classes & objects.
Java Core. Lecture# 2. Classes & objects.Java Core. Lecture# 2. Classes & objects.
Java Core. Lecture# 2. Classes & objects.
 
Java Core. Lecture# 3. Part# 1. Abstract classes.
Java Core. Lecture# 3. Part# 1. Abstract classes.Java Core. Lecture# 3. Part# 1. Abstract classes.
Java Core. Lecture# 3. Part# 1. Abstract classes.
 
Наследование и полиморфизм
Наследование и полиморфизмНаследование и полиморфизм
Наследование и полиморфизм
 
модуль 04
модуль 04модуль 04
модуль 04
 
C++ весна 2014 лекция 5
C++ весна 2014 лекция 5C++ весна 2014 лекция 5
C++ весна 2014 лекция 5
 
Custom Language Plugin for JetBrains IDEA
Custom Language Plugin for JetBrains IDEACustom Language Plugin for JetBrains IDEA
Custom Language Plugin for JetBrains IDEA
 
C++ осень 2012 лекция 6
C++ осень 2012 лекция 6C++ осень 2012 лекция 6
C++ осень 2012 лекция 6
 
C++ осень 2013 лекция 4
C++ осень 2013 лекция 4C++ осень 2013 лекция 4
C++ осень 2013 лекция 4
 
Java core-lect6-part2-reflection-api.ppt
Java core-lect6-part2-reflection-api.pptJava core-lect6-part2-reflection-api.ppt
Java core-lect6-part2-reflection-api.ppt
 
C# programming
C# programmingC# programming
C# programming
 
лек5 6
лек5 6лек5 6
лек5 6
 
C++ STL & Qt. Занятие 09.
C++ STL & Qt. Занятие 09.C++ STL & Qt. Занятие 09.
C++ STL & Qt. Занятие 09.
 
C++ осень 2013 лекция 1
C++ осень 2013 лекция 1C++ осень 2013 лекция 1
C++ осень 2013 лекция 1
 
Составные части объектного подхода
Составные части объектного подходаСоставные части объектного подхода
Составные части объектного подхода
 
Интерфейсы
ИнтерфейсыИнтерфейсы
Интерфейсы
 

En vedette

лекции презентации
лекции презентациилекции презентации
лекции презентацииZhanna Kazakova
 
Презентация курса "Основы программирования" на C#
Презентация курса "Основы программирования" на C#Презентация курса "Основы программирования" на C#
Презентация курса "Основы программирования" на C#Vadim Martynov
 
курсовая работа
курсовая работакурсовая работа
курсовая работаstudent_kai
 
лабораторная работа № 3
лабораторная работа № 3лабораторная работа № 3
лабораторная работа № 3student_kai
 
презентация 19
презентация 19презентация 19
презентация 19student_kai
 
лекция 11 управление релизами-ч1
лекция 11 управление релизами-ч1лекция 11 управление релизами-ч1
лекция 11 управление релизами-ч1student_kai
 
презентация
презентацияпрезентация
презентацияstudent_kai
 
лабораторная работа №2
лабораторная работа №2лабораторная работа №2
лабораторная работа №2student_kai
 
лабораторная работа № 7
лабораторная работа № 7лабораторная работа № 7
лабораторная работа № 7student_kai
 
презентация лекции №13
презентация лекции №13презентация лекции №13
презентация лекции №13student_kai
 

En vedette (20)

лекции презентации
лекции презентациилекции презентации
лекции презентации
 
Презентация курса "Основы программирования" на C#
Презентация курса "Основы программирования" на C#Презентация курса "Основы программирования" на C#
Презентация курса "Основы программирования" на C#
 
лекция2
лекция2лекция2
лекция2
 
курсовая работа
курсовая работакурсовая работа
курсовая работа
 
лабораторная работа № 3
лабораторная работа № 3лабораторная работа № 3
лабораторная работа № 3
 
презентация 19
презентация 19презентация 19
презентация 19
 
п2 13
п2 13п2 13
п2 13
 
лекция 4
лекция 4лекция 4
лекция 4
 
лекция 4
лекция 4лекция 4
лекция 4
 
лекция 11 управление релизами-ч1
лекция 11 управление релизами-ч1лекция 11 управление релизами-ч1
лекция 11 управление релизами-ч1
 
презентация
презентацияпрезентация
презентация
 
модуль 4
модуль 4модуль 4
модуль 4
 
лабораторная работа №2
лабораторная работа №2лабораторная работа №2
лабораторная работа №2
 
лек4
лек4лек4
лек4
 
лабораторная работа № 7
лабораторная работа № 7лабораторная работа № 7
лабораторная работа № 7
 
лекция 6
лекция 6лекция 6
лекция 6
 
Eiep mod10
Eiep mod10Eiep mod10
Eiep mod10
 
лекция 13
лекция 13лекция 13
лекция 13
 
лекция 4
лекция 4лекция 4
лекция 4
 
презентация лекции №13
презентация лекции №13презентация лекции №13
презентация лекции №13
 

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

Inroducing SAP ABAP - Presentation with basics SAP ABAP
Inroducing SAP ABAP - Presentation with basics SAP ABAPInroducing SAP ABAP - Presentation with basics SAP ABAP
Inroducing SAP ABAP - Presentation with basics SAP ABAPmikhailshurgulaya
 
массивы Php
массивы Phpмассивы Php
массивы PhpVasya Petrov
 
Глава 2: Среда разработки NetBeans
Глава 2: Среда разработки NetBeansГлава 2: Среда разработки NetBeans
Глава 2: Среда разработки NetBeansmetaform
 
C++ осень 2012 лекция 1
C++ осень 2012 лекция 1C++ осень 2012 лекция 1
C++ осень 2012 лекция 1Technopark
 
презентация кметодическим указаниям к лаб. работам
презентация кметодическим указаниям к лаб. работампрезентация кметодическим указаниям к лаб. работам
презентация кметодическим указаниям к лаб. работамstudent_kai
 
Алексей Иванов -- курс по стыку системной и программной инженерий
Алексей Иванов -- курс по стыку системной и программной инженерийАлексей Иванов -- курс по стыку системной и программной инженерий
Алексей Иванов -- курс по стыку системной и программной инженерийAnatoly Levenchuk
 
Как пройти собеседование и получить первую работу на Swift
Как пройти собеседование и получить первую работу на SwiftКак пройти собеседование и получить первую работу на Swift
Как пройти собеседование и получить первую работу на SwiftAnton Loginov
 
основы ооп на языке C#. часть 1. введение в программирование
основы ооп на языке C#. часть 1. введение в программированиеосновы ооп на языке C#. часть 1. введение в программирование
основы ооп на языке C#. часть 1. введение в программированиеYakubovichDA
 
DBD lection 1. Intro in Database Design. In Russian.
DBD lection 1. Intro in Database Design. In Russian.DBD lection 1. Intro in Database Design. In Russian.
DBD lection 1. Intro in Database Design. In Russian.mikhaelsmirnov
 
9 структура компонентных приложений
9 структура компонентных приложений9 структура компонентных приложений
9 структура компонентных приложенийKewpaN
 
Moodle с точки зрения пользователя и программиста
Moodle с точки зрения пользователя и программистаMoodle с точки зрения пользователя и программиста
Moodle с точки зрения пользователя и программистаIgor Sazonov
 
Презентация Игоря Сазонова на IT Global Meetup #5
Презентация Игоря Сазонова на IT Global Meetup #5Презентация Игоря Сазонова на IT Global Meetup #5
Презентация Игоря Сазонова на IT Global Meetup #5Lilia Smirnova
 
Общие темы. Тема 02.
Общие темы. Тема 02.Общие темы. Тема 02.
Общие темы. Тема 02.Igor Shkulipa
 
Android - 02 - annotations, exceptions, io, generics
Android - 02 - annotations, exceptions, io, genericsAndroid - 02 - annotations, exceptions, io, generics
Android - 02 - annotations, exceptions, io, genericsNoveo
 
Конспект лекций по курсу "Шаблоны разработки ПО"
Конспект лекций по курсу "Шаблоны разработки ПО"Конспект лекций по курсу "Шаблоны разработки ПО"
Конспект лекций по курсу "Шаблоны разработки ПО"Sergey Nemchinsky
 

Similaire à презентация конспекта лекций (20)

Inroducing SAP ABAP - Presentation with basics SAP ABAP
Inroducing SAP ABAP - Presentation with basics SAP ABAPInroducing SAP ABAP - Presentation with basics SAP ABAP
Inroducing SAP ABAP - Presentation with basics SAP ABAP
 
массивы Php
массивы Phpмассивы Php
массивы Php
 
Глава 2: Среда разработки NetBeans
Глава 2: Среда разработки NetBeansГлава 2: Среда разработки NetBeans
Глава 2: Среда разработки NetBeans
 
C++ осень 2012 лекция 1
C++ осень 2012 лекция 1C++ осень 2012 лекция 1
C++ осень 2012 лекция 1
 
Genome
GenomeGenome
Genome
 
презентация кметодическим указаниям к лаб. работам
презентация кметодическим указаниям к лаб. работампрезентация кметодическим указаниям к лаб. работам
презентация кметодическим указаниям к лаб. работам
 
Алексей Иванов -- курс по стыку системной и программной инженерий
Алексей Иванов -- курс по стыку системной и программной инженерийАлексей Иванов -- курс по стыку системной и программной инженерий
Алексей Иванов -- курс по стыку системной и программной инженерий
 
Как пройти собеседование и получить первую работу на Swift
Как пройти собеседование и получить первую работу на SwiftКак пройти собеседование и получить первую работу на Swift
Как пройти собеседование и получить первую работу на Swift
 
основы ооп на языке C#. часть 1. введение в программирование
основы ооп на языке C#. часть 1. введение в программированиеосновы ооп на языке C#. часть 1. введение в программирование
основы ооп на языке C#. часть 1. введение в программирование
 
A2
A2A2
A2
 
DBD lection 1. Intro in Database Design. In Russian.
DBD lection 1. Intro in Database Design. In Russian.DBD lection 1. Intro in Database Design. In Russian.
DBD lection 1. Intro in Database Design. In Russian.
 
9 структура компонентных приложений
9 структура компонентных приложений9 структура компонентных приложений
9 структура компонентных приложений
 
Step 1
Step 1Step 1
Step 1
 
Symfony 3
Symfony 3Symfony 3
Symfony 3
 
Dotnet
DotnetDotnet
Dotnet
 
Moodle с точки зрения пользователя и программиста
Moodle с точки зрения пользователя и программистаMoodle с точки зрения пользователя и программиста
Moodle с точки зрения пользователя и программиста
 
Презентация Игоря Сазонова на IT Global Meetup #5
Презентация Игоря Сазонова на IT Global Meetup #5Презентация Игоря Сазонова на IT Global Meetup #5
Презентация Игоря Сазонова на IT Global Meetup #5
 
Общие темы. Тема 02.
Общие темы. Тема 02.Общие темы. Тема 02.
Общие темы. Тема 02.
 
Android - 02 - annotations, exceptions, io, generics
Android - 02 - annotations, exceptions, io, genericsAndroid - 02 - annotations, exceptions, io, generics
Android - 02 - annotations, exceptions, io, generics
 
Конспект лекций по курсу "Шаблоны разработки ПО"
Конспект лекций по курсу "Шаблоны разработки ПО"Конспект лекций по курсу "Шаблоны разработки ПО"
Конспект лекций по курсу "Шаблоны разработки ПО"
 

Plus de student_kai

презентация
презентацияпрезентация
презентацияstudent_kai
 
презентации продолжение банкета
презентации продолжение банкетапрезентации продолжение банкета
презентации продолжение банкетаstudent_kai
 
основы программирования на языке C
основы программирования на языке Cосновы программирования на языке C
основы программирования на языке Cstudent_kai
 
презентация курсовой работы
презентация курсовой работыпрезентация курсовой работы
презентация курсовой работыstudent_kai
 
лекция№34
лекция№34лекция№34
лекция№34student_kai
 
лекция№32
лекция№32лекция№32
лекция№32student_kai
 
лекция№33
лекция№33лекция№33
лекция№33student_kai
 
лекция№31
лекция№31лекция№31
лекция№31student_kai
 
лекция№30
лекция№30лекция№30
лекция№30student_kai
 
лекция№29
лекция№29лекция№29
лекция№29student_kai
 
лекция№28
лекция№28лекция№28
лекция№28student_kai
 
лекция№27
лекция№27лекция№27
лекция№27student_kai
 
лекция№26
лекция№26лекция№26
лекция№26student_kai
 
лекция№25
лекция№25лекция№25
лекция№25student_kai
 
лекция№25
лекция№25лекция№25
лекция№25student_kai
 
лекция№24
лекция№24лекция№24
лекция№24student_kai
 
лекция№23
лекция№23лекция№23
лекция№23student_kai
 
лекция№22
лекция№22лекция№22
лекция№22student_kai
 
лекция№21
лекция№21лекция№21
лекция№21student_kai
 
лекция№20
лекция№20лекция№20
лекция№20student_kai
 

Plus de student_kai (20)

презентация
презентацияпрезентация
презентация
 
презентации продолжение банкета
презентации продолжение банкетапрезентации продолжение банкета
презентации продолжение банкета
 
основы программирования на языке C
основы программирования на языке Cосновы программирования на языке C
основы программирования на языке C
 
презентация курсовой работы
презентация курсовой работыпрезентация курсовой работы
презентация курсовой работы
 
лекция№34
лекция№34лекция№34
лекция№34
 
лекция№32
лекция№32лекция№32
лекция№32
 
лекция№33
лекция№33лекция№33
лекция№33
 
лекция№31
лекция№31лекция№31
лекция№31
 
лекция№30
лекция№30лекция№30
лекция№30
 
лекция№29
лекция№29лекция№29
лекция№29
 
лекция№28
лекция№28лекция№28
лекция№28
 
лекция№27
лекция№27лекция№27
лекция№27
 
лекция№26
лекция№26лекция№26
лекция№26
 
лекция№25
лекция№25лекция№25
лекция№25
 
лекция№25
лекция№25лекция№25
лекция№25
 
лекция№24
лекция№24лекция№24
лекция№24
 
лекция№23
лекция№23лекция№23
лекция№23
 
лекция№22
лекция№22лекция№22
лекция№22
 
лекция№21
лекция№21лекция№21
лекция№21
 
лекция№20
лекция№20лекция№20
лекция№20
 

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

  • 2. Лекция 1-1 Причина и цель создания .NET Платформа .NET создана для кроссплатформенности программного обеспечения, разработанного на основе технология .NET
  • 3. Лекция 1-2 Краткая характеристика .NET Платформа .Net в отличие от API- Window, представляющих собой по сути дела набор функций языка C, предлагает разработчику объектно-ориентированную библиотеку классов .Net.
  • 5. Лекция 1-4 Преимущества .NET  Полная поддержка ООП  Языковая независимость  Общая система типов (CTS)  Отказ от применения DLL  Безопасность кода  Встроенные поддержка и создание web-служб
  • 6. Лекция 1-5 Полная поддержка ООП Библиотека .NET является библиотекой классов, а не функций. Это означает, что при использовании библиотеки можно создавать объекты (экземпляры) этих классов, а так же порождать новые классы, используя библиотечные в качестве базовых.
  • 7. Лекция 1-6 Языковая независимость В среде .NET все программы, не зависимо от того, на каком языке они написаны, компилируются в некоторый промежуточный язык Microsoft Intermediate Language (MSIL). Этим самым достигается языковая совместимость на уровне MSIL.
  • 8. Лекция 1-7 Языковая независимость MSIL реализован в принципах классического объектно-ориентированного программирования, допускающего только одиночное наследование. На уровне MSIL возможно осуществить межъязыковое наследование.
  • 9. Лекция 1-8 Общая система типов CTS Общая система типов – Common Type System (CTS) обеспечивает совместимость языков программирования на уровне данных, предоставляя согласованный набор основных типов данных.
  • 10. Лекция 1-9 Отказ от применения DLL DLL в среде .NET заменены сборками. Сборки имеют встроенные средства контроля версий. Различные версии сборок могут сосуществовать совместно. Этим самым исключается так называемый «ад DLL», который заключался в том, что новые версии DLL затирали старые и, в силу не полной совместимости версий DLL, ранее установленные программные продукты переставали работать.
  • 11. Лекция 1-10 Безопасность кода Среда .NET обеспечивает безопасность на уровне кода, строгий контроль типов промежуточного языка позволяет среде .NET перед запуском определить политики безопасности.
  • 12. Лекция 1-11 Встроенные поддержка и создания web-служб Среда .NET имеет встроенную поддержку и создание web-служб, а также встроенную поддержку динамических web-страниц с помощью новых технологий ASP .NET.
  • 13. Процесс выполнения программы Лекция 1-12 1. Подготовка исходного текста программы 2. Компиляция в промежуточный язык MSIL 3. Загрузка и анализ сборки средой CLR 4. Компиляция сборки компилятором JIT 5. Запуск сборщика «мусора»
  • 14. Лекция 1-13 Подготовка исходного текста программы Проверка и анализ синтаксиса текста программы.
  • 15. Лекция 1-14 Компиляция в язык MSIL Исходный текст компилируется в промежуточный низкоуровневый язык MSIL. При этом формируется пакет, состоящий из некоторого числа сборок, одна из которых является исполняемой и содержит точку входа в программу.
  • 16. Лекция 1-15 Компиляция в язык MSIL В других - содержатся библиотечные файлы. Сборки содержат метаданные и код на промежуточном языке. Метаданные включают в себя информацию о типах данных, методах сборки и ХЭШ. ХЭШ содержит информацию о версиях и привилегиях, а так же какие другие сборки будут вызываться этой сборкой.
  • 17. Лекция 1-16 Загрузка и анализ сборки средой CLR Среда CLR загружает сборку, содержащую точку входа в программу и анализирует ХЭШ для проверки целостности сборки и требуемых привилегиях, происходит обращение к политике безопасности системы и учетной записи пользователя.
  • 18. Лекция 1-17 Загрузка и анализ сборки средой CLR CLR осуществляет так же проверку безопасности кода по типу памяти. Т.е. исполняемый код не должен пытаться читать или записывать в область памяти не принадлежащей ему. Если данное требование нарушается, то приложение снимается с выполнения.
  • 19. Компиляция сборки компилятором JIT Лекция 1-18 CLR компилирует с помощью компилятора JIT (Just-in-time) программу на промежуточном языке MSIL в машинный код и запускает ее на выполнение. Причем компилируется только та часть программы, выполнение которой требуется в данный момент времени.
  • 20. Компиляция сборки компилятором JIT Лекция 1-19 Скомпилированный код сохраняется в ОЗУ ЭВМ и при повторном обращении к нему, перекомпиляции не происходит, а, следовательно, не происходи потери производительности, свойственных, например, компилятору-интерпретатору.
  • 21. Лекция 1-20 Запуск сборщика мусора Во время выполнения кода периодически запускается так называемый сборщик мусора, который на основе анализа данных освобождает области памяти из-под объектов, которые больше не используются.
  • 23. Лекция 2-2 Наследование Наследование — способ получение классов (типов) из существующих классов (типов).
  • 24. Лекция 2-3 Полиморфизм Полиморфизм — свойство кода ООП вести себя по разному в зависимости от ситуации, возникающей в момент выполенния программы. Различают:  Специальный полиморфизм  Чистый полиморфизм
  • 25. Лекция 2-4 Инкапсуляция Инкапсуляция — сокрытие информации о деталях и строениях класса или типа. Пользователю предоставляется минимальная и достаточная информация для использования классов.
  • 26. Лекция 2-5 Система типов Систем типов среды .NET подразделяется на систему типов по ссылке и систему типов по значению.
  • 27. Лекция 2-6 Типы по значению типы по значению Встроенные типы по значению Пользовательские типы по значению Перечисления
  • 28. Лекция 3-1 Пользовательские типы Пользовательские типы по значению – это структуры. В C# структура это особый вид класса, который имеет тип по значению, структуры хранится в стеке т.е. экземпляр
  • 29. Лекция 3-2 Типы по ссылке Ссылочные типы Указатели Самоописывающиеся типы Типы с классами Делегаты Классы Интерфейсы массивы Упакованные типы по значению
  • 30. Лекция 3-3 Упакованные типы Преобразование типа по значению, хранящегося в стеке, в ссылочный тип в куче называется упаковкой.
  • 31. Лекция 3-4 Классы Классы абстрактный тип определяемый пользователем. Синтаксис объявления класса: class имя_типа { // члены данные // члены функции } данных,
  • 32. Лекция 3-5 Члены данные класса  Поле  Константы  События
  • 33. Лекция 4-1 Члены функций класса  Методы  Конструктор  Деструктор  Свойства  Массивы  Индексаторы
  • 34. Лекция 4-2 Метод Метод — функция общего назначения. Различают:  Методы с параметрами (модификаторы ref, out)  Метод с переменными параметрами  Статические методы  Перегруженные методы  Сокрытые методы  Виртуальные методы  Абстрактные методы
  • 35. Лекция 4-3 Метод с параметрами Методы – аналогичны функциям языка С и синтаксически объявляются так же: модификатор_доступа имя_метода(список параметров) { …//тело метода } тип_значения принимаемых
  • 36. Лекция 4-4 Метод с параметрами Часто необходимо, чтобы метод возвращал более одного значения. В C# для этого используются ключевые слова ref и out: модификатор_доступа тип_значения имя_метода(ref тип объект1, out тип объект2) { …//тело метода }
  • 37. Метод с переменными параметрами Лекция 4-5 Метод с переменными параметрами – метод, коорому можно передавать произвольное количество объектов указанного типа. Компилятор сформирует из них массив, который и передаст в метод. Внутри метода все параметры будут видны как массив. модификатор_доступа тип_значения имя_метода(param тип[] имя) { …//тело метода }
  • 38. Лекция 4-6 Статический метод Статически объявленные функции (методы) считаются связанными с классом, а не с объектом этого класса. static модификатор_доступа тип_значения имя_метода(список принимаемых параметров) { …//тело метода }
  • 39. Лекция 4-7 Особенность статических методов Статически объявленные методы не должны пытаться получить доступ к не статическим членам класса.  Статически объявленные методы не могут быть вызваны как методы экземпляра класса. 
  • 40. Лекция 4-8 Перегруженный метод В С# можно объявить несколько функций с одинаковыми именами. Функции должны отличаться списком принимаемых параметров. Список может отличаться либо количеством, либо типом либо порядком следования параметров.
  • 41. Лекция 4-9 Перегруженный метод Тип возвращаемого значения функции роли не играет. При вызове функций транслятор по списку параметров определяет, какая именно функция среди одноименных, должна быть вызвана.
  • 42. Лекция 4-10 Конструктор Конструктор – специальная инициализации полей класса. функция Различают:  Конструкторы по умолчанию  Статические конструкторы  Перегруженные конструкторы  Вызов конструктора из конструктора для
  • 43. Лекция 4-11 Конструктор по умолчанию Конструктор, объявленный без аргументов, называется конструктором по умолчанию. Если в классе программистом не определен конструктор по умолчанию, то, в отсутствии других конструкторов, компилятор создает его сам. Пример конструктора: class CA{ public CA() { //Тело конструктора }}
  • 44. Лекция 5-1 Статический конструктор Статистический конструктор не имеет спецификации доступа, так как он никогда не вызывается кодом C#, а только самой средой исполнения .NET, и вызывается он только один раз, до создания какого-либо экземпляра класса. Пример конструктора: class CA { static public CA() { //Тело конструктора }}
  • 45. Лекция 5-2 Конструктор с аргументами Конструктор, принимающий параметры, называется конструктором с аргументами. Конструкторы с аргументами позволяют разные объекты одного и того же класса поразному инициализировать.
  • 46. Лекция 5-3 Конструкторы и поля readonly Классы могут содержать поля только для чтения (readonly). Поле только для чтения – это константное поле, значение которого изменить нельзя. Начальное значение поля только для чтения может быть установлено только внутри конструктора.
  • 47. Лекция 5-4 Перегруженный конструктор В С# можно объявить несколько конструкторов в одном классе. Конструкторы должны отличаться списком принимаемых параметров.
  • 48. Лекция 5-5 Перегруженный конструктор Список может отличаться либо количеством, либо типом либо порядком следования параметров. При вызове конструктора транслятор по списку параметров определяет, какой именно конструктор среди одноименных, должен быть вызван.
  • 49. Вызов конструктора из конструктора Лекция 6-1 Для сокращения повторяющего кода инициализации в C# есть возможность вызова конструктора из другого конструктора. Для этого используются ключевые слова this и base.
  • 50. Лекция 6-2 Деструктор Деструктор – специальная функция для принудительного освобождения полей класса. Вызывается при завершении работы с объектом класса для освобождения системных ресурсов.
  • 51. Лекция 6-3 Свойства Свойства— специфические методы класса Объявление свойства: модификатор_доступа тип имя_свойства { get{ return значение_переменной; } set{ значение_переменной = value; }}
  • 52. Лекция 6-4 Массивы Массивы – объекты класса, создание которых производится точно так же, как и объектов ссылочного типа. Различают:  Одномерные массивы  Многомерные массивы  Невыровненные массивы
  • 53. Лекция 6-5 Одномерный массив Поскольку массивы – это объекты класса, то их создание производится точно так же, как и объектов ссылочного типа. Синтакси объявления массива: тип[] имя; имя = new тип[размер]; или, что - то же самое: тип[] имя = new тип[размер];
  • 54. Лекция 6-6 Многомерный массив При объявлении многомерного массива в С# в квадратных скобках через запятую перечисляют размерность каждого измерения массива, например: float [, ,] ms = new float[3,2,2];
  • 55. Лекция 6-7 Невыровненный массив Не выровненный массив – это внешний массив, состоящий из внутренних массивов разной длины: тип[][] имя = new тип[размер][];
  • 56. Лекция 7-1 Индексаторы Индексаторы – “умные” массивы Объявление индексатора: модификатор_доступа тип this[типимя_индекса] { get { //Возврат необходиммых данных } set { //Установка необходиммых данных } }
  • 57. Лекция 7-2 Наследование Наследование — способ получение классов (типов) из существующих классов (типов).
  • 58. Лекция 7-3 Наследование class CA class CB class CD Порядок вызовов конструкторов при наследовании
  • 59. Лекция 7-4 Изолированный класс Классы, от которых запрещено наследовать, называются запечатанными или изолированными классами. Изолировать класс можно с помощью ключевого слова sealed. Например: sealed class CM { //Тело класса }
  • 60. Лекция 7-5 Сокрытый метод Если в производном классе объявить функцию с точно таким же заголовком, что и в базовом классе, то говорят, что новый метод сокроет метод базового класса.
  • 61. Лекция 8-1 Полиморфизм Полиморфизм — свойство кода ООП вести себя по разному в зависимости от ситуации, возникающей в момент выполенния программы. Различают:  Специальный полиморфизм  Чистый полиморфизм
  • 62. Лекция 8-2 Специальный полиморфизм Специальный полиморфизм реализуется помощью перегруженных функций. с
  • 63. Лекция 8-3 Чистый полиморфизм Чистый полиморфизм реализуется с помощью виртуальных функций с помощью механизма наследования.
  • 64. Лекция 8-4 Виртуальный метод Виртуальные функции объявляются с помощью ключевого слова virtual. Это слово при объявлении функции определяет для нее механизм позднего связывания. Виртуальными могут быть только не статические функциичлены, так как характеристика virtual наследуется.
  • 65. Лекция 8-5 Абстрактный метод При разработке коллективного проекта, или создании библиотек классов, бывает на начальном этапе неясно, как реализовать методы. Поэтому создаются базовые классы, содержащие абстрактные методы, то есть методы, не имеющие тела (кода); При объявлении абстрактного метода используется модификатор abstract. Абстрактный метод автоматически становится виртуальным.
  • 66. Лекция 8-6 Переопределение виртуальных и абстрактный методов Функция, объявленная в производном классе, переопределяет виртуальную функцию в базовом классе только тогда, когда имеет модификатор override, то же имя и работает с тем же количеством и типом аргументов, что и виртуальные функции базового класса. Если они отличаются хоть одним аргументом, то функция в производном классе считается совершенно другой (новой) и переопределения не происходит.
  • 67. Лекция 8-7 Абстрактный класс Класс, содержащий один или более методов abstract, также должен быть объявлен как абстрактный (с модификатором abstract). Абстрактные классы создаются для нужд производных классов. Поскольку абстрактный класс не определен полностью, объекты этого класса создать невозможно.
  • 68. Лекция 9-1 Интерфейс Если в абстрактном классе объявить только абстрактные функции, то можно полностью отделить интерфейс всего класса от реализации самого класса. Будет ли это реализовано в абстрактном классе или нет, в общем, то зависит от дисциплины программиста, или будем говорить, от его желания.
  • 69. Лекция 9-2 Интерфейс Интерфейсы подобны абстрактным классам, но в отличие от них: Ни при каких условиях не поддерживает реализацию методов (нет тела).  По умолчанию в интерфейсе устанавливается спецификация public. 
  • 70. Лекция 9-3 Интерфейс Интерфейсы подобны абстрактным классам, но в отличие от них: Все методы интерфейса являются абстрактными, т.е. чистыми виртуальными функциями.  Для интерфейсов в C# разрешено множественное наследование. 
  • 71. Запрос о реализации интерфейса Лекция 9-4 Если клиент попытается вызвать метод класса, который в нем не реализован, то произойдет ошибка периода исполнения.
  • 72. Запрос о реализации интерфейса Лекция 9-5 Для того, чтобы избежать такой ситуации можно использовать оператор is, который позволяет проверять во время выполнения совместимость одного типа с другим. Синтаксис оператора is : выражение is тип
  • 73. Лекция 10-1 Делегаты Для передачи ссылки на методы в качестве параметров другим методам в язык C# введен новый тип данных – делегат.
  • 74. Лекция 10-2 Делегаты По своей структуре делегат – это объект, который ссылается на метод, то есть делегат указывает на адрес области памяти, являющейся точкой входа в метод. Синтаксис объявления события: модификатор_доступа тип тип_делегата(аргументы); тип_делегата имя = тип_делегата(имя_функции); delegate new
  • 75. Лекция 10-3 Многоадресные делегаты Делегаты могут хранить несколько адресов областей памяти. То есть делегат может указывать на несколько различных методов. Это позволяет, последовательно инициализируя адреса вызывать метод за методом.
  • 76. Лекция 10-4 События С помощью событий приложения Windows в С# получают уведомление, что что-то произошло. ОС Windows вырабатывает несколько сот сообщений, уведомляющих приложение о происходящем.
  • 77. Лекция 10-5 События Сообщения Windows относятся к низкоуровневым структурам языка С. В С# сообщения ОС оборачиваются высокоуровневым каркасом, в котором события являются объектами, призванными упростить задачу программиста по обработке сообщений Windows.
  • 78. Лекция 11-1 Событие Чтобы создать событие необходимо три составляющих: генератор, издатель и подписчик на событие.
  • 79. Лекция 11-2 Исключения Исключения сигнализируют о возникновении ошибочной ситуации, и содержат информацию, которая может позволить проанализировать возникшую ситуацию и корректно выйти из нее.
  • 80. Лекция 11-3 Обработка исключений В процессе выполнения программы могут возникать серьезные ошибки, которые, если не принять никаких мер, для корректного выхода из ошибочного состояния, могут привести к краху программы.
  • 81. Лекция 11-4 Обработка исключений Обработка ошибок исполнения программы осуществляется с помощью исключений.
  • 82. Лекция 11-5 Генерация исключений Генерация исключения осуществляется помощью ключевого слова throw. с
  • 83. Лекция 12-1 Генерация исключений При генерации исключения создается объект исключения – экземпляр класса, производного от базового класса System.Exception.
  • 84. Лекция 12-2 Поле Поле – любые переменные объявленные в классе (член-переменная, содержащая некоторое значение) Синтаксис объявления метода: модификатор_доступа тип имя;
  • 85. Лекция 12-3 Константы Константы – поле, объявленное с модификатором const (поле, значение которого изменить нельзя). Синтаксис объявления констант: const тип имя;
  • 86. Лекция 12-4 Windows-приложение Пространство имен System. Windows. Forms содержит все классы для создания пользовательских приложений под Windows.
  • 87. Лекция 12-5 Windows-приложение Каждое приложение Windows представляет собой объект класса, являющийся производным от System. Windows. Forms.Form.
  • 88. Лекция 13-1 Использование мастера Интегрированная рабочая среда Visual Studio.NET поддерживает технологию быстрой разработки приложения – RAD (Rapid Application Development) .
  • 89. Лекция 13-2 Технология быстрой разработки приложений RAD    Создание элементов управления и задание их свойств При определении свойств объекта мастер приложения добавляет для каждого элемента управления свойство TabIndex В классе формы мастером создается закрытый объект контейнерного типа
  • 90. Лекция 13-3 Технология быстрой разработки приложений RAD   Мастер приложения в классе формы производит переопределение виртуальной функции Dispose() базового класса Добавление элементов на осуществляется путем вызова Controls.AddRange() форму функции
  • 91. Лекция 13-4 Объекты управления C# содержит богатый набор объектов управления, таких как кнопки, выпадающие списки, текстовые редакторы и т.д., для проектирования полноценного интерфейса пользователя.
  • 92. Лекция 13-5 События События – являются членами класса, позволяющие объекту класса информировать клиента класса об изменениях (событиях), произошедших при выполнении кода. Синтаксис объявления события: модификатор_доступа тип delegate тип_делегата(аргументы); модификатор_доступа event тип_делегата имя_события;
  • 93. Лекция 13-6 Модификаторы доступа public – общедоступный (доступ вне класса) protected – защищенный член, к нему могут обращаться только члены данного класса и производных от него классов private – член доступен только членам данного класса (производным классам он не доступен) internal – член доступен только в пределах данной сборки и нигде больше
  • 94. Лекция 14-1 Графические примитивы  точки (координат) − Point и PointF  размера − Size и SizeF прямоугольных областей − Rectangle и RectangleF. 
  • 95. Лекция 14-2 Структура Size Структура Size предназначена для хранения ширины и высоты объекта и имеет, для этого, соответствующие открытые свойства Width и Height, доступные как для записи, так и для чтения. Для создания объекта Size с нулевыми значениями Width и Height с помощью конструктора по умолчанию, используется следующую запись: Size sz = new Size();
  • 96. Лекция 14-3 Структура Point Структура Point содержит открытые свойства X и Y целого типа, доступные, как для записи, так и для чтения. Для создания точки “pt” можно использовать конструктор по умолчанию: Point pt = new Point();
  • 97. Лекция 14-4 Структура Rectangle Структура предназначена для определения координат и размера прямоугольника. Для хранения и изменения координат используются свойства, доступные для записи и чтения.
  • 98. Лекция 14-5 Представление цвета Представление цвета осуществляется с помощью экземпляров структуры System.Drawing.Color. Для задания цвета используется статический метод класса: public static Color.FromArgb( int red, int green, int blue);
  • 99. Лекция 14-6 Кисти Кисти описываются объектами классов, производных от класса System.Drawing.Brush. Класс Brush является абстрактным классом, то есть нельзя создать объект этого класса. Сплошные кисти создаются как экземпляры класса System.Drawing.SolidBrush, например: Brush br2 = new SolidBrush(Color.Magenta); Brush br3 = new SolidBrush(Color.FromArgb(200,10,120));
  • 100. Лекция 14-7 Перья Перья описываются классом System.Drawing.Pen. В классе System.Drawing.Pens содержится множество статических свойств, описывающих перья с интернет цветом и толщиной в один пиксель. Создание таких перьев выглядит следующим образом: Pen pn6 = Pens.Brown; Pen pn7 = Pens.Magenta;
  • 101. Лекция 15-1 Интерфейс GDI+ Разработчики среды .NET - предлагают новый интерфейс графического устройства - GDI+. GDI+ - представляет по сути дела объектноориентированную оболочку GDI с новыми свойствами и при этом, если верить заявлению компании Microsoft, удалось повысить быстродействие системы.
  • 102. Лекция 15-2 Рисование линий и фигур Контекст устройства в среде .NET инкапсулирован («завернут») в базовом классе System.Drawing.Graphics. Для создания объекта класса Graphics необходимо использовать метод CreateGraphics(), возвращающий ссылку на объект класса Graphics и затем через данный объект рисовать объекты: Graphics dc = CreateGraphics(); dc.DrawRectangle(Pens.OrangeRed,5,10,25,45);
  • 103. Лекция 15-3 Рисование текста Для рисования текста используют перегруженный метод DrawString.Для вывода текста необходимо задать тип и размер шрифта, кисть и координаты текста. Например: Font fnt = new Font("Arial",10); //Шрифт Arial, размер 10 dc.DrawString("Привет!",fnt, Brushes.Green,10,20);
  • 104. Лекция 15-4 Рисование изображений Вывод изображений осуществяется с помощью класса Image: Graphics g = e.Graphics; Image curImage Image.FromFile("имя_изображения"); g.DrawImage(curImage, 10, 10); =
  • 105. Лекция 15-5 Рисование анимации Для вывода анимаций использется класс Animate и Image. Создается объект класса Image, в который загружается GIF изображение. Далее с помощью встроенных событий смены кадра происходит перерисовка изображения.
  • 106. Лекция 15-6 Перерисовка приложения Восстановлением графики и текста должно заниматься само приложение. Операционная система в необходимых случаях вырабатывает сообщение (событие Paint), которое «говорит», что окно приложения не корректно и его необходимо перерисовать. Перерисовка окна должна происходить по событию Paint.
  • 107. Лекция 16-1 Потоки Выполнение кода в С# всегда начинается с метода Main. Метод Main - образует главный поток приложения. Поток представляет собой последовательность операций исполняемых в программе. Главный поток может запустить несколько подчиненных или говорят рабочих потоков.
  • 108. Лекция 16-2 Потоки Многопоточная система инкапсулирована в класс Thread. Данный класс объявлен как запечатанный (sealed) класс, то есть от него нельзя породить новый класс. В классе Thread определено ряд свойств и методов для управления потоками.
  • 109. Лекция 16-3 Создание потока Для создания потока необходимо создать объект класса Thread. Один из конструкторов этого класса имеет следующий вид: public Thread ( ThreadStart start)
  • 110. Лекция 16-4 Приоритеты потоков Каждый поток имеет определенный приоритет. Потоки с более высоким приоритетом имеют преимущество перед другими потоками и могут полностью блокировать работу потоков с более низкими приоритетами. Приоритет потока можно прочитать или изменить с помощью свойства Priority, которое является членом класса Thread.
  • 111. Лекция 16-5 Остановка и возобновление потока Запущенный на выполнение поток может быть остановлен путем вызова метода Suspend(), а возобновление выполнения – путем вызова метода Resume()
  • 112. Лекция 17-1 Синхронизация потоков Синхронизацией работы потоков называется обеспечение корректной работы нескольких потоков с общими (разделяемыми) данными или ресурсами.
  • 113. Лекция 17-2 Синхронизация потоков Синхронизация обеспечивается путем организации монопольного доступа одного из потоков на время работы с разделяемыми ресурсами, и блокирования доступа к разделяемым ресурсам на это время со стороны других потоков.
  • 114. Лекция 17-3 Синхронизация потоков В основе синхронизации лежит понятие блокировки, т.е. управление доступом к некоторому блоку кода в объекте. На то время, когда объект заблокирован одним потоком, никакой другой поток не может получить доступ к блоку кода для работы с этим объектом.
  • 115. Лекция 17-4 Класс Interlocked Класс Interlocked предназначен для организации неделимых операций, таких как сложение, увеличение на единицу, уменьшение на единицу, сравнение и других. Для этого в этом классе определено ряд статических методов.
  • 116. Лекция 17-5 Класс Monitor В классе Monitor определено несколько статических методов для организации синхронизации. Для блокировки некоторого объекта, необходимо вызвать метод Enter (), а чтобы снять блокировку — метод Exit ().