Какими основными характеристиками обладают объекты в объектно-ориентированном программировании?

«Какими основными характеристиками обладают объекты в объектно-ориентированном программировании?» — вопрос из категории ООП, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В ООП объекты характеризуются тремя фундаментальными аспектами:

  1. Состояние (State): Данные объекта, представленные значениями его полей (атрибутов). Состояние может изменяться со временем.
  2. Поведение (Behavior): Операции, которые объект может выполнять, реализованные в виде методов. Поведение определяет, как объект взаимодействует с внешним миром и изменяет свое состояние.
  3. Идентичность (Identity): Свойство, которое отличает один объект от другого, даже если их состояния идентичны. В Java идентичность часто связана с адресом в памяти (ссылкой).

Пример на Java:

public class BankAccount {
    // СОСТОЯНИЕ (поля)
    private final String accountNumber; // Уникальный идентификатор (часть идентичности)
    private double balance;
    private String ownerName;

    public BankAccount(String accountNumber, String ownerName) {
        this.accountNumber = accountNumber;
        this.balance = 0.0;
        this.ownerName = ownerName;
    }

    // ПОВЕДЕНИЕ (методы)
    public void deposit(double amount) {
        if (amount > 0) {
            this.balance += amount; // Изменение состояния
        }
    }

    public double getBalance() {
        return this.balance; // Возврат состояния
    }

    // ИДЕНТИЧНОСТЬ: два счета разные, даже если баланс и владелец совпадают
    public static void main(String[] args) {
        BankAccount acc1 = new BankAccount("ACC001", "Alice");
        BankAccount acc2 = new BankAccount("ACC002", "Alice");
        // acc1 == acc2 -> false (разные объекты, разная идентичность)
    }
}

Эти три принципа лежат в основе инкапсуляции и моделирования предметной области.