НГТУ, каф. ВТ Объектно- ориентированное программирование на С++ Макаревич Л. Г.

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



Advertisements
Похожие презентации
Объектно-ориентированное программирование на С++.
Advertisements

Основы информатики Классы Заикин Олег Сергеевич zaikin.all24.org
НГТУ, каф. ВТ Наследование в С++ Макаревич Л. Г.НГТУ, каф. ВТ Наследование в С++ Макаревич Л. Г.
Методология объектно- ориентированного программирования.
Информационные технологии Стандартные библиотечные функции манипулирование данными преобразование и шифрование определение пользователями функций.
Основы информатики Лекция. Функции Заикин Олег Сергеевич
Лекция 3. Введение в C++ Примеры взяты из книги Брюса Эккеля Думаем на С++
Функции Функция – именованная последовательность описаний и операторов, выполняющая некоторое действие. Может иметь параметры и возвращать значение. Функция.
Полиморфизм Полиморфизм (polymorphism) - последний из трех "китов", на которых держится объектно-ориентированное программирование Слово это можно перевести.
Потоки Язык C++ не обеспечивает средств для ввода/вывода Ему это и не нужно; такие средства легко и элегантно можно создать с помощью самого языка Традиционно.
1 Программирование на языке Си++. 2 Модуль 8. УПРАВЛЕНИЕ ИСКЛЮЧЕНИЯМИ Применение операторов try, catch, throw Динамическая идентификация типов времени.
Объектно-ориентированное программирование Объектно-ориентированное программирование (ООП) - основная методология программирования. Она является продуктом.
1 Программирование на языке Си++. 2 Модуль 4. ПЕРЕГРУЗКА ОПЕРАЦИЙ Методы преобразования. Классы потоков Си++ Операции замещения и вставки Ввод/вывод в.
Профессиональное программирование на языке C# Лекция 3 «Он живой и светится!» Доктор физ.-мат. наук, профессор Р.В. Шамин Сахалинский филиал Дальневосточного.
Преобразования типов В языке C/C++ имеется несколько операций преобразования типов. Они используются в случае, если переменная одного типа должна рассматриваться.
С++ Язык программирования С++ был разработан на основе языка С Бьярном Страуструпом (Bjarne Stroustrup).
Объектно- ориентированный подход к моделированию систем.
Наследование Наследование – это отношение является между классами. class Person { string first_name; int birth_year;... } class Student : Person { float.
Алгоритмический подход – главное алгоритм решения задачи ( в основном, используется для вычислительных задач ); Структурное программирование – декомпозиция,
Разработка программного обеспечения при объектном подходе Объектно-ориентированный подход.
Транксрипт:

НГТУ, каф. ВТ Объектно- ориентированное программирование на С++ Макаревич Л. Г.

LOGO Литература Страуструп Б. Язык программирования С++, спец. изд./Пер. с англ. – М.; СПб. : «Бином» - «Невский Диалект», 2001 г с., ил. Еккель Б. Философия С++ Фейсон Т. Объектно-ориентированное программирование на Borland C – К.:Диалектика,1996. – 544с., ил. – Фридман А. Л. Язык программирования Си++ программирования Си++ Дейтел Х., Дейтел П. Как программировать на С++. C++. Объектно-ориентированное программирование : практикум : учебное пособие для вузов / Т. А. Павловская, Ю. А. Щупак. СПб. : Питер, с. ил. C++. Объектно-ориентированное программирование : практикум : учебное пособие для вузов / Т. А. Павловская, Ю. А. ЩупакСПб. : Питер, 2005 C/C++. Программирование на языке высокого уровня : Учебник для вузов / Т. А. Павловская. СПб. : Питер, с. ил.C/C++. Программирование на языке высокого уровня : Учебник для вузов / Т. А. ПавловскаяСПб. : Питер, 2004 Язык Си++ : учебное пособие для вузов по направлениям "Прикладная математика" и "Вычислительные машины, комплексы, системы и сети"/ В. В. Подбельский. М. : Финансы и статистика, с. ил., табл.М. : Финансы и статистика, 2003 Программирование на С и С++ : [Практикум: Учеб. пособие для вузов] / А. В. Крячков, И. В. Сухинина, В. К. Томшин. М. : Горячая линия-Телеком, с. ил. Программирование на С и С++ : [Практикум: Учеб. пособие для вузов] / А. В. Крячков, И. В. Сухинина, В. К. ТомшинМ. : Горячая линия-Телеком, 2000 Программирование на С++ : учебное пособие / [В. П. Аверкин и др.] ; под ред. А. Д. Хомоненко. СПб. : КОРОНА принт ; М. : Альтекс-А, с. ил. Программирование на С++ : учебное пособие / [В. П. Аверкин и др.] ; под ред. А. Д. ХомоненкоСПб. : КОРОНА принт ; М. : Альтекс-А, 2003

LOGO Введение Разработчик – Страуструп Б.,Bell Labs. Предшественник – С (1979), Simula- 67, Smalltalk Дата создания – 1997 Международный стандарт - ISO/IEC американский национальный комитет по стандартам в информационных технологиях ВНИИ Сертификации ftp://ftp.research.att.com/dist/c++std/WP/CD2/

LOGO Абстракция – основа ООП Использование функций Описание собственных типов данных Объединение в модули типов данных и функций для работы с ними Класс – тип данных пользователя

LOGO Парадигмы ООП Парадигма – способ видения мира Объекты Взаимодействие объектов – событийно-управляемое программирование

LOGO Основные свойства ООП Инкапсуляция (сокрытие реализации) Наследование Полиморфизм Перегрузка функций Шаблоны Виртуальные методы

LOGO Объектно-ориентированный подход помогает справиться с такими проблемами, как: уменьшение сложности программного обеспечения; повышение надежности программного обеспечения; обеспечение возможности модификации отдельных компонентов программного обеспечения без изменения остальных его компонентов; обеспечение возможности повторного использования отдельных компонентов программного обеспечения

LOGO Достоинства ООП Классы позволяют проводить конструирование из полезных компонентов, обладающих простыми инструментами, что позволяет абстрагироваться от деталей реализации. Данные и операции над ними образуют определенную сущность, и они не разносятся по всей программе, как нередко бывает в случае процедурного программирования, а описываются вместе. Локализация кода и данных улучшает наглядность и удобство сопровождения программного обеспечения. Инкапсуляция позволяет привнести свойство модульности, что облегчает распараллеливание выполнения задачи между несколькими исполнителями и обновление версий отдельных компонентов. ООП дает возможность создавать расширяемые системы. Это одно из основных достоинств ООП, и именно оно отличает данный подход от традиционных методов программирования. Расширяемость означает, что существующую систему можно заставить работать с новыми компонентами, причем без внесения в нее каких-либо изменений. Компоненты могут быть добавлены на этапе исполнения программы.

LOGO Достоинства ООП Полиморфизм оказывается полезным преимущественно в следующих ситуациях. Обработка разнородных структур данных. Программы могут работать, не различая вида объектов, что существенно упрощает код. Новые виды могут быть добавлены в любой момент. Изменение поведения во время исполнения. На этапе исполнения один объект может быть заменен другим, что позволяет легко, без изменения кода, адаптировать алгоритм в зависимости от того, какой используется объект. Реализация работы с наследниками. Алгоритмы можно обобщить настолько, что они уже смогут работать более чем с одним видом объектов. Создание "каркаса" (framework). Независимые от приложения части предметной области могут быть реализованы в виде набора универсальных классов, или каркаса (framework), и в дальнейшем расширены за счет добавления частей, специфичных для конкретного приложения.

LOGO Достоинства ООП Часто многоразового использования программного обеспечения не удается добиться из-за того, что существующие компоненты уже не отвечают новым требованиям. ООП помогает этого достичь без нарушения работы уже имеющихся клиентов, что позволяет извлечь максимум из многоразового использования компонентов. Сокращается время на разработку, которое может быть отдано другим задачам. Компоненты многоразового использования обычно содержат гораздо меньше ошибок, чем вновь разработанные, ведь они уже не раз подвергались проверке. Когда некий компонент используется сразу несколькими клиентами, улучшения, вносимые в его код, одновременно оказывают положительное влияние и на множество работающих с ним программ. Если программа опирается на стандартные компоненты, ее структура и пользовательский интерфейс становятся более унифицированными, что облегчает ее понимание и упрощает использование.

LOGO Недостатки ООП Документирование классов - задача более трудная, чем это было в случае процедур и модулей. Поскольку любой метод может быть переопределен, в документации должно говориться не только о том, что делает данный метод, но и о том, в каком контексте он вызывается. Ведь переопределенные методы обычно вызываются не клиентом, а самим каркасом. Таким образом, программист должен знать, какие условия выполняются, когда вызывается данный метод. Для абстрактных методов, которые пусты, в документации должно говориться о том, для каких целей предполагается использовать переопределяемый метод. В сложных иерархиях классов поля и методы обычно наследуются с разных уровней. И не всегда легко определить, какие поля и методы фактически относятся к данному классу. Для получения такой информации нужны специальные инструменты, вроде навигаторов классов. Если конкретный класс расширяется, то каждый метод обычно сокращают перед передачей сообщения базовому классу. Реализация операции, таким образом, рассредоточивается по нескольким классам, и чтобы понять, как она работает, нам приходится внимательно просматривать весь код. Методы, как правило, короче процедур, поскольку они осуществляют только одну операцию над данными, зато их намного больше. В коротких методах легче разобраться, но они неудобны тем, что код для обработки сообщения иногда "размазан" по многим маленьким методам. Инкапсуляцией данных не следует злоупотреблять. Чем больше логики и данных скрыто в недрах класса, тем сложнее его расширять. Отправной точкой здесь должно быть не то, что клиентам не разрешается знать о тех или иных данных, а то, что клиентам для работы с классом этих данных знать не требуется.

LOGO Расширения свойств С Размещения описаний переменных Обязательное использование прототипов функций Параметры по умолчанию Расширение области видимости переменных for (int i=0; i < 5; i++) { int k = 55; k =+i; //… int j = k*i; //… } include include my.h void DrawCircle(int x=100, int y=50, int rad=20); // DrawCircle(); DrawCircle(20); int a = 5; int c; int incr( int k) { int a = k + 15; c = :: a + 4; }

LOGO Модификатор const Перегрузка функций #define YEAR 2004 //C const int YEAR = 2004; void func(const int a); const char * pc = asdf; pc = qqqq;//right pc[3]=b;//not right char * const pc = asdf; pc = qqqq;//not right pc[3]=b;//right int sqrt(int x); float sqrt(float x); double sqrt(double x); Сигнатура – число и типы входных параметров Вставляемые функции Ссылки #define abs(a) (a>0?a:-a) int x = 2, b = abs(x++); inline int abs(int a) {return a>0?a:-a; } int r=abs(x++); int y=16; int &x = y; cout

LOGO Использование перечислений enum COLOR {BLACK, RED, GREEN }; COLOR c; c = RED; if ( c != GREEN ) { } enum DAYS1 { morning = 4, day = 3, evening = 2, night = 1 }; enum DAYS2{ morning = 1, day, evening, night }; enum DAYS3{ morning, day = 2, evening, night }; Использование структур как типа struct Student { char name[80]; int id; float stip; }; // Student st1, st2, starr[20], * pst;

LOGO Присваивание структур struct Student { char name[80]; int id; float stip; }; // Student st1, st2, starr[20], * pst; st1.name = Иванов Ваня ; st2 = st1; Анонимные объединения static union // глобальные - статические { char name[80]; long id; }; void main() { union { int number; int counter; }; counter = id; }

LOGO new и delete int * pi = new int[99]; int * pi = malloc int[99]; new (тип) new тип new тип [количество] delete указатель delete [] указатель delete [количество] указатель Ввод/вывод в потоки #include int main() { cout > j; return 0; }

LOGO Использование namespace namespace A { int i; int j; }; namespace B { int i; int j; }; int i = B::i + A::j; using namespace A; i = i + 88; j = j + 99; #include "stdafx.h" #include using namespace std; int _tmain(int argc, _TCHAR* argv[]) { cout