Одиницею інкапсуляції в OOD є об'єкт.
Спадкоємство дозволяє створювати ієрархію класів, починаючи з деякого первинного базового класу (предка) і продовжуючи складнішими, такими, що включають (що успадковують) елементи попередніх класів (нащадків або похідних класів).
Будь-який клас може бути породжений від іншого класу. Для цього при його оголошенні вказується ім'я класу-батька:
Tchildclass = class(Tparentclass) (мова ObjectPascal)
Створений клас автоматично успадковує поля, методи і властивості свого батька і може доповнювати їх новими. Таким чином, принцип спадкоємства забезпечує поетапне створення складних класів і розробку власних бібліотек класів. Клас, поведінка якого успадковується, називається суперкласом, а клас, який успадковує поведінку, називається підкласом.
Принцип спадкоємства призводить до створення дерева з гілками класів, що постійно розростається. Кожен нащадок доповнює можливості свого батька новими і передає їх своїм нащадкам.
Поліморфізм - це властивість споріднених класів вирішувати схожі по сенсу проблеми різними способами. Для різних споріднених класів можна задати єдиний образ дії (наприклад, вивід на екран будь-якої геометричної фігури). Потім для кожного конкретного класу складається своя підпрограма, що виконує цю дію безпосередньо для нього (відображення крапки відрізняється від відображення лінії і так далі), причому всі ці підпрограми повинні мати одне ім'я. Коли потрібно буде відобразити конкретну фігуру, буде вибрана зі всієї безлічі однойменних підпрограм та, яка відповідає типу конкретного об'єкту. Якщо об'єкт, що виводиться, є крапкою, то вибирається його підпрограма, якщо лінія - то її.
Таким чином, поліморфізм проводить ідею «один інтерфейс - безліч методів». Вибір конкретної дії залежить від ситуації.
Створений проект перетворюється на програмний продукт в процесі об'єктно-орієнтованого програмування - такій методології програмування, яка заснована на представленні програмного продукту у вигляді сукупності об'єктів, кожен з яких є зліпком (екземпляром) певного класу, а класи утворюють ієрархію на принципах спадкоємства. Таким чином, при об'єктно-орієнтованому підході зникає поняття виконуваної програми. Рішення поставленої задачі зводиться до побудови необхідних класів, і управління створюваними ними об'єктами-екземплярами.
Фундаментальна концепція OOP полягає в тому, що об'єкти і класи взаємодіють один з одним шляхом передачі повідомлень. Для цього необхідно, щоб об'єкти визначалися разом з повідомленнями, на які вони реагують, на відміну від процедурного стилю програмування, коли спочатку визначаються дані, які потім передаються в процедури (функції) як параметри. При цьому засобом програмування виступає одна з об'єктно-орієнтованих мов програмування.
Мова програмування називається об'єктно-орієнтованою, якщо є підтримка об'єктів як абстракцій даних, що мають інтерфейсну частину у вигляді пойменованих операцій, і захищену область локальних даних;
· всі об'єкти відносяться до відповідних типів (класам);
· класи можуть успадковувати від суперкласів.
· будь-які дані зберігаються як об'єкти, що розміщуються з автоматичним виділенням і звільненням пам'яті. Об'єкт існує в системі до тих пір, поки його можна іменувати.
Останній принцип відрізняє чисті об'єктно-орієнтовані мови такі як Smalltalk, Actor, від гібридних мов програмування, що виросли з раніше існуючих процедурних мов (ObjectPascal, C++). Ці підходи - як би крайнощі в сімействі об'єктно-орієнтованих мов. Ближче до середини лежить абсолютно новий, повністю побудований на принципах об'єктно-орієнтованої ідеології, але все таки останній принцип, що порушує, мова Java.
2. Об'єктно-орієнтовані мови програмування
Об'єктно-орієнтовані мови програмування користуються останнім часом великою популярністю серед програмістів, оскільки вони дозволяють використовувати переваги об'єктно-орієнтованого підходу не тільки на етапах проектування і конструювання програмних систем, але і на етапах їх реалізації, тестування і супроводу.
Перша об'єктно-орієнтована мова програмування Simula 67 була розроблена в кінці 60-х років в Норвегії. Автори цієї мови дуже точно вгадали перспективи розвитку програмування: їх мова набагато випередила свій час. Проте сучасники (програмісти 60-х років) опинилися не готові сприйняти цінності мови Simula 67, і вона не витримала конкуренції з іншими мовами програмування (перш за все, з мовою Fortran). Прохолодному відношенню до мови Simula 67 сприяла і та обставина, що вона була реалізована як мова, що інтерпретувалася (а не компільований), що було абсолютно неприйнятним в 60-і роки, оскільки інтерпретація пов'язана із зниженням ефективності (швидкості виконання) програм.
Але достоїнства мови Simula 67 були відмічені деякими програмістами, і в 70-і роки було розроблено велике число експериментальних об'єктно-орієнтованих мов програмування: наприклад, мови CLU, Alphard, ConcurrentPascal і ін. Ці мови так і залишилися експериментальними, але в результаті їх дослідження були розроблені сучасні об'єктно-орієнтовані мови програмування.
Огляд деяких сучасних об'єктно-орієнтованих мов програмування.
Smalltalk
Мова Smalltalk була розроблена командою XeroxPaloAltoResearchCenterLearningResearchGroupяк програмна частина Dynabook - фантастичного проекту Алана Кея. В основу були покладені ідеї Simula.. Smalltalk є одночасно і мовою програмування, і середовищем розробки програм. Це чисто об'єктно-орієнтована мова, в якій абсолютно все розглядається як об'єкти; навіть цілі числа - це класи. Услід за Simula, Smalltalk є найважливішою об'єктно-орієнтованою мовою, оскільки вона не тільки зробила вплив на подальші покоління мов програмування, але і заклала основи сучасного графічного інтерфейсу користувача, на яких безпосередньо базуються інтерфейси Macintosh, Windows і Motif.
Відомо п'ять випусків мови Smalltalk, що позначаються по року їх появи: Smalltalk-72 -74. -76, -78, -80. Реалізації 1972 і 1974 років заклали основу мови, зокрема ідею передачі повідомлень і поліморфізм, хоча механізм спадкоємства ще не з'явився. У подальших версіях повноправне громадянство отримали класи; цим досягла завершення точка зору, що все складається з об'єктів. Smalltalk-80був перенесений на багато комп'ютерних платформ.
В основу мови покладено дві прості ідеї:
· все є об'єктами;
· об'єкти взаємодіють, обмінюючись повідомленнями.
Великим недоліком Smalltalk є великі вимоги до пам'яті і низька продуктивність отриманих програм. Це пов'язано з не дуже вдалою реалізацією об'єктно-орієнтованих особливостей.
C++
Мова програмування C++ була розроблена Бьерном Страуструпом, співробітником At&tBellLaboratories. Безпосереднім попередником C++ є З withClasses, створений тим же автором в 1980 році. Мова З withClasses, у свою чергу, була створена під сильним впливом З і Simula. C++ - це в значній мірі надбудова над С. В певному значенні можна назвати C++ покращуваним З, тим З, який забезпечує контроль типів, перевантаження функцій і ряд інших зручностей. Але головне в тому, що C++ додає до З об'єктну орієнтованість.
Відомо декілька версій C++. У версії 1.0 реалізовані основні механізми об'єктно-орієнтованого програмування, такі як одиночне спадкоємство і поліморфізм, перевірка типів і перевантаження функцій. У створеній в 1989 році версії 2.0 знайшли віддзеркалення багато додаткових властивостей, що виникли на базі широкого досвіду застосування мови численним співтовариством користувачів. У версії 3.0 (1990) з'явилися шаблони і обробка виключень. C++ продовжує удосконалюватися і в даний час, так в 1998 році вийшла нова версія стандарту, що містить в собі деякі досить істотні зміни. Мова стала основою для розробки сучасних великих і складних проектів.
CommonLispObjectSystem (CLOS)
На початку 80-х років під впливом ідей об'єктно-орієнтованого програмування виникла серія нових діалектів Lisp, багато хто з яких був орієнтований на представлення знань. Успіх в стандартизації CommonLisp стимулював спроби стандартизувати об'єктно-орієнтовані діалекти в 1986 році.
Оскільки новий діалект повинен був стати надбудовою над CommonLisp, він отримав назву CommonLispObjectSystem (Об'єктна система CommonLisp) або, скорочено, - CLOS. Серйозний вплив на проект CLOS зробили мови Newflavors і Commonloops. Після дворічної роботи, в 1988 році була опублікована повна специфікація CLOS.
CLOSповинен бути:
· бути стандартним розширенням мови, що включає всі найбільш корисні властивості існуючої об'єктно-орієнтованої парадигми;
· забезпечити ефективний і гнучкий інтерфейс програміста, що дозволяє реалізувати більшість прикладних завдань;
· проектуватися як розширюваний протокол, так, щоб можна було змінювати його поведінку, тим самим стимулюючи подальші дослідження в області об'єктно-орієнтованого програмування .
Не підтримуючи безпосередньо механізм довготривалих об'єктів, CLOS має розширення з протоколом метаоб'ектів, що реалізовують цей механізм .
Ada
У 1983 році під егідою Міністерства Оборони США була створена мова Ada. Мова чудова тим, що дуже багато помилок може бути виявлено на етапі компіляції. Крім того, підтримуються багато аспектів програмування, які часто віддаються на відкуп операційній системі (паралелізм, обробка виключень). У 1995 році був прийнятий стандарт мови Ada 95, яка розвиває попередню версію, додаючи в неї объекно-ориентированность і виправляючи деякі неточності. Обидві ці мови не отримали широкого розповсюдження поза військовими і іншими великомасштабними проектами (авіація, залізничні перевезення). Основною причиною є складність освоєння мови і достатньо громіздкий синтаксис.