Какая разница между объектом и классом
Перейти к содержимому

Какая разница между объектом и классом

  • автор:

Какая разница между объектом и классом

Подобный вопрос может служить проверкой Ваших знаний терминологии объектно-ориентированного программирования (object oriented programming, сокращенно OOP). Такой же вопрос можно было бы задать в контексте интервью программиста C++, или любой позиции вакансии, которая требует понимания концепции объектов в программировании.

Термины class и object определенно связаны друг с другом, но каждый из них имеет свой отдельный смысл. Начнем с объяснения смысла термина «class» в контексте OOP. Определение class относится к реально написанной части кода, которая используется для определения поведения любого такого класса. Итак, class это статическая часть кода, состоящая из атрибутов, которые не меняются во время выполнения программы — наподобие определений методов класса.

Объект это экземпляр класса. Однако термин object относится к реально существующему экземпляру класса. Каждый объект должен принадлежать классу. Объекты создаются и уничтожаются в программе по мере необходимости, поэтому их время жизни ограничено. Пока объекты «живые», их свойства могут значительно меняться.

Конкретный пример поможет разобраться в том, о чем тут идет речь. Предположим, что у нас есть класс Animal (животное). Все животные имеют тела и мозги — и поэтому они могли бы быть атрибутами нашего вымышленного класса Animal. Также мы можем добавить к классу некоторые методы, которые общие у всех животных — такие как movement (перемещение), потому что все животные могут двигаться. Идея, которую Вы хотите осуществить в своем представлении, состоит в том, что этот очень общий шаблон Animal не изменяется, он просто дает несколько строк кода, которые определяют класс Animal.

Экземпляр класса Animal был бы определенным животным — львом, кошкой или зеброй. Эти экземпляры класса называются объектами. Принимая во внимание, что класс Animal — общее понятие, экземпляры этого класса — львы, коты и т. д. — берут за основу общее понятие класса и создают его реальные экземпляры.

Именно по этой причине программисты определяют конструкторы в своих классах — так происходит всегда, когда они хотят создавать объект с определенными свойствами. Например, какого вида животное должно быть, как его зовут, сколько оно весит и т. д. Так что Вы можете думать о конструкторе объекта как о чем-то таком, которое вводит класс в жизнь программы — отсюда и пошло название constructor, потому что функция конструктора создает определенный экземпляр класса.

У объектов есть понятие «время жизни», а у класса нет. И как ясно показывает наш пример класса Animal, каждый объект в программе имеет связанный с ним интервал времени жизни — кот или зебра не могут жить вечно. И свойства этих объектов могут меняться в течении их «жизни»; если мы определим переменную size в классе Animal, то она может обозначать размер животного (например, размер кота как объекта со временем может расти).

Общее отличие объекта от класса. Можно сказать, что в то время как класс является общей концепцией предметного понятия (наподобие Animal), объект это очень определенное воплощение этого класса, причем с ограниченным временем жизни в программе. Другой способ думать об отличии между классом и объектом — класс предоставляет шаблон для чего-то более специального, которое должен определить программист при создании объекта этого класса.

Какая разница между объектом и классом

Не касаясь программирования можно смело утверждать, что нас окружают объекты. Вы читаете этот текст или смотрите видео на экране монитора. И экран как часть, и монитор в целом — это объекты. Монитор стоит на столе, который также является объектом. Стол находится в комнате. Комната — это объект. Комната находится в доме или в квартире… Дом или квартира — это объекты. Такую цепочку можно назвать для каждого предмета. Каждый предмет — это объект.

Чем может характеризоваться объект? Для наглядности возьмем телевизор. Как мы можем описать телевизор, как параметры мы будет использовать. Большинство из нас будет интересовать следующие параметры:

  • диагональ телевизора;
  • цвет корпуса;
  • цена телевизора;

Таких параметров может быть очень много, поэтому остановимся только лишь на этих 3 пунктах. Это параметры, на которые мы можем влиять, выбирая соответствующий телевизор в торговом центре. И эти параметры существенно влияют на качество изделия, на комфорт использования данного изделия. Назовем данные параметры свойствами.

Что еще может характеризовать телевизор? Возможно то, что можно с этим телевизором делать. Современные телевизоры имеют различный функционал, мы не будем здесь перечислять всё доступные возможности. Назовем, для наглядности, несколько из них:

  • просмотр телевизионных программ;
  • просмотр видео на YouTube;
  • запуск браузера и просмотр интернет страниц;

Обратите внимание что все вышеперечисленные характеристики символизируют какое-либо действие. Назовём данную группу параметров методами.

Существуют ли еще какие-либо параметры, которые влияют на качество телевизора и комфорт его использования? Да, есть такие параметры, но мы как пользователи телевизора не можем на них влиять. Данные параметры изначально заложены производителем телевизоров, и мы даже не задумываемся ни об этих параметрах, ни об их характеристиках и значениях. Что это за параметры? Ну например емкость конденсаторов и сопротивление резисторов, которые использованы в микросхемах внутри телевизора. Влияет ли значение этих параметров на работу телевизора – влияет, знаем ли мы значение этих параметров при использовании телевизора – не знаем, можем ли мы использовать телевизор, не зная этих параметров – можем. Эти параметры существенны, и они влияют, скажем так, на качество изображения, но они как бы скрыты от нас. Назовем эту группу параметров полями.

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

В процессе производства телевизора он собирается из определенных деталей – каждая деталь узко специализирована:

  • аудио плата отвечает за воспроизведение звука;
  • плата WiFi необходима для подключения к беспроводным сетям;
  • ТВ тюнер необходим для получения и обработки сигнала с телевизионной антенны;

Естественно, таких компонентов значительно больше, однако для нашего примера будет достаточно трёх компонентов. Смело можно сказать, что телевизор собирается из компонентов, которые имеют определенные узкоспециализированные функции. То есть мы собираем конструктор из компонентов, в результате сборки которого, получается телевизор. В предыдущем предложении ключевым словом является конструктор. Компоненты, из которых мы собираем конструктор назовём зависимостями.

Итак, мы обсудили характеристики объекта, телевизора. Ниже список из характеристик, которые мы выделили:

  • свойства;
  • методы;
  • поля;
  • события;
  • конструктор;
  • зависимости;

Если мы формализируем эти характеристики в каком-либо виде, то получим документ, который будет выглядеть примерно так:

  • каждый телевизор должен иметь следующие свойства: диагональ, цвет, цена;
  • каждый телевизор должен показывать ТВ программы, видеоролики на YouTube, а также с помощью телевизора можно просматривать интернет страницы;
  • каждый телевизор должен иметь определенные параметры конденсаторов и резисторов, значение этих параметров может быть недоступно конечному пользователю;
  • в ответ на определенные события (нажатия кнопок) телевизор должен реагировать определенным образом;
  • для сборки каждого телевизора нам будут необходимы аудио плата, плата WiFi и ТВ тюнер;

Такая формальная запись различных параметров, характеризующих объект в программировании, называется классом. То есть класс — это формальная запись свойств объекта в соответствии с синтаксисом данного языка программирования. А объектом данного класса является нечто, иногда говорят инстанция, с характеристиками описанными в классе, которые имеют определенное значение. Работая с классами в C# и декларируя классы, вы будете постоянно сталкиваться с этими понятиями:

Различия между классом и объектом?

К своему стыду, внезапно, осознал, что не понимаю разницы между классом и объектом.

Т.е. чисто теоретически понимаю, что объект это экземпляр класса, т.е. класс это как бы заготовка, а уже объект это уже «вещь», с которой можно непосредственно работать.

Но тогда почему (если рассматривать вопрос в PHP), я все-таки могу работать с методами класса ( ClassName::MethodName() ), так же как и с методами объекта ( $c = new ClassName; $c->MethodName() ), хотя, в первом случае никакого объекта не создано.

Или, в данном случае, класс это просто как бы группа глобальных функций в своём «пространстве имен», которые не требуют «персонализации» путем задания уникальных значений их свойств?

Поиск в гугле почему-то не помог, в основном приводятся аналогии вида «Класс — чертежи машины, объект — сама машина», но ни слова о практическом применении.

Заранее благодарен за разъяснения, а то сия каша в голове уже начинает напрягать =)

  • Вопрос задан более трёх лет назад
  • 59227 просмотров
  • Facebook
  • Вконтакте
  • Twitter

Класс = срособ организации полей, методов и пр. = инкапсулированный «кусок» функциональности, описание структуры будущих объектов + своё пространство имён внутри.

Статическая составляющая класса — static-методы и static-поля — это логический способ организации функциональности, общей для любого объекта выделенной сущности. Тут значение имеет логическая составяющая — например, статический метод Parse есть и в классе int, и в классе Guid — но его функциональность различна и соответствует выделенной сущности. Для static-составляющей класса, в принципе, его можно воспринимать как пространство имён. Но пространсто имён нельзя инициализировать, нельзя создать объект пространства имён.

Объект = экземпляр класса = объект, типом которого является какой-то класс = класс после инициализации = сущность в памяти, обладающая поведением, способная изменять своё состояние.

  • Facebook
  • Вконтакте
  • Twitter

Может быть вам легче будет понять, если вы будете думать о классе как о наборе функций, а об объекте как о наборе данных.

Некоторые функции в классе могут быть использованы только с набором данных (т.е. объектом), который передается неявно, когда вы указываете $object->method() .

Другие функции не требуют объекта, поэтому могут быть вызваны напрямую из класса.

С этой точки зрения очень логично выглядит Python, где у любого метода есть явный аргумент self, указывающий на объект, из которого был вызван метод. А запись object.method(5) является краткой записью ObjectClass.method(object, 5) .

  • Facebook
  • Вконтакте
  • Twitter

Я придумал свою дурацкую аналогию.

Класс — это бог, который есть всегда. И бог по образу и подобию своему создаёт экземпляры — человеков. Каждый человек наделён своим набором свойств (рост, вес, . ) и методов (плавать, ходить, летать, . ). А бог в свою очередь наделён общими для всех методами: принимать мольбы, карать, посылать манну небесную и сотворить чудо. Эти методы могут быть приватными. Т.е. бог например может принимать мольбы только людей, а не марсиан. А вот сотворить чудо может как для людей, так и для марсиан — ему не жалко.

  • Facebook
  • Вконтакте
  • Twitter

Rafael

Класс — чертеж, объект класса — машина, собранная по этому чертежу.

Статический метод — это некое устройство (пусть в нашем случае будет GPS-навигатор), которое поставляется вместе с чертежом и представлено в каждой машине, построенной по этому чертежу. Устройство это никак не задействует машину, и работает само по себе.

Вы можете бегать с GPS навигатором не построив машины.

Если отойти от популярного изложения, то статические методы не связываются с экземплярами классов. И могут быть вызваны независимо от того создан экземпляр класса или нет.

  • Facebook
  • Вконтакте
  • Twitter

Rafael

Без реализации класса (создания объекта) Вы можете работать только со статическими методами/свойствами класса. Если на примере упомянутой машины — класс описывает, что это такое, а реализация (instance) класса — соответственно, реализовывает какую-то конкретную машину.

Простейший миниатюрный пример:

В итоге у нас 2 машины — VW и Жигули. Обе — экземпляры класса машина (Car). Без создания экземпляра класса Вы не зададите брэнд — нечему его задавать, собственно.

Ну это если примитивы на пальцах.
А вообще — вот, держите: про ООП на php.su

  • Facebook
  • Вконтакте
  • Twitter

В самом простом случае: Класс — это определение общего поведения для объектов, который этот класс порождает. Объект будет иметь поведение задаваемое этим классом и отличаться от других объектов своим состоянием (ну а если состояние одинаково, то просто это будет как два одинаковых автомобиля — сущностей две разные, но выглядят одинаково ).

Далее, к классу можно добавить статические методы и поля. Здесь уже сам класс будет иметь возжность хранить свое состояние и выполнять действия. В большинстве случаев (но не во всех) это требуется для контроля над производством объектов этого класса (паттерн Синглетон, Фабрика и т.п.).

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

Все это понимание придет с опытом написания программ, просто нужно думать метафорами.

В чем разница между классом, объектом и экземпляром?

Никак не могу понять, в чём разница между объектом и классом. У меня есть предположение, что класс — это что-то общее, то есть, обширное понятие, а объект — что-то более узкое. Что касается экземпляра и объекта, так я думаю, что это одно и то же. Буду очень благодарен, если вы поможете мне разобраться.

Kromster's user avatar

Класс — некая абстракция, логическая структура, описывающая поведение и характеристики. Например, машина. Она может ехать, сигналить и т.п.

Объект — конкретный экземпляр класса. Например, конкретная ваша машина.

Экземпляр класса — это одно и тоже, что и объект класса.

Класс: фрукт, Объект: киви, банан, манго.

Suvitruf - Andrei Apanasik's user avatar

Как правильно подметил пользователь Suvitruf понятия класс и объект очень тесно связаны между собой.

Что такое класс и его экземпляры?

Давайте приведем пример на ситуации из подобного C ЯП C# а далее будет рассмотрен пример из реальной жизни.

Здесь мы объявили класс . Что же мы сделали объявив класс?? Мы создали шаблон сущности который в дальнейшем мы можем использовать для создания новый экземпляров класса . Вот тут мы зададимся вопросом (которым Вы собственно и задались). А что такое экземпляр класса ?? Это некий конкретный объект который может уже применяться изменяться как Вашей душе угодно. В примере выше, я объявил класс Human . Давайте же сейчас создадим его экземпляр:

Теперь после создания экземпляра класса, мы можем проводить какие либо манипуляции которые возможно применить к данному классу. Какие? Это уже от класса зависит. Проще говоря, класс это некий шаблон, который может использоваться для создания новый объектов или как у бородатых умных дядей экземпляров какого либо класса.

Пример из реальной жизни

Теперь давайте попробуем привести пример из реальной жизни. Вы крупный инженер сотовых телефонов. Что бы сделать новую конкретную модель телефона, Вам нужно иметь шаблон в роли которого в программировании выступает класс. В шаблоне указано что каждый телефон должен звонить, включаться, выключаться и принимать звонки например. И по шаблону мы уже делаем конкретный объект который уже что-то может изменять в себе или использовать по назначению.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *