oop - что - Разница между объектом и экземпляром



чем отличается объект от класса php (12)

Что такое объект?

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

Объект реального мира имеет две характеристики, все они имеют состояние и поведение. Люди также являются хорошим примером объекта, у нас есть состояние / атрибуты - имя, высота, вес и поведение - ходить, бегать, разговаривать, спать, код: P.

Что такое класс?

Класс - это проект или шаблон, который описывает детали объекта. Эти данные

атрибуты имени / состояния / методы

class Car 
{
    int speed = 0;
    int gear = 1;

    void changeGear(int newGear)
    {
        gear = newGear;
    }

    void speedUp(int increment) 
    {
        speed = speed + increment;
    }

    void applyBrakes(int decrement) 
    {
        speed = speed - decrement;
    }
}

Рассмотрим приведенный выше пример, speed и gear полей будут представлять состояние объекта, а методы changeGear , speedUp и applyBrakes определяют поведение объекта Car с внешним миром.

Рекомендации:

https://src-bin.com

Я знаю, что этот вопрос asked before , но я все еще чувствую, что ответ слишком неоднозначен для меня (и, как следствие, некоторых / самых начинающих), чтобы понять.

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

Я думаю, что у меня есть дескриптор того, что такое класс ( вроде проектной схемы для экземпляра, создаваемого по своему сходству во время компиляции ). Но если это так, то какой объект? Я также знаю, что на языках, основанных на прототипах, это может еще больше угаснуть, но, возможно, именно поэтому в моем сознании должно быть четкое различие между объектом и экземпляром.

Помимо этого, я борюсь с понятиями «объект» и «экземпляр». Многие ресурсы, которые я прочитал (включая ответы в SO), говорят, что они во многом одинаковы и что разница в семантике. Другие люди говорят, что между ними существует реальная концептуальная разница.

Могут ли эксперты здесь, в SO помочь новичкам, иметь этот «ага» момент для продвижения вперед в мире ООП?

Еще раз спасибо.

Примечание: это не домашнее задание, я не хожу в школу - однако, я думаю, это поможет людям, которые ищут домашнюю работу.


Answer #1

«Класс описывает набор объектов, называемых его экземплярами». - Исследовательская группа по изучению Xerox, «Система Smalltalk-80», журнал Byte Volume 06, номер 08, p39, 1981.


Answer #2

Давайте сравним яблоки с яблоками. Мы все знаем, что такое яблоко. На что это похоже. На что он похож. Это класс. Это определение вещи. Это то, что мы знаем о чем-то.

Теперь найдите яблоко. Это пример. Мы можем это видеть. Мы можем попробовать его. Мы можем делать с этим все. Это то, что у нас есть.

Класс = Что мы знаем о чем-то. Определение.

Object / Instance = Что-то, что соответствует этому определению, которое мы имеем и можем делать.


Answer #3

Для меня существует небольшая разница между объектом и экземпляром

Подобно :

class1 obj;

здесь obj - это экземпляр класса 1, который занимает стек памяти

class1 obj = новый класс1 ();

в этом случае obj является объектом класса 1 и занимает кучу памяти


Answer #4

Класс определяет объект. Вы можете пойти еще дальше на многих языках и сказать, что интерфейс определяет общие атрибуты и методы между объектами.

Объект - это нечто, что может представлять что-то в реальном мире. Когда вы хотите, чтобы объект фактически представлял что-то в реальном мире, объект должен быть создан. Активация означает, что вы должны определить характеристики (атрибуты) этого конкретного объекта, обычно через конструктор.

После того, как вы определили эти характеристики, у вас теперь есть экземпляр объекта.

Надеюсь, это прояснит ситуацию.


Answer #5

Мне всегда нравилась идея, равная определению класса, как определение типа абстрактных данных . То есть, когда вы определили класс, который вы определяете, новый тип «что-то», его представление типа данных в терминах примитивов и других «вещей» и его поведение в терминах функций и / или методов. (Извините за общность и формализм)

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

Иногда термины object и экземпляры взаимозаменяемы. Некоторые пуристы ООП будут утверждать, что все является объектом, я не буду жаловаться, но в реальном мире ООП разработчики используют две концепции:

  1. Класс: образец абстрактного типа данных, из которого вы можете получить другой ADT и создать объекты.
  2. Объекты: также называемые экземплярами, представляют собой конкретные примеры структур данных и функций, представленных данным абстрактным типом данных.

Answer #6

Объект: когда мы создаем объект, некоторая память занята этим объектом Ex: Test t = new Test (); // здесь t является объектом класса Test

Экземпляр: когда мы объявляем отдельную память экземпляра, этот объект не занят. Ex: Test t; // здесь t - это экземпляр класса Test


Answer #7

Объектно-ориентированное программирование - это метафора системы, которая помогает вам организовать знания, которые ваша программа должна обрабатывать, таким образом, чтобы облегчить вам разработку вашей программы. Когда вы выбираете программу с использованием ООП, вы выбираете свои ООП-Гуглы, и вы решаете, что вы увидите проблему реального мира, так как многие объекты взаимодействуют между собой, отправляя сообщения. Вместо того, чтобы видеть, как Гай водит Автомобиль, вы видите, как Гай отправляет сообщение в машину, указывающее, что он хочет, чтобы автомобиль сделал. Автомобиль - большой объект, и он ответит на это сообщение, отправив сообщение на его движок или его колесо, чтобы иметь возможность правильно реагировать на то, что водитель сказал ему сделать в сообщении, и т. Д.

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

  • Все эти парни ведут себя одинаково, поэтому я создам класс под названием «Драйвер», в котором будут указаны все, кто все Драйверы в мире ведут себя, потому что все они ведут себя одинаково. (И вы используете ООП класса)
  • Или ты мог сказать Эй! Второй драйвер ведет себя так же, как и первый драйвер, за исключением того, что ему нравится идти немного быстрее. И третий драйвер ведет себя так же, как и первый драйвер, за исключением того, что ему нравится зигзагообразно, когда он водит. (И вы используете прототип OOP).

Затем вы начинаете вводить в компьютер информацию о том, как ведут себя все драйверы (или как работает первый драйвер, и как второй и третий отличаются от этого), и через некоторое время у вас есть ваша программа, и вы используете код для создайте три драйвера, которые являются моделью, которую вы используете внутри этого ПК, чтобы возместить драйверы, которые вы видели в реальном мире. Эти 3 драйвера, которые вы создали на ПК, являются экземплярами либо прототипа (на самом деле первым из них является прототип, первым из которых может быть сам прототип в зависимости от того, как вы моделируете вещи) или созданный вами класс. Разница между экземпляром и объектом заключается в том, что объект является метафорой, которую вы используете в реальном мире. Вы решили увидеть парня и машину в качестве объектов (было бы неправильно сказать, что вы видите их как экземпляры), сотрудничающие между собой. И затем вы используете его как вдохновение для создания своего кода. Экземпляр существует только в вашей программе после создания прототипа или класса. «Объекты» существуют вне ПК, потому что это сопоставление, которое вы используете для объединения реального мира с программой. Он объединяет Guy с экземпляром драйвера, созданного на ПК. Таким образом, объект и экземпляр чрезвычайно связаны друг с другом, но они не совсем одинаковы (экземпляр - это «нога» объекта в программе, а другая «нога» находится в реальном мире).


Answer #8

Просто скажите, что объект является единственным объявлением, которое не выделяет память. и экземпляр - это объект класса, который выделяет память.


Answer #9

Расширение одного из ранее приведенных примеров в этом потоке ...

Рассмотрим сценарий. Требование состоит в том, чтобы в жилом доме было построено 5 домов. Все 5 домов имеют общую архитектуру строительства. Архитектура строительства - это класс . Дом - это объект . Каждый дом с людьми, остающимися в нем, является примером .


Answer #10

Я думаю, что важно отметить, что в целом есть две вещи. План и копии. Люди обычно называют эти разные вещи; классы, объекты, экземпляры - это лишь некоторые из имен, которые люди используют для них. Важно то, что есть план и его копии - независимо от их имен. Если у вас уже есть понимание для этих двух, просто избегайте других вещей, которые вас путают.


Answer #11

Объекты - это вещи в памяти, а экземпляры - это вещи, которые ссылаются на них. В приведенном выше рисунке:

  • std (экземпляр) -> Студенческий объект (справа)
  • std1 (экземпляр) -> Студенческий объект (слева)
  • std2 (экземпляр) -> Студенческий объект (слева)
  • std3 (instance) -> no object (null)




oop