Created
May 19, 2018 18:51
-
-
Save pablitar/6cd5e42b49d36d61178ac5ccc1772bca to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package ar.edu.tadp.granja | |
import scala.collection.mutable.Set | |
object GranjaApp extends App { | |
class Animal { | |
var peso = 100 | |
def come = peso += 10 | |
def estaGordo = peso >= 150 | |
} | |
class Vaca extends Animal { | |
def ordeñate = peso -= 10 | |
} | |
class VacaLoca extends Vaca { | |
def reite = "Muajajajjaajja" | |
} | |
class Caballo extends Animal { | |
def relincha = "IEIIEIEeeeeieeie" | |
} | |
var vaca: Vaca = new Vaca | |
val caballo: Caballo = new Caballo | |
vaca.ordeñate | |
var miColeccion: Set[Animal] = Set(new Vaca, new Vaca, new VacaLoca) | |
miColeccion = miColeccion.filter(_.estaGordo) | |
class Lechero { | |
def ordeñar(corral: Corral[Vaca]) = | |
corral.animales.foreach(_.ordeñate) | |
} | |
class Pastor { | |
def pastorear(animales: List[Animal]) = | |
animales.foreach(_.come) | |
} | |
class Corral[+T <: Animal](val animales: List[T]) { | |
def contiene[U >: T](uno: U) = animales.contains(uno) | |
def primero(): T = ??? | |
def agregar[U >: T <: Animal](uno: U) = new Corral(uno :: animales) | |
def corralQueCumple(f: Function1[T, Boolean]) = | |
new Corral(animales.filter(f)) | |
} | |
val corralito: Corral[Vaca] = new Corral( | |
List(new Vaca, new Vaca, new Vaca)) | |
val otroCorralito = corralito.agregar(new Caballo) | |
val lechero = new Lechero | |
val pastor = new Pastor | |
//pastor.pastorear(corralito.animales) | |
lechero.ordeñar(corralito) | |
var f: Vaca => Vaca = _ | |
def g(vaca: Vaca): Vaca = ??? // Recibe una Vaca y devuelve una Vaca | |
def h(vaca: Vaca): Animal = ??? // Devuelve un Animal | |
def i(vaca: Vaca): VacaLoca = ??? // Devuelve una VacaLoca | |
def j(vacaLoca: VacaLoca): Vaca = ??? // Recibe una VacaLoca | |
def k(animal: Animal): Vaca = ??? // Recibe un Animal | |
def l(animal: Animal): VacaLoca = ??? | |
f = l | |
f(new Vaca).ordeñate | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment