Visión general de cool

1 Vista general de cool

  • C lassroom O bject O riented L anguage.

2 Vista general de cool

  • cool es un lenguaje basado en expresiones (expression language).
  • los programas tienen sufijo .cl,
  • es un lenguaje que permite:
    • clases abstractas.
    • Tipos estáticos (chequeo de tipos en tiempo de compilación).
    • Herencia simple.
    • Manejo de memoria.

3 Cosas familiares

  • Todo se compone de clases
  • Cada clase debe estar en un solo fichero
  • Pero un mismo fichero puede tener diferentes clases
  • Cada clase tiene métodos y deben devolver un tipo
  • Cada bloque de ordenes va entre llaves
  • El último valor es el valor de retorno

4 Ejemplo de código

class Main {

      i : IO <- new IO;
      main(): Object {
        i.out_string("Hola Mundo")
      };


};

5 Otro ejemplo de código

class Main inherits IO{

      i : IO <- new IO;
      main(): Object {
        self.out_string("Hola Mundo")
      };


};

6 Pasemos a programar cosas más difíciles

class Main {

      main(): Object {
        {
        (new IO).out_string("Dame un numero:");
        (new IO).in_string().concat("\n");
        }
      };


};

7 Libreria

Para compilar con una libreria extra, hace falta añadirla a la linea de comandos.

8 Asignación de variables

Las variables se ponen dentro de un bloque.

let  fact: Int  <- 1 in
               {
                 while (not (i=0)) loop
                 {
                        fact <- fact * i;
                        i <- i - 1;
                 }
                 pool;
                 fact;
               }

9 Asignación de variables

Se pueden generar varias variables utilizando comas

class main inherits IO{
 main(): Object{
   let hello: String <- "Hello",
       world: String <- "World",
       newline: String <- "\n"
   in
      out_string(hello.concat(world.concat(newline)))
 };
};

10 Clases dentro de ficheros

Se pueden definir varias clases en el mismo fichero:

class Lista{
  item: String;
  next: Lista;
  init(i: String, n: Lista): Lista{
  {
    item <- i;
    next <- Lista;
    self;
  }
  };
  to_string(): String
  {
    if (isvoid next) then item else item.concat(next.to_string()) fi
  };
};

11 Clases dentro de ficheros

Se pueden definir varias clases en el mismo fichero:

class main inherits IO{
 main(): Object{
   let hello: String <- "Hello",
       world: String <- "World",
       newline: String <- "\n",
       null: Lista,
       l: Lista <- (new Lista).init(hello,
       (new Lista).init(world,
       (new Lista).init(newline,null)
       ))
   in
      out_string(l.to_string())
 };
};