Об’єктно-орієнтоване проектування програмних систем. Послідовність розробки програмного продукту на основі об’єктноорієнтованого підходу, страница 4

Що ж таке об'єктно-орієнтоване програмування (object-oriented programming, OOP)? В класичній роботі Греді Буча [1] ООП визначається наступним чином: 

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

У даному визначенні можна виділити три частини: 1) OOP використовує як базові елементи об'єкти, а не алгоритми (ієрархія "бути частиною"); 2) кожен об'єкт є екземпляром якого-небудь визначеного класу; 3) класи організовані ієрархічно. Програма буде об'єктно-орієнтованою тільки при дотриманні всіх трьох зазначених вимог. Зокрема, програмування, не засноване на ієрархічних відносинах, не відноситься до OOP, а називається програмуванням на основі абстрактних типів даних. 

Відповідно до цього визначення не всі мови програмування є об’єктноорієнтованими. Страуструп визначив так: "якщо термін об'єктно-орієнтована мова взагалі що-небудь означає, то він повинен означати мова, що має засоби гарної підтримки об’єктно-орієнтованого стилю програмування... Забезпечення такого стилю у свою чергу означає, що в мові зручно користуватися цим стилем. Якщо написання програм у стилі OOP вимагає спеціальних зусиль або воно неможливо зовсім, то ця мова не відповідає вимогам OOP". Теоретично можлива імітація об’єктно-орієнтованого програмування на звичайних мовах, таких, як стандартний Pascal і навіть COBOL або асемблер, але це украй важко. 

Підтримка успадкування (організація ієрархії) в таких мовах означає можливість установлення відносини "is-a" ("є", "це є", " - це"), наприклад, червона троянда - це квітка, а квітка - це рослина. Мови, що не мають таких механізмів, не можна віднести до об’єктно-орієнтованих, їх називають об'єктними. 

Відповідно до цього визначення об’єктно-орієнтованими мовами є Smalltalk, Object Pascal, C++ і CLOS, a Ada – об'єктна мова. Але, оскільки об'єкти і класи є елементами обох груп мов, бажано використовувати й у тих, і в інші методи об’єктно-орієнтованого проектування. 

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

Об’єктно-орієнтованепроектування - це методологія проектування, що з'єднує в собі процес об'єктної декомпозиції і прийоми представлення логічної і фізичної, а також статичної і динамічної моделей проектованої системи. 

У даному визначенні утримуються дві важливі частини: об’єктноорієнтоване проектування 1) ґрунтується на об’єктно-орієнтованій декомпозиції; 2) використовує різноманіття прийомів представлення моделей, що відбивають логічну (класи й об'єкти) і фізичну (модулі і процеси) структуру системи, а також її статичні і динамічні аспекти. 

Саме об’єктно-орієнтована декомпозиція відрізняє об’єктно-орієнтоване проектування від структурного; у першому випадку логічна структура системи відображається абстракціями у вигляді класів та об'єктів, у другому – у вигляді алгоритмів.  

Об’єктно-орієнтований аналіз. Об’єктно-орієнтований аналіз (або OOA, object-oriented analysis) спрямований на створення моделей реальної дійсності на основі об’єктно-орієнтованого світогляду. 

Об’єктно-орієнтований аналіз – це методологія, при якій вимоги до системи сприймаються з погляду класів і об'єктів, виявлених у предметній області. 

Як співвідносяться ООА, OOD і OOP? На результатах ООА формуються моделі, на яких ґрунтується OOD; OOD у свою чергу створює фундамент для остаточної реалізації системи з використанням методології OOP. 

Концептуальною базою об’єктно-орієнтованого стилю програмування – є об'єктна модель. Вона має чотири головних елементи: 

-  абстрагування; 

-  інкапсуляція;