Evaluacion de Lenguajes

29
¿Cómo “evaluar” un lenguaje? También es importante determinar cuando un lenguaje es eficiente, para esto existen determinados criterios o características que nos ayudan, cabe mencionar que no existen lenguajes buenos o malos sino apropiados e inapropiados para una determinada situación o problema. Para esto cada autor refleja según su criterio que características importantes debe cubrir un lenguaje para un buen desempeño del mismo, cabe mencionar, que los lenguajes son diseñados e implementados, por esta razón es necesario conocer todos los puntos de vista. CRITERIOS DE LENGUAJE SEGÚN DORIS APPLEBY Y JULIUS VANDEKOPPLE Definiciones bien definidas. Los programadores de Fortran o Pl/1 trabajan a menudo como un grupo. Si uno no sabía o había olvidado como escribir el código para efectuar una tarea particular, la cosa más fácil por hacer era bajar al vestíbulo y preguntarle a un amigo. Los manuales eran volúmenes inmensos pobremente organizados que enseñaban mediante ejemplos con más frecuencia que por cualquier otro medio. Sintaxis BNF y EBNF . Los diseñadores de Algol 60 rectificaron esto al proporcionar una sencilla descripción del lenguaje en 18 páginas. La sintaxis del lenguaje está descrita en los forma Backus Naur (BNF), seguida de ejemplos de programación. BNF es un ejemplo de un metalenguaje, un lenguaje utilizado para describir otro lenguaje, en este caso uno de programación. BNF tiene símbolos llamados metasímbolos, y reglas propias, las cuales son empleadas para definir la sintaxis del lenguaje particular de programación en cuestión. Por sintaxis entendemos una colección de instrucciones formada al seguir un conjunto de reglas que diferencian los programas válidos de los no válidos. La sintaxis por sí misma no da significado a un lenguaje; meramente define la colección de frases y sentencias que son combinaciones válidas de los caracteres del lenguaje. Este punto lo estudiaremos en la unidad 2. Semántica . Un lenguaje también debe de estar definido semánticamente al describir la manera precisa lo que significa una construcción particular. Por ejemplo, la expresión (X < 3) significa en pseudocódigo que X debe tener un valor; ese valor es comparable al entero 3, y la expresión es verdadera si el valor es menor que 3, y es falsa en otros casos. El lenguaje natural es notoriamente ambiguo, de manera que hace esfuerzos para describir formalmente la semántica del lenguaje así como también la sintaxis. Comprobabilidad. Probar con certeza matemática que un programa es correcto es un proceso lento. Sin embargo, C.A.R. Hoare cree que “las ventajas prácticas de la comprobación de programas eventualmente se sobrepondrán a las dificultades, en vista de los costos creciente de los errores de programación”. La prueba de que un

description

Evaluacion de lenguajes de programacion teniendo en cuenta sintaxis, semantica y caracteristicas.

Transcript of Evaluacion de Lenguajes

  • Cmo evaluar un lenguaje?

    Tambin es importante determinar cuando un lenguaje es eficiente, para esto existen

    determinados criterios o caractersticas que nos ayudan, cabe mencionar que no existen

    lenguajes buenos o malos sino apropiados e inapropiados para una determinada situacin o

    problema. Para esto cada autor refleja segn su criterio que caractersticas importantes debe

    cubrir un lenguaje para un buen desempeo del mismo, cabe mencionar, que los lenguajes

    son diseados e implementados, por esta razn es necesario conocer todos los puntos de

    vista.

    CRITERIOS DE LENGUAJE SEGN DORIS APPLEBY Y JULIUS

    VANDEKOPPLE

    Definiciones bien definidas. Los programadores de Fortran o Pl/1 trabajan a menudo como un grupo. Si uno no saba o haba olvidado como escribir el cdigo

    para efectuar una tarea particular, la cosa ms fcil por hacer era bajar al vestbulo y

    preguntarle a un amigo. Los manuales eran volmenes inmensos pobremente

    organizados que enseaban mediante ejemplos con ms frecuencia que por

    cualquier otro medio.

    Sintaxis BNF y EBNF. Los diseadores de Algol 60 rectificaron esto al proporcionar una sencilla descripcin del lenguaje en 18 pginas. La sintaxis del

    lenguaje est descrita en los forma Backus Naur (BNF), seguida de ejemplos de

    programacin. BNF es un ejemplo de un metalenguaje, un lenguaje utilizado

    para describir otro lenguaje, en este caso uno de programacin. BNF tiene

    smbolos llamados metasmbolos, y reglas propias, las cuales son empleadas

    para definir la sintaxis del lenguaje particular de programacin en cuestin.

    Por sintaxis entendemos una coleccin de instrucciones formada al seguir un

    conjunto de reglas que diferencian los programas vlidos de los no vlidos. La

    sintaxis por s misma no da significado a un lenguaje; meramente define la

    coleccin de frases y sentencias que son combinaciones vlidas de los caracteres

    del lenguaje. Este punto lo estudiaremos en la unidad 2.

    Semntica. Un lenguaje tambin debe de estar definido semnticamente al describir la manera precisa lo que significa una construccin particular. Por

    ejemplo, la expresin (X < 3) significa en pseudocdigo que X debe tener un

    valor; ese valor es comparable al entero 3, y la expresin es verdadera si el valor

    es menor que 3, y es falsa en otros casos. El lenguaje natural es notoriamente

    ambiguo, de manera que hace esfuerzos para describir formalmente la semntica

    del lenguaje as como tambin la sintaxis.

    Comprobabilidad. Probar con certeza matemtica que un programa es correcto es un proceso lento. Sin embargo, C.A.R. Hoare cree que las ventajas prcticas de la comprobacin de programas eventualmente se sobrepondrn a las dificultades, en

    vista de los costos creciente de los errores de programacin. La prueba de que un

  • programa es correcto involucra tres pasos: primero la comprobacin de que el

    programa cumple con la intencin del programador; segundo la prueba de que el

    compilador traduce de manera correcta a cdigo mquina la sintaxis y la semntica

    del lenguaje empleado; y tercero, que se compruebe que la mquina misma

    funciona correctamente.

    Una meta para cualquier lenguaje de programacin es probar que un compilador para el

    lenguaje lo interpreta de manera precisa. Esto es a menudo difcil de hacer si la definicin

    del lenguaje incluye descripciones en lenguaje natural de lo que se desea mediante un trozo

    particular de sintaxis, si la sintaxis puede describirse en un lenguaje formal, y la semntica

    puede escribirse axiomticamente, un compilador puede ser probado formalmente para

    satisfacer por completo tanto la definicin sintctica como la semntica del lenguaje.

    La sintaxis de Pascal fue definida en BNF, y su semntica definida axiomticamente por su

    diseador Nicklaus Wirth, en colaboracin con C.A.R. Hoare. El PL/1 fue diseado

    utilizando la definicin Viena (VDL, Vienna Definition Language) y Algol 68 fue definida

    en una gramtica vW de dos niveles (llamada as por el nombre de su inventor, A. van

    Wijngaarden) que era demasiado enigmtica para la mayora de los usuarios. Estos ltimos

    dos metalenguajes forman bases para comprobacin de compiladores. Si un lenguaje est

    definido en VDL, incluye una descripcin de lo que pasa cuando cada declaracin del

    lenguaje se ejecuta tericamente en una computadora terica. Si un compilador implementa

    fielmente la computadora terica, puede probarse que la ejecucin del programa es

    correcta. La gramtica vW no describe una computadora terica, pero permite que parte de

    la semntica que trata con declaraciones sea definida en la gramtica. Por lo tanto no

    pueden generarse programas correctos gramaticalmente que vuelvan a declarar variables o

    que las definan de una manera inconsistente.

    Confiabilidad. El software se considera confiable si se comporta como es anunciado y produce los resultados que el usuario espera. Cuando se presenta un

    error, debera ser fcilmente detectado y corregido. Un lenguaje de programacin

    fomenta la escritura de programas confiables de maneras a menudo sutiles. La

    declaracin goto es quiz la caracterstica ms notoria de lenguaje pensada para dar

    como resultado programas no confiables. El problema que subyace aqu es que los

    programas con muchos gotos, hacia atrs y hacia adelante son difciles de leer para

    cualquiera que no sea su creador, y por lo tanto difciles de modificar y de depurar.

    Las caractersticas de sintaxis poco usuales tambin pueden fomentar errores. El lenguaje C

    utiliza = como un operador de asignacin. X=5 asigna el valor de 5 a la localidad de

    almacenamiento designada para X. Para hace comparaciones se utiliza ==. X == 5 compara

    el valor de X con 5 y si es verdadero o falso, dependiendo si X es igual o no a 5. Puesto que

    C permite asignaciones casi en cualquier sitio de una declaracin, la substitucin

    inadvertida de = por el smbolo poco familiar == puede no producir un error, nicamente

    resultados ininteligibles. Los identificadores tanto en Modula como en C son sensibles a la

    capa tipogrfica de las letras. As cuenta y Cuenta representan variables distintas, que son

    confundidas fcilmente tanto por un programador como por un revisor subsecuente.

  • Un lenguaje confiable debera ser capaz de manejar errores durante el tiempo de ejecucin

    una sobrecarga (overflow) aritmtica ocurre cuando se calcula un entero que es mayor de lo

    que puede ser soportado por el hardware particular involucrado. Puede presentarse gran

    variedad de errores durante la entrada de datos, desde la lectura al pasar el final de un

    archivo hasta un valor no permitido introducido de manera interactiva. Estas clases de

    errores son llamadas excepciones y las provisiones del lenguaje para tratar con ellas se

    llaman manejadores de excepciones. La interrupcin de un programa no siempre es

    aceptable, en particular para las aplicaciones en tiempo real.

    Para los lenguajes de programacin, la confiabilidad por lo general se refiere a los

    mecanismos que promueve la escritura, mantenimiento y depuracin de los programas

    correctos, y el subsecuente manejo de excepciones cuando un programa se ejecuta.

    Traduccin rpida. Los lenguajes de programacin que se consideran en esta materia,

    generalmente son independientes de la mquina. Es

    decir, un programa escrito en el lenguaje puede ser

    traducido y ejecutado en una variedad de mquinas

    diferentes. Un programa que escribimos se encuentra

    en cdigo fuente. Este debe ser traducido a un lenguaje

    que una mquina particular pueda reconocer, y por ltimo en cdigo de mquina

    que pueda ejecutarse en realidad. La mquina en la que un programa se ejecuta se

    denomina anfitrin y su(s) lenguaje(s), lenguaje(s) anfitrin(es). Colocamos la (s)

    opcional despus del lenguaje porque una mquina puede tener ms de un lenguaje

    anfitrin. Cualquier mquina debe tener un lenguaje asociado de mquina de bajo

    nivel escrito en cdigo binario. Tambin puede tener un lenguaje ensamblador de

    nivel superior especfico de la mquina. Con frecuencia resulta prctico traducir

    primero el cdigo fuente a cdigo intermedio, el cual es intermedio entre el cdigo

    de mquina y el cdigo fuente. El cdigo intermedio puede ser o puede no ser uno

    de los lenguajes anfitrin.

    La traduccin del cdigo fuente involucra tres pasos: anlisis lexicogrfico, anlisis

    sintctico y anlisis semntico. El anlisis lexicogrfico, o rastreo, identifica cules tokens

    representan valores, identificadores, operadores, etc. El anlisis sintctico, llamado

    simplemente sintctico, reconoce las declaraciones no vlidas del lenguaje fuente. El

    anlisis semntico determina el significado de una declaracin. Algunos traductores pueden

    realizar dos o ms de estos tres procesos en un solo paso sobre el cdigo fuente.

    Los traductores son intrpretes o generativos, los cuales generan un cdigo intermedio. Un

    intrprete es en s mismo un programa que traduce una expresin o declaracin de lenguaje,

    calcula y luego imprime o utiliza de otro modo su resultado. Los intrpretes son por lo

    regular ms fciles de escribir que los traductores generativos, pero se ejecutan ms

    lentamente. Una ventaja de un intrprete es que los errores de ejecucin as como los de

    sintaxis son detectados a medida que se encuentra cada declaracin, eliminando as

    cualquier duda acerca de dnde reside el problema. Los lenguajes Lisp y Prolog tienen

    tanto intrpretes como compiladores, siendo los primeros utilizados para el aprendizaje y la

  • experimentacin, donde los resultados lnea por lnea son deseables. Un compilador es

    generalmente ms ventajoso para programas extensos.

    Las partes ms comunes de un traductor generativo son el compilador, el ligador y el

    cargador. El compilador traduce el cdigo fuente a cdigo intermedio orientado a la

    mquina, denominado cdigo objeto. El ligador enlaza de manera conjunta cdigo

    intermedio compilado independientemente en un solo mdulo de carga, resolviendo las

    diferencias entre tokens. Su salida puede estar en el mismo cdigo intermedio como su

    entrada pero est libre de referencias de un mdulo a otro. El cdigo resultante es as

    relocalizable, puesto que contiene cualquier informacin que necesita y es independiente de

    otros segmentos del programa. El cargador hace la traduccin final en cdigo mquina y

    carga el programa en diversas localidades de memoria. La salida del cargador es un mdulo

    ejecutable en cdigo de mquina. Durante cada fase, se hacen entradas en varias tablas que

    mantienen el registro de los tipos variables, direcciones de memoria, etc.

    Es importante en algunos casos, por ejemplo una aplicacin interactiva, que el cdigo

    fuente se traduzca rpidamente. Por otro lado, si un programa se va a compilar solamente

    una vez y va a ejecutarse a menudo, la velocidad de compilacin puede no ser una

    preocupacin principal. Se han hecho intentos exitosos para compiladores de un paso, los

    que rastrean el cdigo fuente slo una vez, mientras que algunos traductores efectan

    muchos pasos (por ejemplo, algunos de los primeros compiladores Pl/1 de IBM, que

    ejecutan ms de 30 pasos para compilar un programa completo). Algunos factores que

    afectan el nmero de pasos necesarios para un compilador en particular son:

    1. Cunta memoria est disponible? Pueden caber simultneamente en la

    memoria tanto el cdigo fuente como el cdigo objeto que estn siendo

    generados?

    2. Qu tan rpido es el compilador mismo y cuanta memoria requiere?

    3. Qu tan grande es el programa objeto y que tan rpido debe ejecutarse? Debe

    optimizarse el cdigo objeto?

    4. Qu clase de caractersticas de depuracin se requieren para el cdigo fuente?

    5. Qu clases de deteccin y recuperacin de errores se requieren para el cdigo

    ejecutable?

    6. Cuntas personas estarn involucradas en la escritura del compilador? Podra

    ser ventajoso permitir que cada una escriba un paso independiente realizando

    una fase simple del proceso de compilacin?

    Cdigo objeto eficiente. Despus de que el cdigo fuente se compila en cdigo objeto, no se hace referencia adicional al lenguaje fuente. As es en tiempo de

    compilacin que los asuntos de la eficiencia en el uso de memoria y tiempo de

    ejecucin deben ser considerados. Existe generalmente un balance comparativo

  • entre el trabajo que el programador debe hacer y el trabajo que el compilador puede

    hacer. Por ejemplo, un lenguaje que tiene todas las declaraciones de tipo y de

    variables precediendo a otro cdigo puede asignar todas las localidades de memoria

    en un momento, acelerando la compilacin. Por supuesto el programador tendr que

    hacer estas declaraciones entes que un programa pueda ser compilado.

    Algunos compiladores, llamados compiladores de optimizacin, ejecutan uno o dos pasos

    ms despus del anlisis semntico para incrementar la eficiencia del cdigo compilado.

    Las primeras optimizaciones, tales como la eliminacin de subexpresiones comunes son

    independientes de la mquina, mientras que las mejoras finales dependen de la mquina

    particular en la que el programa se ejecutar. Los lenguajes de muy alto nivel, donde los

    programas manipulan estructuras complejas tales como registros, listas, relaciones o

    conjuntos, dependen de compiladores de optimizacin por eficiencia. Los lenguajes de

    programacin ejecutan la gama de los parecidos a C, donde el programador puede trabajar

    muy cerca del CPU mismo, hasta lenguajes de manipulacin de bases de datos (DML, por

    sus siglas en ingls), donde las estructuras fsicas subyacentes estn profundamente ocultas.

    En los lenguajes de menor nivel, un cdigo objeto eficiente refleja con frecuencia la

    habilidad o capacidad de los escritores de compiladores.

    Ortogonalidad. La palabra ortogonal viene del griego y se refiere a lneas rectas cruzndose en ngulos rectos. Las variables aleatorias se consideran ortogonales.

    Con esto queremos decir que los componentes son independientes entre s y que se

    comportan en la misma manera en cualquier circunstancia.

    Un ejemplo se encuentra en los conceptos de tipo y funciones. Un tipo describe la

    estructura de los elementos de datos, Una funcin es un procedimiento por el que pasa un

    nmero finito de valores de parmetro y devuelve un nico valor hacia el procedimiento

    que la invoca. En un lenguaje ortogonal, los tipos son independientes de las funciones, y no

    se aplican restricciones a los tipos de parmetros que pueden ser pasados o al tipo de valor

    que puede ser devuelto. As, podramos ser capaces de pasar una funcin a una funcin, y

    recibir una funcin de regreso. Lisp incorpora esta caracterstica particular, pero deben

    comprenderse ciertas dificultades inherentes y tratar con ellas.

    Algol 68 fue pensado y diseado como un lenguaje completamente ortogonal. Tiene muy

    pocas construcciones integradas, y el programador es capaz de construir lo que quiera

    mediante la combinacin de diversas caractersticas. Nunca lleg a ser popular en los

    Estados Unidos, en parte debido a que era demasiado ortogonal. Los programadores

    queran estructuras especiales que se comportaran de maneras predecibles.

    La no ortogonalidad puede ser molesta y conducir a errores. Para el programador novato en

    Pascal, parece no haber una buena razn por la que una funcin no pueda devolver un

    registro o por la que un archivo deba ser pasado como un parmetro var.

    Generalidad. La generalidad est relacionada con la ortogonalidad. Se refiere a la existencia de slo caractersticas necesarias del lenguaje, con las otras compuestas

    en una manera libre y uniforme sin limitacin y con efectos previsibles. Como

    ejemplo de una carencia de generalidad, considere la del tipo de unin libre en

  • Pascal. Una unin libre es un registro que puede tener un campo que vara

    dependiendo de su uso. En un registro de esta clase, la variable de campo variante

    puede funcionar como un apuntador y no ser directamente accesible para impresin

    u otros usos. En otro momento durante la misma ejecucin, puede ser tipificado

    (declaracin de tipos) como un entero, con su valor disponible para impresin,

    operaciones aritmticas, etc. Esta caracterstica no es general, porque la localidad de

    memoria relacionada con las variables de campo variante no se trata de manera

    uniforme y los efectos no son previsibles.

    Consistencia en notaciones comunes. Como hemos mencionado antes, los problemas para solucin por computadora con frecuencia son concebidos en el

    lenguaje de las matemticas. De este modo, la notacin de los lenguajes de

    programacin debera ser consistente con las notaciones comnmente usadas en este

    campo. Usamos - para indicar resta y nmeros negativos. As, 5-3 y 5 deberan permitirse en lenguajes que soporten aritmticas de enteros.

    1 {1,2,3} es la notacin comn para la pertenencia a un conjunto, y por ello es preferible a la versin en Pascal 1 In [1,2,3]. Sin embargo, no todos los conjuntos de caracteres

    soportan , {, y }, de modo que en ocasiones se hacen sustituciones.

    Uniformidad. La consistencia est relacionada con la uniformidad (en algunos casos es llamada regularidad). Con esto queremos decir que nociones similares

    deberan verse y comportarse de la misma manera. Una cuestin de uniformidad

    tiene que ver con la necesidad de tener inicios y finales. Debera todo fin estar precedido por un inicio correspondiente? De manera similar, debera toda declaracin finalizar con un signo de punto y coma (;)? En un lenguaje

    completamente uniforme, la respuesta debera ser s a ambos asuntos.

    Subconjuntos. Un subconjunto de un lenguaje es una implementacin de slo una parte del mismo, sin caractersticas especiales. Las especificaciones originales para

    el lenguaje Ada del DOD no permiten subconjuntos. La motivacin para esto fue el

    deseo del DOD para hacer que sus contratistas produjeran software que explotar un

    Ada con todas sus caractersticas. Despus de todo, las caractersticas innecesarias

    no fueron incluidas. Una de las desventajas de este enfoque era que los estudiantes

    no podan empezar a aprender el lenguaje hasta que tuvieran disponibles

    compiladores completamente validados; por esta razn no existi un cuerpo de

    programadores hasta varios aos despus de que el lenguaje haba sido completado.

    Algunos lenguajes son extensos, con muchos componentes especiales. stos pueden

    ejecutarse solamente en mquinas grandes y no estn disponibles para compaas y

    escuelas ms pequeas a menos que se trate de un subconjunto de los mismos. Otra ventaja

    de los subconjuntos es el desarrollo incremental de un lenguaje. Con esto nos referimos a la

    versin inicial de un lenguaje de ncleo pequeo, con otras caractersticas que van siendo

    liberadas a medida que se van desarrollando.

  • Extensibilidad. El inverso de los subconjuntos es la extensibilidad. Un lenguaje puede tener un ncleo estndar, el cual es invariable en cada implementacin, pero

    con varias extensiones. Las ventajas de los subconjuntos son mejoradas cuando un

    lenguaje puede ser extendido en formas tiles. A principios de 1968, los

    desarrolladores de Cobol adoptaron este enfoque mediante la definicin de un

    ncleo que todos los compiladores deban satisfacer. Once mdulos estandarizados fueron agregados los cuales pueden o no pueden ser incluidos en

    cualquier compilador Cobol dado. Ada 95 ha adoptado un enfoque modular

    semejante.

    Los diseadores de Pascal incluso usaron otro enfoque, definiendo un pequeo lenguaje

    estndar porttil que careca de algunas caractersticas deseables, tales como capacidades de

    grficos y manejo de cadenas de caracteres. Los implementadores de Pascal agregaron

    varias mejoras, las cuales hicieron a sus compiladores atractivos para los programadores,

    pero los programas resultantes eran menos porttiles. Por ejemplo, el Pascal estndar no

    tiene tipo de cadenas (string), pero casi todos los compiladores de Pascal proporcionan uno

    integrado en el lenguaje mismo o en un mdulo especial para ser incluido con la mayora de

    los archivos fuente.

    Transportabilidad. Un lenguaje es transportable si sus programas pueden compilarse y ejecutarse en diferentes mquinas sin tener que reescribir el cdigo

    fuente. Para conseguir la transportabilidad se han establecido las organizaciones

    estndares nacionales e internacionales para producir descripciones de lenguajes a

    las cuales deben adherirse las implementaciones. Las ms activas de stas son el

    Instituto Americano de Estndares (ANSI), la Institucin Britnica de Estndares

    (BSI) la Organizacin Internacional de Estndares (ISO) y el Instituto de Ingenieros

    Elctricos y Electrnicos (IEEE). stos grupos tienen varios comits oficiales que

    preparan y revisan estndares para diferentes lenguajes.

    Los estndares pueden desarrollarse despus de ganar alguna experiencia con un lenguaje

    en particular, como es el caso de Pascal, o antes de que un lenguaje sea diseado, como

    ocurre con Ada. La estandarizacin temprana puede perpetuar caractersticas de diseo

    deficientes no reconocidas, al tiempo que demora el fomento de dialectos incompatibles.

    Lisp es quizs el lenguaje con la mayor longevidad no estandarizada. Lisp fue diseado e

    implementado a principios de los aos sesenta, pero es solamente hasta ahora que se est

    estandarizando a Common Lisp. Sin embargo, la parte estandarizada ser solamente un

    pequeo ncleo, con diferentes implementadores libres de hacer cualquier extensin que

    ellos deseen.

    PROPIEDADES DE UN BUEN LENGUAJE SEGN JORGE CASTRO Y

    OTROS

    Aspectos de diseo

    Claridad, simplicidad y unidad de conceptos. Un lenguaje de programacin ha de suministrar al programador un conjunto de conceptos claros, simples y

  • unificados, de manera que puedan ser usados como primitivas para el diseo de

    algoritmos con esta finalidad, es deseable tener un nmero pequeo de

    conceptos distintos y que las reglas para combinarlos sean tan simples y

    regulares como sea posible.

    Sintaxis y semntica bien definidas. La necesidad de una sintaxis y una semntica bien definidas es necesario ya que por una parte una definicin

    sintctica formal nos puede asegurar la inambigedad y completitud del

    lenguaje y, por otra, la definicin formal de la semntica obligar a que todas las

    implementaciones de ste se comporten igual.

    De la misma manera tambin es importante dar al lenguaje una sintaxis clara

    que lo haga legible. La legibilidad tiene su contrapunto en la facilidad para

    escribir programas, especialmente respecto a la rapidez, por eso, en ciertos

    casos, puede ser deseable que el lenguaje sea crptico para incrementar la rapidez en la escritura de los programas y, por tanto que pierda legibilidad.

    Consistencia con las notaciones usuales. Es la propiedad de que las cosas signifiquen lo que uno espera que signifiquen. Por ejemplo, que los smbolos de

    operacin sean los usuales, las palabras claves tengan un uso relacionado con lo

    que significan, o bien que si definimos constructores que ya aparecen en otros

    lenguajes su significado no sea diferente.

    Soporte para la abstraccin. Debido a que en muchos casos el conjunto de operaciones y tipos de datos bsicos est muy lejos de lo que querramos a la

    hora de resolver un problema, el lenguaje nos ha de dar mecanismos para poder

    abstraer: poder crear tipos de datos nuevos y asociarles nuevas operaciones,

    poder definir diferentes niveles dentro de un programa y tratarlos por separado,

    etc.

    Independencia de la mquina. La mquina sobre la que se trabaja no debe condicionar la programacin. Esta propiedad est ligada a la portabilidad, es

    decir, la capacidad de mover programas de una mquina a otra. Esto se

    consideraba una faceta esencial para los lenguajes de alto nivel, pero en muchos

    casos (especialmente en los lenguajes imperativos) no se ha cumplido.

    Verificabilidad. En principio, se trata de que los programas sean verificables formalmente. Esta propiedad, adems, garantiza una cierta legibilidad en los

    programas.

    Redundancia. Es una propiedad muy importante a la hora de detectar errores. Un ejemplo de redundancia (repeticin de informacin) sera la definicin

    explcita de variables, pues el solo hecho de usarlas ya nos dice que son

    variables y tambin de qu tipo son. La redundancia puede permitir detectar

    errores tipogrficos, por ejemplo, al escribir una variable, ya que el nombre que

    hayamos escrito por error (si no es por casualidad) no estar definido. En

  • general, es muy importante que los errores se detecten cuanto antes mejor,

    porque cuanto ms se tarde en detectarlos ms costoso ser corregirlos.

    Ortogonalidad. Un lenguaje de programacin ha de tener slo un conjunto de herramientas bsicas, comprensibles por separado y sin ningn tipo de iteracin

    cuando se combinan. Esto quiere decir esencialmente que haya pocas

    excepciones dentro del conjunto de cosa que podemos hace combinando los

    diferentes elementos del lenguaje.

    Aspectos de Implementacin.

    Portabilidad. Para muchos proyectos, la portabilidad del programa resultantes es un criterio muy importante, pues las computadoras donde se desarrollen los

    programas no son normalmente los mismos que habrn de ejecutarlos

    finalmente. Ya hemos visto que esta propiedad de las implementaciones de un

    lenguaje depende directamente de dos aspectos del diseo: la independencia de

    la mquina y la definicin formal de semntica.

    Soporte Externo. La existencia de un entorno de trabajo apropiado puede hacer que un lenguaje, en principio menos potente, sea ms fcil de usar que uno ms

    potente que no tenga este soporte. Dentro de este entorno podemos incluir, por

    ejemplo, programas para encontrar errores (debuggers) o editores especiales que

    agilicen el proceso de creacin de programas.

    Calidad del compilador o intrprete. Si se trata de un compilador incluye el costo (en tiempo) de traduccin, como la calidad del cdigo generado. Segn el

    tipo de objetivo que tengamos (si tenemos que compilar muy a menudo y

    despus ejecutar muy poco, bien al revs), potenciaremos ms la eficiencia en

    un sentido o en otro. Si el lenguaje es interpretado, entonces se refiere a la

    eficiencia (en tiempo) de la interpretacin.

    Bajo costo de mantenimiento. Muchos estudios han demostrado que la mayor parte del costo que implica cualquier programa que use durante un cierto

    perodo de tiempo (aos), no est en el costo inicial del diseo e

    implementacin, sino en el mantenimiento que recibe una vez instalado. Este

    mantenimiento incluye la reparacin de errores o las extensiones del programa

    para responder a nuevas necesidades y es hecho, posiblemente, por

    programadores que no son los que hicieron el programa inicialmente. Por lo

    tanto, un lenguaje que permita la modificacin, reparacin, y extensin a lo

    largo del tiempo de programas por parte de diferentes programadores, puede

    reducir notablemente los costos.

    Documentacin. Este punto slo hace referencia a la necesidad de disponer de una buena documentacin sobre el lenguaje. Esta documentacin se compondr

    de diversos manuales: de la implementacin del lenguaje, de los complementos

    del entorno, etc.

  • CRITERIOS DE EVALUACIN SEGN TERRENCE PRATT

    Claridad, sencillez y unidad de los conceptos del Lenguaje. Un lenguaje de programacin proporciona a la vez un marco conceptual para pensar acerca de los

    algoritmos y un medio de expresar esos algoritmos. El lenguaje debe constituir una

    ayuda para el programador mucho antes de la etapa misma de codificacin. Debe

    proveer un conjunto claro, sencillo y unificado de conceptos que se puedan usar

    como primitivas en el desarrollo de algoritmos. Para ello es deseable contar con un

    nmero mnimo de conceptos que se puedan usar como primitivas en el desarrollo

    de algoritmos. Para ello es deseable contar con un nmero mnimo de conceptos

    distintos cuyas reglas de combinacin sean tan sencillas y regulares como sea

    posible. Llamamos a este atributo Integridad Conceptual. Esta claridad de semntica

    y de conceptos es el factor determinante del valor de un lenguaje

    Claridad en la sintaxis del programa. La sintaxis de un lenguaje afecta la facilidad con la que un programa puede escribirse, probarse y ms tarde entenderse

    y modificarse. La facilidad de lectura (legibilidad) de un programa en un lenguaje es

    una consecuencia central aqu. Una sintaxis que sea particularmente breve o

    enigmtica con frecuencia hace que un programa sea fcil de escribir (por el

    programador con experiencia), pero difcil de leer cuando el programa debe

    modificarse posteriormente. Los programas APL a veces resultan tan enigmticos

    que sus propios diseadores no pueden descifrarlos con facilidad unos meses

    despus de que los terminaron. Muchos lenguajes contienen construcciones

    sintcticas que fomentan la dificultad de lectura, produciendo dos instrucciones casi

    idnticas que significan realmente dos cosas distintas. Por ejemplo la presencia de

    un solo carcter blanco en un proposicin Snobol4 puede alterar completamente su

    significado. Un lenguaje debe tener la propiedad de que las construcciones que

    tienen un significado diferente tambin tengan un aspecto diferente: por ejemplo, las

    diferencias semnticas deben reflejarse en la sintaxis del lenguaje.

    Para el programador no basta que una sintaxis no sea engaosa o propensa a errores sino

    que adems debe ser una sintaxis que usada adecuadamente permita que las estructuras

    lgicas sealadas en el algoritmo. En el enfoque de programacin conocido como

    programacin estructurada, los lenguajes se disean jerrquicamente de arriba hacia abajo

    (del programa principal a los subprogramas de niveles ms bajos), usando slo un conjunto

    restringido de estructuras de control en cada nivel - secuencias de instrucciones simples,

    iteraciones y ciertos tipos de ramificacin condicional. Cuando se hace en forma adecuada,

    las estructuras algortmicas resultantes son fciles de entender, depurar y modificar. En

    forma ideal debera ser posible traducir tal programa directamente a instrucciones de

    programacin adecuadas que reflejaran la estructura del algoritmo. Con frecuencia la

    sintaxis del lenguaje no permite tal codificacin directa. Por ejemplo, Fortran se basa en

    etiquetar las proposiciones e instrucciones goto como estructuras de control y proporciona

    poca alternativas. Por eso la forma de un programa Fortran no se puede hacer de manera

    ordinaria para reflejar con mucha claridad la estructura de control del algoritmo adyacente,

    y gran parte del esfuerzo utilizado en el desarrollo de un algoritmo estructurado es posible

    que se pierda en la traduccin al Fortran. Esto es parte de la controversia que provoca el uso

  • del goto, lo cual se ver en la unidad de control de secuencias. uno de los argumentos

    principales que favorecen a Pascal sobre Fortran en la enseanza de la programacin

    introductoria, a pesar de que se este se utilizaba mucho, es que Pascal favorece al diseo

    elegante de los programas.

    Ortogonalidad. El trmino ortogonalidad se refiere al atributo de ser capaz de combinar varias caractersticas de un lenguaje en todas las combinaciones posibles,

    de manera que todas ellas tengan un significado. Por ejemplo, supngase que un

    lenguaje dispone de una expresin que puede producir un valor, y tambin dispone

    de un enunciado condicional que evala una expresin para obtener un valor falso o

    verdadero. Estas dos caractersticas del lenguaje, la expresin y el enunciado

    condicional son ortogonales si se puede usar y evaluar cualquier expresin dentro

    del enunciado condicional.

    Cuando las caractersticas de un lenguaje son ortogonales, entonces es ms fcil de

    aprender y de escribir los programas porque hay menos excepciones y casos especiales que

    recordar. El aspecto negativo de la ortogonalidad es que un programa suele compilar sin

    errores a pesar de contener una combinacin de caractersticas que son lgicamente

    incoherentes o cuya ejecucin es en un extremo ineficiente. A causa de estas cualidades en

    oposicin, la ortogonalidad como atributo de un diseo de lenguaje es todava motivo de

    controversia, pues a ciertas personas le s gusta y a otras no.

    Naturalidad para la aplicacin. El lenguaje debe proporcionar estructuras de datos adecuadas, operaciones, estructuras de control y una sintaxis natural para

    resolver un problema. Una de las razones principales de la proliferacin de

    lenguajes es justamente esta necesidad de naturalidad. Un lenguaje ajustado

    particularmente a cierta clase de aplicaciones puede simplificar mucho la creacin

    de est rea. Es importante mencionar que los algoritmos secuenciales, algoritmos

    concurrentes, algoritmos lgicos, etc. Todos ellos tienen estructuras naturales

    diferentes que estn representadas por programas en esos lenguajes.

    Cobol, para aplicaciones en negocios incluyendo el manejo de archivos; Snobol4, para

    procesamiento de cadenas; Prolog con su predisposicin hacia propiedades deductivas y

    c++ para diseo orientado a objetos son lenguajes con una inclinacin obvia a clases

    particulares de aplicaciones.

    Apoyo para la abstraccin. Aun con el lenguaje ms natural para una aplicacin, hay una brecha sustancial de las estructuras de datos abstractos y las operaciones

    que caracterizan la solucin de un problema con las estructuras de datos

    particulares de datos primarios y operaciones construidas en un lenguaje. Por

    ejemplo, Pascal puede ser un lenguaje apropiado para construir un programa que

    haga el horario de clases de una universidad pero las estructuras de datos abstractos

    de estudiante, clase, instructor, saln de lectura y las operaciones abstractas de asignar un estudiante a una clase, planear una clase en un saln de lectura, etc., que son naturales de la aplicacin no son proporcionadas directamente por

    Pascal. Una parte substancial de la tarea del programador es disear las

    abstracciones usando las caractersticas ms primitivas proporcionadas por el

  • lenguaje de programacin real. El lenguaje debe ayudar sustancialmente o impedir

    la expresin de estas abstracciones. En teora debe permitir que las estructuras de

    datos, tipos de datos y operaciones definan y mantengan como abstracciones

    contenidas por s mismas, para que el programador pueda emplearlos en otras partes

    del programa conociendo slo sus propiedades de abstraccin sin importar los

    detalles de su implementacin. Casi todos los lenguajes proporcionan mecanismos

    de subprogramas para definir las operaciones de abstraccin, pero la mayora son

    muy dbiles en su soporte de otros tipos de abstraccin a excepcin de los lenguajes

    de Ada y C++.

    Facilidad para verificar programas. La confiabilidad de programas escritos en un lenguaje es casi siempre una preocupacin central. Existen muchas tcnicas para

    verificar que un programa ejecuta correctamente la funcin requerida. Se puede

    probar que un programa es correcto a travs de un mtodo formal de verificacin, se

    puede probar informalmente que es correcto por la verificacin de escritorio, es

    decir, verificar visualmente el texto del programa; se puede poner a prueba

    ejecutndose con los datos de entrada de prueba y comparando los resultados de

    salida con las especificaciones, etc. Para programas grandes se suele emplear la

    combinacin de algunos de estos mtodos. El uso de un programa que dificulta la

    verificacin de programas puede ser ms problemtico que el de uno que apoya y

    simplifica la verificacin no obstante que el primero pueda proporcionar muchas

    capacidades que superficialmente parecen hacer ms fcil la programacin. La

    sencillez de la estructura semntica y sintctica es un aspecto primordial que tiende

    a simplificar la verificacin de programas.

    Entorno de programacin. La estructura tcnica de un lenguaje de programacin es slo uno de los aspectos que afectas su utilidad. La presencia de un entorno de

    programacin adecuado puede facilitar el trabajo con un lenguaje tcnicamente

    dbil en comparacin con un lenguaje ms fuerte con apoyo externo. Se podra

    incluir una larga lista de factores como parte del entorno de programacin. La

    disponibilidad de una implementacin confiable, eficiente y bien documentada del

    lenguaje debe encabezar la lista. Los editores especiales y paquetes de prueba

    hechos a la medida para el lenguaje pueden acelerar mucho la creacin y puesta a

    prueba de los programas. Los recursos para el mantenimiento y modificacin de

    mltiples versiones de un programa puede simplificar mucho el trabajo con

    programas grandes. Uno de los lenguajes que ofrece un entorno de programacin

    compuesto es el Smalltalk

    Portabilidad de Programas. Un criterio importante para muchos proyectos de programacin es el de la portabilidad de los programas resultantes de la

    computadora en la cual se desarrollaron para otros sistemas de computadoras. Un

    lenguaje que est ampliamente disponible y cuya definicin es independiente de las

    caractersticas de una mquina en particular constituye una base til para la

    produccin de programas transportables. Ada, Fortran, C y Pascal tienen todos ellos

    definiciones estandarizadas que permiten la implementacin de aplicaciones

    transportables. Otros, como Ml, provienen de una implementacin de fuente nica

  • que permite al diseador de lenguajes cierto control sobre las caractersticas

    transportables del lenguaje.

    Costo de uso. Es indudable que el costo es un elemento importante en la evaluacin de cualquier lenguaje de programacin, pero son factibles diferentes medidas del

    mismo.

    Costo de ejecucin de los programas. En los primeros das de la computacin, las cuestiones de costo se referan casi exclusivamente a la ejecucin de los

    programas. Era importante el diseo de compiladores que optimizaran la

    asignacin eficiente de registros y el diseo de mecanismos eficientes de apoyo

    al tiempo de ejecucin. El costo de ejecucin del programa, aunque siempre ha

    tenido cierta importancia en el diseo del lenguaje es de importancia primordial

    para grandes programas de produccin que se van a ejecutar con frecuencia. En

    la actualidad, sin embargo, para muchas aplicaciones la velocidad de ejecucin

    no es la preocupacin mayor. Con mquinas de escritorio que trabajan a varios

    millones de instrucciones por segundo y que estn ociosas la mayor parte del

    tiempo, se puede tolerar el incremento de un 10 o 20% del tiempo de ejecucin

    si ello significa un mejor diagnstico o un control ms fcil por parte del usuario

    sobre el desarrollo y mantenimiento del programa.

    Costo de traduccin de programas. Cuando un lenguaje como Fortran o C se utiliza en la enseanza, la cuestin de traduccin eficiente, ms que la ejecucin

    eficiente, puede ser de importancia capital. Tpicamente los programas

    estudiantiles se compilan muchas veces cuando se estn depurando pero se

    ejecutan slo pocas veces. En casos as, es importante contar con un compilador

    rpido y eficiente en vez de un compilador que produzca un cdigo optimizado.

    Costo de creacin, prueba y uso de programas. Un tercer aspecto del costo de un lenguaje de programacin queda ejemplificado por el lenguajes Smalltalk.

    Para una cierta clase de problemas se puede disear, codificar, probar, modificar

    y usar una solucin con una inversin mnima en tiempo y energa del

    programador. Smalltalk es econmico en cuanto a que se minimizan el tiempo y

    el esfuerzo totales que se invierten en la solucin de un problema en la

    computadora. La preocupacin por esta clase de costo de conjunto en el uso de

    un lenguaje se ha vuelto tan importante en muchos casos como la inquietud por

    la ejecucin y compilacin eficiente de los programas.

    Costo de mantenimiento de programas. Muchos estudios han demostrado que el costo ms grande que interviene en cualquier programa que se utiliza a lo largo

    de un perodo de aos no es el costo del diseo, codificacin y prueba inicial del

    programa, sino los costos totales del ciclo vital, que incluye los costos de

    desarrollo y el costo de mantenimiento del programa en tanto contina en uso

    productivo. El mantenimiento incluye la reparacin de errores, los que se

    descubren despus de que se comienza a usar el programa, cambios que requiere

    el programa cuando se actualiza el hardware subyacente o el sistema operativo,

    y extensiones y mejoras al programa que se requieren para satisfacer nuevas

  • necesidades. Un lenguaje que facilita la modificacin, reparacin y extensin

    frecuente del programa por parte de diferentes programadores durante un

    perodo de varios aos puede ser a la larga, mucho menos costoso que usar

    cualquier otro.

    FUNDAMENTOS DE LOS

    LENGUAJES SEGN ROGER S.

    PRESSMAN.

    Tipos de datos y tipificacin. Hoy en da, el mrito de un lenguaje de programacin moderno

    se juzga por algo ms que sintaxis y la amplitud

    de construcciones procedimentales. La

    tipificacin de datos y los tipos de datos

    especficos soportados por un lenguaje de

    programacin son un aspecto importante en la calidad del lenguaje. Un objeto de

    datos hereda un conjunto de atributos fundamentales del tipo de datos al que

    pertenece. Un objeto de datos puede tomar un valor que se encuentre dentro del

    rango de valores legtimos del tipo de datos y puede ser manipulado por operaciones

    que se apliquen a ese tipo de datos

    Los tipos de datos simples abarcan un amplio rango que incluye los tipos numricos, tipos

    enumerados, tipos lgicos y tipos de cadena. Los tipos de datos ms complejos engloban

    estructuras de datos engloban estructuras que van desde los array simples unidimensionales

    hasta las estructuras de listas y los complejos y heterogneos arrays y registros.

    Las operaciones que se pueden realizar sobre un tipo de datos particular y la forma en que

    se pueden manipular distintos tipos en una misma sentencia se controlan por la

    comprobacin de tipos incorporada en el intrprete o compilador del lenguaje de

    programacin. Fairley define cinco niveles de comprobacin de tipos que se encuentran

    normalmente en los lenguajes de programacin.

    Nivel 0: sin tipos. Los lenguajes de programacin sin tipos no incluyen medios explcitos para la tipificacin de datos y, por lo tanto, no conllevan ninguna

    comprobacin de tipos. Los lenguajes ANSI estndar de algunos como Basic,

    Apl, Lisp, e incluso Cobol entran dentro de esta categora. Aunque cada

    lenguaje permite al usuario definir las estructuras de datos, la representacin de

    los datos contenida en cada objeto de datos esta predefinida.

    Nivel 1: coercin automtica de tipos es un mecanismo de comprobacin de tipos que permite al programador mezclar diferentes tipos incompatibles,

    permitiendo as que se den las operaciones requeridas. Por ejemplo Pl/1 asigna

    un valor numrico de 0 al valor lgico false (falso) y un valor numrico de 1 al

    valor lgico true (verdadero). As, las operaciones aritmticas, aplicadas

    normalmente a tipos de datos numricos, se pueden aplicar a tipos de datos

    lgicos en Pl/1.

  • Nivel 2: modo mixto conversin de tipos es similar en muchos aspectos a la coercin automtica de tipos. Para que se pueda dar una determinada operacin,

    diferentes tipos de datos dentro de una misma categora de tipos, se convierten a

    un nico tipo destino. La aritmtica de modo mixto de Fortran permite que se

    usen nmeros enteros y reales en una misma secuencia de lenguajes de

    programacin.

    Nivel 3: comprobacin de tipos pseudorrgida tiene todas las caractersticas de la fuerte comprobacin de tipos, pero que se implementan de forma que existan

    una o ms vas escapes. Por ejemplo aunque Pascal, comprueba la

    compatibilidad de interfaces dentro de un mismo programa compilado, no lo

    hace para procedimientos compilados por separado un escape en la aplicacin de la fuerte comprobacin de datos.

    Nivel 4: fuerte comprobacin de tipos se da en lenguajes de programacin que slo permiten llevar a cabo operaciones entre objetos de datos que sean del

    mismo tipo de datos previamente especificado. La comprobacin de tipos se

    lleva a cabo sobre los operadores, los operandos y las interfaces de los

    subprogramas, tanto en tiempo de compilacin como en tiempo de carga y en

    tiempo de ejecucin. Los compiladores de Ada llevan a cabo una fuerte

    comprobacin de tipos.

    Subprogramas. Un subprograma es un componente de un programa compilado por separado que contiene datos y estructuras de control. Generalmente se le menciona

    con el nombre de mdulo como una manifestacin genrica del subprograma.

    Dependiendo del lenguaje de programacin, un subprograma se puede denominar

    subrutina, procedimiento, funcin u otro nombre especializado. Sin tener en cuenta

    cual sea el nombre, el subprograma tiene un conjunto de caractersticas genricas

    Una seccin de especificacin que incluye su nombre y la descripcin de la interfaz.

    Una seccin de implementacin que incluye los datos y las estructuras de control

    Un mecanismo de activacin que permite que el subprograma sea requerido desde cualquier punto del programa.

    En los lenguajes de programacin convencionales, cada subprograma es una entidad en s

    misma, operando sobre los datos en la forma que dictan las estructuras de control de un

    programa mayor. En lenguajes de programacin orientados a objetos, el punto de vista

    clsico del subprograma es reemplazado por el de objeto.

    Estructuras de Control. Es un nivel fundamental, todos los lenguajes de programacin modernos permiten al programador representar secuencias,

    condiciones y repetidores las construcciones lgicas de la programacin estructurada. La mayora de los lenguajes de programacin modernos proporcionan

  • una sintaxis para la especificacin directa del if then else, del do while y del repeat until (as como el case). Otros lenguajes, como Lisp y Apl, requieren que el programador emule esas construcciones dentro de los lmites de sintaxis del

    lenguaje.

    Adems de las construcciones prodecimentales bsicas de la programacin estructurada,

    puede haber otras estructuras de control. La recursividad crea una segunda activacin de un

    subprograma durante la primera activacin. O sea, el subprograma se llama a s mismo

    como parte del procedimiento definido, la concurrencia da soporte a la creacin de

    mltiples tareas, a la sincronizacin de tareas y a la comunicacin de tareas en general esta

    caracterstica del lenguaje es de mucho valor cuando se llevan a cabo aplicaciones de tipo

    real. El manejo de excepciones es una caracterstica del lenguaje que atrapa los errores del

    sistema o los definidos por el usuario, pasando el control a un manipulador de excepciones

    para que los procese.

    Soporte para el enfoque orientado a objetos. En teora, la creacin de objetos y la construccin de software orientado a objetos se puede llevar utilizando cualquier

    lenguaje de programacin convencional (por ejemplo, C o PASCAL). Pero en la

    prctica, el soporte para mtodos orientados a los objetos debe estar incorporado

    directamente en el lenguaje de programacin que se vaya a utilizar para

    implementar un diseo orientado a objetos

    Un lenguaje de programacin orientado a objetos debe proporcionar un soporte directo para

    la definicin de clases la herencia, la encapsulacin y el paso de mensajes. Adems de estas

    construcciones orientadas a los objetos, muchos de estos lenguajes implementan

    caractersticas adicionales, como herencia mltiple y polimorfismo (diferentes objetos que

    pueden recibir mensajes con el mismo nombre).

    La definicin de clases es fundamental en un enfoque orientado a los objetos. Un lenguaje

    de programacin orientado a los objetos define un nombre de clase y especfica los

    componentes privados y pblicos de la clase. Para ilustrar la forma general de las

    construcciones orientadas a los objetos vamos a utilizar C++. Se puede definir una clase,

    denominada contador, de la siguiente forma:

    class contador

    {

    private :

    unsigned int valor;

    public :

    contador ( );

  • void incrementar ( );

    void decrementar ( );

    unsigned int acceder_valor ( );

    };

    A partir de la definicin bsica de la clase se puede obtener una nueva clase, de la siguiente

    manera:

    class contador_especial: public contador

    {

    una copia de todos los datos privados de contador

    private :

    Datos privados de contador_especial;

    };

    Los objetos derivados de la clase contador_especial pueden utilizar todos los mtodos definidos para la clase madre contador. La definicin de una clase encapsula las abstracciones de los datos y los componentes del programa (mtodos) que operan sobre

    dichos datos. En C++, los mensajes se envan a los objetos (la instanciacin de una clase)

    de la siguiente forma:

    Nombre_objeto.mensaje (argumentos);

    Donde nombre_objeto identifica el objeto y mensaje (argumentos) describe el mensaje a

    enviar.

    Los detalles de implementacin y la terminologa para las definiciones de clases, herencia,

    encapsulacin y paso de mensajes puede variar dependiendo del lenguaje. Por ejemplo, el

    lenguaje de programacin Smalltalk define una clase de la siguiente manera

    Definicin: identifica a la clase. Datos privados: atributos cuyos valores son privados de las instancias

    individuales de la clase.

    Datos compartidos: atributos cuyos valores son compartidos por todas las instancias de la clase.

    Diccionarios: atributos cuyos valores son compartidos por mltiples clases.

  • Mtodos de instancia: los procedimientos que implementan mensajes que se pueden enviar a las instancias de la clase.

    Mtodos de clase: los procedimientos que implementan mensajes que se pueden enviar a la propia clase (por ejemplo: inicializacin de los datos compartidos)

    Aunque estos trminos difieren ligeramente de los usados en la definicin de C++, el

    concepto fundamental de clase permanece igual. De forma parecida, la herencia, la

    encapsulacin y el paso de mensajes, se implementan con una sintaxis diferente, pero con

    los mismos fundamentos semnticos. Cualquier construccin est disponible en cualquier

    lenguaje que verdaderamente sea orientado a objetos.

    CARACTERSTICAS DE UN BUEN LENGUAJE SEGN ALLEN B.

    TUCKER

    Expresividad. La habilidad de un lenguaje para reflejar claramente el significado deseado por el diseador del algoritmo, por lo que, permite que una declaracin se

    establezca compactamente y refuerce el uso de sentencias asociadas con la

    programacin estructurada

    Bien definido. Que la sintaxis y semntica del lenguaje no contengan ambigedades, son internamente consistentes y completas. Entonces el

    implementador de un lenguaje bien definido debe tener dentro de su definicin una

    especificacin completa de todas las formas expresivas del lenguaje y sus

    significados. El programador, por la misma virtud, debe poder predecir exactamente

    el comportamiento de cada expresin antes de que realmente se ejecute. Por lo

    tanto, los lenguajes bien definidos aumentan la transportabilidad y la prueba.

    Tipos y Estructuras de Datos. La habilidad de un lenguaje para soportar una gran variedad de valores de datos y colecciones no elementales de stos. Los ltimos

    incluyen principalmente a los arrays y registros, pero no excluye a las estructura de

    datos dinmicas, tales como listas, colas, pilas y rboles.

    Modularidad. Esta caractersticas tiene dos aspectos:

    El soporte del lenguaje para la subprogramacin, es decir, la habilidad de definir procedimientos y funciones independientes y comunicarlos va

    parmetros o variables globales con el programa llamador.

    La extensibilidad del lenguaje en el sentido de permitir operadores y tipos de datos definidos por el programador

    Facilidades de Entrada Salida. En las Entradas y Salidas de un lenguaje, nosotros estamos examinando cmo soporta los archivos de acceso secuencial,

    indexado y directos, as como las funciones sobre base de datos y de recuperacin

    de Informacin. Los archivos de datos generalmente residen sobre el

    almacenamiento secundario. Un archivo es normalmente demasiado grande para

  • que todos sus registros quepan en la memoria, al mismo tiempo y, por lo tanto se les

    aplican diferentes estrategias de programacin.

    Transportabilidad. Es cuando el lenguaje que est implementado en distintas computadoras. Esto es, su diseo es relativamente independiente de la mquina. Los

    Estndares de los lenguajes generalmente son ms transportables.

    Eficiencia. Permite la ejecucin y traduccin rpida sobre las mquinas en dnde est implementado.

    Pedagoga. La facilidad de ensear y aprender, existencia de mejores libros de texto, estn implementados en un entorno de desarrollo de programas mejor; son

    ampliamente conocidos y usados por los mejores programadores en el rea de

    aplicacin.

    Generalidad. Que el lenguaje sea til en un amplio rango de aplicaciones de programacin.

    CRITERIOS DE EVALUACIN DE LOS LENGUAJES SEGN ROBERT

    SEBESTA

    Legibilidad. Uno de los ms importantes criterios para juzgar a un lenguaje de programacin es la facilidad con la cual los programas pueden ser ledos o

    entendidos. Antes de 1970, el desarrollo de software fue intentado largamente en los

    trminos del cdigo de escritura. En la dcada de 1970, sin embargo el ciclo de

    vida de los conceptos de software fue desarrollado; la codificacin fue relegada a

    una representacin en un papel ms pequeo y el mantenimiento fue reorganizado

    como gran parte del ciclo, esto en los trminos de costo. Porque la facilidad de

    mantenimiento es determinada en gran parte por la legibilidad de los programas, la

    legibilidad es un punto muy importante en de la calidad de programas y los

    lenguajes de programacin.

    Sencillez. Dentro de las caractersticas que contribuye a la legibilidad de un lenguaje de programacin es la sencillez, la cual puede afectar fuertemente a la

    legibilidad. Un lenguaje que tiene un gran nmero de componentes elementales

    es ms difcil de aprender que uno que contenga un nmero pequeo. Los

    programadores que utilizan los lenguajes de programacin tienen la tendencia de

    aprender una parte de los mismos sin embargo ignoran otras caractersticas de

    ellos. Esta razn muchas veces es utilizada como pretexto, cuando el lenguaje

    tiene un gran nmero de componentes o elementos, pero este argumento no es

    vlido. Los problemas de legibilidad ocurren cuando el programador aprende de

    una forma diferente una aplicacin, con la cual el analista este familiarizado.

    Teniendo tambin muchas caractersticas no es solamente el detrimento de la simplicidad

    del lenguaje Otro problema es la multiplicidad de caractersticas, es decir, tener ms de una

  • forma determinada para realizar una operacin en particular. Por ejemplo, en el lenguaje C

    se puede incrementar una simple variable entera de cuatro diferentes maneras:

    Contador = contador + 1

    Contador =+ 1

    ++ contador

    contador ++

    Aunque la ltima sentencia tiene una pequea diferencia semntica en comparacin con las

    otros en algunos usos, las cuatro tiene el mismo significado cuando son usadas como

    expresiones estando solas.

    Un tercer problema potencial es el operador sobrecargado, en el cual un simple smbolo

    operador tiene ms de un significado. Aunque esto es una caracterstica til, puede reducir

    la legibilidad al leer si los usuarios estn permitiendo ellos mismos la generacin de

    sobrecarga y ellos no lo hacen evidentemente. Por ejemplo, es claramente aceptada la

    sobrecarga del signo + para usarlo en la suma tanto de enteros como de reales o punto

    flotantes. En efecto esta sobrecarga simplifica un lenguaje porque reduce el nmero de

    operadores. Sin embargo, supuestamente, la definicin del programador del signo + usado

    entre arreglo de dimensin simple puede significar la suma de todos los elementos de

    ambos arreglos. Porque el significado usual de la adicin de vectores es completamente

    diferente de esto, puede hacer ms confuso el programa para ambos, el autor y los lectores.

    Un nivel de ejemplo ms extremo de la confusin de programa puede ser un usuario

    definiendo el signo + usado entre dos vectores para significar la diferencia entre los

    primeros elementos de los mismos.

    Las sentencias del lenguaje pueden ser tambin muy simples. Por ejemplo la sintaxis y el

    significado de las sentencias del lenguaje ensamblador son un modelo de simplicidad. Es

    muy simple, sin embargo hacer programas en lenguaje ensamblador es poco legible. Porque

    ellos carecen por completo de sentencias de control, su estructura es ms sutil, porque sus

    sentencias son ms simples, para realizar mejor esto se requiere un lenguaje equivalente de

    alto nivel

    Ortogonalidad. Ortogonalidad en un lenguaje de programacin significa que hay una pequea relacin entre un conjunto de construcciones primitivas que

    pueden ser combinados en un numero relativamente pequeo de manera que se

    pueden construir las estructuras de control y de datos en el lenguaje. Adems,

    cada combinacin posible de primitivas es legal y significativa as, la

    ortogonalidad sigue de una simetra de lazos entre primitivos, mientras un

    concepto del uso de ortogonalidad en el diseo puede ser ilustrado comparando

    un aspecto de los lenguajes ensamblador de los ordenadores centrales de la IBM

    y de la serie de VAX de superminicomputadoras. Nosotros consideraremos

    solamente una sola situacin simple, la de agregar dos valores numricos de 32-

    bit que residen o en memoria o en un registro y substituir uno de los dos valores

  • con suma para este propsito, la unidad IBM tiene dos instruccin que tienen la

    siguiente forma: A Reg1, memory_cell.

    R Reg1, Reg2

    Donde Reg1 y Reg2 representan registros. La semntica de ellos es

    Reg1 contenido(reg1) + contenido (memory_cell)

    Reg1 contenido(reg1) + contenido(reg2)

    La instruccin de adicin VAX para valores enteros de 32 bits es

    ADDL operando1, operando2

    La semntica de la misma es:

    Operando2 contenido(operando1) + contenido(operando2)

    En este caso, cualquier operando puede ser uno colocado en una celda de memoria con una

    instruccin.

    El diseo de VAX tiene ortogonalidad por que aqu con una sola instruccin se puede

    utilizar para colocar, en la celda memoria, un operando. Hay dos maneras de especificar el

    operando, que puede ser la combinacin en cualquier manera concebible. El diseo IBM

    disear no es ortogonal. Solamente dos combinaciones de operaciones son legales fuera de

    las cuatro posibilidad, y se requiere dos diferente instrucciones, A y AR. El diseo IBM es

    ser ms estricto y por lo tanto menos fcil de escribir, por ejemplo, usted no puede agregar

    un valor y colocarle el valor en una localizacin de memoria. Adems, el diseo de IBM es

    ms difcil de aprender debido a las restricciones y adiciones de la instruccin.

    La ortogonalidad se relaciona de cerca con la simplicidad: cuanto ms ortogonal es el

    diseo de un lenguaje, menos son las excepciones que se requieren de las reglas del

    lenguaje. Pocas excepciones significan un grado ms alto de regularidad en el diseo, que

    hace que el lenguaje sea ms fcil de aprender, leer y entender. Cualquiera que ha

    aprendido una parte significativa del lenguaje ingls puede atestiguar la dificultad de la

    multiplicidad de aprender las excepciones de una regla (por ejemplo, i antes de e excepto

    despus c).

    Sin embargo Pascal es un moderno lenguaje relativo, su diseo fue un largo

    nmero de tipos de reglas inconsistentes para ser seguidas. Los procedimientos

    pueden tener a los dos tipos de parmetros var y value, a menos que el procedimiento mismo lo pase como un parmetro. La funcin puede retornar

    solamente tipos no estructurados. Un parmetro de tipo formal para ser

    llamado; ello no puede ser completado con la descripcin de tipos. Los

  • archivos no pueden ser pasados por valor. La lista de regla en y en. En otras

    palabras los tipos de reglas de Pascal no son ortogonales.

    Demasiado ortogonalidad tambin puede causar problemas. Quizs el lenguaje de

    programacin ms ortogonal es ALGOL 68. Cada construccin del lenguaje en ALGOL 68

    tiene un tipo, y no hay restricciones en esos tipos. Adems, la mayora de las

    construcciones producen valores. Esta libertad de combinaciones permite construcciones

    extremadamente complejas. Por ejemplo, los smbolos condicionales pueden aparecer como

    los izquierdos en las asignaciones, junto con la declaracin y otras declaraciones

    clasificadas, mientras el resultado es una localizacin. Esta forma extrema de ortogonalidad

    conduce a una innecesaria complejidad. Adems, porque los lenguajes requieren una gran

    cantidad de primitivas, un alto grado de ortogonalidad da lugar a una explosin de la

    combinacin. Tan incluso si las combinaciones son simples, sus nmeros escarpados

    conducen a la complejidad. La simplicidad en un lenguaje, por lo tanto, es por lo menos en

    parte un resultado de una combinacin de un nmero relativamente pequeo de

    construcciones primitivas y del uso limitado del concepto del ortogonalidad.

    Algunos creen que los lenguajes funcionales ofrecen una buena combinacin de la

    simplicidad y de ortogonalidad. Un lenguaje funcional es aqul que: sus operaciones son

    hechas aplicando funciones a parmetros dados. En contraste, los lenguajes imperativos,

    tales como C y PASCAL, las operaciones se especifican sobre todo con variables y

    declaraciones de asignacin. El Lisp es actualmente el lenguaje ms extensamente usado

    que utiliza la programacin funcional. El Lisp no es un lenguaje funcional puro, porque

    tambin contiene algunas caractersticas de lenguaje imperativo. Los lenguajes funcionales

    ofrecen potencialmente la simplicidad total ms grande porque pueden lograr todo con una

    sola construccin, la llamada de la funcin, que, se puede combinar con otras llamadas de

    funciones de manera simple. Esta elegancia simple es la razn por la que atraen al

    investigador de muchos lenguajes a los lenguajes funcionales, como alternativa primaria a

    los lenguajes no funcionales complejos, tales como Ada y PL1

    Sentencias de Control. La programacin estructurada revoluciona en la dcada de 1970 fue un reaccin para la pobre legibilidad causada por la limitadas

    estructuras de control de algunos lenguajes surgidos en la dcadas de 1950 y

    1960. Particularmente, se reconoci ampliamente que el uso indiscriminado de

    las declaraciones del goto reduce seriamente la legibilidad del programa. Los

    programas que se pueden leer de arriba hacia abajo (top down) son mucho ms fciles de entender que los programas que requieren saltar visualmente la lectura

    del programa a partir de una declaracin a otra declaracin no adyacente para

    seguir el orden de la ejecucin. Sin embargo, en cierto lenguaje, los gotos que

    ramifican hacia arriba son a veces necesarios; por ejemplo, se requieren para

    construir los ciclos MIENTRAS QUE en FORTRAN 77. Sin embargo, las

    siguientes restricciones del goto puede hacer que los programas sean menos

    legibles:

    1. Deben preceder sus tarjetas, exceptan cuando estn utilizados en los ciclos

    2. Que sus tarjetas deben nunca ser demasiado distantes.

  • 3. El nmero de gotos debe ser limitado

    Las versiones de Basic y de FORTRAN que estaban disponible en los aos 70 le faltaban el

    control de sentencias que permitan fuertes restricciones en el uso de gotos, as que los

    programas eran altamente legibles pero la escritura en esos lenguajes era difcil. La

    mayora de los lenguajes de programacin se disearon desde los ltimos aos de la dcada

    de 1960, sin embargo, han incluido suficientes sentencias de control que se necesitaban

    para eliminar en las declaraciones el uso de goto. As, el diseo de las sentencias de control

    en un lenguaje puede ser un factor importante para la legibilidad de los programas escritos

    en ese lenguaje.

    Estructura de Datos. La presencia de facilidades adecuada para la definicin de estructuras de datos en un lenguaje es otra caracterstica significativa de la

    legibilidad. Por ejemplo, se supone que un tipo de dato entero es usado para una

    bandera indicadora porque no hay tipos de datos boleanos en los lenguajes. En

    tal lenguaje, nosotros podemos tener una sentencia semejante a la siguiente:

    Suma_es_muy_grande 1

    Mientras este significado no es muy claro, entonces en un lenguaje que incluye los tipos

    booleanos nosotros podemos tener la sentencia:

    Suma_es_muy_grande true

    Entonces este significado es perfectamente claro, de manera similar, los tipos de datos

    registro proveen un mtodo para representar como se emplean los registros que es ms

    legible que usar una coleccin de arreglos: un arreglo para cada tem de dato en un registro

    empleado, el cual es mas usado en los lenguajes que no tiene el tipo registro

    Diseo de sintaxis. La sintaxis o forma de los elementos de un idioma tiene un

    efecto significante en la legibilidad de los programas. Lo siguientes son tres

    ejemplos de diseo sintctico de opciones que afectan la legibilidad

    Forma de los identificadores. Los identificadores restringidos a longitudes muy cortas disminuyen la legibilidad, si los identificadores pueden tener seis

    caracteres a lo sumo, como en FORTRAN 77, no es a menudo posible usar

    nombres connotativos para las variables. Un extrem ms es el ejemplo del

    Instituto Nacional Estndar Americano original (ANSI) (BASIC) (ANSI

    197b) en que un identificador pudiera consistir de una sola carta seguida de

    otra.

    La posibilidad del carcter de conexin como lo raya baja de los identificadores es una gran

    ayuda a la legibilidad SUMA_DE_CUADRADOS en ciertamente el que

    SUMADECUADRADOS.

  • Se discuten otros problemas del plan acerca de las formas de identificadores en el captulo

    4.

    Las palabras especiales. La apariencia y la legibilidad del programa es fuertemente influenciado por las formas de palabras especiales de un idioma

    (por ejemplo begin, end, y for) especialmente importante en el mtodo de

    formar declaraciones compuestas o grupos de las declaraciones

    principalmente en estructuras del mundo. Varios idiomas usan emparejando

    pares de palabras especiales o smbolos para formar grupos. Pascal requiere

    begin, los pares del extremo a los grupos de las formas para todo el mando

    de estructuras excepto repeat, declaraciones en las que ellas pueden omitirse

    (otros ejemplos de la falta de Pascal es la ortografa). C usa abrazaderas

    para el mismo propsito. Los dos de estos idiomas sufren porque siempre se

    termina los grupos de las declaraciones de la misma manera, que hechuras si

    es difcil determinar que grupos esta acabndose cuando un extremo

    aparece.

    FORTRAN 77 y ADA hacen a este el que despeja cuando una sintaxis del cierre distinta

    para cada tipo de grupos de las declaraciones para los ejemplos, ADA usa un extremo si

    para terminar una estructura de la seleccin y vuelta del extremo para una estructura de la

    vuelta. Esto es y ejemplo de conflicto entre simplicidad que es el resultado de usar palabras

    reservadas, como en Pascal, y la legibilidad mayor que los resultados de usar palabras

    reservadas, como ADA.

    Otro problema importante si se pueden usar las palabras especiales de un idioma como

    nombres para las variables del programa. En ese caso, los programas resultantes pueden ser

    muy confusos, por ejemplo en FORTRAN 77 la apariencia especial de estas palabras en un

    programa puede o no encontrar algo especial.

    Forma y significado. Declaraciones anteriores para que en su apariencia, por lo menos parcialmente, indica que su propsito es una ayuda obvia a al

    legibilidad. Semntica o significado debe seguir directamente de la sintaxis

    o apariencia. En algunos casos, este principio es violado a travs de dos

    idiomas por las estructuras que son similares en apariencia pero tienen

    significados diferentes.

    En FORTRAN 77, por ejemplo, hay dos declaraciones, el GOTO asignado y los GOTO

    computados cuyas apariencias son muy similares pero cuyo los significados son diferentes,

    aunque los dos son mltiples saltos alejados. Por ejemplo, las declaraciones

    GO TO (10, 20, 30), I

    GO TO I, (10, 20, 30)

    Se usa bastante diferentemente. En el primero, la variable I es de tipo ENTERO; en el

    segundo, etiqueta valores. Una de las quejas primarias sobre los rdenes de la cscara de

  • siempre haga pensar en su funcin. Por ejemplo, el comando grep de UNIX puede ser

    descifrado a travs de conocimientos anteriores, o quizs la destreza y familiaridad con el

    editor, ed de UNIX. Su apariencia no connota nada a los principiantes de UNIX. En ed

    [comando/ expresin_reguladora] busca una subcadena igual a la expresin_reguladora.

    Precediendo esto con hechuras de g, haciendo de esto un comando global que hace que el

    archivo entero se revise hasta alcanzar la bsqueda. Siguiendo el comando con p se

    especifica esa lnea con la subcadena equivalente para que se imprima. Para que el

    g/expresin_reguladora/p, pueda abreviarse, por su puesto como grep, las impresiones de

    todas las lneas en un archivo que contiene subcadena que son iguales a la

    expresin_reguladora

    Fcil Escritura. Escriturabilidad es que la medida de qu fcilmente un lenguaje puede usarse para crear programas para un dominio del problema escogido. La

    mayora de las caractersticas del lenguaje que tambin efectan legibilidad la

    escriturabilidad de efecto. Esto sigue directamente del hecho que el proceso de

    escritura un programa exige la frecuencia del programador de releer las porciones

    del programa existente.

    Rescriturabilidad debe ser considerado en el contexto del dominio del problema designado

    de un lenguaje en el reino de una aplicacin particular y el otro no era. Por ejemplo, la

    escriturabilidad de COBOL y APL es extremadamente diferente para crear un programa

    para tratar con estructura de datos bidimensionales, por que de los dos APL es ideal. Sus

    escriturabilidades tambin son bastante diferentes para la pizca de los informes producto

    de los formatos complejos, para eso es la finalidad por lo que COBOL se dise.

    Las subdivisiones siguientes describen los factores ms importantes que influyen en la

    escriturabilidad de un lenguaje

    Sencillez y Ortogonalidad. S un lenguaje, tiene una gran cantidad de diversas construcciones, algunos programadores pueden no ser familiares con todos

    ellos. Esto puede conducir a un uso errneo de algunas caractersticas y de un

    desuso de otros que puedan ser ms elegantes o ms eficientes, o ambos, que los

    que se utilicen. Esto puede ser posible, segn lo observado por Hoare, para

    utilizar caractersticas desconocidas accidentalmente, cuando los resultados son

    extraos.

    Por lo tanto, un nmero pequeo de primitivas construcciones y del conjunto de las reglas

    constante para combinarlas (esto es ortogonalidad) es mucho mejor que simplemente

    teniendo una gran cantidad de nmeros primitivos. Un programador puede disear una

    solucin para un problema complejo despus de aprender solamente un conjunto simple de

    construcciones primitivas.

    En la misma vena, demasiada ortogonalidad puede ser detrimento de la fcil escritura. Los

    errores en programas de la escritura pueden ir desapercibidos cuando casi cualquier

    combinacin de primitivos es legal. Esto puede conducir a las absurdidades en el cdigo

    que puede no ser descubierto por el compilador.

  • Soporte para la abstraccin. Abreviadamente, medios de la abstraccin, la capacidad de definir y despus de utilizar las estructuras complicadas de

    operaciones de manera que muchos de los detalles. La abstraccin es un

    concepto dominante en los lenguajes de programacin contemporneos. Esta es

    reflexin del rol central que las abstracciones juegan en la designacin de las

    metodologas de la programacin moderna. El grado de la abstraccin que

    permite un lenguaje de programacin y la naturaleza de sus expresiones es muy

    importante para su codificacin.

    Un ejemplo simple de un proceso de abstraccin es el uso de un subprograma en la

    implementacin de un algoritmo, que en ejecucin se requiera varias veces en un programa.

    Saliendo del subprograma, el cdigo tendra que ser replegado en todos los lugares donde

    sea necesario, que hara el programa mucho ms largo y ms aburrido para la escritura. Ms

    importante, si el subprograma no fue utilizado, el cdigo del subprograma podra ser

    eliminado del algoritmo y as evitar, el entorpecimiento del flujo del cdigo.

    Como ejemplo de la abstraccin de los datos, considere un rbol binario que salve datos del

    nmero entero en sus nodos. Un rbol binario sera puesto en ejecucin generalmente en

    FORTRAN 77 en tres matrices paralelas del nmero entero, donde dos de los nmeros

    enteros se utilizan como subndices para especificar nodos del descendiente. En PASCAL,

    estos rboles pueden ser implementados usando una abstraccin de un nodo del rbol en la

    forma de una unidad de registro simple con dos punteros y un nmero entero. Lo natural de

    la ltima representacin hace mucho ms fcil escribir un programa de PASCAL que

    utilice un rbol binario que para escribir uno en el FORTRAN. El dominio de la solucin

    del problema del lenguaje est ms cercano al dominio del problema. La ayuda total para

    la abstraccin es claramente un factor importante en la codificacin del lenguaje.

    Expresividad. La expresividad en un lenguaje puede referirse a varas caractersticas diferentes. En un lenguaje como APL, sus operaciones existentes

    cuentan con poderosos operadores que permiten un problema grande de

    computacin pueda realizarse con un pequeo programa. Generalmente los

    medios que un lenguaje tiene son relativamente cmodos antes que incmodas

    rutas de especificacin computacional.

    Por ejemplo, en C, la expresin Contador++ es

    ms cmoda y ms pequea que Contador =

    Contador + 1. Tambin el operador boleano AND

    THEN de Ada es un camino cmodo para

    especificar la valoracin de expresiones booleanas

    de corto circuito. La inclusin de la declaracin

    FOR en Pascal hace ms fcil de escribir ciclos

    que con el uso de WHILE. Todo esto ayuda a incrementar la facilidad de escritura en un

    lenguaje de programacin.

    Confiabilidad. Un programa es confiable si ejecuta sus especificaciones bajo todas las condiciones. Aunque una meta deseable en los lenguajes de programacin es la

    facilidad para permitir el diseo de programas confiables, pero no es completamente

  • claro que sta sea una caracterstica para la estimacin y comparacin entre los

    lenguajes de programacin.

    Legibilidad y Fcil Escritura. Ambos facilidad de escritura y la legibilidad implica confiabilidad un programa escrito en un lenguaje que no soporta formas

    naturales para expresar los algoritmos requeridos necesitara mtodos de uso

    menos posible corregir en todas las situaciones. El programa ms fcil para

    escribir, es el ms conveniente para corregir. Legibilidad da confiabilidad en

    ambas fases del cielo de vida de mantenimiento y escritura. Los programas que

    son difciles para leer tambin son difciles de escribir y modificar.

    Verificacin de Tipos. La verificacin de tipos es probar la compatibilidad de los tipos entre dos variables o una variable y una constante, es de algn modo la

    relacin de uno con otro. Dos de las formas ms comunes de tales impedimentos

    son los operadores de las operaciones aritmticas y el resultado de la operacin,

    teniendo en cuenta ambas partes (izquierda y derecha) del signo de asignacin.

    La verificacin de tipos es un factor importante en la confiabilidad del lenguaje.

    Esto se debe a que la verificacin de tipos en el tiempo de ejecucin es bastante

    cara, por lo que es ms deseable la verificacin de tipos en el momento de la

    compilacin. Adems que permite de una manera ms fcil la deteccin de

    errores, por lo que es menos costoso la reparacin de los mismos. En el diseo

    de los lenguajes contemporneos, como el ADA, se requiere la verificacin de

    tipos de casi todas la variable en tiempo de compilacin, salvo en el caso de que

    el usuario utilice estados explcitos entonces la verificacin de tipos se

    suspende. Esto elimina la posibilidad de errores en tiempo de ejecucin en los

    programas realizados en ADA.

    La manera de cmo fracasa la verificacin de tipos tanto en tiempo de compilacin como

    en el de ejecucin, es manejado por los innumerables errores de los programas que

    envuelven a los parmetros de los subprogramas en el lenguaje C. En este programa el tipo

    de parmetros reales en una llamada a funcin no se verificaba para determinar si

    correspondiente parmetro formal de la funcin era el mismo. Por ejemplo una variable de

    tipo int puede ser usada como parmetro real en una llamada a una funcin que espera un

    float en su parmetro formal, por lo que el compilador descubre el problema de la

    inconsistencia en el tiempo de ejecucin, por lo que da como resultados una serie de

    Problemas, recurso del cual es con frecuencia difcil de determinar (En respuesta a este

    problema, el sistema UNIIX incluye un programa de utilidad llamado LINT que checa programas en C para dichos problemas), Mtodos de parmetros paso y subprogramas son discutidos en el captulo 8.

    En General, el rango escrito de una variable de un arreglo es parte del tipo de chequeo.

    Por eso el chequeo del rango escrito es parte del tipo de chequeo, aunque debe ser

    realizado al momento de correrlo. Porque muchos tipos son checados en Pascal, los rangos

    del algoritmo tambin son checados. El chequeo es extremadamente importante para la

    confiabilidad del programa, debido aquel rango de salida de algoritmo con frecuencia causa

    errores que no aparecen hasta mucho despus de las violaciones actuales.

  • Manejo de Excepciones. La habilidad de un programa para detectar errores al momento del corrido, as como otras condiciones inusuales, para tomar medidas

    correctas y para continuar es una gran ayuda de confiabilidad. Esta facilidad es

    llamada Manejo de excepcin; El lenguaje Ada incluye capacidades extensas para manejo de excepcin, pero las facilidades son prcticamente no existen en

    muchos lenguajes usados como Pascal, C, y Fortran.

    Restriccin de Alias. De manera holgada el alias quiere decir que se tienen dos

    mtodos de referencia distintos, o dos nombres, para la misma celda de memoria.

    Ahora es muy aceptado que el alias represente un peligro en un lenguaje de

    programacin, lo anterior, porque a la mayora de los lenguajes de programacin

    se les permite hacer algunos tipos de alias, por ejemplo: variables equivalentes

    en Fortran y punteros en Pascal. En ambos casos, las dos variables de diferentes

    subprogramas pueden significar la misma celda de memoria; algunos tipos de

    restricciones de alias pueden ser prevenidos por la designa an del lenguaje.

    En algunos lenguajes, el alias es usado para prevenir deficiencias en la facilidad

    de abstraccin de datos del lenguaje. Otros lenguajes restringen extremadamente

    el alias para incrementar su confiabilidad.

    Costo. El costo total de los lenguajes de programacin es una funcin de muchas de estas caractersticas. Los primeros

    costos de entrenamiento y el costo de la escritura del

    programa en un lenguaje puede reducirse significativamente

    en un buen ambiente de programacin.

    Entrenamiento del programador. Esta es una funcin de la simplicidad y ortogonalidad del lenguaje, esto aproxima en propsito a una aplicacin en

    particular, y a la experiencia de los programadores. Aunque el ms poderoso de

    los lenguajes no necesita ser duro para leer, y ellos frecuentemente lo son.

    Escritura del programa. Esta es una funcin de la fcil escritura de los lenguajes. El esfuerzo original para disear e implementar un lenguaje de alto

    nivel es manejado por el deseo para bajar el costo de creacin de software.

    Compilacin. El tercero es el costo de compilacin de los programas en el lenguaje. Un impedimento principal para el uso adelantado de Ada fue la

    prohibicin de los altos costos de ejecucin en la tercera generacin de los

    compiladores Ada. Este problema es conveniente en compiladores menos

    seguros como el Ada llega a ser el ms apropiada.

    Ejecucin. El cuarto es el costo de ejecucin de programas escritos en un lenguaje es influenciado grandemente por el diseo del lenguaje. Un lenguaje,

    tal como el PL1, que requiere mucho tiempo de ejecucin para la verificacin de

    los tipos impide que el cdigo se ejecute rpidamente, a pesar de la calidad del

    compilador.

  • Mantenimiento. Finalmente tenemos al costo de mantenimiento de programas, con la cual se incluyen las correcciones y modificaciones para aadir nuevas

    caractersticas. El costo de mantenimiento depende de un gran nmero de

    caractersticas del lenguaje especialmente la legibilidad. Porque el

    mantenimiento es realizado frecuentemente por otras personas diferentes al

    autor original del software, la pobre legibilidad puede hacer lar tarea

    extremadamente desafiante. La importancia del mantenimiento del software no

    puede ser desafiante. Esto se ha estimado para un software de aplicacin de

    aplicacin con una vida relativamente larga, los costos de mantenimiento

    pueden subir de dos a tres cuartos de tiempo tanto como el desarrollo.

    Todas estas contribuciones para los costos de un lenguaje nos indican que hay dos muy

    importantes: el de desarrollo y el de mantenimiento de los programas. Porque son las

    funciones de legibilidad y fcil escritura las que intervienen en ellos, y stos son los dos

    criterios ms importantes en la evaluacin de los lenguajes de programacin.

    Una nota final para el criterio. Los criterios, especialmente legibilidad y escriturabilidad, no

    se pueden precisar en su definicin ni limitarse de una manera exacta. Los conceptos son

    tiles sin embargo nos proporcionan una perspicacia en el diseo y evaluacin de los

    lenguajes de programacin. Existen por supuesto otros criterios para la evaluacin de los

    lenguajes de programacin, por ejemplo la portabilidad (la facilidad con el que el programa

    puede ser movido de una mquina a otra), su generalidad (la aplicacin del lenguaje a un

    extenso ramo de aplicaciones) y sobre todo Buenas Definiciones (la integridad y precisin

    del lenguaje en la definicin de la documentacin). Sin embargo las que hemos explicado

    consideramos que son las ms importantes.