Об'єкт (програмування)

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до: навігація, пошук

Об'єкт в об'єктно-орієнтованому програмуванні (ООП) — ключове поняття об'єктно-орієнтованих технологій проектування та програмування[1]; втілення абстрактної моделі[2] окремої сутності (предмету або поняття), що має чітко виражене функціональне призначення в деякій області, належить до визначеного класу та характеризується своїми властивостями та поведінкою[3]. Об'єкти є базовими елементами побудови програми — програма в ООП розглядається як сукупність об'єктів, що знаходяться у визначених відношеннях та обмінюються повідомленнями.

Поняття об'єкт в програмному забезпеченні вперше було введене в мові Simula в середині 1960-х років для моделювання реальності[4].

Властивості та поведінка об'єкта[ред.ред. код]

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

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

Загалом, поведінка та властивості об'єкта визначають його ідентичність, що вирізняє об'єкт серед інших об'єктів.

Характеристики об'єктів[ред.ред. код]

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

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

Відповідно до властивостей об'єкта та його стану функції поділяються на конструктори, селектори, модифікатори та деструктори:

  • конструктори здійснюють первинну ініціалізацію об'єкта при його створенні;
  • селектори повертають значення окремих властивостей;
  • модифікатори змінюють значення окремих властивостей;
  • деструктори скидають значення властивостей при знищенні об'єкта.

Представлення об'єктів[ред.ред. код]

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

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

Приклади[ред.ред. код]

Мова C++[ред.ред. код]

// Визначення класу об'єкта:
class Person {
public:
    Person(string name, int age);
    int getName() const;
private:
    string name;
    int age;
};

// Визначення об'єкта:
Person roman("Roman", 21);

Див. також[ред.ред. код]

Примітки[ред.ред. код]

  1. What Is an Object?
  2. Бьерн Страуструп. Язык программирования С++ // Раздел 1. Абстракция данных
  3. Гради Буч. Объектно-ориентированный анализ и проектирование с примерами приложений на С++ // Глава 3. Классы и объекты
  4. Ole-Johan Dahl. The Roots of Object Orientation: The Simula Language

Джерела[ред.ред. код]

  • Хассан Гома. UML. Проектирование систем реального времени, распределенных и параллельных приложений / ДМК, М.: 2016.