You are on page 1of 64

FACULTAD DE INGENIERA FACULTAD DE INGENIERA

E.A.P. INGENIERA DE SISTEMAS E INFORMTICA E.A.P. INGENIERA DE SISTEMAS E INFORMTICA


MANUAL DEL CURSO: MANUAL DEL CURSO:
Teora de Lenguajes
Teora de Lenguajes
(Unidad I) (Unidad I)
Tema:
Introduccin a la teora de Lenguajes Introduccin a la teora de Lenguajes
Dictado por:
DIANA CECILIA MUOZ CASANOVA DIANA CECILIA MUOZ CASANOVA
M.S. en Ingeniera de Sistemas e Informtica
CHIMO!E " #ER$ CHIMO!E " #ER$
%&&' %&&'
CA#(!ULO I: HIS!ORIA DE LOS LEN)UA*ES DE #RO)RAMACI+N
1.1. Introduccin 2
1.2. Historia de los lenguajes de programacin 3
1.3. Tendencias en los lenguajes de programacin 7
CA#(!ULO II: E,OLUCI+N DE LOS LEN)UA*ES DE #RO)RAMACI+N
2.1. Evolucin de los lenguajes de programacin 11
2.1.1. Estructurados vs. No estructurados 11
2.1.2. 198!199" # el nacimiento del $%ase 11
2.1.3. &os primeros a'os( 199"!199) las %ases de datos relacionales 12
2.1.*. &a segunda mitad( 199!2""") la orientacin a o%jetos 12
2.1.. El +in de los lenguajes ,.-... 13
2.1./. 2""" # m0s all0) lenguajes visuales 13
2.1.7. 1na visin a la 2e% # al +uturo) 3tml( perl( p3p( pit3on( java # otros 1*
2.2. 4eneraciones de lenguajes de programacin 1
2.3. Tipos de lenguaje de programacin seg5n su campo de aplicacin. 1
2.*. Tipos de lenguaje de programacin en +uncin al estilo de programar 1/
2.. &enguajes imperativos 1/
2./. &enguajes +uncionales 18
2./.1. 6oncepto matem0tico de +uncin. 18
2./.2. 6oncepto de lenguajes +uncionales. 19
2./.3. 6ategor7as de lenguajes +uncionales. 2"
2./.*. 8ro%lemas del modelo imperativo 2"
2.7. &enguajes lgicos 9declarativos: 22
2.8. &enguajes orientados a o%jetos 2/
2.9. &enguajes con concurrencia 27
2.1". Evolucin de los lenguajes de programacin declarativos 29
2.11. Evolucin de los lenguajes de programacin orientado a o%jetos e
Imperativos 3"
CA#(!ULO III: CONCE#!OS EN LOS LEN)UA*ES DE #RO)RAMACI+N
3.1. ;<u= es lo >ue constitu#e un %uen lenguaje? 31
3.1.1. @tri%utos de un %uen lenguaje 31
3.1.2. EstandariAacin de los lenguajes 32
3.2. .inta$is de lenguajes de programacin 32
3.3. Tipos de datos 33
3.*. @%straccin 3*
3.. @%straccin en programacin 3*
3./. 6lases de a%straccin 3
3./.1. @%straccin de control 3
3./.2. @%straccin de datos. 37
3.7. Tipos a%stractos de datos 9T@,.: 37
3.8. &enguajes de programacin # T@,. 37
3.9. &enguajes de programacin >ue de%er7as aprender 39
3.9.1. 8H8 39
3.9.2. 6B 39
3.9.3. @C@D *"
3.9.*. Cavascript *"
3.9.. 8EE& *1
3.9./. 6 *1
3.9.7. Eu%# # ru%# on rails *1
3.9.8. @.8 *2
CA#(!ULO I,: LEN)UA*ES DE A*O- MEDIO . AL!O NI,EL
*.1. Introduccin *3
*.2. &enguajes de %ajo nivel *3
*.2.1. &enguaje m0>uina. **
*.2.2. Ensam%lador. **
@: Fentajas del lenguaje ensam%lador *
G: ,esventajas del lenguaje ensam%lador *8
*.3. &enguajes de medio nivel *9
*.*. &enguajes ,e @lto Nivel 2
*.. 4eneradores de aplicaciones o *H nivel 3
CA#(!ULO ,: ELEMEN!OS DE UN LEN)UA*E DE #RO)RAMACI+N
.1. Elementos sint0cticos de un lenguaje *
.2. Tipos de datos
.3. Notaciones de e$presiones /
.*. 8ropiedad asociativa # precedencia /
.. Eepresentacin de 0r%ol para e$presiones 7
./. Evaluacin de e$presiones 7
./.1. Evaluacin mediante la reconstruccin de un 0r%ol 7
./.2. Evaluacin mediante una pila 8
@: @lgoritmo para trans+ormar una notacin in+ija a post+ija 8
G: Ta%la de prioridades. /"
6: @lgoritmo 9pseudocdigo: /"
CA#(!ULO I: HIS!ORIA DE LOS LEN)UA*ES DE
#RO)RAMACI+N
/0/0 IN!RODUCCI+N
1na computadora es una m0>uina >ue solo comprende las instrucciones >ue se le
den en un determinado +ormato. 6ada m0>uina reconoce # ejecuta un n5mero de
instrucciones di+erentes >ue se agrupan en los distintos lenguajes de
programacin.
1n lenguaje de programacin es un conjunto limitado de pala%ras # de s7m%olos
>ue representan procedimientos( c0lculos( decisiones # otras operaciones >ue
pueden ejecutar una computadora. @ pesar de >ue en este tra%ajo parte de la
divisin de lenguajes de programacin en imperativos # declarativos 9los cuales a
su veA se dividen en numerosos su%grupos:( la clasi+icacin m0s com5n # %0sica
>ue suele 3acerse de los lenguajes de programacin es la >ue los divide en
lenguajes de %ajo # de alto nivel. &os lenguajes de programacin de %ajo nivel
+ueron los primeros >ue surgieron # se llaman as7 por>ue est0n directamente
relacionados con el 3ard2are del computador( es decir( el usuario introduce una
serie de cdigos num=ricos >ue la m0>uina va a interpretar como instrucciones.
8ara usar este lenguaje( el programador ten7a >ue conocer el +uncionamiento de la
m0>uina al m0s %ajo nivel # los errores de programacin eran mu# +recuentes.
&os lenguajes de alto nivel surgieron con posterioridad con el primer compilador
de I-ETE@N 9I-Emula TE@Nslation:( >ue( como su nom%re indica( inici
como un JsimpleJ es+uerAo de traducir un lenguaje de +rmulas( al lenguaje
ensam%lador # por consiguiente al lenguaje de m0>uina( +acilitando la la%or a los
programadores. @ partir de I-ETE@N( se 3an desarrollado innumera%les
lenguajes( >ue siguen el mismo concepto) +acilitar la vida al programador(
aumentando la productividad. Estos lenguajes usan un n5mero reducido de
instrucciones 9normalmente en ingl=s: >ue siguen unas estrictas reglas
gramaticales >ue se conocen como sinta$is del lenguaje. 8ero aun>ue el
programador de esta +orma se distancie del 3ard2are del computador( este sigue
tra%ajando en lenguaje m0>uina. 8or ello se 3ace necesaria una traduccin a una
secuencia de instrucciones interpreta%les por el computador. Esta la%or es llevada
a ca%o por los compiladores # los int=rpretes.
El compilador es un programa >ue se encarga de la traduccin glo%al del programa
realiAado por el usuario. Esta operacin reci%e el nom%re de compilacin. El
programa es traducido completamente antes de >ue se ejecute( por lo >ue la
ejecucin se realiAa en un periodo mu# %reve. El int=rprete por el contrario lleva a
ca%o una traduccin inmediata en el momento de la ejecucin( es decir( ir0
ejecutando las instrucciones una a una 3aciendo >ue el proceso re>uiera un
periodo de tiempo sensi%lemente ma#or del >ue necesitar7a un compilador. &os
int=rpretes son usados para traducir programas de alta di+icultad de
implementacin( en estos casos( las rdenes a traducir son de tal complejidad >ue
no merece la pena crear un compilador #a >ue este tam%i=n tendr7a >ue ser de una
complejidad por encima de lo normal.
Ha# >ue mencionar la e$istencia de lenguajes >ue com%inan caracter7sticas de los
de alto nivel # los de %ajo nivel 9es decir( Ensam%lador:. 1n ejemplo es 6)
contiene estructuras de programacin de alto nivelK sin em%argo( +ue dise'ado con
mu# pocas instrucciones( las cuales son sumamente sencillas( +0ciles de traducir al
lenguaje de la m0>uinaK # re>uiere de un entendimiento apropiado de cmo
+unciona la m0>uina( el uso de la memoria( etc=tera. 8or ello( algunos consideran a
lenguajes como 6 9>ue +ue dise'ado para 3acer sistemas operativos:( lenguajes de
nivel medio( si %ien( son considerados ma#oritariamente de %ajo nivel.
/0%0 HIS!ORIA DE LOS LEN)UA*ES DE #RO)RAMACI+N
&os primeros lenguajes de programacin surgieron de la idea de 63arles Ga%agge(
la cual se le ocurri a este 3om%re a mediados del siglo DID. Era un pro+esor
matem0tico de la universidad de 6am%ridge e inventor ingles( >ue la principio del
siglo DID predijo muc3as de las teor7as en >ue se %asan los actuales ordenadores.
6onsist7a en lo >ue =l denomina%a la ma>uina anal7tica( pero >ue por motivos
t=cnicos no pudo construirse 3asta mediados del siglo DD. 6on =l cola%oro @da
&oved%#( la cual es considerada como la primera programadora de la 3istoria( pues
realiAo programas para a>u=lla supuesta ma>uina de Ga%agge( en tarjetas
per+oradas. 6omo la ma>uina no llego nunca a construirse( los programas de @da(
lgicamente( tampoco llegaron a ejecutarse( pero si suponen un punto de partida
de la programacin( so%re todo si o%servamos >ue en cuanto se empeA a
programar( los programadores utiliAaron las t=cnicas dise'adas por 63arles
Ga%agge( # @da( >ue consist7an entre otras( en la programacin mediante tarjetas
per+oradas. @ pesar de ello( @da 3a permanecido como la primera programadora
de la 3istoria. .e dice por tanto >ue estos dos genios de anta'o( se adelantaron un
siglo a su =poca( lo cual descri%e la inteligencia de la >ue se 3alla%an dotados.
En 1823 el go%ierno Grit0nico lo apo#o para crear el pro#ecto de una m0>uina de
di+erencias( un dispositivo mec0nico para e+ectuar sumas repetidas. 8ero Ga%agge
se dedico al pro#ecto de la m0>uina anal7tica( a%andonando la ma>uina de
di+erencias( >ue se pudiera programar con tarjetas per+oradas( gracias a la creacin
de 63arles Cac>uard 9+ranc=s:. Este 3om%re era un +a%ricante de tejidos # 3a%7a
creado un telar >ue pod7a reproducir autom0ticamente patrones de tejidos( le#endo
la in+ormacin codi+icada en patrones de agujeros per+orados en tarjetas de papel
r7gido. Entonces Ga%agge intento crear la m0>uina >ue se pudiera programar con
tarjetas per+oradas para e+ectuar cual>uier c0lculo con una precisin de 2" d7gitos.
8ero la tecnolog7a de la =poca no %asta%a para 3acer realidad sus ideas. .i %ien las
ideas de Ga%agge no llegaron a materialiAarse de +orma de+initiva( su contri%ucin
es decisiva( #a >ue los ordenadores actuales responden a un es>uema an0logo al de
la m0>uina anal7tica. En su dise'o( la m0>uina consta%a de cinco unidades %0sicas)
1: 1nidad de entrada( para introducir datos e instrucciones.
2: Lemoria( donde se almacena%an datos # resultados intermedios.
3: 1nidad de control( para regular la secuencia de ejecucin de las operaciones.
*: 1nidad @ritm=tico!&gica( >ue e+ect5a las operaciones.
: 1nidad de salida( encargada de comunicar al e$terior los resultados.
63arles Ga%%age( conocido como el Jpadre de la in+orm0ticaJ no pudo completar
en a>uella =poca la construccin del computador >ue 3a%7a so'ado( dado >ue
+alta%a algo +undamental) la electrnica. El camino se'alado de Ga%%age( no +ue
nunca a%andonado # sigui=ndolo( se constru#eron las primeras computadoras.
@l desarrollarse las primeras computadoras electrnicas( se vio la necesidad de
programarlas( es decir( de almacenar en memoria la in+ormacin so%re la tarea >ue
i%an a ejecutar. &as primeras se usa%an como calculadoras simplesK se les
indica%an los pasos de c0lculo( uno por uno.
Co3n Fon Neumann desarroll el modelo >ue lleva su nom%re( para descri%ir este
concepto de Jprograma almacenadoJ. En este modelo( se tiene una a%straccin de
la memoria como un conjunto de celdas( >ue almacenan simplemente n5meros.
Estos n5meros pueden representar dos cosas) los datos( so%re los >ue va a tra%ajar
el programaK o %ien( el programa en s7.
;6mo es >ue descri%imos un programa como n5meros? .e ten7a el pro%lema de
representar las acciones >ue i%a a realiAar la computadora( # >ue la memoria( al
estar compuesta por s2itc3es correspondientes al concepto de %it( solamente nos
permit7a almacenar n5meros %inarios.
&a solucin >ue se tom +ue la siguiente) a cada accin >ue sea capaA de realiAar
nuestra computadora( asociarle un n5mero( >ue ser0 su cdigo de operacin
9opcode:. 8or ejemplo( una calculadora programa%le simple podr7a asignar los
opcodes)
1 M .1L@( 2 M EE.T@( 3 M L1&TI8&I6@( * M ,IFI,E.
.upongamos >ue >ueremos realiAar la operacin N 3 O 2( en la calculadora
descrita arri%a. En memoria( podr7amos Jescri%irJ el programa de la siguiente
+orma) &ocalidad -pcode .igni+icado 6omentario " En esta localidad(
tenemos el primer n5mero de la +rmula 1 3 N En esta localidad( tenemos el
opcode >ue representa la multiplicacin. 2 3 3 En esta localidad( tenemos el
segundo n5mero de la +rmula 3 1 O En esta localidad( tenemos el opcode >ue
representa la suma. * 2 2 En esta localidad( tenemos el 5ltimo n5mero de la
+rmula. 8odemos ver >ue con esta representacin( es simple e$presar las
operaciones de las >ue es capaA el 3ard2are 9en este caso( nuestra calculadora
imaginaria:( en la memoria.
&a descripcin # uso de los opcodes es lo >ue llamamos lenguaje de m0>uina. Es
decir( la lista de cdigos >ue la m0>uina va a interpretar como instrucciones(
descri%e las capacidades de programacin >ue tenemos de ellaK es el lenguaje m0s
primitivo( depende directamente del 3ard2are( # re>uiere del programador >ue
conoAca el +uncionamiento de la m0>uina al m0s %ajo nivel.
&os lenguajes m0s primitivos +ueron los lenguajes de m0>uina. Esto( #a >ue el
3ard2are se desarroll antes del so+t2are( # adem0s cual>uier so+t2are +inalmente
tiene >ue e$presarse en el lenguaje >ue maneja el 3ard2are.
&a programacin en esos momentos era sumamente tediosa( pues el programador
ten7a >ue J%ajarseJ al nivel de la m0>uina # decirle( paso a pasito( cada punto de la
tarea >ue ten7a >ue realiAar. @dem0s( de%7a e$presarlo en +orma num=ricaK # por
supuesto( este proceso era propenso a errores( con lo >ue la productividad del
programador era mu# limitada. .in em%argo( 3a# >ue recordar >ue en estos
momentos( simplemente a5n no e$ist7a alternativa.
El primer gran avance >ue se dio( +ue la a%straccin dada por el &enguaje
Ensam%lador( # con =l( el nacimiento de las primeras 3erramientas autom0ticas
para generar el cdigo m0>uina. Esto redujo los errores triviales( como pod7a ser el
n5mero >ue correspond7a a una operacin( >ue son sumamente engorrosos #
di+7ciles de detectar( pero +0ciles de cometer. .in em%argo( a5n a>u7 es +0cil para el
programador perderse # cometer errores de lgica( pues de%e %ajar al nivel de la
+orma en >ue tra%aja el 681( # entender %ien todo lo >ue sucede dentro de =l.
6on el desarrollo en los "s # /"s de algoritmos de m0s elevado nivel( # el
aumento de poder del 3ard2are( empeAaron a entrar al uso de computadoras
cient7+icos de otras ramasK ellos conoc7an muc3o de I7sica( <u7mica # otras ramas
similares( pero no de 6omputacin( # por supuesto( les era sumamente complicado
tra%ajar con lenguaje Ensam%lador en veA de +rmulas. @s7( naci el concepto de
&enguaje de @lto Nivel( con el primer compilador de I-ETE@N 9I-Emula
TE@Nslation:( >ue( como su nom%re indica( inici como un JsimpleJ es+uerAo de
traducir un lenguaje de +rmulas( al lenguaje ensam%lador # por consiguiente al
lenguaje de m0>uina. @ partir de I-ETE@N( se 3an desarrollado innumera%les
lenguajes( >ue siguen el mismo concepto) %uscar la ma#or a%straccin posi%le( #
+acilitar la vida al programador( aumentando la productividad( encarg0ndose los
compiladores o int=rpretes de traducir el lenguaje de alto nivel( al lenguaje de
computadora.
Ha# >ue notar la e$istencia de lenguajes >ue com%inan caracter7sticas de los de
alto nivel # los de %ajo nivel 9es decir( Ensam%lador:. El ejemplo mas apropiado
podr7a ser el lenguaje 6 #a >ue puede acceder a los registros del sistema( tra%ajar
con direcciones de memoria( todas ellas caracter7sticas de lenguajes de %ajo nivel
# a la veA realiAar operaciones de alto nivel.
/010 !ENDENCIAS EN LOS LEN)UA*ES DE #RO)RAMACI+N
El estudio de los lenguajes de programacin agrupa tres intereses di+erentesK el del
programador pro+esional( el del dise'ador del lenguaje # del Implementador del
lenguaje.
@dem0s( estos tres tra%ajos 3an de realiAarse dentro de las ligaduras # capacidades
de la organiAacin de una computadora # de las limitaciones +undamentales de la
propia Jcalcula%ilidadJ.
El termino Jel 2rogra3adorJ es un tanto amor+o( en el sentido de
>ue camu+la importantes di+erencias entre distintos niveles # aplicaciones de la
programacin. 6laramente el programador >ue 3a realiAado un curso de doce
semanas en 6-G-& # luego entra en el campo del procesamiento de datos es
di+erente del programador >ue escri%e un compilador en 8ascal( o del
programador >ue dise'a un e$perimento de inteligencia arti+icial en &I.8( o
del programador >ue com%ina sus rutinas de I-ETE@N para resolver un
pro%lema de ingenier7a complejo( o del programador >ue desarrolla un sistema
operativo multiprocesador en @,@.
El Jdise4ador del lenguajeJ es tam%i=n un termino algo ne%uloso.
@lgunos lenguajes 9como @8& # &I.8: +ueron dise'ados por una sola persona
con un concepto 5nico( mientras >ue otros 9I-ETE@N # 6-G-&: son el
producto de desarrollo de varios a'os realiAados por comit=s de dise'o de
lenguajes.
El JI32le3entador del lenguajeJ es la persona o grupo >ue
desarrolla un compilador o interprete para un lenguaje so%re una ma>uina
particular o tipos de ma>uinas. Las +recuentemente( el primer compilador para
el lenguaje P so%re la ma>uina D es desarrollada por la corporacin >ue
manu+actura la ma>uina D. 8or ejemplo( 3a# varios compiladores de Iortran
en usoK uno desarrollado por IGL para una ma>uina IGL( otro desarrollado
por ,E6 para una ma>uina ,E6( otro por 6,6( # as7 sucesivamente. &as
compa'7as de so+t2are tam%i=n desarrollan compiladores # tam%i=n lo 3acen
los grupos de investigacin de las universidades
Ha# tam%i=n muc3os aspectos compartidos entre los programadores( dise'adores
de un lenguaje implementadores del mismo. 6ada uno de%e comprender las
necesidades # ligaduras >ue go%iernan las actividades de los otros dos.
Ha#( al menos( dos +ormas +undamentales desde las >ue pueden verse o
clasi+icarse los lenguajes de programacin) por su nivel # por principales
aplicaciones. @dem0s( estas visiones est0n condicionadas por la visin 3istrica
por la >ue 3a transcurrido el lenguaje
&os J&enguajes ,eclarativosJ son los m0s parecidos al castellano o ingles en su potencia
e$presiva # +uncionalidad est0n en el nivel mas alto respecto a los otros. .on
+undamentalmente lenguajes de ordenes( dominados por sentencias >ue e$presan J&o >ue
3a# >ue 3acerJ en ves de J6omo 3acerloJ.
&os lenguajes de J @lto NivelJ son los mas utiliAados como lenguaje de programacin.
@un>ue no son +undamentalmente declarativos( estos lenguajes permiten >ue los
algoritmos se e$presen en un nivel # estilo de escritura +0cilmente legi%le # comprensi%le
por otros programadores.
&os J&enguajes Ensam%ladoresJ # los J&enguajes La>uinaJ son dependientes de la
ma>uina. 6ada tipo de ma>uina( tal como F@D de digital( tiene su propio lenguaje
ma>uina distinto # su lenguaje ensam%lador asociado. El lenguaje Ensam%lador es
simplemente una representacin sim%lica del lenguaje ma>uina asociado( lo cual permite
una programacin menos tediosa >ue con el anterior.
&a programacin de un lenguaje de alto nivel o en un lenguaje ensam%lador re>uiere( por
tanto( alg5n tipo de inter+aA con el lenguaje ma>uina para >ue el programa pueda
ejecutarse. &as tres inter+aces mas comunes) un Jensam%ladorJ ( un JcompiladorJ # un
JinterpreteJ. El ensam%lador # el compilador traduce el programa a otro e>uivalente en el
lenguaje D de la ma>uina JresidenteJ como un paso separado antes de la ejecucin. 8or
otra parte( el interprete ejecuta directamente las instrucciones en un lenguaje P de alto
nivel( sin un paso de procesamiento previo.
@lgunos lenguajes son lenguajes principalmente interpretados( como @8&( 8E-&-4 #
&I.8. El resto de los lenguajes !! 8ascal( I-ETE@N( 6-G-&( 8&QI( .N-G-&( 6( @da #
Lodula!2 R son normalmente lenguajes compilados. En algunos casos( un compilador
estar0 utiliAa%le alternativamente para un lenguaje interpretado 9tal como &I.8: e
inversamente 9tal como el interprete .N-G-&* de los la%oratorios Gell:. Irecuentemente
la interpretacin es pre+eri%le a la compilacin en un entorno de programacin
e$perimental o de educacin( donde cada nueva ejecucin de un programa implicado un
cam%io en el propio te$to del programa. &a calidad de diagnosis # depuracin >ue
soportan los lenguajes interpretados es generalmente mejor >ue la de los lenguajes
compilados( puesto >ue los mensajes de error se re+ieren directamente a sentencias del
te$to del programa original. @dem0s( la ventaja de la e+iciencia >ue se adjudica
tradicionalmente a los lenguajes compilados +rente a los interpretados puede pronto ser
eliminado( de%ido a la evolucin de las ma>uinas cu#os lenguajes son ellos
mismos1lenguajes de alto nivel. 6omo ejemplo de estos est0n las nuevas ma>uinas &I.8(
las cuales 3an sido dise'adas recientemente por .#m%olics # Dero$ 6orporations.
&os lenguajes de 8rogramacin son tomados de di+erentes perspectivas. Es importante
para un programador decidir cuales conceptos emitir o cuales incluir en la programacin.
6on +recuencia el programador es osado a usar com%inaciones de conceptos >ue 3acen al
lenguaje J,1E-J de usar( de entender e implementar. 6ada programador tiene en mente
un estilo particular de programacin( la decisin de incluir u omitir ciertos tipos de datos
>ue pueden tener una signi+icativa in+luencia en la +orma en >ue el &enguaje es usado( la
decisin de usar u omitir conceptos de programacin o modelos.
E$isten cinco estilo de programacin # son los siguientes)
/0 I32erati5a : Entrada( procesamiento # salidas de ,atos.
%0 6uncional : JIuncionesJ( los datos son +unciones( los resultados pueden ser un valor
o una +uncin.
10 Lgico : ST(IT O operaciones lgicos 9Inteligencia @rti+icial:.
70 Orientados a O8jetos: 6lases( encapsulamiento de datos Herencia de datos(
polimor+ismo
90 Concurrente0
El programador( dise'ador e implementador de un lenguaje de programacin de%en
comprender la evolucin 3istrica de los lenguajes para poder apreciar por >ue presentan
caracter7sticas di+erentes. 8or ejemplo( los lenguajes Jmas jvenesJ desaconsejan 9o
pro3i%en: el uso de las sentencias 4-T- como mecanismo de control in+erior( # esto es
correcto en el conte$to de las +iloso+7as actuales de ingenier7a del so+t2are #
programacin estructurada. 8ero 3u%o un tiempo en >ue la 4-T-( com%inada con la II(
era la 5nica estructura de control disponi%leK el programador no dispone de algo como la
construccin UHI&E o un II!THEN!E&.E para elegir. 8or tanto( cuando se ve un
lenguaje como I-ETE@N( el cual tiene sus ra7ces en los comienAos de la 3istoria de los
lenguajes de programacin( uno no de%e sorprenderse de ver la antigua sentencia 4-T-
dentro de su repertorio.
&o mas importante es >ue la 3istoria nos permite ver la evolucin de +amilias de
lenguajes de programacin( ver la in+luencia >ue ejercer las ar>uitecturas # aplicaciones
de las computadoras so%re el dise'o de lenguajes # evitar +uturos de+ectos de dise'o
aprendido las lecciones del pasado. &os >ue estudian se 3an elegido de%ido a su ma#or
in+luencia # amplio uso entre los programadores( as7 como por sus distintas caracter7sticas
de dise'o e implementacion. 6olectivamente cu%ren los aspectos m0s importantes con los
>ue 3a de en+rentarse el dise'ado de lenguajes # la ma#or7a de las aplicaciones con las
>ue se en+renta el programador.
Tam%i=n varios lenguajes est0n pre+ijados por las letras @N.I. Esto signi+ica >ue el
@merican National .tandards Institute 3a adoptado esa versin del lenguaje como el
est0ndar nacional. 1na veA >ue un lenguaje esta estandariAado( las ma>uinas >ue
implementan este lenguaje de%en cumplir todas las especi+icaciones est0ndares(
re+orAando as7 el m0$imo de transporta%ilidad de programas de una ma>uina a otra. &a
polic7a +ederal de no comprar ma>uinas >ue no cumplan la versin est0ndar de cual>uier
lenguaje >ue soporte tiende a J+ortalecerJ el proceso de estandariAacion( puesto >ue el
go%ierno es( con muc3o( el ma#or comprador de computadoras de la nacin.
Iinalmente( la notacin alge%raica ordinaria( por ejemplo( in+lu#o +uertemente en el
dise'o de I-ETE@N # @&4-&. 8or otra parte( el ingles in+lu#o en el desarrollo del
6-G-&. El lam%da calculo de 63urc3 dio los +undamentos de la notacin +uncional de
&I.8( mientras >ue el algoritmo de LarVov motivo el estilo de reconocimiento de +ormas
de .N-G-&. &a ar>uitectura de computadoras de Fon Neumann( la cual +ue una
evolucin de la ma>uina mas antigua de Turing( es el modelo %0sico de la ma#or7a de los
dise'os de computadoras de las ultimas tres d=cadas. Esta ma>uina no solo in+lu#eron en
los primeros lenguajes sino >ue tam%i=n suministraron el es>ueleto operacional so%re el
>ue evoluciono la ma#or7a de la programacin de sistemas.
1na discusin mas directa de todos estos primeros modelos no est0n entre los o%jetivos de
este te$to. .in em%argo( es importante apuntar a>u7 de%ido a su +undamental in+luencia en
la evolucin de los primeros lenguajes de programacin( por una parte( # por su estado en
el n5cleo de la teor7a de la computadora( por otra. Las so%re este punto( cual>uier
algoritmo >ue pueda descri%irse en ingles o castellano puede escri%irse igualmente como
una ma>uina de Turing 9ma>uina de Fon Neumann:( un algoritmo de LarVov o una
+uncin recursiva. Esta seccin( conocida ampliamente como Jtesis de 63urc3J( nos
permite escri%ir algoritmos en distintos estilos de programacin 9lenguajes: sin sacri+icar
ninguna medida de generalidad( o potencia de programacin( en la transicin.
CA#(!ULO II: E,OLUCI+N DE LOS LEN)UA*ES DE
#RO)RAMACI+N
%0/0 E,OLUCI+N DE LOS LEN)UA*ES DE #RO)RAMACI+N
%0/0/0 ES!RUC!URADOS ,S0 NO ES!RUC!URADOS
@ partir de 6 el gran lenguaje( # 8ascalK se dividen los lenguajes en
estructurados 9a>uellos >ue en su codi+icacin usa%an una estructura jer0r>uica
de procedimientos # +unciones:( en contraposicin a los lenguajes no
estructurados como el Gasic cu#a codi+icacin se %asa%a en l7neas de
programacin( permitiendo al programador JsaltarJ de una l7nea de instruccin
a otra( 3aciendo >ue el cdigo +uera algunas veces inentendi%le # mu# di+7cil
de mantener 9modi+icar: por>ue no segu7a una estructura.
Gasic de todos modos evolucion( primero con el a3ora primitivo 4U Gasic(
teniendo su m0$ima e$presin con el <uicV Gasic del ,.-... ."( el cual #a
inclu7a algunos conceptos mas de avanAada # m0s JaggiornadosJ a lo >ue eran
sus contrapartes estructuradas.
%0/0%0 /:;9</::& . EL NACIMIEN!O DEL =ASE
,Gase +ue el gran desarrollo para %ase de datos de los a'os 8". Gajo la %atuta
de la +irma @s3ton Tate( empresa >ue dio origen a un interprete de %ases de
datos mu# sencillo # poderoso) dG%ase II. &uego vinieron el dGase IIIO >ue
3iAo +uror( # la etapa de la decadencia para dGase) el dGase IF( #a %ajo la
direccin de Gorland.
@s7 surgi el gran compilador 6lipper( de NantucVet 6orp.( en su versin
@utumm 8/ >ue permit7a generar ejecuta%les li%res de ro#alties # sin runtimes(
incluso tomando en +orma directa el cdigo dGase. 8ero no solo era eso(
proveia cientos de comandos # +unciones para potenciar al dGase.
@l ver el =$ito de dGase # 6lipper( surgi la empresa Io$ .o+t2are >ue
desarrollo el Io$Gase 9un clon de dGase IIIO: # supero al JmaestroJ con su
versin Io$ 8lus( pero aun as7( nunca pudo superar a 6lipper #a >ue siempre
lidio con su pol7tica de necesitar de runtimes para su ejecucin( cosa >ue
6lipper nunca necesit.
%0/010 LOS #RIMEROS A>OS- /::&</::9: LAS ASES DE DA!OS
RELACIONALES
@ principios de la d=cada pasada( se nota la evolucin de los lenguajes de
programacin. En +orma pro+esional # aplicaciones de alto nivel( el lenguaje
pre+erido era 6.
8ara el aprendiAaje se usa%a 8ascal( >ue permit7a inculcar el concepto de
programacin estructurada.
Tam%i=n Gasic( era un lenguaje utiliAado( no en pocas ocasiones en +orma
pro+esional( aun>ue con ciertas limitacionesK su reinado estuvo en los a'os 8".
En lenguaje 6( +ue # todav7a es el gran art7+ice de la computacin actual. @
partir de el se desarrollaron compiladores >ue realmente constitu7an otros
lenguajes de programacin. Es decir un lenguaje >ue crea otros lenguajes. Tal
es el caso de la estrella de la primera mitad de la d=cada pasada) 6lipper de
NantucVet 6orp.( el gran compilador de lenguaje D%ase. 6lipper +ue criticado
por los pro+esionales de la programacin >uienes aduc7an >ue no era un
lenguaje( sino un simple compilador nacido de la necesidad de aligerar la
ejecucin de cdigo del Interprete >ue le dio su origen( es decir el dGase. 8ero
realmente 6lipper( gracias a llevar dentro su cdigo un coraAn de lenguaje 6(
+ue mu# +0cil de utiliAar # alcanAo gran popularidad.
.e desarrollaron li%rer7a e$ternas( # con la programacin al estilo 6 a partir de
su versin ." # la inclusin de o%jetos( se convirti en uno de los +avoritos de
la programacin administrativa( junto con 8ascal.
Todos los lenguajes D%ase se %asa%an en el concepto de %ases de datos
relacionales( es decir la agrupacin de la in+ormacin en +orma de ta%las(
denominadas campos # registros( cada uno de ellos pre+ormateados para
reci%ir cierto tipo de dato 9ej) +ec3as( caracteres( n5meros( valores lgicos(
etc.:K pudiendo JunirJ di+erentes %ases por medio de campos comunes.
%0/070 LA SE)UNDA MI!AD- /::9<%&&&: LA ORIEN!ACI+N A O*E!OS
@ medida >ue los a'os van pasando el concepto de Gases relacionales empieAa
a decaer relativamente( surge entonces una variante >ue se aplica a todos los
lenguajes) &a orientacin a o%jetos. Pa no solo se 3a%la de programacin
estructurada( sino >ue los mdulos de programacin son vistos como o%jetos(
las estructuras representan o%jetos #Qo +unciones >ue se adaptan en +orma
general a procesos espec7+icos es la ma$imiAacin de la programacin
modular.
El modelo de o%jetos englo%a los conceptos de encapsulacin( 3erencia #
poli+ormismo( el cual se aplica a los datos # al tipo de %ases de datos >ue
almacena la in+ormacin.
&a orientacin a o%jetos signi+ica la agrupacin de entidades de datos de +orma
glo%al( de tal manera >ue puedan ser interpretados de una +orma com5n por
una misma estructura de programacin.
%0/090 EL 6IN DE LOS LEN)UA*ES D0O0S0
Uindo2s 9 marca el comienAo del +in de la programacin ,.-... # por lo
tanto de los lenguajes %asados en este. Este proceso no +ue en=rgico( todav7a
3o#( estamos viviendo esta etapa. Todav7a 3a# numerosos # e$celentes
sistemas desarrollados %ajo entorno ,.-... ejecut0ndose pero cada veA son los
menos.
Feamos >ue 3icieron los lenguajes ,.-... para mantenerse en el mercado)
6lipper trato de evolucionar 3acia Uindo2s %ajo la %atuta de 6omputer
@ssociates con el nom%re de Fisual -%jects( el cual +ue un +racaso. @l igual
>ue Fisual ,%ase ." %ajo la r%ita de Gorland.
&os 5nicos Jso%revivientesJ al menos en esencia son Fisual Io$ 9Licroso+t:(
Fisual Gasic 9Licroso+t:( ,elp3i 9Gorland: # Fisual 6 9Licroso+t:
%0/0?0 %&&& . M@S ALL@: LEN)UA*ES ,ISUALES
6on al llegada de Uindo2s todo es Fisual( todo es iconos( todo es %otones(
todo es Fentanas. 8ara programar en lenguajes visuales( primero 3a# >ue
comprender lo >ue es Uindo2s. &a +orma de programar los sistemas
evolucion radicalmente. 6on Uindo2s es preciso programar conservando las
convenciones del mismo( guardando sus caracter7sticas # +uncionalidades. &os
sistemas 3ec3os para Uindo2s( de%en ser tan Uindo2s como el propio
sistema operativo.
&a +orma de programar se %asa en o%jetos( cada uno de los cuales tiene sus
8ropiedades # +unciones. .e %asa en la programacin de eventos para dic3os
o%jetos. -tro detalle es >ue la programacin se %asa en componentes 9-&E(
-6D( @ctiveD:( los cuales reducen nota%lemente el tra%ajo de la
programacin al proporcionar 3erramientas antes impensadas en la
programacin ,.-...
Todos los lenguajes visuales o+recen E@, 9Eapid @plication ,evelopment: o
UiAAardsK con lo cual comenAaron a prometer 3acer aplicaciones en poco
tiempo( incluso para ine$pertos. &ejos esta%an #a los tiempos en >ue
programar era solo usar un simple editor de te$tos. @3ora las 3erramientas de
programacin son poderosas. .on casi un sistema operativo( por asi decirloK
con entornos de desarrollo avanAado # e$celentes ,e%uggers. &as incursiones
cada veA mas innovadoras de Licroso+t parecen imponer a la 2e% como el
centro de desarrollo de aplicaciones) Licroso+t .NET
%0/0'0 UNA ,ISI+N A LA AE . AL 6U!URO: H!ML- #ERL- #H#-
#I!HON- *A,A . O!ROS
Internet 3a sido el disparador de nuevos lenguajes tales como el HTL& >ue es
el lenguaje de programacin de las p0ginas UEG para 3iperte$to. El mismo
constitu#e una codi+icacin %astante simple( %asada en marcadores 9T@4s:.
,e la misma manera( cuando se 3ace necesario proveer de +unciones
adicionales a un servicio 2e% se recurre a 8erl o a 8it3on >ue son lenguajes
>ue nos permiten escri%ir scripts para ser alojados en los servidores a e+ectos
de proveer contadores( estad7sticas( ranVings( etc.
8or otra parte Cava( %ajo la direccin de .1N( constitu#e la idea de la
programacin a%ierta # universal para las aplicaciones de escritorio( pero
todav7a los est0ndares visuales 96( Gasic # ,elp3i:( son demasiado poderosos
como para desplaAarlos( a pesar de >ue Cava promete tam%i=n ser un lenguaje
de e$celentes prestaciones. &as nuevas tecnolog7as UEG inundan el mercado)
8H8( @.8( DL&( ,HTL&( DHTL&( @C@D lo cual enri>uecen la +orma de
manejar la in+ormacin # su presentacin al usuario +inal.
%0%0 )ENERACIONES DE LEN)UA*ES DE #RO)RAMACI+N
&a evolucin de los lenguajes de programacin se puede dividir en etapas o
generaciones.
/0 #ri3era generacin: lenguaje ma>uina.
%0 Segunda generacin: se crearon los primeros lenguajes ensam%ladores.
10 !ercera generacin: se crean los primeros lenguajes de alto nivel. Ej. 6(
8ascal( 6o%olW
70 Cuarta generacin0 .on los lenguajes capaces de generar cdigo por si
solos( son los llamados E@,( con lo cuales se pueden realiAar aplicaciones sin
ser un e$perto en el lenguaje. @>u7 tam%i=n se encuentran los lenguajes
orientados a o%jetos( 3aciendo posi%le la reutiliAacin d partes del cdigo para
otros programas.
90 Buinta generacin: a>u7 se encuentran los lenguajes orientados a la
inteligencia arti+icial.. Ej. 8E-&-4
%010 !I#OS DE LEN)UA*E DE #RO)RAMACI+N SE)$N SU CAM#O DE
A#LICACI+N0
A2licaciones cientCicas0
En este tipo de aplicaciones predominan las operaciones num=ricas o
matriciales propias de algoritmos matem0ticos. &enguajes adecuados son
I-ETE@N # 8@.6@&
A2licaciones en 2rocesa3iento de datos0
En estas aplicaciones son +recuentes las operaciones de creacin(
mantenimiento # consulta so%re +ic3eros # %ases de datos. ,entro de este
campo estar7an aplicaciones de gestin empresarial( como programas de
nominas( conta%ilidad +acturacin( control de inventario( etc. &enguajes aptos
para este tipo de aplicaciones son 6-G-& # .<&.
A2licaciones de trata3iento de teDtos0
Estas aplicaciones est0n asociadas al manejo de te$tos en lenguaje natural. 1n
lenguaje mu# adecuado para este tipo de aplicaciones es el 6.
A2licaciones en inteligencia artiCicial0
,entro de este campo( destacan las aplicaciones en sistemas e$pertos( juegos(
visin arti+icial( ro%tica. &os lenguajes m0s populares dentro del campo de la
inteligencia arti+icial son &I.8 # 8E-&-4
A2licaciones de 2rogra3acin de siste3as0
En este campo se incluir7an la programacin de so+t2are de inter+aA entre el
usuario # el 3ard2are( como son los mdulos de un sistema operativo # los
traductores. Tradicionalmente para estas aplicaciones se utiliAa%a el
Ensam%lador( no o%stante en la actualidad se muestran mu# adecuados los
lenguajes @,@( L-,1&@!2 # 6.
Lenguajes de Internet0
HTL&( C@F@( 8erl( 8H8( etc
%070 !I#OS DE LEN)UA*E DE #RO)RAMACI+N EN 6UNCI+N AL
ES!ILO DE #RO)RAMAR
&enguajes imperativos
&enguajes +uncionales
&enguajes lgicos 9declarativos:
&enguajes orientados a o%jetos
&enguajes con concurrencia
%090 LEN)UA*ES IM#ERA!I,OS
En este tipo de lenguajes( cu#o origen est0 ligado a la propia ar>uitectura de von
Neumann( la ar>uitectura consta de una secuencia de celdas( llamadas memoria(
en la cual se pueden guardar en +orma codi+icada( lo mismo datos >ue
instruccionesK # de un procesador( el cual es capaA de ejecutar de manera
secuencial una serie de operaciones( principalmente aritm=ticas # %ooleanas(
llamadas comandos. En general( un lenguaje imperativo o+rece al programador
conceptos >ue se traducen de +orma natural al modelo de la m0>uina.&os lenguajes
imperativos m0s destacados de la 3istoria 3an sido) 6OR!RAN- Algol- #ascal- C-
Modula<%- Ada
El programador( al utiliAar un lenguaje imperativo( por lo general tiene >ue
traducir la solucin a%stracta del pro%lema a t=rminos mu# primitivos( cercanos a
la m0>uina. &a distancia entre el nivel del raAonamiento 3umano # lo e$presa%le
por los lenguajes imperativos causa >ue sus programas sean m0s Jcomprensi%lesJ
para la m0>uina >ue para el 3om%re. Esta desventaja para nosotros( re+lejada en la
di+icultad >ue tenemos al construir programas en un lenguaje imperativo( se
vuelve una ventaja en el momento de la generacin del cdigo. El programa est0
e$presado en t=rminos tan cercanos a la m0>uina( >ue el cdigo generado es
relativamente parecido al programa original( lo >ue permite cierta e+iciencia en la
ejecucin.
Eje32lo:
Este ser7a el cdigo de un programa >ue determina el +actorial de un n5mero en un
lenguaje imperativo inventado)
procedimiento +actorial9entero n:S
entero resultado M 1K
mientras 9n X ": S
resultado M resultado N nK
n M n ! 1K
T
devuelve resultadoK
T
Este procedimiento 9o +uncin: reci%e un n5mero entero n. ,eclara una varia%le
resultado >ue ser0 el resultado +inal a devolver. Inicialmente( tiene como valor el
1. ,espu=s llega una estructura de control denominada %ucle( >ue se ejecuta
mientras la condicin e$presada entre los par=ntesis 9n X ": sea cierta. ,entro del
%ucle se multiplica la varia%le resultado por n # el valor se deja de nuevo en
resultado. &a siguiente sentencia 9n M n ! 1: es necesaria para ir 3aciendo el
+actorial( as7 como para salir en alg5n momento del %ucle. 8or 5ltimo( tras salir del
%ucle #a podemos devolver el valor +inal( >ue estar0 en la varia%le resultado.
Ntese >ue( si en un principio( la varia%le n es "( no se entrar0 en el %ucle al no ser
cierta la condicin( por lo >ue pasar7a directamente a devolver la varia%le
resultado( >ue tiene valor inicial 1 9"Y M 1:.
%0?0 LEN)UA*ES 6UNCIONALES
%0?0/0 CONCE#!O MA!EM@!ICO DE 6UNCI+N0
8uede ser de+inida como una corres2ondencia entre dos varia%les( una
llamada varia%le dependiente # otra llamada varia%le dependiente. Feamos la
siguiente notacin)
E F CGDH
Donde:
E: Es la varia%le dependiente de la +uncin. .e le llama dependiente por>ue
para >ue pueda tomar un valor( depende de los valores >ue pueda tomar la
varia%le D. Tam%i=n podemos decir >ue ZE esta en +uncin de D[.
D: Es la varia%le independiente de la +uncin. .e dice >ue es independiente #a
>ue puede tomar los valores >ue >uiera # no 3a# nada >ue se lo impidaK o sea(
tiene independencia.
C: .e puede decir >ue es el procedimiento o ecuacin >ue tomar0 a D para
devolverle un valor a E.
Feamos una +uncin mu# com5n)
E F D
%
I D
&a +uncin anterior tiene a E como varia%le dependiente # a D como varia%le
independiente( # el procedimiento es elevar a D 9varia%le independiente: al
cuadrado # sumarle D. 8or cada valor >ue tome D( a E le corresponder0 otro.
Tam%i=n podemos tener una +uncin con m0s de una varia%le dependiente...
E F D I J " / K GL I 1H
En el sistema anterior podemos encontrar >ue la varia%le dependiente 9en este
caso E: esta en +uncin de 3 varia%les independientes 9en este caso D- J- L:.
4eneralmente en las matem0ticas las varia%les dependientes est0n
representadas por la letra E( aun>ue tam%i=n las podemos representar con letras
como J- L( D- g- etc. siempre # cuando sean di+erentes de las varia%les
independientesK as7 mismo( la o las varia%les independientes se pueden
representar de la misma +orma( teniendo en cuenta >ue no de%en ser iguales a
las dependientes.
%0?0%0 CONCE#!O DE LEN)UA*ES 6UNCIONALES0
&os matem0ticos desde 3ace un %uen tiempo est0n resolviendo pro%lemas
usando el concepto de +uncin. 1na +uncin convierte ciertos datos en
resultados. .i supi=ramos cmo evaluar una +uncin( usando la computadora(
podr7amos resolver autom0ticamente muc3os pro%lemas. @s7 pensaron algunos
matem0ticos( >ue no le ten7an miedo a la m0>uina( e inventaron los lenguajes
de programacin +uncionales. @dem0s( aprovec3aron la posi%ilidad >ue tienen
las +unciones para manipular datos sim%licos( # no solamente num=ricos( # la
propiedad de las +unciones >ue les permite componer( creando de esta manera(
la oportunidad para resolver pro%lemas complejos a partir de las soluciones a
otros m0s sencillos. Tam%i=n se inclu# la posi%ilidad de de+inir +unciones
recursivamente.
1n lenguaje +uncional o+rece conceptos >ue son mu# entendi%les #
relativamente +0ciles de manejar para todos los >ue no se durmieron en las
clases de matem0ticas. El lenguaje +uncional m0s antiguo( # seguramente el
m0s popular 3asta la +ec3a( es LIS#( dise'ado por Lc6art3# en la segunda
mitad de los a'os ". .u 0rea de aplicacin es principalmente la Inteligencia
@rti+icial. En la d=cada de los 8" 3u%o una nueva ola de inter=s por los
lenguajes +uncionales( a'adiendo la tipi+icacin # algunos conceptos modernos
de modulariAacin # polimor+ismo( como es el caso del lenguaje ML0
8rogramar en un lenguaje +uncional signi+ica construir +unciones a partir de las
#a e$istentes. 8or lo tanto es importante conocer # comprender %ien las
+unciones >ue con+orman la %ase del lenguaje( as7 como las >ue #a +ueron
de+inidas previamente. ,e esta manera se pueden ir constru#endo aplicaciones
cada veA m0s complejas. &a desventaja de este modelo es >ue resulta %astante
alejado del modelo de la m0>uina de Fon Neumann #( por lo tanto( la
e+iciencia de ejecucin de los int=rpretes de lenguajes +uncionales no es
compara%le con la ejecucin de los programas imperativos precompilados.
8ara remediar la de+iciencia( se est0 %uscando utiliAar ar>uitecturas paralelas
>ue mejoren el desempe'o de los programas +uncionales( sin >ue 3asta la +ec3a
estos intentos tengan un impacto real importante.
%0?010 CA!E)OR(AS DE LEN)UA*ES 6UNCIONALES0
E$isten dos categor7as de lenguajes +uncionales) los +uncionales puros # los
37%ridos( &a di+erencia entre am%os estri%a en >ue los lenguajes +uncionales
37%ridos son menos dogm0ticos >ue los puros( al admitir conceptos tomados de
los lenguajes imperativos( como las secuencias de instrucciones o la
asignacin de varia%les. En contraste( los lenguajes +uncionales puros tienen
una ma#or potencia e$presiva( conservando a la veA su transparencia
re+erencial( algo >ue no se cumple siempre con un lenguaje +uncional 37%rido.
Entre los lenguajes +uncionales puros( ca%e destacar a HasVell # Liranda. &os
lenguajes +uncionales 37%ridos m0s conocidos son &isp( .c3eme( -caml #
.tandard L& 9estos dos 5ltimos( descendientes del lenguaje L&:.
%0?070 #ROLEMAS DEL MODELO IM#ERA!I,O
&os programas escritos en lenguajes de programacin tradicionales
9imperativo: como 8ascal( 6( @,@( etc. +orman una a%straccin de la m0>uina
de Fon!Neumann caracteriAada por)
Me3oria #rinci2al para almacenamiento de datos #
cdigo m0>uina.
Unidad Central de #roceso con una serie de registros de
almacenamiento temporal # un conjunto instrucciones de c0lculo
aritm=tico( modi+icacin de registros # acceso a la Lemoria 8rincipal.
&os programas imperativos est0n +ormados por una serie de datos glo%ales #
un conjunto de instrucciones cdigo. Estos dos elementos +orman una
a%straccin de los datos # cdigo de la memoria principal.
El programador tra%aja en un nivel cercano a la m0>uina lo >ue le permite
generar programas e+icientes. 6on esta pro$imidad aparece( sin em%argo( una
dependencia entre el algoritmo # la ar>uitectura >ue impide( por ejemplo(
utiliAar algoritmos programados para ar>uitecturas secuenciales en
ar>uitecturas paralelas.
&os algoritmos escritos en lenguajes imperativos se e$presan mediante una
secuencia de instrucciones >ue modi+ican el estado de un programa accediendo
a los datos glo%ales de la memoria. En este punto es donde empieAan los
pro%lemas)
Eje32lo
8rogram prue%aK
var +lag)%ooleanK
+unction + 9n) integer:)integerK
%egin
+lag)Mnot +lagK
i+ +lag t3en +)MnK
else +)M2NnK
endK
........
!!8rograma principal
%egin
+lag)MtrueK
......
2rite9+91::K retorna 2
2rite9+91::K retorna 1
.......
2rite9+91: O +92::K retorna 4
2rite9+92: O +91::K retorna 5
En el primer caso la e$presin +91: retorna valores di+erentes dependiendo de
la secuencia de ejecucin # en el segundo no se cumplen propiedades
matem0ticas simples tales como la conmutatividad. Estos ejemplos ponen en
evidencia >ue ciertas caracter7sticas de los lenguajes imperativos tales como la
asignacin pueden traer consigo e+ectos laterales inesperados >ue oscurecen la
sem0ntica del programaK en consecuencia se 3ace di+7cil demostrar >ue los
programas cumplen con los re>uerimientos especi+icados # >ue est=n li%res de
errores.
Este # otros pro%lemas son in3erentes al modelo computacional utiliAado( por
ende una solucin +acti%le de ser aplicada puede ser cam%iar el modelo
computacional. Entre otras alternativas se encuentran el modelo +uncional o
aplicativo cu#o o%jetivo es descri%ir los pro%lemas mediante +unciones
matem0ticas sin e+ectos laterales( # el modelo lgico o declarativo >ue
descri%e los pro%lemas mediante relaciones entre o%jetos o entidades.
%0'0 LEN)UA*ES L+)ICOS GDECLARA!I,OSH
-tra +orma de raAonar para resolver pro%lemas en matem0ticas se +undamenta en
la lgica de primer orden. El conocimiento %0sico de las matem0ticas se puede
representar en la lgica en +orma de a$iomas( a los cuales se a'aden reglas
+ormales para deducir cosas verdaderas 9teoremas: a partir de los a$iomas. 4racias
al tra%ajo de algunos matem0ticos( de +inales de siglo pasado # principios de =ste(
se encontr la manera de automatiAar computacionalmente el raAonamiento lgico
!particularmente para un su%conjunto signi+icativo de la lgica de primer orden!
>ue permiti >ue la lgica matem0tica diera origen a otro tipo de lenguajes de
programacin( conocidos como lenguajes lgicos. Tam%i=n se conoce a estos
lenguajes( # a los +uncionales( como lenguajes declarativos( por>ue el
programador( parar solucionar un pro%lema( todo lo >ue tiene >ue 3acer es
descri%irlo v7a a$iomas # reglas de deduccin en el caso de la programacin lgica
# v7a +unciones en el caso de la programacin +uncional.
En los lenguajes lgicos se utiliAa el +ormalismo de la lgica para representar el
conocimiento so%re un pro%lema # para 3acer preguntas >ue( si se demuestra >ue
se pueden deducir a partir del conocimiento dado en +orma de a$iomas # de las
reglas de deduccin estipuladas( se vuelven teoremas. @s7 se encuentran
soluciones a pro%lemas +ormulados como preguntas. 6on %ase en la in+ormacin
e$presada dentro de la lgica de primer orden( se +ormulan las preguntas so%re el
dominio del pro%lema # el int=rprete del lenguaje lgico trata de encontrar la
respuesta autom0ticamente. El conocimiento so%re el pro%lema se e$presa en
+orma de predicados 9a$iomas: >ue esta%lecen relaciones so%re los s7m%olos >ue
representan los datos del dominio del pro%lema.
En el caso de la programacin lgica( el tra%ajo del programador se restringe a la
%uena descripcin del pro%lema en +orma de 3ec3os # reglas. @ partir de =sta se
pueden encontrar muc3as soluciones dependiendo de como se +ormulen las
preguntas 9metas:( >ue tienen sentido para el pro%lema. .i el programa est0 %ien
de+inido( el sistema encuentra autom0ticamente las respuestas a las preguntas
+ormuladas. En este caso #a no es necesario de+inir el algoritmo de solucin( como
en la programacin imperativa( en cam%io( lo +undamental a>u7 es e$presar %ien el
conocimiento so%re el pro%lema mismo. En programacin lgica( al igual >ue en
programacin +uncional( el programa( en este caso los 3ec3os # las reglas( est0n
mu# alejados del modelo von Neumann >ue posee la m0>uina en la >ue tienen >ue
ser interpretadosK por lo tanto( la e+iciencia de la ejecucin no puede ser
compara%le con la de un programa e>uivalente escrito en un lenguaje imperativo.
.in em%argo( para cierto tipo de pro%lemas( la +ormulacin del programa mismo
puede ser muc3o m0s sencilla # natural 9para un programador e$perimentado( por
supuesto:.
#ROLO)
8rolog( proveniente del +ranc=s 8rogramation et &ogi>ue( sus or7genes se
remotan a los inicios de la d=cada de los 7" con los tra%ajos del grupo de @.
6olmerauer en Larsella( Irancia. Es un lenguaje de programacin lgico e
interpretado( %astante popular en el medio de investigacin en Inteligencia
@rti+icial.
Historia
.e trata de un lenguaje de programacin ideado a principios de los a'os 7"
en la universidad de @i$!Larseille por los pro+esores @lain 6olmerauer #
83illipe Eoussel. Inicialmente se trata%a de un lenguaje totalmente
interpretado 3asta >ue( a mediados de los 7"( ,avid H.,. Uarren
desarroll un compilador capaA de traducir 8rolog en un conjunto de
instrucciones de una m0>uina a%stracta denominada Uarren @%stract
Lac3ine( o a%reviadamente( U@L. ,esde entonces 8rolog es un lenguaje
semi!interpretado.
8rolog se enmarca en el paradigma de los lenguajes lgicos( lo >ue lo
di+erencia enormemente de otros lenguajes m0s populares tales como
Iortran( 8ascal( 6.
Retrosegui3iento
En todos los mencionados( las instrucciones se ejecutan normalmente en
orden secuencial( es decir( una a continuacin de otra( en el mismo orden
en >ue est0n escritas( >ue slo var7a cuando se alcanAa una instruccin de
control 9un %ucle( una instruccin condicional o una trans+erencia:.
&os programas en 8rolog se componen de cl0usulas de Horn >ue
constitu#en reglas del tipo Jmodus ponendo ponensJ( es decir( J.i es
verdad el antecedente( entonces es verdad el consecuenteJ. No o%stante( la
+orma de escri%ir las cl0usulas de Horn es al contrario de lo 3a%itual.
8rimero se escri%e el consecuente # luego el antecedente. El antecedente
puede ser una conjuncin de condiciones >ue se denomina secuencia de
o%jetivos. 6ada o%jetivo se separa con una coma # puede considerarse
similar a una instruccin o llamada a procedimiento de los lenguajes
imperativos. En 8rolog no e$isten instrucciones de control. .u ejecucin se
%asa en dos conceptos) la uni+icacin # el %acVtracVing.
4racias a la uni+icacin( cada o%jetivo determina un su%conjunto de
cl0usulas suscepti%les de ser ejecutadas. 6ada una de ellas se denomina
punto de eleccin. 8rolog selecciona el primer punto de eleccin # sigue
ejecutando el programa 3asta determinar si el o%jetivo es verdadero o
+also.
En caso de ser +also entra en juego el \%acVtracVing\( >ue consiste en
des3acer todo lo ejecutado situando el programa en el mismo estado en el
>ue esta%a justo antes de llegar al punto de eleccin. Entonces se toma el
siguiente punto de eleccin >ue esta%a pendiente # se repite de nuevo el
proceso. Todos los o%jetivos terminan su ejecucin %ien en =$ito
9JverdaderoJ:( %ien en +allo 9J+alsoJ:.
ED2resiones
8rolog cuenta con operadores para la uni+icacin # comparacin sea con
evaluacin o sea sim%lica como lo siguiente)
D is P ]uni+icacin con evaluacin.
D M P ]uni+icacin sim%lica
DM)MP ]comparacin con evaluacin
DMMP ]comparacin sim%lica.
Listas
&a representacin de 3ec3os simples no es lo com5n en la clasi+icacin de
elementos( sino >ue se agrupan los elementos de un mismo tipo en una
lista.
Eje32lo:
] .i >ueremos 3allar la longitud de una lista.
] &a longitud de una lista vacia es ".
] &a longitud de cual>uier lista es la longitud de la cola O 1.
longitud9^_(":.
longitud9^H`T_(N:)!longitud9T(N":( N is N" O 1.
?! longitud9^a(%(c_(&:.
3
?! longitud9^a(%(c_(*:.
No
] .i >ueremos determinar si un elemento es pertenece a una lista.
] El elemento pertenece a la lista si coincide con la ca%eAa de la lista.
] El elemento pertenece a la lista si es se encuentra en la cola de la lista.
pertenece9D(^D`a_:.
pertenece9D(^a`E_:)! pertenece9D(E:.
?! pertenece9%(^a(%(c_:.
Pes
?! pertenece9%(^a(^%(c__:.
No
?! pertenece9^%(c_(^a(^%(c__:.
Pes
] .i >ueremos eliminar un elemento de la lista.
] .i D es la ca%eAa de la lista( la cola T es la lista sin D
] .i D no es la ca%eAa de la lista( conservamos la ca%eAa de la lista
] como parte de la respuesta # continuamos eliminando D de la cola T.
elimina 9D(^D`T_(T:.
elimina 9D(^H`T_(^H`T1_:)! elimina 9D(T(T1:.
?! elimina91(^1(2(3(*_(E:.
E M ^2(3(*_
?! elimina91(E(^2(3_:.
E M ^1( 2( 3_
E M ^2( 1( 3_
E M ^2( 3( 1_
] .i >ueremos calcular la inversa de una lista.
] &a inversa de una lista vacia es una lista vacia.
] &a inversa de H`T es la inversa de T concatenada con H.
inversa9^_(^_:.
inversa9^H`T_(&:)! inversa9T(E:( concatenar9E(^H_(&:.
?! inversa9^a(%(c(d_(^d(c(%(a_:.
Pes
%0;0 LEN)UA*ES ORIEN!ADOS A O*E!OS
@ mediados de los a'os /" se empeA a vislum%rar el uso de las computadoras
para la simulacin de pro%lemas del mundo real. 8ero el mundo real est0 lleno de
o%jetos( en la ma#or7a de los casos complejos( los cuales di+7cilmente se traducen a
los tipos de datos primitivos de los lenguajes imperativos. @s7 es >ue a dos
noruegos( ,a3l # N#gaard( se les ocurri el concepto de o%jeto # sus colecciones(
llamadas clases de o%jetos( >ue permitieron introducir a%stracciones de datos a los
lenguajes de programacin. &a posi%ilidad de reutiliAacin del cdigo # sus
indispensa%les modi+icaciones( se re+lejaron en la idea de las jerar>u7as de
3erencia de clases. @ ellos tam%i=n les de%emos el concepto de polimor+ismo
introducido v7a procedimientos virtuales. Todos estos conceptos +ueron
presentados en el lenguaje .imula /7( desde el a'o 19/7. @un>ue pensado como
lenguaje de propsito general( .imula tuvo su ma#or =$ito en las aplicaciones de
simulacin discreta( gracias a la clase .IL1&@TI-N >ue +acilita%a
considera%lemente la programacin.
&a comunidad in+orm0tica 3a tardado demasiado en entender la utilidad de los
conceptos %0sicos de .imula /7( >ue 3o# identi+icamos como conceptos del
modelo de o%jetos. Tuvimos >ue esperar 3asta los a'os 8" para vivir una
verdadera ola de propuestas de lenguajes de programacin con conceptos de
o%jetos enca%eAada por S3alltalM- CII- EiCCel- Modula<1- Ada :9 # terminando
con *a5a. &a moda de o%jetos se 3a e$tendido de los lenguajes de programacin a
la Ingenier7a de .o+t2are
&a reutiliAacin de clases previamente pro%adas en distintos sistemas tam%i=n es
otro punto a +avor. .in em%argo( el modelo de o%jetos( a la 3ora de ser interpretado
en la ar>uitectura von Neumann conlleva un e$cesivo manejo din0mico de
memoria de%ido a la constante creacin de o%jetos( as7 como a una carga de
cdigo +uerte causada por la constante invocacin de m=todos. 8or lo tanto( los
programas en lenguajes orientados a o%jetos siempre pierden en e+iciencia( en
tiempo # memoria( contra los programas e>uivalentes en lenguajes imperativos.
8ara consolarnos( los e$pertos dicen >ue les ganan en la comprensin de cdigo.
Caractersticas Cunda3entales de la #OO:
1. Enca2sula3iento: Es la ocultacin de in+ormacin. .igni+ica mantener la
in+ormacin dentro del o%jeto # mantenerlo como una caja negra. 8uede
ser accedida por m=todos.
2. A8straccin: Es la capacidad de aislar # encapsular la in+ormacin del
dise'o # la ejecucin. Es la capacidad para identi+icar atri%utos # m=todos.
Herencia: Es la propiedad >ue permite a los o%jetos crearse a partir de
otros o%jetos.
3. #oli3orCis3o: Es la capacidad de >ue di+erentes o%jetos reaccionen de
distinta +orma a un mismo mensaje.
%0:0 LEN)UA*ES CON CONCURRENCIA
&a necesidad de o+recer concurrencia en el acceso a los recursos computacionales
se remonta a los primeros sistemas operativos. Lientras >ue un programa
realiAa%a una operacin de entrada o salida otro podr7a goAar del tiempo del
procesador para sumar dos n5meros( por ejemplo. @provec3ar al m0$imo los
recursos computacionales +ue una necesidad apremiante( so%re todo en la =poca en
>ue las computadoras eran caras # escasasK el sistema operativo ten7a >ue o+recer
la ejecucin concurrente # segura de programas de varios usuarios( >ue desde
distintas terminales utiliAa%an un solo procesador( # as7 surgi la necesidad de
introducir algunos conceptos de programacin concurrente para programar los
sistemas operativos.
8osteriormente( cuando los procesadores cam%iaron de tama'o # de precio( se
a%ri la posi%ilidad de contar con varios procesadores en una m0>uina # o+recer el
procesamiento en paralelo( es decir( procesar varios programas al mismo tiempo.
Esto dio el impulso a la creacin de lenguajes >ue permit7an e$presar el
paralelismo. Iinalmente( llegaron las redes de computadoras( >ue tam%i=n o+recen
la posi%ilidad de ejecucin en paralelo( pero con procesadores distantes( lo cual
conocemos como la programacin distri%uida.
Histricamente encontramos en la literatura soluciones conceptuales #
mecanismos tales como) sem0+oros( regiones cr7ticas( monitores( env7o de
mensajes 96.8:( llamadas a procedimientos remotos 9E86:( >ue posteriormente se
inclu#eron como partes de los lenguajes de programacin en 6oncurrent 8ascal(
Lodula( @da( -66@L( # 5ltimamente en Cava.
1no de los ejemplos m0s importantes es el modelo de env7o de mensajes de 6.8
de Hoare( para las ar>uitecturas paralelas # distri%uidas( el cual no solamente
+ructi+ic en una propuesta del lenguaje de programacin -66@L( sino dio
origen a una nueva +amilia de procesadores( llamados JtransputersJ( >ue
+0cilmente se componen en una ar>uitectura paralela.
Es di+7cil evaluar las propuestas e$istentes de lenguajes para la programacin
concurrente( paralela # distri%uida. 8rimero( por>ue los programadores est0n
acostum%rados a la programacin secuencial # cual>uier uso de estos mecanismos
les di+iculta la construccin # el an0lisis de programas. 8or otro lado( este tipo de
conceptos en el pasado +ue manejado principalmente a nivel de sistemas
operativos( protocolos de comunicacin( etc=tera( donde la e+iciencia era crucial( #
por lo tanto no se utiliAa%an lenguajes de alto nivel para la programacin. Ho# en
d7a( la programacin de sistemas complejos tiene >ue incluir las partes de
comunicaciones( programacin distri%uida # concurrencia. Esto lo sa%en los
creadores de los lenguajes m0s recientes( >ue integran conceptos para manejar) los
3ilos de control( comunicacin( sincroniAacin # no determinismoK el 3ard2are #
las aplicaciones se los e$igen.
%0/&0 E,OLUCI+N DE LOS LEN)UA*ES DE #RO)RAMACI+N
DECLARA!I,OS
)rNCico NO /: E5olucin de los lenguajes de 2rogra3acin Declarati5os
%0//0 E,OLUCI+N DE LOS LEN)UA*ES DE #RO)RAMACI+N
ORIEN!ADO A O*E!OS E IM#ERA!I,OS
)rNCico NO %: E5olucin de los lenguajes de 2rogra3acin OO e I32erati5os
CA#(!ULO III: CONCE#!OS EN LOS LEN)UA*ES DE
#RO)RAMACI+N
10/0 PBUQ ES LO BUE CONS!I!U.E UN UEN LEN)UA*ER
10/0/0 A!RIU!OS DE UN UEN LEN)UA*E
Claridad- sencilleJ E unidad Glegi8ilidadH: &a sinta$is
del lenguaje a+ecta la +acilidad con la >ue un programa se puede escri%ir(
por a prue%a( # m0s tarde entender # modi+icar.
Ortogonalidad: 6apacidad para com%inar varias
caracter7sticas de un lenguaje en todas las com%inaciones posi%les( de
manera >ue todas ellas tengan signi+icado.
Naturalidad 2ara la a2licacin: &a sinta$is del
programa de%e permitir >ue la estructura del programa re+leje la estructura
lgica su%#acente.
A2oEo 2ara la a8straccin: 1na parte importante de
la tarea del programador es pro#ectar las a%stracciones adecuadas para
la solucin del pro%lema # luego implementar esas a%stracciones
empleando las capacidades m0s primitivas >ue provee el lenguaje de
programacin mismo.
6acilidad 2ara 5eriCicar 2rogra3as: &a sencilleA de la
estructura sem0ntica # sint0ctica a#uda a simpli+icar la veri+icacin de
programas.
Entorno de 2rogra3acin: Iacilita el tra%ajo con un
lenguaje t=cnicamente d=%il en comparacin con un lenguaje m0s +uerte
con poco apo#o e$terno.
8orta%ilidad de programas
6osto de uso)
1. 6osto de ejecucin del programa.
2. 6osto de traduccin de programas.
3. 6osto de creacin( prue%a # uso de programas.
*. 6osto de mantenimiento de los programas) costo total del ciclo de vida.
10/0%0 ES!ANDARISACI+N DE LOS LEN)UA*ES
&os est0ndares son en general de dos clases)
EstNndares 2atentados: .on las de+iniciones
ela%oradas por la compa'7a >ue desarroll el lenguaje # >ue es su
propietaria.
EstNndares de consenso: .e trata de documentos
ela%orados por organiAaciones con %ase en un acuerdo entre los
participantes pertinentes. L=todo principal para asegurar la uni+ormidad
entre varias implementaciones de un lenguaje. Ejemplo) @N.I( IEEE( I.-(
etc..
10%0 SIN!A=IS DE LEN)UA*ES DE #RO)RAMACI+N
&a sinta$is suministra in+ormacin signi+icativa >ue se necesita para entender un
programa # proporciona in+ormacin imprescindi%le para la traduccin del
programa +uente a un programa o%jeto.
.e necesita algo m0s >ue slo estructuras sint0cticas para la plena descripcin de
un lenguaje de programacin. -tros atri%utos %ajo el t=rmino general de
sem0ntica( como el uso de declaraciones( operaciones( control de secuencia #
entornos de re+inamiento( a+ectan a una varia%le # no siempre est0n determinados
por reglas de sinta$is.
CRI!ERIOS )ENERALES DE SIN!A=IS
El propsito primordial de la sinta$is es proveer una notacin para la
comunicacin entre el programador # el procesador de lenguajes de programacin.
&os detalles de la sinta$is se eligen en gran medida con %ase en criterios
secundarios( como)
Legi8ilidad: 1n programa es legi%le si la estructura su%#acente del
algoritmo # los datos >ue el programa representa >uedan de mani+iesto al
inspeccionar el te$to del programa.
6acilidad de escritura: .uele 3allarse en con+licto con las
caracter7sticas >ue +acilitan su lectura. Este atri%uto mejora a trav=s del uso
de estructuras sint0cticas concisas # regulares.
1na sinta$is es redundante si comunica el mismo elemento de in+ormacin en m0s
de una +orma. 6ierta redundancia es 5til en la sinta$is de lenguajes de
programacin por>ue +acilita la lectura del programa # tam%i=n permite revisar en
%usca de errores durante la traduccin.
6acilidad de 5eriCicacin) Tiene relacin con la legi%ilidad #
+acilidad de escritura. .e necesitan t=cnicas >ue permitan compro%ar >ue el
programa es matem0ticamente correcto.
6acilidad de traduccin: &os programas de%en ser +0ciles de
traducir a una +orma ejecuta%le. Est0 relacionado con las necesidades del
traductor >ue procesa el programa escrito.
&a traduccin de los programas se di+iculta con+orme aumenta el n5mero
de construcciones sint0cticas especiales.
Carencia de a38igTedad: 1na construccin am%igua permite dos
o m0s interpretaciones distintas. El pro%lema de am%igbedad surge por lo
com5n no en la estructura de elementos individuales del programa( sino en
la interaccin entre di+erentes estructuras 9Ej. 6ondicionales:.
1010 !I#OS DE DA!OS
Num=ricos) Entero( Eeal.
Gooleano.
6ar0cter.
,e+inidos por el usuario) tipos especi+icados por el usuario como
limitaciones de los %0sicos.
Enumerados( su%rangos( modularesW
@rra#s) son tipos con tama'o +ijo # todos los elementos del mismo
tipo.
.tring est0 de+inido e muc3os lenguajes como un arra# de caracteres.
Eegistros) Es una estructura de datos +ormada por un numero +ijo de
componentes de distinto tipo.
8unteros) almacena la direccin de memoria de otro o%jeto de datos.
Ee+erencia) no se pueden manejar directamente( lo 3ace el
compilador.
Tipo +uncin) se considera un tipo por poderse incluir en una
e$presin( # suele ir acompa'ado de su descriptor.
1070 AS!RACCI+N
&a a%straccin nos permite simpli+icar el an0lisis # resolucin de un pro%lema
separando las caracter7sticas >ue son relevantes de a>uellas >ue no lo son. &a
relevancia depender0 +uertemente del conte$to. 1n ejemplo t7pico de a%straccin
es una jerar>u7a de o%jetos determinada por sus caracter7sticas comunes.
@un>ue la a%straccin es un concepto general aplica%le a cual>uier campo
nosotros estamos interesados en la a%straccin >ue proporciona un lenguaje de
programacin. En este sentido la aportacin m0s importante 3a sido el desarrollo
de los lenguajes de alto nivel( =stos nos permiten utiliAar ciertas construcciones de
alto nivel en lugar de una secuencia de instrucciones m0>uina. @5n as7( el nivel de
a%straccin proporcionado por un lenguaje de programacin resulta insu+iciente.
8odemos aumentar el nivel de a%straccin 3aciendo >ue el lenguaje de
programacin inclu#a mecanismos >ue permitan construir al usuario sus propias
a%stracciones. El mecanismo m0s com5n para tal +in es el uso de +unciones #
procedimientos( aun>ue e$isten otros mecanismos.
&os lenguajes de programacin orientados a o%jetos o+recen un cada veA m0s
amplio a%anico de estructuras de datos organiAadas jer0r>uicamente 9listas( pilas(
colas( etc.: junto con primitivas para manejarlas agrupadas en lo >ue
3a%itualmente se conoce como clase( adem0s( el usuario puede de+inir nuevas
clases
1090 AS!RACCI+N EN #RO)RAMACI+N
6uando la computacin esta%a en su in+ancia( la ma#or7a de los programas se
escri%7an en ensam%lador por un programador( # no se considerar7an como grandes
programas seg5n los est0ndares de 3o# en d7a. @5n as7( en la medida en >ue los
programas se 3icieron m0s complejos( los programadores encontraron m0s
di+icultades para recordar toda la in+ormacin >ue necesita%an para desarrollar o
eliminar errores de sus programas.
@un>ue la introduccin de lenguajes de alto nivel resolvi algunas di+icultades( al
mismo tiempo increment las e$pectativas de la gente acerca de lo >ue podr7a
3acer una computadora( de tal +orma >ue slo provoc la aparicin de un ma#or
n5mero de pro%lemas. @s7( a medida >ue se intenta%an resolver pro%lemas m0s
complejos por medio de una computadora( ma#or era la tarea >ue de%7a desarrollar
el programador( re%asando la capacidad incluso de los mejores programadores. En
consecuencia( comenAaron a proli+erar e>uipos de programadores >ue tra%aja%an
conjuntamente para emprender grandes tareas de programacin.
.e o%serv entonces un pro%lema >ue a5n 3o# no se 3a a%ordado de +orma
completamente satis+actoria) los sistemas de so+t2are son sistemas complejos con
un alto grado de intercone$in. &a intercone$in es la dependencia de una parte
del cdigo de otra seccin de cdigo.
.urgieron as7 diversas t=cnicas # mecanismos para tratar de reducir el pro%lema de
la complejidad. &a a%straccin es uno de estos mecanismos # es posi%lemente el
m0s importante de todos. El mecanismo de a%straccin permite descomponer de
+orma productiva un pro%lema mediante el cam%io del nivel de detalle a
considerar( pero es algo intangi%le. .urge por tanto la necesidad de descri%irla de
alguna +orma( la especi+icacin es esta descripcin. &a a%straccin +uncionalK es
decir( la idea de crear procedimientos # +unciones e invocarlos mediante un
nom%re( +ue uno de los primeros mecanismos de a%straccin >ue se usaron
ampliamente en los lenguajes de programacin. &os procedimientos permit7an >ue
las tareas >ue se ejecuta%an varias veces( +ueran agrupadas en un lugar para
reutiliAarlas( en veA de duplicar el cdigo una # otra veA. Es este tipo de
a%straccin lo importante es >u= 3ace la +uncin # no importa cmo lo 3ace. El
usuario del procedimiento solo necesita conocer la especi+icacin de la a%straccin
# puede ignorar el resto de detalles.
10?0 CLASES DE AS!RACCI+N
10?0/0 AS!RACCI+N DE CON!ROL
Hace re+erencia a los mecanismos necesarios para representar el +lujo de
control de un programa( evitando detalles de %ajo nivel. .e su%divide en) nivel
de sentencias %0sicas # a nivel de su%programas o unidades de programa.
.entencias condicionales) I+Qelse( alternativa m5ltiple
9s2it3:.
.entencias iterativas) Ior( U3ile # repeat.
A8straccin 2rocedi3ental
Su82rogra3a) conjunto de l7neas de cdigo con cierta
independencia del resto.
#rocedi3ientos: su%programas >ue tienen de " a n
par0metros( sin tipo( no pueden ser usados en e$presiones # pueden
devolver de " a n resultados distintos.
6unciones: pueden tener de " a n argumentos de entrada(
devuelve solo 1 resultado siempre. Tiene tipo # se puede usar en una
e$presin.
#aso de 2arN3etros:
Iormas de paso de par0metros)
8or re+erencia) se pasa la direccin de memoria del
par0metro 9EQ.:.
8or copia)
6opia por valor) se crea una var temporal copi0ndole el
valor del par0metro.9E:
6opia por resultado) se crea una var local( # al aca%ar se
devuelve el resultado 9.:
6opia por valor!resultado) se crea una var local pas0ndole
el valor( con la >ue se tra%aja( # al aca%ar se devuelve el resultado
Iormas de asignar los argumentos)
8or posicin) se asignan los par0metros +ormales con los
reales por orden.
8or nom%re) en la llamada se a'ade el nom%re del
par0metro +ormal.
8or de+ecto) toma un valor por de+ecto especi+icado en
compilacin si no se le da ninguno.
Eje32lo:
Void ordenar (int a[],int n) el usuario no necesita conocer los detalles de
cmo se realiAa el ordenamiento( solo de%e suministrar un arreglo # su tama'o
# reci%ir0 el arreglo ordenado 9en un orden predeterminado como ascendente:
10?0%0 AS!RACCI+N DE DA!OS0
1na a%straccin de datos 9tipo de dato o tipo a%stracto de dato: es un nuevo
tipo de dato m0s un conjunto de operaciones >ue permiten manipular los
o%jetos de dic3o tipo. En esta de+inicin juega un papel importante el uso de la
pala%ra o%jeto en lugar de varia%le. &a di+erencia entre am%os conceptos se
e$plicar0 m0s adelante.
&a correcta utiliAacin de los tipos a%stractos de datos 9T@,s en lo sucesivo:
en el dise'o de programas da lugar a programas de gran modularidad #
calidad)
.on m0s legi%les
.on m0s +0ciles de interpretar
.on m0s +0ciles de modi+icar
10'0 !I#OS AS!RAC!OS DE DA!OS G!ADSH
Es una estructura de datos junto a las instrucciones para manejarlo( 3aciendo
invisi%le ciertas partes al usuario programador. 8ermite la asociacin de una
representacin con sus operaciones concretas en una unidad adecuada de lenguaje
>ue incorpora los nuevos tipos # el ocultamiento de la representacin del nuevo
tipo a las unidades >ue lo usan.
Tipos gen=ricos( genericidad) consiste en >ue las entidades de programa puedan
tra%ajar con independencia de los tipos de datos concretos. 8ara usarse 3a# >ue
instanciarlos.
10;0 LEN)UA*ES DE #RO)RAMACI+N . !ADS
&a a%straccin de datos es una t=cnica de dise'o de programas >ue promete un
alto grado de modularidad # un desarrollo independiente de la implementacin de
dic3a a%straccin # de la aplicacin del programa. 8or tratarse de una t=cnica de
dise'o( su utiliAacin es en su ma#or parte independiente del lenguaje de
programacin( sin em%argo( el uso e implementacin de T@,s con lenguajes de
programacin >ue no los soportan convenientemente puede dar lugar a
de+iciencias en algunos de los aspectos siguientes)
Ocultacin de la re2resentacin0 &os lenguajes >ue no
soportan T@,s no pueden c3e>uear el %uen uso de la a%straccin de datos(
dada la imposi%ilidad de ocultar a los usuarios de la a%straccin la
representacin de los o%jetos
InicialiJacin de las estructuras de datos. &os lenguajes
>ue no soportan T@,s no disponen de un procedimiento autom0tico de
inicialiAacin de las estructuras de datos >ue se utiliAan para representar a los
o%jetos del T@,. Esto supone >ue al principio de los programas >ue utilicen
un T@, de%e invocarse a una accin para inicialiAar convenientemente dic3as
estructuras 9operacin no relacionada con los o%jetos
Co32ilacin inde2endiente0 En los lenguajes >ue
soportan T@,s( el cdigo de estos se puede separar del cdigo de los
programas de aplicacin # compilarlos independientemente. En todo caso( esta
+acilidad se tiene en cual>uier lenguaje >ue soporte la compilacin
independiente.
#ara3etriJacin de ti2os0 En los lenguajes >ue no
soportan T@,s no se puede parametriAar una de+inicin de tipo con otro tipoK
es decir( no se pueden realiAar a%stracciones 9+uncionales o de datos: de tipos
desconocidos.
A8stracciones 2oli3rCicas0 En los lenguajes >ue no
soportan T@,s no se pueden construir a%stracciones >ue puedan ser utiliAadas
por o%jetos de di+erentes tipos.
Los ti2os deCinidos 2or el usuario no se co32ortan
co3o los 2redeCinidos del lenguaje. @s7( por ejemplo( un o%jeto de tipo
Eacional no se crea por completo al declararlo siendo necesario realiAar una
llamada posterior a la operacin 6rearaEacional para inicialiAarlo
convenientemente.
Esta 5ltima de+iciencia provoca >ue en un lenguaje de programacin >ue no
soporte T@,s puedan e$istir o%jetos cu#a representacin no sea v0lida sin >ue ello
sea detectado por el compilador. Esto o%liga al usuario a utiliAar escrupulosamente
el T@,( o %ien( al desarrollador de la a%straccin de datos a realiAar
implementaciones de =ste >ue tuvieran en cuenta =ste 3ec3o.
10:0 LEN)UA*ES DE #RO)RAMACI+N BUE DEER(AS A#RENDER
10:0/0 #H#
8H8 usa una meAcla entre interpretacin # compilacin para intentar o+recer a
los programadores la mejor meAcla entre rendimiento # +le$i%ilidad.
8H8 compila para tu codigo una serie de instrucciones 9llamadas opcodes:
siempre >ue estas son accedidas. Estas instrucciones son entonces ejecutadas
una por una 3asta >ue el script termina. Esto es di+erente a la manera
convencional de compilacion de lenguajes como 6OO donde el cdigo es
compilado a cdigo ejecuta%le >ue es despues ejecutado. 83p es recompilado
cada veA >ue se solicita un script. 1na ventaja importante de interpretar el
cdigo es >ue toda la memoria usada por tu cdigo es manejada por 8H8( # el
lenguaje autom0ticamente vac7a esta memoria cuando el script +inaliAa. Esto
signi+ica >ue tu no tienes >ue preocuparte de las cone$iones a la %ase de datos(
por>ue 8H8 lo 3ar0 por ti.
P#or UuV de8eras a2renderloR
Es uno de los lenguajes de programacin m0s populares( la gran +luideA #
rapideA de sus scripts # su prometedor +uturo( desarrollar aplicaciones Ue%s
utiliAando lenguajes como 6 o 6-G-& son cosas del pasado.
10:0%0 CW
6B es un lenguaje de propsito general orientado a o%jetos creado por
Licroso+t para su plata+orma .NET.
.u sinta$is %0sica deriva de 6Q6OO # utiliAa el modelo de o%jetos de la
plata+orma .NET el cual es similar al de Cava aun>ue inclu#e mejoras
derivadas de otros lenguajes. 6B +ue dise'ado para com%inar el control a %ajo
nivel de lenguajes como 6 # la velocidad de programacin de lenguajes como
Fisual Gasic.
P#or UuV de8eras a2renderloR
Es una parte esencial de la plata+orma .Net( 6B com%ina los mejores elementos
de m5ltiples lenguajes de amplia di+usin como 6OO( Cava( Fisual Gasic o
,elp3i. ,e 3ec3o( su creador @nders Heljs%erg +ue tam%i=n el creador de
muc3os otros lenguajes # entornos como Tur%o 8ascal( ,elp3i o Fisual COO.
&a idea principal detr0s del lenguaje es com%inar la potencia de lenguajes
como 6OO con la sencilleA de lenguajes como Fisual Gasic( # >ue adem0s la
migracin a este lenguaje por los programadores de 6Q6OOQCava sea lo m0s
inmediata posi%le.
10:010 A*A=
@C@D no es un lenguaje e$actamente su nom%re viene dado por el acrnimo
de @s#nc3ronous Cava.cript @nd DL& # es posi%lemente la ma#or novedad
en cuanto a programacin 2e% en estos 5ltimos a'os.
El coraAn de @ja$ es el o%jeto DL&HttpEe>uest >ue nos permite realiAar una
cone$in al servidor # al enviarle una peticin # reci%ir la respuesta >ue
procesaremos en nuestro cdigo Cavascript( estamos 3a%lando del verdadero
motor de @ja$( por ejemplo gracias a este o%jeto podemos desde una p0gina
HTL& leer datos de una 2e% o enviar datos de un +ormulario sin necesidad de
recargar la p0gina.
P#or UuV de8eras a2renderloR
&a demanda de @C@D no slo es ampl7a sino >ue de calidad de%ido a la
di+icultad de aprendiAaje >ue conlleva( si la 3erramienta de Licroso+t( @tlas(
destinada a la realiAacin de aplicaciones @C@D tiene =$ito puede supone un
aumento en la demanda de esta tecnolog7a.
10:070 *A,ASCRI#!
.e trata de un lenguaje de programacin del lado del cliente( por>ue es el
navegador el >ue soporta la carga de procesamiento. 4racias a su
compati%ilidad con la ma#or7a de los navegadores modernos( es el lenguaje de
programacin del lado del cliente m0s utiliAado.
P#or UuV de8eras a2renderloR
&a raAn de ma#or peso es >ue es utiliAado por millones de p0ginas 2e%s para
validar +ormularios( crear cooVies( detectar navegadores # mejorar el dise'o(
su +0cil aprendiAaje lo 3ace un lenguaje mu# demandado.
10:090 #ERL
8erl es la alternativa m0s popular a 8H8( seguramente por>ue es el lenguaje
m0s antiguo tam%ien dentro de las alternativas. En internet nos encontramos
numerosos recursos >ue utiliAan 8erl( muc3os de las aplicaciones Jopen
sourceJ re>uieren tener 8erl instalado correctamente. 8erl tiene una ventaja #
es >ue es mu# +le$i%le( # tam%ien tiene un gran cantidad de modulos #a
escritos.
Gien escritos los scripts en 8erl se asemejan %astante a 8H8. &a principal causa
de la suc7a apariencia de 8erl es por la a+icin de sus desarrolladores a la
escritura en Juna l7neaJ empa>uetanto numerosas +uncionalidades en una sola
l7nea de cdigo.
P#or UuV de8eras a2renderloR
&a potenc7a de 8erl a la 3ora de procesar grandes cantidades de datos lo 3ace
realmente popular a la 3ora de desarrollar aplicaciones del lado del servidor(
aprender 8erl o 83p es %0sico a la 3ora de desarrollar aplicaciones Ue%.
10:0?0 C
Es un lenguaje de Jmedio nivelJ pero con numerosas caracter7sticas de %ajo
nivel. ,ispone de las estructuras t7picas de los lenguajes de alto nivel pero( a
su veA( dispone de construcciones del lenguaje >ue permiten un control a mu#
%ajo nivel.
P#or UuV de8eras a2renderloR
@prender 6 es %0sico mientras aprendes 6 estas aprendiendo conceptos
%0sicos de lenguajes cmo Cava o 6B( adem0s no slo es mas sencillo >ue
estos 5ltimos sino >ue comporten gran parte de su sinta$is.
10:0'0 RU. . RU. ON RAILS
Eu%# on Eails( tam%i=n conocido como EoE o Eails es un +rame2orV de
aplicaciones 2e% de cdigo a%ierto escrito en el lenguaje de programacin
Eu%#. Eu%# apareci en el a'o 199 # creo >ue su principal pro%lema 3a%7a
sido la +alta de documentacin en otro idioma >ue no sea japon=s. Eso se 3a
ido solucionando # crece la popularidad del lenguaje. .u aplicacin insignia(
por decirlo de alg5n modo parece ser EoE. .u mecanismo de gem parece al
68@N de 8erl # al 8ear de 8H8
P#or UuV de8eras a2renderloR
.imple # +uncional( el uso de @ctive Eecord de +orma e+iciente simpli+ica #
agiliAa el desarrollo de +orma nota%le. @l minimiAar el tra%ajo con la %ase de
datos 9escri%iendo triggers # procedimientos almacenados: # emplear un 5nico
lenguaje para todo el desarrollo( se consigue acortar los tiempos de desarrollo
9time2marVet:.
10:0;0 AS#
@ctive .erver 8ages 9@.8: # @.8.NET es un intento de Licroso+t para
introducirse en el mercado del desarrollo Ue%( # viene a ser como su estandar
para su servidor Ue%( II.. @.8 3a sido atacado por la comunidad open source
desde >ue este apareci( # dan numerosas raAones para ello)
El propietario( una 5nica plata+orma( la lentitud...
@.8 3a sido implementado en otras plata+ormas # >ue cuando esta
+uncionando %ajo su servidor predeterminado II. es relativamente r0pido.
P#or UuV de8eras a2renderloR
.implemente por>u= en algunas ocasiones no tienes otra opcin de%ido a la
popularidad >ue 3a alcanAado.
CA#(!ULO I,: LEN)UA*ES DE A*O- MEDIO . AL!O
NI,EL
70/0 IN!RODUCCI+N
El ordenador slo entiende un lenguaje conocido como cdigo %inario o cdigo
m0>uina( consistente en ceros # unos. Es decir( slo utiliAa " # 1 para codi+icar
cual>uier accin.
&os lenguajes m0s pr$imos a la ar>uitectura 3ard2are se denominan lenguajes de
%ajo nivel # los >ue se encuentran m0s cercanos a los programadores # usuarios se
denominan lenguajes de alto nivel.
70%0 LEN)UA*ES DE A*O NI,EL
Fistos a mu# %ajo nivel( los microprocesadores procesan e$clusivamente se'ales
electrnicas %inarias. ,ar una instruccin a un microprocesador supone en
realidad enviar series de unos # ceros espaciadas en el tiempo de una +orma
determinada. Esta secuencia de se'ales se denomina cdigo m0>uina. El cdigo
representa normalmente datos # n5meros e instrucciones para manipularlos. 1n
modo m0s +0cil de comprender el cdigo m0>uina es dando a cada instruccin un
mnemnico( como por ejemplo .T-EE( @,, o C1L8. Esta a%straccin da como
resultado el ensam%lador( un lenguaje de mu# %ajo nivel >ue es espec7+ico de cada
microprocesador.
&os lenguajes de %ajo nivel permiten crear programas mu# r0pidos( pero >ue son a
menudo di+7ciles de aprender. L0s importante es el 3ec3o de >ue los programas
escritos en un %ajo nivel son totalmente dependientes de la m0>uina o de cada
procesador. .i se lleva el programa a otra m0>uina se de%e reescri%ir el programa
desde el principio. @l estar pr0cticamente dise'ados a medida del 3ard2are(
aprovec3an al m0$imo las caracter7sticas del mismo.
,entro de este grupo se encuentran)
&EN41@CE Lc<1IN@.
EN.@LG&@,-E.
70%0/0 LEN)UA*E M@BUINA0
El lenguaje m0>uina es el 5nico lenguaje >ue entiende directamente la
computadora. 8or esta raAn( su estructura esta totalmente adaptada a los
circuitos de la m0>uina # mu# alejado de la +orma de e$presin # an0lisis de
los pro%lemas propia de los 3umanos. Esto 3ace >ue la programacin en este
lenguaje resulte tediosa # complicada( re>uiri=ndose un conocimiento
pro+undo de la ar>uitectura +7sica del ordenador. Irente a esto( el cdigo
m0>uina 3ace posi%le >ue el programador utilice la totalidad de los recursos
>ue o+rece el ordenador( o%teni=ndose programas mu# e+icientes 9es decir(
>ue aprovec3an al m0$imo los recursos e$istentes: en tiempo de ejecucin #
en ocupacin de memoria.
70%0%0 ENSAMLADOR0
El lenguaje ensam%lador constitu#e el primer intento de sustitucin del
lenguaje m0>uina por uno m0s cercano al usado por los 3umanos. Este
acercamiento a las personas se plasma en las siguientes aportaciones)
1so de una notacin sim%lica o nemot=cnica para
representar los cdigos de operacin
direccionamiento sim%lico
.e permite el uso de comentarios entre las l7neas de
instrucciones( 3aciendo posi%le la redaccin de programas m0s legi%les.
@parte de esto =l &E presenta la ma#or7a de los inconvenientes del lenguaje
m0>uina( como son su repertorio mu# reducido de instrucciones( el r7gido
+ormato de instrucciones( la %aja pota%ilidad # la +uerte dependencia del
3ard2are. 8or otro lado mantiene la ventaja del uso ptimo de los recursos
3ard2are( permitiendo la o%tencin de un cdigo mu# e+iciente.
Ese tipo de lenguajes 3acen corresponder a cada instruccin en ensam%lador
una instruccin en cdigo m0>uina. Esta transduccin es llevada a ca%o por
un programa traductor denominado Ensam%lador.
8ara solventar en cierta medida la limitacin >ue supone poseer un repertorio
de instrucciones( tan reducido( se 3an desarrollado unos ensam%ladores
especiales denominados macroensam%ladores.
&os lenguajes >ue traducen los macroensam%ladores disponen de
macroinstrucciones cu#a traduccin da lugar a varias instrucciones m0>uina
# no a una sola.
,ado >ue el lenguaje ensam%lador esta +uertemente condicionado por la
ar>uitectura del ordenador >ue soporta( los programadores no suelen escri%ir
programas de tama'o considera%le en ensam%lador. Las %ien usan este
lenguaje para a+inar partes importantes de programas escritos en lenguajes de
m0s alto nivel.
Ha# un distinto &enguaje de L0>uina 9#( por consiguiente( un distinto
&enguaje Ensam%lador: para cada 681. 8or ejemplo( podemos mencionar
tres lenguajes completamente di+erentes( >ue sin em%argo vienen de la
aplicacin de los conceptos anteriores)
&enguaje Ensam%lador de la +amilia Intel 8"$8/
&enguaje Ensam%lador de la +amilia Lotorola /8"""
&enguaje Ensam%lador del procesador 8-UEE( usado en las
IGL E.Q/""".
Tenemos 3 +a%ricantes distintos( compitiendo entre s7 # cada uno aplicando
conceptos distintos en la manu+actura de sus procesadores( su ar>uitectura #
programacinK todos estos aspectos( in+lu#en en >ue el lenguaje de m0>uina
# ensam%lador cam%ie %astante.
AH ,EN!A*AS DEL LEN)UA*E ENSAMLADOR
1na veA >ue 3emos visto la evolucin de los lenguajes( ca%e preguntarse)
;En estos tiempos JmodernosJ( para >u= >uiero el &enguaje
Ensam%lador?
El proceso de evolucin trajo consigo algunas desventajas( >ue a3ora
veremos como las ventajas de usar el &enguaje Ensam%lador( respecto a
un lenguaje de alto nivel)
/0 ,elocidad
El proceso de traduccin >ue realiAan los int=rpretes( implica un
proceso de cmputo adicional al >ue el programador >uiere realiAar.
8or ello( nos encontraremos con >ue un int=rprete es siempre m0s
lento >ue realiAar la misma accin en &enguaje Ensam%lador(
simplemente por>ue tiene el costo adicional de estar traduciendo el
programa( cada veA >ue lo ejecutamos.
,e a37 nacieron los compiladores( >ue son muc3o m0s r0pidos >ue
los int=rpretes( pues 3acen la traduccin una veA # dejan el cdigo
o%jeto( >ue #a es &enguaje de L0>uina( # se puede ejecutar mu#
r0pidamente. @un>ue el proceso de traduccin es m0s complejo #
costoso >ue el de ensam%lar un programa( normalmente podemos
despreciarlo( contra las ventajas de codi+icar el programa m0s
r0pidamente.
.in em%argo( la ma#or parte de las veces( el cdigo generado por un
compilador es menos e+iciente >ue el cdigo e>uivalente >ue un
programador escri%ir7a. &a raAn es >ue el compilador no tiene tanta
inteligencia( # re>uiere ser capaA de crear cdigo gen=rico( >ue sirva
tanto para un programa como para otroK en cam%io( un programador
3umano puede aprovec3ar las caracter7sticas espec7+icas del
pro%lema( reduciendo la generalidad pero al mismo tiempo( no
desperdicia ninguna instruccin( no 3ace ning5n proceso >ue no sea
necesario.
8ara darnos una idea( en una 86( # suponiendo >ue todos son %uenos
programadores( un programa para ordenar una lista tardar0 cerca de
2" veces m0s en Fisual Gasic 9un int=rprete:( # 2 veces m0s en 6 9un
compilador:( >ue el e>uivalente en Ensam%lador.
8or ello( cuando es cr7tica la velocidad del programa( Ensam%lador se
vuelve un candidato lgico como lenguaje.
@3ora %ien( esto no es un a%solutoK un programa %ien 3ec3o en 6
puede ser muc3as veces m0s r0pido >ue un programa mal 3ec3o en
Ensam%ladorK sigue siendo sumamente importante la eleccin
apropiada de algoritmos # estructuras de datos. 8or ello( se
recomienda %uscar optimiAar primero estos aspectos( en el lenguaje
>ue se desee( # solamente usar Ensam%lador cuando se re>uiere m0s
optimiAacin # no se puede lograr por estos medios.
%0 ECiciencia de ta3a4o
8or las mismas raAones >ue vimos en el aspecto de velocidad( los
compiladores e int=rpretes generan m0s cdigo m0>uina del
necesarioK por ello( el programa ejecuta%le crece. @s7( cuando es
importante reducir el tama'o del ejecuta%le( mejorando el uso de la
memoria # teniendo tam%i=n %ene+icios en velocidad( puede convenir
usar el lenguaje Ensam%lador. Entre los programas >ue es cr7tico el
uso m7nimo de memoria( tenemos a los virus # manejadores de
dispositivos 9drivers:. Luc3os de ellos( por supuesto( est0n escritos
en lenguaje Ensam%lador.
10 6leDi8ilidad
&as raAones anteriores son cuestin de grado) podemos 3acer las
cosas en otro lenguaje( pero >ueremos 3acerlas m0s e+icientemente.
8ero todos los lenguajes de alto nivel tienen limitantes en el controlK
al 3acer a%stracciones( limitan su propia capacidad. Es decir( e$isten
tareas >ue la m0>uina puede 3acer( pero >ue un lenguaje de alto nivel
no permite. 8or ejemplo( en Fisual Gasic no es posi%le cam%iar la
resolucin del monitor a medio programaK es una limitante( impuesta
por la a%straccin del 41I Uindo2s. En cam%io( en ensam%lador es
sumamente sencillo( pues tenemos el acceso directo al 3ard2are del
monitor.
Eesumiendo( la +le$i%ilidad consiste en reconocer el 3ec3o de >ue
Todo lo >ue puede 3acerse con una m0>uina( puede 3acerse en el
lenguaje ensam%lador de esta m0>uinaK los lenguajes de alto nivel
tienen en una u otra +orma limitante para e$plotar al m0$imo los
recursos de la m0>uina.
H DES,EN!A*AS DEL LEN)UA*E ENSAMLADOR
8or otro lado( al ser un lenguaje m0s primitivo( el Ensam%lador tiene
ciertas desventajas respecto a los lenguajes de alto nivel)
/0 !ie32o de 2rogra3acin0
@l ser de %ajo nivel( el &enguaje Ensam%lador re>uiere m0s
instrucciones para realiAar el mismo proceso( en comparacin con un
lenguaje de alto nivel. 8or otro lado( re>uiere de m0s cuidado por
parte del programador( pues es propenso a >ue los errores de lgica
se re+lejen m0s +uertemente en la ejecucin.
8or todo esto( es m0s lento el desarrollo de programas compara%les
en &enguaje Ensam%lador >ue en un lenguaje de alto nivel( pues el
programador goAa de una menor a%straccin.
%0 #rogra3as Cuente grandes
8or las mismas raAones >ue aumenta el tiempo( crecen los programas
+uentesK simplemente( re>uerimos m0s instrucciones primitivas para
descri%ir procesos e>uivalentes. Esto es una desventaja por>ue
di+iculta el mantenimiento de los programas( # nuevamente reduce la
productividad de los programadores.
10 #eligro de aCectar recursos ines2erada3ente
Tenemos la ventaja de >ue todo lo >ue se puede 3acer en la m0>uina(
se puede 3acer con el &enguaje Ensam%lador 9+le$i%ilidad:. El
pro%lema es >ue todo error >ue podamos cometer( o todo riesgo >ue
podamos tener( podemos tenerlo tam%i=n en este &enguaje. ,ic3o de
otra +orma( tener muc3o poder es 5til pero tam%i=n es peligroso.
En la vida pr0ctica( a+ortunadamente no ocurre muc3oK sin em%argo(
al programar en este lenguaje ver0n >ue es muc3o m0s com5n >ue la
m0>uina se JcuelgueJ( J%lo>ueeJ o Jse le va#a el avinJK # >ue se
reinicialiAe. ;8or >u=?( por>ue con este lenguaje es per+ectamente
posi%le 9# sencillo: realiAar secuencias de instrucciones inv0lidas(
>ue normalmente no aparecen al usar un lenguaje de alto nivel.
En ciertos casos e$tremos( puede llegarse a so%reescri%ir in+ormacin
del 6L-. de la m0>uina 9no 3e visto e+ectos m0s riesgosos:K pero( si
no la conservamos( esto puede causar >ue dejemos de JverJ el disco
duro( junto con toda su in+ormacin.
70 6alta de 2orta8ilidad
6omo #a se mencion( e$iste un lenguaje ensam%lador para cada
m0>uinaK por ello( evidentemente no es una seleccin apropiada de
lenguaje cuando deseamos codi+icar en una m0>uina # luego llevar
los programas a otros sistemas operativos o modelos de
computadoras. .i %ien esto es un pro%lema general a todos los
lenguajes( es muc3o m0s notorio en ensam%lador) #o puedo reutiliAar
un 9"] o m0s del cdigo >ue desarrollo en J6J( en una 86( al
llevarlo a una E.Q/""" con 1NID( # lo mismo si despu=s lo llevo a
una Lacintos3( siempre # cuando est= %ien 3ec3o # siga los
est0ndares de J6J( # los principios de la programacin estructurada.
En cam%io( si escri%imos el programa en Ensam%lador de la 86( por
%ien >ue lo desarrollemos # muc3os est0ndares >ue sigamos(
tendremos pr0cticamente >ue reescri%ir el 1"" ] del cdigo al
llevarlo a 1NID( # otra veA lo mismo al llevarlo a L@6.
7010 LEN)UA*ES DE MEDIO NI,EL
1n lenguaje intermedio se puede de+inir como una manera de representar
procedimientos # estructuras de datos >ue sirva como entrada para una LF
9La>uina Firtual: en alguna parte de su jerar>u7a( entre el lenguaje de entrada 9el
nivel m0s alto: # el cdigo ejecutado en la m0>uina 9el nivel m0s %ajo: tanto en el
tiempo de compilacin como en el de ejecucin.
8ara considerar el papel de los lenguajes intermedios # sus ventajas # desventajas(
conviene destacar la di+erencia entre la traduccin de un lenguaje de alto nivel a
cdigo m0>uina anteriormente a su ejecucin 9su compilacin: # su interpretacin(
es decir( la conversin de cada instruccin del lenguaje a cdigo m0>uina # su
ejecucin( una por una( al ejecutar el programa. Este proceso se realiAa a trav=s de
una LF de interpretacin >ue simula un ordenador cu#o cdigo m0>uina es el
lenguaje de alto nivel >ue est0 siendo interpretado. P t7picamente( esta LF se
constru#e a trav=s de un conjunto de programas de cdigo m0>uina >ue representa
los algoritmos # estructuras de datos necesarios para la ejecucin de las
instrucciones del lenguaje de alto nivel. Ha# ventajas # desventajas en cada
manera de convertir los lenguajes de alto nivel a cdigo m0>uina( >ue se pueden
resumir as7)
Co32ilacin
Fentajas
1.
No 3a# >ue repetir la conversin de la misma
instruccin a cdigo ma>uina cada veA >ue aparece
2. &os programas corren mu# r0pido
,esventajas
1. 8erdida de claridad e in+ormacin so%re el programa
2. ,i+icultad en localiAar la +uente e$acta de error
Ejemplo @,@( 6 ( 6OO( I-ETE@N( 8ascal
Inter2retacin
Fentajas
1.
No 3a# p=rdida de claridad ni de in+ormacin so%re
un programa ni so%re donde est0n los errores.
2.
No 3a# >ue decodi+icar cdigo >ue no se va a
ejecutar
,esventajas 1.
&os programas corren muc3o mas lento R se paga el
coste de decodi+icar cada instruccin
Ejemplo HTL&( &isp ( L&( 8erl( 8ostscrip( .malltalV
Estos dos casos representan los dos e$tremos por>ue e$iste tam%i=n lo >ue se
llama la compilacin parcial( >ue es una meAcla de los dos en+o>ues( donde se
compila el lenguaje de alto nivel a un lenguaje intermedio 9m0s cerca de las
estructuras presentes en el cdigo m0>uina >ue las del cdigo +uente: # luego se
interpreta este lenguaje al ejecutar el programa.
6omo puede imaginarse( esta t=cnica com%ina las ventajas # desventajas de los
dos en+o>ues anteriores. 1n ejemplo de esta com%inacin e$iste en el lenguaje de
programacin Cava # su entorno.
6omo se puede ver en los cuadros superiores( tanto los programas compilados
parcialmente a un lenguaje intermedio 9como Cava: como los programas escritos
en lenguajes de alto nivel >ue se interpretan 9como &isp: re>uieren una LF para
interpretar el programa. &a principal ventaja del lenguaje intermedio en este caso
es su pro$imidad al nivel del cdigo m0>uina( en el sentido de >ue supone menos
tra%ajo a la 3ora de ejecutarlo #( por lo tanto( los programas corren m0s
r0pidamente >ue los puramente interpretados.
@dem0s del papel de los lenguajes intermedios en la compilacin parcial( se puede
destacar su papel en la compilacin est0ndar. 6omo ejemplo se puede considerar 6
como lenguaje intermedio para un lenguaje compilado nuevo. .i el autor de un
nuevo lenguaje decide utiliAar 6( por ejemplo( como su lenguaje intermedio( slo
tendr0 >ue implementar una LF para convertir el cdigo +uente de su lenguaje a
6( a3orrando muc3o tra%ajo.
&as 5entajas de utiliAar un lenguaje tan esta%lecido como 6 como lenguaje
intermedio son)
&a +acilidad de portar el lenguaje a una nueva m0>uina 9slo
3a# >ue tener un compilador 6 disponi%le all7:.
&a generacin de cdigo m0>uina es una tarea mu# compleja
>ue re>uiere un conocimiento pro+undo de la ar>uitectura de la m0>uina en
cuestin # de cada m0>uina en >ue se >uiere una versin del lenguaje.
&a +acilidad de modi+icar alg5n rasgo del comportamiento del
lenguaje en alguna m0>uina en concreto 9por ejemplo( caracter7sticas de
memoria o rendimiento se pueden a'adir li%rer7as 6 customiAadas sin grandes
pro%lemas:.
&as posi%ilidades disponi%les para mapear estructuras
intermedias del nuevo lenguaje a estructuras de datos de 6.
P las des5entajas son)
&a depuracin es mu# di+7cil por>ue( entre otras cosas( los
errores >ue ocurren en el cdigo 6 no son mu# +0ciles de localiAar en lo >ue 3a
escrito el programador originalmente en el nuevo lenguaje.
&as caracter7sticas de rendimiento # e+iciencia del lenguaje
est0n determinadas por el compilador 6.
Ha%r0 ocasiones en las >ue no e$ista una %uena traduccin
entre una estructura en el nuevo lenguaje # las estructuras de datos en 6( por lo
>ue 3a%r0 una p=rdida de e+iciencia en el programa resultante 9como( por
ejemplo( ocurre en la ma#or7a de las ocasiones en >ue se compilan estructuras
de 8rolog a 6 R slo se puede e$presar iteracin en 8rolog utiliAando
recursin:.
7070 LEN)UA*ES DE AL!O NI,EL
El avance en el desarrollo de JcompiladoresJ e Jint=rpretesJ 9los dos tipos de
programas traductores: 3a sido por lo tanto +undamental en el desarrollo de los
lenguajes de J3H generacinJ cu#as ventajas adem0s de la +acilidad de aprendiAaje
# lecturaQescritura son las +acilidades de correccin( trans+ormacin # conversin
de un lenguaje a otro.
&os lenguajes de alto nivel tienen normalmente las caracter7sticas de
ZTransporta%ilidad[. Es decir( est0n implementadas so%re varias ma>uinas de
+orma >ue un programa puede ser +0cilmente ZTransportado[ 9Trans+erido: de una
ma>uina a otra sin una revisin sustancial. En ese sentido se llama
JIndependientes de la ma>uinaJ.
&os lenguajes de Z@lto Nivel[ son los m0s utiliAados como lenguaje de
programacin. @un>ue no son +undamentalmente declarativos( estos lenguajes
permiten >ue los algoritmos se e$presen en un nivel # estilo de escritura
+0cilmente legi%le # comprensi%le por otros programadores.
&os lenguajes de alto nivel son normalmente +0ciles de aprender por>ue est0n
+ormados por elementos de lenguajes naturales( como el ingl=s. En G@.I6( el
lenguaje de alto nivel m0s conocido( los comandos como JII 6-NT@,-E M 1"
THEN .T-8J pueden utiliAarse para pedir a la computadora >ue pare si
6-NT@,-E es igual a 1".
Est0n dirigidos a solucionar pro%lemas mediante el uso de E,,\s 9Estructuras
,in0micas de ,atos) .on estructuras >ue pueden cam%iar de tama'o durante la
ejecucin del programa. Nos permiten crear estructuras de datos >ue se adapten a
las necesidades reales de un programa:.
Estos lenguajes permiten al programador olvidarse por completo del
+uncionamiento interno de la ma>uinaQs para la >ue est0n dise'ando el programa.
Tan solo necesitan un traductor >ue entiendan el cdigo +uente como las
caracter7sticas de la ma>uina.
.uelen usar tipos de datos para la programacin # 3a# lenguajes de propsito
general 9cual>uier tipo de aplicacin: # de propsito especi+ico 9como I-ETE@N
para tra%ajos cient7+icos:.
Ejemplos de estos lenguajes de alto nivel son 8@.6@&( @8& # I-ETE@N 9para
aplicaciones cient7+icas:( 6-G-& 9para aplicaciones de procesamiento de datos:(
.N-G-& 9para aplicaciones de procesamiento de te$tos:( &I.8 # 8E-&-4 9para
aplicaciones de inteligencia arti+icial:( 6 # @,@ 9para aplicaciones de
programacin de sistemas: # 8&QI 9para aplicaciones de propsitos generales: .
7090 )ENERADORES DE A#LICACIONES 7O NI,EL
8osteriormente( usando estos lenguajes( se 3an redactado programas destinados a
+acilitar un n5mero variado de operaciones en campos de aplicacin espec7+icos
como simulacin de +enmenos +7sicos( manipulacin de datos estad7sticos( etc.
&os m0s avanAados # +le$i%les de estos programas son las planillas electrnicas u
3ojas de c0lculo # los programas de administracin de arc3ivos o %ases de datos
,ados >ue tales aplicaciones no J3acen nadaJ sin >ue el usuario de+ina ciertas
estructuras # ciertas operaciones( pueden ser consideradas como JgeneradoresJ de
aplicaciones( aun>ue este nom%re se reserva 3a%itualmente para niveles m0s
avanAados en >ue los usuarios pueden generar sistemas mu# di+erentes unos de
otros( con J3erramientasJ >ue se parecen a lenguajes de programacin. Estas
3erramientas con+orman los lenguajes de cuarto nivel >ue son por esencia
Jprogramas para crear programasJ con una +inalidad espec7+ica( como el J6@.EJ
destinado a +acilitar el tra%ajo de los analistas de sistemas.
CA#(!ULO ,: ELEMEN!OS DE UN LEN)UA*E DE
#RO)RAMACI+N
90/0 ELEMEN!OS SIN!@C!ICOS DE UN LEN)UA*E
El estilo sint0ctico general de un lenguaje est0 dado por la seleccin de diversos
elementos sint0cticos %0sicos. &os m0s destacados son)
Conjunto de caracteres: &a eleccin del conjunto de caracteres es la
primera >ue se 3ace al pro#ectar una sinta$is de lenguaje. .e usan pala%ras de
8 %its aun>ue cada veA m0s se consideran las representaciones de 1/ %its
9/.3/ caracteres di+erentes:.
IdentiCicadores: &a sinta$is %0sica para identi+icadores( una cadena
de letras # d7gitos >ue comienAan con una letra( tiene amplia aceptacin. &as
variaciones entre lenguajes se encuentra entre los signos de puntuacin
admitidos 9Z.[ ( [([ ( [!Z( Za[...:.
S38olos de o2eradores: 6asi todos los lenguajes emplean los
caracteres especiales ZO[ # Z!Z para representar las dos operaciones
aritm=ticas %0sicas. Tam%i=n adoptan alguna com%inacin # utiliAacin de
caracteres especiales para ciertos operadores.
#ala8ras cla5e E 2ala8ras reser5adas: 1na pala%ra clave es un
identi+icador >ue se usa como una parte +ija de la sinta$is de un enunciado 9ej.
II:. El an0lisis sint0ctico durante la traduccin se +acilita usando pala%ras
reservadas. &a adiccin de una nueva pala%ra reservada al lenguaje signi+ica
>ue todo programa antiguo >ue utilice ese identi+icador como nom%re de
varia%le 9u otro nom%re: #a no es sint0cticamente correcto.
#ala8ras 2regoneras: .on pala%ras opcionales >ue se insertan
en los enunciados para mejorar la legi%ilidad.
Co3entarios: @#udan a documentar el programa.
Es2acios en 8lanco: .us regla var7an entre los lenguajes.
Deli3itadores E corcXetes: 1n delimitador es un elemento
sint0ctico >ue se usa simplemente para se'alar el principio o el +inal de
alguna unidad sint0ctica( como un enunciado o e$presin. .e pueden usar
simplemente para mejorar la legi%ilidad o simpli+icar el an0lisis sint0ctico.
6or3atos de ca32os li8res E Cijos: 1na sinta$is es de campo +ijo si
los enunciados de programa se pueden escri%ir en cual>uier parte de un
rengln de entrada sin >ue importe la posicin so%re el rengln o las
interrupciones entre renglones. 1na sinta$is de campo +ijo utiliAa la posicin
so%re un rengln de entrada para transmitir in+ormacin.
ED2resiones: .on los %lo>ues sint0cticos de construccin a partir de
los cuales se constru#en enunciados 9# a veces programas:.
Enunciados: 6onstitu#en el componente sint0ctico m0s destacado
en los lenguajes imperativos. .u sinta$is tiene un e+ecto decisivo so%re la
regularidad( legi%ilidad # +acilidad de escritura generales del lenguajes.
90%0 !I#OS DE DA!OS
1n tipo de datos es una clase de o%jetos de datos ligados a un conjunto de
operaciones para crearlos # manipularlos.
Todo lenguaje tiene un conjunto de tipos primitivos de datos >ue est0n
integrados el lenguaje. @dem0s( un lenguaje puede proveer recursos >ue permitan
al programador de+inir nuevos tipos de datos.
&os elementos %0sicos de una especi+icacin de un tipo de datos son)
@. &os atri%utos >ue distinguen o%jetos de datos de ese tipo.
G. &os valores >ue los o%jetos de datos de ese tipo puede tener( #
6. &as operaciones >ue de+inen las posi%les manipulaciones de o%jetos de datos
de ese tipo.

&os elementos %0sicos de la implementacin de un tipo de datos son)
@. &a representacin de almacenamiento.
G. &a manera en >ue las operaciones de+inidas para el tipo de datos se representan
en t=rminos de algoritmos o procedimientos particulares >ue manipulan la
representacin de almacenamiento elegida para los o%jetos de datos.
9010 NO!ACIONES DE E=#RESIONES
El operador %inario se aplica a los operandos. En notacin in+ija( un operador
%inario se coloca entre sus operandos( como en la e$presin a O %. -tras opciones
son la notacin pre+ija 9polaca: ( en la cual el operador aparece primero( como en
Oa% ( # la notacin post+ija 9polaca inversa: en la cual el operador se escri%e al
+inal( como en a%O.
&os par=ntesis no son necesarios en notacin pre+ija o post+ija( de%ido a >ue los
operandos de cada operador pueden encontrarse sin peligro de am%igbedad.
Eje32lo: G = I . H Y S
Notacin 8re+ija) ^ O DP _ N d
N O DPd

Notacin 8ost+ija) ^ DP O_ N d
DP O d N
9070 #RO#IEDAD ASOCIA!I,A . #RECEDENCIA
Con5encin !radicional0

e E$ponenciacin
N ( Q Lultiplicacin( divisin
O ( ! .uma( resta
9090 RE#RESEN!ACI+N DE @ROL #ARA E=#RESIONES
Ejemplo. INIIC@ ) % N % ! * N a N c
8EEIIC@ ) ! N % % N N * a c
8-.TIIC@ ) % % N * a N c N !
@r8ol de sintaDis a8stracta
90?0 E,ALUACI+N DE E=#RESIONES
90?0/0 E,ALUACI+N MEDIAN!E LA RECONS!RUCCI+N DE UN @ROL0
7 N 7 ! * N 2 N 3
90?0%0 E,ALUACI+N MEDIAN!E UNA #ILA
1. TraduAca a notacin post+ija la e$presin >ue se evaluar0.
2. Eecorra la notacin post+ija de iA>uierda a derec3a.
a: @l encontrar una constante introduAca su valor a la pila
%: @l encontrar un operador %inario e$traiga dos valores de la pila(
apli>ue el operador a esos valores e introduAca el resultado en la pila.
3. ,espu=s de recorrer toda la notacin post+ija( el valor de la e$presin se
encuentra en el tope de la pila.
Ejemplo)
E$presin 8ila au$iliar 6omentario
77N*2N3N! 7 IntroduAca 7
7N*2N3N! 7 7 IntroduAca 7
N*2N3N! *9 Lultipli>ue
*2N3N! *9 * IntroduAca *
2N3N! *9 * 2 IntroduAca 2
N3N! *9 8 Lultipli>ue
3N! *9 8 3 IntroduAca 3
N! *9 2* Lultipli>ue
! 2 Eeste
AH Algorit3o 2ara transCor3ar una notacin inCija a 2ostCija0
8ar=ntesis ) 9 : La#or prioridad
8otenciacin ) e
Lultiplicacin ( ,ivisin ) N ( Q
.uma ( Eesta ) O ( !
Descri2cin Solucin:
1. &a e$presin se va le#endo car0cter a car0cter( los operandos pasan
directamente a +ormar parte de la e$presin en post+ija.
2. &os operadores se meten en la pila siempre >ue esta este vac7a o %ien
siempre >ue tengan ma#or prioridad >ue el operador cima de la pila 9o
%ien igual si es la m0$ima prioridad:. .i la prioridad es menor o igual
se saca el elemento cima de la pila # se vuelve a 3acer la comparacin
con el elemento cima.
3. &os par=ntesis iA>uierdos siempre se meten en la pila con la m7nima
prioridad. 6uando se lee un par=ntesis derec3o( 3a# >ue sacar todos los
operadores de la pila pasando a +ormar parte de la e$presin post+ija(
3asta llegar a un par=ntesis iA>uierdo( el cual se elimina( #a >ue los
par=ntesis no +orman parte de la e$presin post+ija.
*. El algoritmo termina cuando no 3a# m0s caracteres en la e$presin #
la pila esta vac7a.
Eje32lo:
A Y G I C < G D K E Z 6 H < ) H " H
caracter ledo ED2resin Estado de la 2ila
@
N
9
G
O
6
!
9
,
Q
E
e
I
:
!
4
:
!
H
@
@
@
@G
@G
@G6
@G6O
@G 6O
@G 6O ,
@G 6O ,
@G 6O , E
@G 6O , E
@G 6O , E I
@G 6O , E I e Q
@G 6O , E I e Q !
@G 6O , E I e Q ! 4
@G 6O , E I e Q ! 4!
@G 6O , E I e Q ! 4! N
@G 6O , E I e Q ! 4! NH
@G 6O , E I e Q ! 4! N H !
N
YG
YG
YGI
YGI
N9!
N9!9
N9!9
N9!9 Q
N9!9 Q
N9!9 Q e
N9!9 Q e
N9!
N9!
N9!
N
!
!
En la descripcin realiAada( se o%serva >ue el par=ntesis iA>uierdo tiene la
m0$ima prioridad +uera de la pila( es decir( en la notacin in+ijaK sin em%argo(
cuando esta dentro de la pila la prioridad es m7nima.
,e igual +orma( para tratar el 3ec3o de >ue varios operadores de
potenciacin son evaluados de iA>uierda a derec3a( este operador tendr0 ma#or
prioridad cuando no esta metido en la pila >ue el mismo pero metido en la pila.
H !a8la de 2rioridades0
O2erador #rioridad dentro de la 2ila #rioridad Cuera
de la 2ila
e 3 *
N ( Q 2 2
O ( ! 1 1
9 "
CH Algorit3o G2seudocdigoH
1. -%tener caracteres de la e$presin # repetir pasos 2 al * para cada
car0cter
2. .i es operando( pasarlo a la e$presin post+ija
3. .i es operador
3.1. .i la pila esta vac7a meterlo en la pila. Eepetir a partir de 1.
3.2. .i la pila no esta vac7a.
.i la prioridad del operador le7do es ma#or >ue la prioridad del
operador cima de la pila( meterlo en la pila
# repetir a partir de 1.
.i la prioridad del operador es menor o igual >ue la prioridad del
operador de la cima( sacar de la cima #
pasarlo a la e$presin post+ija( volver a 3.
*. .i es par=ntesis derec3o
*.1. .acar cima de la pila # pasarlo a la e$presin post+ija
*.2. .i nueva cima es par=ntesis iA>uierdo( suprimir elemento cima.
*.3. .i cima no es par=ntesis iA>uierdo( volver a *.1
*.*. Folver a partir de 1.
. .i >uedan elementos en la pila( pasarlos a la e$presin post+ija
/. Iin del algoritmo.

You might also like