ООП_Лекция 1_Все_введение.ppt
- Количество слайдов: 22
Лекция 15 OOP Программирование
Начало ЭРЫ ООП Первым, кто указал на необходимость построения систем в виде структурированных абстракций, был Дейкстра. Позднее Парнас ввел идею скрытия информации, в 70 -х годах ряд исследователей, главным образом Лисков и Жиль , Гуттаг и Шоу , разработали механизмы абстрактных типов данных. Хоар дополнил эти подходы теорией типов и подклассов.
История и идеология С++ q Язык С++ "С с классами “ - 80 -е годы ". q Рабочая версия С++ - 1983 г. q Ключевые понятия класс и объект. q Класс – это пользовательский тип данных, описывающий некоторый объект из предметной области решаемой задачи. q Объект – это экземпляр класса Объект существует в памяти, класс же является шаблоном, по которому создается объект.
Основные принципы ООП q Абстрагирование и Инкапсуляция - класс рассматривается как единство свойств и действий. Инкапсуляцией называется сокрытие внутреннего поведения и свойств класса. □ Свойства класса - переменные класса, (статика класса) □ Действия, которые совершаются над классами – методы (функции) класса (динамика класса). q Наследование - возможность класса порождать себе подобные классы. q Полиморфизм (много образов) – это свойство функции класса менять свою сущность в зависимости от внешних воздействий. функция с одним и тем же именем может выполнять различные действия в разных частях программы. Может быть много функций с одинаковыми именами.
КЛАСС q Класс - задается при помощи "описания класса” □ описание переменных состояния □ описание сообщений (протокол доступа к объектам данного класса). q Классы организуются иерархически □ Подклассы наследуют свойства породивших их классов. □ Класс - это некоторая абстракция. • Абстрагирование – это принцип игнорирования второстепенных аспектов предмета с целью выделения главных.
КЛАСС Объект - это определенный экземпляр, относящийся к данному классу. Сообщение - это специальный символ, идентификатор или ключевое слово. Выполняемое данным объектом действие. Сообщения - ВЫЗОВЫ функций Метод - реакция объекта на сообщение. Метод существует для каждого сообщения. Методы - определения (реализации) функций. МЕТОД – это ФУНКЦИЯ.
Правила доступности членов класса q "public” все члены общедоступны, до другого описания доступности. q "protected" - доступны только дружественным функциям и классам, и классам наследникам данного класса. q "private" ограничивает круг "посвященных" только дружественными функциями и классами. Дружественные функции и классы – это функции и классы, упомянутые внутри описания класса с описателем friend
Объектно-ориентированное программирование - это методология программирования использует в качестве базовых элементов объекты, а не алгоритмы каждый объект является экземпляром какого-либо определенного класса классы организованы иерархически
ООП язык программирования является объектноориентированным тогда и только тогда, когда выполняются следующие условия q Поддерживаются объекты, то есть абстракции данных, имеющие интерфейс в виде именованных операций и собственные данные, с ограничением доступа к ним. q Объекты относятся к соответствующим типам (классам). q Типы (классы) могут наследовать атрибуты супертипов (суперклассов)"
Объектно-ориентированное проектирование - это методология проектирования, соединяющая в себе процесс объектной декомпозиции и приемы представления логической и физической, а также статической и динамической моделей проектируемой системы объектная модель имеет четыре главных элемента: абстрагирование; инкапсуляция; модульность; иерархия. без любого из них модель не будет объектно-ориентированной
Абстрагирование (интерфейс) q Абстракция фокусируется на существенных с точки зрения наблюдателя характеристиках объекта.
Инкапсуляция (реализация) В то время, как абстракция "помогает людям думать о том, что они делают", инкапсуляция "позволяет легко перестраивать программы" (реализация) Инкапсуляция скрывает детали реализации объекта Скрывается от пользователя все, что принадлежит конкретному классу и не должно использоваться извне. При изменении скрытой части не “страдают” другие части программы. Внешне класс не изменяется.
Проектирование класса ЧЛЕНЫ КЛАССА Переменные ФУНКЦИИ PRIVATE закрытые PUBLIC общедоступные q Класс вектор q Переменные (свойства) - x, y, z – координаты по трем осям (закрыты для доступна вне класса) q Функции (методы) □ задание координат, □ определение длины вектора, □ получение значений для каждой из координат, □ изменение значений каждой координаты.
Пример class vector { private: double x, y, z; public: set(double a, double b, double c){x=a; y=b; z=c; } put. X(double a){x=a; } put. Y(double a){y=a; } put. Z(double a){z=a; } double get. X() {return x; } double get. Y() {return y; } double get. Z() {return z; } double mod(void); }; //описание функции вне класса double vector : : mod(void) {return sqrt(x*x+y*y+z*z); } имя класса
Пример class vector // описание класса {private: double x, y, z; public: set(double a, double b, double c){x=a; y=b; z=c; } print_v(){ cout<<" [ "<
Полиморфизм. Конструкторы. class vector {public: double x, y, z; char *name; double mod(void){return sqrt(x*x+y*y+z*z); } void print_v(){cout<
Вызов конструкторов объект name void main(void) {vector c("c"), b("b"), f; c. set(0. , 1. , 0. ); b. set(c); vector g(b); g. name="Next Vector" ; vector(void) {name="NOname"; set(0. 0, 0. 0); } x y z c c 0 0 0 1 b b 0 0 0 1 f NOname 0 0 0 g Next. Vector noname 0 1 0 vector(double A, double B, double C) { x=A; y=B; z=C; name="noname"; } void set(double a, double b, double c) vector(char *s) void set(vector &a) {name=s; set(0. 0, 0. 0); } {x=a. x; y=a. y; z=a. z; } { x=a; y=b; z=c; }
Два вида ООП q Эпизодическое объектно-ориентированное программирование. □ Класс - тип данных, отсутствующий в языке. □ Структура программы остается традиционной " от функции к функции". □ Пример – класс МАТРИЦА, класс КОМПЛЕКСНЫЙ, класс ДАТА. q Тотальное программирование " от класса к классу". □ Любая функция - метод для объекта некоторого класса. □ Kласс создается для описания новых физических предметов или абстрактных понятий. □ Каждый новый шаг в разработке алгоритма - разработка нового класса на базе уже существующих. □ Программа - объект некоторого (одного) класса с единственным методом run (выполнить). q Именно этот переход (а не понятия класса и объекта, как таковые) создает психологический барьер перед программистом, осваивающим технологию ООП.
Пример: класс ДАТА //---------------------------#include
Методы класса static int mm[] = {0, 31, 28, 31, 30, 31}; void date: : Plus. Data(int n){ // дата + n дней while(n-- !=0) Next. Data(); } int date: : Test. Data(){ // Проверка на корректность if (month ==2 && day==29 && year %4 ==0) return 1; if (month ==0 || month > 12 || day ==0 || day >mm[month]) return 0; return 1; } //------ Следующая дата -------------void date: : Next. Data(){ day++; if (day <= mm[month]) return; if (month ==2 && day==29 && year %4 ==0) return; day=1; month++; if (month !=13) return; month=1; year++; }
Основная программа void main(){ date a; do { printf("input day month year "); fflush(stdin); scanf("%i%i%i", &a. day, &a. month, &a. year); fflush(stdin); } while(a. Test. Data() ==0); printf("%d-%d-%d ", a. day, a. month, a. year); a. Plus. Data(17); printf("+ 17 = %d-%d-%dn", a. day, a. month, a. year); getchar(); }
Задание q Добавить в класс 3 конструктора с параметрами 1. число, месяц, год 2. объект класса дата 3. только год q Добавить в класс 2 метода печати даты 1. Число – месяц прописью – год 2. Число – номер месяца-год q Добавить в класс метод уменьшения даты на n дней


