Sie sind auf Seite 1von 13

Aspectos de diseo de los lenguajes de programacin

(Tema DOS)

por Estrada Espinosa David Morales Solares Carlos Ortiz Ruiz Otoniel Manuel
Introduccin
Los primeros lenguajes al ejecutarse en equipos costosos se proyectaban para producir un cdigo de mquina eficiente, aun cuando la escritura de los programas era difcil. Por ejemplo, Fortran y LISP. n la actualidad los equipos son de bajo costo, por lo que, permiten el desarrollo de programas que son fciles de escribir correctamente aunque se ejecuten con lentitud algo mayor. Por ejemplo, !"", #a$a, %da. Sin embargo, &cmo se dise'an esta clase de lenguajes( n el desarrollo de un lenguaje de programacin, )ay tres influencias principales que afectan su dise'o* +. La computadora subyacente en donde se $an a ejecutar los programas escritos en el lenguaje. ,. l modelo de ejecucin, o computadora $irtual, que apoya a ese lenguaje en el equipo real. -. l modelo de computacin que el lenguaje implementa. n este trabajo se anali.an de forma bre$e estos temas.

Estructura y Operacin de una computadora

/na computadora es un conjunto integrado de algoritmos y estructuras de datos capa. de almacenar y ejecutar programas. Se puede construir una computadora como un dispositi$o fsico real utili.ando circuitos integrados, tarjetas, etc. n ese caso se le conoce como computadora real o computadora de hardware. Sin embargo, tambi0n se puede construir a tra$0s de soft1are por medio de programas que se ejecuten en otra computadora, y en este caso se trata de una computadora simulada por software /n lenguaje de programacin se implementa construyendo un traductor, el cual traduce los programas que estn en el lenguaje a programas en lenguaje de mquina que pueden ser ejecutados directamente por alguna computadora.

Componentes de una computadora


/na computadora consiste en seis componentes fundamentales que corresponden estrec)amente a los aspectos principales de un lenguaje de programacin* 2atos, 3peraciones, !ontrol de secuencia, %cceso a datos, 4estin de %lmacenamiento, ntorno de operacin. 2atos lementos de informacin integrados, que se pueden manipular directamente con operaciones primiti$as de )ard1are. Por ejemplo los enteros, reales o cadenas de caracteres de longitud fija. ntre los principales medios de almacenamiento de datos se encuentra* La memoria principal organi.ada por lo general como una secuencia lineal de bits subdi$idida en palabras de longitud fija. Los registros internos de alta $elocidad, compuestos de secuencias de bits con subcampos especiales que son directamente accesibles. La memoria cac)0 y los arc)i$os e5ternos. 3peraciones /na computadora debe contener un conjunto de operaciones primiti$as interconstruidas, ordinariamente apareadas una a una con los cdigos de operacin que pueden aparecer en las instrucciones de lenguaje mquina. /n conjunto tpico incluira primiti$as para aritm0tica sobre cada tipo num0rico de datos 6suma, resta, etc.7, primiti$as para probar propiedades de un conjunto de datos 6 cero, positi$o, negati$o7, primiti$as para controlar dispositi$os. !ontrol de Secuencia /na computadora debe aportar mecanismos para controlar el orden en el que se $an a ejecutar las operaciones primiti$as. La instruccin siguiente que se debe ejecutar en cualquier punto durante la ejecucin de un programa en lenguaje mquina est determinada por lo com8n por el contenido de un registro de direcciones de programa, el cual contiene la direccin de memoria de la pr5ima instruccin. %cceso a datos /na computadora debe incorporar alg8n medio para designar operandos y un mecanismo para recuperar operandos de un designador de operandos dado. 2e manera similar, el resultado de una

operacin primiti$a se debe guardar en alguna localidad designada. Llamamos a estos recursos el control de acceso a datos de la computadora. l esquema con$encional consiste en asociar direcciones de enteros con localidades de memoria y suministrar operaciones para recuperar el contenido de una localidad dada. 4estin de almacenamiento Para acelerar el desequilibrio entre acceso a datos e5ternos y el procesador central, el sistema operati$o suele utili.ar multiprogramacin. 9ientras aguarda muc)os milisegundos a que se lean los datos , la computadora ejecuta otro programa. % fin de que muc)os programas puedan residir conjuntamente en la memoria al mismo tiempo, es com8n incluir recursos para paginacin o reubicacin dinmica de programas directamente en el )ard1are. 5isten algoritmos de paginacin que intentan pre$er cuales direcciones de programas y datos tienen ms probabilidades de ser utili.ados en futuro cercano, con el propsito de que el )ard1are pueda ponerlas a disposicin del procesador central. Para acelerar el desequilibrio entre la memoria principal y el procesador central, se emplea una memoria cac)0. /na memoria cac)0 es un peque'o almac0n de datos de alta $elocidad que se encuentra entre la memoria principal y el procesador central, contiene los datos e instrucciones que el procesador central )a usado ms recientemente y, por tanto , incluye los datos e instrucciones que es ms probable que se $an a necesitar en el futuro cercano. ntorno de operacin l entorno de operacin de una computadora consiste ordinariamente en un conjunto de dispositi$os perif0ricos de almacenamiento y entrada : salida. stos representan el mundo e5terior para la computadora, y cualquier comunicacin con ella debe tener lugar a tra$0s del entorno de operacin. j. 2iscos magn0ticos, !2;<39, cintas y otros dispositi$os de entrada salida.

Arquitecturas alternativas de computadora


%rquitectura =on >eumann !on ese nombre en )onor del matemtico #o)n =on >eumann, quien desarroll dic)o dise'o inicial como parte de la >I%!. !onsiste en una unidad centra de procesamiento peque'a y controladora, compuesta de las operaciones primiti$as, el control de secuencia y registros internos para guardar los resultados de las operaciones primiti$as, una memoria principal ms grande y un proceso para recuperar y guardar palabras de datos entre la /!P y la memoria ms grande. 9ultiprocesadores /n problema con la arquitectura anterior es la desigualdad de $elocidades entre los datos e5ternos y la alta $elocidad de los registros de la /!P. /n enfoque alternati$o )acia este desequilibrio es el uso de m8ltiples /!P en un sistema dado. l sistema operati$o ejecuta distintos programas en /!P diferentes en el sistema y el rendimiento global mejora.

Estados de computadoras
l pleno entendimiento de una computadora radica en $er con claridad su operacin esttica y la dinmica. /n medio con$eniente de $isuali.ar el comportamiento dinmico de una computadora es a tra$0s del concepto de estado de computadora. !onsid0rese que el proceso de ejecucin de

programas por la computadora tiene lugar a tra$0s de una serie de estados, cada uno definido por el contenido de la memoria, los registros internos y los almacenes e5ternos en alg8n punto durante la ejecucin. l contenido inicial de estas reas de almacenamiento define el estado inicial de la computadora. !ada paso en la ejecucin del programa transforma el estado e5istente en un nue$o estado a tra$0s de la modificacin del contenido de una de estas reas de almacenamiento o ms. sta transformacin de estado se designa como una transicin de estado. !uando la ejecucin del programa )a concluido, el estado final est definido por el contenido final de estas reas de almacenamiento.

Firmware
2ada una definicin precisa de una computadora siempre es posible producir la computadora en )ard1are , es decir, construir un dispositi$o fsico cuyo lenguaje de mquina se a precisamente el de la computadora definida. sto es cierto incluso si el lenguaje de mquina es de alto ni$el como !. %l sugerir esta posibilidad se recurre a un importante principio bsico que est detrs del dise'o de las computadoras* cualquier algoritmo o estructura de datos definida con precisin se puede producir en )ard1are. Puesto que una computadora es simplemente una coleccin de algoritmos y estructuras de datos, se puede suponer que su produccin en )ard1are es una posibilidad, independientemente de la complejidad de la computadora o su lenguaje de mquina asociado. Las computadoras de )ard1are reales tienen com8nmente un lenguaje de mquina de ni$el ms bien bajo en ra.n de consideraciones prcticas. s probable que una computadora con ! o %da en su lenguaje de mquina sea considerablemente ms compleja y muc)o menos fle5ible en di$ersas tareas de cmputo que una computadora con un lenguaje de mquina de bajo ni$el. /na alternati$a com8n a la produccin estricta en )ard1are de una computadora es la computadora de firm1are, simulada por un microprograma que ejecuta en una computadora microprogramable de )ard1are especial. l lenguaje de mquina de esta computadora consiste por lo general simples transferencias de datos entre memoria principal y registros internos de alta $elocidad, entre los registros mismos, y desde los registros a otros registros a tra$0s de procesadores como sumadores y multiplicadores. l microprograma simula la operacin de la computadora deseada en la computadora microprogramable anfitrin. l microprograma reside generalmente en memoria de slo lectura.

Traductores y computadoras simuladas por software


La programacin se )ace ms a menudo en un lenguaje de alto ni$el muy alejado del lenguaje de mquina mismo del )ard1are. 5isten dos soluciones bsicas para esta cuestin de implementacin. Traduccin (compilacin) ?raductor denota cualquier procesador de lenguajes que acepta programas en cierto lenguaje fuente 6que puede ser de alto o bajo ni$el7 como entrada y produce programas funcionalmente equi$alentes en otro lenguaje objeto. nsamblador s un traductor cuyo lenguaje objeto es tambi0n alguna $ariedad de lenguaje mquina para una computadora real, pero cuyo lenguaje fuente, un lenguaje ensamblador, constituye en gran medida una representacin simblica del cdigo de mquina objeto.

!asi todas las instrucciones en el lenguaje fuente se traducen una por una a instrucciones en el lenguaje objeto. !ompilador /n compilador es un traductor cuyo lenguaje fuente es un lenguaje de alto ni$el y cuyo lenguaje objeto se apro5ima al lenguaje mquina de una computadora real , ya sea que se trate de un lenguaje ensamblador o alguna $ariedad de lenguaje mquina. !argador s un traductor cuya entrada es un lenguaje objeto y la entrada es un programa en lenguaje mquina en manera reubicable@ las modificaciones que reali.a son a tablas de datos que especifican las direcciones de memoria donde el programa necesita estar para ser ejecutable. Preprocesador Asicamente es un editor de te5to, toma como entrada una forma ampliada de un lenguaje fuente y su salida es una forma estndar del mismo lenguaje fuente. Simulacin de software (interpretacin) n lugar de traducir los programas de alto ni$el, a programas equi$alentes en lenguaje mquina, se podran simular a tra$0s de programas ejecutados en otra computadora anfitrin, una computadora cuyo lenguaje mquina sea de alto ni$el. sto se construye con soft1are que se ejecuta en la computadora anfitrin, la computadora con lenguaje de alto ni$el que de otra manera se podra )aber construido en )ard1are. % esto se le conoce como una simulacin por soft1are 6o interpretacin7 de la computadora con lenguaje de alto ni$el en la computadora anfitrin. La traduccin y la simulacin proporcionan $entajas diferentes, una $entaja de la traduccin, es que cdigos referentes a ciclos que se repitan gran cantidad de $eces, son ejecutados muc)as $eces, pero se traducen slo una a diferencia de los simulados, que tienen que decodificarlo la misma cantidad de $eces que se ejecute. /na $entaja para la simulacin, es que en caso de un error, proporcionan ms informacin acerca de donde fue la falla que en un cdigo objeto traducido.

Computadoras Virtuales
%nteriormente se consideraron formas para la construccin de una computadora* +. % tra$0s de una produccin en hardware, representando las estructuras de datos y algoritmos directamente con dispositi$os fsicos. ,. % tra$0s de una produccin de firmware, representando las estructuras de datos y algoritmos por microprogramacin de una computadora de )ard1are. -. % tra$0s de la simulacin de software, representando las estructuras de datos y algoritmos por medio de programas y estructuras de datos en alg8n otro lenguaje de programacin. B. % tra$0s de alguna combinacin de estas t0cnicas. Se )abla de la computadora virtual definida por el lenguaje, a las estructuras de control y algoritmos en tiempo de ejecucin que se emplean durante la ejecucin de un programa.

l lenguaje de mquina de esta computadora $irtual es el programa ejecutable que produce el traductor del lenguaje, el cual puede adoptar la forma de cdigo de mquina aut0ntico si el lenguaje se compila o puede tener alguna estructura arbitraria si el lenguaje se interpreta.

Sinta is y sem!ntica
La sinta5is de un lenguaje de programacin es el aspecto que ofrece el programa. Proporcionar las reglas de sinta5is para un lenguaje de programacin significa decir como se escriben los enunciados, declaraciones y otras construcciones del lenguaje. La semntica de un lenguaje de programacin es el significado que se da a las di$ersas construcciones sintcticas. ?picamente se describe la sinta5is de una construccin del lenguaje con la notacin A>F 6AacCus >aur Form7 y luego se da tambi0n la semntica para esa construccin. La descripcin semntica de un lenguaje tambi0n se puede definir en t0rminos de su computadora $irtual, sin embargo, es poco usual )acerlo de esta forma.

Computadoras virtuales e implantacin de len"uajes


!uando un lenguaje de programacin se est implementado en una computadora particular, el implementador determina primero la computadora $irtual que representa una interpretacin de la semntica del lenguaje y luego construye esa computadora $irtual a partir de los elementos de )ard1are y soft1are que suministra la computadora subyacente. Por ejemplo, si la computadora $irtual contiene tanto una operacin de suma de enteros como una operacin de ra. cuadrada, el implementador puede optar por representar la operacin de suma de enteros usando una operacin de suma de enteros proporcionada directamente por el )ard1are subyacente, en tanto que la operacin de ra. cuadrada se puede representar por una simulacin por soft1are, como un subprograma. La organi.acin y la estructura de la implementacin de un lenguaje esta determinada por los di$ersos recursos de )ard1are y soft1are disponibles en la computadora subyacente y los costos de su uso.

#erarqu$as de computadoras
La computadora $irtual que un programador utili.a cuando decide )acer un programa en alg8n lenguaje de alto ni$el esta formada, de )ec)o, por una jerarqua de computadoras virtuales. Dasta abajo debe )aber, por supuesto, una computadora de )ard1are real. Sin embargo, el programador ordinario rara $e. tiene trato directo con esta computadora. n $e. de ello, esta computadora de )ard1are se transforma sucesi$amente a tra$0s de capas de soft1are 6o microprogramas7 en una computadora $irtual que puede ser radicalmente distinta. l segundo ni$el de computadora $irtual 6o tercero si un microprograma forma el segundo ni$el7 est definido ordinariamente por la compleja coleccin de rutinas que se conoce como sistema operativo. ?picamente, el sistema operati$o pro$ee simulaciones de un cierto n8mero de operaciones y estructuras de datos nue$as que no proporciona directamente el )ard1are, por ejemplo, estructuras de arc)i$os e5ternos y primiti$as de administracin de arc)i$os. La computadora $irtual definida por el sistema operati$o es por lo com8n la que est disponible para el implementador de un lenguaje de alto ni$el. l implementador tambi0n suministra un traductor para traducir programas de usuario al lenguaje de mquina de la computadora $irtual definida por el lenguaje de alto ni$el. Los programas que el programador construye a'aden un ni$el ms a la jerarqua. l lenguaje de mquina se compone de los datos de entrada para estos programas.

Lo que es programa en un conte5to es probable que se con$ierta en datos en otro. Por ejemplo, se puede escribir un programa en Pascal, pero para el compilador de Pascal ese programa son datos de entrada por procesar.

Enlace y tiempo de enlace


/n enlace es la eleccin de una propiedad para un elemento de programa, de entre un conjunto de propiedades posibles. l momento durante el procesamiento del programa en el que se )ace esta eleccin se conoce como el tiempo de enlace.

Clases de tiempo de enlace


+. Tiempo de ejecucin. Incluye enlaces a $ariables con sus $alores, as como el enlace de $ariables a localidades particulares de almacenamiento. Se di$ide en dos categoras* a. Al entrar a un subprograma o bloque b. En puntos arbitrarios durante la ejecucin ,. Tiempo de traduccin (tiempo de compilacin). Se pueden distinguir tres clases distintas* a. Enlaces elegidos por el programador. >ombres de $ariables, tipos para las $ariables, estructuras de enunciados de programa, etc. b. Enlaces elegidos por el traductor. !omo se guardan los arreglos y como se crean descriptores para los arreglos. c. Enlaces elegidos por el cargador. 3curre cuando se tienen $arios subprogramas que se deben de fusionar en un programa ejecutable 8nico, en el cual cada una de las $ariables definidas en los subprogramas deben de tener asignadas direcciones reales de almacenamiento. sto ocurre durante el tiempo de carga 6tambi0n llamado tiempo de vinculacin7. -. Tiempo de implantacin del lenguaje. <epresentaciones de n8meros y operaciones aritm0ticas. B. Tiempo de definicin del lenguaje. ?odas las posibles formas opcionales de enunciados, tipos de estructuras de datos, estructuras de programa, etc.

%mportancia de los tiempos de enlace


9uc)as de las distinciones cuando se anali.an y comparan los lenguajes de programacin se basan en diferencias en cuanto a tiempos de enlace. !ontinuamente )abremos de formular la pregunta* &se )ace esto durante la traduccin o durante la ejecucin(. Por ejemplo, casi todos los lenguajes permiten n8meros como datos y permiten operaciones aritm0ticas sobre estos n8meros. Sin embargo, no todos los lenguajes son igualmente idneos para problemas de programacin que impliquen grandes cantidades de aritm0tica. Por ejemplo, mientras que tanto 9L como F3<?<%> permiten la manipulacin de arreglos de n8meros, la resolucin de un problema que requiera arreglos grandes y cantidades considerables de aritm0tica en 9L seria muy poco apropiado a diferencia de F3<?<%>. La ra.n de esto es que en 9L casi todos los enlaces que se requieran en el programa se establecen durante la ejecucin, mientras que en F3<?<%> la mayora se establecen durante la traduccin. Por tanto, 9L pasara casi todo su tiempo de ejecucin creando y destruyendo enlaces, en tanto que F3<?<%> la mayora de los mismos enlaces se estableceran de

una $e. durante la traduccin y quedaran unos cuantos para ser manejados durante la ejecucin. !omo consecuencia, la $ersin en F3<?<%> se ejecutara de manera ms eficiente. Por otra parte, & por qu0 F3<?<%> es tan infle5ible para manejar cadenas en comparacin con 9L(. /na $e. ms, la respuesta gira en torno a tiempos de enlace. 9ientras que en F3<?<%> el tama'o de las cadenas y el tipo de $ariables se deben de fijar durante la traduccin, en 9L se pueden retrasar los enlaces durante la ejecucin logrando con ello ms fle5ibilidad para adaptarse a los datos de entrada. Se dice que un lenguaje como F3<?<%>, donde casi todos los enlaces se efect8an durante la traduccin tiene enlace temprano o enlace esttico. E un lenguaje como 9L, donde demora casi todos los enlaces )asta el tiempo de ejecucin tiene enlace tardo o enlace dinmico. Las $entajas y des$entajas de enlace esttico respecto al enlace dinmico giran en torno a este conflicto entre eficiencia y fle5ibilidad. Los lenguajes como F3<?<%>, Pascal y ! la eficiencia es considerada primordial a diferencia de lenguajes como 9L y LISP en donde la fle5ibilidad es primordial. n general, un dise'o de lenguaje especifica el momento ms cercano durante el procesamiento del programa en el cual es posible un enlace particular. Puesto que los tiempos de enlace dependen de la implementacin, se )ace 0nfasis en conocer la implementacin del lenguaje.

Paradigmas de los lenguajes de programacin


/n paradigma es una forma o manera las $er las cosas. n los lenguajes de programacin actuales e5isten cuatro modelos que los describen, estos son* +. Lenguajes imperati$os o de procedimientos ,. Lenguajes aplicati$os o funcionales -. Lenguajes con base en reglas o lgico B. Lenguajes orientados a objetos

&en"uajes imperativos o de procedimientos


stos deri$an su nombre al papel que juegan los enunciados imperati$os que se combinan entre si para alcan.ar un resultado deseado en un programa. ste tipo de programas se componen de una serie de enunciados, y la ejecucin de cada enunciado )ace que el interprete cambie el $alor de una localidad o ms en su memoria, es decir que pase aun nue$o estado. La sinta5is de esta clase de lenguajes tiene por lo general la forma* enunciado 1 enunciado 2 . . ste tipo de lenguajes se ad)ieren a la arquitectura con$encional de una computadora, que reali.a operaciones de manera secuencial. jemplos de este tipo de lenguajes son* %lgol FG, Pascal, !, !obol, Fortran, etc. l punto problemtico de los lenguajes imperati$os es la imposibilidad que e5iste de demostrar que los programas est0n correctos. sta dificultad es causada por el )ec)o de que lo correcto de un

programa depende del contenido de todas y cada una de las celdas de memoria. Para poder obser$ar un programa a tra$0s del tiempo debemos tomar Hfotos instantneasI de la memoria antes y despu0s de ejecutar cada paso. Si el programa maneja una cantidad grande de memoria esto se $uel$e tedioso en el mejor de los casos y prcticamente imposible en general.

&en"uajes aplicativos o funcionales


ste tipo de lenguajes consisten en e5aminar la funcin que el programa representa, y no slo los cambios de estado conforme el programa se ejecuta, enunciado por enunciado. sto se puede conseguir obser$ando el resultado deseado en $e. de los datos disponibles. n otras palabras, en $e. de e5aminar la serie de estados a tra$0s de los cuales debe pasar la mquina para obtener una respuesta, la pregunta que debe formularse es* &!ul es la funcin que se debe aplicar al estado de mquina inicial accediendo al conjunto inicial de $ariables y combinndolas en forma especifica para obtener una respuesta( Los lenguajes que )acen 0nfasis en este punto de $ista son los lenguajes funcionales. Las caractersticas generales de este tipo de lenguajes son* a7 /n conjunto de funciones primiti$as* Son el conjunto de funciones predefinidas en el lenguaje y pueden ser aplicadas. b7 /n conjunto de formas funcionales* Son los mecanismos mediante los cuales podemos combinar funciones para crear funciones nue$as. c7 Las operaciones de aplicacin* s el mecanismo construido en el lenguaje para aplicar una funcin a sus argumentos y obtener un $alor. d7 /n conjunto de objetos de datos* Son los objetos permitidos del dominio y el rango. 4eneralmente los lenguajes funcionales estn muy restringidos en cuanto a la $ariedad de objetos de datos que permiten, siendo 0stos conjuntos de una estructura simple y regular. n general la sinta5is de estos lenguajes similar a * funcinn ...funcin2 funcin1 datos!!...! jemplos* LISP, 9L Los matemticos desde )ace un buen tiempo estn resol$iendo problemas usando el concepto de funcin. /na funcin con$ierte ciertos datos en resultados. Si supi0ramos cmo e$aluar una funcin, usando la computadora, podramos resol$er automticamente muc)os problemas. %s pensaron algunos matemticos, que no le tenan miedo a la mquina, e in$entaron los lenguajes de programacin funcionales. %dems, apro$ec)aron la posibilidad que tienen las funciones para manipular datos simblicos, y no solamente num0ricos, y la propiedad de las funciones que les permite componer, creando de esta manera, la oportunidad para resol$er problemas complejos a partir de las soluciones a otros ms sencillos. ?ambi0n se incluy la posibilidad de definir funciones recursi$amente. /n lenguaje funcional ofrece conceptos que son muy entendibles y relati$amente fciles de manejar para todos los que no se durmieron en las clases de matemticas. l lenguaje funcional ms antiguo, y seguramente el ms popular )asta la fec)a, es LISP, dise'ado por 9c!art)y J+K en la segunda mitad de los a'os LG. Su rea de aplicacin es principalmente la Inteligencia %rtificial. n la d0cada de los MG )ubo una nue$a ola de inter0s por los lenguajes funcionales, a'adiendo la tipificacin y algunos conceptos modernos de modulari.acin y polimorfismo, como es el caso del lenguaje 9L. Programar en un lenguaje funcional significa construir funciones a partir de las ya e5istentes. Por lo tanto es importante conocer y comprender bien las funciones que conforman la base del lenguaje,

as como las que ya fueron definidas pre$iamente. 2e esta manera se pueden ir construyendo aplicaciones cada $e. ms complejas. La des$entaja de este modelo es que resulta bastante alejado del modelo de la mquina de =on >eumann y, por lo tanto, la eficiencia de ejecucin de los int0rpretes de lenguajes funcionales no es comparable con la ejecucin de los programas imperati$os precompilados. Para remediar la deficiencia, se est buscando utili.ar arquitecturas paralelas que mejoren el desempe'o de los programas funcionales, sin que )asta la fec)a estos intentos tengan un impacto real importante.

&en"uajes con 'ase en re"las o l"ico


ste tipo de lenguajes se ejecutan $erificando una condicin )abilitadora, y cuando se satisface, ejecutan una accin. Las condiciones )abilitadoras determinan el orden de ejecucin, la sinta5is de esta clase de lenguajes es de la forma* condicin1 entonces accin1 condicin2 entonces accin2 ... condicinn entonces accinn jemplos* P<3L34 l conocimiento bsico de las matemticas se puede representar en la lgica en forma de a5iomas, a los cuales se a'aden reglas formales para deducir cosas $erdaderas 6teoremas7 a partir de los a5iomas. 4racias al trabajo de algunos matemticos, de finales de siglo pasado y principios de 0ste, se encontr la manera de automati.ar computacionalmente el ra.onamiento lgico ;;particularmente para un subconjunto significati$o de la lgica de primer orden;; que permiti que la lgica matemtica diera origen a otro tipo de lenguajes de programacin, conocidos como lenguajes lgicos. ?ambi0n se conoce a estos lenguajes, y a los funcionales, como lenguajes declarati$os, porque el programador, parar solucionar un problema, todo lo que tiene que )acer es describirlo $a a5iomas y reglas de deduccin en el caso de la programacin lgica y $a funciones en el caso de la programacin funcional. n los lenguajes lgicos se utili.a el formalismo de la lgica para representar el conocimiento sobre un problema y para )acer preguntas que, si se demuestra que se pueden deducir a partir del conocimiento dado en forma de a5iomas y de las reglas de deduccin estipuladas, se $uel$en teoremas. %s se encuentran soluciones a problemas formulados como preguntas. !on base en la informacin e5presada dentro de la lgica de primer orden, se formulan las preguntas sobre el dominio del problema y el int0rprete del lenguaje lgico trata de encontrar la respuesta automticamente. l conocimiento sobre el problema se e5presa en forma de predicados 6a5iomas7 que establecen relaciones sobre los smbolos que representan los datos del dominio del problema. l P<3L34 es el primer lenguaje lgico y el ms conocido y utili.ado. Sus orgenes se remontan a los inicios de la d0cada de los NG con los trabajos del grupo de %. !olmerauer en 9arsella, Francia. ?ambi0n en este caso, las aplicaciones a la Inteligencia %rtificial mantienen el lenguaje $i$o y 8til. n el caso de la programacin lgica, el trabajo del programador se restringe a la buena descripcin del problema en forma de )ec)os y reglas. % partir de 0sta se pueden encontrar muc)as soluciones dependiendo de como se formulen las preguntas 6metas7, que tienen sentido para el problema. Si el programa est bien definido, el sistema encuentra automticamente las respuestas a las preguntas formuladas. n este caso ya no es necesario definir el algoritmo de solucin, como en la programacin imperati$a, en cambio, lo fundamental aqu es e5presar bien el conocimiento sobre el problema mismo. n programacin lgica, al igual que en programacin funcional, el programa, en este caso los )ec)os y las reglas, estn muy alejados del modelo =on >eumann que posee la

mquina en la que tienen que ser interpretados@ por lo tanto, la eficiencia de la ejecucin no puede ser comparable con la de un programa equi$alente escrito en un lenguaje imperati$o. Sin embargo, para cierto tipo de problemas, la formulacin del programa mismo puede ser muc)o ms sencilla y natural 6para un programador e5perimentado, por supuesto7.

&en"uajes orientados a o'jetos


/n lenguaje orientados objetos es aqu0l que utili.a y maneja entes 6objetos7 a tra$0s de sus propiedades y caractersticas de objetos o entes reales. % mediados de los a'os FG se empe. a $islumbrar el uso de las computadoras para la simulacin de problemas del mundo real. Pero el mundo real est lleno de objetos, en la mayora de los casos complejos, los cuales difcilmente se traducen a los tipos de datos primiti$os de los lenguajes imperati$os. %s es que a dos noruegos, 2a)l y >ygaard , se les ocurri el concepto de objeto y sus colecciones, llamadas clases de objetos, que permitieron introducir abstracciones de datos a los lenguajes de programacin. La posibilidad de reutili.acin del cdigo y sus indispensables modificaciones, se reflejaron en la idea de las jerarquas de )erencia de clases. % ellos tambi0n les debemos el concepto de polimorfismo introducido $a procedimientos $irtuales. ?odos estos conceptos fueron presentados en el lenguaje Simula FN, desde el a'o +OFN. %unque pensado como lenguaje de propsito general, Simula tu$o su mayor 05ito en las aplicaciones de simulacin discreta, gracias a la clase SI9/L%?I3> que facilitaba considerablemente la programacin. La comunidad informtica )a tardado demasiado en entender la utilidad de los conceptos bsicos de Simula FN, que )oy identificamos como conceptos del modelo de objetos. ?u$imos que esperar )asta los a'os MG para $i$ir una $erdadera ola de propuestas de lenguajes de programacin con conceptos de objetos encabe.ada por SmalltalC, !"", iffel, 9odula;-, %da OL y terminando con #a$a. La moda de objetos se )a e5tendido de los lenguajes de programacin a la Ingeniera de Soft1are. Si alguien desarrolla sistemas y toda$a no sabe qu0 es un objeto, mejor que no lo confiese en p8blico y lea cuanto antes los n8meros -, B y ,G de la re$ista Soluciones %$an.adas. l modelo de objetos, y los lenguajes que lo usan, parecen facilitar la construccin de sistemas o programas en forma modular. Los objetos ayudan a e5presar programas en t0rminos de abstracciones del mundo real, lo que aumenta su comprensin. La clase ofrece cierto tipo de modulari.acin que facilita las modificaciones al sistema. La reutili.acin de clases pre$iamente probadas en distintos sistemas tambi0n es otro punto a fa$or. Sin embargo, el modelo de objetos, a la )ora de ser interpretado en la arquitectura =on >eumann conlle$a un e5cesi$o manejo dinmico de memoria debido a la constante creacin de objetos, as como a una carga de cdigo fuerte causada por la constante in$ocacin de m0todos. Por lo tanto, los programas en lenguajes orientados a objetos siempre pierden en eficiencia, en tiempo y memoria, contra los programas equi$alentes en lenguajes imperati$os. Para consolarnos, los e5pertos dicen que les ganan en la comprensin de cdigo.

&en"uajes concurrentes( paralelos y distri'uidos


La necesidad de ofrecer concurrencia en el acceso a los recursos computacionales se remonta a los primeros sistemas operati$os. 9ientras que un programa reali.aba una operacin de entrada o salida otro podra go.ar del tiempo del procesador para sumar dos n8meros, por ejemplo. %pro$ec)ar al m5imo los recursos computacionales fue una necesidad apremiante, sobre todo en la 0poca en que las computadoras eran caras y escasas@ el sistema operati$o tena que ofrecer la ejecucin concurrente y segura de programas de $arios usuarios, que desde distintas terminales utili.aban un

solo procesador, y as surgi la necesidad de introducir algunos conceptos de programacin concurrente para programar los sistemas operati$os. Posteriormente, cuando los procesadores cambiaron de tama'o y de precio, se abri la posibilidad de contar con $arios procesadores en una mquina y ofrecer el procesamiento en paralelo, es decir, procesar $arios programas al mismo tiempo. sto dio el impulso a la creacin de lenguajes que permitan e5presar el paralelismo. Finalmente, llegaron las redes de computadoras, que tambi0n ofrecen la posibilidad de ejecucin en paralelo, pero con procesadores distantes, lo cual conocemos como la programacin distribuida. n resumen, el origen de los conceptos para el manejo de concurrencia, paralelismo y distribucin est en el deseo de apro$ec)ar al m5imo la arquitectura =on >eumann y sus modalidades reflejadas en cone5iones paralelas y distribuidas. Districamente encontramos en la literatura soluciones conceptuales y mecanismos tales como* semforos, regiones crticas, monitores, en$o de mensajes 6!SP7, llamadas a procedimientos remotos 6<P!7, que posteriormente se incluyeron como partes de los lenguajes de programacin en !oncurrent Pascal, 9odula, %da, 3!!%9, y 8ltimamente en #a$a. /no de los ejemplos ms importantes es el modelo de en$o de mensajes de !SP de Doare JBK, para las arquitecturas paralelas y distribuidas, el cual no solamente fructific en una propuesta del lenguaje de programacin 3!!%9, sino dio origen a una nue$a familia de procesadores, llamados PtransputersP, que fcilmente se componen en una arquitectura paralela. s difcil e$aluar las propuestas e5istentes de lenguajes para la programacin concurrente, paralela y distribuida. Primero, porque los programadores estn acostumbrados a la programacin secuencial y cualquier uso de estos mecanismos les dificulta la construccin y el anlisis de programas. Por otro lado, este tipo de conceptos en el pasado fue manejado principalmente a ni$el de sistemas operati$os, protocolos de comunicacin, etc0tera, donde la eficiencia era crucial, y por lo tanto no se utili.aban lenguajes de alto ni$el para la programacin. Doy en da, la programacin de sistemas complejos tiene que incluir las partes de comunicaciones, programacin distribuida y concurrencia. sto lo saben los creadores de los lenguajes ms recientes, que integran conceptos para manejar* los )ilos de control, comunicacin, sincroni.acin y no determinismo@ el )ard1are y las aplicaciones se los e5igen.

Bibliografa

Pratt, ?errence Q. Programming languages* design and implementation. Bt) d. Prentice Dall. ISA> G+-G,NFNM, Aruce cCel %plique !"" : 9adrid @ 905ico * 3sborne 9c4ra1;Dill, c+OO+ ISA> MB;NF+L;LFN;G

Das könnte Ihnen auch gefallen