English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
В этой статье я познакомлю вас с объектно-ориентированным программированием в Kotlin. Вы узнаете, что такое классы, как создавать объекты и как использовать их в программе.
Kotlin поддерживает функции и объектно-ориентированное программирование.
Kotlin поддерживает такие функции, каквысокоранговые функции,тип функции и lambdaклассовфункцииявляется идеальным выбором для использования стиля функционального программирования. Вы узнаете о этих концепциях в последующих главах. В этой статье мы сосредоточимся на стиле объектно-ориентированного программирования в Kotlin.
В стилистике объектно-ориентированного программирования сложные проблемы можно разделить на более мелкие наборы, создавая объекты.
Эти объекты имеют две характеристики:
состояние
поведение
Давайте приведем несколько примеров:
Lamp (лампа) - это объект
Оно может быть в состоянии on (включено) или off (выключено).
Вы можете turn on (включить свет) и turn off (выключить свет) (поведение).
Bicycle является объектом
У него есть состояние, такие как передачи, два колеса, количество передач.
У него есть поведение, такие как торможение, ускорение, переключение передач.
Вы продолжите изучать detall features object-oriented programming, такие как:закрытие данных,наследование и Многообразие. В этой статье мы будем акцентировать внимание на базовых знаниях, которые делают вещи проще.
Перед созданием объекта в 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 является частным.
При определении класса определяются только нормы объекта; не выделяется память или пространство для хранения.
Чтобы получить доступ к членам, определенным в классе, вам нужно создать объект. Давайте создадим объект класса 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 извне класса, будет выведено исключение.
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.