OOP-2013_lecture1.ppt
- Количество слайдов: 47
Здравствуйте! Меня зовут Клышинский Эдуард Станиславович eklyshinsky@hse. ru
Программирование 5, 6 модули (Объектно-ориентированное программирование) МИЭМ НИУ ВШЭ, Клышинский Э. С. 2013 г.
Рекомендуемая литература • М. Шлее Qt 4. 8. Профессиональное программирование на C++ (658 руб. ) • Б. Страуструп Программирование. Принципы и практика использования C++ (2560 руб. ) • С. Прата Язык программирования C++ (C++11). Лекции и упражнения (1909 руб. ) • http: //www. cplus. com/ • http: //habrahabr. ru/
Введение Как мы будем жить
Жизненная философия • Шу (семинары и лабораторные) – ученик не способен задать правильные вопросы и понять ответы • Ха (лекции) – ученик постоянно совершенствует свою технику и спрашивает «Почему? » • Ри (курсовая) – ученик постоянно экспериментирует, смешивает техники, пробует разработать собственный стиль.
Жизненная философия У нас нет времени делать это последовательно!
Что нам предстоит • • Лекции Семинары (надо заработать 2 балла) Курсовая работа; Лабораторные работы (5 модуль): 1. Разработка контейнера. 2. Визуальный интерфейс для разработанного контейнера. 3. Контейнер для базового класса.
Система оценок +3 – отличное решение, всё сам +2 – хорошее решение задачи, преподаватель и коллеги почти не вмешивались в процесс +1 – сносный ответ, требовалась помощь коллег и преподавателя. 0 – что-то изобразил на доске -0. 5 – отказ от ответа Старосты! Мне нужны актуальные списки!
Курсовая работа Команда из n [1; 2] человек должны написать n*[400; 600] строк кода по выбранной теме. Требования на «отлично» : • классы • наследование • перегрузка операторов • шаблоны • полиморфизм
Курсовая работа Команда из n [1; 2] человек должны написать n*[400; 600] строк кода по выбранной теме. Требования на «хорошо» : • классы • наследование
Курсовая работа Команда из n [1; 2] человек должны написать n*[400; 600] строк кода по выбранной теме. Требования на «удовлетворительно» : • классы
Лекция 1 Основные понятия
Иерархия языков Объектноориентированное программирование Структурное программирование Процедурное программирование Ассемблер
Понятие объекта и класса Весь мир состоит из объектов, поэтому человеку проще манипулировать именно объектами, а не наборами переменных.
Понятие объекта и класса Что объединяет эти вещи?
Понятие объекта и класса Стул — мебельное изделие для сидения одного человека, со спинкой, с подлокотниками или без них, с высотой сиденья, функционально удобной при соотношении его с высотой стола. Основные части стула — сиденье и спинка, в типичном стуле сиденье опирается на четыре ножки, иногда в конструкцию стула входят подлокотники. Спинка может иметь незаполненный промежуток до сиденья или выполняться на всю высоту, без промежутка. Также промежуток между спинкой и сиденьем может быть заполнен декоративным элементом. Википедия
Понятие объекта и класса Стул — мебельное изделие для сидения одного человека, со спинкой, с подлокотниками или без них, с высотой сиденья, функционально удобной при соотношении его с высотой стола. Основные части стула — сиденье и спинка, в типичном стуле сиденье опирается на четыре ножки, иногда в конструкцию стула входят подлокотники. Спинка может иметь незаполненный промежуток до сиденья или выполняться на всю высоту, без промежутка. Также промежуток между спинкой и сиденьем может быть заполнен декоративным элементом. Википедия Это свойства объекта
Понятие объекта и класса Стул — мебельное изделие для сидения одного человека, со спинкой, с подлокотниками или без них, с высотой сиденья, функционально удобной при соотношении его с высотой стола. Основные части стула — сиденье и спинка, в типичном стуле сиденье опирается на четыре ножки, иногда в конструкцию стула входят подлокотники. Спинка может иметь незаполненный промежуток до сиденья или выполняться на всю высоту, без промежутка. Также промежуток между спинкой и сиденьем может быть заполнен декоративным элементом. Википедия Это функциональность объекта
Понятие объекта и класса Класс = данные + методы работы с ними
Понятие объекта и класса Эйдос Платона - то подлинное, что дается в умопостижении, в отвлечении от нашего мнения о вещи и от чувственных впечатлений, которые отражают только материальное бытие вещи. В отличие от идеи эйдос уже не генерализует, но наоборот выделяет и отличает вещь от других вещей.
Понятие объекта и класса Класс – некоторый шаблон, описывающий создаваемые объекты. Объекты – фрагменты оперативной памяти, расположение элементов которых описывается заданным классом.
Понятие объекта и класса объекты class Ui_Main. Window { public: QWidget *central. Widget; QLine. Edit *Pix_path; QPush. Button *push. Button_3; QPush. Button *push. Button_2; QLine. Edit *line. Edit; QPush. Button *push. Button_9; методы QPush. Button *push. Button; QProgress. Bar *progress. Bar; void setup. Ui(QMain. Window *Main. Wnd); void retranslate. Ui(QMain. Window *Main. Wnd); }; 0 x 0 d 45 f 124 0 x 0 d 45 f 136 0 x 0 d 45 f 048 0 x 0 d 45 f 256 0 x 0 d 45 e 512 0 x 0 d 45 e 112 0 x 0 d 45 e 648 0 x 0 d 453248 … mov ax, dx imul ax, 6 … push ax push cx …
Абстракция Буч Г. Объектно-ориентированный анализ и проектирование
Классом может быть и абстрактная сущность -. . . начинается на _M_, - продолжала она. - Они рисовали мышеловки, месяц, математику, множество. . . Ты когда-нибудь видела, как рисуют множество? - Множество чего? - спросила Алиса. - Ничего, - отвечала Соня. - Просто множество! - Не знаю, - начала Алиса, - может. . . - А не знаешь - молчи, - оборвал ее Болванщик.
Классом может быть и абстрактная сущность -. . . начинается на _M_, - продолжала она. - Они рисовали мышеловки, месяц, математику, множество. . . Ты когда-нибудь видела, как рисуют множество? - Множество чего? - спросила Алиса. - Ничего, - отвечала Соня. - Просто множество! - Не знаю, - начала Алиса, - может. . . - А не знаешь - молчи, - оборвал ее Болванщик. Кстати, это не наши методы. Лучше задавайте вопросы.
Классом может быть и абстрактная сущность Множество Свойства: массив элементов, количество элементов в массиве Методы: добавить элемент, удалить элемент, очистить, выбрать элемент, найти элемент
Классом может быть и абстрактная сущность Заслуга Свойства: дата, место, наименование Методы: отобразить, установить дату (в целях проверки корректности входных данных), вернуть дату
Достоинства: модульность Буч Г. Объектно-ориентированный анализ и проектирование
Достоинства: простота Буч Г. Объектно-ориентированный анализ и проектирование
Инкапсуляция Механизм языка программирования, ограничивающий доступ к составляющим объект компонентам (методам и свойствам), делает их приватными, то есть доступными только внутри объекта. Важно понимать, что к инкапсулированной переменной можно обратиться при написании реализации класса, но при его использовании обращение к ней невозможно.
Инкапсуляция Следует различать интерфейс класса, то есть то, что он предоставляет для использования другим фрагментам кода, от реализации класса, то есть описания собственно механизма функционирования.
Синтаксис class The. Class. Name // class имя_класса { public: // Магической слово int property 1; // свойства класса double property 2, property 3; int method. Foo(int a, char *b); // методы float method. Bar(); };
Синтаксис class The. Class. Name // порядок не важен { public: // Магической слово double property 2, property 3; int method. Foo(int a, char *b); // методы int property 1; // свойства класса float method. Bar(); };
Синтаксис class The. Class. Name // порядок не важен {public: double property 2, property 3; int method. Foo(int a, char*b); int property 1; float method. Bar(); }; // Да, как и форматирование кода
Синтаксис int The. Class. Name: : method. Foo(int a, char *b) { property 3=a; property 1=strlen(b); } float The. Class. Name: : method. Bar() { property 2=0; }
Синтаксис #include “myclass. h” int main() {The. Class. Name obj 1, *obj 2=&obj 1; obj 1. property 1=0; obj 1. method. Bar(); obj 2 ->method. Foo(10, “строка”); }
Синтаксис class The. Class. Name 2 // { public: The. Class. Name *objects; int count; void add(The. Class. Name &obj); void delete(int pos); };
Синтаксис class The. Class. Name 2 // { public: The. Class. Name *objects; int count; Ссылка на параметр, параметр может изменяться внутри функции. void add(The. Class. Name &obj); void delete(int pos); };
Область видимости public – то, что написано в этой строке будет доступно «снаружи» класса. public: – то, что написано ниже будет доступно «снаружи» класса. private – то, что написано в этой строке будет доступно только методам класса. private: – то, что написано ниже будет доступно только методам класса.
Область видимости По умолчанию свойства и методы класса являются private, поэтому забыв написать public мы лишаем класс интерфейса. Структура – тоже класс и она может иметь методы. В целях совместимости все ее члены и методы по умолчанию public.
Область видимости Общее правило. По умолчанию всё, что не обязано быть доступно снаружи, обязано быть private. Пожалейте других разработчиков!
Область видимости Общее правило. Правила хорошего тона предписывают описать сперва открытые члены класса, а потом закрытые. Пожалейте других разработчиков!
Пример Мы пишем экономическую стратегию (игра). Необходимо создать класс, описывающий источник ресурсов. Время дискретно, внешний класс (игра) сообщает о его течении.
Пример Свойства: название ресурса, количество ресурса, производительность, интервал производства, количество произведенных ресурсов, число работников, максимальное число работников. Методы: прошло время
Пример class Mine // Часть свойств опущено { public: char *res. Name; // Имя ресурса // Сколько есть ресурса, сколько произведено int overall, produced; // Число работников, мах число работников int worker. Count, max. Worker. Count; // Тикает время bool tick(); };
Пример bool Mine: : tick() {double tmp; cur. Time++; if( cur. Time>=interval ) {cur. Time = 0; tmp = ((double) worker. Count) / max. Worker. Count; produced += productivity * tmp; return true; } return false; }
Пример использования int main() {Mine mn; mn. max. Worker. Count=0; mn. productivity=-1 mn. res. Name=(0 x. FACE 8 D 00); mn. tick(); } И кого будут ругать?


