Разница между классом и структурой в PHP и Java - PullRequest
0 голосов
/ 17 декабря 2009

Какова реальная разница между классом и структурой, когда вы имеете дело с объектно-ориентированным программированием. Этот вопрос задавался много раз во время моих интервью для SE.

Некоторые люди говорят, что есть только одно отличие: Члены структуры по умолчанию являются открытыми, а члены класса по умолчанию являются закрытыми.

Некоторые говорят, что есть много отличий.

После прочтения многих статей и форумов у меня есть следующие отличия:

Классы ПО УМОЛЧАНИЮ иметь частных участников. Структуры ПО УМОЛЧАНИЮ иметь открытых участников.

Структуры являются типом значений. Классы справочного типа.

Структура хранится в памяти через стек. Классы хранятся в памяти через кучу.

Структура не поддерживает наследование. Классы поддерживают наследование.

Конструктор работает по-другому.

Новый оператор работает по-другому.

Выделение памяти для структуры происходит очень быстро, потому что это происходит внутри или в стеке.

Что вы думаете о моем списке выше или у вас другой. Спасибо

Ответы [ 4 ]

2 голосов
/ 17 декабря 2009

Это довольно специфично для языка. Похоже, вы смешиваете значительную долю C ++ и C #, оба из которых очень разные языки (несмотря на поверхностное сходство синтаксиса).

В C ++ struct s действительно по умолчанию public видимость члена, в то время как class по умолчанию private. В C # struct используется для объявления типов значений, которые передаются по значению (, обратите внимание, что выделение стека - это деталь реализации, а не контракт ).

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

Но именно так и думали дизайнеры языка, что их следует использовать. Люди хороши в неправильном использовании вещей, поэтому не каждый struct, который вы видите, может быть простой, глупой структурой данных, и не каждый class, который вы видите, может быть полноценным классом с множеством методов и тому подобным. Это просто соглашение, и если люди следуют ему, другие могут взглянуть на код и увидеть: «О, хорошо, это struct, поэтому я не ожидаю особой логики здесь и перейду к более интересным вещам». Это может сработать ... в теории.

ETA: Поскольку вы упомянули в комментарии, что вы особенно заинтересованы в PHP или Java: оба языка не имеют какие-либо различия на уровне синтаксиса или языка class или struct, поэтому ваш вопрос кажется мне немного странным. И в Java, и в PHP вы моделируете вещи как классы, независимо от того, являются ли они просто структурами данных без логики или фактическими классами со всем, что есть.

1 голос
/ 17 декабря 2009

С точки зрения ОО, нет никакой разницы. Оба типа имеют открытый API с методами (и свойствами, если их поддерживает ваш язык).

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

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

1 голос
/ 17 декабря 2009

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

0 голосов
/ 28 августа 2013

Разница между структурой и классами

-Основное различие между классом и структурой заключается в том, что объявление структуры начинается с ключевого слова struct, а с другой стороны, класс начинается с Ключевое слово "класс". В классе член данных и член по умолчанию являются закрытыми, тогда как в структуре они общедоступны по умолчанию. -Скрытие данных поддерживается в классах, но не в структуре. -Структура имеет дело только с переменными, тогда как объекты имеют дело с объектами реального мира.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...