Презентация на тему Объектно-ориентированное программирование. Языки C++ и C#

Презентация на тему Презентация на тему Объектно-ориентированное программирование. Языки C++ и C#, предмет презентации: Информатика. Этот материал содержит 128 слайдов. Красочные слайды и илюстрации помогут Вам заинтересовать свою аудиторию. Для просмотра воспользуйтесь проигрывателем, если материал оказался полезным для Вас - поделитесь им с друзьями с помощью социальных кнопок и добавьте наш сайт презентаций ThePresentation.ru в закладки!

Слайды и текст этой презентации

Слайд 1
Текст слайда:

Объектно-ориентированное программирование. Языки C++ и C#

§ 46. Что такое ООП?
§ 47. Объекты и классы
§ 48. Создание объектов в программе
§ 49. Скрытие внутреннего устройства
§ 50. Иерархия классов
§ 51. Программы с графическим интерфейсом
§ 52. Программирование в § 52. Программирование в RAD-§ 52. Программирование в RAD-средах
§ 53. Использование компонентов
§ 54. Совершенствование компонентов
§ 55. Модель и представление






Слайд 2
Текст слайда:

§ 46. Что такое ООП?

Объектно-ориентированное программирование. Языки C++ и C#


Слайд 3
Текст слайда:

Зачем нужно что-то новое?

программы из миллионов строк
тысячи переменных и массивов

Э. Дейкстра: «Человечество еще в древности придумало способ управления сложными системами: «разделяй и властвуй»».

Структурное программирование:

декомпозиция по задачам

человек мыслит иначе, объектами


Слайд 4
Текст слайда:

Как мы воспринимаем объекты?

существенные свойства


Абстракция – это выделение существенных свойств объекта, отличающих его от других объектов.


Слайд 5
Текст слайда:

Использование объектов

Программа – множество объектов (моделей), каждый из которых обладает своими свойствами и поведением, но его внутреннее устройство скрыто от других объектов.


декомпозиция по объектам


Слайд 6
Текст слайда:

§ 47. Объекты и классы

Объектно-ориентированное программирование. Языки C++ и C#


Слайд 7
Текст слайда:

С чего начать?

Объектно-ориентированный анализ (ООА):

выделить объекты
определить их существенные свойства
описать поведение (команды, которые они могут выполнять)

Объектом можно назвать то, что имеет чёткие границы и обладает состоянием и поведением.

Состояние определяет поведение:

лежачий человек не прыгнет
незаряженное ружье не выстрелит

Класс – это множество объектов, имеющих общую структуру и общее поведение.


Слайд 8
Текст слайда:

Модель дороги с автомобилями

Объект «Дорога»:


методы (поведение)

свойства
(состояние)

название класса


Слайд 9
Текст слайда:

Модель дороги с автомобилями

Объект «Машина»:


свойства: координаты и скорость

все машины одинаковы
скорость постоянна
на каждой полосе – одна машина
если машина выходит за правую границу дороги, вместо нее слева появляется новая машина


Метод – это процедура или функция, принадлежащая классу объектов.


Слайд 10
Текст слайда:

Модель дороги с автомобилями

Взаимодействие объектов:



узнать длину


свойства объектов
методы: операции, которые они могут выполнять
связи (обмен данными) между объектами

Схема определяет


Слайд 11
Текст слайда:

§ 48. Создание объектов в программе

Объектно-ориентированное программирование. Языки C++ и C#


Слайд 12
Текст слайда:

Классы

программа – множество взаимодействующих объектов
любой объект – экземпляр какого-то класса
класс – описание группы объектов с общей структурой и поведением

Класс

Данные

Методы

отличие от структур!

состояние

поведение

Поле – это переменная, принадлежащая объекту.



Слайд 13
Текст слайда:

Класс «Дорога»

class TRoad
{
float Length;
int Width;
};

Объявление класса:

Объявление переменной (создание объекта):

TRoad road;

road.Length = 60;
road.Width = 3;

Попытка изменить данные:

private


ошибка


Слайд 14
Текст слайда:

Класс «Дорога»

class TRoad
{
public:
float Length;
int Width;
};

Объявление класса:

main()
{
TRoad road;
road.Length = 60; // работает!
road.Width = 3; // работает!
}

Основная программа:

public:



Слайд 15
Текст слайда:

Класс «Дорога»

Конструктор – это метод класса, который вызывается для создания объекта этого класса.

TRoad road;

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

road.Length = ???
road.Width = ???

«мусор»


Слайд 16
Текст слайда:

Новый конструктор

class TRoad
{
public:
float Length;
int Width;
TRoad(); // объявление конструктора
};

Класс:

TRoad();

TRoad::TRoad()
{
Length = 0;
Width = 0;
}

Конструктор:

TRoad::aaa()
{
...
}

метод aaa класса TRoad



Слайд 17
Текст слайда:

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

class TRoad
{
public:
...
TRoad ( float length0, int width0 );
};

TRoad::TRoad ( float length0, int width0 )
{
Length = length0;
Width = width0;
}

Конструктор:

Вызов:

TRoad road ( 60, 3 );




Слайд 18
Текст слайда:

Защита от неверных данных

TRoad::TRoad ( float length0, int width0 )
{
if ( length0 > 0 )
Length = length0;
else Length = 1;
if ( width0 > 0 )
Width = width0;
else Width = 1;
}


Слайд 19
Текст слайда:

Значения параметров по умолчанию

class TRoad
{
public:
...
TRoad ( float length0, int width0 = 3 );
};

Вызов:

TRoad road ( 60 );

= 3

значение по умолчанию


последние в списке параметров

width = 3


Слайд 20
Текст слайда:

Класс «Машина»

class TCar
{
public:
float X, V;
int P;
TRoad *Road;
void move();
TCar (); // конструктор без параметров
TCar ( TRoad *road0, int p0, float v0 );
};

дорога, по которой едет

координата, скорость

полоса


Слайд 21
Текст слайда:

Конструкторы класса «Машина»

TCar::TCar ()
{
Road = NULL;
P = 0; V = 0; X = 0;
}

защита от ошибок – самостоятельно

TCar::TCar ( TRoad *road0, int p0,
float v0 )
{
Road = road0;
P = p0; V = v0; X = 0;
}


Слайд 22
Текст слайда:

Класс «Машина»: метод move

void TCar::move()
{
X = X + V;
if ( X > Road->Length ) X = 0;
}

Равномерное движение:


перемещение за одну единицу времени


выезжает с другой стороны

обращение через указатель


Слайд 23
Текст слайда:

Основная программа

const int N = 3;
TCar cars[N];
int i;
for ( i = 0; i < N; i++ )
{
cars[i].Road = &road;
cars[i].P = i + 1;
cars[i].V = 2.0*(i + 1);
}
do {
for ( i = 0; i < N; i++ )
cars[i].move();
}
while ( !kbhit() );

пока не нажата (любая) клавиша

#include



Слайд 24
Текст слайда:

Использование указателей

const int N = 3;
TCar *cars[N];

for ( i = 0; i < N; i ++ )
cars[i] = new TCar ( &road, i+1,
2.0*(i+1) );

for ( i = 0; i < N; i ++ )
cars[i]->move();

массив указателей

создание объектов


Слайд 25
Текст слайда:

Что в этом хорошего и плохого?

основная программа – простая и понятная
классы могут разрабатывать разные программисты независимо друг от друга (+интерфейс!)
повторное использование классов

неэффективно для небольших задач

ООП – это метод разработки больших программ!


Слайд 26
Текст слайда:

§ 49. Скрытие внутреннего устройства

Объектно-ориентированное программирование. Языки C++ и C#


Слайд 27
Текст слайда:

Зачем скрывать внутреннее устройство?

Объектная модель задачи:

интерфейсы



защита внутренних данных
проверка входных данных на корректность
изменение устройства с сохранением интерфейса

Инкапсуляция («помещение в капсулу») – скрытие внутреннего устройства объектов.


Слайд 28
Текст слайда:

class TPen
{
private:
string FColor;
public:
string getColor ();
void setColor ( string newColor );
};

Пример: класс «перо»

class TPen
{
private:
string FColor; // цвет, "FF00FF"
};

R

G

B

Field – поле

string getColor ();
void setColor ( string newColor );

методы доступа


Слайд 29
Текст слайда:

Пример: класс «перо»

Получить значение:

string TPen::getColor ()
{
return FColor;
}

Записать значение:

void TPen::setColor ( string newColor )
{
if ( newColor.length()!= 6 )
FColor = "000000";
else FColor = newColor;
}

если ошибка, чёрный цвет


Слайд 30
Текст слайда:

Пример: класс «перо»

Использование:

TPen pen;
pen.setColor ( "FFFF00" );
cout << "цвет пера: " << pen.getColor();

установить цвет

прочитать цвет

pen.color = "FFFF00";
cout << pen.color;


нельзя в C++


Слайд 31
Текст слайда:

Изменение внутреннего устройства

class TPen
{
private:
int FColor;
public:
string getColor();
void setColor( string newColor );
};

Удобнее хранить цвет в виде числа:

string getColor();
void setColor( string newColor );

int

изменилось внутреннее устройство


Слайд 32
Текст слайда:

Преобразования int → hex

#include

Использование потока (байтов):




записываем в поток число в шестнадцатеричной системе

читаем строку

подключить строковые потоки

stringstream s;
s << hex << FColor;

"0000FF"

правильно так!

16711935

"FF00FF"


Слайд 33
Текст слайда:

string TPen::getColor()
{
stringstream s;
s << setfill('0')
<< setw(6)
<< hex << FColor;
return s.str();
}

Преобразования hex ↔ int

#include
#include

подключить манипуляторы

заполнять не пробелами, а нулями

вывести 6 знаков

прочитать строку string из потока


Слайд 34
Текст слайда:

Преобразования hex → int

void TPen::setColor ( string newColor )
{
stringstream s;
if ( newColor.length()!= 6 )
FColor = 0; // чёрный цвет
else {
s << newColor;
s >> hex >> FColor;
}
}

Использование потока:



16711935

"FF00FF"


записываем в поток строку

читаем число в шестнадцатеричной системе

записываем строку

читаем число


Слайд 35
Текст слайда:

Свойства в C#

Свойство – это способ доступа к внутреннему состоянию объекта, имитирующий обращение к его внутренней переменной.

Доступ с помощью методов:

TPen pen;
pen.setColor ( "FFFF00" );
cout << "цвет пера: " << pen.getColor();

Доступ с помощью свойства color:

TPen pen;
pen.color = "FFFF00";
cout << "цвет пера: " << pen.color;

вызов pen.setColor

вызов pen.getColor


Слайд 36
Текст слайда:

Свойства в C#

class TPen
{
private string FColor;
public string color
{
get { return FColor; }
set { FColor = value; }
}
}

метод чтения

метод записи

закрытое поле

открытое свойство

Использование:

TPen pen;
pen.color = "FFFF00";
string s = pen.color;


Слайд 37
Текст слайда:

Свойства в C#

Защита от неверного ввода данных:

public string color
{
get { return FColor; }
set
{
if ( value.Length != 6 )
FColor = "000000";
else FColor = value;
}
}

переданное значение


Слайд 38
Текст слайда:

Свойства в C#

Изменение внутреннего устройства:

class TPen
{
private int FColor;
public string color
{
get {
return FColor.ToString ( "X6" );
}
set {
FColor = Convert.ToInt32(value, 16);
}
}
}

в строку

шестнадцатеричныйформат, 6 знаков

в целое

из шестнадцатеричной записи

переданное значение


Слайд 39
Текст слайда:

Свойство «только для чтения»

class TCar {
private:
double Fv;
public:
double getV() { return Fv; }
};

нет метода записи

Скорость машины можно только читать:

class TCar {
private double Fv;
public double V {
get { return Fv; }
}
};

Свойство на C#:


Слайд 40
Текст слайда:

Скрытие внутреннего устройства

Инкапсуляция («помещение в капсулу»)

интерфейс (public)

внутреннее устройство (private)


Слайд 41
Текст слайда:

§ 50. Иерархия классов

Объектно-ориентированное программирование. Языки C++ и C#


Слайд 42
Текст слайда:

Классификации

Классификация – разделение изучаемых объектов на группы (классы), объединенные общими признаками.


Яблоко

Груша

Банан

Апельсин

базовый класс

Фрукт

классы-наследники

это фрукт, у которого…


Слайд 43
Текст слайда:

Что такое наследование?

класс Двудольные
семейство Бобовые
род Клевер
горный клевер




наследует свойства (имеет все свойства)

Класс Б является наследником класса А, если можно сказать, что Б – это разновидность А.

яблоко – это фрукт

машина – двигатель

яблоко – фрукт

горный клевер – клевер

горный клевер – это растение рода Клевер




машина содержит двигатель (часть – целое)


Слайд 44
Текст слайда:

Иерархия логических элементов


Логический элемент

с одним входом

с двумя входами

НЕ

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


Слайд 45
Текст слайда:

Базовый класс

class TLogElement
{
public:
bool In1, In2, Res;
void calc();
};

можно моделировать элементы с памятью (триггеры)

вычислить выход


Слайд 46
Текст слайда:

Базовый класс

class TLogElement
{
private:
bool FIn1, Fin2, FRes;
void calc();
public:
bool getIn1() { return FIn1; }
void setIn1 ( bool newIn1 );
bool getIn2() { return Fin2; }
void setIn2 ( bool newIn2 );
bool getRes() { return FRes; }
};

только для чтения


Слайд 47
Текст слайда:

Установка входа

void TLogElement::setIn1(bool newIn1)
{
FIn1 = newIn1;
calc();
}

пересчёт при изменении входа

void TLogElement::calc()
{
}

заглушка


Слайд 48
Текст слайда:

Что такое полиморфизм?

греч.: πολυ — много, μορφη — форма

Полиморфизм – это возможность классов-наследников по-разному реализовать метод, описанный для класса-предка.

class TLogElement
{
...
protected:
void calc();
};

защищённые элементы: доступны только наследникам


Слайд 49
Текст слайда:

Базовый класс

class TLogElement
{
private:
bool FIn1, Fin2;
protected:
bool FRes;
virtual void calc()= 0;
bool getIn2() { return Fin2; }
void setIn2 ( bool newIn2 );
public:
bool getIn1() { return FIn1; }
void setIn1 ( bool newIn1 );
bool getRes() { return FRes; }
};

наследники будут изменять поле

virtual

= 0;


Слайд 50
Текст слайда:

Базовый класс

class TLogElement
{
protected:
bool FRes;
virtual void calc()= 0;
bool getIn2() { return Fin2; }
void setIn2 ( bool newIn2 );
...
};

наследники будут изменять поле

virtual

= 0;

для элементов с одним входом не нужно!

virtual (виртуальный) – этот метод могут переопределять классы-наследники

= 0 (абстрактный метод) – этот метод базовый класс не будет реализовывать (оставляет наследникам)


Слайд 51
Текст слайда:

Абстрактный класс

Абстрактный метод – это метод класса, который объявляется, но не реализуется в классе.

Абстрактный класс – это класс, содержащий хотя бы один абстрактный метод.

все логические элементы должны иметь метод calc
метод calc невозможно написать, пока неизвестен тип логического элемента

нет логического элемента «вообще», как не «фрукта вообще», есть конкретные виды

TLogElement – абстрактный класс из-за метода calc


Слайд 52
Текст слайда:

Элемент «НЕ»

class TNot: public TLogElement
{
protected:
void calc();
};

void TNot::calc()
{
FRes =!getIn1();
}

наследник от TLogElement

переопределяет метод базового класса


Слайд 53
Текст слайда:

Элемент «НЕ»

TNot n;
n.setIn1 ( false );
cout << n.getRes();

Использование:

создание объекта

установка входа

вывод результата


Слайд 54
Текст слайда:

Элементы с двумя входами

class TLog2In: public TLogElement
{
public:
TLogElement::setIn2;
TLogElement::getIn2;
};

наследник от TLogElement

повысить «видимость» (protected → public)

нельзя, он абстрактный

сохранить права доступа


Слайд 55
Текст слайда:

Элементы с двумя входами

class TAnd: public TLog2In
{
protected:
void calc();
};
class TOr: public TLog2In
{
protected:
void calc();
};

элемент «И»

элемент «ИЛИ»


Слайд 56
Текст слайда:

Элементы с двумя входами

void TAnd::calc()
{
FRes = getIn1() && getIn2();
}
void TAnd::calc()
{
FRes = getIn1() || getIn2();
}

элемент «И»

элемент «ИЛИ»

доступ к защищённому полю (protected)


Слайд 57
Текст слайда:

Вызов виртуального метода

void TLogElement::setIn1( bool newIn1 )
{
FIn1 = newIn1;
calc();
}

В базовом классе:

class TLogElement
{
protected:
virtual void calc()= 0;
...
};

virtual


Слайд 58
Текст слайда:

Виртуальный метод

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

Статическое связывание:

транслятор записывает в код адрес процедуры


Динамическое связывание:

адрес процедуры определяется во время выполнения программы в зависимости от типа объекта


Слайд 59
Текст слайда:

Пример: элемент «И-НЕ»

main()
{
TNot elNot;
TAnd elAnd;
int A, B;
cout << " A B !(A&B)" << endl;
cout << "-------------" << endl;
for ( A = 0; A <= 1; A++ ) {
elAnd.setIn1 ( A );
for ( B = 0; B <= 1; B++ ) {
elAnd.setIn2 ( B );
elNot.setIn1 ( elAnd.getRes() );
cout << " " << A << " " << B
<< " " << elNot.getRes() << endl;
}
}
}


Слайд 60
Текст слайда:

Модульность

class TLogElement
{ … }
class TLog2In: public TLogElement
{ … }
class TNot: public TLogElement
{ … }
class TAnd: public TLog2In
{ … }
class TOr: public TLog2In
{ … }

Идея: выделить классы в отдельный модуль.

Интерфейс (log_elem.h):


Слайд 61
Текст слайда:

Модульность

void TLogElement::setIn1 ( bool newIn1 )
{ ... }
void TLogElement::setIn2 ( bool newIn1 )
{ ... }
void TNot::calc()
{ ... }
void TAnd::calc()
{ ... }
void TOr::calc()
{ ... }

#include

Модуль (log_elem.cpp):

реализация методов классов

В основную программу:

#include


Слайд 62
Текст слайда:

Сообщения между объектами

class TLogElement
{
private:
TLogElement *FNextEl;
int FNextIn;
...
public:
void Link ( TLogElement *nextElement,
int nextIn = 1 );
};

адрес следующего элемента в цепочке

номер входа следующего элемента


Слайд 63
Текст слайда:

Сообщения между объектами

void TLogElement::Link(
TLogElement *nextElement,
int nextIn )
{
FNextEl = nextElement;
FNextIn = nextIn;
}

Установка связи:


Слайд 64
Текст слайда:

Сообщения между объектами

void TLogElement::setIn1 ( bool newIn1 )
{
FIn1 = newIn1;
calc();
if ( FNextEl )
switch ( FNextIn ) {
case 1:
FNextEl->setIn1 ( getRes() );
case 2:
FNextEl->setIn2 ( getRes() );
}
}

После изменения выхода «дергаем» следующий элемент:

если следующий элемент установлен…

передать результат на нужный вход


Слайд 65
Текст слайда:

Сообщения между объектами

TLogElement::TLogElement()
{
FNextEl = NULL;
}

Новый конструктор:


Слайд 66
Текст слайда:

Сообщения между объектами

TNot elNot;
TAnd elAnd;
elAnd.Link ( &elNot );
...
for ( A = 0; A <= 1; A ++ ) {
elAnd.setIn1 ( A );
for ( B = 0; B <= 1; B++ ) {
elAnd.setIn2( B );
elNot.setIn1(elAnd.getRes());
...
}
}

Изменения в основной программе:

elAnd.Link ( &elNot );

установить связь

это уже не нужно!


Слайд 67
Текст слайда:

§ 51. Программы с графическим интерфейсом

Объектно-ориентированное программирование. Языки C++ и C#


Слайд 68
Текст слайда:

Интерфейс: объекты и сообщения

поле ввода

кнопка

флажок

переключатель

Все элементы окон – объекты, которые обмениваются данными, посылая друг другу сообщения.

Сообщение – это блок данных определённой структуры, который используется для обмена информацией между объектами.

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


Слайд 69
Текст слайда:

Классические программы



основная программа


Слайд 70
Текст слайда:

Программы, управляемые событиями

Событие – это переход какого-либо объекта из одного состояния в другое.

нажатие на клавишу
щелчок мышью
перемещение окна
поступление данных из сети
запрос к веб-серверу
завершение вычислений


Слайд 71
Текст слайда:

Программы, управляемые событиями



основная
программа



Слайд 72
Текст слайда:

Что такое RAD-среда?

RAD = Rapid Application Development — быстрая разработка приложений

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

Этапы разработки:

Форма – это шаблон, по которому строится окно программы или диалога

выполняются при возникновении событий


Слайд 73
Текст слайда:

RAD-среды: Delphi

Язык: Object Pascal, позднее Delphi:

1995: Borland, сейчас: Embarcadero Technologies


Слайд 74
Текст слайда:

RAD-среды: MS Visual Studio

Языки: Visual Basic, Visual C++, Visual C#, Visual F#

c 1995 по н.в.: Microsoft


Слайд 75
Текст слайда:

RAD-среды: Lazarus

Языки: FreePascal, Delphi

свободное ПО:
lazarus.freepascal.org


Слайд 76
Текст слайда:

§ 52. Программирование в RAD-средах

Объектно-ориентированное программирование. Языки C++ и C#


Слайд 77
Текст слайда:

Visual Studio Express (C#)

http://www.visualstudio.com/ru-ru/products/visual-studio-express-vs.aspx


Слайд 78
Текст слайда:

Язык C#

С → С++ → C#

язык CIL
(байт-код)

Common Intermediate Language


виртуальная машина CLR

Common Language Runtime

объединение программ на разных языках
полностью ООП – для больших программ
большая библиотека функций и компонентов

требовательна к ресурсам
надёжно – только под Windows

Linux – проект Mono


Слайд 79
Текст слайда:

Form1.resx

Проект – это набор файлов, из которых компилятор строит исполняемый файл программы.

проект (.csproj, CSharp Project) – описание (XML)
модули, из которых состоит программа (*.сs);
ресурсы (*.resx) – строки (перевод сообщений).

Проекты и решения

Program.cs

Form1.Designer.cs

Form1.cs

my.exe



основная программа

обработчики событий

ресурсы

описание формы

Решение = один или несколько проектов.


Слайд 80
Текст слайда:

Простейший проект

Файл – Создать проект – Приложение Windows Forms

Свойства

Панель элементов

Редактор кода

Конструктор формы

Структура проекта


Слайд 81
Текст слайда:

Модуль формы

F7 – перейти из конструктора к коду формы

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Project1
{
public partial class Form1: Form {
public Form1(){ InitializeComponent(); }
}
}

библиотеки

пространство имён

конструктор


Слайд 82
Текст слайда:

Модуль формы

public partial class Form1: Form
{
public Form1()
{
InitializeComponent();
}
}

открытый класс

частичное описание

наследник класса Form

начальные установки


Слайд 83
Текст слайда:

Основная программа

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
namespace Project1
{
static class Program {
static void Main() {
...
Application.Run ( new Form1() );
}
}
}

библиотеки

статический класс

создание формы

запуск цикла обработки сообщений


Слайд 84
Текст слайда:

Свойства формы

Name – имя формы
Size.Width – ширина
Size.Height – высота
Text – текст в заголовке окна
BackColor – цвет фона
Font – шрифт надписей

MainForm


Слайд 85
Текст слайда:

Обработчик событий

2×ЛКМ: создать обработчик

FormClosing: форма закрывается

События


Слайд 86
Текст слайда:

Обработчик события

private void MainForm_FormClosing (
object sender,
FormClosingEventArgs e )
{
}

закрытый метод класса MainForm

название обработчика

общий предок всех объектов

кто послал сообщение

дополнительные данные о событии


Слайд 87
Текст слайда:

private void MainForm_FormClosing (
object sender, FormClosingEventArgs e)
{
DialogResult res;
res = MessageBox.Show (
"Вы действительно хотите выйти из программы?",
"Подтверждение",
MessageBoxButtons.YesNo, MessageBoxIcon.Question
);
if ( res == DialogResult.No )
e.Cancel = true;
}

тип: результат диалога

Диалог с вопросом

Метод MessageBox.Show:




нажали «Нет», отменить закрытие



Слайд 88
Текст слайда:

Параметры MessageBox.Show

сообщение пользователю
заголовок окна
тип запроса MessageBoxIcon
Error ошибка
Warning предупреждение
Information информация
Question вопрос
набор (множество) кнопок MessageBoxButtons:
YesNo «Да», «Нет»
YesNoCancel «Да», «Нет», «Отмена»
OK «OK»
OKCancel «ОК», «Отмена»






Слайд 89
Текст слайда:

§ 53. Использование компонентов

Объектно-ориентированное программирование. Языки C++ и C#


Слайд 90
Текст слайда:

Панель компонентов

Стандартные

Контейнеры

Диалоги


Слайд 91
Текст слайда:

Просмотр рисунков

панель
Panel

выключатель
CheckBox

рисунок
PictureBox

кнопка
Button


Слайд 92
Текст слайда:

Настройка формы

Файл – Создать проект – Приложение Windows Forms

Name → MainForm
Text → Просмотр рисунков


Слайд 93
Текст слайда:

Верхняя панель

панель Panel

Dock = Top


Слайд 94
Текст слайда:

Кнопка и выключатель

кнопка
Button

выключатель
CheckBox

Name = OpenBtn
Text = Открыть файл

Name = SizeCB
Text = По размерам окна




Слайд 95
Текст слайда:

Компонент PictureBox

рисунок
PictureBox

Name = Image
Dock = Fill


Слайд 96
Текст слайда:

Выбор файла

Name = OpenDlg

выбор рисунка
OpenFileDialog


Слайд 97
Текст слайда:

Выбор файла

if ( OpenDlg.ShowDialog() == DialogResult.OK )
Img.Image = new Bitmap (OpenDlg.FileName);

если файл выбран

имя файла

2×ЛКМ


Слайд 98
Текст слайда:

Масштабирование

2×ЛКМ

if ( SizeCB.Checked )
Img.SizeMode = PictureBoxSizeMode.Zoom;
else Img.SizeMode = PictureBoxSizeMode.Normal;


Слайд 99
Текст слайда:

Ввод и вывод данных

для веб-страниц

метка rgbLabel
Label

панель rgbPanel
Panel

поле ввода rEdit
TextBox

поле ввода bEdit
TextBox

поле ввода gEdit
TextBox


Слайд 100
Текст слайда:

Обновление компонентов вывода

выделить все три (+Shift)

2×ЛКМ


Слайд 101
Текст слайда:

Обновление компонентов вывода

private void rEdit_TextChanged ( object sender, EventArgs e )
{
int r, g, b;
r = Int32.Parse ( rEdit.Text );
g = Int32.Parse ( gEdit.Text );
b = Int32.Parse ( bEdit.Text );
rgbPanel.BackColor =
Color.FromArgb ( r, g, b );
rgbLabel.Text = "#" + r.ToString("X2")
+ g.ToString("X2") + b.ToString("X2");
}

из строки в число

построить цвет

в шестнадцатеричную систему, 2 знака


Слайд 102
Текст слайда:

Вызов при запуске

private void MainForm_Load (
object sender, EventArgs e )
{
rEdit_TextChanged ( rEdit, e );
}

private void MainForm_Load (
object sender, EventArgs e )
{
rEdit_TextChanged ( null, null );
}

пустой объект

вызывающий объект – rEdit (здесь – всё равно!)


Слайд 103
Текст слайда:

Обработка ошибок


Слайд 104
Текст слайда:

Обработка ошибок

try
{
// «опасные» команды
}
catch
{
// обработка ошибки
}

попытаться выполнить

если исключение (аварийная ситуация)


Слайд 105
Текст слайда:

Обработка ошибок

try {
r = Int32.Parse ( rEdit.Text );
g = Int32.Parse ( gEdit.Text );
b = Int32.Parse ( bEdit.Text );
rgbPanel.BackColor =
Color.FromArgb ( r, g, b );
rgbLabel.Text = "#" + r.ToString("X2")
+ g.ToString("X2") + b.ToString("X2");
}
catch {
rgbLabel.Text = "?";
}

rgbLabel.Text = "?";

если ошибка, записать "?"


Слайд 106
Текст слайда:

Блокирование неверных символов

private void rEdit_KeyPress (
object sender, KeyPressEventArgs e )
{
if ( ! ( Char.IsDigit(e.KeyChar) ||
e.KeyChar == (char) 8) )
e.Handled = true;
}

Backspace

выделить все три (+Shift)

обработка завершена

это цифра


Слайд 107
Текст слайда:

§ 54. Совершенствование компонентов

Объектно-ориентированное программирование. Языки C++ и C#


Слайд 108
Текст слайда:

Новый класс (модуль)

Задача: построить поле для ввода целых чисел, в котором

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

class IntTextBox: TextBox
{
}

Проект – Добавить класс

using System.Windows.Forms;

там объявлен TextBox


Слайд 109
Текст слайда:

Обработчик KeyPress

class IntTextBox: TextBox
{


protected override void OnKeyPress (
KeyPressEventArgs e )
{
if ( !(Char.IsDigit(e.KeyChar) ||
e.KeyChar == (char)8) )
e.Handled = true;
base.OnKeyPress(e);
}
}

только для наследников

перекрыть метод базового класса

base.OnKeyPress(e);

вызвать метод базового класса


Слайд 110
Текст слайда:

Свойство Value

class IntTextBox: TextBox
{

...
public int Value
{
set { Text = value.ToString(); }
get {
try { return Int32.Parse(Text); }
catch { return 0; }
}
}
}

общедоступное свойство

число в строку

из строки в число


Слайд 111
Текст слайда:

Поле для ввода целых чисел

private void decEdit_TextChanged (
object sender, EventArgs e )
{
hexLabel.Text =
decEdit.Value.ToString ( "X" );
}

Использование:

метка hexLabel
Label

поле ввода decEdit
IntTextBox


свойство

в шестнадцатеричную



Слайд 112
Текст слайда:

§ 55. Модель и представление

Объектно-ориентированное программирование. Языки C++ и C#


Слайд 113
Текст слайда:

решение

Еще одна декомпозиция

Задача: повторное использование написанного ранее готового кода.

решение


Слайд 114
Текст слайда:

решение

Модель и представление

Задача: хранить и использовать данные об изменении курса доллара.



Слайд 115
Текст слайда:

Модель и представление

Задача: вычисление арифметического выражения:


целые числа
знаки арифметических действий + - * /

Модель:

символьная строка
алгоритм вычисления:

k = номер последней операции
n1 = значение левой части
n2 = значение правой части
результат = операция(n1, n2)


функция LastOp (глава 6)


Слайд 116
Текст слайда:

Модель


k = номер последней операции
if ( k < 0 )
результат:= строка в число
else {
n1 = значение левой части
n2 = значение правой части
результат = операция(n1, n2)
}


Псевдокод:


Слайд 117
Текст слайда:

Статический класс – набор функций


static class Calculator
{
static int Priority ( char op ) {
...
}
static int LastOp ( string s ) {
...
}
public static int Calc ( string s ) {
...
}
}


Проект – Добавить класс

приоритет операции

последняя операция

вычислить


Слайд 118
Текст слайда:

Модель: приоритет операций


int Priority ( char op )
{
switch ( op )
{
case '+':
case '-': return 1;
case '*':
case '/': return 2;
}
return 100;
}



Слайд 119
Текст слайда:

Модель: номер последней операции



int LastOp ( string s )
{
int i, minPrt, res;
minPrt = 50; // любое между 2 и 100
res = -1;
for ( i = 0; i < s.Length; i++ )
if ( Priority(s[i]) <= minPrt )
{
minPrt = Priority(s[i]);
res = i;
}
return res;
}

<=

вернёт номер символа


Слайд 120
Текст слайда:

Модель: вычисления


public static int Calc(string s)
{
int k, n1, n2, res = 0;
k = LastOp ( s );
if ( k < 0 ) return Int32.Parse(s);
n1 = Calc( s.Substring(0, k) ); // левая
n2 = Calc( s.Substring(k+1) ); // правая
switch ( s[k] ) {
case '+': res = n1 + n2; break;
case '-': res = n1 - n2; break;
case '*': res = n1 * n2; break;
case '/': res = n1 / n2; break;
}
return res;
}



Слайд 121
Текст слайда:

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

многострочное поле TextBox

выпадающий список ComboBox

Name = Answers
Dock = Fill
ReadOnly = True
Multiline = True

Name = Input
Dock = Top

if ( нажата клавиша Enter )
{
x = значение выражения
добавить результат в конец поля вывода
if ( выражения нет в списке )
добавить его в список
}


Слайд 122
Текст слайда:

Перехват нажатия на клавишу Enter

private void Input_KeyPress (
object sender, KeyPressEventArgs e )
{
if ( e.KeyChar == (char)13 )
{
...
}
}

KeyPress для элемента Input:

if ( e.KeyChar == (char)13 )
{
...
}

код клавиши Enter


Слайд 123
Текст слайда:

Обработка и вывод данных

int x;
x = Calculator.Calc(
Input.Text);

Вычисления (обращение к модели):

Answers.Text += Input.Text + "=" +
x.ToString() + "\r\n";

Добавление строки в TextBox:

добавить строку

число в строку



новая строка


Слайд 124
Текст слайда:

Обработка и вывод данных

int i = Input.FindString(Input.Text);
if ( i < 0 )
Input.Items .Insert ( 0, Input.Text );

Добавление строки в ComboBox:

Input.Items

вставить строку

найти индекс строки



массив строк в ComboBox

позиция списка

что вставлять


Слайд 125
Текст слайда:

Перехват нажатия на клавишу Enter

private void Input_KeyPress (
object sender, KeyPressEventArgs e )
{
if ( e.KeyChar == (char)13 )
{
int x = Calculator.Calc ( Input.Text );
Answers.Text += Input.Text + "="
+ x.ToString() + "\r\n";
int i = Input.FindString(Input.Text);
if ( i < 0 )
Input.Items.Insert(0, Input.Text);
}
}

KeyPress для элемента Input:


Слайд 126
Текст слайда:

Калькулятор


Слайд 127
Текст слайда:

Конец фильма

ПОЛЯКОВ Константин Юрьевич
д.т.н., учитель информатики
ГБОУ СОШ № 163, г. Санкт-Петербург
kpolyakov@mail.ru
ЕРЕМИН Евгений Александрович
к.ф.-м.н., доцент кафедры мультимедийной дидактики и ИТО ПГГПУ, г. Пермь
eremin@pspu.ac.ru


Слайд 128
Текст слайда:

Источники иллюстраций

www.picstopin.com
maugav.info
yoursourceisopen.com
ru.wikipedia.org
иллюстрации художников издательства «Бином»
авторские материалы


Обратная связь

Если не удалось найти и скачать презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое ThePresentation.ru?

Это сайт презентаций, докладов, проектов, шаблонов в формате PowerPoint. Мы помогаем школьникам, студентам, учителям, преподавателям хранить и обмениваться учебными материалами с другими пользователями.


Для правообладателей

Яндекс.Метрика