Pseudo Lengua Je

Embed Size (px)

Citation preview

  • Un pseudolenguaje para laintroduccin a la programacin

    J. M. lvarez Palomo, D. Bueno Vallejo, J. Garraln Ruiz, J.A. Gmez Ruiz,

    P. Lpez Olivas, L. Llopis Torres, F. Rus Mansilla, F.J. Veredas Navarro

    E.T.S.I. Telecomunicacin

    Dpto. Lenguajes y Ciencias de la Computacin

    Universidad de Mlaga

    viernes 11 de octubre de 2002

  • Pseudolenguaje

    11/10/02 Lenguajes y Ciencias de la Computacin E.T.S. Ingenieros de Telecomunicacin 2 de 22

  • Pseudolenguaje

    11/10/02 Lenguajes y Ciencias de la Computacin E.T.S. Ingenieros de Telecomunicacin 3 de 22

    Contenido

    1. Elementos lxicos ..........................................................................................4

    2. Estructura general de un programa .............................................................4

    3. Tipos ................................................................................................................6

    4. Expresiones ....................................................................................................6

    5. Entrada / Salida .............................................................................................7

    6. Constantes simblicas y variables ..............................................................7

    7. Valores enumerados .....................................................................................8

    8. Subalgoritmos ................................................................................................8

    9. Arrays ............................................................................................................10

    10. Cadenas de caracteres ..............................................................................11

    11. Registros .......................................................................................................12

    12. Ficheros ........................................................................................................13

    13. Punteros ........................................................................................................14

    14. Clases ...........................................................................................................15

    15. Sentencias ....................................................................................................18

    16. Notas sobre estilo ........................................................................................19

    Anexo I. Operadores ...........................................................................................20

    Anexo II. Subprogramas predefinidos ..............................................................21

    Anexo III. Gestin de ficheros ............................................................................22

  • Pseudolenguaje

    11/10/02 Lenguajes y Ciencias de la Computacin E.T.S. Ingenieros de Telecomunicacin 4 de 22

    1. Elementos lxicos

    Un programa puede verse como una gran cadena de caracteres del conjunto estndar de la mquina (ASCII,Latino 1 o Unicode por ejemplo). Lo primero que hace un compilador para traducir un programa de alto nivel esagrupar los caracteres del programa en unidades lxicas bsicas o tokens . Combinando estas unidadeslxicas de acuerdo a unas reglas sintcticas obtenemos las sentencias, que sern declarativas o ejecutables.A continuacin se enumeran los elementos lxicos tpicos de los lenguajes de tipo imperativo.

    Palabras clave o reservadas: cadenas de letras con sentido predefinido en el lenguaje. En nuestro pseudo-lenguaje las escribiremos con todas sus letras en maysculas.

    Literal: datos constantes sin nombre. Pueden ser numricos como 2, -5, 2.3, 3.103e-23 o de caracteres.Estos ltimos deben ir entre comillas simples si constan de un solo carcter, a, \n; o dobles si soncadenas, Hola, qu tal?.

    Identificador: cadena de caracteres alfanumricos (letras y dgitos) que comienza con una letra y que no espalabra reservada. En este sentido el smbolo de subrayado _ se considera una letra. Se utilizan para que elprogramador d nombre a las distintas entidades que contiene el programa.

    Operadores: smbolos o combinaciones cortas de smbolos que representan operaciones aritmtico-lgicas.Los que constan slo de letras pueden considerarse tambin palabras reservadas. Son los siguientes1:

    Aritmticos: + - * / DIV MOD

    Relacionales y de igualdad: < > = != ==

    Lgicos: Y O NO

    De accesibilidad: . [] ^ ::

    Delimitadores: resto de smbolos o combinacin de ellos. Son separadores ( ), o depuntuacin (, ; /* */ //).

    Todas las palabras reservadas e identificadores deben separarse del resto de elementos lxicos con unsmbolo separador al menos. En este sentido, los operadores Y, O, NO, DIV y MOD se consideran palabrasreservadas.

    2. Estructura general de un programa

    Un (sub)programa consta fundamentalmente de una zona declarativa y una zona ejecutable. En ambas zonasse puede insertar comentarios en cualquier punto del programa siempre y cuando no rompan las unidadeslxicas. Estos comentarios son eliminados durante la traduccin y no existen en el cdigo mquina generado,son simplemente pequeas notas de documentacin para el propio programador.

    En la zona declarativa se definen las caractersticas de todas las entidades no predefinidas en el lenguaje. Seescribe delante de la ejecutable. Las entidades a definir son las siguientes:

    Constantes simblicas : datos constantes con nombre. Se definen en la seccin CONST. Adoptaremosel convenio de escribirlas con la primera letra por lo menos en mayscula.

    Tipos: determinan las caractersticas (dominio y operaciones) de los datos. Se definen en la seccinTIPOS. Adoptaremos el convenio de nombrarlos comenzando con una T en mayscula.

    Variables: datos cuyo valor puede variar durante la ejecucin de un programa. Se definen en la seccinVAR. Adoptaremos el convenio de escribirlas con todas las letras en minsculas.

    (Sub)Programas: resolucin computacional de un (sub)problema. Se definen fuera de las tressecciones anteriores. Adoptaremos el convenio de poner la primera letra de cada identificador de(sub)programa en mayscula.

    Clases: agrupacin de datos relacionados entre s y subprogramas con los que se pueden manipularde forma exclusiva. Se definen fuera de las tres secciones anteriores. Adoptaremos el convenio denombrarlos comenzando con una C en mayscula.

    1 El anexo I describe las reglas de precedencia, que determinan el orden implcito de aplicacin de los operadores.

  • Pseudolenguaje

    11/10/02 Lenguajes y Ciencias de la Computacin E.T.S. Ingenieros de Telecomunicacin 5 de 22

    A excepcin de los tipos predefinidos y algunos subprogramas predefinidos, todas estas entidades debendefinirse antes de su utilizacin en su zona declarativa correspondiente. No obstante, no existe un ordenpreestablecido para las distintas secciones.

    En la zona ejecutable se escribe en el orden adecuado las sentencias que realmente forman la resolucin delproblema. Todas las sentencias, tanto declarativas como ejecutables, terminan con el carcter de nueva lneao con un punto y coma.

    En la parte ejecutable existen fundamentalmente las siguientes unidades sintcticas:

    La asignacin, sentencia de transferencia de datos por excelencia.

    Decisiones y repeticiones, sentencias de control de flujo.

    Llamadas a subprogramas, sentencias de control de flujo de ida y vuelta.

    Expresiones: unidades sintcticas de tratamiento aritmtico-lgico.

    Con el fin de resaltar las distintas unidades sintcticas y algunas lxicas, en el presente documento se adoptael siguiente convenio de colores para escribir ALGORITMOs. Este convenio podr utilizarse en cualquierdocumento que se suministre a los alumnos para ayudarles a leer un programa ms fcilmente. Tambinpodr utilizarse con los entornos de programacin que permitan configurar as sus editores.

    Las PALABRAS RESERVADAS y el smbolo de asignacin = se escriben en negrita.

    Los /* comentarios */ se escriben en verde.

    Las llamadas a SubProgramas() se escriben en azul, pero no sus .Si los subprogramas son predefinidos2 (no de biblioteca), adems, se escriben con todas sus letras enmaysculas, como por ejemplo, ASIGNAR(). (El nombre un algoritmo se escribe en azul resaltado).

    Las , a excepcin de las llamadas a Funciones(), se escriben en el color pordefecto. Esto incluye los , las , las y los de los subprogramas.

    Los nombres de los y se escriben en rojo.

    A continuacin se presenta el esquema general de un algoritmo.

    ALGORITMO Identificador/* comentarios multilnea: constan de ms de una lnea (estilo C) */// comentarios de una sola lnea (estilo C++)

    CONST

    TIPOS

    VAR

    INICIO

    FIN

    2 Vase el anexo correspondiente.

  • Pseudolenguaje

    11/10/02 Lenguajes y Ciencias de la Computacin E.T.S. Ingenieros de Telecomunicacin 6 de 22

    3. Tipos

    Distinguiremos las siguientes categoras de tipos:

    Consideramos predefinidos los tipos que ya tienen significado en pseudolenguaje sin necesidad de definirse.El anexo I describe los dominios y operaciones permitidas para cada uno de estos tipos.

    Consideramos ordinales los tipos cuyos valores tienen sucesor nico (a excepcin del ltimo) y predecesornico (a excepcin del primero).

    Conversiones de tipo explcitas: ()

    Conversiones de tipo implcitas: Z N

    Se consideran tipos compatibles los que son iguales. Cuando sea necesario se promocionan los naturales aenteros (conversin implcita).

    4. Expresiones

    Una expresin es una combinacin que sigue unas deteminadas reglas de elementos que representan datos,los operandos, y conectivas que representan operaciones, los operadores. La evaluacin de una expresinproduce un resultado, un valor, que puede actuar a su vez como operando, dando lugar a las subexpresiones.

    Como operando puede actuar:

    una constante simblica o literal, una variable, una llamada a una funcin3, o una subexpresin.

    Los operadores unarios se escriben delante de su operando. Los binarios siguen la notacin infija, se sitanentre ambos operandos. Todos los operandos son de un determinado tipo.

    Adems, deben seguirse unas reglas semnticas, a saber:

    1. Los operandos de los operadores binarios deben ser compatibles entre s.

    2. Los operandos deben ser compatibles con los que exige cada operador.

    Hay que tener en cuenta que el tipo de una (sub)expresin es el que devuelva su operador menos prioritario.Tambin las llamadas a una funcin producen un resultado de un determinado tipo.

    Ejemplos:

    /* de tipo R */ 23.0*x + Sqrt(y)/2.0 2.0*Pi // R x, y, Pi=3.1416/* de tipo Z */ (a DIV b) MOD 60 ABS(c) // Z a, b, c/* de tipo C */ CAP(letra) // C letra/* de tipo B */ vale O (a < b+3) Y (NO error) // B vale, error

    3 Ver en anexo II las funciones predefinidas.

    R

    N

    Z

    C

    B

    Predefinidos

    Definidos por el programador

    simples oescalares

    compuestos o estructurados

    Ordinales

  • Pseudolenguaje

    11/10/02 Lenguajes y Ciencias de la Computacin E.T.S. Ingenieros de Telecomunicacin 7 de 22

    Desde el punto de vista semntico, hay que distinguir:

    a) Valores-L (L-values): expresiones que siempre deben hacer referencia a una POSICIN DE MEMORIA,tales como variables simples, componentes de arrays, de registros o variables referenciadas mediantepunteros.

    b) Valores-R (R-values), que son expresiones que devuelven siempre un VALOR de un determinado tipo.

    5. Entrada / Salida

    Los tipos simples, a excepcin de los lgicos y enumerados, y las cadenas de caracteres disponen de unsubprograma predefinido para almacenar uno o varios valores ledos de teclado en uno o ms valores-L:

    Leer(, , , ...)

    Una lectura sobre una cadena de caracteres leer hasta el primer separador.

    Las expresiones de tipo simple a excepcin de las de tipo lgico y enumerado, as como las cadenas decaracteres, disponen de un subprograma predefinido para mostrar valores-R en pantalla:

    Escribir(, , , ...)

    La entrada/salida de los valores numricos es formateada, hay conversin del formato de almacenamientointerno de la mquina a cadenas de caracteres que forman el nmero en decimal o viceversa. Laentrada/sadida de tipo carcter es no formateada, no hay tal conversin.

    6. Constantes simblicas y variables

    En la notacin BNF que utilizaremos, los caracteres terminales son los que van en negrita, los los que van entre angulos y los metasmbolos en texto normal.

    BNF

    En la seccin CONST:

    ::= = {, IdCte=}

    En la seccin VAR:

    ::= [ = ] {, [ = ] }

    Ejemplo

    ALGORITMO TiposBasicosVAR N num1, num2 N num3 = 4 /* inicializacion en declaracion */ C carINICIO Escribir(Introducir carcter: ) Leer(car) num2 = ORD(car) num1 = num3 DIV num2 Escribir(El resultado es: , num1)FIN

    Nota

    Una variable comienza siempre con un valor indefinido.

    Como norma de estilo conviene no reutilizar variables para usos distintos.

    Se deben emplear identificadores autoexplicativos para recordar fcilmente el contenido de lasconstantes y variables.

  • Pseudolenguaje

    11/10/02 Lenguajes y Ciencias de la Computacin E.T.S. Ingenieros de Telecomunicacin 8 de 22

    7. Valores enumerados

    Los valores enumerados son conjuntos de valores definidos explcitamente por el programador. Lxicamente,cada valor se representa mediante un identificador. El conjunto de valores de una definicin constituye eldominio de un tipo enumerado. Se consideran ordinales y el orden de enumeracin de los valores determina elorden para la aplicacin de los operadores relacionales. Aparte de estos operadores, no se les puede aplicarninguno de los operadores predefinidos.

    BNF

    En la seccin TIPOS:

    ::= ENUM {{, }}

    En la seccin VAR:

    ::= [ = ]{, [ = ] }

    Ejemplo

    ALGORITMO TiposEnumeradosTIPOS ENUM {Rojo, Amarillo, Azul, Verde} TParchisVAR TParchis miparchisINICIO miparchis = RojoFIN

    Notas

    Los valores enumerados no pueden leerse ni escribirse directamente.

    Como norma de estilo, al igual que las constantes simblicas, todos los valores enumeradoscomenzarn con mayscula. No as las variables.

    8. Subalgoritmos

    Los subalgoritmos, subprogramas o subrutinas son trozos de cdigo que pueden reutilizarse de formaparametrizada: las mismas sentencias se ejecutan sobre datos distintos o iguales. Cada utilizacin de unsubprograma supone una llamada y los datos se pasan/reciben en forma de argumentos o parmetros.

    La definicin es nica y se pone en la seccin declarativa de un programa antes o despus de la definicin detipos, constantes o variables. Los parmetros que recibe un subalgoritmo pueden ser:

    a) De entrada (E): deben contener valores-R en la llamada que utilizar el subprograma. Dentro de unsubalgoritmo, un parmetro formal de entrada no podr modificarse (as no es necesario asumir que unparmetro de entrada se pasa por valor, lo cual es una cuestin de la implementacin).

    b) De salida (S): deben ser valores-L para contener informacin que calcular el subprograma.c) De entrada-salida (ES): deben ser valores-L que adems contendrn informacin de entrada al

    subprograma.

    Por otro lado, podemos definir:

    a) Funciones. Cada llamada representa un VALOR, todas las llamadas son (sub)expresiones (valores-R). Lacabecera llevar un detrs de la palabra ALGORITMO. El valor devuelto por una funcin serealiza con la sentencia DEVOLVER , la cual tambin termina la ejecucin de la funcin.Como norma de estilo, slo debe aparecer una sentencia DEVOLVER en cada funcin. El tipo de laexpresin DEVOLVER debe coincidir con el tipo de la funcin, compatible a su vez con el resto de laexpresin donde aparece la llamada.

    b) Procedimientos. Cada llamada representa una ACCIN, todas las llamadas a procedimientos sonsentencias. La cabecera no llevar detrs de la palabra ALGORITMO.

  • Pseudolenguaje

    11/10/02 Lenguajes y Ciencias de la Computacin E.T.S. Ingenieros de Telecomunicacin 9 de 22

    BNF

    Definicin en zona declarativa:

    ::= ALGORITMO // CONST... VAR... TIPOS... INICIO FIN

    ::= [] ()

    ::= {; }

    ::= (ES|E|S) {, } |(ES|E|S) {, } |(ES|E|S) {, } |(ES|E|S) {, }

    Llamadas en la zona ejecutable: ::= IdSubalgoritmo( [ {, }] )

    Ejemplo

    ALGORITMO MiSubalgoritmo

    ALGORITMO ProcedimientoSuma(E N op1, op2; S resultado) INICIO resultado = op1+op2 FIN ProcedimientoSuma

    ALGORITMO N FuncionSuma(E N op1, op2) VAR N resultado INICIO resultado = op1+op2 DEVOLVER resultado FIN FuncionSuma

    VAR // no visibles en ProcedimientoSuma ni FuncionSuma N suma1, suma2INICIO ProcedimientoSuma(4, 3, suma1) suma2 = FuncionSuma(4, 3) Escribir(suma1, FuncionSuma(suma1, suma2))FIN

    Notas Los tipos de los parmetros deben tener siempre nombre (tipos compuestos) o ser predefinidos.

    Regla de mbito: el mbito de un identificador va desde el punto donde se define hasta el final del algoritmoque contiene la declaracin.

    Regla de ocultacin: un identificador oculta a cualquier otro ms externo con el mismo nombre.

    Una variable es local al declararla en un subalgoritmo y slo puede utilizarse dentro de l.

    Una variable local a un algoritmo se puede considerar como global a los subalgoritmos anidados.

    Al llamar a un subalgoritmo se crean sus variables locales. Al terminar su ejecucin, se destruyen.

  • Pseudolenguaje

    11/10/02 Lenguajes y Ciencias de la Computacin E.T.S. Ingenieros de Telecomunicacin 10 de 22

    9. Arrays

    Los arrays son series de datos del mismo tipo, tipo base, que son accedidos con un mismo nombre, pero conun ndice (valor de tipo ordinal) diferente para cada valor y consecutivos para valores adyacentes. Tienen unalongitud que se fija en tiempo compilacin, son estticos. El tipo base puede ser cualquiera.

    BNF

    Declaracin de un tipo array en la seccin TIPOS:

    ::= [] {[]}

    ::= ..

    La seccin VAR da la posibilidad de definir variables de tipo array sin nombre, o bien, de un tipoarray ya definido con nombre:

    ::= [] {[]} |

    Acceso en la zona ejecutable a distintos niveles (segn dimensiones):

    ::= { [] }

    Ejemplo

    ALGORITMO TiposArraysTIPOS N TArrayBidimensional[5..6][1..3]VAR N numero N cuenta[1..10] = {10, 4, 5, 5, 4, 3, 7, 8, 7, 1} TArrayBidimensional miarray2D = { { 1, 2, 3 }, { 0, 0, 0 } }INICIO numero = cuenta[5] // numero=4 miarray2D[5][10] = 25 Escribir(mearray2D) //

  • Pseudolenguaje

    11/10/02 Lenguajes y Ciencias de la Computacin E.T.S. Ingenieros de Telecomunicacin 11 de 22

    10. Cadenas de caracteres

    Son arrays de tipo base C con los siguientes valores aadidos:

    1) Se permite asignar literales de cadenas (entre comillas dobles) a un array de tipo cadena en su declaracino en la parte ejecutable.

    2) Se permite copiar cadenas con la asignacin slo si son del mismo tipo. Si son tipos distintos, se usar unsubprograma diseado para explcitamente ello.

    BNFDefinicin de un tipo cadena en la seccin TIPOS:

    ::= C [IndIni..IndFin]

    Ejemplo

    ALGORITMO TiposCadenasTIPOS C TCadena[1..80]CONST TCadena cad_cte = Esta no se puede modificarVAR TCadena micadena = Esto es vlido en C/C++ C cadena[0..100] // tambin se pueden definir de tipo sin nombreINICIO Leer(micadena) //

  • Pseudolenguaje

    11/10/02 Lenguajes y Ciencias de la Computacin E.T.S. Ingenieros de Telecomunicacin 12 de 22

    11. Registros

    Los registros son variables compuestas de datos heterogneos. Cada dato es un campo, que podr ser decualquier tipo, simple o compuesto. Se pueden anidar otros registros o arrays dentro de registros y un registropuede ser el tipo base de un array.

    BNF

    Definicin de un tipo registro en la seccin TIPOS:

    ::= REGISTRO {}

    FINREGISTRO ::= | |

    Definicin de un registro en la seccin VAR: ::=

    Acceso en la zona ejecutable: ::= .

    Ejemplo

    ALGORITMO TiposCadenasTIPOS C TCadena[1..80] REGISTRO TAlumno N edad TCadena nombre FINREGISTROVAR TAlumno alumno1, alumno2INICIO alumno1.nombre = David alumno1.edad = 18 alumno2 = alumuno1 Escribir(alumno1) //

  • Pseudolenguaje

    11/10/02 Lenguajes y Ciencias de la Computacin E.T.S. Ingenieros de Telecomunicacin 13 de 22

    12. Ficheros

    Desde el punto de vista de la programacin imperativa, los ficheros son los nicos datos no voltiles, es decir,no se pierden entre las distintas ejecuciones de un mismo programa. Para trabajar con ellos, se define un tipode datos especial, el tipo FICHERO. Las variables de este tipo son los manejadores de fichero, que contienenla informacin necesaria para trabajar con ellos desde programa, como por ejemplo la posicin donde se va aefectuar la siguiente lectura o escritura. Para poder leer y/o escribir de/en un fichero es necesario abrirlo,momento en el que se asocia con un manejador de fichero. Cuando no se necesita trabajar ms con el fichero,no necesariamente al finalizar el programa, ste se cierra y queda desasociado el manejador del fichero.

    Distinguiremos dos tipos de fichero, los de texto, que contienen la informacin codificada en caracteres delconjunto estndar de la mquina, y los binarios, que contienen la informacin en el mismo formato en queestn en la memoria principal cuando se est ejecutando el programa. En un programa la nica diferenciaentre ambos ser la forma de leer y/o escribir los datos de/en fichero. Para los ficheros de texto se utilizan lassubrutinas estndares de lectura/escritura formateada, para los binarios se utilizan las de lectura/escritura noformateada. Las primeras realizan la conversin necesaria del formato de memoria principal al conjunto decaracteres de la mquina, las ltimas no realizan tal conversin. El anexo III describe las especificaciones detodas las subrutinas estndares de gestin de ficheros de nuestro pseudolenguaje.

    BNF

    Definicin de un manejador de fichero en la seccin VAR:

    ::= FICHERO

    En la zona ejecutable se utilizar como parmetro para las subrutinas de gestin de ficheros.

    Ejemplo

    ALGORITMO CopiarFicheroTextoVAR FICHERO ffuente, fdestino Z numeroINICIO ffuente = Abrir(NombreViejo.txt) fdestino = Abrir(NombreNuevo.txt) Leer(ffuente, numero) // lectura previa MIENTRAS NO Fin(ffuente) HACER Escribir(fdestino, numero) Leer(ffuente, numero) FINMIENTRAS Cerrar(ffuente) Cerrar(fdestino)FIN

    NotasLas escrituras sobre ficheros son permanentes, de tal forma que los cambios realizados por unsubprograma afectan al resto.

  • Pseudolenguaje

    11/10/02 Lenguajes y Ciencias de la Computacin E.T.S. Ingenieros de Telecomunicacin 14 de 22

    13. Punteros

    Los punteros se consideran variables de tipo simple a travs de los cuales se puede acceder a otras variablessin nombre, las variables annimas de un tipo base , que estn ubicadas en la zona de memoriadinmica gestionada directamente por el programador. Este tipo base puede ser cualquiera.

    Con ASIGNAR() se reserva memoria para la variable annima en memoria dinmica. ConLIBERAR() se libera la memoria a la que apunta el puntero para que pueda ser reutilizada. Elvalor del puntero queda indefinido tras la liberacin.

    NULO es un valor constante compatible con cualquier tipo puntero. Indica que el puntero no apunta a nadavlido. Un puntero se inicializa con NULO, con el valor de otro puntero o con ASIGNAR().

    Los nicos operadores primitivos que pueden utilizarse con punteros son la igualdad (==) y desigualdad (!=).Tambin pueden asignarse uno a otro, pasarse como parmetro a un subprograma y devolverlo una funcin.

    BNF

    Declaracin de tipos puntero en la seccin TIPOS:

    ::= * ::= * []

    En la seccin VAR se pueden definir punteros de tipo sin nombre o punteros de un tipo punteroya definido previamente:

    ::= | *

    ::= | * []

    Acceso a la variable annima o apuntada:

    ::= * ::=-> | (*). ::= *[]

    Ejemplo

    ALGORITMO TiposPunterosTIPOS N *TPunteroN N *TArrayPunterosN[1..10] TNodo *TPunteroNodo REGISTRO TNodo N valor TPunteroNodo sig // sig = NULO miarrayPN[1] = mipunteroN LIBERAR(mipunteroN) LIBERAR(lista)FIN

    Notas

    Una estructura de datos autorreferenciada (registro o clase) contiene punteros a s misma. Parapoder definirlas se permite definir previamente el tipo puntero a la estructura de datos. La propiaestructura debe definirse inmediatamente despus. (No obstante, C++ permite utilizar el tipopuntero a la estructura sin que se defina previamente).

  • Pseudolenguaje

    11/10/02 Lenguajes y Ciencias de la Computacin E.T.S. Ingenieros de Telecomunicacin 15 de 22

    14. Clases

    Una clase es una entidad que encapsula datos, que llamaremos atributos, y subprogramas miembros, quellamaremos mtodos, que manipulan esos datos. Distinguiremos entre datos y mtodos privados, ocultosdesde el exterior, y datos y mtodos pblicos, accesibles desde el exterior. Los atributos podrn ser tipos dedatos definidos por el usuario, o datos propiamente dichos, como variables o constantes.

    Siguiendo el principio de ocultacin de la informacin, cualquier manipulacin sobre los datos privados, deberhacerse forzosamente a travs de llamadas a los mtodos pblicos, llamadas que denominaremos mensajes.

    Un objeto es una instanciacin de una clase o, en otras palabras, una variable de un tipo clase. Lainstanciacin de un objeto supone su creacin completa al ejecutarse su constructor. Su llamada se realizaimplcitamente al definirse el objeto en la seccin VAR, definicin que podr contener argumentos deinicializacin entre parntesis. Su destruccin se realiza ejecutndose su destructor. Su llamada se realiza deforma implcita al terminar la ejecucin del algoritmo que lo define (igual que cualquier varible local). Elconstructor y el destructor deben definirse obligatoriamente como mtodos de la clase con los nombresCrear() y Destruir(), aunque estn vacos. Deber haber siempre un destructor sin argumentos y, comomnimo, un constructor sin argumentos. Si se define ms de un constructor, se distinguirn por losargumentos que reciban, por ejemplo, un constructor de copia siempre recibir como parmetro un objeto, yslo uno, de la misma clase.

    Se puede asignar un objeto a otro siempre que sean de la misma clase. Si hay constructor de copia, se llamaprimero al destructor para el objeto destino, y despus al constructor de copia de la clase para asignar elobjeto fuente al destino. Si no hay definido un constructor de copia, simplemente se realizar la asignacinprimitiva, con la consiguiente incoherencia cuando haya datos en memoria dinmica.

    Se pueden definir constantes y tipos pblicos dentro de la interfaz de una clase. Se acceder a ellos desde elexterior con el operador de alcance :: (al estilo de C++): :: y::

    Tambin pueden definirse punteros a objetos. En este caso, el objeto se instancia, llamando implcitamente alconstructor, al asignar memoria en la seccin ejecutable con la primitiva ASIGNAR(). Si elconstructor espera argumentos, stos se pondrn entre parntesis:ASIGNAR(()). El objeto podr destruirse en la seccin ejecutable medianteuna llamada a la primitiva LIBERAR().

    Un objeto puede ser un atributo de una clase, dando lugar a la composicin de clases. Cuando secrea/destruye una clase que contiene otras clases como atributos, se llama automticamente a suconstructor/destructor as como a los constructores/destructores de las clases anidadas.

    Nuestro pseudolenguaje no contempla otras caractersticas tpicas de la orientacin a objetos como laherencia ni el polimorfismo, ya que est pensado para alumnos noveles en la programacin. Tampoco esorientado al objeto puro, se pueden mezclar objetos con algoritmos externos.

    Todos los mtodos y atributos, tanto pblicos como privados, tienen mbito de clase: pueden ser accedidosdesde cualquier mtodo de la clase, es decir, cualquier objeto de esa clase tiene acceso libre a ellos. Desdealgoritmos externos, slo los pblicos pueden ser accedidos a travs de un objeto instanciado o un puntero aun objeto ya creado.

    Cada objeto puede referenciarse mediante el puntero a s mismo definido implcitamente como:

    *este

    til cuando parmetros o variables locales de un mtodo se llaman igual que los atributos. Ver mtodoDimensionar() del ejemplo ms adelante.

    Distinguiremos dos partes en la definicin de una clase, cada una de las cuales contendr:

    a) Interfaz, tipos pblicos, constantes pblicas, atributos pblicos y cabeceras de los mtodos pblicos.

    b) Implementacin, tipos privados, constantes privadas y atributos privados4 y cuerpos de los mtodospblicos y privados.

    4 En el lenguaje C++, todos los atributos, pblicos y privados, se definen junto a las cabeceras de los mtodos, pblicos y privados.No obstante, se distinguen por las palabras reservadas public y private.

  • Pseudolenguaje

    11/10/02 Lenguajes y Ciencias de la Computacin E.T.S. Ingenieros de Telecomunicacin 16 de 22

    BNF

    Definicin de clases:

    ::=

    INTERFAZ CLASE // parte visible TIPOS { } ATRIBUTOS { } METODOS // interfaces visibles { } FIN

    IMPLEMENTACION CLASE // parte oculta TIPOS { } ATRIBUTOS { } METODOS // visibles y ocultos { } FIN

    ::= | | | |

    La definicin de objetos o punteros a objetos se hace en la seccin VAR:

    ::= [()]

    ::= *

    Los mensajes se basan en las llamadas convencionales a subprogramas y se realizan en laseccin ejecutable. Pueden realizarse con los objetos o a travs de punteros a objetos:

    ::= . |(*). |->

    La misma notacin se utiliza para acceder a atributos pblicos:

    ::= . |(*). |->

    El acceso a tipos pblicos y constantes pblicas se realiza con el operador de alcance :::

    ::= ::

  • Pseudolenguaje

    11/10/02 Lenguajes y Ciencias de la Computacin E.T.S. Ingenieros de Telecomunicacin 17 de 22

    Ejemplo

    INTERFAZ CLASE CRectanguloMETODOS Crear() Destruir() Dimensionar(E N nuevo_ancho; E N nuevo_largo) R Area() R Perimetro()FIN CRectangulo

    IMPLEMENTACION CLASE CRectanguloATRIBUTOS R ancho, largo

    Crear()INICIO ancho = 0; largo = 0FIN

    Destruir()INICIOFIN

    Dimensionar(E N ancho; E N largo)INICIO // este->... son los atributos y ancho/largo son los parmetros este->ancho = ancho; este->largo = largoFIN

    R Area()INICIO DEVOLVER ancho * largoFIN

    R Perimetro()INICIO DEVOLVER ancho*2.0 + largo*2.0FIN

    FIN CRectangulo

    ALGORITMO PrincipalCONST AnchoA4 = 210; LargoA4 = 297 // mmVAR CRectangulo a4 // creacin implcita por defectoINICIO a4.Dimensionar(AnchoA4, LargoA4) Escribir(El rea de una lmina A4 es: , a4.Area() ) // destruccin implcitaFIN

  • Pseudolenguaje

    11/10/02 Lenguajes y Ciencias de la Computacin E.T.S. Ingenieros de Telecomunicacin 18 de 22

    15. Sentencias

    Asignacin ::= =

    ::= | | |

    Seleccin ::= SI ENTONCES {} { SINOSI {} } [ SINO {} ] FINSI

    Seleccin ::= CASO SEA : {} { : {} } [ SINO {} ] FINCASO

    ::= {, }

    ::= |

    Iteracin ::= MIENTRAS HACER

    {} FINMIENTRAS

    ::= REPETIR

    {} HASTA QUE

    ::= PARA = HASTA [PASO ] HACER {} FINPARA

    Llamada aprocedimiento5

    ::= ( {, } )

    5 Una llamada a una funcin no es una sentencia, es una (sub)expresin.

  • Pseudolenguaje

    11/10/02 Lenguajes y Ciencias de la Computacin E.T.S. Ingenieros de Telecomunicacin 19 de 22

    16. Notas sobre estilo

    Los tipos llevarn una T como primera letra y cada letra de principio de palabra en Maysculas.Ejemplos: TCadena, TMiTipo, TMiArrayBidimensional.

    Las clases empezarn con la C como primera letra y cada letra de principio de palabra enMaysculas. Ejemplos: CCubo, CMiCoche, CJuego.

    Los nombres de (sub)algoritmos tendrn en mayscula cada letra de principio de palabra ypreferentemente sern o contendrn un verbo. Ejemplos: Sumar, EsLetra, Convertir.

    Las variables irn en minsculas y tendrn un identificador representativo de su posible valor.Ejemplos: mi_cadena, numero, carta.

    Debe incluirse comentarios para clarificar el significado del cdigo, especiamente como cabecera detodos los (sub)algoritmos.

    Se debe realizar una indentacin en instrucciones que estn anidadas en otras, de al menos 2espacios y no superior a 4 espacios.

    Se utilizarn lneas en blanco y se partirn las largas en puntos que clarifiquen su lectura.

    No se debe utilizar un parmetro de salida (S) salvo para almacenar informacin6.

    El siguiente programa cumple estas normas de estilo:

    ALGORITMO MayorMenor/* calcula el mayor y el menor de tres nmeros */VAR N mayor, menor, num1, num2, num3

    INICIO /* entrada */ Escribir("Introduce 3 numeros: ") Leer(num1) Leer(num2) Leer(num3)

    /* procesamiento */ SI num1

  • Pseudolenguaje

    11/10/02 Lenguajes y Ciencias de la Computacin E.T.S. Ingenieros de Telecomunicacin 20 de 22

    Anexo I. OperadoresEn pseudolenguaje los tipos simples disponen de los siguientes dominios y operadores:

    Tipo Dominio Operadores binarios Operadoresunarios

    N Nmeros naturales == != < >= + - * DIV MOD (ninguno)

    Z Nmeros enteros == != < >= + - * DIV MOD + -

    R Nmeros reales == != < >= + - * / + -

    C Conjunto caracteres de e/s == != < >= (ninguno)

    B VERDADERO, FALSO == != < >= Y O NO

    enumerado Definido por el programador == != < >= (ninguno)

    puntero NULO, direcciones fsicas == != (ninguno)

    Con las siguientes reglas de precedencia7:

    1. Parntesis ()

    2. Operadores de accesibilidad . [] * ::

    3. Operadores unarios NO - +

    4. Operadores multiplicativos * / DIV MOD

    5. Operadores aditivos + -

    6. Operadores relacionales < > =

    7. Operadores de igualdad == !=

    8. Operador lgico de conjuncin Y

    9. Operador lgico de disyuncin O

    Los dominios de los tipos compuestos dependen de los dominios de los tipos componentes. Y no se puedeaplicar ningn operador a las variables completas de tipo compuesto, ni siquiera a cadenas de caracteres: sedeben definir los subprogramas apropiados para implementar cualquier operacin.

    No obstante, las variables de tipo compuesto s se pueden asignar cuando el tipo sea exactamente el mismo.Igualmente, se permite pasar tipos compuestos como parmetros a subprogramas y devolverlos como valor deuna funcin.

    La asignacin primitiva de estructuras de datos basadas en punteros, no involucra la asignacin de lasvariables annimas apuntadas por cualquier puntero. La creacin, destruccin o cualquier otra operacin deestas estructuras debe ser implementada por el programador, no son operaciones predefinidas enpseudolenguaje.

    7 El operador * de accesibilidad se usa con punteros y no tiene nada que ver con el operador aritmtico * multiplicativo.

  • Pseudolenguaje

    11/10/02 Lenguajes y Ciencias de la Computacin E.T.S. Ingenieros de Telecomunicacin 21 de 22

    Anexo II. Subprogramas predefinidosPodemos considerar predefinidos los siguientes subprogramas:

    Matemticas

    Z ABS()

    R SQRT()

    Z POW(, )

    R POW(, )

    Miscelneas

    C CAP()

    C CHR()

    N ORD()

    PRED()

    SUCC()

    N TAMAO()

    ASIGNAR()

    LIBERAR()

    Memoria

    B DISPONIBLE()

    ASIGNAR()

    ASIGNAR(())

    LIBERAR()

  • Pseudolenguaje

    11/10/02 Lenguajes y Ciencias de la Computacin E.T.S. Ingenieros de Telecomunicacin 22 de 22

    Anexo III. Gestin de ficheros

    FICHERO Abrir(E )FICHERO Crear(E )B Existe(E )

    Cerrar(E FICHERO )

    Abrir y Crear abren un fichero con el nombre especificado. El nombre es el que utiliza el sistema operativoy puede contener el camino completo en la estructura de archivos. Si no existe el fichero, Abrir no lo crea.Si existe el fichero, Crear lo borra antes de abrirlo. Existe comprueba la existencia del fichero o directorioespecificado en el sistema de archivos. Cerrar cierra un fichero.

    Leer(E FICHERO ; E { ; E })

    Escribir(ES FICHERO ; E {; E })

    Lectura y escritura formateada. El tamao de los objetos se calcula automticamente por el tipo de cadavariable o expresin. Leer pone el dato ledo en las variables especificadas y Escribir escribe el resultadode las expresiones en el fichero. Ambos subprogramas avanzan automticamente la posicin para la siguienteoperacin de lectura/escritura en el nmero de bytes adecuado.

    LeerBin(E FICHERO ; E ; E N )EscribirBin(ES FICHERO ; E ;E N )

    Lectura y escritura no formateada. Leer lee del fichero y los pone en . Escribir escribe de la especificada. Ambos subprogramas avanzan automticamente la posicin para lasiguiente operacin de lectura/escritura en el nmero de bytes especificado.

    B Fin(E FICHERO )N Posicion(E FICHERO )N Longitud(E FICHERO )

    Eliminar(E FICHERO ; E N )Situar(E FICHERO ; E N )

    Fin devuelve VERDADERO al llegar al final de fichero, FALSO si no. Posicin devuelve el n de byte dondese efectuar la siguiente operacin de lectura/escritura. La posicin 0 es la primera. Longitud devuelve eltamao del fichero en bytes. Situar establece la posicin (nmero de byte) donde se va a realizar lasiguiente operacin de lectura/escritura. Eliminar elimina el nmero de bytes especificado a partir de laposicin actual.

    Renombrar(E , )Borrar(E )CrearDir(E )BorrarDir(E )

    Renombrar renombra un fichero o directorio del sistema de archivos que debe existir. Borrar borra unfichero. CrearDir crea un nuevo directorio en el sistema de archivos y BorrarDir borra un directorio.