SlideShare une entreprise Scribd logo
1  sur  44
Télécharger pour lire hors ligne
Темы лекции: Введение. Обзор C#.
Практическое задание: Базовые понятия языка C#
Тренер: Игорь Шкулипа, к.т.н.
Платформа .Net и язык программирования C#.
Занятие 1
http://www.slideshare.net/IgorShkulipa 2
Курс «Платформа .Net и язык программирования C#»
Курс состоит из трех основных модулей:
1. Базовые понятия ООП и языка программирования С#
• Обзор C#
• ООП на C#
• Перегрузка операций и обработка исключений
• Стандартный ввод-вывод
• Обобщения
• Строки, массивы, коллекции
• Делегаты, события, анонимные методы, лямбда-выражения
2. Организация взаимодействия с базами данных и
приложениями
• Windows Forms
• XML
• Windows Presentation Foundation
• ADO.Net
• COM Interop
• LINQ
3. Дополнительные темы
• Динамические типы
• Многопоточность в C#
• Модульное тестирование ПО (unit testing)
• Паттерны проектирования
http://www.slideshare.net/IgorShkulipa 3
Время и оценка результатов курса
Курс состоит из 25 занятий, общей длительностью 100 часов аудиторной
работы.
Оценка теоретической части:
1. Два промежуточных теста (максимальная оценка - 100 баллов)
2. Результирующий тест (максимальная оценка - 100 баллов)
Оценка практической части:
1. Групповой проект (максимальная оценка – 100 баллов)
2. 15 лабораторных работ (максимальная средняя оценка - 100
баллов)
Курсовой проект:
1. На протяжении курса студенты выполняют курсовой проект по
индивидуальной теме (максимальная оценка - 100 баллов)
http://www.slideshare.net/IgorShkulipa 4
Результирующий рейтинг
>= 70% < 70%
• TP – средняя оценка за промежуточные тесты (макс. 100)
• TR – оценка за результирующий тест (макс. 100)
• LR – средняя оценка за выполнение лабораторных работ (макс. 100)
• GP – средняя оценка за групповой проект (макс. 100)
• CP – оценка за курсовой проект (макс. 100)
Результат курса = 0.15*TP + 0.15*TR + 0.2*LR +0.2*GP+ 0.3*CP
http://www.slideshare.net/IgorShkulipa 5
Литература
1. Джеффри Рихтер / CLR via C#. Программирование на платформе
Microsoft .NET Framework 4.0 на языке C#: Питер, 2011, 928 с.
1. Троелсен Эндрю / Язык программирования C# 5.0 и платформа
.NET 4.5, 6-е изд.: Пер. с англ.: Изд. дом «Вильямс», 2013. - 1312
c.
1. Трей Неш / C# 2010: ускоренный курс для профессионалов:
Пер. с англ.: Изд. дом «Вильямс», 2010. - 592 c.
1. http://msdn.microsoft.com/library/vstudio/
1. Руководство Microsoft по проектированию архитектуры
приложений. 2-е издание.
http://www.slideshare.net/IgorShkulipa 6
Объектно-ориентированное программирование
ООП – это парадигма программирования, основанная на
представлении предметной области в виде взаимосвязанных
абстрактных объектов и их реализаций.
В ООП вводится понятие Класса – пользовательского типа
данных, объединяющего данные и методы их обработки.
Объектом называется экземпляр класса.
Автомобиль– это класс (тип данных)
Автомобиль Bentley Continental GT черного цвета – это объект,
или экземпляр класса «Автомобиль»
http://www.slideshare.net/IgorShkulipa 7
Объекты
Объекты характеризуются понятиями состояния, поведения и идентичности.
Состояние объекта характеризуется перечнем всех свойств данного
объекта и текущими значениями каждого из этих свойств.
Поведение - это то, как объект действует и реагирует; поведение
выражается в терминах состояния объекта и передачи сообщений.
Поведение объекта - это его наблюдаемая и проверяемая извне
деятельность.
Поведение объекта строится из его операций (определенное воздействие
одного объекта на другой ). Существует три вида операций
• Модификатор - операция, которая изменяет состояние объекта
• Селектор - операция, считывающая состояние объекта, но не
меняющая состояния
• Итератор - операция, позволяющая организовать доступ ко всем
частям объекта в строго определенной последовательности
Идентичность - это такое свойство объекта или такой набор свойств,
который отличает его от всех других объектов.
http://www.slideshare.net/IgorShkulipa 8
Члены и методы класса
Члены-данные (поля) (data members) хранят всю необходимую
информацию об объекте, формируют его состояние,
характеристики и т.п.
Изменение состояния объекта или его характеристик связано с
изменением данных, которые в нем содержатся.
Метод объекта (methods) – программный код, выполненный в
виде функции, реагирующий на передачу объекту
определенного сообщения.
Вызов метода объекта может приводить к изменению его
состояния (значение членов-данных), а может и не приводить
Класс может содержать один или более методов, позволяющих
осуществлять манипуляцию данными объекта
http://www.slideshare.net/IgorShkulipa 9
Свойства
Свойство – составляющая часть объекта, доступ к которой
осуществляется как к члену объекта, но таковым не является
(реализуют принцип инкапсуляции для членов объекта).
В некоторых объектно-ориентированных языках
программирования (например, в C++) свойства, как элемент
языка, отсутствуют.
В этом случае в класс добавляют методы, посредством которых
осуществляется доступ к необходимым переменным класса.
http://www.slideshare.net/IgorShkulipa 10
Абстракция данных
Объекты представляют неполную информацию о реальных
сущностях предметной области.
Абстракция позволяет оперировать с объектном на уровне,
адекватном решаемой задаче.
Высокоуровневые обращения к объекту могут обрабатываться с
помощью вызова функций и методов низкого уровня.
В основе реализации этого принципа лежит использование
абстрактных классов интерфейсов.
http://www.slideshare.net/IgorShkulipa 11
Инкапсуляция
Инкапсуляция – объединение в одной оболочке данных и
методов их обработки, а так же способность объекта скрывать
внутреннее устройство своих полей и методов.
Согласно данному принципу, класс должен рассматриваться как
черный ящик.
Внешний пользователь не знает детали реализации объекта и
работает с ним только путем предоставленного объектом
интерфейса (или открытых методов доступа).
Следование данному принципу может уменьшить число связей
между классами и упростить их независимую реализацию,
модификацию и тестирование.
http://www.slideshare.net/IgorShkulipa 12
Композиция классов
Композиция (а так же ассоциация и агрегирование) – механизм
для создания нового класса путем объединения нескольких
объектов существующих классов в единое целое.
При агрегировании между классами действует «отношение
принадлежности»
• У машины есть кузов, колеса и двигатель
• У человека есть голова, руки, ноги и тело
• У треугольника есть вершины
Вложенные объекты обычно объявляются закрытыми (private)
внутри класса-агрегата
http://www.slideshare.net/IgorShkulipa 13
Наследование
Наследование – это механизм ООП, позволяющий описать новый
класс на основе уже существующего.
При наследовании свойства и функциональность родительского
класса наследуются новым классом.
Класс-наследник имеет доступ к публичным (public) и
защищенным (protected) методам и полям класса родительского
класса.
Класс-наследник может добавлять свои данные и методы, а также
переопределять методы базового класса
http://www.slideshare.net/IgorShkulipa 14
Основные термины
Родительский или базовый класс (класс-родитель) – класс,
выступающий в качестве основы при наследовании.
Класс-потомок (дочерний класс, класс-наследник) – класс,
образованный в результате наследования от родительского
класса.
Иерархия наследования – отношения между родительским
классом и его потомками.
Интерфейс класса – совокупность публичных методов класса,
доступная для использования вне класса. В интерфейсной части
данные обычно не размещают.
Реализация класса – совокупность приватных методов и
данных класса
http://www.slideshare.net/IgorShkulipa 15
Виды наследования
По типу наследования:
• Открытое (public) наследование
• Закрытое (private) наследование
• Защищенное (protected) наследование
По количеству базовых классов:
• Одиночное наследование (один базовый класс)
• Множественное наследование (два и более базовых классов)
http://www.slideshare.net/IgorShkulipa 16
Полиморфизм
Полиморфизм - это свойство, которое позволяет одно и то же имя
использовать для решения нескольких схожих, но технически
разных задач. Целью полиморфизма является использование
одного имени для задания общих для класса действий.
Использование полиморфизма достигается при присвоении
указателю на базовый класс адреса производного класса с
переопределенными методами.
Типы-наследники неявно приводимы к базовому классу.
http://www.slideshare.net/IgorShkulipa 17
Microsoft .NET Framework
Платформа .NET Framework является надстройкой над операционной
системой, в качестве которой может выступать любая версия
Windows.
На сегодняшний день платформа .NET Framework включает в себя:
1. Компиляторы четырех официальных языков: С#, VB.NET, Managed
C++ (управляемый C++) и JScript .NET
2. Объектно-ориентированную среду CLR (Common Language Runtime),
совместно используемую этими языками для создания приложений
под Windows и для Internet
3. Ряд связанных между собой библиотек классов под общим именем
FCL (Framework Class Library)
http://www.slideshare.net/IgorShkulipa 18
Архитектура Microsoft .NET Framework
http://www.slideshare.net/IgorShkulipa 19
C# и CLR
Самым важным компонентом платформы .NET Framework является CLR
(Common Language Runtime), предоставляющая среду, в которой
выполняются программы.
Главная ее роль заключается в том, чтобы обнаруживать и загружать
типы .NET и производить управление ими в соответствии с
полученными командами. CLR включает в себя виртуальную
машину, во многих отношениях аналогичную виртуальной машине
Java. На верхнем уровне среда активизирует объекты, производит
проверку безопасности, размещает объекты в памяти, выполняет
их, а также запускает сборщик мусора.
Код на языке C# компилируется в, так называемый CIL ( Common
Intermediate Language) - стандартизированный промежуточный
язык, чем-то похожий на объектно-ориентированный ассемблер.
Код на CIL выполняется виртуальной машиной CLR, а результат в виде
шестнадцатеричных команд отправляется на выполнение
операционной системой.
http://www.slideshare.net/IgorShkulipa 20
JIT-компилятор
Среда CLR – это не интерпретатор, как может показаться на первый
взгляд.
В действительности, CLR компилирует код IL в машинный код, прежде
чем выполнить его, то есть осуществляет JIT (Just in Time)
компиляцию.
Этот процесс может показаться неэффективным, но, на самом деле,
это обозначает лишь одноразовое понижение производительности
для каждого участка программы. Как только код один раз
скомпилирован, CLR сохраняет его и выполняет каждый раз, когда
это необходимо.
Код, выполняемый CLR называется управляемым кодом (managed
code)
http://www.slideshare.net/IgorShkulipa 21
Преимущества управляемого кода
• Управляемые приложения могут потреблять меньше памяти.
IL-код занимает меньше места в памяти, чем «родной» код, то есть
количество памяти у управляемых приложений, обычно, меньше,
чем у «родных».
• JIT-компиляции подвергается только тот код, который
выполняется. IL-код более компактен, чем машинный, по этому
сокращение компилируемого кода до минимума сокращает объем
памяти приложения.
• Код более оптимизирован. Код после JIT-компиляции
оптимизируется непосредственно для платформы, на которой он
выполняется.
• Среда CLR отслеживает частоту вызовов. Если CLR видит, что
некоторый код долгое время не вызывался, то она может
освободить память, занимаемую им. При следующем обращении,
этот код будет перекомпилирован.
• Автоматическая сборка мусора. Нет необходимости в ручном
управлении памятью и освобождении занятых ресурсов.
http://www.slideshare.net/IgorShkulipa 22
Сборки
Сборка (assmebly) – это дискретная единица многократно
используемого кода внутри CLR. Сборки похожи на обычные DLL
библиотеки или исполняемые EXE файлы.
Сборка может состоять из многих модулей, которые объединяет вместе
манифест, описывающий содержимое сборки.
Сборки могут иметь версии, что позволяет идентифицировать
одноименные сборки с разными версиями.
Сборки содержат метаданные, описывающие содержащиеся в них
типы.
Загрузчик сборок с помощью конфигурационных файлов системы,
определяет, какую версию сборки необходимо загрузить в данный
момент.
http://www.slideshare.net/IgorShkulipa 23
Назначение сборкам имен
• Строгое именование. Такая сборка имеет имя, состоящее из
четырех частей: краткое имя сборки, номер версии, идентификатор
культуры и хеш-маркер.
• Частичное именование. Сборка имеет имя, в котором опущены
некоторые части строгого имени.
GAC (Global Assembly Cache) – некоторое подобие реестра сборок.
Регистрация сборки в GAC подобна регистрации приложения в
системном реестре.
Если сборка зарегистрирована со строгим именованием, то она может
быть использована всеми приложениями системы.
Сборки с частичным именованием могут использоваться только
локальными приложениями, то есть сама сборка должна находиться
где-нибудь в каталоге приложения или в подкаталогах.
http://www.slideshare.net/IgorShkulipa 24
Метаданные
Метаданные – это расширяемый формат описания содержимого сборок.
Можно определять собственные специальные атрибуты, которые легко
включаются в метаданные типа.
Почти любая сущность программы может иметь присоединенные к ней
метаданные, включая классы, методы, параметры, возвращаемые
значения и т.д.
С помощью метаданных можно исследовать определения типов и
присоединенные к ним атрибуты.
Метаданные могут сообщить о том, поддерживает некоторый класс
определенный метод, прежде чем пытаться взывать его, или порожден
ли этот класс от какого-либо другого класса.
Процесс просмотра метаданных называется рефлексией. Для этого служат
оператор typeof (работает во время компиляции) или метод GetType()
(работает во время выполнения), которые возвращают объект типа
System.Type.
http://www.slideshare.net/IgorShkulipa 25
Сборщик мусора
Сборка мусора представляет собой непрерывный процесс слежения за
состоянием памяти. Однако, активную фазу принимает в основном в
момент острого недостатка памяти для продолжения работы приложения.
Сборщик мусора всегда запускается в отдельном потоке и в момент его
активной работы, все остальные потоки приложения приостанавливаются.
Сборщик мусора не проходит по всем находящимся в памяти объектам и не
изучает их. Вместо этого CLR выполняет проход по определенной группе
объектов. В .NET эти группы называются поколениями:
• Поколение 0. Новый созданный объект, который еще никогда не
помечался как кандидат на удаление;
• Поколение 1. Объект, который уже однажды пережил сборку
мусора. Сюда обычно попадают объекты, которые были помечены для
удаления, но все-таки не удалены из-за того, что места в памяти
(куче) было достаточно;
• Поколение 2. Объекты, которые пережили более одной очистки
памяти сборщиком мусора.
Очевидно, что чем выше поколение объекта, то тем дольше он находится в
памяти. Более того, вероятность дальнейшего его существования в куче
больше, чем у объекта более низкого поколения.
http://www.slideshare.net/IgorShkulipa 26
Язык C#
Язык C# был разработан, как основной язык программирования для
платформы Microsoft .NET Framework.
Разработан в 1998—2001 годах группой инженеров под руководством
Андерса Хейлсберга в компании Microsoft.
Синтаксис C# основан на языках C++ и Java – в то время,
доминирующих языках в разработке программного обеспечения.
C# - строго типизированный язык, то есть каждая переменная и
экземпляр класса относятся к четко определенному типу.
http://www.slideshare.net/IgorShkulipa 27
Базовые типы данных
СТS Тип
Имя псевдонима в
С#
Описание
System.Object object Класс , базовый для всех типов (CTS)
System.String string Строка
System.SByte sbyte 8 -разрядный байт (со знаком)
System.Byte byte 8 -разрядный байт (без знака)
System.Int16 short 16-разрядное число (со знаком)
System.UInt16 ushort 16-разрядное число (без знака)
System.Int32 int 32-разрядное число (со знаком)
System.UInt32 uint 32-разрядное число (без знака)
System.Int64 long 64-разрядное число (со знаком)
System.UInt64 ulong 64-разрядное число (без знака)
System.Char char 16-разрядный символ (Unicode)
System.Single float 32-разрядное число с плавающей точкой, (стандарт IEEE)
System.Double double 64-разрядное число с плавающей точкой, (стандарт IEEE)
System.Boolean bool Булевское значение (true/false)
System.Decimal decimal Данный 128 разрядный тип используется в основном, когда
требуется крайне высокая точность (до 28 знака)
Встроенные числовые типы являются структурами, и к их свойствам и
методам можно получить доступ.
http://www.slideshare.net/IgorShkulipa 28
Выражения
http://www.slideshare.net/IgorShkulipa 29
Выражения
http://www.slideshare.net/IgorShkulipa 30
Типы CLR
• Типы значений (value types). Определяются с помощью
ключевого слова struct. Экземпляры типов значений – это
единственные экземпляры, которые могут располагаться в стеке
приложения. В управляемой куче они могут располагаться, если
они являются членами ссылочных типов. Во многом аналогичны
структурам С++.
• Ссылочные типы (reference types). Определяются с помощью
ключевого слова class, в стеке приложения находится ссылка на
экземпляр. Сами экземпляры располагаются в управляемой куче.
http://www.slideshare.net/IgorShkulipa 31
Типы значений
Типы значений являются производными от System.ValueType,
являющегося производным от System.Object. Типы, производные от
System.ValueType, имеют особое поведение в среде CLR.
Переменные типа значения напрямую содержат их значения, что
означает, что память встроена в контекст, в котором объявлена
переменная. Не существует отдельного размещения кучи или
служебных данных сборки мусора для переменных типа значения.
Существует две категории типов значений: структура и
перечисление.
Типы значений являются запечатанными, что означает, например, что
нельзя произвести тип от System.Int32, и нельзя определить
структуру для наследования от любого пользовательского класса
или структуры, поскольку структура может наследовать только от
System.ValueType.
Однако структура может реализовать один или несколько
интерфейсов. Можно выполнить приведение типа структуры в тип
интерфейса; это приведет к операции упаковки-преобразования
для создания программы-оболочки структуры внутри объекта
ссылочного типа в управляемой куче.
http://www.slideshare.net/IgorShkulipa 32
Структуры
Ключевое слово struct используется для создания собственных
пользовательских типов значений. Обычно структура используется
как контейнер для небольшого набора связанных переменных
public struct Coords
{
public int x, y;
public Coords(int p1, int p2)
{
x = p1; y = p2;
}
}
http://www.slideshare.net/IgorShkulipa 33
Перечисления
Другой категорией типов значений является перечисление.
Перечисление определяет набор именованных интегральных
констант. По умолчанию базовым типом каждого элемента
перечисления является int. Можно задать другой целочисленный
тип, используя двоеточие.
public enum FileMode
{
CreateNew = 1,
Create = 2,
Open = 3,
OpenOrCreate = 4,
Truncate = 5,
Append = 6
}
enum Days
{
Sunday, Monday, Tuesday,
Wednesday, Thursday,
Friday, Saturday
};
enum Months : byte
{
Jan, Feb, Mar, Apr, May,
Jun, Jul, Aug, Sep, Oct,
Nov, Dec
};
http://www.slideshare.net/IgorShkulipa 34
Ссылочные типы
Часто определяются с помощью ключевого слова class. Фактически
переменные ссылочных типов подобны переменным типов
значений, которые имеют тип и содержат указатель на объект в
куче.
Все ссылочные типы неявно наследуются от System.Object (object).
По соглашению термином «объект» обозначается экземпляр
ссылочного типа, а термином «значение» - типа значений.
Переменные ссылочного типа инициализируются либо с помощью
операции new, либо присваиванием переменной значения
совместимого типа.
object o1= new object();
object o2= o1;
CLR управляет всеми ссылками на объекты в куче, в том числе
выполняет сборку мусора, так что нет необходимости в ручном
освобождении памяти.
http://www.slideshare.net/IgorShkulipa 35
Инициализация переменных по умолчанию
Когда создается объект, система инициализирует его поля,
значениями по умолчанию:
1. Поля, относящиеся к типам значений, инициализируются
установкой всех битов в 0.
1. Значением по умолчанию для ссылок на объекты является null.
1. Поля логического типа инициализируются значением false.
http://www.slideshare.net/IgorShkulipa 36
Неявно типизированные переменные
Объявляя локальную переменную с помощью ключевого слова var, вы
просите компилятор зарезервировать некоторый участок памяти
для хранения этой переменной.
На этапе компиляции у компилятора достаточно информации о типе
будущего экземпляра, так как его тип указан явно.
var MyList = new List<int>();
MyList.Add(1); MyList.Add(2); MyList.Add(3);
foreach(var i in MyList)
{
Console.WriteLine(i);
}
(!) Замечание: Неявно типизированные переменные должны быть
проинициализированы.
var WrongValue; // выдаст ошибку компиляции
http://www.slideshare.net/IgorShkulipa 37
Преобразование типов
1. Присвоение "большему типу" значения "меньшего типа". Безопасное
присвоение, гарантирует сохранение значения.
int IntValue = 12345678;
long LongValue = 1234567890;
LongValue=IntValue;
2. Присвоение "меньшему типу" значения "большего типа“ должно быть
явным. Потенциально опасное присвоение, грозит потерей информации.
int IntValue = 12345678;
long LongValue = 1234567890;
IntValue = (int) LongValue;
3. Ссылка на DerivedType может быть неявно преобразована к BaseType,
если DerivedType унаследован от BaseType.
BaseType DT = new DerivedType();
4. Ссылка на BaseType должна преобразовываться к DerivedType явно. Но
такое явно преобразование может сгенерировать InvalidCastException во
время выполнения программы, если CLR не сможет выполнить такое
преобразование.
BaseType BT = new BaseType();
DerivedType DT = new DerivedType();
DT = (DerivedType)BT; // Небезопасно!!!
http://www.slideshare.net/IgorShkulipa 38
Операции as и is
Операция is возвращает булевское значение, говорящее о том, можно
ли преобразовать данное выражение в указанный тип:
long LValue=123;
bool IsInt= LValue is int;
DerivedClass DC=new DerivedClass();
bool IsBase=DC is BaseClass;
Операция as подобна is, но она возвращает ссылку на уже
преобразованный объект указанного типа, либо null, если такое
преобразование невозможно.
BaseClass BC=DC as BaseClass;
http://www.slideshare.net/IgorShkulipa 39
Пространства имен
Пространства имен (namespace) предоставляют программистам возможность
логичной взаимосвязи классов и других типов. Само понятие namespace
скорее является логическим, нежели физическим.
namespace NameSpace
{
public struct Name
{
// Код структуры ...
}
}
Для использования имен из пространства имен существует директива using.
using NameSpace;
using System;
using System.Collections;
using Microsoft.Office.Interop.Excel;
Еще одним применением ключевого слова using в C# является назначение
псевдонимов классам и пространствам имен:
using alias = NameSpace;
using alias = System.Collections;
...
alias.ArrayList AL = new alias.ArrayList();
http://www.slideshare.net/IgorShkulipa 40
Операторы
Синтаксис операторов C# аналогичен синтаксису операторов С++.
if-else, while, do-while, for, switch
В операторе switch, обязательно должен присутствовать оператор
break или другая передача управления.
break, continue, goto, return, throw
Оператор foreach используется для итерации по коллекции или
массиву объектов.
string[] strings=new string[5];
...
foreach (string item in strings)
{
Console.WriteLine(item);
}
http://www.slideshare.net/IgorShkulipa 41
Нововведения версий C#
C# 2.0
• Поддержка обобщений
• Поддержка анонимных методов
• Поддержка итераторов
• Поддержка частичных типов (partial)
C# 3.0
• LINQ
• Автореализуемые свойства (get, set)
• Расширяющие методы
C# 4.0
• Динамические типы (dynamic)
• Облегчение взаимодействия с COM
• Ключевые слова in и out
C# 5.0
• Поддержка выполнения асинхронных
функций с помощью двух новых ключевых
слов – async и await
http://www.slideshare.net/IgorShkulipa 42
Создание нового проекта
http://www.slideshare.net/IgorShkulipa 43
Hello, World!!!
// Используемые пространства имен
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
// Пространство имен приложения
namespace HelloWorld
{
// Основной класс программы
class Program
{
// Статичный метод – точка входа в приложение
static void Main(string[] args)
{
// Вывод в консоль "Hello, World!!!"
Console.WriteLine("Hello, World!!!");
// Ожидание нажатия клавиши
Console.ReadKey();
}
}
}
http://www.slideshare.net/IgorShkulipa 44
Лабораторная работа №1. Базовые понятия языка C#
Создать консольное приложение на языке C#, которое реализует
следующие задания:
1. Вычислить an, а – действительное число. При этом, не пользуясь
никакими другими арифметическими операциями, кроме умножения.
2. В числе х, содержащем более двух, знаков зачеркнули его вторую
цифру. Когда к образованному при этом числу справа приписали
вторую цифру числа х, то получилось число n. По заданному n найти
число х (значение n вводится с клавиатуры, n >= 100 ).

Contenu connexe

Tendances

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
 
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
 
C++ осень 2013 лекция 7
C++ осень 2013 лекция 7C++ осень 2013 лекция 7
C++ осень 2013 лекция 7Technopark
 
C++ STL & Qt. Занятие 02.
C++ STL & Qt. Занятие 02.C++ STL & Qt. Занятие 02.
C++ STL & Qt. Занятие 02.Igor Shkulipa
 
C++ STL & Qt. Занятие 06.
C++ STL & Qt. Занятие 06.C++ STL & Qt. Занятие 06.
C++ STL & Qt. Занятие 06.Igor Shkulipa
 
C++ STL & Qt. Занятие 11.
C++ STL & Qt. Занятие 11.C++ STL & Qt. Занятие 11.
C++ STL & Qt. Занятие 11.Igor Shkulipa
 
C++ Базовый. Занятие 11.
C++ Базовый. Занятие 11.C++ Базовый. Занятие 11.
C++ Базовый. Занятие 11.Igor Shkulipa
 
C++ Базовый. Занятие 04.
C++ Базовый. Занятие 04.C++ Базовый. Занятие 04.
C++ Базовый. Занятие 04.Igor Shkulipa
 
C++ осень 2013 лекция 4
C++ осень 2013 лекция 4C++ осень 2013 лекция 4
C++ осень 2013 лекция 4Technopark
 
Классы и объекты в Java
Классы и объекты в JavaКлассы и объекты в Java
Классы и объекты в Javametaform
 
Java Core. Lecture# 1. Intro
Java Core. Lecture# 1. IntroJava Core. Lecture# 1. Intro
Java Core. Lecture# 1. IntroAnton Moiseenko
 
Классы и объекты в Java
Классы и объекты в JavaКлассы и объекты в Java
Классы и объекты в Javametaform
 
Работа с БД в Java
Работа с БД в JavaРабота с БД в Java
Работа с БД в Javametaform
 
C++ STL & Qt. Занятие 01.
C++ STL & Qt. Занятие 01.C++ STL & Qt. Занятие 01.
C++ STL & Qt. Занятие 01.Igor Shkulipa
 
C++ STL & Qt. Занятие 08.
C++ STL & Qt. Занятие 08.C++ STL & Qt. Занятие 08.
C++ STL & Qt. Занятие 08.Igor Shkulipa
 

Tendances (15)

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.
 
Java Core. Lecture# 2. Classes & objects.
Java Core. Lecture# 2. Classes & objects.Java Core. Lecture# 2. Classes & objects.
Java Core. Lecture# 2. Classes & objects.
 
C++ осень 2013 лекция 7
C++ осень 2013 лекция 7C++ осень 2013 лекция 7
C++ осень 2013 лекция 7
 
C++ STL & Qt. Занятие 02.
C++ STL & Qt. Занятие 02.C++ STL & Qt. Занятие 02.
C++ STL & Qt. Занятие 02.
 
C++ STL & Qt. Занятие 06.
C++ STL & Qt. Занятие 06.C++ STL & Qt. Занятие 06.
C++ STL & Qt. Занятие 06.
 
C++ STL & Qt. Занятие 11.
C++ STL & Qt. Занятие 11.C++ STL & Qt. Занятие 11.
C++ STL & Qt. Занятие 11.
 
C++ Базовый. Занятие 11.
C++ Базовый. Занятие 11.C++ Базовый. Занятие 11.
C++ Базовый. Занятие 11.
 
C++ Базовый. Занятие 04.
C++ Базовый. Занятие 04.C++ Базовый. Занятие 04.
C++ Базовый. Занятие 04.
 
C++ осень 2013 лекция 4
C++ осень 2013 лекция 4C++ осень 2013 лекция 4
C++ осень 2013 лекция 4
 
Классы и объекты в Java
Классы и объекты в JavaКлассы и объекты в Java
Классы и объекты в Java
 
Java Core. Lecture# 1. Intro
Java Core. Lecture# 1. IntroJava Core. Lecture# 1. Intro
Java Core. Lecture# 1. Intro
 
Классы и объекты в Java
Классы и объекты в JavaКлассы и объекты в Java
Классы и объекты в Java
 
Работа с БД в Java
Работа с БД в JavaРабота с БД в Java
Работа с БД в Java
 
C++ STL & Qt. Занятие 01.
C++ STL & Qt. Занятие 01.C++ STL & Qt. Занятие 01.
C++ STL & Qt. Занятие 01.
 
C++ STL & Qt. Занятие 08.
C++ STL & Qt. Занятие 08.C++ STL & Qt. Занятие 08.
C++ STL & Qt. Занятие 08.
 

En vedette

JavaScript Базовый. Занятие 02.
JavaScript Базовый. Занятие 02.JavaScript Базовый. Занятие 02.
JavaScript Базовый. Занятие 02.Igor Shkulipa
 
presentation1-150427120409-conversion-gate01
presentation1-150427120409-conversion-gate01presentation1-150427120409-conversion-gate01
presentation1-150427120409-conversion-gate01Dil Nawaz
 
Production diary 9
Production diary 9Production diary 9
Production diary 9Laila Jaleel
 
Vijay Bhosekar_ PP_Rodale Institute_Feb 9
Vijay Bhosekar_ PP_Rodale Institute_Feb 9Vijay Bhosekar_ PP_Rodale Institute_Feb 9
Vijay Bhosekar_ PP_Rodale Institute_Feb 9vijay bhosekar
 
C# Desktop. Занятие 09.
C# Desktop. Занятие 09.C# Desktop. Занятие 09.
C# Desktop. Занятие 09.Igor Shkulipa
 
Production diary 11
Production diary 11Production diary 11
Production diary 11Laila Jaleel
 
C# Desktop. Занятие 12.
C# Desktop. Занятие 12.C# Desktop. Занятие 12.
C# Desktop. Занятие 12.Igor Shkulipa
 
C++ Базовый. Занятие 14.
C++ Базовый. Занятие 14.C++ Базовый. Занятие 14.
C++ Базовый. Занятие 14.Igor Shkulipa
 
Κάτω στο γιαλό...
Κάτω στο γιαλό...Κάτω στο γιαλό...
Κάτω στο γιαλό...syllogos15sch
 
Time Out - A beginners guide to meditation for self care
Time Out - A beginners guide to meditation for self careTime Out - A beginners guide to meditation for self care
Time Out - A beginners guide to meditation for self careAndrea Fortuin
 
Production diary 9
Production diary 9Production diary 9
Production diary 9Laila Jaleel
 
Vijay Bhosekar_ PP_Rodale Institute_Feb 9
Vijay Bhosekar_ PP_Rodale Institute_Feb 9Vijay Bhosekar_ PP_Rodale Institute_Feb 9
Vijay Bhosekar_ PP_Rodale Institute_Feb 9vijay bhosekar
 
XDAQ
XDAQXDAQ
XDAQAF
 
Production diary 5
Production diary 5Production diary 5
Production diary 5Laila Jaleel
 

En vedette (20)

JavaScript Базовый. Занятие 02.
JavaScript Базовый. Занятие 02.JavaScript Базовый. Занятие 02.
JavaScript Базовый. Занятие 02.
 
presentation1-150427120409-conversion-gate01
presentation1-150427120409-conversion-gate01presentation1-150427120409-conversion-gate01
presentation1-150427120409-conversion-gate01
 
Sistema solar
Sistema solarSistema solar
Sistema solar
 
Production diary 9
Production diary 9Production diary 9
Production diary 9
 
Nowhere But Niigata
Nowhere But NiigataNowhere But Niigata
Nowhere But Niigata
 
Truly Verona
Truly VeronaTruly Verona
Truly Verona
 
Vijay Bhosekar_ PP_Rodale Institute_Feb 9
Vijay Bhosekar_ PP_Rodale Institute_Feb 9Vijay Bhosekar_ PP_Rodale Institute_Feb 9
Vijay Bhosekar_ PP_Rodale Institute_Feb 9
 
C# Desktop. Занятие 09.
C# Desktop. Занятие 09.C# Desktop. Занятие 09.
C# Desktop. Занятие 09.
 
assignment
assignmentassignment
assignment
 
Emergency Assistance
Emergency AssistanceEmergency Assistance
Emergency Assistance
 
Production diary 11
Production diary 11Production diary 11
Production diary 11
 
C# Desktop. Занятие 12.
C# Desktop. Занятие 12.C# Desktop. Занятие 12.
C# Desktop. Занятие 12.
 
C++ Базовый. Занятие 14.
C++ Базовый. Занятие 14.C++ Базовый. Занятие 14.
C++ Базовый. Занятие 14.
 
Κάτω στο γιαλό...
Κάτω στο γιαλό...Κάτω στο γιαλό...
Κάτω στο γιαλό...
 
Time Out - A beginners guide to meditation for self care
Time Out - A beginners guide to meditation for self careTime Out - A beginners guide to meditation for self care
Time Out - A beginners guide to meditation for self care
 
What is Lean UX?
What is Lean UX?What is Lean UX?
What is Lean UX?
 
Production diary 9
Production diary 9Production diary 9
Production diary 9
 
Vijay Bhosekar_ PP_Rodale Institute_Feb 9
Vijay Bhosekar_ PP_Rodale Institute_Feb 9Vijay Bhosekar_ PP_Rodale Institute_Feb 9
Vijay Bhosekar_ PP_Rodale Institute_Feb 9
 
XDAQ
XDAQXDAQ
XDAQ
 
Production diary 5
Production diary 5Production diary 5
Production diary 5
 

Similaire à C# Desktop. Занятие 01.

C++ осень 2012 лекция 1
C++ осень 2012 лекция 1C++ осень 2012 лекция 1
C++ осень 2012 лекция 1Technopark
 
презентация конспекта лекций
презентация конспекта лекцийпрезентация конспекта лекций
презентация конспекта лекцийstudent_kai
 
C# Web. Занятие 04.
C# Web. Занятие 04.C# Web. Занятие 04.
C# Web. Занятие 04.Igor Shkulipa
 
компоненты E learn для Plone
компоненты E learn для Ploneкомпоненты E learn для Plone
компоненты E learn для PloneSergey Greger
 
Глава 2: Среда разработки NetBeans
Глава 2: Среда разработки NetBeansГлава 2: Среда разработки NetBeans
Глава 2: Среда разработки NetBeansmetaform
 
Как пройти собеседование и получить первую работу на Swift
Как пройти собеседование и получить первую работу на SwiftКак пройти собеседование и получить первую работу на Swift
Как пройти собеседование и получить первую работу на SwiftAnton Loginov
 
Общие темы. Тема 02.
Общие темы. Тема 02.Общие темы. Тема 02.
Общие темы. Тема 02.Igor Shkulipa
 
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
 
C++ осень 2012 лекция 7
C++ осень 2012 лекция 7C++ осень 2012 лекция 7
C++ осень 2012 лекция 7Technopark
 
C++ осень 2013 лекция 8
C++ осень 2013 лекция 8C++ осень 2013 лекция 8
C++ осень 2013 лекция 8Technopark
 
2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий
2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий
2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел КрынецкийJSC “Arcadia Inc”
 
C++ Базовый. Занятие 08.
C++ Базовый. Занятие 08.C++ Базовый. Занятие 08.
C++ Базовый. Занятие 08.Igor Shkulipa
 
Конспект лекций по курсу "Шаблоны разработки ПО"
Конспект лекций по курсу "Шаблоны разработки ПО"Конспект лекций по курсу "Шаблоны разработки ПО"
Конспект лекций по курсу "Шаблоны разработки ПО"Sergey Nemchinsky
 
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...Dev_Party
 
основы ооп на языке C#. часть 1. введение в программирование
основы ооп на языке C#. часть 1. введение в программированиеосновы ооп на языке C#. часть 1. введение в программирование
основы ооп на языке C#. часть 1. введение в программированиеYakubovichDA
 

Similaire à C# Desktop. Занятие 01. (20)

C++ осень 2012 лекция 1
C++ осень 2012 лекция 1C++ осень 2012 лекция 1
C++ осень 2012 лекция 1
 
презентация конспекта лекций
презентация конспекта лекцийпрезентация конспекта лекций
презентация конспекта лекций
 
Классы и объекты С#
Классы и объекты С#Классы и объекты С#
Классы и объекты С#
 
A2
A2A2
A2
 
C# Web. Занятие 04.
C# Web. Занятие 04.C# Web. Занятие 04.
C# Web. Занятие 04.
 
компоненты E learn для Plone
компоненты E learn для Ploneкомпоненты E learn для Plone
компоненты E learn для Plone
 
Глава 2: Среда разработки NetBeans
Глава 2: Среда разработки NetBeansГлава 2: Среда разработки NetBeans
Глава 2: Среда разработки NetBeans
 
Как пройти собеседование и получить первую работу на Swift
Как пройти собеседование и получить первую работу на SwiftКак пройти собеседование и получить первую работу на Swift
Как пройти собеседование и получить первую работу на Swift
 
Java 2 - Java Intro
Java 2 - Java IntroJava 2 - Java Intro
Java 2 - Java Intro
 
Общие темы. Тема 02.
Общие темы. Тема 02.Общие темы. Тема 02.
Общие темы. Тема 02.
 
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.
 
C++ осень 2012 лекция 7
C++ осень 2012 лекция 7C++ осень 2012 лекция 7
C++ осень 2012 лекция 7
 
C++ осень 2013 лекция 8
C++ осень 2013 лекция 8C++ осень 2013 лекция 8
C++ осень 2013 лекция 8
 
2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий
2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий
2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий
 
Symfony 3
Symfony 3Symfony 3
Symfony 3
 
C++ Базовый. Занятие 08.
C++ Базовый. Занятие 08.C++ Базовый. Занятие 08.
C++ Базовый. Занятие 08.
 
C# programming
C# programmingC# programming
C# programming
 
Конспект лекций по курсу "Шаблоны разработки ПО"
Конспект лекций по курсу "Шаблоны разработки ПО"Конспект лекций по курсу "Шаблоны разработки ПО"
Конспект лекций по курсу "Шаблоны разработки ПО"
 
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
 
основы ооп на языке C#. часть 1. введение в программирование
основы ооп на языке C#. часть 1. введение в программированиеосновы ооп на языке C#. часть 1. введение в программирование
основы ооп на языке C#. часть 1. введение в программирование
 

Plus de Igor Shkulipa

Общие темы. Тема 03.
Общие темы. Тема 03. Общие темы. Тема 03.
Общие темы. Тема 03. Igor Shkulipa
 
Общие темы. Тема 01.
Общие темы. Тема 01.Общие темы. Тема 01.
Общие темы. Тема 01.Igor Shkulipa
 
JavaScript Базовый. Занятие 06.
JavaScript Базовый. Занятие 06.JavaScript Базовый. Занятие 06.
JavaScript Базовый. Занятие 06.Igor Shkulipa
 
JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.Igor Shkulipa
 
JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.Igor Shkulipa
 
JavaScript Базовый. Занятие 10.
JavaScript Базовый. Занятие 10.JavaScript Базовый. Занятие 10.
JavaScript Базовый. Занятие 10.Igor Shkulipa
 
JavaScript Базовый. Занятие 05.
JavaScript Базовый. Занятие 05.JavaScript Базовый. Занятие 05.
JavaScript Базовый. Занятие 05.Igor Shkulipa
 
JavaScript Базовый. Занятие 08.
JavaScript Базовый. Занятие 08.JavaScript Базовый. Занятие 08.
JavaScript Базовый. Занятие 08.Igor Shkulipa
 
JavaScript Базовый. Занятие 07.
JavaScript Базовый. Занятие 07.JavaScript Базовый. Занятие 07.
JavaScript Базовый. Занятие 07.Igor Shkulipa
 
JavaScript Базовый. Занятие 01.
JavaScript Базовый. Занятие 01.JavaScript Базовый. Занятие 01.
JavaScript Базовый. Занятие 01.Igor Shkulipa
 
JavaScript Базовый. Занятие 04.
JavaScript Базовый. Занятие 04.JavaScript Базовый. Занятие 04.
JavaScript Базовый. Занятие 04.Igor Shkulipa
 
JavaScript Базовый. Занятие 03.
JavaScript Базовый. Занятие 03.JavaScript Базовый. Занятие 03.
JavaScript Базовый. Занятие 03.Igor Shkulipa
 
C# Web. Занятие 09.
C# Web. Занятие 09.C# Web. Занятие 09.
C# Web. Занятие 09.Igor Shkulipa
 
C# Web. Занятие 08.
C# Web. Занятие 08.C# Web. Занятие 08.
C# Web. Занятие 08.Igor Shkulipa
 
C# Web. Занятие 07.
C# Web. Занятие 07.C# Web. Занятие 07.
C# Web. Занятие 07.Igor Shkulipa
 
C# Web. Занятие 12.
C# Web. Занятие 12.C# Web. Занятие 12.
C# Web. Занятие 12.Igor Shkulipa
 
C# Web. Занятие 16.
C# Web. Занятие 16.C# Web. Занятие 16.
C# Web. Занятие 16.Igor Shkulipa
 
C# Web. Занятие 14.
C# Web. Занятие 14.C# Web. Занятие 14.
C# Web. Занятие 14.Igor Shkulipa
 
C# Web. Занятие 15.
C# Web. Занятие 15.C# Web. Занятие 15.
C# Web. Занятие 15.Igor Shkulipa
 
C# Web. Занятие 13.
C# Web. Занятие 13.C# Web. Занятие 13.
C# Web. Занятие 13.Igor Shkulipa
 

Plus de Igor Shkulipa (20)

Общие темы. Тема 03.
Общие темы. Тема 03. Общие темы. Тема 03.
Общие темы. Тема 03.
 
Общие темы. Тема 01.
Общие темы. Тема 01.Общие темы. Тема 01.
Общие темы. Тема 01.
 
JavaScript Базовый. Занятие 06.
JavaScript Базовый. Занятие 06.JavaScript Базовый. Занятие 06.
JavaScript Базовый. Занятие 06.
 
JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.
 
JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.
 
JavaScript Базовый. Занятие 10.
JavaScript Базовый. Занятие 10.JavaScript Базовый. Занятие 10.
JavaScript Базовый. Занятие 10.
 
JavaScript Базовый. Занятие 05.
JavaScript Базовый. Занятие 05.JavaScript Базовый. Занятие 05.
JavaScript Базовый. Занятие 05.
 
JavaScript Базовый. Занятие 08.
JavaScript Базовый. Занятие 08.JavaScript Базовый. Занятие 08.
JavaScript Базовый. Занятие 08.
 
JavaScript Базовый. Занятие 07.
JavaScript Базовый. Занятие 07.JavaScript Базовый. Занятие 07.
JavaScript Базовый. Занятие 07.
 
JavaScript Базовый. Занятие 01.
JavaScript Базовый. Занятие 01.JavaScript Базовый. Занятие 01.
JavaScript Базовый. Занятие 01.
 
JavaScript Базовый. Занятие 04.
JavaScript Базовый. Занятие 04.JavaScript Базовый. Занятие 04.
JavaScript Базовый. Занятие 04.
 
JavaScript Базовый. Занятие 03.
JavaScript Базовый. Занятие 03.JavaScript Базовый. Занятие 03.
JavaScript Базовый. Занятие 03.
 
C# Web. Занятие 09.
C# Web. Занятие 09.C# Web. Занятие 09.
C# Web. Занятие 09.
 
C# Web. Занятие 08.
C# Web. Занятие 08.C# Web. Занятие 08.
C# Web. Занятие 08.
 
C# Web. Занятие 07.
C# Web. Занятие 07.C# Web. Занятие 07.
C# Web. Занятие 07.
 
C# Web. Занятие 12.
C# Web. Занятие 12.C# Web. Занятие 12.
C# Web. Занятие 12.
 
C# Web. Занятие 16.
C# Web. Занятие 16.C# Web. Занятие 16.
C# Web. Занятие 16.
 
C# Web. Занятие 14.
C# Web. Занятие 14.C# Web. Занятие 14.
C# Web. Занятие 14.
 
C# Web. Занятие 15.
C# Web. Занятие 15.C# Web. Занятие 15.
C# Web. Занятие 15.
 
C# Web. Занятие 13.
C# Web. Занятие 13.C# Web. Занятие 13.
C# Web. Занятие 13.
 

C# Desktop. Занятие 01.

  • 1. Темы лекции: Введение. Обзор C#. Практическое задание: Базовые понятия языка C# Тренер: Игорь Шкулипа, к.т.н. Платформа .Net и язык программирования C#. Занятие 1
  • 2. http://www.slideshare.net/IgorShkulipa 2 Курс «Платформа .Net и язык программирования C#» Курс состоит из трех основных модулей: 1. Базовые понятия ООП и языка программирования С# • Обзор C# • ООП на C# • Перегрузка операций и обработка исключений • Стандартный ввод-вывод • Обобщения • Строки, массивы, коллекции • Делегаты, события, анонимные методы, лямбда-выражения 2. Организация взаимодействия с базами данных и приложениями • Windows Forms • XML • Windows Presentation Foundation • ADO.Net • COM Interop • LINQ 3. Дополнительные темы • Динамические типы • Многопоточность в C# • Модульное тестирование ПО (unit testing) • Паттерны проектирования
  • 3. http://www.slideshare.net/IgorShkulipa 3 Время и оценка результатов курса Курс состоит из 25 занятий, общей длительностью 100 часов аудиторной работы. Оценка теоретической части: 1. Два промежуточных теста (максимальная оценка - 100 баллов) 2. Результирующий тест (максимальная оценка - 100 баллов) Оценка практической части: 1. Групповой проект (максимальная оценка – 100 баллов) 2. 15 лабораторных работ (максимальная средняя оценка - 100 баллов) Курсовой проект: 1. На протяжении курса студенты выполняют курсовой проект по индивидуальной теме (максимальная оценка - 100 баллов)
  • 4. http://www.slideshare.net/IgorShkulipa 4 Результирующий рейтинг >= 70% < 70% • TP – средняя оценка за промежуточные тесты (макс. 100) • TR – оценка за результирующий тест (макс. 100) • LR – средняя оценка за выполнение лабораторных работ (макс. 100) • GP – средняя оценка за групповой проект (макс. 100) • CP – оценка за курсовой проект (макс. 100) Результат курса = 0.15*TP + 0.15*TR + 0.2*LR +0.2*GP+ 0.3*CP
  • 5. http://www.slideshare.net/IgorShkulipa 5 Литература 1. Джеффри Рихтер / CLR via C#. Программирование на платформе Microsoft .NET Framework 4.0 на языке C#: Питер, 2011, 928 с. 1. Троелсен Эндрю / Язык программирования C# 5.0 и платформа .NET 4.5, 6-е изд.: Пер. с англ.: Изд. дом «Вильямс», 2013. - 1312 c. 1. Трей Неш / C# 2010: ускоренный курс для профессионалов: Пер. с англ.: Изд. дом «Вильямс», 2010. - 592 c. 1. http://msdn.microsoft.com/library/vstudio/ 1. Руководство Microsoft по проектированию архитектуры приложений. 2-е издание.
  • 6. http://www.slideshare.net/IgorShkulipa 6 Объектно-ориентированное программирование ООП – это парадигма программирования, основанная на представлении предметной области в виде взаимосвязанных абстрактных объектов и их реализаций. В ООП вводится понятие Класса – пользовательского типа данных, объединяющего данные и методы их обработки. Объектом называется экземпляр класса. Автомобиль– это класс (тип данных) Автомобиль Bentley Continental GT черного цвета – это объект, или экземпляр класса «Автомобиль»
  • 7. http://www.slideshare.net/IgorShkulipa 7 Объекты Объекты характеризуются понятиями состояния, поведения и идентичности. Состояние объекта характеризуется перечнем всех свойств данного объекта и текущими значениями каждого из этих свойств. Поведение - это то, как объект действует и реагирует; поведение выражается в терминах состояния объекта и передачи сообщений. Поведение объекта - это его наблюдаемая и проверяемая извне деятельность. Поведение объекта строится из его операций (определенное воздействие одного объекта на другой ). Существует три вида операций • Модификатор - операция, которая изменяет состояние объекта • Селектор - операция, считывающая состояние объекта, но не меняющая состояния • Итератор - операция, позволяющая организовать доступ ко всем частям объекта в строго определенной последовательности Идентичность - это такое свойство объекта или такой набор свойств, который отличает его от всех других объектов.
  • 8. http://www.slideshare.net/IgorShkulipa 8 Члены и методы класса Члены-данные (поля) (data members) хранят всю необходимую информацию об объекте, формируют его состояние, характеристики и т.п. Изменение состояния объекта или его характеристик связано с изменением данных, которые в нем содержатся. Метод объекта (methods) – программный код, выполненный в виде функции, реагирующий на передачу объекту определенного сообщения. Вызов метода объекта может приводить к изменению его состояния (значение членов-данных), а может и не приводить Класс может содержать один или более методов, позволяющих осуществлять манипуляцию данными объекта
  • 9. http://www.slideshare.net/IgorShkulipa 9 Свойства Свойство – составляющая часть объекта, доступ к которой осуществляется как к члену объекта, но таковым не является (реализуют принцип инкапсуляции для членов объекта). В некоторых объектно-ориентированных языках программирования (например, в C++) свойства, как элемент языка, отсутствуют. В этом случае в класс добавляют методы, посредством которых осуществляется доступ к необходимым переменным класса.
  • 10. http://www.slideshare.net/IgorShkulipa 10 Абстракция данных Объекты представляют неполную информацию о реальных сущностях предметной области. Абстракция позволяет оперировать с объектном на уровне, адекватном решаемой задаче. Высокоуровневые обращения к объекту могут обрабатываться с помощью вызова функций и методов низкого уровня. В основе реализации этого принципа лежит использование абстрактных классов интерфейсов.
  • 11. http://www.slideshare.net/IgorShkulipa 11 Инкапсуляция Инкапсуляция – объединение в одной оболочке данных и методов их обработки, а так же способность объекта скрывать внутреннее устройство своих полей и методов. Согласно данному принципу, класс должен рассматриваться как черный ящик. Внешний пользователь не знает детали реализации объекта и работает с ним только путем предоставленного объектом интерфейса (или открытых методов доступа). Следование данному принципу может уменьшить число связей между классами и упростить их независимую реализацию, модификацию и тестирование.
  • 12. http://www.slideshare.net/IgorShkulipa 12 Композиция классов Композиция (а так же ассоциация и агрегирование) – механизм для создания нового класса путем объединения нескольких объектов существующих классов в единое целое. При агрегировании между классами действует «отношение принадлежности» • У машины есть кузов, колеса и двигатель • У человека есть голова, руки, ноги и тело • У треугольника есть вершины Вложенные объекты обычно объявляются закрытыми (private) внутри класса-агрегата
  • 13. http://www.slideshare.net/IgorShkulipa 13 Наследование Наследование – это механизм ООП, позволяющий описать новый класс на основе уже существующего. При наследовании свойства и функциональность родительского класса наследуются новым классом. Класс-наследник имеет доступ к публичным (public) и защищенным (protected) методам и полям класса родительского класса. Класс-наследник может добавлять свои данные и методы, а также переопределять методы базового класса
  • 14. http://www.slideshare.net/IgorShkulipa 14 Основные термины Родительский или базовый класс (класс-родитель) – класс, выступающий в качестве основы при наследовании. Класс-потомок (дочерний класс, класс-наследник) – класс, образованный в результате наследования от родительского класса. Иерархия наследования – отношения между родительским классом и его потомками. Интерфейс класса – совокупность публичных методов класса, доступная для использования вне класса. В интерфейсной части данные обычно не размещают. Реализация класса – совокупность приватных методов и данных класса
  • 15. http://www.slideshare.net/IgorShkulipa 15 Виды наследования По типу наследования: • Открытое (public) наследование • Закрытое (private) наследование • Защищенное (protected) наследование По количеству базовых классов: • Одиночное наследование (один базовый класс) • Множественное наследование (два и более базовых классов)
  • 16. http://www.slideshare.net/IgorShkulipa 16 Полиморфизм Полиморфизм - это свойство, которое позволяет одно и то же имя использовать для решения нескольких схожих, но технически разных задач. Целью полиморфизма является использование одного имени для задания общих для класса действий. Использование полиморфизма достигается при присвоении указателю на базовый класс адреса производного класса с переопределенными методами. Типы-наследники неявно приводимы к базовому классу.
  • 17. http://www.slideshare.net/IgorShkulipa 17 Microsoft .NET Framework Платформа .NET Framework является надстройкой над операционной системой, в качестве которой может выступать любая версия Windows. На сегодняшний день платформа .NET Framework включает в себя: 1. Компиляторы четырех официальных языков: С#, VB.NET, Managed C++ (управляемый C++) и JScript .NET 2. Объектно-ориентированную среду CLR (Common Language Runtime), совместно используемую этими языками для создания приложений под Windows и для Internet 3. Ряд связанных между собой библиотек классов под общим именем FCL (Framework Class Library)
  • 19. http://www.slideshare.net/IgorShkulipa 19 C# и CLR Самым важным компонентом платформы .NET Framework является CLR (Common Language Runtime), предоставляющая среду, в которой выполняются программы. Главная ее роль заключается в том, чтобы обнаруживать и загружать типы .NET и производить управление ими в соответствии с полученными командами. CLR включает в себя виртуальную машину, во многих отношениях аналогичную виртуальной машине Java. На верхнем уровне среда активизирует объекты, производит проверку безопасности, размещает объекты в памяти, выполняет их, а также запускает сборщик мусора. Код на языке C# компилируется в, так называемый CIL ( Common Intermediate Language) - стандартизированный промежуточный язык, чем-то похожий на объектно-ориентированный ассемблер. Код на CIL выполняется виртуальной машиной CLR, а результат в виде шестнадцатеричных команд отправляется на выполнение операционной системой.
  • 20. http://www.slideshare.net/IgorShkulipa 20 JIT-компилятор Среда CLR – это не интерпретатор, как может показаться на первый взгляд. В действительности, CLR компилирует код IL в машинный код, прежде чем выполнить его, то есть осуществляет JIT (Just in Time) компиляцию. Этот процесс может показаться неэффективным, но, на самом деле, это обозначает лишь одноразовое понижение производительности для каждого участка программы. Как только код один раз скомпилирован, CLR сохраняет его и выполняет каждый раз, когда это необходимо. Код, выполняемый CLR называется управляемым кодом (managed code)
  • 21. http://www.slideshare.net/IgorShkulipa 21 Преимущества управляемого кода • Управляемые приложения могут потреблять меньше памяти. IL-код занимает меньше места в памяти, чем «родной» код, то есть количество памяти у управляемых приложений, обычно, меньше, чем у «родных». • JIT-компиляции подвергается только тот код, который выполняется. IL-код более компактен, чем машинный, по этому сокращение компилируемого кода до минимума сокращает объем памяти приложения. • Код более оптимизирован. Код после JIT-компиляции оптимизируется непосредственно для платформы, на которой он выполняется. • Среда CLR отслеживает частоту вызовов. Если CLR видит, что некоторый код долгое время не вызывался, то она может освободить память, занимаемую им. При следующем обращении, этот код будет перекомпилирован. • Автоматическая сборка мусора. Нет необходимости в ручном управлении памятью и освобождении занятых ресурсов.
  • 22. http://www.slideshare.net/IgorShkulipa 22 Сборки Сборка (assmebly) – это дискретная единица многократно используемого кода внутри CLR. Сборки похожи на обычные DLL библиотеки или исполняемые EXE файлы. Сборка может состоять из многих модулей, которые объединяет вместе манифест, описывающий содержимое сборки. Сборки могут иметь версии, что позволяет идентифицировать одноименные сборки с разными версиями. Сборки содержат метаданные, описывающие содержащиеся в них типы. Загрузчик сборок с помощью конфигурационных файлов системы, определяет, какую версию сборки необходимо загрузить в данный момент.
  • 23. http://www.slideshare.net/IgorShkulipa 23 Назначение сборкам имен • Строгое именование. Такая сборка имеет имя, состоящее из четырех частей: краткое имя сборки, номер версии, идентификатор культуры и хеш-маркер. • Частичное именование. Сборка имеет имя, в котором опущены некоторые части строгого имени. GAC (Global Assembly Cache) – некоторое подобие реестра сборок. Регистрация сборки в GAC подобна регистрации приложения в системном реестре. Если сборка зарегистрирована со строгим именованием, то она может быть использована всеми приложениями системы. Сборки с частичным именованием могут использоваться только локальными приложениями, то есть сама сборка должна находиться где-нибудь в каталоге приложения или в подкаталогах.
  • 24. http://www.slideshare.net/IgorShkulipa 24 Метаданные Метаданные – это расширяемый формат описания содержимого сборок. Можно определять собственные специальные атрибуты, которые легко включаются в метаданные типа. Почти любая сущность программы может иметь присоединенные к ней метаданные, включая классы, методы, параметры, возвращаемые значения и т.д. С помощью метаданных можно исследовать определения типов и присоединенные к ним атрибуты. Метаданные могут сообщить о том, поддерживает некоторый класс определенный метод, прежде чем пытаться взывать его, или порожден ли этот класс от какого-либо другого класса. Процесс просмотра метаданных называется рефлексией. Для этого служат оператор typeof (работает во время компиляции) или метод GetType() (работает во время выполнения), которые возвращают объект типа System.Type.
  • 25. http://www.slideshare.net/IgorShkulipa 25 Сборщик мусора Сборка мусора представляет собой непрерывный процесс слежения за состоянием памяти. Однако, активную фазу принимает в основном в момент острого недостатка памяти для продолжения работы приложения. Сборщик мусора всегда запускается в отдельном потоке и в момент его активной работы, все остальные потоки приложения приостанавливаются. Сборщик мусора не проходит по всем находящимся в памяти объектам и не изучает их. Вместо этого CLR выполняет проход по определенной группе объектов. В .NET эти группы называются поколениями: • Поколение 0. Новый созданный объект, который еще никогда не помечался как кандидат на удаление; • Поколение 1. Объект, который уже однажды пережил сборку мусора. Сюда обычно попадают объекты, которые были помечены для удаления, но все-таки не удалены из-за того, что места в памяти (куче) было достаточно; • Поколение 2. Объекты, которые пережили более одной очистки памяти сборщиком мусора. Очевидно, что чем выше поколение объекта, то тем дольше он находится в памяти. Более того, вероятность дальнейшего его существования в куче больше, чем у объекта более низкого поколения.
  • 26. http://www.slideshare.net/IgorShkulipa 26 Язык C# Язык C# был разработан, как основной язык программирования для платформы Microsoft .NET Framework. Разработан в 1998—2001 годах группой инженеров под руководством Андерса Хейлсберга в компании Microsoft. Синтаксис C# основан на языках C++ и Java – в то время, доминирующих языках в разработке программного обеспечения. C# - строго типизированный язык, то есть каждая переменная и экземпляр класса относятся к четко определенному типу.
  • 27. http://www.slideshare.net/IgorShkulipa 27 Базовые типы данных СТS Тип Имя псевдонима в С# Описание System.Object object Класс , базовый для всех типов (CTS) System.String string Строка System.SByte sbyte 8 -разрядный байт (со знаком) System.Byte byte 8 -разрядный байт (без знака) System.Int16 short 16-разрядное число (со знаком) System.UInt16 ushort 16-разрядное число (без знака) System.Int32 int 32-разрядное число (со знаком) System.UInt32 uint 32-разрядное число (без знака) System.Int64 long 64-разрядное число (со знаком) System.UInt64 ulong 64-разрядное число (без знака) System.Char char 16-разрядный символ (Unicode) System.Single float 32-разрядное число с плавающей точкой, (стандарт IEEE) System.Double double 64-разрядное число с плавающей точкой, (стандарт IEEE) System.Boolean bool Булевское значение (true/false) System.Decimal decimal Данный 128 разрядный тип используется в основном, когда требуется крайне высокая точность (до 28 знака) Встроенные числовые типы являются структурами, и к их свойствам и методам можно получить доступ.
  • 30. http://www.slideshare.net/IgorShkulipa 30 Типы CLR • Типы значений (value types). Определяются с помощью ключевого слова struct. Экземпляры типов значений – это единственные экземпляры, которые могут располагаться в стеке приложения. В управляемой куче они могут располагаться, если они являются членами ссылочных типов. Во многом аналогичны структурам С++. • Ссылочные типы (reference types). Определяются с помощью ключевого слова class, в стеке приложения находится ссылка на экземпляр. Сами экземпляры располагаются в управляемой куче.
  • 31. http://www.slideshare.net/IgorShkulipa 31 Типы значений Типы значений являются производными от System.ValueType, являющегося производным от System.Object. Типы, производные от System.ValueType, имеют особое поведение в среде CLR. Переменные типа значения напрямую содержат их значения, что означает, что память встроена в контекст, в котором объявлена переменная. Не существует отдельного размещения кучи или служебных данных сборки мусора для переменных типа значения. Существует две категории типов значений: структура и перечисление. Типы значений являются запечатанными, что означает, например, что нельзя произвести тип от System.Int32, и нельзя определить структуру для наследования от любого пользовательского класса или структуры, поскольку структура может наследовать только от System.ValueType. Однако структура может реализовать один или несколько интерфейсов. Можно выполнить приведение типа структуры в тип интерфейса; это приведет к операции упаковки-преобразования для создания программы-оболочки структуры внутри объекта ссылочного типа в управляемой куче.
  • 32. http://www.slideshare.net/IgorShkulipa 32 Структуры Ключевое слово struct используется для создания собственных пользовательских типов значений. Обычно структура используется как контейнер для небольшого набора связанных переменных public struct Coords { public int x, y; public Coords(int p1, int p2) { x = p1; y = p2; } }
  • 33. http://www.slideshare.net/IgorShkulipa 33 Перечисления Другой категорией типов значений является перечисление. Перечисление определяет набор именованных интегральных констант. По умолчанию базовым типом каждого элемента перечисления является int. Можно задать другой целочисленный тип, используя двоеточие. public enum FileMode { CreateNew = 1, Create = 2, Open = 3, OpenOrCreate = 4, Truncate = 5, Append = 6 } enum Days { Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday }; enum Months : byte { Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec };
  • 34. http://www.slideshare.net/IgorShkulipa 34 Ссылочные типы Часто определяются с помощью ключевого слова class. Фактически переменные ссылочных типов подобны переменным типов значений, которые имеют тип и содержат указатель на объект в куче. Все ссылочные типы неявно наследуются от System.Object (object). По соглашению термином «объект» обозначается экземпляр ссылочного типа, а термином «значение» - типа значений. Переменные ссылочного типа инициализируются либо с помощью операции new, либо присваиванием переменной значения совместимого типа. object o1= new object(); object o2= o1; CLR управляет всеми ссылками на объекты в куче, в том числе выполняет сборку мусора, так что нет необходимости в ручном освобождении памяти.
  • 35. http://www.slideshare.net/IgorShkulipa 35 Инициализация переменных по умолчанию Когда создается объект, система инициализирует его поля, значениями по умолчанию: 1. Поля, относящиеся к типам значений, инициализируются установкой всех битов в 0. 1. Значением по умолчанию для ссылок на объекты является null. 1. Поля логического типа инициализируются значением false.
  • 36. http://www.slideshare.net/IgorShkulipa 36 Неявно типизированные переменные Объявляя локальную переменную с помощью ключевого слова var, вы просите компилятор зарезервировать некоторый участок памяти для хранения этой переменной. На этапе компиляции у компилятора достаточно информации о типе будущего экземпляра, так как его тип указан явно. var MyList = new List<int>(); MyList.Add(1); MyList.Add(2); MyList.Add(3); foreach(var i in MyList) { Console.WriteLine(i); } (!) Замечание: Неявно типизированные переменные должны быть проинициализированы. var WrongValue; // выдаст ошибку компиляции
  • 37. http://www.slideshare.net/IgorShkulipa 37 Преобразование типов 1. Присвоение "большему типу" значения "меньшего типа". Безопасное присвоение, гарантирует сохранение значения. int IntValue = 12345678; long LongValue = 1234567890; LongValue=IntValue; 2. Присвоение "меньшему типу" значения "большего типа“ должно быть явным. Потенциально опасное присвоение, грозит потерей информации. int IntValue = 12345678; long LongValue = 1234567890; IntValue = (int) LongValue; 3. Ссылка на DerivedType может быть неявно преобразована к BaseType, если DerivedType унаследован от BaseType. BaseType DT = new DerivedType(); 4. Ссылка на BaseType должна преобразовываться к DerivedType явно. Но такое явно преобразование может сгенерировать InvalidCastException во время выполнения программы, если CLR не сможет выполнить такое преобразование. BaseType BT = new BaseType(); DerivedType DT = new DerivedType(); DT = (DerivedType)BT; // Небезопасно!!!
  • 38. http://www.slideshare.net/IgorShkulipa 38 Операции as и is Операция is возвращает булевское значение, говорящее о том, можно ли преобразовать данное выражение в указанный тип: long LValue=123; bool IsInt= LValue is int; DerivedClass DC=new DerivedClass(); bool IsBase=DC is BaseClass; Операция as подобна is, но она возвращает ссылку на уже преобразованный объект указанного типа, либо null, если такое преобразование невозможно. BaseClass BC=DC as BaseClass;
  • 39. http://www.slideshare.net/IgorShkulipa 39 Пространства имен Пространства имен (namespace) предоставляют программистам возможность логичной взаимосвязи классов и других типов. Само понятие namespace скорее является логическим, нежели физическим. namespace NameSpace { public struct Name { // Код структуры ... } } Для использования имен из пространства имен существует директива using. using NameSpace; using System; using System.Collections; using Microsoft.Office.Interop.Excel; Еще одним применением ключевого слова using в C# является назначение псевдонимов классам и пространствам имен: using alias = NameSpace; using alias = System.Collections; ... alias.ArrayList AL = new alias.ArrayList();
  • 40. http://www.slideshare.net/IgorShkulipa 40 Операторы Синтаксис операторов C# аналогичен синтаксису операторов С++. if-else, while, do-while, for, switch В операторе switch, обязательно должен присутствовать оператор break или другая передача управления. break, continue, goto, return, throw Оператор foreach используется для итерации по коллекции или массиву объектов. string[] strings=new string[5]; ... foreach (string item in strings) { Console.WriteLine(item); }
  • 41. http://www.slideshare.net/IgorShkulipa 41 Нововведения версий C# C# 2.0 • Поддержка обобщений • Поддержка анонимных методов • Поддержка итераторов • Поддержка частичных типов (partial) C# 3.0 • LINQ • Автореализуемые свойства (get, set) • Расширяющие методы C# 4.0 • Динамические типы (dynamic) • Облегчение взаимодействия с COM • Ключевые слова in и out C# 5.0 • Поддержка выполнения асинхронных функций с помощью двух новых ключевых слов – async и await
  • 43. http://www.slideshare.net/IgorShkulipa 43 Hello, World!!! // Используемые пространства имен using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; // Пространство имен приложения namespace HelloWorld { // Основной класс программы class Program { // Статичный метод – точка входа в приложение static void Main(string[] args) { // Вывод в консоль "Hello, World!!!" Console.WriteLine("Hello, World!!!"); // Ожидание нажатия клавиши Console.ReadKey(); } } }
  • 44. http://www.slideshare.net/IgorShkulipa 44 Лабораторная работа №1. Базовые понятия языка C# Создать консольное приложение на языке C#, которое реализует следующие задания: 1. Вычислить an, а – действительное число. При этом, не пользуясь никакими другими арифметическими операциями, кроме умножения. 2. В числе х, содержащем более двух, знаков зачеркнули его вторую цифру. Когда к образованному при этом числу справа приписали вторую цифру числа х, то получилось число n. По заданному n найти число х (значение n вводится с клавиатуры, n >= 100 ).