-
Notifications
You must be signed in to change notification settings - Fork 0
/
clientes.wlk
46 lines (38 loc) · 1.17 KB
/
clientes.wlk
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
class Cliente {
var property deuda = 0
method comprar(monto) {
deuda = deuda + monto
console.println("Cliente - comprar")
}
}
mixin SafeShop {
var property montoMaximoSafeShop = 50
method comprar(monto) {
console.println("SafeShop - comprar")
if (monto > montoMaximoSafeShop) {
console.println("SafeShop - Validación falló")
throw new Exception(message = "Debe comprar por menos de " + montoMaximoSafeShop)
}
console.println("SafeShop - Validación ok")
super(monto)
}
}
mixin Promocion {
var property puntosPromocion = 0
method comprar(monto) {
console.println("Promocion - comprar")
super(monto)
if (monto > 20) {
console.println("Promoción - sumo puntos")
puntosPromocion = puntosPromocion + 15
}
}
}
class ClienteConSafeShop inherits SafeShop and Cliente {
method deudaEnRojo() = deuda - montoMaximoSafeShop
}
// Linearización
// ClienteConSafeShopYPromocion => Promocion => SafeShop => Cliente
class ClienteConSafeShopYPromocion inherits Promocion and SafeShop and Cliente { }
// ClienteConSafeShopYPromocion2 => SafeShop => Promocion => Cliente
class ClienteConSafeShopYPromocion2 inherits SafeShop and Promocion and Cliente { }