- •Лекція 3. Розвиток мов та підходів до програмування. Технологія програмування. Види і типи сучасних мов програмування.
- •1. Розвиток мов та підходів до програмування.
- •2. Технологія структурного програмування .
- •2.1. Поняття структурного програмування
- •2.2. Методи структурного програмування
- •3. Технологія об'єктно-орієнтованого програмування
- •3.1. Об'єктно-орієнтований підхід
- •3.2. Основні поняття об'єктно-орієнтованого програмування
- •3.3. Принципи об'єктно-орієнтованого програмування
- •4. Кросплатформність
- •5. Види і типи сучасних мов програмування
- •5.1. Універсальні й спеціалізовані мови
- •5.2. Класифікація мов програмування за типами завдань
3.3. Принципи об'єктно-орієнтованого програмування
В основі класів лежать три фундаментальні принципи - інкапсуляція, успадкування і поліморфізм.
Інкапсуляція. Проектування програмних і технічних систем базується на тій умові, що жодна підсистема даного рівня не повинна залежати від пристрою будь-якої іншої підсистеми цього рівня. Така незалежність внутрішнього устрою одного об'єкта від внутрішнього устрою іншого називається інкапсуляцією.
Принцип інкапсуляції використовувався в технології модульного програмування. У модулі в явній формі введена інкапсуляція шляхом поділу його на секції інтерфейсу і реалізації.
В об'єктно-орієнтованому програмуванні принцип інкапсуляції використовується для ізоляції класу від інших частин програми, щоб зробити його самодостатнім для вирішення конкретного завдання. Наприклад, клас TForm в середовищі Delphi містить (інкапсулює в собі) все необхідне для створення Windows-вікна, клас ТMemo представляє собою потужний текстовий редактор, клас TTimer забезпечує роботу програми з таймером.
Інкапсуляція досягається шляхом поєднання в одному записі мови програмування структур даних з процедурами і функціями, які маніпулюють полями даних цього запису, для отримання нового типу даних - класу. Інкапсуляція дозволяє захистити по інтерфейсу доступ до полів і методів. Доступ дозволяється лише до відкритих методів та полів. Повна сукупність методів і тонкощі їхньої реалізацій є прихованими.
type TMyClass = class IntField: Integer; function MyFunc (a: Integer): Integer; procedure MyProc; end;
Шляхом використання принципу інкапсуляції з'являється можливість здійснювати обмін готовими до роботи програмними заготовками. Наприклад, бібліотека класів Delphi - це, фактично, набір цеглинок для побудови прикладних програм.
Успадкування. Число абстракцій в складних програмних системах набагато перевищує наші можливості їхнього усвідомлення. Інкапсуляція частково допомагає усунути цю перешкоду, прибираючи з поля зору внутрішній зміст абстракцій.
Однак значне спрощення розуміння складних завдань досягається за рахунок ускладнення ієрархії. Під ієрархією тут розуміється впорядкування абстракцій, розташування їх за рівнями. Ускладнення ієрархії від рівня до рівня досягається за рахунок наслідування.
Принцип успадкування оперує з поняттями "предок - нащадок" і передбачає розширення набору властивостей нащадка за рахунок прийняття всіх властивостей предка.
Будь-який клас може бути породжений від іншого класу. Для цього при його оголошенні вказується ім'я класу-батька:
TChildCIass = class (TParentClass)
Породжений клас автоматично успадковує поля, методи і властивості свого батька та може доповнювати їх новими. Таким чином, принцип наслідування забезпечує поетапне створення складних класів та розробку власних бібліотек класів.
Усі класи в Object Pascal породжені від єдиного батька - класу TObject. Цей клас не має полів і властивостей, але містить у собі методи самого загального призначення, що забезпечують весь життєвий цикл будь-яких об'єктів - від їх створення до знищення. Тому програміст не може створити клас, який не був би дочірнім класом TObject. Наступні два оголошення ідентичні.
TaClass = class (TObject) <==> TaClass = class
Принцип успадкування призводить до створення розгалуженого дерева класів. Кожен нащадок доповнює можливості свого батька новими і передає їх своїм нащадкам. Наприклад, клас TPersistent збагачує можливості свого батька TObject тим, що він вміє зберігати дані у файлі й отримувати їх з нього, в результаті це вміють робити і всі його нащадки. Клас TComponent, у свою чергу, вміє взаємодіяти із середовищем розробника і передає це вміння своїм нащадкам. TControl не тільки здатний працювати з файлами і середовищем розробника, але він ще вміє створювати та обслуговувати видимі на екрані зображення, а його нащадок TWinControl може створювати Windows-вікна тощо.
У Object Pascal можливо тільки так зване одиночне спадкування, але в реальному світі у нащадка два батьки, тому в ряді мов (наприклад, в C++) передбачений механізм множинного успадкування. Множинне успадкування більш логічне з точки зору моделювання реального світу, проте, воно ускладнює реалізацію мов програмування.
Поліморфізм. Одним із базових понять технології об'єктно-орієнтованого програмування є поліморфізм. Цей термін має грецьке походження і приблизно означає "багато форм" (poly - багато, morphos - форма).
Поліморфізм - це засіб для надання різних значень одній і тій же події в залежності від типу оброблюваних даних. Цей принцип визначає різні форми реалізації однойменної дії.
Метою поліморфізму є використання одного імені для завдання загальних для класу дій, причому кожен об'єкт або клас ієрархії має можливість по-своєму реалізувати цю дію своїм власним, відповідним для нього, кодом. Таким чином, поліморфізм є властивістю класів розв'язувати схожі за змістом проблеми різними способами.
У рамках Object Pascal поведінкові властивості класу визначаються набором методів, що входять до нього. Цей принцип використовується, коли потрібно розширити властивості класу не шляхом додавання нових методів, а шляхом добудови одного з методів чи набору методів. Змінюючи алгоритм того чи іншого методу в нащадках класу, програміст може надавати цим нащадкам відсутні у батька специфічні властивості.
Для зміни методу необхідно перекрити його в нащадку, тобто оголосити в нащадку однойменний метод і реалізувати в ньому потрібні дії. У результаті в об'єкті-батьку і об'єкті-нащадку будуть діяти два однойменних методи, що мають різну алгоритмічну основу і надають об'єктам різні властивості. У цьому суть поліморфізму об'єктів.
Крім цього, в Object Pascal поліморфізм досягається не лише механізмом спадковості й перекриття методів батька, але й їхньою віртуалізацією, що дозволяє батьківським методам звертатися до методів своїх нащадків.
