На этом шаге мы рассмотрим (в общем случае) эти понятия.
В первую очередь нам следует понять, чем класс принципиально отличается от объекта. Для этого мы опять прибегнем к аналогии. Представим, что имеется автомобильный завод, с конвейера которого выходят автомобили. А где-то есть главный инженер, и у него имеется план или чертеж, по которому эти автомобили собираются.
Так вот, чертеж или план, на котором изображен автомобиль со всеми его техническими характеристиками, - это аналог класса. А реальные автомобили, которые выходят с конвейера и которые собраны в соответствии с чертежом, - аналог объектов. Все автомобили (если они собраны по одному и тому же чертежу) - однотипные. У них одинаковый набор характеристик, и в плане функциональности они эквивалентны. Но физически автомобили различны, у каждого своя "судьба".
Если обратиться к примеру с постройкой дома, то там аналогом объектов являются блоки, из которых строится дом. Базовый чертеж, на основе которого на заводе изготовлялся блок, является аналогом класса. Допустим, дом строится с использованием блоков пяти разных типов. Это означает, что имеется пять разных чертежей блоков, на основании которых создаются блоки. Если блоки создавались на основе разных чертежей, то они будут разными. Если блоки создавались на основе одного и того же чертежа, то они будут одинаковыми (точнее, однотипными).
Наличие чертежа не означает наличия блока. Блоки нужно создавать. На основании одного чертежа можно создать много блоков. Но также может быть и ситуация, когда чертеж есть, а блоки по нему не создавались. Это же справедливо для классов и объектов. Класс нужен для создания на его основе объектов. На основе одного класса можно создать много объектов. А можно описать класс и не создавать объектов совсем. Все зависит от решаемой задачи.
Аналогии - это хорошо. Но что же такое объект, если речь идет об использовании его в программе? Скажем, мы уже знаем, что за переменной "скрывается" область в памяти. В эту область можно записывать значения и считывать значение оттуда. И для получения доступа к этой памяти достаточно знать имя переменной. Объект во многом похож на переменную, но только он более "разноплановый". Объект - это группа переменных, причем в общем случае разного типа. А еще объект - это набор методов. Метод, в свою очередь - это группа инструкций, которые можно выполнить (вызвав метод).
В итоге получается, что если обычная переменная напоминает коробку со значением внутри, то объект - это большая коробка, в которой есть коробки поменьше (переменные) и всякие пружинки и рычажки (наборы инструкций, реализованные в виде методов). С программной точки зрения объект реализуется как некоторая область памяти, содержащая переменные и методы.
Программная "начинка" объекта состоит из переменных и методов. Переменные называются полями объекта. Объекты, как мы помним, создаются на основе класса. Когда мы описываем класс, мы фактически определяем, какие поля и методы будут у объектов, создаваемых на основе класса.
Поля метода можно использовать как обычные переменные. Методы объекта можно вызывать. В этом случае выполняются инструкции, содержащиеся в теле метода. Метод, который вызывается из некоторого объекта, автоматически получает доступ к полям (и другим методам) этого объекта. Также важно помнить, что и поля, и методы у каждого объекта свои. Точно так же, как у каждого автомобиля свой руль, свои колеса и своя коробка передач. И если вы поворачивает ключ зажигания, то заведется тот автомобиль, в котором вы поворачиваете ключ. А если вы перекрасите свой автомобиль, то это никак не скажется на цвете автомобиля вашего соседа (даже если у него автомобиль той же марки).
На следующем шаге мы рассмотрим описание класса и создание объекта.