2016-10-20 2 views
-2

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

+0

Объекты представляют собой состояние и поведение, инкапсулированные вместе в один программный компонент. «Не в объектах»? Неправильно. У вас может быть много экземпляров с одной и той же функцией, но она не используется. Каждый из них работает в своем собственном инкапсулированном состоянии. – duffymo

+0

yes sir, но метод хранится в области методов, а экземпляр java-объекта находится в куче, откуда он обращается к методу доступа через ссылочный идентификатор, присутствующий в области стека. поэтому методы одинаковы, к ним обращаются экземпляры разных объектов. я сомневаюсь в инкапсуляции, поскольку члены данных метода и экземпляра не связаны вместе, поскольку они находятся в классе. создавая разные экземпляры, мы используем одну и ту же функцию снова и снова. –

+0

Неправильно. Извините, вы этого не понимаете. Это идея, которая была частью каждого языка OO. Оно работает. Вы не согласны признать, что, возможно, вы неправильно поняли? – duffymo

ответ

0

функция загружается в область метода, который инициализируется во время загрузки класса

Java не имеет функций, он имеет только методы, которые связаны с классом всегда. Как загружаются эти методы, зависит от JVM. В JVM HotSpot метод может быть оптимизирован и перестроен многократно в течение жизни JVM.

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

инкапсуляция является связыванием элемента данных и функции-члена.

Я не согласен. В Object Orientated программировании инкапсуляция - это скрытие деталей реализации. Вызывающему метода на объекте не нужно знать, как реализован метод или какие поля используются.

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

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

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

как именно они связаны, не важно. Все, что вам нужно знать, это то, что объект имеет класс, и этот класс имеет методы. Любое количество объектов может иметь один и тот же класс без последствий для производительности. (За исключением возможности исчерпания памяти)

+0

Большое спасибо. Информация действительно хорошая –

Смежные вопросы