Documente Academic
Documente Profesional
Documente Cultură
Contenido
Introduccin 2
Clases
Caractersticas
Herencia 3
Tipos 4
SELF_TYPE
Tipo Checking
Atributos
Void8
Mtodos
Expresiones 9
Constantes
Identificadores
Asignacin 10
Dispatch
10
Condicionales
Bucles
12
Bloques
12
11
Let 13
Case
13
New14
Isvoid
14
16
15
15
15
Int 16
Introduccin
Este manual describe el lenguaje de programacin Cool: Classroom ObjectOriented Language. Cool es un pequeo lenguaje que se puede implementar
con un esfuerzo razonable y aun asi conserva muchas de las caractersticas de
los lenguajes de programacin modernos, incluyendo objetos, tipos estticos, y
gestin de memoria automtica.
Los programas Cool son un conjunto de clases. Una clase encapsula las
variables y los procedimientos de un tipo de datos. Donde las instancias de una
clase son objetos. En Cool, se identifican las clases y los tipos; es decir, cada
clase define un tipo. Las clases permiten a los programadores definir nuevos
tipos y procedimientos asociados (o mtodos) especficos a de los tipos. La
herencia permite nuevos tipos de extender el comportamiento de los tipos
existentes.
Cool es un lenguaje de expresin. La mayora de las construcciones Cool son
expresiones, y cada expresin tiene un valor y un tipo.
Cool es de tipo seguro: Los procedimientos estn garantizados para ser
aplicado a los datos del tipo correcto.
Mientras que los tipos estticos imponen una fuerte disciplina en la
programacin en Cool, lo que garantiza que en ningn tiempo de ejecucin los
errores pueden surgir en los programas.
Este manual se divide en los componentes formales e informales. La
descripcin informal, la primera mitad (hasta la seccin 9). La descripcin
formal comienza con la Seccin 10.
Clases
Todo el cdigo en Cool est organizado en clases. Cada definicin de clase
debe estar contenida en un solo archivo fuente, podiendo definirse en un solo
archivo mltiples de ellas. Las definiciones de clase tienen la forma:
La notacin [...] denota una construccin opcional. Todos los nombres de las
clases son visibles globalmente. Los nombres de clase deben comenzar con
una letra mayscula. Y no pueden ser redefinidas.
Caractersticas
El cuerpo de una definicin de clase consiste en una lista de funciones. Una
funcin es o bien un atributo o un mtodo. Donde un atributo de clase A
especifica una variable que es parte del estado de los objetos de la clase A. Y
un mtodo de la clase A es un procedimiento que puede manipular las variables
y objetos de la clase A.
Uno de los temas principales de los lenguajes de programacin modernos es el
de information hiding, que es la idea de que ciertos aspectos de aplicacin
deben ser abstractos y ocultos a los usuarios del tipo de datos. Cool apoya la
esto a travs de un mecanismo sencillo: todos los atributos tienen un mbito
local en la clase, y todos los mtodos tienen un alcance global. Por lo tanto, la
nica manera de proporcionar acceso al estado de objeto en Cool es a travs
de mtodos.
Los nombres de funciones deben empezar con una letra minscula. El nombre
de un mtodo no se puede definir varias veces en una clase, ni ningn nombre
de atributo, pero si un mtodo y un atributo pueden tener el mismo nombre.
Herencia
Si la definicin de una clase es:
Tipos
En Cool, cada nombre de clase es tambin un tipo. Y adems, hay un tipo
SELF_TYPE que se puede utilizar en circunstancias especiales.
Una declaracin Tipo tiene la forma x: C, donde x es una variable y C es un
tipo. Cada variable debe tener una declaracin Tipo en el momento de su
introduccin, ya sea en un let, case o como parmetro formal de un mtodo.
Los Tipos de los atributos tambin deben ser declarados.
La regla de Tipo bsico en Cool es que si un mtodo o variable espera un valor
de Tipo P, entonces cualquier valor de Tipo C pueden utilizarse en su lugar, lo
que indica que P es un antepasado de C en la jerarqua de clases. En otras
SELF_TYPE
El SELF_TYPE Tipo se utiliza para referirse al Tipo de la variable auto. Esto es
til en las clases que son heredadas por otras clases, ya que le permite al
programador evitar la especificacin de un Tipo final arreglado al tiempo que la
clase es escrita. Por ejemplo el programa:
Tipo Checking
Tipo Sistema Cool garantiza al tiempo de la compilacin que la ejecucin de un
programa no resulte en Tipo errores. Usando las Tipo declaraciones de los
identificadores proporcionados por el programador, el tipo Checking infiere un
tipo para cada expresin en el programa.
Es importante distinguir entre el tipo asignado por el verificador de tipos para
una expresin en tiempo de compilacin, que llamaremos el tipo esttico de la
expresin, y el tipo (s) a la que la expresin evaluar durante la ejecucin, la
llamaremos los tipos dinmicos.
Es necesaria la distincin entre los tipos estticos y dinmicos porque el tipo de
corrector no puede, al tiempo de compilacin, tener la informacin perfecta
sobre qu valores se calculan en tiempo de ejecucin. Por lo tanto, en general,
los tipos estticos y dinmicos pueden ser diferentes. Lo que necesitamos, sin
embargo, es que el tipo de corrector esttico sea de mejor estado con respecto
a los tipos dinmicos.
Definicin 4.2 Para cualquier expresin e, De es un tipo dinmico de e y dejar
que Se sea el tipo esttico inferido por el tipo de corrector. Entonces el tipo de
corrector es de mejor estado si para todas las expresiones e es el caso de que
De Se.
Dicho de otra manera, es necesario que el tipo corrector err en el lado de
sobreestimar el tipo de un expresin en aquellos casos donde la precisin
perfecta no es posible. Tal tipo de un corrector nunca aceptar un programa
que contiene tipo errores. Sin embargo, el precio que se paga es que el tipo
corrector rechazar algunos programas que realmente se ejecutan sin errores
en tiempo de ejecucin.
Atributos
La de definicin de un atributo tiene la forma:
Void
Todas las variables en Cool se inicializan para contener valores del tipo
apropiado. El valor especial void es miembro de todos los tipos y se utiliza
como la inicializacin por defecto para las variables donde hay inicializacin.
(Void se utiliza cuando se podra usar NULL en C o null en Java. El void de
Cool no tiene nada equivalente al de C o el de Java) Tenga en cuenta que no
hay ningn nombre para void en cool; la nica manera de crear un valor nulo es
declarando una variable de otra clase que no sea Int, String o Bool y esto
permite se produzca la inicializacin por defecto, o almacenar el resultado de
un While Loop.
Hay una forma especial, isvoid expr, que pone a prueba si un valor es.
Adicionalmente, los valores void se pueden probar por la igualdad. Un valor
nulo puede ser pasado como argumento, asignado a una variable, o cualquier
uso en cualquier contexto en el que cualquier valor sea legtimo, salvo que un
dispatch genera un error de ejecucin.
Mtodos
La de definicin de un Mtodo tiene la forma:
Sea p un objeto con Tipo dinmico P. Entonces p.f () + 1. Es una expresin bien
formada con un valor de 2. Sin embargo, no podemos sustituir un valor de tipo
C para p, porque resultara aadiendo un String a un nmero. Por lo tanto, si
los mtodos pueden ser redefinidos de manera arbitraria, las subclases no
pueden simplemente extender el comportamiento de sus padres, y gran parte
de la utilidad de la herencia, as como tipo de seguridad, se pierde.
Expresiones
Las expresiones son la categora sintctica ms larga en Cool.
Constantes
Las expresiones ms simples son constantes. Las constantes booleanas son
true y false. Las constantes enteras son String sin signo de dgitos como 0, 123
y 007. Las constantes String son secuencias de caracteres entre comillas
dobles, como "Esto es una cadena". En las constantes String pueden estar la
mayora de los 1024 caracteres.
Hay otras restricciones sobre los String; vase la Seccin 10. Las constantes
pertenecen a las clases bsicas Bool, Int, y String. El valor de una constante es
un objeto de la clase bsica apropiada.
Identificadores
Los nombres de las variables locales, los parmetros formales de los mtodos,
Self, y los atributos de clase son todas expresiones. El identificador Self puede
hacer referencia, pero es un error asignar a un Self o unir Self en un let, un
case, o como un parmetro formal. Tambin es ilegal tener atributos con
nombre Self.
Las variables locales y los parmetros formales tienen mbito lxico. Los
atributos son visibles a lo largo de una clase en el que se declaran o
heredadas, aunque pueden estar ocultos por las declaraciones locales dentro
de expresiones. La unin de un identificador de referencia es el alcance ms
interno que contiene una declaracin para dicho identificador, o para el atributo
del mismo nombre si no hay otra declaracin. La excepcin a esta regla es el
identificador Self que se une de forma implcita en todas las clases.
Asignacin
Una asignacin tiene la forma:
Dispatch
Hay tres formas de dispatch (es decir, el mtodo de llamada) en Cool. Las tres
formas difieren slo como el mtodo llamado es seleccionado. La forma ms
usual de dispatch es:
Considere el dispatch e0.f (e1, ..., en). Para evaluar esta expresin, los
argumentos se evalan de izquierda a derecha en orden correcto, desde e 1 a
en. A continuacin, e0 es evaluado y su clase C seala (si e0 es Void se genera
Condicionales
Una condicin tiene la forma de:
Bucles
Un bucle tiene la forma
While <expr> loop <expr> pool
El predicado se evala antes de cada iteracin del bucle. Si el predicado es
falsa, el bucle termina y se devuelve vaco. Si el predicado es verdadero, el
cuerpo del bucle se evala y el proceso se repite.
El predicado debe tener tipo esttico Bool. El cuerpo puede tener cualquier tipo
esttico. El tipo esttico de un expresin de bucle es objeto.
Bloques
Un bloque tiene la forma
{<Expr>; ... <Expr>; }
Las expresiones se evalan en orden de izquierda a derecha. Cada bloque
tiene al menos una expresin; el valor de un bloque es el valor de la ltima
expresin. Las expresiones de un bloque pueden tener cualquier tipo estticas.
El tipo esttico de un bloque es el tipo esttico de la ltima expresin. Una
fuente ocasional de confusin en Cool es el uso del punto y coma (";"). Se usan
puntos y comas como terminadores en las listas de expresiones (por ejemplo,
la sintaxis del bloque anterior) y no como separadores de expresin. Punto y
coma tambin terminan otro Refresque construcciones, vase la Seccin 11
para ms detalles.
Let
permitir
Una expresin let tiene la forma
Let <id1>: <tipo1> [<- <expr1>], ..., <idn>: <typen> [<- <exprn>] en <expr>
Las expresiones opcionales son de inicializacin; la otra expresin es el
cuerpo. A let se evala como siguiente. Primero <expr1> se evala y el
resultado obligado a <id1>. Luego <expr2> es evaluado y el resultado unido a
<id2>, y as sucesivamente, hasta que todas las variables en el let se
inicializan. (Si la inicializacin de <idk> se omite, <TYPEK> se utiliza la
inicializacin por defecto de tipo.) A continuacin, el cuerpo del let es evaluado.
El valor de la let es el valor del cuerpo. Los identificadores vamos <id1>, ..., <>
idn son visibles en el cuerpo del let. Adems, los identificadores <id1>, ..., <idk>
son visibles en la inicializacin de <idm> para cualquier m> k. Si un
identificador est definido varias veces en un let, despus enlaces esconden
las anteriores. Identificadores introducido por let tambin ocultar las
definiciones de los mismos nombres en mbitos que contiene. Cada expresin
debe dejar introducir al menos un identificador.
Case
La expresin de case tiene la siguiente forma:
New
Una nueva expresin tiene la forma
new <type>
El valor es un objeto fresco de la clase apropiada. Si el tipo es SELF TYPE, el
valor es un fresco objeto de la clase de uno mismo en el mbito actual. El tipo
esttico es <type>.
Isvoid
La expresin
isvoid expr
Evala como true si expr es nulo y se evala como false si expr no es nula.
Clases bsicas
Object
La clase Object es la raz de la grfica de herencia. Los mtodos con las
siguientes declaraciones se definen:
Io
La clase IO proporciona los siguientes mtodos para realizar operaciones de
entrada y salida sencillas:
Int
La clase Int proporciona nmeros enteros. No hay mtodos especiales a int. La
inicializacin por defecto para las variables de tipo int es 0 (no nula). Es un
error que heredar de redefinir o int.
String
La clase String proporciona cuerdas. Los siguientes mtodos se definen:
Booleano
El booleano proporciona verdadero o falso. La inicializacin por defecto para
las variables de tipo Bool es falso (no void).
Main class
Cada programa debe tener una clase main. Por otra parte, la clase main debe
tener un mtodo principal que no tiene parmetros formales. El mtodo
principal se debe definir en la clase principal (no heredadas de otra clase). Un
programa se ejecuta mediante la evaluacin de (new Main) .main ().
Estructura lxica
Las unidades lxicas de cool son enteros, identificadores de tipo,
identificadores de objeto notacin especial, cuerdas, palabras clave y los
espacios en blanco.