
11-7_C++_C#.ppt
- Количество слайдов: 128
1 Объектно-ориентированное программирование. Языки C++ и C# § 46. Что такое ООП? § 47. Объекты и классы § 48. Создание объектов в программе § 49. Скрытие внутреннего устройства § 50. Иерархия классов § 51. Программы с графическим интерфейсом § 52. Программирование в RAD-средах § 53. Использование компонентов § 54. Совершенствование компонентов § 55. Модель и представление К. Ю. Поляков, Е. А. Ерёмин, 2013 http: //kpolyakov. spb. ru
2 Объектноориентированное программирование. Языки C++ и C# § 46. Что такое ООП? К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
3 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Зачем нужно что-то новое? ! Главная проблема – сложность! • программы из миллионов строк • тысячи переменных и массивов Э. Дейкстра: «Человечество еще в древности придумало способ управления сложными системами: «разделяй и властвуй» » . Структурное программирование: декомпозиция по задачам подзадача 1 подзадача 2. 2 К. Ю. Поляков, Е. А. Ерёмин, 2014 подзадача 3 подзадача 2. 3 человек мыслит иначе, объектами http: //kpolyakov. spb. ru
4 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Как мы воспринимаем объекты? существенные свойства Абстракция – это выделение существенных свойств объекта, отличающих его от других объектов. ! К. Ю. Поляков, Е. А. Ерёмин, 2014 Разные цели – разные модели! http: //kpolyakov. spb. ru
5 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Использование объектов Программа – множество объектов (моделей), каждый из которых обладает своими свойствами и поведением, но его внутреннее устройство скрыто от других объектов. ! Нужно «разделить» задачу на объекты! А В Б Б 1 В 1 Б 2 В 3 Б 3 Г Г 1 К. Ю. Поляков, Е. А. Ерёмин, 2014 Г 2 декомпозиция по объектам http: //kpolyakov. spb. ru
6 Объектноориентированное программирование. Языки C++ и C# § 47. Объекты и классы К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
7 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс С чего начать? Объектно-ориентированный анализ (ООА): • выделить объекты • определить их существенные свойства • описать поведение (команды, которые они могут выполнять) Что такое объект? ? Объектом можно назвать то, что имеет чёткие границы и обладает состоянием и поведением. Состояние определяет поведение: • лежачий человек не прыгнет • незаряженное ружье не выстрелит Класс – это множество объектов, имеющих общую структуру и общее поведение. К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
8 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Модель дороги с автомобилями Объект «Дорога» : ширина (число полос) длина свойства (состояние) Дорога длина ширина название класса методы (поведение) К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
9 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Модель дороги с автомобилями Объект «Машина» : свойства: координаты и скорость P V X • все машины одинаковы • скорость постоянна • на каждой полосе – одна машина • если машина выходит за правую границу дороги, вместо нее слева появляется новая машина Машина X (координата) P (полоса) V (скорость) двигаться Метод – это процедура или функция, принадлежащая классу объектов. К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
10 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Модель дороги с автомобилями Взаимодействие объектов: Дорога длина ширина узнать длину Машина X (координата) P (полоса) V (скорость) двигаться Схема определяет • свойства объектов • методы: операции, которые они могут выполнять • связи (обмен данными) между объектами ! Ни слова о внутреннем устройстве объектов! К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
11 Объектноориентированное программирование. Языки C++ и C# § 48. Создание объектов в программе К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
12 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Классы • программа – множество взаимодействующих объектов • любой объект – экземпляр какого-то класса • класс – описание группы объектов с общей структурой и поведением отличие от структур! Класс Данные состояние Методы поведение Поле – это переменная, принадлежащая объекту. К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
13 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Класс «Дорога» Объявление класса: class TRoad { float Length; int Width; }; ! Память не выделяется! Объявление переменной (создание объекта): TRoad road; Попытка изменить данные: ошибка road. Length = 60; road. Width = 3; ! private По умолчанию все члены класса закрытые! К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
14 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Класс «Дорога» Объявление класса: 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 класс Класс «Дорога» вызов конструктора TRoad road; Конструктор – это метод класса, который вызывается для создания объекта этого класса. ! Конструктор по умолчанию строится автоматически! ? Что записано в полях? road. Length = ? ? ? road. Width = ? ? ? К. Ю. Поляков, Е. А. Ерёмин, 2014 «мусор» http: //kpolyakov. spb. ru
16 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Новый конструктор Класс: class TRoad Имя конструктора совпадает { с именем класса! public: float Length; int Width; TRoad(); // объявление конструктора }; ! Конструктор: TRoad: : TRoad() { Length = 0; Width = 0; } К. Ю. Поляков, Е. А. Ерёмин, 2014 метод aaa класса TRoad: : aaa() {. . . } http: //kpolyakov. spb. ru
17 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Конструктор с параметрами class TRoad { public: . . . TRoad ( float length 0, int width 0 ); }; Конструктор: TRoad: : TRoad ( float length 0, int width 0 ) { Length = length 0; Width = width 0; } Вызов: TRoad road ( 60, 3 ); К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
18 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Защита от неверных данных TRoad: : TRoad ( float length 0, int width 0 ) { if ( length 0 > 0 ) Length = length 0; else Length = 1; if ( width 0 > 0 ) Width = width 0; else Width = 1; } К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
19 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Значения параметров по умолчанию class TRoad значение по { умолчанию public: . . . TRoad ( float length 0, int width 0 = 3 ); }; Вызов: TRoad road ( 60 ); последние в списке параметров width = 3 К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
20 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Класс «Машина» class TCar координата, { скорость public: float X, V; полоса int P; TRoad *Road; дорога, по которой едет void move(); TCar (); // конструктор без параметров TCar ( TRoad *road 0, int p 0, float v 0 ); }; К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
21 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Конструкторы класса «Машина» TCar: : TCar () { Road = NULL; P = 0; V = 0; X = 0; } защита от ошибок – самостоятельно TCar: : TCar ( TRoad *road 0, int p 0, float v 0 ) { Road = road 0; P = p 0; V = v 0; X = 0; } К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
22 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Класс «Машина» : метод move Равномерное движение: интервал дискретизации перемещение за одну единицу времени void TCar: : move() выезжает с другой { стороны X = X + V; if ( X > Road->Length ) X = 0; } обращение через указатель К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
23 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Основная программа 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 класс Использование указателей 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 класс Что в этом хорошего и плохого? ООП – это метод разработки больших программ! § основная программа – простая и понятная § классы могут разрабатывать разные программисты независимо друг от друга (+интерфейс!) § повторное использование классов § неэффективно для небольших задач К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
26 Объектноориентированное программирование. Языки C++ и C# § 49. Скрытие внутреннего устройства К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
27 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Зачем скрывать внутреннее устройство? Объектная модель задачи: интерфейсы ? ? § защита внутренних данных § проверка входных данных на корректность § изменение устройства с сохранением интерфейса Инкапсуляция ( «помещение в капсулу» ) – скрытие внутреннего устройства объектов. ! Также объединение данных и методов в одном объекте! К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
28 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Пример: класс «перо» class TPen Field – поле { R G B private: string FColor; // цвет, "FF 00 FF" }; По умолчанию все члены класса закрытые – private! class TPen { Как к ним обращаться? private: string FColor; методы доступа public: string get. Color (); void set. Color ( string new. Color ); }; ! ? К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
29 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Пример: класс «перо» Получить значение: string TPen: : get. Color () { return FColor; } Записать значение: void TPen: : set. Color ( string { if ( new. Color. length()!= 6 FColor = "000000"; else FColor = new. Color; } ! new. Color ) ) если ошибка, чёрный цвет Защита от неверных данных! К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
30 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Пример: класс «перо» Использование: установить цвет TPen pen; pen. set. Color ( "FFFF 00" ); cout << "цвет пера: " << pen. get. Color(); ! Не очень удобно! pen. color = "FFFF 00"; cout << pen. color; К. Ю. Поляков, Е. А. Ерёмин, 2014 прочитать цвет нельзя в C++ http: //kpolyakov. spb. ru
31 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Изменение внутреннего устройства Удобнее хранить цвет в виде числа: class TPen Найди отличие! { private: изменилось внутреннее int FColor; устройство public: string get. Color(); void set. Color( string new. Color ); }; ? ! Интерфейс не изменился! К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
32 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Преобразования int hex Использование потока (байтов): "FF 00 FF" 16711935 записываем в поток число в шестнадцатеричной системе #include <sstream> stringstream s; s << hex << FColor; 255 "FF" "0000 FF" К. Ю. Поляков, Е. А. Ерёмин, 2014 читаем строку подключить строковые потоки ? Что плохо? правильно так! http: //kpolyakov. spb. ru
33 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Преобразования hex ↔ int #include <sstream> #include <iomanip> подключить манипуляторы string TPen: : get. Color() { заполнять не stringstream s; пробелами, а нулями s << setfill('0') << setw(6) вывести 6 знаков << hex << FColor; прочитать строку return s. str(); string из потока } 255 "0000 FF" К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
34 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Преобразования hex int Использование потока: "FF 00 FF" записываем в поток строку 16711935 читаем число в шестнадцатеричной системе void TPen: : set. Color ( string new. Color ) { stringstream s; if ( new. Color. length()!= 6 ) FColor = 0; // чёрный цвет else { записываем строку s << new. Color; s >> hex >> FColor; читаем число } } К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
35 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Свойства в C# Доступ с помощью методов: TPen pen; pen. set. Color ( "FFFF 00" ); cout << "цвет пера: " << pen. get. Color(); Доступ с помощью свойства color: вызов pen. set. Color TPen pen; pen. color = "FFFF 00"; cout << "цвет пера: " << pen. color; вызов pen. get. Color Свойство – это способ доступа к внутреннему состоянию объекта, имитирующий обращение к его внутренней переменной. К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
36 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Свойства в C# class TPen закрытое поле { private string FColor; открытое public string color свойство { метод чтения get { return FColor; } set { FColor = value; } } метод записи } Использование: TPen pen; pen. color = "FFFF 00"; string s = pen. color; К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
Объектно-ориентированное программирование. Языки C++ и C#. 11 класс 37 Свойства в C# Защита от неверного ввода данных: public string color { get { return FColor; } set { if ( value. Length != 6 ) FColor = "000000"; else FColor = value; } переданное } значение К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
38 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Свойства в C# Изменение внутреннего устройства: class TPen { private int FColor; public string color шестнадцатеричный { формат, 6 знаков в строку get { return FColor. To. String ( "X 6" ); } переданное в целое значение set { FColor = Convert. To. Int 32(value, 16); } из шестнадцатеричной } записи } Данные – целое число, свойство – строка! ! К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
Объектно-ориентированное программирование. Языки C++ и C#. 11 класс 39 Свойство «только для чтения» Скорость машины можно только читать: class TCar { нет метода записи private: double Fv; public: double get. V() { return Fv; } }; Свойство на C#: class TCar { private double Fv; public double V { get { return Fv; } } }; К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
40 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Скрытие внутреннего устройства Инкапсуляция ( «помещение в капсулу» ) свойства методы К. Ю. Поляков, Е. А. Ерёмин, 2014 внутреннее устройство (private) интерфейс (public) http: //kpolyakov. spb. ru
41 Объектноориентированное программирование. Языки C++ и C# § 50. Иерархия классов К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
42 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Классификации ? Что такое классификация? Классификация – разделение изучаемых объектов на группы (классы), объединенные общими признаками. ? Зачем это нужно? Фрукт Яблоко Груша базовый класс Банан Апельсин классынаследники это фрукт, у которого… К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
43 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Что такое наследование? класс Двудольные семейство Бобовые род Клевер горный клевер наследует свойства (имеет все свойства) Класс Б является наследником класса А, если можно сказать, что Б – это разновидность А. яблоко – фрукт яблоко – это фрукт горный клевер – клевер горный клевер – это растение рода Клевер машина – двигатель машина содержит двигатель (часть – целое) К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
44 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Иерархия логических элементов Логический элемент с одним входом с двумя входами НЕ Объектно-ориентированное программирование – это такой подход к программированию, при котором программа представляет собой множество взаимодействующих объектов, каждый из которых является экземпляром определенного класса, а классы образуют иерархию наследования. К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
45 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Базовый класс class TLog. Element { public: bool In 1, In 2, Res; void calc(); }; вычислить выход Зачем хранить результат? Лог. Элемент In 1 (вход 1) In 2 (вход 2) Res (результат) calc ? можно моделировать элементы с памятью (триггеры) ? К. Ю. Поляков, Е. А. Ерёмин, 2014 Что плохо? http: //kpolyakov. spb. ru
Объектно-ориентированное программирование. Языки C++ и C#. 11 класс 46 Базовый класс class TLog. Element { private: bool FIn 1, Fin 2, FRes; void calc(); Почему здесь? public: bool get. In 1() { return FIn 1; } void set. In 1 ( bool new. In 1 ); bool get. In 2() { return Fin 2; } void set. In 2 ( bool new. In 2 ); bool get. Res() { return FRes; } }; только для чтения ? К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
47 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Установка входа void TLog. Element: : set. In 1(bool new. In 1) { FIn 1 = new. In 1; Что ещё? calc(); } пересчёт при изменении входа ? ? Как написать процедуру calc? void TLog. Element: : calc() { } ! заглушка Проблема: наследники должны менять calc! К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
48 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Что такое полиморфизм? греч. : πολυ — много, μορφη — форма Полиморфизм – это возможность классов-наследников по-разному реализовать метод, описанный для класса -предка. ! Проблема: открыть данные и методы для наследников и закрыть для остальных! class TLog. Element {. . . protected: void calc(); }; К. Ю. Поляков, Е. А. Ерёмин, 2014 защищённые элементы: доступны только наследникам http: //kpolyakov. spb. ru
Объектно-ориентированное программирование. Языки C++ и C#. 11 класс 49 Базовый класс class TLog. Element { private: bool FIn 1, Fin 2; наследники будут protected: изменять поле bool FRes; virtual void calc()= 0; = bool get. In 2() { return Fin 2; } void set. In 2 ( bool new. In 2 ); public: bool get. In 1() { return FIn 1; } void set. In 1 ( bool new. In 1 ); bool get. Res() { return FRes; } }; К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
50 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Базовый класс class TLog. Element { наследники будут изменять поле protected: bool FRes; virtual void calc()= 0; = bool get. In 2() { return Fin 2; } void set. In 2 ( bool new. In 2 ); . . . }; для элементов с одним входом не нужно! virtual (виртуальный) – этот метод могут переопределять классы-наследники = 0 (абстрактный метод) – этот метод базовый класс не будет реализовывать (оставляет наследникам) К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
51 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Абстрактный класс • все логические элементы должны иметь метод calc • метод calc невозможно написать, пока неизвестен тип логического элемента Абстрактный метод – это метод класса, который объявляется, но не реализуется в классе. Абстрактный класс – это класс, содержащий хотя бы один абстрактный метод. нет логического элемента «вообще» , как не «фрукта вообще» , есть конкретные виды ! Нельзя создать объект абстрактного класса! TLog. Element – абстрактный класс из-за метода calc К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
52 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Элемент «НЕ» наследник от TLog. Element class TNot: public TLog. Element { переопределяет метод protected: базового класса void calc(); }; void TNot: : calc() { FRes =!get. In 1(); } ! ? Почему не ! FIn 1? Это уже не абстрактный класс! К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
53 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Элемент «НЕ» Использование: TNot n; создание объекта n. set. In 1 ( false ); cout << n. get. Res(); К. Ю. Поляков, Е. А. Ерёмин, 2014 установка входа вывод результата http: //kpolyakov. spb. ru
54 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Элементы с двумя входами сохранить права доступа наследник от TLog. Element class TLog 2 In: public TLog. Element { повысить «видимость» public: (protected public) TLog. Element: : set. In 2; TLog. Element: : get. In 2; }; ? Можно ли создать объект этого класса? нельзя, он абстрактный К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
55 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Элементы с двумя входами class TAnd: public TLog 2 In { protected: void calc(); }; class TOr: public TLog 2 In { protected: void calc(); }; К. Ю. Поляков, Е. А. Ерёмин, 2014 элемент «И» элемент «ИЛИ» http: //kpolyakov. spb. ru
56 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Элементы с двумя входами void TAnd: : calc() элемент «И» { FRes = get. In 1() && get. In 2(); } элемент «ИЛИ» void TAnd: : calc() { FRes = get. In 1() || get. In 2(); } доступ к защищённому полю (protected) ? Почему не обратиться к FIn 1 и FIn 2? К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
57 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Вызов виртуального метода В базовом классе: void TLog. Element: : set. In 1( bool new. In 1 ) { FIn 1 = new. In 1; calc(); } ? Какой метод вызывается? class TLog. Element { protected: virtual void calc()= 0; . . . }; К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
58 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Виртуальный метод Статическое связывание: транслятор записывает в код адрес процедуры Динамическое связывание: адрес процедуры определяется во время выполнения программы в зависимости от типа объекта Виртуальный метод – это метод базового класса, который могут переопределить классы-наследники так, что конкретный адрес вызываемого метода определяется только при выполнении программы. К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
59 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Пример: элемент «И-НЕ» main() { & TNot el. Not; TAnd el. And; int A, B; cout << " A B !(A&B)" << endl; cout << "-------" << endl; for ( A = 0; A <= 1; A++ ) { el. And. set. In 1 ( A ); for ( B = 0; B <= 1; B++ ) { el. And. set. In 2 ( B ); el. Not. set. In 1 ( el. And. get. Res() ); cout << " " << A << " " << B << " " << el. Not. get. Res() << endl; } } } К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
Объектно-ориентированное программирование. Языки C++ и C#. 11 класс 60 Модульность Идея: выделить классы в отдельный модуль. Интерфейс (log_elem. h): class { … } class { … } TLog. Element TLog 2 In: public TLog. Element TNot: public TLog. Element TAnd: public TLog 2 In TOr: public TLog 2 In К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
61 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Модульность Модуль (log_elem. cpp): #include <log_elem. h> void TLog. Element: : set. In 1 ( bool new. In 1 ) {. . . } void TLog. Element: : set. In 2 ( bool new. In 1 ) {. . . } void TNot: : calc() реализация методов {. . . } классов void TAnd: : calc() {. . . } void TOr: : calc() Чего не хватает? {. . . } ? В основную программу: #include <log_elem. h> К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
62 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Сообщения между объектами ! Задача – автоматическая передача сигналов по цепочке! class TLog. Element { private: TLog. Element *FNext. El; int FNext. In; адрес следующего. . . элемента в цепочке public: void Link ( TLog. Element *next. Element, int next. In = 1 ); }; номер входа следующего элемента К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
Объектно-ориентированное программирование. Языки C++ и C#. 11 класс 63 Сообщения между объектами Установка связи: void TLog. Element: : Link( TLog. Element *next. Element, int next. In ) { FNext. El = next. Element; FNext. In = next. In; } К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
64 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Сообщения между объектами После изменения выхода «дергаем» следующий элемент: void TLog. Element: : set. In 1 ( bool new. In 1 ) { если следующий FIn 1 = new. In 1; элемент установлен… calc(); if ( FNext. El ) switch ( FNext. In ) { case 1: FNext. El->set. In 1 ( get. Res() ); case 2: FNext. El->set. In 2 ( get. Res() ); } передать результат на } нужный вход К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
65 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Сообщения между объектами ? Как сделать, чтобы сначала FNext. El = NULL? Новый конструктор: TLog. Element: : TLog. Element() { FNext. El = NULL; } К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
Объектно-ориентированное программирование. Языки C++ и C#. 11 класс 66 Сообщения между объектами Изменения в основной программе: TNot el. Not; установить TAnd el. And; связь el. And. Link ( &el. Not ); . . . for ( A = 0; A <= 1; A ++ ) { el. And. set. In 1 ( A ); for ( B = 0; B <= 1; B++ ) { el. And. set. In 2( B ); el. Not. set. In 1(el. And. get. Res()); . . . это уже не } нужно! } К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
67 Объектноориентированное программирование. Языки C++ и C# § 51. Программы с графическим интерфейсом К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
68 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Интерфейс: объекты и сообщения поле ввода флажок кнопка переключатель Все элементы окон – объекты, которые обмениваются данными, посылая другу сообщения. Сообщение – это блок данных определённой структуры, который используется для обмена информацией между объектами. • адресат (кому) или широковещательное • числовой код (тип) сообщения • параметры (дополнительные данные) К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
69 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Классические программы начало основная программа ввод данных обработка данных вывод результатов конец ! процедуры и функции Порядок выполнения команд определяется программистом, пользователь не может вмешаться! К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
70 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Программы, управляемые событиями Событие – это переход какого-либо объекта из одного состояния в другое. • нажатие на клавишу • щелчок мышью • перемещение окна • поступление данных из сети • запрос к веб-серверу • завершение вычислений • … ! Программа начинает работать при наступлении событий! К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
71 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Программы, управляемые событиями клавиатура, мышь, … системная очередь сообщений начало ожидание сообщения стоп? конец очередь программы основная программа обработка сообщения программа ! операционная система обработчики сообщений Программа управляется событиями! К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
72 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Что такое RAD-среда? RAD = Rapid Application Development — быстрая разработка приложений Форма – это шаблон, по Этапы разработки: которому строится окно • создание формы программы или диалога • минимальный код добавляется автоматически • расстановка элементов интерфейса с помощью мыши и настройка их свойств • создание обработчиков событий • написание алгоритмов обработки данных выполняются при возникновении событий К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
73 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс RAD-среды: Delphi Язык: Object Pascal, позднее Delphi: 1995: Borland, сейчас: Embarcadero Technologies К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
74 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс RAD-среды: MS Visual Studio Языки: Visual Basic, Visual C++, Visual C#, Visual F# c 1995 по н. в. : Microsoft К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
75 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс RAD-среды: Lazarus Языки: Free. Pascal, Delphi свободное ПО: lazarus. freepascal. org К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
76 Объектноориентированное программирование. Языки C++ и C# § 52. Программирование в RAD-средах К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
77 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Visual Studio Express (C#) http: //www. visualstudio. com/ru-ru/products/visual-studio-express-vs. aspx К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
78 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Язык C# С С++ C# Паскаль C# VB. NET F# Java Smalltalk Common Intermediate Language язык CIL (байт-код) Common Language Runtime виртуальная машина CLR § объединение программ на разных языках § полностью ООП – для больших программ § большая библиотека функций и компонентов § требовательна к ресурсам Linux – проект Mono § надёжно – только под Windows К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
79 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Проекты и решения Проект – это набор файлов, из которых компилятор строит исполняемый файл программы. • проект (. csproj, CSharp Project) – описание (XML) • модули, из которых состоит программа (*. сs); • ресурсы (*. resx) – строки (перевод сообщений). основная программа Program. cs обработчики событий ресурсы Form 1. cs Form 1. Designer. cs Form 1. resx my. exe описание формы Решение = один или несколько проектов. К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
80 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Простейший проект Файл – Создать проект – Приложение Windows Forms Редактор кода Конструктор формы ! F 5 – запуск! Структура проекта Панель элементов Свойства К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
81 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Модуль формы F 7 – перейти из конструктора к коду формы using System; using System. Collections. Generic; using System. Component. Model; using System. Data; using System. Drawing; библиотеки using System. Linq; using System. Text; using System. Windows. Forms; namespace Project 1 пространство имён { public partial class Form 1: Form { public Form 1(){ Initialize. Component(); } } конструктор } К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
82 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Модуль формы открытый класс частичное описание наследник класса Form public partial class Form 1: Form { public Form 1() { Initialize. Component(); } } Код этого метода – в начальные Form 1. Designer. cs! установки ! К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
83 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Основная программа using System; библиотеки using System. Collections. Generic; using System. Linq; using System. Windows. Forms; namespace Project 1 статический класс { static class Program { static void Main() { создание формы. . . Application. Run ( new Form 1() ); } запуск цикла } обработки сообщений } ! Статический класс – набор методов! К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
Объектно-ориентированное программирование. Языки C++ и C#. 11 класс 84 Свойства формы Main. Form Name – имя формы Size. Width – ширина Size. Height – высота Text – текст в заголовке окна Back. Color – цвет фона Font – шрифт надписей К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
85 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Обработчик событий События 2 ЛКМ: создать обработчик Form. Closing: форма закрывается К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
86 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Обработчик события закрытый метод класса Main. Form название обработчика private void Main. Form_Form. Closing ( object sender, общий предок Form. Closing. Event. Args e ) всех объектов { кто послал дополнительные } сообщение данные о событии ! Автоматически добавлен в Form 1. Designer. cs! К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
87 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Диалог с вопросом Метод Message. Box. Show: private void Main. Form_Form. Closing ( object sender, Form. Closing. Event. Args e) { тип: результат диалога Dialog. Result res; res = Message. Box. Show ( "Вы действительно хотите выйти из программы? ", "Подтверждение", Message. Box. Buttons. Yes. No, Message. Box. Icon. Question ); if ( res == Dialog. Result. No ) нажали «Нет» , e. Cancel = true; отменить закрытие } К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
88 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Параметры Message. Box. Show • сообщение пользователю • заголовок окна • тип запроса Message. Box. Icon Error ошибка Warning предупреждение Information информация Questionвопрос • набор (множество) кнопок Message. Box. Buttons: Yes. No «Да» , «Нет» Yes. No. Cancel «Да» , «Нет» , «Отмена» OK «OK» OKCancel «ОК» , «Отмена» К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
89 Объектноориентированное программирование. Языки C++ и C# § 53. Использование компонентов К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
90 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Панель компонентов Контейнеры Стандартные Диалоги К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
91 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Просмотр рисунков панель Panel кнопка Button выключатель Check. Box рисунок Picture. Box К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
92 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Настройка формы Файл – Создать проект – Приложение Windows Forms Name Main. Form Text Просмотр рисунков К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
93 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Верхняя панель Panel Dock = Top К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
94 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Кнопка и выключатель кнопка Button выключатель Check. Box Name = Open. Btn Text = Открыть файл К. Ю. Поляков, Е. А. Ерёмин, 2014 Name = Size. CB Text = По размерам окна http: //kpolyakov. spb. ru
95 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Компонент Picture. Box рисунок Picture. Box Name = Image Dock = Fill К. Ю. Поляков, Е. А. Ерёмин, 2014 ? 1) Загрузка файла? 2) Масштабирование? http: //kpolyakov. spb. ru
Объектно-ориентированное программирование. Языки C++ и C#. 11 класс 96 Выбор файла выбор рисунка Open. File. Dialog Name = Open. Dlg К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
97 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Выбор файла 2 ЛКМ если файл выбран if ( Open. Dlg. Show. Dialog() == Dialog. Result. OK ) Img. Image = new Bitmap (Open. Dlg. File. Name); имя файла К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
98 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Масштабирование 2 ЛКМ if ( Size. CB. Checked ) Img. Size. Mode = Picture. Box. Size. Mode. Zoom; else Img. Size. Mode = Picture. Box. Size. Mode. Normal; К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
99 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Ввод и вывод данных для веб-страниц поле ввода r. Edit Text. Box метка rgb. Label метки Label панель rgb. Panel поле ввода b. Edit Text. Box К. Ю. Поляков, Е. А. Ерёмин, 2014 поле ввода g. Edit Text. Box http: //kpolyakov. spb. ru
100 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Обновление компонентов вывода выделить все три (+Shift) 2 ЛКМ К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
101 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Обновление компонентов вывода private void r. Edit_Text. Changed ( object sender, Event. Args e ) { из строки в число int r, g, b; r = Int 32. Parse ( r. Edit. Text ); g = Int 32. Parse ( g. Edit. Text ); построить цвет b = Int 32. Parse ( b. Edit. Text ); rgb. Panel. Back. Color = Color. From. Argb ( r, g, b ); rgb. Label. Text = "#" + r. To. String("X 2") + g. To. String("X 2") + b. To. String("X 2"); } в шестнадцатеричную систему, 2 знака К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
102 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Вызов при запуске private void Main. Form_Load ( object sender, Event. Args e ) { r. Edit_Text. Changed ( r. Edit, e ); } вызывающий объект – r. Edit (здесь – всё равно!) private void Main. Form_Load ( object sender, Event. Args e ) { r. Edit_Text. Changed ( null, null ); } пустой объект К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
Объектно-ориентированное программирование. Языки C++ и C#. 11 класс 103 Обработка ошибок ? Если вместо числа ввести букву? ! Программа не должна «вылетать» ! К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
Объектно-ориентированное программирование. Языки C++ и C#. 11 класс 104 Обработка ошибок попытаться выполнить try { // «опасные» команды } если исключение catch (аварийная ситуация) { // обработка ошибки } ? Какие у нас опасные операции? К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
105 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Обработка ошибок try { r = Int 32. Parse ( r. Edit. Text ); g = Int 32. Parse ( g. Edit. Text ); b = Int 32. Parse ( b. Edit. Text ); rgb. Panel. Back. Color = Color. From. Argb ( r, g, b ); rgb. Label. Text = "#" + r. To. String("X 2") + g. To. String("X 2") + b. To. String("X 2"); } если ошибка, записать "? " catch { rgb. Label. Text = "? "; } ? Что делать, если ошибка? К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
106 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Блокирование неверных символов выделить все три (+Shift) private void r. Edit_Key. Press ( object sender, Key. Press. Event. Args e ) это цифра { if ( ! ( Char. Is. Digit(e. Key. Char) || e. Key. Char == (char) 8) ) e. Handled = true; Backspace } обработка завершена К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
107 Объектноориентированное программирование. Языки C++ и C# § 54. Совершенствование компонентов К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
108 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Новый класс (модуль) Задача: построить поле для ввода целых чисел, в котором • есть защита от ввода неверных символов • есть методы для чтения/записи целого числа ! На основе класса Text. Box! Проект – Добавить класс using System. Windows. Forms; там объявлен Text. Box class Int. Text. Box: Text. Box { } F 5 – запуск! И компонент в палитре! ! К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
109 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Обработчик Key. Press class Int. Text. Box: Text. Box { перекрыть метод только для базового класса наследников protected override void On. Key. Press ( Key. Press. Event. Args e ) { if ( !(Char. Is. Digit(e. Key. Char) || e. Key. Char == (char)8) ) e. Handled = true; base. On. Key. Press(e); } вызвать метод } базового класса К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
110 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Свойство Value class Int. Text. Box: Text. Box { общедоступное свойство. . . public int Value число в строку { set { Text = value. To. String(); } get { try { return Int 32. Parse(Text); } catch { return 0; } из строки в } число } } К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
111 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Поле для ввода целых чисел Использование: поле ввода dec. Edit Int. Text. Box метка hex. Label private void dec. Edit_Text. Changed ( object sender, Event. Args e ) { свойство hex. Label. Text = dec. Edit. Value. To. String ( "X" ); } в шестнадцатеричную К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
112 Объектноориентированное программирование. Языки C++ и C# § 55. Модель и представление К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
113 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Еще одна декомпозиция Задача: повторное использование написанного ранее готового кода. решение модель представление (данные и методы их обработки) (интерфейс с пользователем) решение представление (интерфейс с пользователем) К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
114 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Модель и представление Задача: хранить и использовать данные об изменении курса доллара. решение модель (массив, поиск минимума и максимума, прогнозирование) представление (формулы, диаграммы, графики, таблицы) представление x 1 2 3 y 1 2 3 z 4 5 6 модель представление К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
115 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Модель и представление Задача: вычисление арифметического выражения: • целые числа • знаки арифметических действий + - * / Модель: функция Last. Op • символьная строка (глава 6) • алгоритм вычисления: k = номер последней операции n 1 = значение левой части n 2 = значение правой части результат = операция(n 1, n 2) ! Рекурсия! k 22 + 13 – 3 * 8 n 1 n 2 К. Ю. Поляков, Е. А. Ерёмин, 2014 ? Чего не хватает? http: //kpolyakov. spb. ru
Объектно-ориентированное программирование. Языки C++ и C#. 11 класс 116 Модель Псевдокод: k = номер последней операции if ( k < 0 ) результат: = строка в число else { n 1 = значение левой части n 2 = значение правой части результат = операция(n 1, n 2) } К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
117 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Статический класс – набор функций Проект – Добавить класс static class Calculator приоритет операции { static int Priority ( char op ) {. . . последняя операция } static int Last. Op ( string s ) {. . . вычислить } public static int Calc ( string s ) {. . . } Calc – открытый метод! } ! К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
Объектно-ориентированное программирование. Языки C++ и C#. 11 класс 118 Модель: приоритет операций int Priority ( char op ) { switch ( op ) { case '+': case '-': return 1; case '*': case '/': return 2; } return 100; } К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
119 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Модель: номер последней операции int Last. Op ( string s ) вернёт номер { символа int i, min. Prt, res; min. Prt = 50; // любое между 2 и 100 res = -1; for ( i = 0; i < s. Length; i++ ) if ( Priority(s[i]) <= min. Prt ) { min. Prt = Priority(s[i]); res = i; Почему <=? } return res; } ? К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
120 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Модель: вычисления public static int Calc(string s) { int k, n 1, n 2, res = 0; k = Last. Op ( s ); if ( k < 0 ) return Int 32. Parse(s); n 1 = Calc( s. Substring(0, k) ); // левая n 2 = Calc( s. Substring(k+1) ); // правая switch ( s[k] ) { case '+': res = n 1 + n 2; break; case '-': res = n 1 - n 2; break; case '*': res = n 1 * n 2; break; case '/': res = n 1 / n 2; break; } return res; } К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
121 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Представление выпадающий список Combo. Box Name = Input Dock = Top многострочное поле Text. Box Name = Answers Dock = Fill Read. Only = True Multiline = True if ( нажата клавиша Enter ) { x = значение выражения добавить результат в конец поля вывода if ( выражения нет в списке ) добавить его в список } К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
122 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Перехват нажатия на клавишу Enter Key. Press для элемента Input: private void Input_Key. Press ( object sender, Key. Press. Event. Args e ) { if ( e. Key. Char == (char)13 ) {. . . код клавиши } Enter } К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
123 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Обработка и вывод данных Вычисления (обращение к модели): int x; x = Calculator. Calc( Input. Text); Добавление строки в Text. Box: добавить строку Answers. Text += Input. Text + "=" + x. To. String() + "rn"; число в строку К. Ю. Поляков, Е. А. Ерёмин, 2014 новая строка http: //kpolyakov. spb. ru
124 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Обработка и вывод данных Добавление строки в Combo. Box: найти индекс строки int i = Input. Find. String(Input. Text); if ( i < 0 ) Input. Items. Insert ( 0, Input. Text ); массив строк в Combo. Box К. Ю. Поляков, Е. А. Ерёмин, 2014 вставить строку позиция списка что вставлять http: //kpolyakov. spb. ru
125 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Перехват нажатия на клавишу Enter Key. Press для элемента Input: private void Input_Key. Press ( object sender, Key. Press. Event. Args e ) { if ( e. Key. Char == (char)13 ) { int x = Calculator. Calc ( Input. Text ); Answers. Text += Input. Text + "=" + x. To. String() + "rn"; int i = Input. Find. String(Input. Text); if ( i < 0 ) Input. Items. Insert(0, Input. Text); } } К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
Объектно-ориентированное программирование. Языки C++ и C#. 11 класс 126 Калькулятор ! К. Ю. Поляков, Е. А. Ерёмин, 2014 Самостоятельно! http: //kpolyakov. spb. ru
127 Объектно-ориентированное программирование. Языки C++ и C#. 11 класс Конец фильма ПОЛЯКОВ Константин Юрьевич д. т. н. , учитель информатики ГБОУ СОШ № 163, г. Санкт-Петербург kpolyakov@mail. ru ЕРЕМИН Евгений Александрович к. ф. -м. н. , доцент кафедры мультимедийной дидактики и ИТО ПГГПУ, г. Пермь eremin@pspu. ac. ru К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
Объектно-ориентированное программирование. Языки C++ и C#. 11 класс 128 Источники иллюстраций 1. 2. 3. 4. 5. 6. www. picstopin. com maugav. info yoursourceisopen. com ru. wikipedia. org иллюстрации художников издательства «Бином» авторские материалы К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru
11-7_C++_C#.ppt