презентация кметодическим указаниям к лаб. работам

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

Upload: studentkai

Post on 15-Jun-2015

88 views

Category:

Education


2 download

TRANSCRIPT

Page 1: презентация кметодическим указаниям к лаб. работам

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

Лабораторный практикум.

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

Page 2: презентация кметодическим указаниям к лаб. работам

Структура консольного приложения

using System;namespace ConsoleApplication10{

/// <summary>/// Summary description for Class1./// </summary>class Class1{

/// <summary>/// The main entry point for the application./// </summary>[STAThread]static void Main(string[] args){ //

// TODO: Add code to start application here//}}}

Л.р.№1

Page 3: презентация кметодическим указаниям к лаб. работам

Структура консольного приложения

Using сообщает компилятору, где он должен искать классы (типы), не определенные в данном пространстве имен.namespace ConsoleApplication10 мастер предложения определяет пространство имен для нашего приложения.Строчка[STAThread] является атрибутомФункция Main определена как статическая (static) с типом возвращаемого значения void.

Л.р.№1

Page 4: презентация кметодическим указаниям к лаб. работам

Консольный ввод/вывод

static void Main(string[] args){

Console.WriteLine("Введите ваше имя");string str=Console.ReadLine();Console.WriteLine("Привет "+str+"!!!");Console.WriteLine("Введите один символ с

клавитуры");int kod=Console.Read();char sim=(char)kod;Console.WriteLine("Код символа "+sim+" = "+kod);

}

Л.р.№1

Page 5: презентация кметодическим указаниям к лаб. работам

Консольный ввод/вывод

Для консольного вывода также имеются два метода:

метод Console.Write(), который выводит параметр, указанный в качестве аргумента этой функции, метод Console.WriteLine(),который работает так же, как и Console.Write(), но добавляет символ новой строки в конец выходного текста.

Л.р.№1

Page 6: презентация кметодическим указаниям к лаб. работам

Консольный ввод/вывод

Для консольного ввода также имеются два метода:

метод Console.Read(), который возвращает введенный символ. метод Console.ReadLine(),который работает так же, как и Console.Read(), но возвращает строку введенных символов.

Л.р.№1

Page 7: презентация кметодическим указаниям к лаб. работам

Классы

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

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

class имя_типа{

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

}

Л.р.№2

Page 8: презентация кметодическим указаниям к лаб. работам

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

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

Л.р.№2

Page 9: презентация кметодическим указаниям к лаб. работам

Поле

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

некоторое значение)

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

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

Л.р.№2

Page 10: презентация кметодическим указаниям к лаб. работам

Константы

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

которого изменить нельзя).

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

const тип имя;

Л.р.№2

Page 11: презентация кметодическим указаниям к лаб. работам

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

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

Л.р.№2

Page 12: презентация кметодическим указаниям к лаб. работам

Метод

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

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

Л.р.№2

Page 13: презентация кметодическим указаниям к лаб. работам

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

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

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

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

Л.р.№2

Page 14: презентация кметодическим указаниям к лаб. работам

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

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

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

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

Л.р.№2

Page 15: презентация кметодическим указаниям к лаб. работам

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

Метод с переменными параметрами – метод, коорому можно передавать произвольное

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

который и передаст в метод. Внутри метода все параметры будут видны как массив.

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

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

Л.р.№2

Page 16: презентация кметодическим указаниям к лаб. работам

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

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

объектом этого класса.static модификатор_доступа тип_значения

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

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

Л.р.№2

Page 17: презентация кметодическим указаниям к лаб. работам

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

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

Л.р.№2

Page 18: презентация кметодическим указаниям к лаб. работам

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

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

Л.р.№2

Page 19: презентация кметодическим указаниям к лаб. работам

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

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

Л.р.№2

Page 20: презентация кметодическим указаниям к лаб. работам

Свойства

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

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

Л.р.№2

Page 21: презентация кметодическим указаниям к лаб. работам

Массивы

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

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

Л.р.№2

Page 22: презентация кметодическим указаниям к лаб. работам

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

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

объектов ссылочного типа.

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

Л.р.№2

Page 23: презентация кметодическим указаниям к лаб. работам

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

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

размерность каждого измерения массива, например:

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

Л.р.№2

Page 24: презентация кметодическим указаниям к лаб. работам

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

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

длины:

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

Л.р.№2

Page 25: презентация кметодическим указаниям к лаб. работам

Индексаторы

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

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

Л.р.№2

Page 26: презентация кметодическим указаниям к лаб. работам

Конструктор

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

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

Л.р.№3

Page 27: презентация кметодическим указаниям к лаб. работам

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

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

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

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

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

Л.р.№3

Page 28: презентация кметодическим указаниям к лаб. работам

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

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

исполнения .NET, и вызывается он только один раз, до создания какого-либо экземпляра

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

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

Л.р.№3

Page 29: презентация кметодическим указаниям к лаб. работам

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

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

Л.р.№3

Page 30: презентация кметодическим указаниям к лаб. работам

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

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

Л.р.№3

Page 31: презентация кметодическим указаниям к лаб. работам

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

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

Л.р.№3

Page 32: презентация кметодическим указаниям к лаб. работам

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

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

конструктора из другого конструктора. Для этого используются ключевые слова this и

base.

Л.р.№3

Page 33: презентация кметодическим указаниям к лаб. работам

Деструктор

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

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

Л.р.№3

Page 34: презентация кметодическим указаниям к лаб. работам

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

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

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

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

Л.р.№4

Page 35: презентация кметодическим указаниям к лаб. работам

Делегаты

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

Л.р.№4

Page 36: презентация кметодическим указаниям к лаб. работам

ДелегатДелегат должен ссылаться на статический метод класса СА: static int min(int x,int y), тогда объявление делегата может выглядеть, следующим образом: delegate int LpFunc(int a,int b); На втором шаге мы должны создать экземпляр делегата для хранения сведения о представляемом им методе: LpFunc pfnk = new LpFunk(CA.min); Экземпляр делегата может ссылаться на любой статический метод или метод объекта любого класса, при условии, что сигнатура метода полностью соответствует сигнатуре делегата.

Л.р.№4

Page 37: презентация кметодическим указаниям к лаб. работам

События

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

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

происходящем. Сообщения Windows относятся к низкоуровневым структурам языка С. В С#

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

Windows.

Л.р.№4

Page 38: презентация кметодическим указаниям к лаб. работам

События

Обработчик события определяется делегатом. Согласно сигнатуре обработчика события

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

public delegate void ChangeEventHandle(object source,ChangeEventArgs e);

Л.р.№4

Page 39: презентация кметодическим указаниям к лаб. работам

События

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

клиента класса об изменениях (событиях), произошедших при выполнении кода.

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

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

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

Л.р.№4

Page 40: презентация кметодическим указаниям к лаб. работам

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

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

пользовательских приложений под Windows.Каждое приложение Windows представляет

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

Л.р.№5

Page 41: презентация кметодическим указаниям к лаб. работам

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

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

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

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

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

Л.р.№5

Page 42: презентация кметодическим указаниям к лаб. работам

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

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

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

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

Л.р.№5

Page 43: презентация кметодическим указаниям к лаб. работам

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

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

Л.р.№5

Page 44: презентация кметодическим указаниям к лаб. работам

Модификаторы доступа

public – общедоступный (доступ вне класса)protected – защищенный член, к нему могут

обращаться только члены данного класса и производных от него классов

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

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

Л.р.№5

Page 45: презентация кметодическим указаниям к лаб. работам

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

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

Л.р.№6

Page 46: презентация кметодическим указаниям к лаб. работам

Структура Size

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

Height, доступные как для записи, так и для чтения. Для создания объекта Size с нулевыми

значениями Width и Height с помощью конструктора по умолчанию, используется

следующую запись:

Size sz = new Size();

Л.р.№6

Page 47: презентация кметодическим указаниям к лаб. работам

Структура Point

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

и для чтения.

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

Point pt = new Point();

Л.р.№6

Page 48: презентация кметодическим указаниям к лаб. работам

Структура Rectangle

Структура предназначена для определения координат и размера прямоугольника. Для

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

Л.р.№6

Page 49: презентация кметодическим указаниям к лаб. работам

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

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

метод класса:

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

Л.р.№6

Page 50: презентация кметодическим указаниям к лаб. работам

Кисти

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

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

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

Л.р.№6

Page 51: презентация кметодическим указаниям к лаб. работам

Перья

Перья описываются классом System.Drawing.Pen. В классе

System.Drawing.Pens содержится множество статических свойств, описывающих перья с

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

образом:

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

Л.р.№6

Page 52: презентация кметодическим указаниям к лаб. работам

Интерфейс GDI+

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

Л.р.№6

Page 53: презентация кметодическим указаниям к лаб. работам

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

Контекст устройства в среде .NET инкапсулирован («завернут») в базовом классе System.Drawing.Graphics. Для создания объекта

класса Graphics необходимо использовать метод CreateGraphics(), возвращающий ссылку на объект класса Graphics и затем через данный

объект рисовать объекты:

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

Л.р.№6

Page 54: презентация кметодическим указаниям к лаб. работам

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

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

текста необходимо задать тип и размер шрифта, кисть и координаты текста. Например:

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

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

Л.р.№6

Page 55: презентация кметодическим указаниям к лаб. работам

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

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

Graphics g = e.Graphics;Image curImage =

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

Л.р.№6

Page 56: презентация кметодическим указаниям к лаб. работам

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

Для вывода анимаций использется класс Animate и Image. Создается объект класса Image, в

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

происходит перерисовка изображения.

Л.р.№6

Page 57: презентация кметодическим указаниям к лаб. работам

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

Восстановлением графики и текста должно заниматься само приложение. Операционная

система в необходимых случаях вырабатывает сообщение (событие Paint), которое «говорит»,

что окно приложения не корректно и его необходимо перерисовать. Перерисовка окна

должна происходить по событию Paint.

Л.р.№6

Page 58: презентация кметодическим указаниям к лаб. работам

Создание меню

Для создания меню и контекстного меню необходимо перенести из ToolBox на

поверхность формы MainMenu и ContextMenu. Необходимо добавить в пункты «большой» и «маленький». Для этого выделяем mainMenu1 и

добавляем данные пункты.В контекстное меню contextMenu1 добавляем

пункты «красный» и «синий» аналогичным способом.

Л.р.№7

Page 59: презентация кметодическим указаниям к лаб. работам

Создание менюСоздадим переменные, с которыми связаны все изменения прямоугольника:private int width;

private int height;private Color myColor;

Инициализируем их в конструкторе Form1():public Form1() {

InitializeComponent();myColor = Color.Red;width = 10;height = 10; }

Л.р.№7

Page 60: презентация кметодическим указаниям к лаб. работам

Создание менюВ свойствах формы создадим, метод-обработчик события Paint и отредактируем его, чтобы он имел вид:

private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)

{Graphics dc = e.Graphics;Pen myPen = new Pen(myColor);

dc.DrawRectangle(myPen,50,50,width,height);}

Л.р.№7

Page 61: презентация кметодическим указаниям к лаб. работам

Создание меню Выделим mainMenu1 и двойным щелчком мыши на пункте “Большой” создадим метод-обработчик выбора данного пункта. Отредактируем тело метода, после чего оно должно иметь вид:

private void menuItem2_Click(object sender, System.EventArgs e)

{width = 100;height = 100;Invalidate();

}

Л.р.№7

Page 62: презентация кметодическим указаниям к лаб. работам

Создание меню

Аналогично для пункта “Маленький”:private void menuItem3_Click(object

sender, System.EventArgs e){

width = 10;height = 10;Invalidate();

}

Л.р.№7

Page 63: презентация кметодическим указаниям к лаб. работам

Создание меню

Для пункта contextMenu1 “Красный”:

private void menuItem4_Click(object sender, System.EventArgs e)

{myColor = Color.Red;Invalidate();

}

Л.р.№7

Page 64: презентация кметодическим указаниям к лаб. работам

Создание меню

Для contextMenu1 “Синий”:

private void menuItem5_Click(object sender, System.EventArgs e)

{myColor = Color.Blue;Invalidate();

}

Л.р.№7

Page 65: презентация кметодическим указаниям к лаб. работам

Создание меню

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

private void Form1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e) {

Point myPoint = new Point(e.X,e.Y);if(e.Button.ToString() == "Right")contextMenu1.Show(this,myPoint);

}

Л.р.№7

Page 66: презентация кметодическим указаниям к лаб. работам

Потоки

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

Л.р.№8

Page 67: презентация кметодическим указаниям к лаб. работам

Потоки

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

Л.р.№8

Page 68: презентация кметодическим указаниям к лаб. работам

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

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

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

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

public Thread ( ThreadStart start)

Л.р.№8

Page 69: презентация кметодическим указаниям к лаб. работам

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

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

Л.р.№8

Page 70: презентация кметодическим указаниям к лаб. работам

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

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

Л.р.№8

Page 71: презентация кметодическим указаниям к лаб. работам

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

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

Л.р.№8

Page 72: презентация кметодическим указаниям к лаб. работам

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

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

Л.р.№8

Page 73: презентация кметодическим указаниям к лаб. работам

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

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

Л.р.№8