Kotlin: ООП, классы

Содержание

Слайд 2

Цели модуля

Цели модуля

Слайд 3

ООП, классы, объекты
Наследование, интерфейсы
Методы класса Any, классы данных
Делегированные свойства и lateinit
Расширения для

ООП, классы, объекты Наследование, интерфейсы Методы класса Any, классы данных Делегированные свойства
классов
Объявления объектов
Перечисления, sealed-классы
Перегрузка операторов
Структура модуля

Слайд 4

По окончании модуля вы будете знакомы с ООП парадигмой в котлине и

По окончании модуля вы будете знакомы с ООП парадигмой в котлине и
научитесь писать программы, которые работают с классами, интерфейсами, перечислениями, объектами. Научитесь строить иерархии наследования и расширять возможности классов.
Цели модуля

Слайд 5

ООП, классы, объекты

ООП, классы, объекты

Слайд 6

На этом уроке мы рассмотрим, что такое ООП, классы, объекты, методы, поля.

На этом уроке мы рассмотрим, что такое ООП, классы, объекты, методы, поля.
Научимся на практике работать с этими понятиями, рассмотрим области видимости, геттеры и сеттеры.
Цели урока

Слайд 7

Kotlin - ООП язык
ООП использует:
классы
объекты
иерархии
Объектно-ориентированное программирование

Kotlin - ООП язык ООП использует: классы объекты иерархии Объектно-ориентированное программирование

Слайд 8

Название: Автомобиль
Характеристики:
количество колес
максимальная скорость
мощность двигателя
количество дверей
размеры кузова
Действия:
разгон (двигатель крутит колеса)
торможение (сжатие тормозных

Название: Автомобиль Характеристики: количество колес максимальная скорость мощность двигателя количество дверей размеры
дисков)
поворот (руль поворачивает колеса)
открытие дверей (механизм ручки открывает замок)
Класс

Слайд 9

Класс: Автомобиль
Название: Tesla Cybertruck
Характеристики:
количество колес - 4 шт.
максимальная скорость - 209 км/ч
мощность

Класс: Автомобиль Название: Tesla Cybertruck Характеристики: количество колес - 4 шт. максимальная
двигателя - 775 л.с.
количество дверей - 2 шт.
размеры кузова(Д-Ш-В) - 5885-2027-1905мм
Объект

Слайд 10

Поля:
количество колес
текущая скорость скорость
мощность двигателя
количество дверей
размеры кузова
Поля и методы

Методы:
разогнаться
повысить подачу топлива
увеличить

Поля: количество колес текущая скорость скорость мощность двигателя количество дверей размеры кузова
количество оборотов двигателя и колес
затормозить
повернуть
открыть двери

Слайд 11

Инкапсуляция
Наследование
Полиморфизм
Абстракция
Принципы ООП

Инкапсуляция Наследование Полиморфизм Абстракция Принципы ООП

Слайд 12

Могут применяться к полям, методам, классам.
public(по умолчанию) - доступность отовсюду
protected -

Могут применяться к полям, методам, классам. public(по умолчанию) - доступность отовсюду protected
доступность внутри класса и внутри потомков этого класса
internal - доступность внутри модуля где объявлен класс
private - доступность только внутри класса
Модификаторы доступа

Слайд 13

На этом уроке мы рассмотрели, на чем основывается ООП, на практике поработали

На этом уроке мы рассмотрели, на чем основывается ООП, на практике поработали
с:
классами
конструкциями импортов
объектами
методами и полями
геттерами и сеттерами
модификаторами доступа
Выводы

Слайд 14

Наследование, интерфейсы

Наследование, интерфейсы

Слайд 15

На этом уроке мы рассмотрим наследование, интерфейсы, абстрактные и анонимные классы.
Цели

На этом уроке мы рассмотрим наследование, интерфейсы, абстрактные и анонимные классы. Цели урока
урока

Слайд 16

Автомобиль является транспортом
Самолет является транспортом
Наследование

Транспорт
разгон
торможение

Автомобиль
разгон
торможение
открытие дверей

Самолет
разгон
торможение
взлет
посадка

Родительский класс

Классы наследники

Автомобиль является транспортом Самолет является транспортом Наследование Транспорт разгон торможение Автомобиль разгон

Слайд 17

Иерархия классов

Иерархия классов

Слайд 18

Отсутствует множественное наследование
На вершине иерархии наследования находится класс Any
Необходимы модификаторы класса -

Отсутствует множественное наследование На вершине иерархии наследования находится класс Any Необходимы модификаторы
open или abstract
Дочерний класс наследует не-private члены родительского класса
Наследование в Kotlin

Слайд 19

Предназначен для наследования
Невозможно создать экземпляр абстрактного класса
Может иметь абстрактные методы и свойства
Может

Предназначен для наследования Невозможно создать экземпляр абстрактного класса Может иметь абстрактные методы
содержать обычные методы и свойства и хранить состояние
Абстрактный класс

abstract class AbstractShape(
val x: Int,
val y: Int
) {
abstract val name: String
abstract fun calculateArea(): Double
}

Слайд 20

Может иметь поля и методы
Все поля и методы будут доступны пользователю интерфейса
Нет

Может иметь поля и методы Все поля и методы будут доступны пользователю
внутренней реализации методов и полей
Нельзя создать объект интерфейса
Нет внутреннего состояния
Реализуются классами, возможна множественная реализация
Интерфейс

interface Vehicle {
val currentSpeed: Int
fun accelerate(speed: Int)
fun decelerate(speed: Int)
}

Слайд 21

Не имеют имени
Используются для создания объекта один раз
С помощью них можно создать

Не имеют имени Используются для создания объекта один раз С помощью них
объект интерфейса, абстрактного класса либо наследовать существующий класс
Анонимные классы

val shapeInstance = object : Shape {
override val name: String = "Anonymous"
override fun calculateArea(): Double = 0.0
}

Слайд 22

На этом уроке мы рассмотрели наследование, научились работать с классами-наследниками, интерфейсами, абстрактными

На этом уроке мы рассмотрели наследование, научились работать с классами-наследниками, интерфейсами, абстрактными
и анонимными классами.
Рассмотрели интерфейс Comparable, метод toString() и scoped-функцию with
Выводы

Слайд 23

Методы класса Any, классы данных

Методы класса Any, классы данных

Слайд 24

На этом уроке мы поговорим о сравнении объектов, рассмотрим методы класса Any

На этом уроке мы поговорим о сравнении объектов, рассмотрим методы класса Any
- equals, hashcode, toString.
Познакомимся с классами данных и деструктивными определениями.
Цели урока

Слайд 25

Равенство по ссылке (object3 === object4)
Равенство по значению (object3 == object4)
Сравнение

Равенство по ссылке (object3 === object4) Равенство по значению (object3 == object4) Сравнение

Слайд 26

Хеш-код - это целочисленное значение, которое возвращается хеш-функцией для объекта.
Функция hashCode

Хеш-код - это целочисленное значение, которое возвращается хеш-функцией для объекта. Функция hashCode
является хеш-функцией. Она должна вычислить число быстро и с малой вероятностью коллизий.
Коллизия - это такой случай, когда для двух объектов которые являются разными хешфункция возвращает одинаковый результат.
Реализации по умолчанию hashCode зависят от версии JVM.
Самым ярким примером использования функции hashCode является структура данных хештаблица.
hashCode()

Слайд 27

Объекты одинаковы - хешкоды одинаковы
Хешкоды одинаковы - объекты необязательно одинаковы (коллизия)
Хешкоды разные

Объекты одинаковы - хешкоды одинаковы Хешкоды одинаковы - объекты необязательно одинаковы (коллизия)
- объекты разные
Контракт между equals и hashCode

Слайд 28

Возвращает текстовое представление объекта.
По умолчанию возвращает название класса и хешкод в шестнадцатеричном

Возвращает текстовое представление объекта. По умолчанию возвращает название класса и хешкод в шестнадцатеричном виде: com.skillbox.skillboxkotlin.Car@b026219 toString()
виде:
com.skillbox.skillboxkotlin.Car@b026219
toString()

Слайд 29

Генерирует методы неявно:
equals()/hashСode()
toString()
componentN()
copy()
Ограничения:
Должен быть как минимум 1 аргумент в основном конструкторе
Все аргументы

Генерирует методы неявно: equals()/hashСode() toString() componentN() copy() Ограничения: Должен быть как минимум
основного конструктора должны быть помечены как val/var
Не может быть open, abstract, inner или sealed
Data class

data class User(
val firstName: String,
val secondName: String
)

Слайд 30

На этом уроке мы рассмотрели ссылочное сравнение объектов и сравнение по значению.

На этом уроке мы рассмотрели ссылочное сравнение объектов и сравнение по значению.
Изучили методы класса Any: equals, hashCode, toString. Рассмотрели data-классы и деструктивные определения.
Выводы

Слайд 31

Делегированные свойства и lateinit

Делегированные свойства и lateinit

Слайд 32

На этом уроке мы с вами рассмотрим модификатор свойств lateinit а также

На этом уроке мы с вами рассмотрим модификатор свойств lateinit а также делегированные свойства Цели урока
делегированные свойства
Цели урока

Слайд 33

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

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

lateinit var router: Router

Слайд 34

Позволяют переиспользовать код для инициализации свойств и добавить логику при обращении к

Позволяют переиспользовать код для инициализации свойств и добавить логику при обращении к
полю и при установке значения
Вы можете создавать собственные и использовать существующие:
lazy - позволяет инициализировать поле при первом обращении
Delegates.notNull - позволяет не инициализировать поле значением при создании, но при этом избежать нуллабельности
Delegates.observable - позволяет вызывать необходимый блок кода при изменении значения свойства
Delegated properties

Слайд 35

На этом уроке мы рассмотрели модификатор свойства lateinit, делегированные свойства, научились создавать

На этом уроке мы рассмотрели модификатор свойства lateinit, делегированные свойства, научились создавать
свои делегированные свойства и использовать встроенное - lazy.
Выводы

Слайд 36

Расширения для классов

Расширения для классов

Слайд 37

На этом уроке мы узнаем, что такое расширения для классов, и как

На этом уроке мы узнаем, что такое расширения для классов, и как
с ними работать.
Цели урока

Слайд 38

Предназначены для добавления нового функционала в классы без наследования от них.
Виды:
extension

Предназначены для добавления нового функционала в классы без наследования от них. Виды:
function
extension property
Extensions

fun CharSequence.isNotEmpty(): Boolean = length > 0

val CharSequence.lastIndex: Int
get() = this.length - 1

Слайд 39

На этом уроке мы рассмотрели расширения, научились их создавать и использовать
Выводы

На этом уроке мы рассмотрели расширения, научились их создавать и использовать Выводы

Слайд 40

Объявления объектов

Объявления объектов

Слайд 41

На этом уроке рассмотрим такие объявления объектов, как объект-синглтон, объект-компаньон.
Цели урока

На этом уроке рассмотрим такие объявления объектов, как объект-синглтон, объект-компаньон. Цели урока

Слайд 42

Синглтон - объект класса, который существует в единственном экземпляре во время всей

Синглтон - объект класса, который существует в единственном экземпляре во время всей
работы приложения.
объявляется с помощью ключевого слова object
объявление объекта не является выражением
у объекта есть имя
может быть 3 области видимости - public, private, internal
объект может наследоваться от класса или реализовывать интерфейс
может содержать свойства и методы
Singleton object

object Cars {
val toyota = Car(wheelCount = 4, maxSpeed = 200)
val nissan = Car(wheelCount = 4, maxSpeed = 250)
}

Слайд 43

находится внутри класса
объявляется с помощью ключевых слов companion object
может быть и не

находится внутри класса объявляется с помощью ключевых слов companion object может быть
быть имени
может быть 4 области видимости - public, private, internal, protected
компаньон может наследоваться или реализовывать интерфейс
может содержать свойства и методы
Companion object

class Car {
companion object {
val default = Car(wheelCount = 4, maxSpeed = 200)
fun createWithDefaultWheels(maxSpeed: Int): Car {
return Car(wheelCount = 4, maxSpeed = 200)
}
}
}

Слайд 44

На этом уроке рассмотрели объявления объектов - объект-синглтон, объект-компаньон. Научились работать с

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

Слайд 45

Перечисления, sealed-классы

Перечисления, sealed-классы

Слайд 46

На этом уроке рассмотрим перечисления и sealed классы, посмотрим, чем они отличаются,

На этом уроке рассмотрим перечисления и sealed классы, посмотрим, чем они отличаются,
как с ними работать на практике.
Цели урока

Слайд 47

Классы, которые могут содержать только объявленные объекты.
Нельзя создать объект этого класса во

Классы, которые могут содержать только объявленные объекты. Нельзя создать объект этого класса
время выполнения
Объявляются с помощью ключевого слова enum
Объекты описываются внутри тела класса
Перечисления являются обычными классами
Enums

enum class Color(
val hex: String
) {
WHITE("#fff"),
BLACK("#000"),
RED("#f00"),
BLUE("#00f")
}

Слайд 48

Класс, наследники которого известны на момент компиляции.
Похож на перечисления
Наследниками могут

Класс, наследники которого известны на момент компиляции. Похож на перечисления Наследниками могут
выступать объекты-синглтоны и классы
Нельзя создавать объекты sealed-класса
Sealed-class

sealed class SealedColor(val hex: String) {
object White: SealedColor("#fff")
object Black: SealedColor("#000")
object Red: SealedColor("#f00")
object Blue: SealedColor("#00f")
class CustomColor(hex: String): SealedColor(hex)
}

Слайд 49

На этом уроке мы рассмотрели перечисления и sealed классы, узнали их возможности

На этом уроке мы рассмотрели перечисления и sealed классы, узнали их возможности
и отличия на практике.
Выводы

Слайд 50

Перегрузка операторов

Перегрузка операторов

Слайд 51

На этом уроке мы с вами поговорим о перегрузке операторов для классов
Цели

На этом уроке мы с вами поговорим о перегрузке операторов для классов Цели урока
урока

Слайд 52

Перегрузка операторов

data class Point(val x: Int, val y: Int)
operator fun Point.unaryMinus() =

Перегрузка операторов data class Point(val x: Int, val y: Int) operator fun
Point(-x, -y)
val point = Point(10, 20)
fun main() {
println(-point)
}

Слайд 53

На этом уроке мы узнали, как можно перегружать работу операторов для собственных

На этом уроке мы узнали, как можно перегружать работу операторов для собственных классов Выводы
классов
Выводы

Слайд 54

Домашнее задание

Домашнее задание
Имя файла: Kotlin:-ООП,-классы.pptx
Количество просмотров: 30
Количество скачиваний: 0