Презентация Об'єктно-орієнтоване програмування. Принцип інкапсуляції. (Лекція 1) онлайн

На нашем сайте вы можете скачать и просмотреть онлайн доклад-презентацию на тему Об'єктно-орієнтоване програмування. Принцип інкапсуляції. (Лекція 1) абсолютно бесплатно. Урок-презентация на эту тему содержит всего 52 слайда. Все материалы созданы в программе PowerPoint и имеют формат ppt или же pptx. Материалы и темы для презентаций взяты из открытых источников и загружены их авторами, за качество и достоверность информации в них администрация сайта не отвечает, все права принадлежат их создателям. Если вы нашли то, что искали, отблагодарите авторов - поделитесь ссылкой в социальных сетях, а наш сайт добавьте в закладки.
Презентации » Устройства и комплектующие » Об'єктно-орієнтоване програмування. Принцип інкапсуляції. (Лекція 1)



Оцените!
Оцените презентацию от 1 до 5 баллов!
  • Тип файла:
    ppt / pptx (powerpoint)
  • Всего слайдов:
    52 слайда
  • Для класса:
    1,2,3,4,5,6,7,8,9,10,11
  • Размер файла:
    546.50 kB
  • Просмотров:
    59
  • Скачиваний:
    0
  • Автор:
    неизвестен



Слайды и текст к этой презентации:

№1 слайд
Бублик Володимир Васильович
Содержание слайда: Бублик Володимир Васильович Об'єктно-орієнтоване програмування Частина 1. Об'єктне програмування. Лекція 1. Принцип інкапсуляції Лекції для студентів 2 курсу

№2 слайд
Парадигми програмування
Содержание слайда: Парадигми програмування (повторення)

№3 слайд
Погляд в майбутн
Содержание слайда: Погляд в майбутнє Програмувати, думаючи про нові застосування (reuse) Узагальнене програмування дає нові застосування програмних текстів Об'єктне і ієрархічне − нові застосування об'єктних кодів (об'єктів і класів)

№4 слайд
нкапсуляц я П д нкапсуляц ю
Содержание слайда: Інкапсуляція Під інкапсуляцією розумітимемо спосіб збирання певних елементів в одне ціле з метою утворення нової сутності (або абстракції нового рівня) Команди інкапсульовані в функцію Поля інкапсульовані в структуру struct Point { double _x; double _y; }

№5 слайд
Дан функц в структурах як С
Содержание слайда: Дані і функції в структурах (як С моделює С++) Чи можна інкапсулювати функцію в структуру? Так, можна за допомогою указника функції struct QuasiPoint { double _x; double _y; // інкапсуляція указника на функцію double (*f)(QuasiPoint, QuasiPoint); }; Як викликати f?

№6 слайд
н ц ал зац я та виклик
Содержание слайда: Ініціалізація та виклик інкапсульованої функції double distance (QuasiPoint, QuasiPoint); QuasiPoint u={0, 1, distance}; cout<<u.f(u,v)<<endl;

№7 слайд
н ц ал зац я та виклик
Содержание слайда: Ініціалізація та виклик інкапсульованої функції double phi (QuasiPoint, QuasiPoint); QuasiPoint v={1, 1, phi}; cout<<v.f(u,v)<<endl;

№8 слайд
нкапсуляц я в об кт Це добре
Содержание слайда: Інкапсуляція в об'єкті Це добре чи зле, що в одній і тій же структурі функція-член структури в різних екземплярах позначає різні дії? u.f(a,b) відстань від a до b v.f(a,b) кут між векторами 0a і 0b Як засобами С зробити так, щоб для всіх екземплярів QuasiPoint указник показував завжди одну й ту ж функцію?

№9 слайд
Статичний указник на функц ю
Содержание слайда: Статичний указник на функцію struct QuPoStaPtr { double _x; double _y; // інкапсуляція указника на функцію в класі static double (*f)(QuPoStaPtr, QuPoStaPtr); }; // Один указник для всіх об’єктів double (* QuPoStaPtr ::f) (QuPoStaPtr, QuPoStaPtr) = distance; cout<< QuPoStaPtr::f(u,v)<<endl;

№10 слайд
нкапсуляц я указника на функц
Содержание слайда: Інкапсуляція указника на функцію в класі Діаграма класу, а не об'єкта

№11 слайд
Створення видалення
Содержание слайда: Створення і видалення екземпляру структури struct PreWrappedVector { static const int _n; double * _v; }; // Функція створення вектора a._v void construct (PreWrappedVector& a); // Функція видалення вектора a._v void destroy (PreWrappedVector& a);

№12 слайд
Створення видалення
Содержание слайда: Створення і видалення екземпляру структури // Типовий сценарій обробки PreWrappedVector v; // Хто гарантує наявність конструктора і // створення вектора до першого вживання? construct(v); ………………………… destroy(v); // Хто гарантує наявність деструктора і видалення // вектора після завершення його обробки?

№13 слайд
Конструктор деструктор struct
Содержание слайда: Конструктор і деструктор struct WrappedVector { static const int _n; double * _v; // Це конструктор, він створює об'єкт // при його визначенні WrappedVector(); // Це деструктор, він автоматично видаляє об'єкт ~WrappedVector(); };

№14 слайд
Реал зац я конструктора
Содержание слайда: Реалізація конструктора WrappedVector::WrappedVector() { cout<<"Constructor WrappedVector"<<endl; // 1. Виділити пам'ять _v = new double[_n]; // 2. Можливо обробити аварійну ситуацію // 3. Ініціалізувати масив for (int i=0; i<_n; i++) _v[i] = 0; return; }

№15 слайд
Реал зац я деструктора
Содержание слайда: Реалізація деструктора WrappedVector::~WrappedVector() { cout<<"Destructor WrappedVector"<<endl; delete [] _v; // Чи варто обнулити указник _v? return; }

№16 слайд
Головне правило об ктного
Содержание слайда: Головне правило об'єктного програмування Кожній структурі надаються конструктор і деструктор

№17 слайд
Автоматичний виклик
Содержание слайда: Автоматичний виклик конструктора і деструктора int main() { // Визначення об'єктів приводить // до виклику конструкторів. // Ось він: WrappedVector w1, w2; …………………………………………… // Життя об'єктів завжди закінчується // автоматичним викликом їх деструкторів // ост тут: return 0; }

№18 слайд
Хто виклика конструктор
Содержание слайда: Хто викликає конструктор і деструктор? Це робить система програмування // new: конструктор; delete: деструктор int main() { WrappedVector *pw = new WrappedVector; // Створення об'єкту: неявний виклик конструктора ………………………………………………… // Видалення об'єкту: неявний виклик деструктора delete pw; return 0; }

№19 слайд
Конструктор деструктор за
Содержание слайда: Конструктор і деструктор за замовчуванням Чи мала б структура PreWrappedVector конструктора і деструктора, якщо їх не визначити явно? struct PreWrappedVector { static const int _n; double * _v; };

№20 слайд
Конструктор деструктор за
Содержание слайда: Конструктор і деструктор за замовчуванням Так! Компілятор генерує порожні конструктор і деструктор для кожної структури, яка не має власних // Конструктор за замовчуванням PreWrappedVector:: PreWrappedVector(){ }; // Деструктор за замовчуванням PreWrappedVector:: ~PreWrappedVector(){ }; // Краще б їх не було, але так досягається // сумісність С і С++

№21 слайд
Друге правило об ктного
Содержание слайда: Друге правило об'єктного програмування Ніколи не користується конструкторами за замовчуванням, згенерованими системою програмування Чому? ВВ поставить двійку Визначивши власні конструктор і деструктор ви повністю контролюєте створення і видалення ваших об'єктів, а не передоручаєте це комусь (віддаєте дітей в дитячий будинок)

№22 слайд
Дан -члени структур атрибути
Содержание слайда: Дані-члени структур (атрибути) і функції(методи) struct Point { // Атрибути double _x, _y; // Методи Point (double x=0, double y=0): _x(x),_y(y) { }; ~Point(){ }; // Функції доступу до атрибутів double& x() {return _x;} double& y() {return _y;} };

№23 слайд
Виклик конструктора з
Содержание слайда: Виклик конструктора з параметрами // Замість Point a = Point(1,2); // пишемо скорочено Point a1(1,2); Point b = Point(1); Point b1(1); Point c = Point(); Point c1;

№24 слайд
Нав що потр бн функц доступу?
Содержание слайда: Навіщо потрібні функції доступу? Для того щоб контролювати всі випадки використання атрибутів у кожному об'єкті

№25 слайд
Виклик метод в Виклик метод в
Содержание слайда: Виклик методів Виклик методів відрізняється від виклику звичайних функцій // Застосувати до екземпляру а структури Point // функцію х() a.x() = 10; cout<<a.x()<<endl;

№26 слайд
Вар ант функц й доступу утил
Содержание слайда: Варіант функцій доступу: утиліти struct Point { // Атрибути double _x, _y; // Конструктор Point (double x=0, double y=0): _x(x),_y(y) { }; // Деструктор ~Point(){}; } // Утиліти доступу до атрибутів double& x(Point & a) {return a._x;} double& y(Point & a) {return a._y;}

№27 слайд
Виклик утил ти Виклик утил т
Содержание слайда: Виклик утиліти Виклик утиліт є звичайним викликом функцій // Передати до функції x() параметр a x(a) = 10; cout<<x(a)<<endl;

№28 слайд
Прямий доступ Зам сть функкц
Содержание слайда: Прямий доступ Замість функкції x(a) або методу a.x() можна було б напряму звертатися до члена структури _x a._x = 10; cout<<a._x<<endl;

№29 слайд
Для чого потр бн методи
Содержание слайда: Для чого потрібні методи доступу? struct Point { private: //закрили прямий доступ до атрибутів double _x; double _y; public: //відкрили доступ до методів Point (double x=0, double y=0): _x(x),_y(y) { }; ~Point(){}; double& x() {return _x;} double& y() {return _y;} };

№30 слайд
Права доступу Як ран ше,
Содержание слайда: Права доступу Як і раніше, кожен, хто бачить об'єкт може скористатися його відкритим методом // Застосувати до екземпляру а структури Point // відкритий метод х() a.x() = 10; cout<<a.x()<<endl;

№31 слайд
Права доступу Сам метод,
Содержание слайда: Права доступу Сам метод, завдяки своїй належності до структури сам бачить її закриту частину // Як і раніше, ім'я _х в тексті функції double& x() {return _x;} // позначає поле _х того екземпляру, // до якого застосовано функцію

№32 слайд
Права доступу Але для сторонн
Содержание слайда: Права доступу Але для сторонніх атрибути стали невидимими int main () { Point a; a._x = 10; cout<<a._x<<endl; return 0; } double& x(Point & a) {return a._x;} double& y(Point & a) {return a._y;}

№33 слайд
Клас class Point private
Содержание слайда: Клас class Point { private: //закрита частина класу double _x; double _y; public: //відкрита частина класу Point (double x=0, double y=0): _x(x),_y(y) { }; ~Point(){}; double& x() {return _x;} double& y() {return _y;} };

№34 слайд
Структури класи Структуру,
Содержание слайда: Структури і класи Структуру, яку поділено на відкриту і закриту частини називатимемо класом. Структуру розглядатимемо як архаїзм від С. В структурі все звичайно вважається відкритим. Екземпляри структур і класів називатимемо об'єктами. Кожен об'єкт створюється в результаті виклику конструктора, а видаляється деструктором. Структура може не мати власних конструктора і деструктора. Ваші класи завжди повинні мати власні конструктори (можливо декілька) і деструктор (не забудьте про ВВ).

№35 слайд
Клас vs. структура Правила
Содержание слайда: Клас vs. структура Правила доступу ― це поділ класу на відкриту (public) і закриту (private) частини. Закрита частина доступна лише з середини класу, відкрита ― звідусіль. Формально клас відрізняється від структури лише правилом замовчування прав доступу: Все, що явно не відкрите в класі, вважається закритим Все, що явно не закрите в структурі, вважається відкритим Структури звичайно вживають як сукупність даних, класи ― як сукупність даних (атрибутів) і функцій-членів класу (методів)

№36 слайд
Повторення. Два способи
Содержание слайда: Повторення. Два способи запису ініціалізації double x = 1.0; double y = x; double u = 2.0; // але можна й так double v(u); // це те ж саме, що // double v = u;

№37 слайд
н ц ал зац я атрибут в в
Содержание слайда: Ініціалізація атрибутів в конструкторі class Complex { private: double _re; double _im; public: Complex (double re, double im): // ініціалізація атрибутів (добра!) _re(re), _im(im) { }; }

№38 слайд
н ц ал зац я атрибут в в
Содержание слайда: Ініціалізація атрибутів в конструкторі class Complex { private: double _re; double _im; public: Complex (double re, double im): // ініціалізація атрибутів (погана!) { _re = re; _im = im; };

№39 слайд
Приклад . Person.h class
Содержание слайда: Приклад 1. Person.h class Person { private: const int _len; char * _name; public: // реалізація винесена в срр-файл Person(int, char []); ~Person(); };

№40 слайд
Приклад . Person.cpp
Содержание слайда: Приклад 1. Person.cpp (конструктор) Person::Person (int len, char name[]): _len(len), _name (new char[_len+1]); { for (int i=0; i<_len; i++) _name[i] = name[i]; _name[_len]='\0'; cout<<"A person "<<_name<<" was created"<<endl; return; }

№41 слайд
Приклад . Person.cpp
Содержание слайда: Приклад 1. Person.cpp (деструктор) Person::~Person() { cout<<"A person "<<_name<<" was deleted"<<endl; delete [] _name; // _name = 0; зайве, оскільки сам об'єкт, // а значить і його атрибут _name, // припиняють своє існування return; }

№42 слайд
Приклад . WrappedVector.h
Содержание слайда: Приклад 2. WrappedVector.h class WrappedVector { private: static const int _n; double * _v; public: WrappedVector(); ~WrappedVector(); };

№43 слайд
Приклад . WrappedVector.cpp
Содержание слайда: Приклад 2. WrappedVector.cpp const int WrappedVector::_n = 100; WrappedVector::WrappedVector(): _v (new double[_n];) { cout<<"Constructor WrappedVector"<<endl; for (int i=0; i<_n; i++) _v[i] = 0; return; }

№44 слайд
Приклад . WrappedVector.cpp
Содержание слайда: Приклад 2. WrappedVector.cpp WrappedVector::~WrappedVector() { cout<<"Destructor WrappedVector"<<endl; delete [] _v; return; }

№45 слайд
Селектори модиф катори Як
Содержание слайда: Селектори і модифікатори Як добратися до атрибутів, якщо вони закриті? ― За допомогою методів доступу: селекторів і модифікаторів Два в одному double& x() { return _x;} 2а. Селектор double getX() { return _x; }; 2b. Модифікатор void setX (double x) { _x = x;}

№46 слайд
Приклад . WrappedVector.
Содержание слайда: Приклад 2. WrappedVector. Селектор-модифікатор class WrappedVector { private: static const int _n; double * _v; public: class BadIndex { }; double& getSet (int i); WrappedVector(); ~WrappedVector(); };

№47 слайд
Приклад . WrappedVector.
Содержание слайда: Приклад 2. WrappedVector. Селектор-модифікатор double& WrappedVector::getSet (int i) { if ((i<0) !! (i>=_len)) throw BadIndex; return _v[i]; } WrappedVector u; u.getSet(0) = 500; cout<<u.getSet(0)<<endl; //А хотілося б u[i]. ― Далі буде

№48 слайд
Приклад . WrappedVector.
Содержание слайда: Приклад 2. WrappedVector. Селектор і модифікатор double WrappedVector::get (int i) { if ((i<0) !! (i>=_len)) throw BadIndex; return _v[i]; } void WrappedVector::set (int i, double x) { if ((i<0) !! (i>=_len)) throw BadIndex; _v[i] = x; return; }

№49 слайд
Чому в ддавати перевагу
Содержание слайда: Чому віддавати перевагу Окремий модифікатор дозволяє контролювати кожну спробу зміни значення атрибуту, а селектор ― кожне використання його значення. Модифікатор-селектор не відрізняє зміну значення від читання; порушує інкапсуляцію (як?) Але кожна мова програмування пропонує оператор індексування [ ] ― по суті селектор-модифікатор.

№50 слайд
Що вживати клас чи структуру?
Содержание слайда: Що вживати: клас чи структуру? Слідкуємо за створенням і видаленням об'єктів, регламентуємо доступ до його частин ― вживаємо клас. Обов'язкові конструктор(и) і деструктор, модифікатори і селектори для кожного призначеного для використання зовні атрибуту. Правило доступу: Атрибути, як правило, закриті; методи можуть бути відкриті. В інших випадках можна обходитися структурами

№51 слайд
Об кт екземпляр класу Об кт
Содержание слайда: Об'єкт – екземпляр класу Об'єкт характеризується ідентичністю, станом і поведінкою. Ідентичність ― це властивість, що відрізняє об'єкт від усіх інших об'єктів. Об'єкт набуває ідентичності при створенні його конструктором і втрачає її при видаленні його деструктором. Стан визначається набором значень атрибутів об'єкту. Поведінка визначається набором методів.

№52 слайд
Висновок Вивчили Як створити
Содержание слайда: Висновок Вивчили Як створити об'єкт в заданому початковому стані Як змінити стан об'єкту Як визначити стан об'єкту Як видалити об'єкт Наступна задача: наділити об'єкти поведінкою

Скачать все slide презентации Об&apos;єктно-орієнтоване програмування. Принцип інкапсуляції. (Лекція 1) одним архивом: