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

Post on 15-Jun-2015

88 Views

Category:

Education

2 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

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

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

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

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

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

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

Л.р.№1

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

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

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

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

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

Л.р.№1

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

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

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

Л.р.№1

Классы

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

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

class имя_типа{

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

}

Л.р.№2

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

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

Л.р.№2

Поле

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

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

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

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

Л.р.№2

Константы

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

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

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

const тип имя;

Л.р.№2

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

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

Л.р.№2

Метод

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

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

Л.р.№2

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

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

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

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

Л.р.№2

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

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

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

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

Л.р.№2

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

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

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

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

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

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

Л.р.№2

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

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

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

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

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

Л.р.№2

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

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

Л.р.№2

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

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

Л.р.№2

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

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

Л.р.№2

Свойства

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

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

Л.р.№2

Массивы

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

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

Л.р.№2

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

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

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

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

Л.р.№2

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

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

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

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

Л.р.№2

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

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

длины:

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

Л.р.№2

Индексаторы

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

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

Л.р.№2

Конструктор

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

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

Л.р.№3

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

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

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

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

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

Л.р.№3

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

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

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

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

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

Л.р.№3

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

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

Л.р.№3

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

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

Л.р.№3

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

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

Л.р.№3

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

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

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

base.

Л.р.№3

Деструктор

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

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

Л.р.№3

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

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

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

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

Л.р.№4

Делегаты

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

Л.р.№4

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

Л.р.№4

События

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

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

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

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

Windows.

Л.р.№4

События

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

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

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

Л.р.№4

События

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

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

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

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

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

Л.р.№4

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

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

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

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

Л.р.№5

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

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

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

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

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

Л.р.№5

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

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

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

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

Л.р.№5

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

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

Л.р.№5

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

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

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

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

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

Л.р.№5

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

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

Л.р.№6

Структура Size

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

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

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

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

Size sz = new Size();

Л.р.№6

Структура Point

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

и для чтения.

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

Point pt = new Point();

Л.р.№6

Структура Rectangle

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

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

Л.р.№6

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

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

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

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

Л.р.№6

Кисти

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

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

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

Л.р.№6

Перья

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

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

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

образом:

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

Л.р.№6

Интерфейс GDI+

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

Л.р.№6

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

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

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

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

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

Л.р.№6

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

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

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

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

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

Л.р.№6

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

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

Graphics g = e.Graphics;Image curImage =

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

Л.р.№6

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

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

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

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

Л.р.№6

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

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

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

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

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

Л.р.№6

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

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

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

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

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

Л.р.№7

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

private int height;private Color myColor;

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

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

Л.р.№7

Создание менюВ свойствах формы создадим, метод-обработчик события 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

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

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

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

}

Л.р.№7

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

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

sender, System.EventArgs e){

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

}

Л.р.№7

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

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

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

{myColor = Color.Red;Invalidate();

}

Л.р.№7

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

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

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

{myColor = Color.Blue;Invalidate();

}

Л.р.№7

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

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

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

Потоки

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

Л.р.№8

Потоки

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

Л.р.№8

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

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

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

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

public Thread ( ThreadStart start)

Л.р.№8

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

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

Л.р.№8

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

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

Л.р.№8

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

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

Л.р.№8

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

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

Л.р.№8

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

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

Л.р.№8

top related