Содержание
- 2. § 46. Что такое ООП? Объектно-ориентированное программирование. Языки C++ и C#
- 3. Зачем нужно что-то новое? программы из миллионов строк тысячи переменных и массивов Э. Дейкстра: «Человечество еще
- 4. Как мы воспринимаем объекты? существенные свойства Абстракция – это выделение существенных свойств объекта, отличающих его от
- 5. Использование объектов Программа – множество объектов (моделей), каждый из которых обладает своими свойствами и поведением, но
- 6. § 47. Объекты и классы Объектно-ориентированное программирование. Языки C++ и C#
- 7. С чего начать? Объектно-ориентированный анализ (ООА): выделить объекты определить их существенные свойства описать поведение (команды, которые
- 8. Модель дороги с автомобилями Объект «Дорога»: методы (поведение) свойства (состояние) название класса
- 9. Модель дороги с автомобилями Объект «Машина»: свойства: координаты и скорость все машины одинаковы скорость постоянна на
- 10. Модель дороги с автомобилями Взаимодействие объектов: узнать длину свойства объектов методы: операции, которые они могут выполнять
- 11. § 48. Создание объектов в программе Объектно-ориентированное программирование. Языки C++ и C#
- 12. Классы программа – множество взаимодействующих объектов любой объект – экземпляр какого-то класса класс – описание группы
- 13. Класс «Дорога» class TRoad { float Length; int Width; }; Объявление класса: Объявление переменной (создание объекта):
- 14. Класс «Дорога» class TRoad { public: float Length; int Width; }; Объявление класса: main() { TRoad
- 15. Класс «Дорога» Конструктор – это метод класса, который вызывается для создания объекта этого класса. TRoad road;
- 16. Новый конструктор class TRoad { public: float Length; int Width; TRoad(); // объявление конструктора }; Класс:
- 17. Конструктор с параметрами class TRoad { public: ... TRoad ( float length0, int width0 ); };
- 18. Защита от неверных данных TRoad::TRoad ( float length0, int width0 ) { if ( length0 >
- 19. Значения параметров по умолчанию class TRoad { public: ... TRoad ( float length0, int width0 =
- 20. Класс «Машина» class TCar { public: float X, V; int P; TRoad *Road; void move(); TCar
- 21. Конструкторы класса «Машина» TCar::TCar () { Road = NULL; P = 0; V = 0; X
- 22. Класс «Машина»: метод move void TCar::move() { X = X + V; if ( X >
- 23. Основная программа const int N = 3; TCar cars[N]; int i; for ( i = 0;
- 24. Использование указателей const int N = 3; TCar *cars[N]; for ( i = 0; i cars[i]
- 25. Что в этом хорошего и плохого? основная программа – простая и понятная классы могут разрабатывать разные
- 26. Задание «A»: Построить класс Попугай (TParrot), который умеет говорить какую-то фразу, заранее определённую при описании класса.
- 27. Задание «С»: Изменить класс из задания B так, чтобы фразу можно было изменять во время работы
- 28. Задание «E»: Изменить класс из задания D так, чтобы можно было добавлять фразы в набор фраз,
- 29. § 49. Скрытие внутреннего устройства Объектно-ориентированное программирование. Языки C++ и C#
- 30. Зачем скрывать внутреннее устройство? Объектная модель задачи: интерфейсы защита внутренних данных проверка входных данных на корректность
- 31. Защита внутренних данных метод есть + энергия + настроение - голод метод спать + энергия +
- 32. class TPen { private: string FColor; public: string getColor (); void setColor ( string newColor );
- 33. Пример: класс «перо» Получить значение: string TPen::getColor () { return FColor; } Записать значение: void TPen::setColor
- 34. Пример: класс «перо» Использование: TPen pen; pen.setColor ( "FFFF00" ); cout установить цвет прочитать цвет pen.color
- 35. Изменение внутреннего устройства class TPen { private: int FColor; public: string getColor(); void setColor( string newColor
- 36. Преобразования int → hex #include Использование потока (байтов): записываем в поток число в шестнадцатеричной системе читаем
- 37. string TPen::getColor() { stringstream s; s return s.str(); } Преобразования hex ↔ int #include #include подключить
- 38. Преобразования hex → int void TPen::setColor ( string newColor ) { stringstream s; if ( newColor.length()!=
- 39. Свойства в C# Свойство – это способ доступа к внутреннему состоянию объекта, имитирующий обращение к его
- 40. Свойства в C# class TPen { private string FColor; public string color { get { return
- 41. Свойства в C# Защита от неверного ввода данных: public string color { get { return FColor;
- 42. Свойства в C# Изменение внутреннего устройства: class TPen { private int FColor; public string color {
- 43. Свойство «только для чтения» class TCar { private: double Fv; public: double getV() { return Fv;
- 44. Скрытие внутреннего устройства Инкапсуляция («помещение в капсулу») интерфейс (public) внутреннее устройство (private)
- 45. Задание «A»: Построить класс РядЛампочек (TLampRow), который хранит состояние ряда из 8 лампочек в виде символьной
- 46. Задание «B»: Дополните класс TLampRow из задания A так, чтобы количество лампочек в цепочке можно было
- 47. Задание «С»: Дополните класс TLampRow из задания B так, чтобы лампочки могли гореть одним из двух
- 48. Задание «D»: Дополните класс TLampRow из задания C так, чтобы код состояния хранился как целое число.
- 49. § 50. Иерархия классов Объектно-ориентированное программирование. Языки C++ и C#
- 50. Классификации Классификация – разделение изучаемых объектов на группы (классы), объединенные общими признаками. Яблоко Груша Банан Апельсин
- 51. Что такое наследование? класс Двудольные семейство Бобовые род Клевер горный клевер наследует свойства (имеет все свойства)
- 52. Иерархия логических элементов Логический элемент с одним входом с двумя входами НЕ Объектно-ориентированное программирование – это
- 53. Базовый класс class TLogElement { public: bool In1, In2, Res; void calc(); }; можно моделировать элементы
- 54. Базовый класс class TLogElement { private: bool FIn1, Fin2, FRes; void calc(); public: bool getIn1() {
- 55. Установка входа void TLogElement::setIn1(bool newIn1) { FIn1 = newIn1; calc(); } пересчёт при изменении входа void
- 56. Что такое полиморфизм? греч.: πολυ — много, μορφη — форма Полиморфизм – это возможность классов-наследников по-разному
- 57. Базовый класс class TLogElement { private: bool FIn1, Fin2; protected: bool FRes; virtual void calc()= 0;
- 58. Базовый класс class TLogElement { protected: bool FRes; virtual void calc()= 0; bool getIn2() { return
- 59. Абстрактный класс Абстрактный метод – это метод класса, который объявляется, но не реализуется в классе. Абстрактный
- 60. Элемент «НЕ» class TNot: public TLogElement { protected: void calc(); }; void TNot::calc() { FRes =!getIn1();
- 61. Элемент «НЕ» TNot n; n.setIn1 ( false ); cout Использование: создание объекта установка входа вывод результата
- 62. Элементы с двумя входами class TLog2In: public TLogElement { public: TLogElement::setIn2; TLogElement::getIn2; }; наследник от TLogElement
- 63. Элементы с двумя входами class TAnd: public TLog2In { protected: void calc(); }; class TOr: public
- 64. Элементы с двумя входами void TAnd::calc() { FRes = getIn1() && getIn2(); } void TAnd::calc() {
- 65. Вызов виртуального метода void TLogElement::setIn1( bool newIn1 ) { FIn1 = newIn1; calc(); } В базовом
- 66. Виртуальный метод Виртуальный метод – это метод базового класса, который могут переопределить классы-наследники так, что конкретный
- 67. Пример: элемент «И-НЕ» main() { TNot elNot; TAnd elAnd; int A, B; cout cout for (
- 68. Модульность class TLogElement { … } class TLog2In: public TLogElement { … } class TNot: public
- 69. Модульность void TLogElement::setIn1 ( bool newIn1 ) { ... } void TLogElement::setIn2 ( bool newIn1 )
- 70. Сообщения между объектами class TLogElement { private: TLogElement *FNextEl; int FNextIn; ... public: void Link (
- 71. Сообщения между объектами void TLogElement::Link( TLogElement *nextElement, int nextIn ) { FNextEl = nextElement; FNextIn =
- 72. Сообщения между объектами void TLogElement::setIn1 ( bool newIn1 ) { FIn1 = newIn1; calc(); if (
- 73. Сообщения между объектами TLogElement::TLogElement() { FNextEl = NULL; } Новый конструктор:
- 74. Сообщения между объектами TNot elNot; TAnd elAnd; elAnd.Link ( &elNot ); ... for ( A =
- 75. Задание «A»: Постройте класс TPet (домашнее животное) с двумя скрытыми полями: FName (имя) и FAge (возраст).
- 76. Задание «A»: Пример: TPet *p, *pets[2]; p = new TDog("Шарик", 5); p->gettingOlder(); cout getName() getAge() pets[0]
- 77. Задание «B»: Добавьте класс TMammal (млекопитающее) – наследник класса TPet и предок для классов TCat и
- 78. Задание «C»: Добавьте класс TReptilia (рептилии) – наследник класса TPet и предок для новых классов TTurtle
- 79. Задание «A»: Собрать полную программу и построить таблицу истинности последовательного соединения элементов «ИЛИ» и «НЕ». Пример:
- 80. Задание «B»: Добавить в иерархию классов элементы «И-НЕ» (TNAnd) и «ИЛИ-НЕ» (TNOr), которые представляют собой последовательные
- 81. Задание «C»: Добавить в иерархию классов элемент «исключающее ИЛИ» (TXor) и «импликация» (TImp). Построить их таблицы
- 82. Задание «D»: Добавить в иерархию классов элемент «триггер» (TTrigger). Построить его таблицу истинности при начальных значениях
- 83. § 51. Программы с графическим интерфейсом Объектно-ориентированное программирование. Языки C++ и C#
- 84. Интерфейс: объекты и сообщения поле ввода кнопка флажок переключатель Все элементы окон – объекты, которые обмениваются
- 85. Классические программы основная программа
- 86. Программы, управляемые событиями Событие – это переход какого-либо объекта из одного состояния в другое. нажатие на
- 87. Программы, управляемые событиями основная программа
- 88. Что такое RAD-среда? RAD = Rapid Application Development — быстрая разработка приложений создание формы минимальный код
- 89. RAD-среды: Delphi Язык: Object Pascal, позднее Delphi: 1995: Borland, сейчас: Embarcadero Technologies
- 90. RAD-среды: MS Visual Studio Языки: Visual Basic, Visual C++, Visual C#, Visual F# c 1995 по
- 91. RAD-среды: Lazarus Языки: FreePascal, Delphi свободное ПО: lazarus.freepascal.org
- 92. § 52. Программирование в RAD-средах Объектно-ориентированное программирование. Языки C++ и C#
- 93. Visual Studio Express (C#) http://www.visualstudio.com/ru-ru/products/visual-studio-express-vs.aspx
- 94. Язык C# С → С++ → C# язык CIL (байт-код) Common Intermediate Language виртуальная машина CLR
- 95. Form1.resx Проект – это набор файлов, из которых компилятор строит исполняемый файл программы. проект (.csproj, CSharp
- 96. Простейший проект Файл – Создать проект – Приложение Windows Forms Свойства Панель элементов Редактор кода Конструктор
- 97. Модуль формы F7 – перейти из конструктора к коду формы using System; using System.Collections.Generic; using System.ComponentModel;
- 98. Модуль формы public partial class Form1: Form { public Form1() { InitializeComponent(); } } открытый класс
- 99. Основная программа using System; using System.Collections.Generic; using System.Linq; using System.Windows.Forms; namespace Project1 { static class Program
- 100. Свойства формы Name – имя формы Size.Width – ширина Size.Height – высота Text – текст в
- 101. Обработчик событий 2×ЛКМ: создать обработчик FormClosing: форма закрывается События
- 102. Обработчик события private void MainForm_FormClosing ( object sender, FormClosingEventArgs e ) { } закрытый метод класса
- 103. private void MainForm_FormClosing ( object sender, FormClosingEventArgs e) { DialogResult res; res = MessageBox.Show ( "Вы
- 104. Параметры MessageBox.Show сообщение пользователю заголовок окна тип запроса MessageBoxIcon Error ошибка Warning предупреждение Information информация Question
- 105. § 53. Использование компонентов Объектно-ориентированное программирование. Языки C++ и C#
- 106. Панель компонентов Стандартные Контейнеры Диалоги
- 107. Просмотр рисунков панель Panel выключатель CheckBox рисунок PictureBox кнопка Button
- 108. Настройка формы Файл – Создать проект – Приложение Windows Forms Name → MainForm Text → Просмотр
- 109. Верхняя панель панель Panel Dock = Top
- 110. Кнопка и выключатель кнопка Button выключатель CheckBox Name = OpenBtn Text = Открыть файл Name =
- 111. Компонент PictureBox рисунок PictureBox Name = Image Dock = Fill
- 112. Выбор файла Name = OpenDlg выбор рисунка OpenFileDialog
- 113. Выбор файла if ( OpenDlg.ShowDialog() == DialogResult.OK ) Img.Image = new Bitmap (OpenDlg.FileName); если файл выбран
- 114. Масштабирование 2×ЛКМ if ( SizeCB.Checked ) Img.SizeMode = PictureBoxSizeMode.Zoom; else Img.SizeMode = PictureBoxSizeMode.Normal;
- 115. Ввод и вывод данных для веб-страниц метка rgbLabel Label панель rgbPanel Panel поле ввода rEdit TextBox
- 116. Обновление компонентов вывода выделить все три (+Shift) 2×ЛКМ
- 117. Обновление компонентов вывода private void rEdit_TextChanged ( object sender, EventArgs e ) { int r, g,
- 118. Вызов при запуске private void MainForm_Load ( object sender, EventArgs e ) { rEdit_TextChanged ( rEdit,
- 119. Обработка ошибок
- 120. Обработка ошибок try { // «опасные» команды } catch { // обработка ошибки } попытаться выполнить
- 121. Обработка ошибок try { r = Int32.Parse ( rEdit.Text ); g = Int32.Parse ( gEdit.Text );
- 122. Блокирование неверных символов private void rEdit_KeyPress ( object sender, KeyPressEventArgs e ) { if ( !
- 123. Задание «A»: Постройте программу, которая вычисляет площадь комнаты. Требования: размер окна нельзя менять при попытке закрыть
- 124. Задание «B»: Постройте программу, которая вычисляет площадь стен комнаты и определяет, сколько рулонов обоев нужно на
- 125. Задание «С»: Доработайте программу так, чтобы по щелчку по кнопке «Сохранить» все данные сохранялись в файле
- 126. § 54. Совершенствование компонентов Объектно-ориентированное программирование. Языки C++ и C#
- 127. Новый класс (модуль) Задача: построить поле для ввода целых чисел, в котором есть защита от ввода
- 128. Обработчик KeyPress class IntTextBox: TextBox { protected override void OnKeyPress ( KeyPressEventArgs e ) { if
- 129. Свойство Value class IntTextBox: TextBox { ... public int Value { set { Text = value.ToString();
- 130. Поле для ввода целых чисел private void decEdit_TextChanged ( object sender, EventArgs e ) { hexLabel.Text
- 131. § 55. Модель и представление Объектно-ориентированное программирование. Языки C++ и C#
- 132. решение Еще одна декомпозиция Задача: повторное использование написанного ранее готового кода. решение
- 133. решение Модель и представление Задача: хранить и использовать данные об изменении курса доллара.
- 134. Модель и представление Задача: вычисление арифметического выражения: целые числа знаки арифметических действий + - * /
- 135. Модель k = номер последней операции if ( k результат:= строка в число else { n1
- 136. Статический класс – набор функций static class Calculator { static int Priority ( char op )
- 137. Модель: приоритет операций int Priority ( char op ) { switch ( op ) { case
- 138. Модель: номер последней операции int LastOp ( string s ) { int i, minPrt, res; minPrt
- 139. Модель: вычисления public static int Calc(string s) { int k, n1, n2, res = 0; k
- 140. Представление многострочное поле TextBox выпадающий список ComboBox Name = Answers Dock = Fill ReadOnly = True
- 141. Перехват нажатия на клавишу Enter private void Input_KeyPress ( object sender, KeyPressEventArgs e ) { if
- 142. Обработка и вывод данных int x; x = Calculator.Calc( Input.Text); Вычисления (обращение к модели): Answers.Text +=
- 143. Обработка и вывод данных int i = Input.FindString(Input.Text); if ( i Input.Items .Insert ( 0, Input.Text
- 144. Перехват нажатия на клавишу Enter private void Input_KeyPress ( object sender, KeyPressEventArgs e ) { if
- 145. Задание «A»: Измените программу так, чтобы она могла вычислять значения выражений с вещественными числами.
- 146. Задание «B»: Измените программу так, чтобы она могла вычислять значения выражений со скобками.
- 147. Задание «С»: Измените программу так, чтобы она могла вычислять значения выражений, содержащих вызовы функций abs, sin,
- 148. Задание «D»: Измените программу так, чтобы при вводе неверного выражения выводилось сообщение об ошибке. Все результаты
- 149. Калькулятор
- 150. Конец фильма ПОЛЯКОВ Константин Юрьевич д.т.н., учитель информатики ГБОУ СОШ № 163, г. Санкт-Петербург [email protected] ЕРЕМИН
- 152. Скачать презентацию