Объектно-ориентированное программирование. Языки C++ и C#
Объектно-ориентированное программирование. Языки C++ и C#
Зачем нужно что-то новое?
Как мы воспринимаем объекты?
Использование объектов
Объектно-ориентированное программирование. Языки C++ и C#
С чего начать?
Модель дороги с автомобилями
Модель дороги с автомобилями
Модель дороги с автомобилями
Объектно-ориентированное программирование. Языки C++ и C#
Классы
Класс «Дорога»
Класс «Дорога»
Класс «Дорога»
Новый конструктор
Конструктор с параметрами
Защита от неверных данных
Значения параметров по умолчанию
Класс «Машина»
Конструкторы класса «Машина»
Класс «Машина»: метод move
Основная программа
Использование указателей
Что в этом хорошего и плохого?
Задание
Задание
Задание
Объектно-ориентированное программирование. Языки C++ и C#
Зачем скрывать внутреннее устройство?
Защита внутренних данных
Пример: класс «перо»
Пример: класс «перо»
Пример: класс «перо»
Изменение внутреннего устройства
Преобразования int  hex
Преобразования hex ↔ int
Преобразования hex  int
Свойства в C#
Свойства в C#
Свойства в C#
Свойства в C#
Свойство «только для чтения»
Скрытие внутреннего устройства
Задание
Задание
Задание
Задание
Объектно-ориентированное программирование. Языки C++ и C#
Классификации
Что такое наследование?
Иерархия логических элементов
Базовый класс
Базовый класс
Установка входа
Что такое полиморфизм?
Базовый класс
Базовый класс
Абстрактный класс
Элемент «НЕ»
Элемент «НЕ»
Элементы с двумя входами
Элементы с двумя входами
Элементы с двумя входами
Вызов виртуального метода
Виртуальный метод
Пример: элемент «И-НЕ»
Модульность
Модульность
Сообщения между объектами
Сообщения между объектами
Сообщения между объектами
Сообщения между объектами
Сообщения между объектами
Задание
Задание
Задание
Задание
Задание
Задание
Задание
Задание
Объектно-ориентированное программирование. Языки C++ и C#
Интерфейс: объекты и сообщения
Классические программы
Программы, управляемые событиями
Программы, управляемые событиями
Что такое RAD-среда?
RAD-среды: Delphi
RAD-среды: MS Visual Studio
RAD-среды: Lazarus
Объектно-ориентированное программирование. Языки C++ и C#
Visual Studio Express (C#)
Язык C#
Проекты и решения
Простейший проект
Модуль формы
Модуль формы
Основная программа
Свойства формы
Обработчик событий
Обработчик события
Диалог с вопросом
Параметры MessageBox.Show
Объектно-ориентированное программирование. Языки C++ и C#
Панель компонентов
Просмотр рисунков
Настройка формы
Верхняя панель
Кнопка и выключатель
Компонент PictureBox
Выбор файла
Выбор файла
Масштабирование
Ввод и вывод данных
Обновление компонентов вывода
Обновление компонентов вывода
Вызов при запуске
Обработка ошибок
Обработка ошибок
Обработка ошибок
Блокирование неверных символов
Задание
Задание
Задание
Объектно-ориентированное программирование. Языки C++ и C#
Новый класс (модуль)
Обработчик KeyPress
Свойство Value
Поле для ввода целых чисел
Объектно-ориентированное программирование. Языки C++ и C#
Еще одна декомпозиция
Модель и представление
Модель и представление
Модель
Статический класс – набор функций
Модель: приоритет операций
Модель: номер последней операции
Модель: вычисления
Представление
Перехват нажатия на клавишу Enter
Обработка и вывод данных
Обработка и вывод данных
Перехват нажатия на клавишу Enter
Задание
Задание
Задание
Задание
Калькулятор
Конец фильма
Источники иллюстраций
4.23M
Категория: ПрограммированиеПрограммирование

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

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

1
Объектно-ориентированное
программирование.
Языки C++ и C#
§ 46. Что такое ООП?
§ 47. Объекты и классы
§ 48. Создание объектов в программе
§ 49. Скрытие внутреннего устройства
§ 50. Иерархия классов
§ 51. Программы с графическим интерфейсом
§ 52. Программирование в RAD-средах
§ 53. Использование компонентов
§ 54. Совершенствование компонентов
§ 55. Модель и представление
К.Ю. Поляков, Е.А. Ерёмин, 2013
http://kpolyakov.spb.ru

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

2
Объектноориентированное
программирование.
Языки C++ и C#
§ 46. Что такое ООП?
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

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

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
3
Зачем нужно что-то новое?
!
Главная проблема – сложность!
• программы из миллионов строк
• тысячи переменных и массивов
Э. Дейкстра: «Человечество еще в древности
придумало способ управления сложными системами:
«разделяй и властвуй»».
Структурное программирование:
декомпозиция по
задача
задачам
подзадача 1
подзадача 2.1
подзадача 2
подзадача 2.2
К.Ю. Поляков, Е.А. Ерёмин, 2014
подзадача 3
подзадача 2.3
человек мыслит
иначе, объектами
http://kpolyakov.spb.ru

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

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
4
Как мы воспринимаем объекты?
существенные
свойства
Абстракция – это выделение существенных свойств
объекта, отличающих его от других объектов.
!
К.Ю. Поляков, Е.А. Ерёмин, 2014
Разные цели –
разные модели!
http://kpolyakov.spb.ru

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

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
5
Использование объектов
Программа – множество объектов (моделей), каждый из
которых обладает своими свойствами и поведением,
но его внутреннее устройство скрыто от других
объектов.
!
Нужно «разделить» задачу на объекты!
А
В
Б
Б1
В1
Б2
В2
В3
Б3
Г
Г1
К.Ю. Поляков, Е.А. Ерёмин, 2014
Г2
декомпозиция по
объектам
http://kpolyakov.spb.ru

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

6
Объектноориентированное
программирование.
Языки C++ и C#
§ 47. Объекты и классы
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

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

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
7
С чего начать?
Объектно-ориентированный анализ (ООА):
• выделить объекты
• определить их существенные свойства
• описать поведение (команды, которые они
могут выполнять)
Что такое объект?
?
Объектом можно назвать то, что имеет чёткие границы
и обладает состоянием и поведением.
Состояние определяет поведение:
• лежачий человек не прыгнет
• незаряженное ружье не выстрелит
Класс – это множество объектов, имеющих общую
структуру и общее поведение.
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

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

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
8
Модель дороги с автомобилями
Объект «Дорога»:
ширина
(число полос)
длина
свойства
(состояние)
Дорога
длина
ширина
название
класса
методы
(поведение)
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

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

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
9
Модель дороги с автомобилями
Объект «Машина»:
свойства: координаты и скорость
P
V
X
• все машины одинаковы
• скорость постоянна
• на каждой полосе – одна машина
• если машина выходит за правую
границу дороги, вместо нее слева
появляется новая машина
Машина
X (координата)
P (полоса)
V (скорость)
двигаться
Метод – это процедура или функция, принадлежащая
классу объектов.
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

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

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
10
Модель дороги с автомобилями
Взаимодействие объектов:
Дорога
длина
ширина
узнать длину
Машина
X (координата)
P (полоса)
V (скорость)
двигаться
Схема определяет
• свойства объектов
• методы: операции, которые они могут выполнять
• связи (обмен данными) между объектами
!
Ни слова о внутреннем устройстве объектов!
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

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

11
Объектноориентированное
программирование.
Языки C++ и C#
§ 48. Создание объектов в
программе
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

12. Классы

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
12
Классы
• программа – множество взаимодействующих объектов
• любой объект – экземпляр какого-то класса
• класс – описание группы объектов с общей структурой и
поведением
отличие от
структур!
Класс
Данные
состояние
Методы
поведение
Поле – это переменная, принадлежащая объекту.
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

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

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
13
Класс «Дорога»
Объявление класса:
class TRoad
{
float Length;
int Width;
};
!
Память не выделяется!
Объявление переменной (создание объекта):
TRoad road;
Попытка изменить данные:
ошибка
road.Length = 60;
road.Width = 3;
!
private
По умолчанию все члены класса закрытые!
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

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

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
14
Класс «Дорога»
Объявление класса:
class TRoad
{
public:
float Length;
int Width;
};
!
Общедоступные данные!
Основная программа:
main()
{
TRoad road;
road.Length = 60; // работает!
road.Width = 3;
// работает!
}
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

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

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
15
Класс «Дорога»
вызов конструктора
TRoad road;
Конструктор – это метод класса, который
вызывается для создания объекта этого класса.
!
Конструктор по умолчанию строится автоматически!
?
Что записано в полях?
road.Length = ???
road.Width = ???
К.Ю. Поляков, Е.А. Ерёмин, 2014
«мусор»
http://kpolyakov.spb.ru

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

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
16
Новый конструктор
Класс:
class TRoad
Имя конструктора совпадает
{
с именем класса!
public:
float Length;
int Width;
TRoad(); // объявление конструктора
};
!
Конструктор:
TRoad::TRoad()
{
Length = 0;
Width = 0;
}
К.Ю. Поляков, Е.А. Ерёмин, 2014
метод aaa класса TRoad
TRoad::aaa()
{
...
}
http://kpolyakov.spb.ru

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

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
17
Конструктор с параметрами
class TRoad
{
public:
...
TRoad ( float length0, int width0 );
};
Конструктор:
TRoad::TRoad ( float length0, int width0 )
{
Length = length0;
Width = width0;
}
Вызов:
TRoad road ( 60, 3 );
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

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

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
18
Защита от неверных данных
TRoad::TRoad ( float length0, int width0 )
{
if ( length0 > 0 )
Length = length0;
else Length = 1;
if ( width0 > 0 )
Width = width0;
else Width = 1;
}
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

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

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
19
Значения параметров по умолчанию
class TRoad
значение по
{
умолчанию
public:
...
TRoad ( float length0, int width0 = 3 );
};
Вызов:
TRoad road ( 60 );
последние в списке
параметров
width = 3
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

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

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
20
Класс «Машина»
class TCar
координата,
{
скорость
public:
float X, V; полоса
int P;
TRoad *Road;
дорога, по
которой едет
void move();
TCar (); // конструктор без параметров
TCar ( TRoad *road0, int p0, float v0 );
};
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

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

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
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;
}
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

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

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
22
Класс «Машина»: метод move
Равномерное движение:
X X 0 V t
t 1 интервал
дискретизации
перемещение за одну
единицу времени
void TCar::move()
выезжает с другой
{
стороны
X = X + V;
if ( X > Road->Length ) X = 0;
}
обращение через
указатель
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

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

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
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++ )
#include <conio.h>
cars[i].move();
}
пока не нажата
while ( !kbhit() );
(любая) клавиша
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

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

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
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();
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

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

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
25
Что в этом хорошего и плохого?
ООП – это метод разработки больших программ!
основная программа – простая и понятная
классы могут разрабатывать разные программисты
независимо друг от друга (+интерфейс!)
повторное использование классов
неэффективно для небольших задач
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

26. Задание

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
26
Задание
«A»: Построить класс Попугай (TParrot), который умеет
говорить какую-то фразу, заранее определённую при
описании класса.
Пример:
TParrot p;
p.say();
Привет, друзья!
«B»: Изменить класс из задания A так, чтобы фраза
задавалась при создании конкретного экземпляра.
Пример:
TParrot p1( "Гав!" );
TParrot p2( "Мяу!" );
p1.say();
Гав!
p2.say();
Мяу!
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

27. Задание

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
27
Задание
«С»: Изменить класс из задания B так, чтобы фразу можно
было изменять во время работы программы.
Пример:
TParrot p( "Гав!" );
p.say();
Гав!
p.newText( "Мяу!" );
p.say();
Мяу!
«D»: Изменить класс из задания C так, чтобы при вызове
метода say можно было задать число повторений.
Пример:
TParrot p( "Гав!" );
p.say();
Гав!
p.newText( "Мяу!" );
p.say( 3 );
Мяу! Мяу! Мяу!
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

28. Задание

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
28
Задание
«E»: Изменить класс из задания D так, чтобы можно было
добавлять фразы в набор фраз, которые знает попугай.
При вызове метода say попугай выдаёт случайную фразу
из своего набора.
Пример:
TParrot p( "Гав!" );
p.say();
Гав!
p.learn( "Мяу!" );
p.say();
Гав!
p.say(3);
Мяу! Мяу! Мяу!
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

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

29
Объектноориентированное
программирование.
Языки C++ и C#
§ 49. Скрытие внутреннего
устройства
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

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

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
30
Зачем скрывать внутреннее устройство?
Объектная модель задачи:
интерфейсы
?
?
защита внутренних данных
проверка входных данных на корректность
изменение устройства с сохранением интерфейса
Инкапсуляция («помещение в капсулу») – скрытие
внутреннего устройства объектов.
!
Также объединение данных и методов в
одном объекте!
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

31. Защита внутренних данных

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
31
Защита внутренних данных
состояние
методы
!
Cat
энергия
настроение
голод
есть
спать
играть
Меняем состояние
только через методы!
К.Ю. Поляков, Е.А. Ерёмин, 2014
?
Можно изменять
вучную?
метод есть
+ энергия
+ настроение
- голод
метод спать
+ энергия
+ голод
метод играть
- энергия
+ настроение
+ голод
http://kpolyakov.spb.ru

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

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
32
Пример: класс «перо»
class TPen
Field – поле
{
R
G
B
private:
string FColor; // цвет, "FF00FF"
};
По умолчанию все члены класса
закрытые – private!
class TPen
{
Как к ним обращаться?
private:
string FColor;
методы
доступа
public:
string
stringgetColor
getColor();
();
void
voidsetColor
setColor(( string
stringnewColor
newColor );
);
};
!
?
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

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

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
33
Пример: класс «перо»
Получить значение:
string TPen::getColor ()
{
return FColor;
}
Записать значение:
void TPen::setColor ( string
{
if ( newColor.length()!= 6
FColor = "000000";
else FColor = newColor;
}
!
newColor )
)
если ошибка,
чёрный цвет
Защита от неверных данных!
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

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

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
34
Пример: класс «перо»
Использование:
установить
цвет
TPen pen;
pen.setColor ( "FFFF00" );
cout << "цвет пера: " << pen.getColor();
!
Не очень удобно!
pen.color = "FFFF00";
cout << pen.color;
К.Ю. Поляков, Е.А. Ерёмин, 2014
прочитать
цвет
нельзя в
C++
http://kpolyakov.spb.ru

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

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
35
Изменение внутреннего устройства
Удобнее хранить цвет в виде числа:
class TPen
Найди отличие!
{
private:
изменилось внутреннее
int FColor;
устройство
public:
string getColor();
void setColor( string newColor );
};
?
!
Интерфейс не изменился!
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

36. Преобразования int  hex

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
36
Преобразования int hex
Использование потока (байтов):
"FF00FF"
16711935
записываем в поток число в
шестнадцатеричной системе
#include <sstream>
stringstream s;
s << hex << FColor;
255 "FF"
"0000FF"
К.Ю. Поляков, Е.А. Ерёмин, 2014
читаем
строку
подключить
строковые потоки
?
Что плохо?
правильно так!
http://kpolyakov.spb.ru

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

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
37
Преобразования hex ↔ int
#include <sstream>
#include <iomanip>
подключить
манипуляторы
string TPen::getColor()
{
заполнять не
stringstream s;
пробелами, а нулями
s << setfill('0')
<< setw(6)
вывести 6 знаков
<< hex << FColor;
прочитать строку
return s.str();
string из потока
}
255 "0000FF"
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

38. Преобразования hex  int

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
38
Преобразования hex int
Использование потока:
"FF00FF"
записываем в
поток строку
16711935
читаем число в
шестнадцатеричной системе
void TPen::setColor ( string newColor )
{
stringstream s;
if ( newColor.length()!= 6 )
FColor = 0; // чёрный цвет
else {
записываем строку
s << newColor;
s >> hex >> FColor;
читаем число
}
}
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

39. Свойства в C#

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
39
Свойства в C#
Доступ с помощью методов:
TPen pen;
pen.setColor ( "FFFF00" );
cout << "цвет пера: " << pen.getColor();
Доступ с помощью свойства color:
вызов pen.setColor
TPen pen;
pen.color = "FFFF00";
cout << "цвет пера: " << pen.color;
вызов pen.getColor
Свойство – это способ доступа к внутреннему
состоянию объекта, имитирующий обращение к его
внутренней переменной.
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

40. Свойства в C#

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
40
Свойства в C#
class TPen
закрытое поле
{
private string FColor;
открытое
public string color
свойство
{
метод чтения
get { return FColor; }
set { FColor = value; }
}
метод записи
}
Использование:
TPen pen;
pen.color = "FFFF00";
string s = pen.color;
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

41. Свойства в C#

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
41
Свойства в C#
Защита от неверного ввода данных:
public string color
{
get { return FColor; }
set
{
if ( value.Length != 6 )
FColor = "000000";
else FColor = value;
}
переданное
}
значение
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

42. Свойства в C#

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
42
Свойства в C#
Изменение внутреннего устройства:
class TPen
{
private int FColor;
public string color
шестнадцатеричный
{
формат, 6 знаков
в строку
get {
return FColor.ToString ( "X6" );
}
переданное
в целое
значение
set {
FColor = Convert.ToInt32(value, 16);
}
из шестнадцатеричной
}
записи
}
Данные – целое число, свойство – строка!
!
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

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

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
43
Свойство «только для чтения»
Скорость машины можно только читать:
class TCar {
нет метода записи
private:
double Fv;
public:
double getV() { return Fv; }
};
Свойство на C#:
class TCar {
private double Fv;
public double V {
get { return Fv; }
}
};
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

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

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
44
Скрытие внутреннего устройства
Инкапсуляция («помещение в капсулу»)
К.Ю. Поляков, Е.А. Ерёмин, 2014
свойства
внутреннее
устройство
(private)
методы
интерфейс
(public)
http://kpolyakov.spb.ru

45. Задание

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
45
Задание
«A»: Построить класс РядЛампочек (TLampRow), который
хранит состояние ряда из 8 лампочек в виде символьной
строки. Цифра 0 обозначает выключенную лампочку,
цифра 1 – включенную.
Методы getState и setState скрывают внутреннюю
переменную state, которая хранит состояние лампочек.
При записи нового значения проверяется, что длина
строки состояния равна 8, иначе записываются все нули.
Метод show выводит на экран состояние лампочек,
обозначая выключенную лампочку как минус, а
включённую – как «*».
Пример:
TLampRow lamps;
lamps.show();
-------lamps.setState( "10101010" );
cout << lamps.getState() << endl; 10101010
lamps.show();
*-*-*-* К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

46. Задание

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
46
Задание
«B»: Дополните класс TLampRow из задания A так, чтобы
количество лампочек в цепочке можно было задавать в
конструкторе.
Пример:
TLampRow lamps( 6 );
lamps.show();
-----lamps.setState( "101010" );
cout << lamps.getState() << endl; 101010
lamps.show();
*-*-*lamps.setState( "10101010" );
ошибка
cout << lamps.getState() << endl; 000000
lamps.show();
------
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

47. Задание

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
47
Задание
«С»: Дополните класс TLampRow из задания B так, чтобы
лампочки могли гореть одним из двух цветов – красный
цвет имеет код 1 и обозначается при выводе как «*», а
зелёный цвет имеет код 2 и обозначается как «о».
Пример:
TLampRow lamps( 6 );
lamps.show();
-----lamps.setState( "102102" );
cout << lamps.getState() << endl; 102102
lamps.show();
*-o*-o
lamps.setState( "10201010" );
ошибка
cout << lamps.getState() << endl; 000000
lamps.show();
------
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

48. Задание

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
48
Задание
«D»: Дополните класс TLampRow из задания C так, чтобы код
состояния хранился как целое число. При этом
интерфейс (способ чтения и записи свойства state) не
должен измениться.
Пример:
TLampRow lamps( 6 );
lamps.show();
-----lamps.setState( "102102" );
cout << lamps.getState() << endl; 102102
lamps.show();
*-o*-o*
lamps.setState( "10201010" );
ошибка
cout << lamps.getState() << endl; 000000
lamps.show();
------
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

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

49
Объектноориентированное
программирование.
Языки C++ и C#
§ 50. Иерархия классов
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

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

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
50
Классификации
?
Что такое классификация?
Классификация – разделение изучаемых объектов на
группы (классы), объединенные общими признаками.
?
Зачем это нужно?
Фрукт
Яблоко
Груша
базовый класс
Банан
Апельсин
классынаследники
это фрукт,
у которого…
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

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

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
51
Что такое наследование?
класс Двудольные
семейство Бобовые
род Клевер
горный клевер
наследует свойства
(имеет все свойства)
Класс Б является наследником класса А, если можно
сказать, что Б – это разновидность А.
яблоко – фрукт
яблоко – это фрукт
горный клевер – клевер
горный клевер – это
растение рода Клевер
машина – двигатель
машина содержит
двигатель (часть – целое)
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

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

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
52
Иерархия логических элементов
Логический элемент
с одним входом
НЕ
с двумя входами
И
ИЛИ
Объектно-ориентированное программирование –
это такой подход к программированию, при котором
программа представляет собой множество
взаимодействующих объектов, каждый из которых
является экземпляром определенного класса, а
классы образуют иерархию наследования.
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

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

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
53
Базовый класс
ЛогЭлемент
In1 (вход 1)
In2 (вход 2)
Res (результат)
calc
?
class TLogElement
{
public:
bool In1, In2, Res;
void calc();
};
вычислить
выход
Зачем хранить результат?
можно моделировать элементы
с памятью (триггеры)
?
К.Ю. Поляков, Е.А. Ерёмин, 2014
Что плохо?
http://kpolyakov.spb.ru

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

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
54
Базовый класс
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; }
};
только для
чтения
?
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

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

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
55
Установка входа
void TLogElement::setIn1(bool newIn1)
{
FIn1 = newIn1;
Что ещё?
calc();
}
пересчёт при изменении
входа
?
?
Как написать процедуру calc?
void TLogElement::calc()
{
}
!
заглушка
Проблема: наследники должны менять calc!
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

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

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
56
Что такое полиморфизм?
греч.: πολυ — много, μορφη — форма
Полиморфизм – это возможность классов-наследников
по-разному реализовать метод, описанный для
класса-предка.
!
Проблема: открыть данные и методы для
наследников и закрыть для остальных!
class TLogElement
{
...
protected:
void calc();
};
К.Ю. Поляков, Е.А. Ерёмин, 2014
защищённые элементы:
доступны только
наследникам
http://kpolyakov.spb.ru

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

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
57
Базовый класс
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; }
};
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

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

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
58
Базовый класс
class TLogElement
{
наследники будут
изменять поле
protected:
bool FRes;
virtual void calc()=
= 0;
bool getIn2() { return Fin2; }
void setIn2 ( bool newIn2 );
...
};
для элементов с одним
входом не нужно!
virtual (виртуальный) – этот метод могут переопределять
классы-наследники
= 0 (абстрактный метод) – этот метод базовый класс не будет
реализовывать (оставляет наследникам)
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

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

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
59
Абстрактный класс
• все логические элементы должны иметь метод calc
• метод calc невозможно написать, пока неизвестен тип
логического элемента
Абстрактный метод – это метод класса, который
объявляется, но не реализуется в классе.
Абстрактный класс – это класс, содержащий хотя бы
один абстрактный метод.
нет логического элемента «вообще», как не «фрукта
вообще», есть конкретные виды
!
Нельзя создать объект абстрактного класса!
TLogElement – абстрактный класс из-за метода calc
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

60. Элемент «НЕ»

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
Элемент «НЕ»
60
наследник от
TLogElement
class TNot: public TLogElement
{
переопределяет метод
protected:
базового класса
void calc();
};
void TNot::calc()
{
FRes =!getIn1();
}
!
?
Почему не ! FIn1?
Это уже не абстрактный класс!
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

61. Элемент «НЕ»

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
61
Элемент «НЕ»
Использование:
создание объекта
TNot n;
n.setIn1 ( false );
cout << n.getRes();
К.Ю. Поляков, Е.А. Ерёмин, 2014
установка входа
вывод результата
http://kpolyakov.spb.ru

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

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
62
Элементы с двумя входами
сохранить права
доступа
наследник от
TLogElement
class TLog2In: public TLogElement
{
повысить «видимость»
public:
(protected public)
TLogElement::setIn2;
TLogElement::getIn2;
};
?
Можно ли создать объект этого класса?
нельзя, он абстрактный
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

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

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
63
Элементы с двумя входами
class TAnd: public TLog2In
{
protected:
void calc();
};
class TOr: public TLog2In
{
protected:
void calc();
};
К.Ю. Поляков, Е.А. Ерёмин, 2014
элемент «И»
элемент «ИЛИ»
http://kpolyakov.spb.ru

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

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
64
Элементы с двумя входами
void TAnd::calc()
элемент «И»
{
FRes = getIn1() && getIn2();
}
элемент «ИЛИ»
void TAnd::calc()
{
FRes = getIn1() || getIn2();
}
доступ к защищённому
полю (protected)
?
Почему не обратиться к FIn1 и FIn2?
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

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

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
65
Вызов виртуального метода
В базовом классе:
void TLogElement::setIn1( bool newIn1 )
{
FIn1 = newIn1;
calc();
}
?
Какой метод вызывается?
class TLogElement
{
protected:
virtual void calc()= 0;
...
};
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

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

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
66
Виртуальный метод
Статическое связывание:
транслятор записывает в код адрес процедуры
Динамическое связывание:
адрес процедуры определяется во время выполнения
программы в зависимости от типа объекта
Виртуальный метод – это метод базового класса,
который могут переопределить классы-наследники так,
что конкретный адрес вызываемого метода
определяется только при выполнении программы.
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

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

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
67
Пример: элемент «И-НЕ»
main()
{
A
&
TNot elNot;
B
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;
}
}
}
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

68. Модульность

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
68
Модульность
Идея: выделить классы в отдельный модуль.
Интерфейс (log_elem.h):
class
{ … }
class
{ … }
class
{ … }
class
{ … }
class
{ … }
TLogElement
TLog2In: public TLogElement
TNot: public TLogElement
TAnd: public TLog2In
TOr: public TLog2In
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

69. Модульность

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
69
Модульность
Модуль (log_elem.cpp):
#include <log_elem.h>
void TLogElement::setIn1 ( bool newIn1 )
{ ... }
void TLogElement::setIn2 ( bool newIn1 )
{ ... }
void TNot::calc()
реализация методов
{ ... }
классов
void TAnd::calc()
{ ... }
void TOr::calc()
Чего не хватает?
{ ... }
?
В основную программу:
#include <log_elem.h>
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

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

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
70
Сообщения между объектами
!
Задача – автоматическая передача
сигналов по цепочке!
class TLogElement
{
private:
TLogElement *FNextEl;
int FNextIn;
адрес следующего
...
элемента в цепочке
public:
void Link ( TLogElement *nextElement,
int nextIn = 1 );
};
номер входа
следующего элемента
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

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

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
71
Сообщения между объектами
Установка связи:
void TLogElement::Link(
TLogElement *nextElement,
int nextIn )
{
FNextEl = nextElement;
FNextIn = nextIn;
}
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

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

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
72
Сообщения между объектами
После изменения выхода «дергаем» следующий
элемент:
void TLogElement::setIn1 ( bool newIn1 )
{
если следующий
FIn1 = newIn1;
элемент установлен…
calc();
if ( FNextEl )
switch ( FNextIn ) {
case 1:
FNextEl->setIn1 ( getRes() );
case 2:
FNextEl->setIn2 ( getRes() );
}
передать результат на
}
нужный вход
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

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

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
73
Сообщения между объектами
?
Как сделать, чтобы сначала FNextEl = NULL?
Новый конструктор:
TLogElement::TLogElement()
{
FNextEl = NULL;
}
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

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

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
74
Сообщения между объектами
Изменения в основной программе:
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());
...
это уже не
}
нужно!
}
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

75. Задание

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
75
Задание
«A»: Постройте класс TPet (домашнее животное) с двумя
скрытыми полями: FName (имя) и FAge (возраст). Они
должны быть доступны для чтения через свойства name
и age и недоступны для записи. Метод gettingOlder
увеличивает возраст на 1 год. Класс TPet – абстрактный,
он имеет абстрактный метод say.
Постройте два класса-наследника – TCat (кошка) и TDog
(собака).Они должны реализовать метод say.
Описания классов должны быть в отдельном модуле
animals.cpp.
Пример: см. следующий слайд.
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

76. Задание

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
76
Задание
«A»:
Шарик: 6 лет
Пример:
Мурка: Мяу!
TPet *p, *pets[2];
p = new TDog("Шарик", 5); Шарик: Гав!
p->gettingOlder();
cout << p->getName() << ": "
<< p->getAge() << " лет" << endl;
pets[0] = new TCat("Мурка", 3);
pets[1] = p;
for( auto p: pets )
p->say();
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

77. Задание

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
77
Задание
«B»: Добавьте класс TMammal (млекопитающее) –
наследник класса TPet и предок для классов TCat и
TDog. Он должен иметь метод run (бежать), который
выводит сообщение вида «Вася побежал».
Пример:
TPet *pets[2];
pets[0] = new TCat("Мурзик", 3);
pets[1] = new TDog("Шарик", 5);;
for( int i = 0; i < 2; i++ ) {
pets[i]->say();
auto pMammal = dynamic_cast
<TMammal*> (pets[i]); Мурзик: Мяу!
if( pMammal )
Мурзик
побежал...
pMammal->run();
Шарик: Гав!
}
Шарик побежал...
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

78. Задание

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
78
Задание
«C»: Добавьте класс TReptilia (рептилии) – наследник класса TPet и
предок для новых классов TTurtle (черепаха) и TSnake (змея).
Он должен иметь метод crawl (ползти), который выводит
сообщение вида «Вася пополз…».
Мурзик: Мяу!
Пример:
Мурзик побежал...
TPet *pets[4];
Зак: ...
pets[0] = new TCat("Мурзик", 3);
Зак пополз...
pets[1] = new TTurtle("Зак", 32);
Шарик: Гав!
pets[2] = new TDog("Шарик", 5);
Шарик побежал...
pets[3] = new TSnake("Чаки", 2);
Чаки: ш-ш-ш-ш...
for( int i = 0; i < 4; i++ ) {
Чаки пополз...
pets[i]->say();
auto pMammal = dynamic_cast <TMammal*> (pets[i]);
if( pMammal )
pMammal->run();
auto pRept = dynamic_cast <TReptilia*> (pets[i]);
if( pRept )
pRept->crawl();
}
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

79. Задание

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
79
Задание
«A»: Собрать полную программу и построить таблицу
истинности последовательного соединения элементов
«ИЛИ» и «НЕ».
Пример:
A | B | not(A+B)
------------------0 | 0 | 1
0 | 1 | 0
1 | 0 | 0
1 | 1 | 0
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

80. Задание

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
80
Задание
«B»: Добавить в иерархию классов элементы «И-НЕ» (TNAnd)
и «ИЛИ-НЕ» (TNOr), которые представляют собой
последовательные соединения элементов «И» и «ИЛИ» с
элементом «НЕ». Построить их таблицы истинности.
Пример:
A | B | A nand B
------------------0 | 0 | 1
0 | 1 | 1
1 | 0 | 1
1 | 1 | 0
A | B | A nor B
------------------0 | 0 | 1
0 | 1 | 0
1 | 0 | 0
1 | 1 | 0
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

81. Задание

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
81
Задание
«C»: Добавить в иерархию классов элемент «исключающее
ИЛИ» (TXor) и «импликация» (TImp). Построить их
таблицы истинности.
Пример:
A | B | A xor B
------------------0 | 0 | 0
0 | 1 | 1
1 | 0 | 1
1 | 1 | 0
A | B | A -> B
------------------0 | 0 | 1
0 | 1 | 1
1 | 0 | 0
1 | 1 | 1
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

82. Задание

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
82
Задание
«D»: Добавить в иерархию классов элемент «триггер»
(TTrigger). Построить его таблицу истинности при
начальных значениях выхода Q, равных 0 и 1.
Пример:
При Q = 0:
A | B | Q
------------------0 | 0 | 0
0 | 1 | 0
1 | 0 | 1
1 | 1 | 1
При Q = 1:
A | B | Q
------------------0 | 0 | 1
0 | 1 | 0
1 | 0 | 1
1 | 1 | 1
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

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

83
Объектноориентированное
программирование.
Языки C++ и C#
§ 51. Программы с графическим
интерфейсом
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

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

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
84
Интерфейс: объекты и сообщения
поле ввода
флажок
кнопка
переключатель
Все элементы окон – объекты, которые обмениваются
данными, посылая друг другу сообщения.
Сообщение – это блок данных определённой
структуры, который используется для обмена
информацией между объектами.
• адресат (кому) или широковещательное
• числовой код (тип) сообщения
• параметры (дополнительные данные)
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

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

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
85
Классические программы
начало
основная программа
ввод данных
обработка данных
вывод результатов
конец
!
процедуры и функции
Порядок выполнения команд определяется
программистом, пользователь не может вмешаться!
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

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

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
86
Программы, управляемые событиями
Событие – это переход какого-либо объекта из одного
состояния в другое.
• нажатие на клавишу
• щелчок мышью
• перемещение окна
• поступление данных из сети
• запрос к веб-серверу
• завершение вычислений
•…
!
Программа начинает работать при
наступлении событий!
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

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

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
87
Программы, управляемые событиями
клавиатура, мышь, …
системная очередь сообщений
начало
ожидание сообщения
стоп?
конец
очередь
программы
основная
программа
обработка сообщения
программа
!
операционная
система
обработчики
сообщений
Программа управляется событиями!
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

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

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
88
Что такое RAD-среда?
RAD = Rapid Application Development — быстрая
разработка приложений
Форма – это шаблон, по
Этапы разработки:
которому строится окно
• создание формы
программы или диалога
• минимальный код
добавляется автоматически
• расстановка элементов интерфейса с
помощью мыши и настройка их свойств
• создание обработчиков событий
• написание алгоритмов обработки данных
выполняются при
возникновении событий
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

89. RAD-среды: Delphi

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
89
RAD-среды: Delphi
Язык: Object Pascal, позднее Delphi:
1995: Borland, сейчас: Embarcadero Technologies
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

90. RAD-среды: MS Visual Studio

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
90
RAD-среды: MS Visual Studio
Языки: Visual Basic, Visual C++, Visual C#, Visual F#
c 1995 по н.в.: Microsoft
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

91. RAD-среды: Lazarus

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
91
RAD-среды: Lazarus
Языки: FreePascal, Delphi
свободное ПО:
lazarus.freepascal.org
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

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

92
Объектноориентированное
программирование.
Языки C++ и C#
§ 52. Программирование в
RAD-средах
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

93. Visual Studio Express (C#)

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
93
Visual Studio Express (C#)
http://www.visualstudio.com/ru-ru/products/visual-studio-express-vs.aspx
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

94. Язык C#

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
94
Язык C#
С С++ C#
Паскаль
Java
Smalltalk
Common Intermediate
Language
C#
VB.NET
F#
язык CIL
(байт-код)
Common
Language
Runtime
виртуальная
машина CLR
объединение программ на разных языках
полностью ООП – для больших программ
большая библиотека функций и компонентов
требовательна к ресурсам
Linux – проект
Mono
надёжно – только под Windows
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

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

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
95
Проекты и решения
Проект – это набор файлов, из которых компилятор
строит исполняемый файл программы.
• проект (.csproj, CSharp Project) – описание (XML)
• модули, из которых состоит программа (*.сs);
• ресурсы (*.resx) – строки (перевод сообщений).
основная
программа
обработчики
событий
ресурсы
Program.cs
Form1.cs
Form1.Designer.cs
Form1.resx
my.exe
описание
формы
Решение = один или несколько проектов.
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

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

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
96
Простейший проект
Файл – Создать проект – Приложение Windows Forms
Редактор
кода
Конструктор
формы
!
F5 – запуск!
Структура
проекта
Панель
элементов
Свойства
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

97. Модуль формы

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
97
Модуль формы
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(); }
}
конструктор
}
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

98. Модуль формы

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
98
Модуль формы
открытый
класс
частичное
описание
наследник
класса Form
public partial class Form1: Form
{
public Form1()
{
InitializeComponent();
}
}
Код этого метода – в
начальные
установки
Form1.Designer.cs!
!
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

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

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
99
Основная программа
библиотеки
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() );
}
запуск цикла
}
обработки сообщений
}
!
Статический класс – набор методов!
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

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

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
100
Свойства формы
MainForm
Name – имя формы
Size.Width – ширина
Size.Height – высота
Text – текст в заголовке окна
BackColor – цвет фона
Font – шрифт надписей
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

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

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
101
Обработчик событий
События
2 ЛКМ: создать
обработчик
FormClosing:
форма закрывается
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

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

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
102
Обработчик события
закрытый
метод класса
MainForm
название
обработчика
private void MainForm_FormClosing (
object sender,
общий предок
FormClosingEventArgs e )
всех объектов
{
кто послал
дополнительные
}
сообщение
данные о событии
!
Автоматически добавлен в Form1.Designer.cs!
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

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

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
103
Диалог с вопросом
Метод MessageBox.Show:
private void MainForm_FormClosing (
object sender, FormClosingEventArgs e)
{
тип: результат диалога
DialogResult res;
res = MessageBox.Show (
"Вы действительно хотите выйти из программы?",
"Подтверждение",
MessageBoxButtons.YesNo, MessageBoxIcon.Question
);
if ( res == DialogResult.No )
нажали «Нет»,
e.Cancel = true;
отменить закрытие
}
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

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

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
104
Параметры MessageBox.Show
• сообщение пользователю
• заголовок окна
• тип запроса MessageBoxIcon
Error
ошибка
Warning
предупреждение
Information информация
Questionвопрос
• набор (множество) кнопок MessageBoxButtons:
YesNo
«Да», «Нет»
YesNoCancel «Да», «Нет», «Отмена»
OK
«OK»
OKCancel
«ОК», «Отмена»
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

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

105
Объектноориентированное
программирование.
Языки C++ и C#
§ 53. Использование
компонентов
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

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

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
106
Панель компонентов
Контейнеры
Стандартные
Диалоги
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

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

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
107
Просмотр рисунков
панель
Panel
кнопка
Button
выключатель
CheckBox
рисунок
PictureBox
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

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

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
108
Настройка формы
Файл – Создать проект – Приложение Windows Forms
Name MainForm
Text Просмотр
рисунков
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

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

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
109
Верхняя панель
панель Panel
Dock = Top
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

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

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
110
Кнопка и выключатель
кнопка
Button
выключатель
CheckBox
Name = OpenBtn
Text = Открыть файл
К.Ю. Поляков, Е.А. Ерёмин, 2014
Name = SizeCB
Text = По размерам окна
http://kpolyakov.spb.ru

111. Компонент PictureBox

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
111
Компонент PictureBox
рисунок
PictureBox
Name = Image
Dock = Fill
К.Ю. Поляков, Е.А. Ерёмин, 2014
?
1) Загрузка файла?
2) Масштабирование?
http://kpolyakov.spb.ru

112. Выбор файла

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
112
Выбор файла
выбор рисунка
OpenFileDialog
Name = OpenDlg
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

113. Выбор файла

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
113
Выбор файла
2 ЛКМ
если файл выбран
if ( OpenDlg.ShowDialog() == DialogResult.OK )
Img.Image = new Bitmap (OpenDlg.FileName);
имя файла
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

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

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
114
Масштабирование
2 ЛКМ
if ( SizeCB.Checked )
Img.SizeMode = PictureBoxSizeMode.Zoom;
else Img.SizeMode = PictureBoxSizeMode.Normal;
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

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

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
115
Ввод и вывод данных
для веб-страниц
поле ввода rEdit
TextBox
метка rgbLabel
Label
метки
Label
панель rgbPanel
Panel
поле ввода bEdit
TextBox
К.Ю. Поляков, Е.А. Ерёмин, 2014
поле ввода gEdit
TextBox
http://kpolyakov.spb.ru

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

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
116
Обновление компонентов вывода
выделить все три
(+Shift)
2 ЛКМ
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

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

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
117
Обновление компонентов вывода
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 знака
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

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

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
118
Вызов при запуске
private void MainForm_Load (
object sender, EventArgs e )
{
rEdit_TextChanged ( rEdit, e );
}
вызывающий
объект – rEdit
(здесь – всё равно!)
private void MainForm_Load (
object sender, EventArgs e )
{
rEdit_TextChanged ( null, null );
}
пустой объект
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

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

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
119
Обработка ошибок
?
Если вместо числа ввести букву?
!
Программа не должна «вылетать»!
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

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

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
120
Обработка ошибок
попытаться выполнить
try
{
// «опасные» команды
}
если исключение
catch
(аварийная ситуация)
{
// обработка ошибки
}
?
Какие у нас опасные операции?
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

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

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
121
Обработка ошибок
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 = "?";
}
?
Что делать, если ошибка?
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

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

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
122
Блокирование неверных символов
выделить все три
(+Shift)
private void rEdit_KeyPress (
object sender, KeyPressEventArgs e )
это цифра
{
if ( ! ( Char.IsDigit(e.KeyChar) ||
e.KeyChar == (char) 8) )
e.Handled = true;
Backspace
}
обработка завершена
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

123. Задание

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
123
Задание
«A»: Постройте программу, которая вычисляет площадь
комнаты.
Требования:
1) размер окна нельзя менять
2) при попытке закрыть окно выдаётся запрос на
подтверждение
3) площадь пересчитывается сразу же, как только
изменяются значения длины или ширины комнаты
4) если длина или ширина отрицательны или не числа,
вместо площади выводится знак вопроса
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

124. Задание

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
124
Задание
«B»: Постройте программу, которая вычисляет площадь стен
комнаты и определяет, сколько рулонов обоев нужно на
оклейку всех стен. Количество рулонов – целое число.
Остальные требования такие же, как в варианта «А».
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

125. Задание

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
125
Задание
«С»: Доработайте программу так, чтобы по щелчку по кнопке
«Сохранить» все данные сохранялись в файле с
расширением .dat (имя файла можно выбрать), а по
щелчку по кнопке «Загрузить» данные загружались из
файла (имя файла также выбирается).
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

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

126
Объектноориентированное
программирование.
Языки C++ и C#
§ 54. Совершенствование
компонентов
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

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

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
127
Новый класс (модуль)
Задача: построить поле для ввода целых чисел, в котором
• есть защита от ввода неверных символов
• есть методы для чтения/записи целого числа
!
На основе класса TextBox!
Проект – Добавить класс
using System.Windows.Forms;
там объявлен
TextBox
class IntTextBox: TextBox
{
}
F5 – запуск! И компонент в палитре!
!
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

128. Обработчик KeyPress

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
128
Обработчик 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);
}
вызвать метод
}
базового класса
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

129. Свойство Value

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
129
Свойство Value
class IntTextBox: TextBox
{ общедоступное
свойство
...
public int Value
число в строку
{
set { Text = value.ToString(); }
get {
try { return Int32.Parse(Text); }
catch { return 0; }
из строки в
}
число
}
}
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

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

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
130
Поле для ввода целых чисел
Использование:
поле ввода decEdit
IntTextBox
метка hexLabel
Label
private void decEdit_TextChanged (
object sender, EventArgs e )
{
свойство
hexLabel.Text =
decEdit.Value.ToString ( "X" );
}
в шестнадцатеричную
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

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

131
Объектноориентированное
программирование.
Языки C++ и C#
§ 55. Модель и представление
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

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

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
132
Еще одна декомпозиция
Задача: повторное использование написанного ранее
готового кода.
решение
модель
представление
(данные и методы
их обработки)
(интерфейс с
пользователем)
решение
представление
(интерфейс с
пользователем)
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

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

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
133
Модель и представление
Задача: хранить и использовать данные об изменении
курса доллара.
решение
модель
(массив, поиск
минимума и
максимума,
прогнозирование)
представление
(формулы, диаграммы,
графики, таблицы)
представление
x
1
2
3
y
1
2
3
z
4
5
6
модель
представление
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

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

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
134
Модель и представление
Задача: вычисление арифметического выражения:
• целые числа
• знаки арифметических действий + - * /
Модель:
функция LastOp
• символьная строка
(глава 6)
• алгоритм вычисления:
k = номер последней операции
n1 = значение левой части
n2 = значение правой части
результат = операция(n1, n2)
!
Рекурсия!
k
22 + 13 – 3 * 8
n1
n2
К.Ю. Поляков, Е.А. Ерёмин, 2014
?
Чего не хватает?
http://kpolyakov.spb.ru

135. Модель

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
135
Модель
Псевдокод:
k = номер последней операции
if ( k < 0 )
результат:= строка в число
else {
n1 = значение левой части
n2 = значение правой части
результат = операция(n1, n2)
}
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

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

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
136
Статический класс – набор функций
Проект – Добавить класс
static class Calculator
приоритет
операции
{
static int Priority ( char op ) {
...
последняя
операция
}
static int LastOp ( string s ) {
...
вычислить
}
public static int Calc ( string s ) {
...
}
Calc – открытый метод!
}
!
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

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

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
137
Модель: приоритет операций
int Priority ( char op )
{
switch ( op )
{
case '+':
case '-': return 1;
case '*':
case '/': return 2;
}
return 100;
}
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

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

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
138
Модель: номер последней операции
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;
}
?
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

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

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
139
Модель: вычисления
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;
}
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

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

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
140
Представление
выпадающий
список
ComboBox
Name = Input
Dock = Top
многострочное
поле TextBox
Name = Answers
Dock = Fill
ReadOnly = True
Multiline = True
if ( нажата клавиша Enter )
{
x = значение выражения
добавить результат в конец поля вывода
if ( выражения нет в списке )
добавить его в список
}
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

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

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
141
Перехват нажатия на клавишу Enter
KeyPress для элемента Input:
private void Input_KeyPress (
object sender, KeyPressEventArgs e )
{
if ( e.KeyChar == (char)13 )
{
...
код клавиши
}
Enter
}
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

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

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
142
Обработка и вывод данных
Вычисления (обращение к модели):
int x;
x = Calculator.Calc(
Input.Text);
Добавление строки в TextBox:
добавить строку
Answers.Text += Input.Text + "=" +
x.ToString() + "\r\n";
число в строку
К.Ю. Поляков, Е.А. Ерёмин, 2014
новая строка
http://kpolyakov.spb.ru

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

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
143
Обработка и вывод данных
Добавление строки в ComboBox:
найти индекс
строки
int i = Input.FindString(Input.Text);
if ( i < 0 )
Input.Items .Insert ( 0, Input.Text );
массив строк в
ComboBox
К.Ю. Поляков, Е.А. Ерёмин, 2014
вставить
строку
позиция
списка
что
вставлять
http://kpolyakov.spb.ru

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

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
144
Перехват нажатия на клавишу Enter
KeyPress для элемента Input:
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);
}
}
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

145. Задание

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
145
Задание
«A»: Измените программу так, чтобы она могла вычислять
значения выражений с вещественными числами.
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

146. Задание

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
146
Задание
«B»: Измените программу так, чтобы она могла вычислять
значения выражений со скобками.
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

147. Задание

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
147
Задание
«С»: Измените программу так, чтобы она могла вычислять
значения выражений, содержащих вызовы функций abs,
sin, cos, sqrt.
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

148. Задание

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
148
Задание
«D»: Измените программу так, чтобы при вводе неверного
выражения выводилось сообщение об ошибке.
Все результаты вычислений и сообщения об ошибках
записываются в файл results.txt:
...
sin(1.2)*sqrt(1.7)=1.215230290196084
Неверное выражение sin(1.2)*sqrt(1.7)qwe
Оформите процедуру записи в файл как метод log класса
формы.
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

149. Калькулятор

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
149
Калькулятор
!
К.Ю. Поляков, Е.А. Ерёмин, 2014
Самостоятельно!
http://kpolyakov.spb.ru

150. Конец фильма

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
150
Конец фильма
ПОЛЯКОВ Константин Юрьевич
д.т.н., учитель информатики
ГБОУ СОШ № 163, г. Санкт-Петербург
[email protected]
ЕРЕМИН Евгений Александрович
к.ф.-м.н., доцент кафедры мультимедийной
дидактики и ИТО ПГГПУ, г. Пермь
[email protected]
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

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

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
151
Источники иллюстраций
1.
2.
3.
4.
5.
6.
www.picstopin.com
maugav.info
yoursourceisopen.com
ru.wikipedia.org
иллюстрации художников издательства «Бином»
авторские материалы
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru
English     Русский Правила