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

Презентация:



Advertisements
Похожие презентации
1 A + B Операнд 1Операнд 2 Оператор Что такое выражение (expression) ? Что такое инструкция (statement) ? Операторы int max = (a > b) ? a : b;
Advertisements

Class Date { private int year = 0; private int month = 0; private int day = 0; public void SetDate (int y, int m, int d) { year = y; month = m; day = d;
Типовые расчёты Растворы
Функции с переменным числом аргументов private static int Sum(int a, int b) { return a + b; } static void Main() { int sum = Sum(1, 2); } 1 Функции.
Ребусы Свириденковой Лизы Ученицы 6 класса «А». 10.
Урок повторения по теме: «Сила». Задание 1 Задание 2.
Michael Jackson
Школьная форма Презентация для родительского собрания.


ЛЕКЦИЯ 4 ОПЕРАТОРЫ.

Маршрутный лист «Числа до 100» ? ? ?
PHP как язык программированияPHP как язык программирования.
Непараметрические критерии согласия Критерии Купера и Ватсона Тел
1. Определить последовательность проезда перекрестка
В. М. Гуровиц, Глобальные функции объявляются в самой программе или в модуле и доступны из любого места программы Локальные функции.
Масштаб 1 : 5000 Приложение 1 к решению Совета депутатов города Новосибирска от _____________ ______.
Масштаб 1 : 5000 Приложение 1 к решению Совета депутатов города Новосибирска от
Масштаб 1 : 5000 Приложение 1 к решению Совета депутатов города Новосибирска от _____________ ______.
Транксрипт:

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

2 Для кого этот курс и что он дает?

3 Область применения ООП Desktop Web Mobile Enterprise HighLoad

4 Путь ООП + язык СДиА + STL Многопоточность BOOST ОС UI DBNet Dev Design I II III

Герберт Шилдт «Самоучитель С++» Брюс Эккель «Философия С++» Харви и Пол Дейтел «Как программировать на С++» Литература WEB 5

6 Первая программа на языке С++ #include int main() { std::cout

Лекция 1 Введение в ООП 7

8 Классы и объекты

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

10 int CalcRectangleSquare(int a, int b) { return a * b; } int CalcRectanglePerimeter(int a, int b) { return (a + b) * 2; } // Стороны прямоугольника int a = 3; int b = 5;... // Площадь int s = CalcRectangleSquare(a, b); // Периметр int p = CalcRectanglePerimeter(a, b);

11 Объявление класса и создание объекта Данные, методы, абстрагирование, идентичность class Rectangle { int width; int height; int Square() { return width * height; } int Perimeter() { return (width + height) * 2; } void main() { Rectangle rect; int p = rect.Perimeter(); }

12 В C++ основной единицей программирования является класс. Классы являются программными аналогами понятий и предметов реального мира. Класс – это данные и методы для работы с ними, объединенные в целостную группу (Класс = Данные + Методы). Лозунг ООП: «Всё есть объект».

13 class Rectangle { private: int width; int height; public: void Set(int w, int h) { width = w; height = h; } int Square() { return width * height; } int Perimeter() { return (width + height) * 2; } Инкапсуляция и спецификаторы доступа

14 Rectangle rect; rect.Set(3, 5); int square = rect.Square(); int perimeter = rect.Perimeter(); int w = rect.width;

15 Конструктор class Rectangle { int width; int height; public: Rectangle() { width = 0; height = 0; }

16 Проектирование программы 1. Из каких сущностей состоит задача? Делаем их классами, соблюдая принцип единой ответственности. 2. Наполняем каждый классе данными, отражающими ключевые характеристики сущности (?). 3. Добавляем в класс методы, реализующие необходимое поведение класса, оставляя в интерфейсе класса только необходимое (?). 4. Связываем классы в единую систему.

17 Данные

18 Целые*Дробные Символы и строки short (2) int (4) long (4) __int64**(8) float (4) double (8) char (1) string Логический bool (1) true / false Пустой void * Могут сочетаться с модификатором unsigned ** Платформо-зависимый Базовые ТД

19 bool isEqual = if (flag) // if (flag == true) { … } if (!flag) // if (flag != true) { … } true; // булево значение (a == b); // логическое выражение (его результат // значение типа bool) Тип bool

20 Поля данных и переменные Глобальные: - не используются в С++ Локальные: 1. Объявляются внутри метода (или в любом другом блоке). 2. Видны только в пределах блока объявления. В классе: 1. Время жизни = времени жизни объекта. 2. Видны всем методам класса. видимость = существование?

21 { int max = 2; { int a=1, b=2; int max; if (a > b) { int max = a; } else { int max = b; } std::cout

22 int length; if (str != NULL) { length = strlen(str); } std::cout

Объявление + инициализация 23 С: объявления в начале блока C++: объявления в любом месте // Плохо int sum; sum = 0; // Хорошо int sum = 0; Локальные переменные: 1. объявляем переменные там, где они нужны 2. совмещаем объявление + инициализация Поля класса: - инициализируем в конструкторе, гарантируем консистентность объекта

Литералы // Целочисленные int x = 42; int y = 010; short p = 0x7fff; long l = 100L; resize(640, 480); // Вещественные float f = 1.618f; double d = 3.14; double G = 6.673e-11; // Строковые char c = '\n'; char* str = "qwerty"; 24 std::string str = "строка текста";

char* str = "qwerty"; str[0] = '1'; //? char str[] = "qwerty"; str[0] = '1'; //? 25 float pi = 3.14; //?

26 Методы

27 class Date { int year; public: bool IsLeap() { if (year % 4 == 0) return true; } };

28 Перегрузка функций int min(int a, int b) { return a < b ? a : b; } int main() { std::cout

29 Перегрузка – это возможность написания нескольких функций с одинаковыми именами, но различными формальными (входными) параметрами. class String { public: void Set(const char* str); void Set(char str, int count); }

30 Совокупность формальных параметров функции называется сигнатурой. Сигнатуры различаются по: типу параметров их количеству их очередности Фактические параметры определяют, какую версию функции нужно вызвать. При перегрузке тип возвращаемого значения не учитывается. Адреса вызовов определяются на стадии компиляции (раннее связывание). При связывании, компилятор в первую очередь ищет такую версию перегруженной функции, сигнатура которой в точности соответствует параметрам вызова. Если такая версия не найдена, то допускается неявное преобразование типов.

31 Полное соответствие: void func(int x) {......} void func(double x) {.....} void func(int x, int y) {....} void main() { func(3, 5); func(1.25); func(100); } Неявные преобразования типа: Преобразование типа с потерей – уменьшение количества значащих разрядов числа, возможно при: переходе от вещественного числа к целому (например float->int) переходе к типу с меньшей размерностью (например int->char) void Func(double x) { } void Func(int x, int y) { } void main() { Func(1.25, 10); // Потеря! Func(100); // Нет потерь }

if if (str != NULL && str[0] != ' ') { } 32 if (str[0] != ' ' && str != NULL) { } ? Операторы

switch switch(type) { case GeoType::point: case GeoType::line: return 0; case GeoType::square:... case GeoType::sphere:... break; default: assert(false); }; 33

? : int max = a > b ? a : b; 34

for for (int i=0; i

36 for (int i=0; i

37 for (int i=0; i

38 for (int i=0; i

while while (query->Fetch()) {... } std::string buf; std::string psw = "qwerty"; do { std::cin >> buf; } while (buf != psw); 39

Приоритет и ассоциативность операций // Приоритет? b = a + 10; // Ассоциативность? d = c + b + a; d = a = b = c; 40

41

int monthsLengths[] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; int month = 2; int year = 2012; int daysCount = monthsLengths[month] + (month == 2 && year % 4 == 0) ? 1 : 0; 42