Найти тему

Чем отличается класс от объекта

Вопрос на первый взгляд простой, однако если начать в нём ковыряться, то не очень. Потому что каких-то железных стандартов в объектно-ориентированном программировании (ООП) нет (ну во всяком случае я об этом не знаю), а термины “класс” и “объект” определены не так однозначно, как хотелось бы. А их трактовка ещё и зависит от языка программирования.

Более-менее чётко это определяется в книгах по С++. Там обычно пишут, что класс - это описание объекта, а экземпляр класса - это сам объект (в данном случае “экземпляр класса” и “объект” - это одно и то же). Для лучшего понимания см. рисунок:

То есть если переместиться из виртуального мира программирования в мир вещей, то класс - это чертёж, а объекты - это предметы, изготовленные по этому чертежу. То есть класс может быть один, а экземпляров этого класса может быть много. На рисунке каждый фонарик - это отдельный предмет (объект), созданный по образу и подобию класса. Но, как вы заметили, фонарики разных цветов. То есть, несмотря на то, что эти предметы принадлежат к одному классу, они могут иметь разные свойства (в этом и прелесть ООП).

Класс сам по себе не может делать какую-то полезную работу. Потому что это всего лишь описание предмета (объекта). А чтобы экземпляр класса (объект) мог быть нам полезен, для его создания нам придётся выделить какие-то ресурсы. В мире людей это материалы (сырьё), трудозатраты, энергозатраты и т.п., а в мире программирования это память.

Объекты могут создаваться и уничтожаться, а класс просто существует.

Вроде всё просто и понятно. Но это до тех пор, пока вы не столкнётесь с другим языком программирования, сильно отличающимся от С++. Например, Delphi. Там объект не является экземпляром класса, а является отдельным типом данных. И хотя его поведение очень похоже на поведение класса, это всё-таки не одно и тоже. Основное отличие заключается в том, что в Delphi (и подобных) для объекта не надо выделять память. То есть тип Object является статическим типом, сохраняя при этом большинство возможностей класса (свойства, методы и т.п.).

В некоторых случаях это удобнее, и как бы расширяет возможности языка. Однако вносит путаницу в терминологию. Впрочем, в программировании и без этого всё очень сильно запутано )))

На этом всё. Подписывайтесь на канал, чтобы ничего не пропустить.