1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/wizardforcel-thinking-in-java-zh

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
1.3 实现方案的隐藏.md 8.3 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 11.03.2025 09:15 d56454c

1.3 Реализация скрытых схем

Для удобства дальнейшего обсуждения давайте сначала разделим специалистов в этой области на две категории. В общих чертах можно сказать, что существуют два типа людей, занимающихся объектно-ориентированным программированием: "создатели классов" (те, кто создает новые типы данных) и "клиентские программисты" (те, кто использует готовые типы данных в своих приложениях; примечание ④). Для клиентских программистов основной целью является сбор набора "инструментов", состоящего из различных классов, который позволит быстро разрабатывать приложения, отвечающие их требованиям. А для создателей классов цель заключается в том, чтобы создать класс с нуля и предоставить клиентским программистам только необходимые части (интерфейсы), а все остальные детали скрыть. Почему это важно? Когда детали скрыты, клиентские программисты не могут получить доступ к ним или изменить их, поэтому авторы не беспокоятся о возможных незаконных изменениях и могут гарантировать, что их работы не будут влиять на других.

④: Благодарю моего друга Scott Meyers за то, что он помог мне выбрать эти названия."Интерфейс" (Interface) определяет, какие запросы можно отправить конкретному объекту. Однако где-то должны существовать коды, которые удовлетворят эти запросы. Эти коды вместе со скрытыми данными называются "скрытой реализацией". Из точки зрения процедурного программирования проблема может показаться простой. Каждый тип данных содержит функции, связанные со всеми возможными запросами. Как только объект получает определённый запрос, вызывается соответствующая функция. Обычно этот процесс сводится к тому, как "отправить сообщение" объекту (вызвать запрос). Основная задача объекта — решить, как реагировать на это сообщение (выполнить соответствующий код).Для любой связи важным моментом является то, чтобы все участники следовали однородным правилам. Создание библиотеки эквивалентно установлению связи с клиентскими программистами. Они тоже являются программистами, но их цель — объединить определённые приложения (программы) или использовать вашу библиотеку для создания более крупной библиотеки.

Если бы любой мог использовать все члены класса, клиентские программисты смогли бы делать с этим классом всё, что им вздумается, и было бы невозможно заставить их следовать каким-либо ограничениям. Даже если бы вы очень не хотели, чтобы клиентские программисты прямым образом манипулировали некоторыми членами внутри класса, но если бы не было контроля над доступом, было бы невозможно предотвратить эту ситуацию — всё будет полностью открыто. Существуют две причины для контроля доступа к членам класса. Первая заключается в том, чтобы защитить программистов от нежелательного контакта с внутренними данными — обычно это идеология дизайна внутренних данных типов. Для решения конкретной задачи пользователи должны иметь возможность работать через интерфейсы, а не знать подробностей реализации. Таким образом, мы предоставляем пользователям услугу, позволяющую им легко выявлять важные для них элементы и игнорировать остальные.Вторая причина для контроля доступа состоит в возможности разработчикам библиотек менять внутреннюю структуру без опасений за влияние на клиентских программистов. Например, начальная версия может содержать простой класс для упрощения разработки, но позже решено модифицировать его для повышения производительности. Если интерфейс отделён от реализации и каждый защищён соответственно, можно смело делать такие изменения, требуя лишь переопределение связей у пользователей.Java использует три явных ключевых слова и одно неявное для установления границ класса: public, private, protected и неявное default. Если явное указание ключевых слов отсутствует, используется последнее. Эти ключевые слова имеют прямое значение и определяют, кто имеет доступ к следующим определениям. Public (публичный) означает, что любые определения после этого могут использоваться всеми. В то же время, Private (приватный) означает, что доступ к определению имеют только создатель типа, методы внутри этого типа и сам создатель. Private создаёт стену между вами и клиентскими программистами; попытка доступа к приватному члену вызывает ошибку компиляции. Default (по умолчанию) относится к концепции "пакет" или "упаковка", которая является способом Java для создания библиотек. Если что-то является "по умолчанию", значит, оно доступно только внутри того же пакета (поэтому этот уровень доступа иногда называют "доступ по умолчанию"). Protected (защищённый) похож на private, но отличается тем, что защищённые члены доступны для наследников, тогда как приватные члены недоступны. Проблемы наследования будут рассмотрены чуть позже.

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/wizardforcel-thinking-in-java-zh.git
git@api.gitlife.ru:oschina-mirror/wizardforcel-thinking-in-java-zh.git
oschina-mirror
wizardforcel-thinking-in-java-zh
wizardforcel-thinking-in-java-zh
master