MI-PSL-4 Flashcards
- Which kind of template definitions exist?
Class definice a Object definice (stejne)
Trait definice
- Where may template definition occur?
Jako top-level výraz (top-level statement)
Uvnitř jiného templatu (template statement)
Uvnitř funkce (block statement)
- What are the main parts of a template?
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í, …
- Which parts of a template can be omitted?
V podstatě všechny části, template může být např jen class Point
- How differs trait and class list of parents?
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.
- What happened when a list of parents within the template is omitted?
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.
- What is the mixin-evaluation and how it is performed?
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
- What contains a template body?
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
- What elements can be class members?
proměnné - var values - val funkce - def typy - types templaty - object, class, trait
- What is it declaration and what elements can be declared?
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
- What is it definition and what elements can be defined?
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
- What is it constant value definition?
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.
- What is it uniform access?
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.
- What is equivalent to the following field declaration: var x : T?
def x : T def x_= ( y : T ): Unit
- How can be expressed the var definition with the default initial value?
var x : T = _
- When the modifier override is mandatory?
Pokud je přetěžována metoda předka, která už v předkovi byla definovaná
- Which methods can be referred by keyword super?
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.
- Where can be used the constructor invocation?
Ve výrazu ve kterém se daný template vytváří nebo v definici třídy/objektu
- What are base classes?
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.
- What diagram is formed by the direct inheritance relationship on base classes?
Orientovaný acyklický graf
- When is the list of parents defined by a template well-formed?
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. What is the linearization of class Sub given by following definition? class Sup trait Mt class Sub extends Sup with Mt
L(Sup) = {Sup, AnyRef, Any} L(Mt) = {Mt, AnyRef, Any} L(Sub) = {Sub, Mt, Sup, AnyRef, Any}
- What is the self type definition?
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
- What is the early definition clause?
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" }