Історія ООП

Матеріал з Вікі ЦДУ
Перейти до: навігація, пошук

Об'єктно-орієнтована парадигма програмування не нова. Її витоки сягають Сімуле-67, хоча перша повна реалізація була в Smalltalk-80. ООП (Об'єктно-орієнтоване програмування) стало популярним в другій половині 80-х у таких різних мовах, як C++, Objective C (інше розширення C), Object і Турбо Паскаль (Turbo Pascal), CLOS (ГО-розширення Ліспу ), Eiffel, Ада (в її останніх втіленнях) і недавно - в Джаві (Java).

Ми будемо розглядати основу ООП на мові C++ та досить схожій на неї мові PHP, іноді Обджект Паскалі (Object Pascal) і Джава (Java) та інші мови.

Принципи ООП:

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

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

Алан Кей свого часу вивів п'ять основних рис мови Smalltalk - першї вдалої ОО мови:

  1. Усе є об'єктом. Об'єкт як зберігає інформацію, так і здатний її перетворювати. У принципі будь-який елемент розв'язуваної задачі (будинок, собака, послуга і т. д.) може являти собою об'єкт. Об'єкт можна уявити собі як швейцарський ніж: він є набором різних ножів і «откривашек» (зберігання), але в той же самий час їм ми можемо різати або відкривати що-небудь (перетворення).
  2. Програма - сукупність об'єктів, що вказують один одному що робити. Для звернення до одного об'єкта інший об'єкт «посилає йому повідомлення». Як варіант можливий і «відповідь». Програму можна уявити собі як сукупність приміром 3 об'єктів: письменника, ручки і аркуша паперу. Письменник «посилає повідомлення» ручці, яка у свою чергу «посилає повідомлення» аркушу паперу - в результаті ми бачимо текст (посил повідомлення від аркуша до письменника).
  3. Кожен об'єкт має свою власну «пам'ять» складається з інших об'єктів. Таким чином програміст може приховати складність програми за досить простими об'єктами. Приміром будинок (досить складний об'єкт) складається з дверей, кімнат, вікон, проводки та опалення. Двері в свою чергу може складатися з власне двері, ручки, замку і петель. Проводка так-же складається з проводів, розеток і приміром щитка.
  4. У кожного об'єкта є тип. Іноді тип називають ще й класом. Клас (тип) визначає які повідомлення об'єкти можуть надсилати один одному.
  5. Всі об'єкти одного типу можуть отримувати однакові повідомлення. Приміром у нас є 2 об'єкти: синя і червона гуртки. Обидві різні за формою і матеріалом. Але з обох ми можемо пити (чи не пити, якщо вони порожні). У даному випадку гуртка - це тип об'єкта.

Самое лаконичное описание объекта предложил Буч: «Объект обладает состоянием, поведением и индивидуальностью».