Classes in Scala
Class types 
● class 
● trait: class without constructors 
● object: singleton class
Primary constructor 
Есть главный конструктор, который будет 
всегда вызван:
Primary constructor 
С модификатором доступа:
Super call 
Класс может наследовать ровно один другой 
класс:
Trait implementation 
Все остальное записывается через with:
Trait implementation 
Базовый класс даже и не нужен:
Class body 
Тело класса записывается сразу после 
списка наследования:
Constructor body 
Телом конструктора является тело класса:
Property 
Объявление val/var в классе - свойство:
Property
Property 
Значит свойства могут переопределять 
методы и их можно переопределить другим 
свойством:
Constructor property 
Можно объявлять прямо в конструкторе:
Constructor property 
Если при этом что-то переопределяем:
Override 
Модификатор требуется всегда при 
переопределении. При имплементации он 
опционален:
Functions 
Возвращаемое значение можно опустить. 
Фигурные скобки не обязательны:
Currying 
Можно определять несколько списков 
параметров:
Secondary constructor 
Функция с именем this:
Secondary constructor 
Конструкторы образуют дерево.
Traits 
Тоже, что и класс, но без конструкторов. Не 
может наследовать классы.
Trait in bytecode
Multiple inheritance 
Классическая проблема:
Linearization 
Определяет порядок наследования
Linearization 
Линеаризация определяется поиском в 
глубину начиная справа с удалением 
дубликатов: 
[D, C, A, B, A] => [D, C, B, A] 
Семантика программы зависит от порядка 
наследования!
Initialization 
Линеаризация также задает порядок 
инициализации в обратном направлении.
Early definitions 
Можно определить переменные до вызова 
суперконструктора:
Early definitions 
Это решает проблему инициализации:
Lazy val 
Можно определить переменные, которые 
будет вычислены лишь в момент первого 
обращения:
Lazy val in bytecode
Lazy val init 
Можно изначальную проблему решить так:
Objects 
Синглтон класс:
Objects in bytecode
Generic classes 
Записываются в квадратных скобках:
Bounds 
На generics можно накладывать условия 
снизу и сверху:
Variance (covariance) 
Covariant type parameter:
Variance (contravariance) 
Contravariant type parameter
Variance positions 
Для таких generics определены правильные 
позиции в классе:
Type aliases 
Еще один возможный член класса:
Generic type alias 
Можно упрощать типы при желании:
Abstract type alias 
Можно не определять тип: 
На что это похоже?
Type alias VS generics 
Пример реализации с abstract type alias

More Related Content

PPT
Java. Конструкторы класса и инициализация
PPTX
Cтатические классы и статические члены класса
PPT
Рефлексия в java
PPTX
Java Core. Lecture# 3. Part# 1. Abstract classes.
PDF
Глава 3: примитивные типы и операции с ними в Java
PDF
C++ осень 2012 лекция 3
PPTX
Java Core. Lecture# 2. Classes & objects.
PPT
Msu.Center.Lectures.J02 Classes And Objects
Java. Конструкторы класса и инициализация
Cтатические классы и статические члены класса
Рефлексия в java
Java Core. Lecture# 3. Part# 1. Abstract classes.
Глава 3: примитивные типы и операции с ними в Java
C++ осень 2012 лекция 3
Java Core. Lecture# 2. Classes & objects.
Msu.Center.Lectures.J02 Classes And Objects

What's hot (14)

PPTX
Java Core. Lecture# 3. Part# 3. Multithreading.
PPTX
Наследование и полиморфизм
ODP
Java. Classes.
PDF
лек11 5
PDF
C++ осень 2013 лекция 5
PDF
C++ осень 2013 лекция 3
PDF
20100321 virtualization igotti_lecture08
PPT
Java. Введение в коллекции. Классы обертки. Перечисленияю
PPT
Java. Generic - шаблонные типы.
PPT
Step 3.2
PPTX
Java Core. Lecture# 1. Intro
PPTX
Java Core. Lecture# 3. Part# 2. Exceptions.
PPTX
Лекция 6_принципы ООП : инкапсуляция, наследование
Java Core. Lecture# 3. Part# 3. Multithreading.
Наследование и полиморфизм
Java. Classes.
лек11 5
C++ осень 2013 лекция 5
C++ осень 2013 лекция 3
20100321 virtualization igotti_lecture08
Java. Введение в коллекции. Классы обертки. Перечисленияю
Java. Generic - шаблонные типы.
Step 3.2
Java Core. Lecture# 1. Intro
Java Core. Lecture# 3. Part# 2. Exceptions.
Лекция 6_принципы ООП : инкапсуляция, наследование
Ad

Viewers also liked (20)

PDF
Scala training
PDF
Backend: Пишем на Scala для браузера
PPTX
Scala для всех (РИФ 2015)
PDF
Feature suggester
PDF
PDF
PDF
PDF
Scala lecture #4
PDF
Under the hood of scala implicits (Scala eXchange 2014)
PDF
Павел Павлов - Scala для профессионалов - Joker 2013
PDF
Under the hood of scala implicits (kl10tch 10.03.2015)
ODP
Distributed erlang
PPTX
Самурайский путь молодого Scala-программиста
PDF
Переход на Scala: босиком по граблям
PDF
Implicit Implicit Scala
PDF
Scala performance под капотом
PDF
Clojure #2 (2014)
Scala training
Backend: Пишем на Scala для браузера
Scala для всех (РИФ 2015)
Feature suggester
Scala lecture #4
Under the hood of scala implicits (Scala eXchange 2014)
Павел Павлов - Scala для профессионалов - Joker 2013
Under the hood of scala implicits (kl10tch 10.03.2015)
Distributed erlang
Самурайский путь молодого Scala-программиста
Переход на Scala: босиком по граблям
Implicit Implicit Scala
Scala performance под капотом
Clojure #2 (2014)
Ad

Similar to Scala #2 (19)

PPT
Java. Lecture 03. OOP and UML
PPTX
десант презентация
PPT
PDF
Scala
PPTX
СИ++ УМЕР. ДА ЗДРАВСТВУЕТ СИ++
PPT
Lec 2 Java
PDF
Павел Павлов - Scala для Java программистов (JavaDay Nsk 28.11.2013)
PPT
03 ООП и UML
PDF
Rust: абстракции и безопасность, совершенно бесплатно
ODP
основы ооп
PPT
Msu.Center.Lectures.J03 Oop And Uml
PDF
Scala: что, как и зачем?
PPT
Основы объектно-ориентированного программирования
PDF
WebCamp 2016: Python.Максим Климишин.Типизированный Python
PDF
Архитектура в Agile: слабая связность
PDF
Scala Rock-Painting
ODP
Scala: introduction
PPTX
Зачем нужна Scala?
PDF
Java осень 2014 занятие 3
Java. Lecture 03. OOP and UML
десант презентация
Scala
СИ++ УМЕР. ДА ЗДРАВСТВУЕТ СИ++
Lec 2 Java
Павел Павлов - Scala для Java программистов (JavaDay Nsk 28.11.2013)
03 ООП и UML
Rust: абстракции и безопасность, совершенно бесплатно
основы ооп
Msu.Center.Lectures.J03 Oop And Uml
Scala: что, как и зачем?
Основы объектно-ориентированного программирования
WebCamp 2016: Python.Максим Климишин.Типизированный Python
Архитектура в Agile: слабая связность
Scala Rock-Painting
Scala: introduction
Зачем нужна Scala?
Java осень 2014 занятие 3

Scala #2