Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Об'єктна-орієнтоване програмування




Об'єктно-орієнтоване програмування. Властивості, методи та події.

Лекція №11

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

Історія

ООП виникло в результаті розвитку ідеології процедурного програмування, де дані і підпрограми (процедури, функції) їх обробки формально не пов'язані. Для подальшого розвитку об'єктно-орієнтованого програмування часто велике значення мають поняття події (так зване подієво-орієнтоване програмування) та компонента (компонентне програмування, КОП).

Формування КОП від ООП сталося, як сталося формування модульного від процедурного програмування: процедури сформувалися в модулі - незалежні частини коду до рівня збірки програми, так об'єкти сформувалися в компоненти - незалежні частини коду до рівня виконання програми. Взаємодія об'єктів відбувається за допомогоюповідомлень. Результатом подальшого розвитку ООП, мабуть, буде агентно-орієнтоване програмування, де агенти - незалежні частини коду на рівні виконання. Взаємодія агентів відбувається за допомогою зміни середовища, в якій вони знаходяться.

Мовні конструкції, конструктивно не відносяться безпосередньо до об'єктів, але супутні їм для їх безпечної (виняткові ситуації, перевірки) і ефективної роботи, інкапсулюються від них в аспекти (в аспектно-орієнтованому програмуванні). Суб'єктно-орієнтоване програмування розширює поняття об'єкт шляхом забезпечення більш уніфікованого і незалежного взаємодії об'єктів. Може бути перехідною стадією між ООП та агентно програмування в частині самостійного їх взаємодії.

Першою мовою програмування, в якому були запропоновані принципи об'єктної орієнтованості, була Симула. У момент своєї появи (в 1967), ця мова програмування запропонував воістину революційні ідеї: об'єкти, класи, віртуальні методи та ін, однак це все не була сприйнята сучасниками як щось грандіозне. Тим не менше, більшість концепцій були розвинені Аланом Кейем і Деном Інгаллс в мові Smalltalk. Саме він став першим широко поширеним об'єктно-орієнтованою мовою програмування.

В даний час кількість прикладних мов програмування (список мов), що реалізують об'єктно-орієнтовану парадигму, є найбільшим по відношенню до інших парадигм. В області системного програмування досі застосовується парадигма процедурного програмування, і загальноприйнятою мовою програмування є мова C. Хоча при взаємодії системного і прикладного рівнів операційних систем помітний вплив стали надавати мови об'єктно-орієнтованого програмування. Наприклад, однією з найбільш поширених бібліотек Мультиплатформність програмування є об'єктно-орієнтована бібліотека Qt, написана мовою C + +.

Основні поняття

Абстракція (Абстрагування) - це спосіб виділити набір значущих характеристик об'єкта, виключаючи з розгляду незначущі. Відповідно, абстракція - це набір всіх таких характеристик.

Інкапсуляція (Інкапсуляція) - це властивість системи, що дозволяє об'єднати дані і методи, що працюють з ними, в класі і приховати деталі реалізації від користувача.

Спадкування (Спадкування) - це властивість системи, що дозволяє описати новий клас на основі вже існуючого з частково або повністю позичає функціональністю. Клас, від якого здійснюється спадкування, називається базовим, батьківським або суперкласом. Новий клас - нащадком, спадкоємцем або похідним класом.

Поліморфізм (Поліморфізм) - це властивість системи використовувати об'єкти з однаковим інтерфейсом без інформації про тип і внутрішній структурі об'єкта.

Клас є описуваної на мові термінології (простору імен) вихідного коду моделлю ще не існуючої сутності (об'єкта). Фактично він описує пристрій об'єкта, будучи свого роду кресленням. Кажуть, що об'єкт - це екземпляр класу. При цьому в деяких виконуючих системах клас також може представлятися деяким об'єктом при виконанні програми за допомогою динамічної ідентифікації типу даних. Зазвичай класи розробляють таким чином, щоб їх об'єкти відповідали об'єктам предметної області.

Об'єкт. Сутність в адресному просторі обчислювальної системи, що з'являється при створенні екземпляра класу або копіювання прототипу (наприклад, після запуску результатів компіляції та зв'язування вихідного коду на виконання).

Прототип - це об'єкт-зразок, за образом і подобою якого створюються інші об'єкти. Об'єкти-копії можуть зберігати зв'язок з батьківським об'єктом, автоматично успадковуючи зміни в прототипі; ця особливість визначається в рамках конкретного мови.

Об'єктно-орієнтовані мови

Багато сучасні мови спеціально створені для полегшення об'єктно-орієнтованого програмування. Однак слід зазначити, що можна застосовувати техніки ООП і для не-об'єктно-орієнтованої мови і навпаки, застосування об'єктно-орієнтованої мови зовсім не означає, що код автоматично стає об'єктно-орієнтованим.

Сучасний об'єктно-орієнтована мова пропонує, як правило, наступний обов'язковий набір синтаксичних засобів:

· Оголошення класів з полями (даними - членами класу) і методами (функціями - членами класу).

· Механізм розширення класу (успадкування) - породження нового класу від існуючого з автоматичним включенням всіх особливостей реалізації класу-предка до складу класу-нащадка. Більшість ООП-мов підтримують тільки одиничне успадкування.

· Поліморфні змінні і параметри функцій (методів), що дозволяють привласнювати однієї і тієї ж змінної екземпляри різних класів.

· Поліморфну ​​поведінку екземплярів класів за рахунок використання віртуальних методів. У деяких ООП-язиках все методи класів є віртуальними.

Мабуть, мінімальним традиційним об'єктно-орієнтованою мовою можна вважати мову Оберон, який не містить ніяких інших об'єктних засобів, крім перерахованих вище (у вихідному Обероне навіть немає окремого ключового слова для оголошення класу, а також відсутні явно описувані методи, їх замінюють поля процедурного типу). Але більшість мов додають до зазначеного мінімальному набору ті чи інші додаткові засоби. У їх числі:

· Конструктори, деструктори, фіналізатори.

· Властивості (аксессор).

· Індексатори.

· Інтерфейси (наприклад, в Java використовуються також як альтернатива множинного спадкоємства - будь-який клас може реалізувати скільки завгодно інтерфейсів).

· Перевизначення операторів для класів.

· Засоби захисту внутрішньої структури класів від несанкціонованого використання ззовні. Зазвичай це модифікатори доступу до полів і методів, типу public, private, зазвичай також protected, іноді деякі інші.

Частина мов (іноді званих "чисто об'єктними") цілком побудована навколо об'єктних засобів - у них будь-які дані (можливо, за невеликим числом винятків у вигляді вбудованих скалярних типів даних) є об'єктами, будь-який код - методом якого класу, і неможливо написати програму, в якій не використовувалися б об'єкти. Приклади подібних мов - Smalltalk, Python, Java, C #, Ruby, AS3. Інші мови (іноді використовується термін "гібридні") включають ООП-підсистему в початково процедурний мова. У них існує можливість програмувати, не звертаючись до об'єктним засобам. Класичні приклади - C + +, Delphi і Perl.

Існування ООП можливе завдяки трьом основним парадигмам на яких базується саме ООП:

- Інкапсуляція. Також відома як приховування даних. Зміст інкапсуляції полягає у приховуванні від зовнішнього користувача деталей реалізації об'єкта, замість цього надаючи інтерфейс взаємодії з ним.

- Успадкування. Це означає, що об'єкти (класи) можуть переймати деякі властивості у своїх прабатьків. Як? Це залежить від тієї мови, на якому пишеться програма. Однак у будь-якому випадку картина та ж: це призводить до повторного використання вже написаного одного разу коду. Підкласи успадковують атрибути та поведінку своїх батьківських класів, і можуть мати нові власні атрибути. Тобто утворюється ієрархія з класів, де від основного класу(так званого, предка) походять усі інші класи.

- Поліморфізм означає залежність поведінки від класу, в якому ця поведінка викликається, тобто, два або більше класів можуть реагувати по різному на однакові повідомлення. Це спричинене зміною в одного з класів якогось методу(процедури, функції), шляхом запису іншого алгоритму. Як приклад, деяка комп'ютерна програма при натисканні клавіші Esc завершить роботу, інша ж програма після натискання кнопки Esc тільки відкриє меню даної програми.




Поделиться с друзьями:


Дата добавления: 2015-07-13; Просмотров: 1855; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.014 сек.