You are on page 1of 44

Здравствуйте!

Меня зовут Клышинский


Эдуард Станиславович

eklyshinsky@hse.ru
Информатика
и Программирование
5, 6 модули
(Объектно-ориентированное
программирование)

МИЭМ НИУ ВШЭ, Клышинский Э.С.


2017 г.
Рекомендуемая литература
• М. Шлее Qt 5.3. Профессиональное
программирование на C++
• Б. Страуструп Программирование.
Принципы и практика использования
C++
• С. Прата Язык программирования
C++ (C++11). Лекции и упражнения
References
• Bjarne Stroustrup C++ Programming
Language, The, 4th Edition
• Bjarne Stroustrup Programming:
Principles and Practice Using C++, 2nd
Edition
• Stephen Prata C++ Primer Plus, 6th
Edition
• Mark A. Weiss Data Structures and
Algorithm Analysis in C++, 4th Edition
Электронные ресурсы
http://www.cplusplus.com/
http://habrahabr.ru/
http://stackoverflow.com/

http://alenacpp.blogspot.ru/

А еще…
… я постараюсь выкладывать презентации
перед лекцией в ЛМС, когда вас туда
добавят.
Текущая лекция должна быть здесь.
http://lms.hse.ru/
А еще…
… мои презентации служат для того, чтобы
иллюстрировать мои лекции и делать их
более живыми.

И вовсе не для того, чтобы учить по ним


С++.
Введение
Как мы будем жить

Таким образом, Сеть тективно-интрузивных правительственных агентств (ТИПА) фактически


спровоцировала переключение на себя полицейских обязанностей в случаях, которые
регулярные силы охраны правопорядка посчитали для себя чересчур странными или
чересчур специфическими. В общей сложности, в ТИПА-Сети насчитывалось тридцать
отделов, начиная с самого прозаического отдела добрососедских разборок (ТИПА-30),
продолжая отделами литературных детективов (ТИПА-27) и преступлений в искусстве
(ТИПА-24) и кончая всеми отделами выше (вернее, ниже) уровня ТИПА-20, отделами, любая
информация о которых была строго засекречена, хотя абсолютно все знали, что, например,
Хроностраже присвоен №12, а Антитерроризму – №9.

Дж. ФФОРДЕ, Дело Джен, или Эйра немилосердия, Гл. 1 Женщина, которую звали Четверг Нонетот
Что нам предстоит
• Лекции
• Лабораторные работы (5 модуль):

1. Разработка каких-то классов.


2. Разработка контейнера для этих
классов.
3. Использование наследования.
4. Разработка большого приложения.
Система оценок
Лабораторные работы (5 модуль):
1 – 2 балл,
2 – 2 балл,
3 – 3 балла,
4 – 3 балла.
Накопленная – 10 баллов.
Старосты! Нам нужны актуальные списки!
Система оценок
Лабораторные работы (6 модуль):
1 – 1 балл,
2 – 2 балл,
3 – 3 балла,
4 – 4 балла.
Накопленная – 10 баллов.
Старосты! Нам нужны актуальные списки!
Система оценок
Указанные оценки являются максимумом,
который вы можете заработать за
лабораторную работу.
Любое отклонение от идеала,
находящегося в голове преподавателя,
приводит к снижению оценки.
Оценки не обязаны быть целыми.
Система оценок
К хорошим
программистам
приходит Дед
Мороз.

К плохим –
DeadLine.
Система оценок
Дедлайн начинается после моих слов на
лекции «И теперь вы готовы к тому,
чтобы начать выполнять лабораторную
работу номер …».
Дедлайн – два занятия после этих слов
(практически месяц).
Опоздание на неделю – минус 25%, две
недели – 50%, после двух недель работа
не принимается.
Система оценок
Лабораторные работы, выполненные
вопреки правилам хорошего тона и
здравого смысла не принимаются!
Комплектов правил оформления кода
(style guides) много, будьте готовы
сослаться на любой из них.
Например,
http://google.github.io/styleguide/cppguide.html
Лабораторная работа №4
Команда из n[1;2] человек должна
написать n*[400;600] строк кода по
выбранной теме.
Требования на 4 из 4:
• классы
• наследование
• перегрузка операторов
• шаблоны
• полиморфизм
Лабораторная работа №4
Команда из n[1;2] человек должна
написать n*[400;600] строк кода по
выбранной теме.
Требования на ~3 из 4:
• классы
• наследование
Лабораторная работа №4
Команда из n[1;2] человек должна
написать n*[400;600] строк кода по
выбранной теме.
Требования на 1 из 4:
• классы
Лабораторная работа №4
К концу текущего модуля вы должны
сдать постановку задачи, метод решения
задачи, структуру классов, наброски кода.
Система оценок
Пару контрольных на лекциях, которые
могут повлиять на ваши оценки в случае
колебаний преподавателя.

Экзамен (6 модуль).
Итог=0.6*Накопл+0.4*Экзамен
Система оценок
if( Grade<4 )
Final_Grade=(int)Grade
else
Final_Grade=round(Grade)
Только для профи
Если Вы уже имеете серьезный опыт
работы на С++ или другом нормальном
объектно-ориентированном языке, Вы
можете принести мне готовый проект,
показать его и
получить экзамен уже сейчас.
Требования к коду описаны в задании на
л/р №4 (на отлично).
Лекция 1
Основные понятия

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

Вообще-то рукопись «Мартина Чезлвита» уже пропадала. Два года назад ее взял из сейфа
охранник, который просто-напросто хотел прочесть книгу в ее чистом и первозданном виде.
Не выдержав угрызений совести – или сломавшись на почерке Диккенса уже к третьей
странице, – он признался в содеянном, и рукопись вернулась на место. Охраннику дали пять
лет работ по обжигу извести в захолустье Дартмура.

Дж. ФФОРДЕ, Дело Джен, или Эйра немилосердия, Гл. 2 Гэдсхилл


Иерархия языков
Объектно- Как человеку проще
мыслить.

ориентированное
программирование
Как человеку проще
Структурное описывать данные.

программирование
Процедурное Как человеку проще
записывать действия.
программирование
Что понимает компьютер.
Ассемблер
Понятие объекта и класса
Что объединяет эти вещи?
Понятие объекта и класса
Стул — мебельное изделие для сидения одного
человека, со спинкой, с подлокотниками или без них, с
высотой сиденья, функционально удобной при
соотношении его с высотой стола.
Основные части стула — сиденье и спинка, в типичном
стуле сиденье опирается на четыре ножки, иногда в
конструкцию стула входят подлокотники. Спинка может
иметь незаполненный промежуток до сиденья или
выполняться на всю высоту, без промежутка. Также
промежуток между спинкой и сиденьем может быть
заполнен декоративным элементом.
Википедия
Понятие объекта и класса
Стул — мебельное изделие для сидения одного
человека, со спинкой, с подлокотниками или без них, с
высотой сиденья, функционально удобной при
соотношении его с высотой стола.
Основные части стула — сиденье и спинка, в типичном
стуле сиденье опирается на четыре ножки, иногда в
конструкцию стула входят подлокотники. Спинка может
иметь незаполненный промежуток до сиденья или
выполняться на всю высоту, без промежутка. Также
промежуток между спинкой и сиденьем может быть
заполнен декоративным элементом.
Википедия
Это свойства объекта
Понятие объекта и класса
Стул — мебельное изделие для сидения одного
человека, со спинкой, с подлокотниками или без них, с
высотой сиденья, функционально удобной при
соотношении его с высотой стола.
Основные части стула — сиденье и спинка, в типичном
стуле сиденье опирается на четыре ножки, иногда в
конструкцию стула входят подлокотники. Спинка может
иметь незаполненный промежуток до сиденья или
выполняться на всю высоту, без промежутка. Также
промежуток между спинкой и сиденьем может быть
заполнен декоративным элементом.
Википедия
Это функциональность объекта
Понятие объекта и класса

Класс = данные + методы работы с ними


Появление класса
class
struct ABC
{
// Свойства
};
void foo(ABC data)
{
// Функции
}
Появление класса
Объектно-ориентированное
программирование позволяет создавать
проекты с большей сложностью за счет
правильного проектирования и
реализации программного продукта,
организации его программного кода.
Появление класса
Внедорожник – это такая машина,
которая может застрять там, куда не
доедут остальные.
Синтаксис: объявление класса
class TheClassName
{
public: // Magic word.
// Свойства класса.
int property1;
double property2, property3;
// Методы класса.
int methodFoo(int a, char *b);
float methodBar();
};
Синтаксис: объявление класса
class ИмяКласса
{
public: // Magic word.
// Свойства класса.
тип имяПеременной;
// Методы класса.
возвращТип имяМетода(параметры);
};
Синтаксис: объявление класса
class TheClassName // class ИмяКласса
{// Порядок объявления не важен…
public: // Magic word.
float methodBar();
int property1;
int methodFoo(int a, char *b);
double property2, property3;
};
Синтаксис: объявление класса
class TheClassName // class ИмяКласса
{// Порядок объявления не важен…
public:float methodBar();int
property1;int methodFoo(int a,char
*b);double property2,property3;};
// …как и форматирование.
Синтаксис: описание методов
// Выше мы пообещали метод.
// Теперь описываем как он работает.
int TheClassName::methodFoo(int a,
char *b)
{property3=a;// Обращение к свойству.
property1=strlen(b);
return 0;
}
float TheClassName::methodBar()
{ property2=0; return 0.;
}
Синтаксис: описание методов
При обращении к свойствам класса
внутри методов мы работаем со
свойствами как с простыми
переменными.
Обращение ведется к значениям свойств
текущего объекта, для которого был
вызван метод.
При этом у каждого объекта свой
«комплект» значений свойств.
Синтаксис: объявление объектов
#include “myclass.h”

int main()
{TheClassName obj1, *obj2=&obj1;

obj1.property1=0; // Меняем свойство


obj1.methodBar(); // Вызываем метод.
obj2->methodFoo(10, “строка”);
}
Синтаксис
1. Объявить класс, то есть описать какие
у него будут свойства и методы.
2. Описать класс, то есть написать его
функции.
3. Создать объект класса, то есть
конкретный фрагмент памяти,
хранящий конкретные значения по
заданному в п.1 шаблону.
Понятие объекта и класса
Класс – некоторый шаблон,
описывающий создаваемые объекты
(идея, шаблон описания).
Объекты – фрагменты оперативной
памяти, расположение элементов
которых описывается заданным классом
(элемент окружающей дествительности).
Понятие объекта и класса
Класс – человек, треугольник,
автомобиль.
Объект – Иванов И.И. (БИВ-169)
< <1,2>, <2,4> <3,1>>
Понятие объекта и класса
Объект (данные) 0x0d45f124 0x0d45f136
Класс (шаблон) 0x0d45f048 0x0d45f256
class Ui_MainWindow
0x0d45e512 0x0d45e112
{ 0x0d45e648 0x0d453248
public:

QWidget *centralWidget;
QLineEdit *Pix_path;
QPushButton *pushButton_3;
QPushButton *pushButton_2; mov ax, dx
QLineEdit *lineEdit; Методы imul ax, 6
QPushButton *pushButton_9; …
QPushButton *pushButton; push ax
QProgressBar *progressBar; push cx

void setupUi(QMainWindow *MainWnd);
void retranslateUi(QMainWindow *MainWnd);
};
И завершающая шутка