Разве мы не можем использовать термин объект при определении инкапсуляции в ООП? - PullRequest
0 голосов
/ 25 июня 2018

Я прочитал определение инкапсуляции, которое гласило, что «Инкапсуляция - это упаковка данных и функций в единый модуль, называемый class ». Мой вопрос заключается в том, что мы не можем использовать термин object вместо class в определении, потому что, наконец, объекты создаются с использованием классов, а объекты инкапсулируют только данные и функции внутри них?

Ответы [ 5 ]

0 голосов
/ 26 июня 2018

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

0 голосов
/ 26 июня 2018

На мой взгляд, «данные» - проблемный термин.Классы инкапсулируют атрибуты и методы, которые работают над этими атрибутами вместе.«данные» предполагают фактические данные, а не метаданные.Вероятно, поэтому вы подумали об объектах, а не о классах.

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

0 голосов
/ 25 июня 2018

У меня нет проблем с заменой «класса» на «объект» в предложении примера. Он остается действительным в языках ООП на основе классов, а также более подходит для языков ООП на основе прототипов. В конце концов, классы - это просто система типов для ООП, и они не так важны, как инкапсуляция.

Я хотел бы, однако, улучшить это предложение, чтобы было ясно, что данные и функции не «оборачиваются» одинаково. Данные должны быть скрыты и быть доступными только для методов объекта.

0 голосов
/ 25 июня 2018

Не у каждого класса есть объекты.

У нас могут быть статические классы, которые не имеют объектов.

Если бы определение было изменено для использования слова «объект», эти классы не были бы охвачены.«Класс» охватывает как статические, так и нестатические классы.

Даже если класс не является статичным, он может иметь статические данные и функциональность, опять же, термин «класс» более уместен.

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

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

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

Комментарий Сид предлагает дополнительную причину для «класса» над «объектом».

0 голосов
/ 25 июня 2018

Полагаю, у вас есть приблизительное представление о том, что такое инкапсуляция? Итак, вы спрашиваете, почему определение не может быть перефразировано в

Инкапсуляция - это упаковка данных и функций в единое целое, называемое объектом.

Потому что инкапсуляция не имеет ничего общего с объектами. Вы можете создать некоторый класс с именем Car, который имеет несколько полей, таких как engine, seats, steeringWheel и некоторые методы applyBrakes, openWindow, а также некоторые закрытые члены. Теперь вы можете сказать, что класс инкапсулирует внутреннюю работу автомобиля в единое целое - класс Car.

См? Я ничего не говорил об объектах. Объекты Car на самом деле представляют собой просто набор ссылок в памяти, указывающих на другие объекты Engine, Seat и SteeringWheel.

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