MI-PSL-4 Flashcards

1
Q
  1. Which kind of template definitions exist?
A

Class definice a Object definice (stejne)

Trait definice

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q
  1. Where may template definition occur?
A

Jako top-level výraz (top-level statement)
Uvnitř jiného templatu (template statement)
Uvnitř funkce (block statement)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q
  1. What are the main parts of a template?
A

tpltype extends earlydefs constr with mt1 with … with mtn {
stats
}
tpltype – typ template:
[case|abstract] class c [tps] as m (ps1)…(psn)
c – jméno třídy
tps – typové parametry
as – anotace primárního konstruktoru
m – modifikátor viditelnosti primárního konstruktoru (např. private nebo protected)
ps1…psn – seznamy formálních parametrů primárního konstruktoru
object o
trait t [tps]
t – jméno traitu
tps – typové parametry
earlydefs - definice, které se vyhodnotí před voláním konstruktoru rodiče
constr - konstruktor super třídy (v případě traitu nemůže mít parametry)
mt1 .. mtn - seznam traitů
stats - tělo templatu, definice a deklarace členský proměnných, funkcí, …

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q
  1. Which parts of a template can be omitted?
A

V podstatě všechny části, template může být např jen class Point

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q
  1. How differs trait and class list of parents?
A

Předkům traitu se nepředávají parametry konstruktoru, protože trait se inicializuje až poté, co byli inicializováni všichni rodiče.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q
  1. What happened when a list of parents within the template is omitted?
A

U tříd je doplněno extends AnyRef.
Pokud je uveden nějaký trait jako with trait mt1 a mt1 dědí od třídy class1, je definice přepsána na extends class1 with trait mt1.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q
  1. What is the mixin-evaluation and how it is performed?
A

Postup inicializace tříd

Pro traity - vyhodnotí se tělo traitu
Pro třídy :
Konstruktor nadtřídy je vyhodnocen
Všechny base třídy v linerizaci templatu až k nadtřídě templatu jsou mixin-evaulated
vyhodnotí se tělo třídy
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q
  1. What contains a template body?
A

Sekvenci výrazů daného templatu. Může specifikovat self type. Může obsahovat:

Importy
definici a deklaraci členských proměnných, funkcí, ..
Sekvenci výrazů, které jsou vyhodnocovány v pořadí v jakém jsou napsány

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q
  1. What elements can be class members?
A
proměnné - var
values - val
funkce - def
typy - types
templaty - object, class, trait
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q
  1. What is it declaration and what elements can be declared?
A

abstraktní popis memberů a přiřazení jejich typů
Deklarované můžou být: var, val, def, type
val x
def m (a : Int) : Boolean

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q
  1. What is it definition and what elements can be defined?
A
konkrétní definice nadeklarovaných memberů
Definovaný můžou být všichni co můžou být deklarovaný
val x = 42
def m (a : Int) : Boolean = if a
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q
  1. What is it constant value definition?
A

Proměnná označená klíčovým slovem final.

final val x = expr
expr je konstantní výraz, který je přiřazen do proměnné x. S proměnnou x je poté také zacházeno jako s konstantou.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q
  1. What is it uniform access?
A

K metodám bez parametrů i proměnným se dá přistupovat jednotným způsobem. Toto je umožněno kvuli jednoduché záměně proměnné za metodu v definici templatu bez nutnosti upravovat klientský kod.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q
  1. What is equivalent to the following field declaration: var x : T?
A
def x : T
def x_= ( y : T ): Unit
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q
  1. How can be expressed the var definition with the default initial value?
A

var x : T = _

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q
  1. When the modifier override is mandatory?
A

Pokud je přetěžována metoda předka, která už v předkovi byla definovaná

17
Q
  1. Which methods can be referred by keyword super?
A

Pomocí super se označují metody předka. V traitu lze super volat, pokud je daná metoda v předkovi konkrétní, nebo pokud je abstraktní a v traitu ji předefinujeme s abstract override modifikátorem.

18
Q
  1. Where can be used the constructor invocation?
A

Ve výrazu ve kterém se daný template vytváří nebo v definici třídy/objektu

19
Q
  1. What are base classes?
A

Třídy, které jsou dostupné přes tranzitivní uzávěr přímé dědičnosti jejich rodičů.
Příklad:

abstract class Shape ...
trait ColorShape extends Shape ...
class Circle extends Shape ...
class ColorCircle 
      extends Circle with ColorShape ...
Base třídy  ColorCircle jsou: ColorShape, Circle, Shape, AnyRef and Any.
20
Q
  1. What diagram is formed by the direct inheritance relationship on base classes?
A

Orientovaný acyklický graf

21
Q
  1. When is the list of parents defined by a template well-formed?
A

Nad třída které je definovaná v constr musí být podtřída nadtřídy všech traitů mt1 .. mtn.

Příklad špatně formovaného seznamu předků:

class Ca
class Cb
trait T extends Ca
class C extends Cb with T
error: illegal inheritance; superclass Cb
is not a subclass of the superclass Ca of
the mixin trait T

The issue: The class Ca is not initialized when T is initialized because a trait does not invoke the constructor of its superclass !

22
Q
22.	What is the linearization of class Sub given by following definition?
class Sup
trait Mt
class Sub extends Sup with Mt
A
L(Sup) = {Sup, AnyRef, Any}
L(Mt) = {Mt, AnyRef, Any}
L(Sub) = {Sub, Mt, Sup, AnyRef, Any}
23
Q
  1. What is the self type definition?
A

trait T {
id [: Type] =>
// nebo
this : Type =>
pokud je uvedeno id, je to alias pro referenci this v těle templatu. Ve vnitřních třídách pak není nutné psát např A.this (jako v Javě), ale využije se daného aliasu.
pokud je dán typ, pak se předpokládá, že this má v těle templatu daný typ

24
Q
  1. What is the early definition clause?
A

Early definition klazule umožňuje definovat (případně překrýt) proměnné předtím, než je zavolán konstruktor předka.

příklad:

trait Greeting {
   val name = "Boy" 
   val msg = "How are you, " + name
}
class C extends {
   override val name = "Bob" 
} with Greeting {
   println(msg)   // "How are you, Bob"
}