English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Kotlin базовый учебник

Kotlin управление потоком

Функции в Kotlin

Строки в Kotlin

Kotlin面向对象(OOP)

Классы и объекты в Kotlin

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

Kotlin поддерживает функции и объектно-ориентированное программирование.

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

Объектно-ориентированное программирование (OOP)

В стилистике объектно-ориентированного программирования сложные проблемы можно разделить на более мелкие наборы, создавая объекты.

Эти объекты имеют две характеристики:

  • состояние

  • поведение

Давайте приведем несколько примеров:

  1. Lamp (лампа) - это объект

    • Оно может быть в состоянии on (включено) или off (выключено).

    • Вы можете turn on (включить свет) и turn off (выключить свет) (поведение).

  2. Bicycle является объектом

    • У него есть состояние, такие как передачи, два колеса, количество передач.

    • У него есть поведение, такие как торможение, ускорение, переключение передач.

Вы продолжите изучать detall features object-oriented programming, такие как:закрытие данных,наследование и Многообразие. В этой статье мы будем акцентировать внимание на базовых знаниях, которые делают вещи проще.

Классы Kotlin

Перед созданием объекта в Kotlin вам нужно определить класс.

Класс является чертежом объекта.

Мы можем рассматривать класс как чертеж дома (макет). Он содержит все详细信息 о полу, дверях, окнах и т.д. На основе этих описаний мы строим дома. Дом является объектом.

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

Как определить класс в Kotlin?

Чтобы определить класс в Kotlin, можно использовать ключевое слово class:

class ClassName {
    // Свойства
    // Член функции
    ... .. ...
}

Вот пример:

class Lamp {
    //Свойства (данные членов)
    private var isOn: Boolean = false
    // Член функции
    fun turnOn() {
        isOn = true
    }
    // Член функции
    fun turnOff() {
        isOn = false
    }
}

Здесь мы определяем класс под названием Lamp.

Этот класс имеет свойство isOn (определено так же, как и переменная), и два функции-члена turnOn() и turnOff().

В Kotlin свойство необходимо инициализировать или声明 как abstract. В данном примере свойство isOn инициализировано как false.

Классы, объекты, свойства, функции-члены и т.д. могут иметь модификаторы видимости. Например, свойство isOn является частным. Это означает, что свойство isOn можно изменить только в классе Lamp.

Другие модификаторы видимости включают:

  • private - видны только в классе (доступны).

  • public - видны везде.

  • protected - видны для класса и его подклассов.

  • internal - их может доступить любой клиент модуля.

Вы узнаете позже вМодификаторы видимости KotlinВ статье рассмотрены модификаторы visibility protected и internal.

Если не указан модификатор видимости, то по умолчанию он public.

В предыдущем примере функции-члены turnOn() и turnOff() являются общедоступными, а свойство isOn является частным.

Объекты Kotlin

При определении класса определяются только нормы объекта; не выделяется память или пространство для хранения.

Чтобы получить доступ к членам, определенным в классе, вам нужно создать объект. Давайте создадим объект класса Lamp.

class Lamp {
    // атрибут (данные члена)
    private var isOn: Boolean = false
    // Член функции
    fun turnOn() {
        isOn = true
    }
    // Член функции
    fun turnOff() {
        isOn = false
    }
}
fun main(args: Array<String>) {
    val l1 = Lamp() // Создание объекта l1 класса Lamp
    val l2 = Lamp() // Создание объекта l2 класса Lamp
}

Эта программа создает два объекта l1 и l2 класса Lamp. У обоих лампочек свойство isOn установлено в false.

Как получить доступ к членам?

Вы можете использовать точку (.) для доступа к атрибутам и функциям-членам класса. Например:

l1.turnOn()

Эта строка вызывает функцию turnOn() объекта l1.

Давайте рассмотрим еще один пример:

l2.isOn = true

Здесь мы пытаемся присвоить true атрибуту isOn объекта l2. Обратите внимание, что атрибут isOn является private, и если вы пытаетесь получить доступ к isOn извне класса, будет выведено исключение.

Пример: Kotlin класс и объект

class Lamp {
    // атрибут (данные члена)
    private var isOn: Boolean = false
    // Член функции
    fun turnOn() {
        isOn = true
    }
    // Член функции
    fun turnOff() {
        isOn = false
    }
    fun displayLightStatus(lamp: String) {
        if (isOn == true)
            println("$lamp лампа горит.")
        else
            println("$lamp лампа熄灭ена.")
    }
}
fun main(args: Array<String>) {
    val l1 = Lamp() // Создание объекта l1 класса Lamp
    val l2 = Lamp() // Создание объекта l2 класса Lamp
    l1.turnOn()
    l2.turnOff()
    l1.displayLightStatus("l1")
    l2.displayLightStatus("l2")
}

При выполнении программы вывод будет следующим:

л1 лампа горит.
л2 лампа熄灭ена.

В программе выше:

  • Класс Lamp создан.

  • Этот класс имеет атрибут isOn и три функции-члены turnOn(), turnOff() и displayLightStatus().

  • В функции main() созданы два объекта класса Lamp: L1 и L2.

  • Здесь используйте объект l1: l1.turnOn() для вызова функции turnOn(). Этот метод устанавливает значение переменной isOn объекта l1 в true.

  • Одновременно используйте объект l2: l2.turnOff() для вызова функции turnOff(). Этот метод устанавливает значение переменной isOff объекта l2 в false.

  • Затем вызовите функцию displayLightStatus() для объектов l1 и l2, которая выводит соответствующее сообщение в зависимости от того, true или false является атрибут isOn.

Обратите внимание, что в классе isOn атрибут инициализируется как false. При создании объекта класса, атрибут isOn объекта автоматически инициализируется как false. Поэтому не нужно вызывать turnOff() для объекта l2, чтобы установить атрибут isOn в false.

Например:

class Lamp {
    // атрибут (данные члена)
    private var isOn: Boolean = false
    // Член функции
    fun turnOn() {
        isOn = true
    }
    // Член функции
    fun turnOff() {
        isOn = false
    }
    fun displayLightStatus() {
        if (isOn == true)
            println("Лампа горит.")
        else
            println("Лампа погасла.")
    }
}
fun main(args: Array<String>) {
    val lamp = Lamp()
    lamp.displayLightStatus()
}

При выполнении программы вывод будет следующим:

Лампа погасла.

Эта статья представляет собой основы объектно-ориентированного программирования в Kotlin.