Скачать презентацию Объектноориентированное программирование на С Литература Ø Ø Скачать презентацию Объектноориентированное программирование на С Литература Ø Ø

Лекция1. oop_cpp.ppt

  • Количество слайдов: 17

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

Литература Ø Ø Ø Страуструп Б. Язык программирования С++, спец. изд. /Пер. с англ. Литература Ø Ø Ø Страуструп Б. Язык программирования С++, спец. изд. /Пер. с англ. – М. ; СПб. : «Бином» - «Невский Диалект» , 2001 г. -1099 с. , ил. Павловская Т. А. С/С++. Программирование на языке высокого уровня. – СПб. : Питер, 2003. -461 с. , ил. Еккель Б. Философия С++ Фейсон Т. Объектно-ориентированное программирование на Borland C++ 4. 5. – К. : Диалектика, 1996. – 544 с. , ил. Подбельский В. В. Язык С++ М. : Финансы и статистика, 1996. www. intuit. ru – Фридман А. Л. Язык программирования Си++

Введение Разработчик – Страуструп Б. , Bell Labs. Предшественник – С (1979), Simula-67, Smalltalk Введение Разработчик – Страуструп Б. , Bell Labs. Предшественник – С (1979), Simula-67, Smalltalk Ø Дата создания – 1997 Ø Международный стандарт - ISO/IEC 14882 Ø Ø l l www. ncits. org - американский национальный комитет по стандартам в информационных технологиях http: //www. vniis. ru - ВНИИ Сертификации ftp: //ftp. research. att. com/dist/c++std/WP/CD 2/ http: //www/research. att. com/~bs/bs_faq. html

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

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

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

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

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

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

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

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

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

Ø Модификатор const Ø Перегрузка функций int sqrt(int x); float sqrt(float x); double sqrt(double Ø Модификатор const Ø Перегрузка функций int sqrt(int x); float sqrt(float x); double sqrt(double x); Сигнатура – число и типы входных параметров #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 #define abs(a) (a>0? a: -a) int x = 2, b = abs(x++); Ø Вставляемые функции void swap(int *x, Ø Ссылки { int t = *x; int y=16; *x=*y; *y = t; int &x = y; } cout << x; void swap(int x, int y) { y = 12; cout x; int t = << x << “ “ << y; x=y; y = t; } int inline *y) int abs(int a) {return a>0? a: -a; } int r=abs(x++); void swap(int &x, int &y) { int t = x; x=y; y = t; }

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

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

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

Ø Использование namespace A { int i; int j; }; namespace B { int Ø Использование 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 << "Hello, World!"; return 0; }