You are on page 1of 16

UNIDAD 2 INTRODUCCION AL DISEO DE LENGUAJES DE PROGRAMACION. 2.1. VISION DEL PROBLEMA. Visin del problema.

Proporciona modelos de diseo que permitan caracterizar el desarrollo de aplicaciones utilizando un lenguaje de programacin se necesita un lenguaje de modelado que sea capaz de capturar la semntica del modelo al que se ajusta el lenguaje de programacin. El modelado de diseo proporcionado por el lenguaje de modelado debe ser capaz de capturar la semntica del programa que implementa la especificacin de requisitos. En los ltimos aos, una de las artes ms predominantes en el mundo de la programacin ha sido el diseo de lenguaje de programacin. El numero de lenguajes de programacin propuesta y diseados son extremadamente grandes. Aun el numero de de lenguajes para el que un compilador ha aplicado es inmenso. Sammet (1976) indica 167 en su lista 19741975. Aun que los primeros lenguajes de programacin primitivos nacieran cerca 25 aos atrs, hasta que reciente mente hubiesen un pequeo proceso en el diseo de nuevos lenguajes de programacin. Los primeros lenguajes fueron los pioneros, explorando un nuevo campo. No es de sorprenderse que carecieran de un buen diseo. No se debera criticar a los diseadores o FORTRAN; puesto que suficientes problemas tenan con disear y aplicar uno de los primeros lenguajes de alto nivel Si hay cualquier crtica de ser concedida con respecto a FORTRAN, Nadie razonablemente los podra esperar que a la crtica sean concedidos con respecto a 25 aos ms tarde, sus objetivos deben ser los usuarios que se han adherido tan tenazmente a ciertos diseadores cados en desuso del lenguaje que tienen tan perpetuaron con entusiasmo los desperfectos de FORTRAN. Se debe notar que nuestras referencias a FORTRAN en el prrafo anterior y a travs de este captulo se refiere a FORTRAN IV antes que FORTRAN 77. Despus que el desarrollo inicial del lenguaje de alto nivel y la implementacin de los primeros pocos compiladores, all result un perodo bastante largo en el que las tentativas conscientes se hicieron para disear nuevos lenguajes sin los desperfectos de los viejos. La mayor parte de estas

tentativas eran los fracasos, no tanto de una falta de ideas en cmo disear mejores lenguajes como de un supervit de ideas. Una buena ampliacin de este proceso es la nocin que si podra significar algo, debera (Radin y Rogoway, 1965), que llev a PL/YO. Ms recientemente, la experiencia de errores pasados haba llevado al conocimiento verdadero acerca de cmo construir mejores lenguajes de programacin. Las ideas y los principios bsicos se establecen suficientemente bien para indicar las pautas explcitas para el diseo del lenguaje. Esas reas que aun no han sido comprendidas se encuentran bajo investigacin. Esta discusin procurar por consiguiente acentuar un sistema. El enfoque ordenado al diseo del lenguaje, se debe recordar, sin embargo, hacer la justificacin apropiada a muchos temas que a menudo son necesarios para discutir detalles as como generalidades. El campo del diseo del lenguaje no es de ninguna manera completamente desarrollada, y muchas reas no han sido bien unificadas. Tambin, muchas reas interrelacionan y son difcil de discutirlos separadamente. Por la necesidad, esta discusin sin embargo, restringe su alcance. Las descripciones elaboradas de las caractersticas posibles del lenguaje se limitarn se asume que el diseador potencial del lenguaje tiene las bases suficientes en lenguajes de programacin para estar enterado de las ideas principales. Las caractersticas especficas se discutirn para especificar razones , pero ninguna tentativa se har para dar un catlogo general. Hay ya varios catlogos , como: (Elson, 1973; Pratt, 1975; Nlcholls, 1975). Un buen lenguaje no es apenas una coleccin casual de caractersticas de un total unificado. Se asumir que los lenguajes, bajo la discusin son de alto nivel los idiomas. La discusin ser restringida tambin en gran parte a idiomas procesales para escribir software (software se utiliza aqu en sus la mayora de los sentidos generales para significar los programas para ser utilizados por otra persona). Mucho de lo que se dice ser aplicable a otras clases de lenguajes. El disear completamente un lenguaje se debe tomar con cuidado para no hacer una extensin tan grande y compleja de este nuevo lenguaje. En caso contrario, la necesidad de retener algunas interfaces con un viejo lenguaje probablemente ceder gravemente el diseo de la extensin. Si

uno extiende un lenguaje existente, es necesario escoger cuidadosamente un lenguaje base para que el trabajo de la extensin se aminore y la extensin elegantemente quede dentro del lenguaje. El objetivo debe ser el de producir un lenguaje el cual sea ms grande y perfectamente bien construido. Sera posible el modificar un lenguaje existente, utilizando posiblemente un macroprocessor o algo similar? Aun que con facilidad un macro contrario de menor parmetro (sustituyendo simplemente un texto especificado para cada ocurrencia de una identificacin definida) podra producir modificaciones mayores en la sintaxis de un lenguaje, si se utilizara diestramente (por ejemplo, RATFOR definido por Kernighan y Plauger, 1974) sin embargo, el poder de este enfoque para una tarea ms compleja, tal como la introduccin de nuevas estructuras de datos, se limitan. Algunas consideraciones serias como tcnicas o alternativas para el diseo de un nuevo lenguaje, consisten en simplemente aminorar el trabajo y el tiempo implicado. Quizs no haya ningn otro problema relacionado con la computadora que observe tan tentadoramente fcil y sea sumamente terrible un buen trabajo de diseo de lenguaje. Prescinda de la nocin que es posible agitar un diseo el fin de semana y el comenzar aplicando un traductor para el lunes. Un mes luego habr de asentarse todava los puntos secundarios del diseo del idioma y la implementacin no habr obtenido casi en ningn lugar. Asumiendo la decisin que se ha hecho de que ninguno de los enfoques anteriores sera suficiente, el prximo punto interesante es: Cul es el propsito de un lenguaje? Un lenguaje es diseado a menudo para su aplicacin en un rea especfica. La mayor atencin es dada a restringir el rea de la aplicacin del lenguaje, y el mejor lenguaje ser el que resuelva los problemas en esa rea. De hecho no es conveniente el procurar disear un lenguaje de uso general porque abarcar la solucin de todos los problemas puede provocar que el proyecto falle. Todo intento ha sido desilusionando (notablemente PL/YO y ALGOL 68). Actualmente, toda evidencia indica que nadie sabe cmo hacer un trabajo apropiado de disear un idioma que ser bueno para todo.

Finalmente, la relacin de un nuevo lenguaje hacia lenguajes existentes se debe considerar. Weinberg (1971) discute el fenmeno psicolgico de la inhibicin, que ocurre cuando un viejo lenguaje y un lenguaje nuevo no son semejantes pero idnticos. El usuario es susceptible a confundirse gravemente con la incertidumbre acerca de cunto del viejo lenguaje conservara en el nuevo. Por ejemplo. Los programadores de FORTRAN que aprende que PL/YO formatear E/S tiene gran problema con el formatos DE TIPO F, que no son semejantes pero idntico a la construccin del FORTRAN. En resumen es preferible hacer el nuevo lenguaje claramente diferente que hacerlo semejante a algn lenguaje existente. Si los nuevos y los viejos lenguajes de programacin existentes pueden ser la fuente para mejores ideas, para la programacin de diseadores de lenguaje considerar que precisamente solo sea eso la fuente. Los diseadores deben ser muy cuidadosos inclusive acerca de ideas en su propio producto, considerando que los diseadores del pasado han hecho grandes errores. Algunos principios despreciables se pueden pronunciar para distinguir buenas ideas dignas de la perpetuacin y de malas ideas dignas slo de la extincin. Quizs el principal principio deber preguntar por qu se hizo esa manera? Una vez que usted obtiene una respuesta a esta pregunta, se pregunta Es esa razn (todava) vlida? a menudo la respuesta a esta pregunta ser no. Para el ejemplo FORTRAN las extraas restricciones en subndices de serie dirigiendo las caractersticas de su hardware y tuvo miedo que esto no se podra hacer si ninguna expresin permitindolo como un subndice. Aunque esto se pueda considerar quizs razonable (u optar menos entendible) en la circunstancia que lo ciertamente no es hoy defendible, acerca de la reduccin grave en valor prctico resultante. Aunque vale la pena para recordar el que incluso si el juicio general en un lenguaje sea (un diseo malo esto no significa que identificacin no oculta las caractersticas que valen la pena en algn lugar mas profundamente. Por ejemplo, aunque APL se pueda criticar en muchas veces, bien puede valer la pena el copiar sus poderosos operadores.

El hecho que una caracterstica est comnmente disponible no implica que esta haya sido una buena idea. Muchos idiomas han seguido ALGOL 60s principal en permitir el tamao de series para ser decidido en corre tiempo, una caracterstica que introduce los problemas considerables de la implementacin e interviene con verificar de error de compila tiempo. Esta caracterstica puede ser del valor slo limitado en ciertas reas de aplicaciones. El fenmeno de declaraciones predefinidas en varios lenguajes, heredado de FORTRAN, es un ejemplo de que esta caracterstica actualmente prevalezca. Esta caracterstica ilustra la grasa popular de caractersticas totalmente perjudicial que actualmente se programa y es que es tomada como una programacin de calidad. Con esto comprobamos, el hecho de que una de las caractersticas que estn comnmente disponibles no puede implicar que sea una buena idea. Muchos lenguajes han seguido ALGOL 60s principalmente el permitir el tamao de series para ser decididazas con mayor rapidez, caracterstica que presenta considerablemente la implementacin de problemas e interfiere con el tiempo de compilacin del cheque de errores. Esta caracterstica puede ser del valor slo limitado en ciertas reas de aplicacin. El fenmeno de preferidas declaraciones, heredado de FORTRAN, es otro ejemplo de un mal diseo de programacin. Esta caracterstica en particular clusula; entonces probablemente sera irrazonable requerir ELSE en todo IF. La nocin relativamente reciente de experimentacin ofrece bsicamente los mismos tipos de conclusiones, indudablemente la investigacin seguir en las reas de medir el empleo de los lenguajes de programacin y experimentar en el diseo de los lenguajes de programacin.

2.2. CONSIDERACIONES PRELIMINARES. Algunas consideraciones que debemos tomar en cuenta son: Palabras reservadas del lenguaje Operadores Tipos de datos.

Debemos considerar el objetivo del lenguaje, si es un lenguaje de enseanza, si es un lenguaje para profesionales, si el cdigo desarrollado va a ser mejor. Eficiencia de los lenguajes de programacin: Compilacin rpida del cdigo fuente y ejecucin rpida del cdigo objeto. Independencia de la Maquina.

Los factores fundamentales en la calidad del software son: Eficiencia, portabilidad, verificabilidad, integridad, facilidad de uso, exactitud, robustez, extensibilidad, compatibilidad y la reutilizacin. En trminos generales, estos factores pueden describirse de la siguiente forma: Eficiencia: capacidad para el aprovechamiento ptimo de los recursos que emplea. Los lenguajes OOP arrastraron en un principio la reputacin de ser ineficaces. Esto se deba en gran medida a que los primeros lenguajes (como Smalltalk) eran interpretados y no compilados. La existencia de compiladores permite a los desarrolladores ganar rapidez. Actualmente, usando un buen lenguaje orientado a objetos como C++, Java, etc. Junto con las libreras apropiadas para la realizacin de un programa, puede que se ejecute ms rpidamente que el mismo programa compilado con un lenguaje procedural. Portabilidad: facilidad para ser ejecutados en distintos entornos lgicos o fsicos. Verificabilidad: capacidad para soportar procedimientos de pruebas, test o ensayos. Integridad: nivel de proteccin frente a procesos que traten de alterarlo. Facilidad de uso: comodidad y claridad en la interaccin con el usuario. Exactitud: nivel de precisin que alcanzan los resultados obtenidos.

Robustez: capacidad para funcionar correctamente en situaciones extremas. Extensibilidad: capacidad para adaptar su funcionamiento al incremento en sus objetivos. Compatibilidad: facilidad de poder ser aplicados en conjuncin con otros programas. Reutilizacin: posibilidad de utilizarlos (total o parcialmente) en nuevos contextos. Independencia de la Maquina: Puesto que diferentes usuarios utilizan diferentes ordenadores, el sistema debe ser accesible por todos ellos sin merma de prestaciones, especialmente por las plataformas mayoritarias: Windows, MacOS y Unix. Los programas Windows son independientes de la mquina en la que se ejecutan (o al menos deberan serlo), el acceso a los dispositivos fsicos se hace a travs de interfaces, y nunca se accede directamente a ellos. Esta es una de las principales ventajas para el programador, ya que no hay que preocuparse por el modelo de tarjeta grfica o de impresora, la aplicacin funcionar con todas, y ser el sistema operativo el que se encargue de que as sea. A la hora de explotar un gran nmero de bases de datos de diferentes editores nos encontramos ante un doble problema. Por una parte, la citada falta de homogeneidad de los sistemas informticos de los usuarios; por otra parte, cada una de las bases de datos suele tener su propio programa de consulta, de modo que nos encontramos multitud de programas diferentes que debern conocer los usuarios. Dichos programas estn en su mayor parte diseados para ordenadores tipo PC con sistema operativo Windows. Teniendo en cuenta todo lo anterior, podemos ver que el sistema ha de permitir acceder a multitud de mquinas diferentes a una serie de programas en muchos casos incompatibles con ellas. Los servidores de aplicaciones son la base de programas informticos diseados para ser ejecutados desde ordenadores personales a travs de Navegadores de Internet convencionales.

Con ello se consigue independencia de la mquina (los programas funcionan en cualquier ordenador), independencia de ubicacin (es posible utilizar los programas desde cualquier lugar) y una administracin ligera y centralizada (mantenimiento cero de los programas de los ordenadores de los usuarios al residir stos en el servidor). Simplicidad: Un lenguaje debe ser tan simple como sea posible. Debe haber un nmero mnimo de conceptos con reglas simples para su combinacin. Un lenguaje de programacin debe esforzarse en la simplicidad sintctica y semntica. Simplicidad en la semntica implica que el lenguaje contiene un mnimo nmero de conceptos y estructuras. Estos conceptos deben ser naturales, rpidamente aprendidos, y fcilmente entendidos. With little danger of misinterpretation. La simplicidad requiere que un idioma incorpore tan pocos conceptos como sean posibles. El lenguaje debe ser una ayuda para el programador antes de que alcance el estado real de codificacin en programacin. Debe darle un conjunto de conceptos claro, simple y unificado para que pueda usarlos como primarios en el desarrollo de lenguajes. Para ello es deseable tener un nmero mnimo de conceptos diferentes, con las reglas de su combinacin lo ms simples y regulares posibles. Esta claridad semntica y de conceptos es el factor determinante del valor de un lenguaje. La simplicidad sintctica requiere que la sintaxis represente cada concepto en una y una nica forma y que sta interpretacin es tan legible como sea posible. Esto no necesariamente implica que la sintaxis es tan concisa como sea posible, desde que la concisin es a menudo contraproducente a la legibilidad. Excluye mltiples representaciones de la misma semntica conceptual y representaciones sintcticas que son fcilmente confusas. Uniformidad: Ya que la representacin de los objetos lleva implica tanto el anlisis como el diseo y la codificacin de los mismos. La estructura lgica de la BD definida mediante el LDD debe ser uniforme y acorde al modelo de datos del SGBD, para facilitar la manipulacin de esta estructura. En el caso especfico del LDD, el lenguaje del SGBD debe ser capaz de definir la estructura lgica de la BD, sin entrar en detalles de implementacin ni mecanismos en que se accede a los datos de la BD.

La forma idnea de realizar lo anterior es mediante un lenguaje declarativo, el cual permite declarar la estructura del modelo de acuerdo al modelo de datos que utiliza el SGBD. Para el caso del LMD, el lenguaje del SGBD debe incluir formas de especificar qu se desea hacer con los datos (insertar, recuperar, modificar o borrar datos), sin entrar en detalles acerca de cmo se realizan estas operaciones. Igual que en el caso anterior, la mejor manera de realizar esto es mediante un lenguaje declarativo que permita especificar la estructura de la operacin a realizar, de acuerdo siempre con el modelo de datos utilizado por el SGBD. Generalizacin y especializacin: La generalizacin dice que algo similar tambin es correcto, pero es difcil de implementar. Hay que especializar para facilitar la implementacin sin perder la utilidad del lenguaje. Resumen. Para el diseo de lenguajes de Programacin se debe considerar varios aspectos, entre ellos las tareas que se desean realizar y los datos a manejar. Generalmente diseamos un lenguaje porque necesitamos comunicarnos con algo de manera fcil y rpida, por ejemplo un archivo, un hardware, una base de datos; dependiendo de la tarea que se quiera realizar entonces diseamos. Una forma de cmo hacerla y cmo podemos relacionarlo con otras tareas para permitir que esa relacin pueda ser automatizada. Adems de las tareas que se van a realizar tambin se debe pensar en los tipos de datos que se van a manejar, por ejemplo nmeros, cadenas, ya que si se van a realizar operaciones, hay que pensar en que espacio de memoria se van a almacenar. Otras cosas a considerar son como se va a manejar la memoria, y a qu tipo de computadoras estarn enfocados.

2.3. OBJETIVOS Y FILOSOFIAS DEL DISEO DE LOS LENGUAJES DE PROGRAMACION. Objetivos:

El principal objetivo del lenguaje es, por supuesto, servir de apoyo didctico en una materia de lenguajes de programacin, intrpretes y compiladores. Derivado de la persecucin de este objetivo surgen varias metas especficas y objetivos particulares: La apreciacin del desarrollo e implementacin de un lenguaje de programacin. La comprensin del procedimiento seguido en la formacin de un conjunto de reglas gramaticales que permiten identificar y nombrar sin ambigedad acciones y secuencias ordenadas de acciones sobre el contexto especfico de un problema en particular. Proporcionar un medio de familiarizacin con la realizacin de operaciones aritmticas usando una pila y su posterior extensin para la manipulacin de otros datos. La clara especificacin y adecuada documentacin del proceso de creacin o extensin de un lenguaje y sus resultados. En el diseo de Stop se ha tratado de seguir muchos de los principios usados en los modernos lenguajes de programacin hasta el punto donde su implementacin no sea demasiado complicada para el desarrollo de un proyecto semestral. Principalmente se ha buscado que sea regular, modular y estructurado. Filosofa del Diseo del Lenguaje: El lenguaje de programacin est pensado para la programacin evolutiva. Esta consiste en un mtodo de programacin basado en un ciclo de prueba y error donde se refina un programa hasta conseguir que haga lo que queremos. Esta forma de programar se aplica a problemas donde se desconoce que algoritmo nos llevar a la solucin. Esta situacin se da en investigacin y en la creacin de prototipos donde hay que realizar muchas pruebas hasta dar con la solucin ms apropiada. Para estos casos, es ms apropiado el uso de un intrprete que un compilador, ya que de esta forma se reduce el tiempo invertido en cada prueba. Para que un lenguaje sea efectivo en programacin evolutiva tiene que facilitar: la interaccin, la modificacin del programa y aportar

instrucciones de alto nivel cercanas al problema. Estos tres puntos se consiguen cuando el lenguaje tiene las siguientes caractersticas: Estado de Interaccin. Entre prueba y prueba es interesante guardar el estado de ejecucin. De esta forma se evita repetir la ejecucin de las instrucciones necesarias para llegar al estado de ejecucin donde queremos realizar pruebas. Los programas implementa esta caracterstica mediante un mbito global dinmico que guarda funciones y variables mientras se utiliza el intrprete. Sintaxis Cercana al Problema. Es ms efectivo escribir en una notacin cercana al problema que adaptarse a la sintaxis de un lenguaje de programacin. De esta forma se evita el paso de traduccin que tiene que realizar el programador antes de escribir una nueva sentencia del programa. Diseo del Lenguaje: Hasta el momento, lo que se ha visto ha sido una serie de operaciones aritmticas y de manipulacin de la pila. Todas estn indicadas de manera implcita a travs de una serie de trminos y convenciones que es necesario definir de forma ms precisa antes de continuar con otra cosa. Existen dos formas en las que puede representarse una pila y su funcionamiento; de sta depender la terminologa que se emplee. Nosotros hemos venido usando una representacin que conceptualiza a la pila como un arreglo que crece o es utilizado desde su base (el primer nivel) hacia arriba. Los datos entran y se toman de la base y desplazan o empujan a los elementos, que ya pudieran estar introducidos en la pila, hacia arriba. Identificaremos a los diversos elementos involucrados acorde al siguiente diagrama: Ingreso: Llamaremos nivel a cada una de las localidades con que cuente la pila y los enumeraremos a partir de 1. La base es el primer nivel. El tope de la pila lo identificaremos como el nivel en el que se encuentre el elemento con ingreso ms antiguo. Representaremos con una elipsis () el resto de las localidades o elementos en la pila. Por ltimo, mientras que nos hemos limitado a usar nmeros en la representacin de elementos que pueden ser introducidos en la pila, no estamos restringidos a esto. Dependiendo de su implementacin una pila puede albergar ms que nmeros. De forma genrica nos referiremos a estos elementos como

objetos. Los diagramas que se han usado para ilustrar el contenido de la pila antes y despus de la aplicacin de una instruccin (que aparece como una operacin, funcin, operador o nombre en el cdigo del programa) sern identificados como diagramas de pila. En estos diagramas la elipsis se incluir slo cuando sea necesario recalcar la existencia del resto de la pila o su contenido; mientras no se indique lo contrario, siempre debe considerarse a la pila de Stop como infinita y factible de tener un contenido. Adicionalmente, en la presente descripcin: Las palabras clave de Stop se escriben en maysculas, aunque el lenguaje no es sensible a altas o bajas (lo que en otros ambientes es lo que se denomina case insensitive). Palabras clave de Stop se escriben usando un Font no proporcional. Elementos a substituir por otro valor se ilustran en itlicas. Conceptos y acciones a resaltar se subrayan. En las descripciones sintcticas, elementos repetitivos se denotan por el seguimiento de una elipsis. Salidas en pantalla se muestran en negritas. Comunicacin Humana: Las teoras de la comunicacin representan un punto de partida indispensable no slo para el estudio y la investigacin de la comunicacin, sino para el quehacer profesional prctico. El curso discute las aportaciones conceptuales de las perspectivas tericas ms recientes para el anlisis de la comunicacin masiva contempornea. Comunicacin interpersonal e intercultural, as como las habilidades interactivas necesarias para gerentes. Anlisis de las capacidades de transmisin de informacin de fibras pticas, tomando en cuenta los sistemas transmisores, los sistemas receptores y los requerimientos de acoplamiento ptico. Comportamiento de ondas electromagnticas en el interior de las fibras pticas. Receptores ptimos, transmisin coherente, amplificacin ptica, multicanalizacin por divisin de longitud de onda, redes pticas, SONET, ATM. La computadora, a diferencia de otras herramientas que en general apoyan el esfuerzo fsico de los humanos, fue inventada para facilitar el

trabajo intelectual. Si el hombre tiene algn problema, por ejemplo sumar dos y dos, el diseador define el algoritmo que resuelve el problema, el programador lo codifica en un lenguaje de programacin, el cual la computadora es capaz de entender, luego la computadora ejecuta el algoritmo expresado como programa en el lenguaje de programacin en cuestin, y listo. La mquina le entrega al hombre la respuesta 4, sin que ste tuviera que esforzar sus neuronas. Se busca una comunicacin eficiente entre el programador y el ordenador. Un buen nivel de comunicacin se da cuando los programas son lebles. No ha de ser necesaria una documentacin externa al programa (minimizar). Es ms importante que un programa sea leble que escribible. Un programa se escribe una vez, pero se lee muchas durante su depuracin, documentacin y mantenimiento. Tendencia actual a separar la interfaz de la implementacin de un mdulo. La sintaxis ha de reflejar la semntica. Reducir las manipulaciones implcitas. Coerciones (coerciones de PL/I o C). ON de BASIC para eventos o excepciones. Constructores y destructores de C++ (necesarios, pero complican el seguimiento del flujo de ejecucin). El lenguaje ha de representar los patrones de pensamiento humanos. No hay que crear una sintaxis pensada exclusivamente para un modelo de cmputo terico (l-calculus). Un conjunto de instrucciones de la mquina. facilitar la compilacin (forth). El programador no es un ordenador. Que el compilador entienda una estructura es posible que el programador no. Evitar incluso la posibilidad de escribirlas. Reducir el conocimiento contextual.

El programador no funciona con una pila como el programa compilado. Prevencin y Deteccin de Errores: Tener una serie de defensas tal que si un error no es detectado por uno, este probablemente sea detectado por otro. Los errores deben ser detectados por el compilador, si un mecanismo no es capaz de detectar un error es necesario implementar otro que lo detecte, pero nunca ignorarlo. A continuacin se presentan prevencin y tolerancia de errores y fallos Prevencin de errores: El programador comete errores. Hay que prevenir los errores. El programador es su fuente. El programador no sabe lo que hace y el compilador ha de limitar sus acciones (EUCLID, PASCAL). Hacer imposible cierto tipo de errores.

Ejecutar datos control de flujo limitado Errores en el uso de datos Tipado fuerte Apuntadores errneos Gestin de memoria implcita (LISP, PROLOG, ML, etc). Hay que facilitar su deteccin, identificacin y correccin. Tener que declarar antes de utilizar. Evitar coerciones inductoras de errores. float a int por su prdida de precisin.

Comprobaciones en tiempo de ejecucin. ndice de array fuera de lmites. Control sobre los apuntadores a NULL. Prevencin y tolerancia de fallos: Hay dos formas de aumentar la fiabilidad de un sistema: Prevencin de fallos: Se trata de evitar que se introduzcan fallos en el sistema antes de que entre en funcionamiento. La prevencin de fallos se realiza en dos etapas:

Evitacin de fallos: Se trata de impedir que se introduzcan fallos durante la construccin del sistema. Eliminacin de fallos: Consiste en encontrar y eliminar los fallos que se producen en el sistema una vez construido Tolerancia de fallos: Se trata de conseguir que el sistema contine funcionando aunque produzcan fallos. En ambos casos el objetivo es desarrollar sistemas con modos de fallo bien definidos. Deteccin de errores: Por el entorno de ejecucin hardware (p.ej.. instruccin ilegal).

Ncleo o sistema operativo (p.ej. puntero nulo). Por el software de aplicacin. Duplicacin (redundancia con dos versiones). Comprobaciones de tiempo. Inversin de funciones. Cdigos detectores de error. Validacin de estado. Validacin estructural 2.4. DISEO DETALLADO. El diseo detallado tiene que ver con la especificacin de detalles algortmicos, representaciones concretas de datos, interconexiones entre funciones y estructuras de datos, y empaque del producto de programacin. El diseo detallado est fuertemente influenciado por el lenguaje de instrumentacin, pero no es lo mismo que la instrumentacin; el diseo detallado tiene que ver ms con aspectos semnticos y menos con detalles sintcticos que es la instrumentacin. El punto de inicio para el diseo detallado es una estructura arquitectnica a la que se le van a proporcionar los detalles algortmicos y las representaciones concretas de datos. Mientras que hay una fuerte tentacin para proceder directamente de la estructura arquitectnica a la

instrumentacin, hay varias ventajas que pueden lograrse en el nivel intermedio de detalle proporcionado por el diseo detallado. La instrumentacin comunica los aspectos de la sintaxis del lenguaje de programacin, el estilo de codificacin la documentacin interna, y la insercin de pruebas y depuraciones al cdigo. Las dificultades que se encuentran durante la instrumentacin casi siempre se deben al hecho de que el instrumentador simultneamente est realizando anlisis, diseo y actividades de codificacin mientras intenta expresar el resultado final en un lenguaje de instrumentacin. El diseo detallado permite el diseo de algoritmos y representaciones de datos en un nivel ms alto de abstraccin y notacin que el que proporciona el lenguaje de instrumentacin. El diseo detallado separa la actividad de diseo a bajo nivel de la instrumentacin, igual que las actividades de anlisis y diseo aslan las consideraciones de lo que se desea de la estructura que lograr los resultados deseados. Una especificacin adecuada de diseo detallado minimiza el nmero de sorpresas durante la instrumentacin del producto.

2.5. CASO DE ESTUDIO. (Lo que me entregaron fue un anteproyecto de lo que iba hacer el compilador que funcionalidad y usabilidad tendr. Pero faltara complementar con lo siguiente. Atte. Frank) Explicar el lenguaje que se va a desarrollar en el curso: Por qu se va a desarrollar (problemtica)? Vocabulario del lenguaje (lxico palabras clases que hacen). Reglas de estructura (gramtica, sintaxis). Semntica. Si existe cdigo intermedio. Si se mejora ese cdigo. El cdigo objeto final.