Шаг 136.
Основы Kotlin.
Объявление классов. Доступность и инкапсуляция

    На этом шаге мы рассмотрим обсудим эти понятия.

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

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

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

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

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

    Например, код в Game.kt, вызывающий castFireball(), не интересует, как реализована эта функция. Для него важно только получить бокал напитка. Поэтому пока функция доступна, детали реализации не должны быть важны для вызывающего.

    Более того, это даже может быть опасно, если код Game.kt сможет менять значения, на которые опирается castFireball(), то есть на количество создаваемых бокалов с напитком или на свойства напитка.

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

Таблица 1. Модификаторы доступа
Модификаторы Описание
public (по умолчанию) Функция или свойство будут доступны вне класса. По умолчанию функции и свойства без модификатора видимости получают модификатор public
private Функция или свойство будут доступны только внутри класса
protected Функция или свойство будут доступны только внутри класса или подкласса
internal Функция или свойство будут доступны внутри модуля

    Мы обсудим ключевое слово protected позднее.

    Если вы знакомы с Java, обратите внимание, что в Kotlin отсутствует уровень видимости, ограниченный рамками пакета. Причину мы объясним в одном из следующих шагов.

    На следующем шаге мы рассмотрим свойства класса.




Предыдущий шаг Содержание Следующий шаг