SlideShare una empresa de Scribd logo
1 de 41
Descargar para leer sin conexión
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

Más contenido relacionado

La actualidad más candente

Java Core. Lecture# 3. Part# 3. Multithreading.
Java Core. Lecture# 3. Part# 3. Multithreading.Java Core. Lecture# 3. Part# 3. Multithreading.
Java Core. Lecture# 3. Part# 3. Multithreading.Anton Moiseenko
 
C++ осень 2013 лекция 5
C++ осень 2013 лекция 5C++ осень 2013 лекция 5
C++ осень 2013 лекция 5Technopark
 
C++ осень 2013 лекция 3
C++ осень 2013 лекция 3C++ осень 2013 лекция 3
C++ осень 2013 лекция 3Technopark
 
20100321 virtualization igotti_lecture08
20100321 virtualization igotti_lecture0820100321 virtualization igotti_lecture08
20100321 virtualization igotti_lecture08Computer Science Club
 
Java. Введение в коллекции. Классы обертки. Перечисленияю
Java. Введение в коллекции. Классы обертки.  ПеречисленияюJava. Введение в коллекции. Классы обертки.  Перечисленияю
Java. Введение в коллекции. Классы обертки. ПеречисленияюUnguryan Vitaliy
 
Java. Generic - шаблонные типы.
Java.  Generic - шаблонные типы.Java.  Generic - шаблонные типы.
Java. Generic - шаблонные типы.Unguryan Vitaliy
 
Java Core. Lecture# 1. Intro
Java Core. Lecture# 1. IntroJava Core. Lecture# 1. Intro
Java Core. Lecture# 1. IntroAnton Moiseenko
 
Java Core. Lecture# 3. Part# 2. Exceptions.
Java Core. Lecture# 3. Part# 2. Exceptions.Java Core. Lecture# 3. Part# 2. Exceptions.
Java Core. Lecture# 3. Part# 2. Exceptions.Anton Moiseenko
 
Лекция 6_принципы ООП : инкапсуляция, наследование
Лекция 6_принципы ООП : инкапсуляция, наследованиеЛекция 6_принципы ООП : инкапсуляция, наследование
Лекция 6_принципы ООП : инкапсуляция, наследованиеmetaform
 

La actualidad más candente (14)

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

Destacado

Backend: Пишем на Scala для браузера
Backend: Пишем на Scala для браузераBackend: Пишем на Scala для браузера
Backend: Пишем на Scala для браузераCodeFest
 
Under the hood of scala implicits (Scala eXchange 2014)
Under the hood of scala implicits (Scala eXchange 2014)Under the hood of scala implicits (Scala eXchange 2014)
Under the hood of scala implicits (Scala eXchange 2014)Alexander Podkhalyuzin
 
Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013ScalaNsk
 
Under the hood of scala implicits (kl10tch 10.03.2015)
Under the hood of scala implicits (kl10tch 10.03.2015)Under the hood of scala implicits (kl10tch 10.03.2015)
Under the hood of scala implicits (kl10tch 10.03.2015)Alexander Podkhalyuzin
 
Distributed erlang
Distributed erlangDistributed erlang
Distributed erlangYuri Zhloba
 
Самурайский путь молодого Scala-программиста
Самурайский путь молодого Scala-программистаСамурайский путь молодого Scala-программиста
Самурайский путь молодого Scala-программистаSergey Lobin
 
Переход на Scala: босиком по граблям
Переход на Scala: босиком по граблямПереход на Scala: босиком по граблям
Переход на Scala: босиком по граблямSveta Bozhko
 
Implicit Implicit Scala
Implicit Implicit ScalaImplicit Implicit Scala
Implicit Implicit ScalaKota Mizushima
 
Scala performance под капотом
Scala performance под капотомScala performance под капотом
Scala performance под капотомRoman Grebennikov
 

Destacado (20)

Scala training
Scala trainingScala training
Scala training
 
Backend: Пишем на Scala для браузера
Backend: Пишем на Scala для браузераBackend: Пишем на Scala для браузера
Backend: Пишем на Scala для браузера
 
Scala для всех (РИФ 2015)
Scala для всех (РИФ 2015)Scala для всех (РИФ 2015)
Scala для всех (РИФ 2015)
 
Scala #5
Scala #5Scala #5
Scala #5
 
Feature suggester
Feature suggesterFeature suggester
Feature suggester
 
Lec 2
Lec 2Lec 2
Lec 2
 
Scala #4
Scala #4Scala #4
Scala #4
 
Erlang
ErlangErlang
Erlang
 
Scala magic
Scala magicScala magic
Scala magic
 
Scala lecture #4
Scala lecture #4Scala lecture #4
Scala lecture #4
 
Under the hood of scala implicits (Scala eXchange 2014)
Under the hood of scala implicits (Scala eXchange 2014)Under the hood of scala implicits (Scala eXchange 2014)
Under the hood of scala implicits (Scala eXchange 2014)
 
Scala plugin for IntelliJ IDEA
Scala plugin for IntelliJ IDEAScala plugin for IntelliJ IDEA
Scala plugin for IntelliJ IDEA
 
Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013
 
Under the hood of scala implicits (kl10tch 10.03.2015)
Under the hood of scala implicits (kl10tch 10.03.2015)Under the hood of scala implicits (kl10tch 10.03.2015)
Under the hood of scala implicits (kl10tch 10.03.2015)
 
Scala #3
Scala #3Scala #3
Scala #3
 
Distributed erlang
Distributed erlangDistributed erlang
Distributed erlang
 
Самурайский путь молодого Scala-программиста
Самурайский путь молодого Scala-программистаСамурайский путь молодого Scala-программиста
Самурайский путь молодого Scala-программиста
 
Переход на Scala: босиком по граблям
Переход на Scala: босиком по граблямПереход на Scala: босиком по граблям
Переход на Scala: босиком по граблям
 
Implicit Implicit Scala
Implicit Implicit ScalaImplicit Implicit Scala
Implicit Implicit Scala
 
Scala performance под капотом
Scala performance под капотомScala performance под капотом
Scala performance под капотом
 

Scala #2