Слайд 2Развитие программирования
Структурное программирование
С
ООП
С++
Java
Microsoft
С#
![Развитие программирования Структурное программирование С ООП С++ Java Microsoft С#](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1134427/slide-1.jpg)
Слайд 3Платформа .NET
Платформа .NET состоит из общеязыковой среды выполнения (среды CLR) и библиотеки
![Платформа .NET Платформа .NET состоит из общеязыковой среды выполнения (среды CLR) и библиотеки классов .NET Framework.](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1134427/slide-2.jpg)
классов .NET Framework.
Слайд 6Определение
Объе́ктно-ориенти́рованное программи́рование (ООП) — парадигма программирования, в которой основными концепциями являются понятия
![Определение Объе́ктно-ориенти́рованное программи́рование (ООП) — парадигма программирования, в которой основными концепциями являются](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1134427/slide-5.jpg)
объектов и классов (либо, в менее известном варианте языков с прототипированием, — прототипов)
Слайд 83 концепции*
Все языки OOP основаны на трёх основополагающих концепциях
ИНКАПСУЛЯЦИЯ
НАСЛЕДОВАНИЕ
ПОЛИМОРФИЗМ
![3 концепции* Все языки OOP основаны на трёх основополагающих концепциях ИНКАПСУЛЯЦИЯ НАСЛЕДОВАНИЕ ПОЛИМОРФИЗМ](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1134427/slide-7.jpg)
Слайд 9ИнКАПСУЛяция
это механизм, который объединяет данные и код, манипулирующий этими данными, а также
![ИнКАПСУЛяция это механизм, который объединяет данные и код, манипулирующий этими данными, а](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1134427/slide-8.jpg)
защищает и то, и другое от внешнего вмешательства или неправильного использования.
Слайд 12Абстракция
придание объекту характеристик, которые отличают его от всех других объектов, четко определяя
![Абстракция придание объекту характеристик, которые отличают его от всех других объектов, четко](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1134427/slide-11.jpg)
его концептуальные границы. Основная идея состоит в том, чтобы отделить способ использования составных объектов данных от деталей их реализации в виде более простых объектов
Слайд 13Абстракция
Фундаментальная идея состоит в разделении несущественных деталей реализации подпрограммы и характеристик существенных
![Абстракция Фундаментальная идея состоит в разделении несущественных деталей реализации подпрограммы и характеристик](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1134427/slide-12.jpg)
для корректного ее использования. Такое разделение может быть выражено через специальный «интерфейс», сосредотачивающий описание всех возможных применений программы
Слайд 14Абстракция
Автосалон
Страховая компания
Владелец
ГИБДД
![Абстракция Автосалон Страховая компания Владелец ГИБДД](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1134427/slide-13.jpg)
Слайд 16Классы
это элемент, описывающий абстрактный тип данных и его частичную или полную реализацию.
![Классы это элемент, описывающий абстрактный тип данных и его частичную или полную](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1134427/slide-15.jpg)
Наряду с понятием «объекта» класс является ключевым понятием в ООП.
Слайд 18Объект класса
это переменная от класса
<Название класса> <имя переменной> = new <Название класса>(<параметры>);
![Объект класса это переменная от класса = new ( );](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1134427/slide-17.jpg)
Слайд 19Что есть у классов
Поля
Константы
Свойства
Методы
Конструкторы и деструктор
События
Индексаторы
Операторы
Вложенные типы
![Что есть у классов Поля Константы Свойства Методы Конструкторы и деструктор События Индексаторы Операторы Вложенные типы](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1134427/slide-18.jpg)
Слайд 20Поля
Поле - это переменная любого типа, которая объявлена непосредственно в классе
![Поля Поле - это переменная любого типа, которая объявлена непосредственно в классе](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1134427/slide-19.jpg)
Слайд 21Поля
Поля инициализируются непосредственно перед вызовом конструктора для экземпляра объекта.
Поля могут быть
![Поля Поля инициализируются непосредственно перед вызовом конструктора для экземпляра объекта. Поля могут](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1134427/slide-20.jpg)
отмечены модификаторами доступа
Также при необходимости поле может быть объявлено с модификатором static.
Слайд 23Константы
Константы предназначены для описания таких значений, которые не должны изменяться в программе.
![Константы Константы предназначены для описания таких значений, которые не должны изменяться в](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1134427/slide-22.jpg)
Для определения констант используется ключевое слово const:
Слайд 24Свойства
это член, предоставляющий гибкий механизм для чтения, записи или вычисления значения закрытых
![Свойства это член, предоставляющий гибкий механизм для чтения, записи или вычисления значения](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1134427/slide-23.jpg)
полей. Свойства фактически представляют собой специальные методы, называемые методами доступа. Это позволяет легко получать доступ к данным и помогает повысить безопасность и гибкость методов.
Слайд 25Свойства
У свойства могут быть два ключевых слова set и get
![Свойства У свойства могут быть два ключевых слова set и get](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1134427/slide-24.jpg)
Слайд 28Методы
это блок кода, содержащий ряд инструкций. Программа инициирует выполнение инструкций, вызывая метод
![Методы это блок кода, содержащий ряд инструкций. Программа инициирует выполнение инструкций, вызывая](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1134427/slide-27.jpg)
и указывая все аргументы, необходимые для этого метода. В C# все инструкции выполняются в контексте метода.
Слайд 29Сигнатура метода
Методы объявляются в классе или в структуре путем указания модификаторов доступа,
![Сигнатура метода Методы объявляются в классе или в структуре путем указания модификаторов](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1134427/slide-28.jpg)
необязательных модификаторов, (abstract или sealed), возвращаемого значения, имени метода и всех параметров этого метода. Все эти части вместе представляют собой сигнатуру метода.
Слайд 32Необязательные параметры
C# позволяет использовать необязательные параметры. Для таких параметров нам необходимо объявить
![Необязательные параметры C# позволяет использовать необязательные параметры. Для таких параметров нам необходимо объявить значение по умолчанию.](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1134427/slide-31.jpg)
значение по умолчанию.
Слайд 33Именованные параметры
Именованные параметры позволяют нарушать порядок передачи параметров в функцию.
![Именованные параметры Именованные параметры позволяют нарушать порядок передачи параметров в функцию.](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1134427/slide-32.jpg)
Слайд 34Модификаторы доступа
public
protected
internal
protected internal
private (по умолчанию)
![Модификаторы доступа public protected internal protected internal private (по умолчанию)](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1134427/slide-33.jpg)
Слайд 35Зачем они? public
Общий (public) доступ является уровнем доступа с максимальными правами. Ограничений
![Зачем они? public Общий (public) доступ является уровнем доступа с максимальными правами.](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1134427/slide-34.jpg)
доступа к общим членам не существует.
Слайд 36Зачем они? private
Закрытый (private) доступ является уровнем доступа с минимальными правами. Доступ
![Зачем они? private Закрытый (private) доступ является уровнем доступа с минимальными правами.](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1134427/slide-35.jpg)
к закрытым членам можно получить только внутри тела класса, в которой они объявлены.
Слайд 39Типы данных
Ссылочные
(классы, массивы, интерфейсы, делегаты)
типы-значения (элементарные типы, перечисления, структуры)
![Типы данных Ссылочные (классы, массивы, интерфейсы, делегаты) типы-значения (элементарные типы, перечисления, структуры)](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1134427/slide-38.jpg)
Слайд 40Перечисления
Перечисление объявляется с помощью ключевого слова enum, идентифицируется по имени и представляет
![Перечисления Перечисление объявляется с помощью ключевого слова enum, идентифицируется по имени и](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1134427/slide-39.jpg)
собой непустой список неизменяемых именованных значений интегрального типа.
Слайд 42Структурные типы
Структуры делятся на следующие категории:
Числовые типы
Целочисленные типы
Типы с плавающей запятой
decimal
bool
Структуры, определяемые
![Структурные типы Структуры делятся на следующие категории: Числовые типы Целочисленные типы Типы](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1134427/slide-41.jpg)
пользователем.
Слайд 44Привидение типов
Используемые в программе типы характеризуются собственными диапазонами значений, которые определяются свойствами
![Привидение типов Используемые в программе типы характеризуются собственными диапазонами значений, которые определяются](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1134427/slide-43.jpg)
типов – в том числе и размером области памяти, предназначенной для кодирования значений соответствующего типа.
Слайд 45Привидение типов
int a = 10;
short d = 30;
long l = 40005;
int df
![Привидение типов int a = 10; short d = 30; long l](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1134427/slide-44.jpg)
= a + d +l;
System.Convert
Слайд 46Упаковка и распаковка
Упаковка представляет собой процесс преобразования типа значения в тип object
![Упаковка и распаковка Упаковка представляет собой процесс преобразования типа значения в тип](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1134427/slide-45.jpg)
или в любой другой тип интерфейса, реализуемый этим типом значения.
Когда тип значения упаковывается средой CLR, она создает оболочку значения внутри System.Object и сохраняет ее в управляемой куче.
Слайд 47Boxing и unboxing
Упаковка используется для хранения типов значений в куче со сбором
![Boxing и unboxing Упаковка используется для хранения типов значений в куче со](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1134427/slide-46.jpg)
мусора.
int i = 123;
object o = i;
Слайд 48Boxing и unboxing
Распаковка является явным преобразованием из типа object в тип значения.
int
![Boxing и unboxing Распаковка является явным преобразованием из типа object в тип](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1134427/slide-47.jpg)
i = 123;
object o = i;
int j = (int)o;
Слайд 50Область видимости
Переменные можно объявлять в любом месте блока. Точка объявления переменной
![Область видимости Переменные можно объявлять в любом месте блока. Точка объявления переменной](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1134427/slide-49.jpg)
в буквальном смысле соответствует месту ее создания.
Новый блок – новая область видимости. Объекты, объявляемые во внутренних блоках, не видны во внешних блоках.
Блок ограничивается { }
Слайд 51Область видимости
Объекты, объявленные в методе и во внешних блоках, видны и
![Область видимости Объекты, объявленные в методе и во внешних блоках, видны и](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1134427/slide-50.jpg)
во внутренних блоках.
Одноименные объекты во вложенных областях конфликтуют.
Объекты, объявляемые в блоках одного уровня вложенности в методе, не видны друг для друга. Конфликта имен не происходит.
Слайд 53Объявление и инициализация
В чем разница?
int a;
int a = 8;
Console.WriteLine(a.toString());
![Объявление и инициализация В чем разница? int a; int a = 8; Console.WriteLine(a.toString());](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1134427/slide-52.jpg)
Слайд 54Переполнение
int a = 2000000000;
int b = 2000000000;
Console.WriteLine("a = {0}\nb = {1}\n", a,
![Переполнение int a = 2000000000; int b = 2000000000; Console.WriteLine("a = {0}\nb](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1134427/slide-53.jpg)
b);
Console.WriteLine("a + b = {0}", a + b);
Слайд 55Переполнение
Причиной некорректных результатов выполнения арифметических операций является особенность представления значений арифметических типов.
![Переполнение Причиной некорректных результатов выполнения арифметических операций является особенность представления значений арифметических](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1134427/slide-54.jpg)
Арифметические типы имеют ограниченные размеры. Поэтому любая арифметическая операция может привести к переполнению.
Слайд 57checked и unchecked
unchecked
{
w = x+y;
}
checked
{
z = x+w;
}
![checked и unchecked unchecked { w = x+y; } checked { z = x+w; }](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1134427/slide-56.jpg)