Sunteți pe pagina 1din 75

1

Lenguajes de Programacin

1. INTRODUCCIN
1.1. EVOLUCIN DE CONCEPTOS
Abstraccin de Datos
Abstraccin elemental (tipos elementales)
Abstraccin estructurada (tipos estructurados)
Abstraccin unitaria (tipos abstractos)
Abstraccin de Control
Abstraccin elemental (sentencias elementales)
Abstraccin estructurada (sentencias estructuradas)
Abstraccin unitaria (sentencias abstractas)
1.. CLASI!ICACIN DE LEN"UA#ES
Los lenguajes, en general, admiten la siguiente posible clasificacin:
Lenguajes
Naturales (idiomas)
De programacin
De mquina
Simblicos
De bajo nivel (ensambladores)
De alto nivel
1.$. PARADI"%AS DE PRO"RA%ACIN
Existen los cuatro siguientes paradigmas:
Programacin imperativa
Programacin funcional
Programacin lgica
Programacin orientada a objetos
1.&. SINTA'IS
Hctor Pinc!eira "onejeros
#
2
Lenguajes de Programacin

De(inicin
La sintaxis de un lenguaje es un conjunto de reglas que determinan si las sentencias de un
programa estn bien formadas o no!
Ob)eti*o
"ro#eer una notacin que permita la comunicacin entre el programador $ el
procesador del lenguaje!
Criterios sint+cticos
Le,ibilidad
!acilidad de escrit-ra
!acilidad de trad-ccin
A-sencia de a.bi,/edad
Ele.entos Sint+cticos
Caracteres
Identi(icadores
O0eradores
Palabras cla*es 1 reser*adas
%na 0alabra cla*e es un identificador que constitu$e la parte no cambiante de una
instruccin! %na 0alabra reser*ada es una palabra cla#e no declarable como
identificador de usuario!
Co.entarios
Deli.itadores
E20resiones
Sentencias
Estr-ct-ra de -nidades de 0ro,ra.a
De(inicin se0arada3 &ada unidad representa un bloque sintctico independiente!
De(inicin anidada3 Las unidades aparecen como declaraciones $ pueden
contener sus propias definiciones de unidades!
"ra.+ticas
%na gramtica representa la definicin formal de la sintaxis de un lenguaje! &onsta de un
conjunto de reglas que especifican las secuencias de s'mbolos ('tems de l(xico) que
forman estructuras sintcticas en el lenguaje definido!
%etalen,-a)es
%n metalenguaje es una gramtica formal destinada a la descripcin de un lenguaje!
Existen dos metalenguajes com)nmente utili*ados!
Hctor Pinc!eira "onejeros
$
+
Lenguajes de Programacin

4N! (4ac5-s6Na-r6!or.)
,otacin desarrollada por los especialistas -o.n /ac0us $ "eter ,aur para definir
lenguaje Algol12!

3n)mero entero4 ::5 63signo47 83d'gito491
o bien
3n)mero entero4 ::5 63signo47 3d'gitos4
3d'gitos4 ::5 3d'gito4 : 3d'gito4 3d'gitos4
3signo4 ::5 ; :
3d'gito4::5 2 : 1 : 2 !!! : <
3entero sin signo4 ::5 83d'gito491

3entero sin signo4 ::5 3d'gito4 83d'gito492


o bien
3entero sin signo4 ::5 3d'gito4 : 3d'gito4 3entero sin signo4
Los s'mbolos 3, 4, :, 8, 9, 6, 7, ::5, no son parte del lenguaje definido, sino parte del
mecanismo de descripcin $ reciben el nombre de metas'mbolos! El s'mbolo ::5
significa =se define como=! Las secuencias encerradas entre 3 4 constitu$en s'mbolos
no terminales (o meta#ariables) $ las secuencias restantes (subra$adas $ otras)
s'mbolos terminales!
Dia,ra.as sint+cticos
&onstitu$en un m(todo de descripcin de lenguajes, equi#alente a la /,>,
originalmente propuesto por ,i0laus ?irt.!
Equi#alencias entre /,> $ diagramas sintcticos:
7@4 ::5 3#14 : 3#24 AAA : 3#04
@'mbolo terminal
@'mbolo no terminal
3@4 ::5 83x492
3@4 ::5 83x491
1.8. SE%9NTICA
Hctor Pinc!eira "onejeros
%
B
Lenguajes de Programacin

La semntica de un lenguaje especifica el significado algor'tmico de un programa $ se define
como un conjunto de reglas que describen el comportamiento de ese lenguaje en tiempo de
ejecucin!
%n ejemplo de forma de especificacin de la semntica de un lenguaje de programacin es el
manual de referencia de ese lenguaje!
1.:. PROCESADORES DE LEN"UA#ES
Procesador
Es una mquina capa* de ejecutar acciones expresadas en alg)n lenguaje concreto
(actualmente, slo lenguaje de mquina)!
Trad-ctor
Es un decodi(icador que acepta programas escritos en alg)n lenguaje fuente $ genera
programas, funcionalmente equi#alentes, en alg)n lenguaje objeto!
Co.0ilador
Es un trad-ctor cu$o lenguaje fuente es un lenguaje de alto ni#el $ cu$o lenguaje objeto
es un lenguaje de mquina!
Lenguaje de alto nivel

Lenguaje ensamblador

Lenguaje de mquina (cdigo reubicable)

Lenguaje de mquina (cdigo real)


Int;r0rete
Es un 0rocesador cu$o lenguaje concreto es un lenguaje de alto ni#el! @in embargo,
como ning)n computador es capa* de ejecutar un cdigo distinto al de mquina, se debe
simular mediante softCare la existencia de un computador cu$o lenguaje de mquina es
un lenguaje de alto ni#el!
Hctor Pinc!eira "onejeros
&
D
Lenguajes de Programacin

. O4#ETOS DE DATO
.1. CO%PONENTES DE UN O4#ETO
La memoria de un computador es capa* de representar objetos de cualquier naturale*a
lgica!
&ada objeto de dato tiene un no.bre, un ti0o, una re(erencia (si es un nombre de #ariable)
$ un *alor!
El no.bre es un identificador!
El ti0o es un conjunto de #alores que puede tomar un objeto!
La re(erencia es una direccin de memoria a partir de la cual se representa un #alor!
El *alor es un elemento perteneciente al tipo!
.. CONSTANTES
%n objeto de dato cu$o #alor nunca cambia se denomina constante! %na constante puede
ser literal o simblica!
%na constante literal es aquella cu$o nombre es la representacin escrita de su #alor!
%na constante si.blica es aquella cu$o nombre es un identificador!
Edefine "F +!1B11 GG "F es una constante simblica
float xH
x 5 "F ; D!DH GG D!D es una constante literal
.$. VARIA4LES
%n objeto de dato destinado a la representacin gen(rica de un #alor se denomina *ariable!
%na #ariable es una cudrupla
I 5 (N,',(,))
donde
N 5 Nombre
* 5 'ipo
( 5 (eferencia
) 5 )alor
.&. DECLARACIONES
%na declaracin es una sentencia de programa que pro#ee al traductor del lenguaje
informacin sobre los atributos de una #ariable! "or ejemplo, la traduccin de la declaracin
en &
int xH
determina la asociacin del tipo int al nombre x!
Hctor Pinc!eira "onejeros
+
1
Lenguajes de Programacin

@in embargo, la traduccin de la declaracin en >ortran
Fnteger x
determina la asociacin del tipo Fnteger $ una referencia relati#a al nombre x! Esto, debido a
que >ortran sit)a todos los objetos de dato en un rea de memoria contigua al cdigo,
situacin que se mantiene in#ariante durante ejecucin!
.8. 4INDIN" <LI"ADURA=
De(inicin
Ligadura es la accin de asociar tipo, referencia o #alor a un nombre de #ariable!
Li,ad-ra en len,-a)es (-erte.ente ti0ados <*ariables est+ticas 1 a-to.+ticas=
La asociacin de un tipo a una #ariable se conoce como ligadura esttica, anticipada
en tiempo de compilacin!
(, ; J)
La asociacin de una referencia a una #ariable se conoce como ligadura intermedia
en tiempo de creacin!
((, ; J) ; K))
La asociacin de un #alor a una #ariable se conoce como ligadura dinmica en
tiempo de ejecucin!
(((, ; J) ; K) ; L)
Li,ad-ra en len,-a)es d;bil.ente ti0ados <*ariables din+.icas=
La asociacin de un tipo a una #ariable se conoce como ligadura dinmica, tard'a en
tiempo de ejecucin! @in embargo, en este caso, los tipos estn ligados a los #alores $
los #alores estn representados a partir de cierta referencia! Luego, la ligadura
dinmica puede consistir en crear un #alor de cierto tipo a partir de una referencia $
asociar esa referencia a un nombre de #ariable, bien, asociar a un nombre de #ariable
una referencia en la cual existe un #alor de cierto tipo!
(, ; (K ; (J ; L)))
.:. E'PRESIONES
%na operacin es una funcin que consta de un operador $ de un operando (operador
unario) de dos operandos (operador binario)! @u objeti#o es la obtencin de un
resultado!
%n operador binario puede ser prefijo, infijo o postfijo!
Hctor Pinc!eira "onejeros
,
M
Lenguajes de Programacin

&ada operacin tiene un dominio, al cual pertenecen los operandos, $ un recorrido, al
cual pertenece el resultado! "or ejemplo:
; : (real, real) (real)
5 : (entero, entero) (boolean)
N : (real, entero) (real)
O : (entero) (referencia)
%na expresin es una operacin en la cual un operando es una operacin!
Notaciones
%na expresin se puede representar grficamente como un rbol de expresin! Al aplicar
los tres recorridos normali*ados sobre un rbol de expresin se obtienen las siguientes
tres notaciones:
Pre(i)a
N ; + 1 1 B
In(i)a
+ ; 1 N 1 B
Post(i)a
+ 1 ; 1 B N
Control de sec-encia
Las reglas impl'citas de control destinadas a eliminar el excesi#o uso de par(ntesis en
expresiones exentas de ambigPedad, en notacin con#encional son:
Prioridad de o0eradores
El #alor de la expresin 12 + N + es + & $ 2M en @malltal0!
Asociati*idad 0ara o0eradores de id;ntica 0rioridad
El #alor de la excpresin M B + es 2 en & $ 1 en A"L!
.>. EVALUACIN INCO%PLETA
Hctor Pinc!eira "onejeros
-
Q
Lenguajes de Programacin

@ustentado en el comportamiento de los operadores lgicos, el concepto de
evaluacin incompleta constitu$e una solucin ms eficiente en cuanto a cantidad de
cdigo!
La expresin p(x) q(x) genera el #alor falso si q(x) es falso, sin e#aluar q(x)!
La expresin p(x) q(x) genera el #alor verdadero si p(x) es verdadero, sin
e#aluar q(x)!
Este concepto se incorpora impl'citamente en algunos lenguajes (&;;) $G
expl'citamente en otros (Ada)!
Hctor Pinc!eira "onejeros
.
<
Lenguajes de Programacin

$. SENTENCIAS
$.1. ASI"NACIN
De(inicin
%na asignacin es una sentencia que almacena el #alor del argumento ubicado a la
derec.a del s'mbolo que la representa, en la referencia del argumento ubicado a la
i*quierda del mismo!
l6*alor 1 r6*alor
En la sentencia x 5 x ; 1, la #ariable x tiene un doble comportamiento respecto al #alor
contenido en su referencia: a la i*quierda, uno acti#o que lo modifica, $ a la derec.a, uno
pasi#o que slo lo usa!
Keferencia $ #alor corresponden, respecti#amente, a los conceptos lR#alor $ rR#alor (leftR
#alue $ rig.tR#alue) los cuales expresan la funcin que ellos desempeSan a ambos lados
de un s'mbolo de asignacin!
&onsideraciones:
&ada #ariable tiene un lR#alor que designa su ubicacin en memoria!
%na constante slo tiene rR#alor!
@i p es una #ariable puntero, su rR #alor es la direccin a la cual p apunta $ su lR#alor
es la ubicacin en la cual esa direccin se encuentra almacenada!
"ara una #ariable, el lR#alor es )nicoH sin embargo, un lR#alor puede pertenecer a ms de
una #ariable!
@i dos #ariables 2 e 1 tienen el mismo lR#alor, entonces 2 es llamada =alias de 1= e 1
=alias de 2=! Lenguaje >ortran pro#ee el concepto de alias a tra#(s de la sentencia
Equi#alence!
I.0le.entacin
@ea la sentencia a 5 bH
El compilador genera cdigo para calcular el rR#alor de b en alg)n registro K!
@i los tipos de a $ b son distintos, el compilador genera cdigo para con#ertir en K (si
es posible) el rR#alor de b al tipo de a!
El compilador genera cdigo para almacenar el contenido del registro K en el lR#alor
de a!
!or.as
Hctor Pinc!eira "onejeros
/
12
Lenguajes de Programacin

&iertos lenguajes, como &, definen la asignacin como una operacin binaria infija con
prioridad inferior a la de las restantes operaciones sobre tipos elementales! "or ejemplo:
a 5 ( b 5 c ; d ) ; ( e 5 f ; g )H
Jambi(n, en &, se acepta la expresin m6;;i] 5 i!
Algunos lenguajes, como "LGF, permiten asignaciones de la forma A 5 /, donde A $ /
pueden ser de tipos estructurados compatibles! @i A es un arreglo en "LGF, la asignacin
A52 lo iniciali*a con ceros!
La modalidad gen(rica
#1 , #2 , !!! , #0 e1 , e2 , !!! , e0
constitu$e una asignacin m)ltiple de acuerdo a una correspondencia posicional
entre lR#alores $ rR#alores! Kesulta )til para intercambiar #alores entre #ariables, por
ejemplo:
p, q q, pH
$.. INICIALI?ACIN
%na iniciali*acin consiste en proporcionar un #alor a una #ariable antes de comen*ar la
ejecucin del cdigo al cual pertenece!
La iniciali*acin puede ser impl'cita, por ejemplo asignar el #alor cero a todas las #ariables
num(ricas, o expl'cita, si aparece como parte de una declaracin! "or ejemplo:
int #6D7 5 811, 22, ++, BB, DD9H
$.$. CONTROL DE SECUENCIA
Control de sec-encia i.0l@cito
La ejecucin procede seg)n el orden f'sico de las sentencias que conforman una unidad
de cdigo!
E)ec-cin 0aralela
&iertos lenguajes permiten la ejecucin paralela conceptual de un bloque de
instrucciones!
"ara expresar paralelismo, Tij0stra sugiere la estructura parbeginGparend:
parbegin
@1H
@2H
Hctor Pinc!eira "onejeros
#0
11
Lenguajes de Programacin

AAA
@nH
parendH
"or ejemplo:
parbegin
c617:5 a617 N b617H
c627:5 a627 N b627H
c6+7:5 a6+7 N b6+7H
parendH
Sentencia ,oto
El objeti#o de la sentencia ,oto es el traspaso expl'cito del control a una instruccin con
label desde cualquier punto de un programa, excepto cuando tal instruccin se
encuentra al interior de un bloque!
Ejemplo:
8 int #6127H
int i 5 2H
L : scanf(=Ud=, O#6i7)H
i;;H
if(i 3 12)
goto LH
9
Sentencias de seleccin
Seleccin si.0le (ifRt.en)
Seleccin doble (ifRt.enRelse)
Seleccin .Alti0le (case)
Sentencias de re0eticin
Re0eticin B.ientrasB (C.ile)
Re0eticin BCastaB (repeat)
Re0eticin con *ariable de control (for)
Sentencias de IDO
&onstitu$en la interfa* de comunicacin con las rutinas del sistema operati#o destinadas a
la transferencia de datos!
Sentencias de in*ocacin
Hctor Pinc!eira "onejeros
##
12
Lenguajes de Programacin

&onstitu$en el mecanismo de acti#acin de unidades de programa!
Sentencias estr-ct-radas
&orresponde a la concepcin recurrente de sentencia compuesta o bloque! &iertos
lenguajes, como &, permiten declarar #ariables locales al interior de un bloque, por
ejemplo:
8 int i 5 2H
AAA
8 int j 5 2H
AAA
9
AAA
9
Hctor Pinc!eira "onejeros
#$
1+
Lenguajes de Programacin

&. TIPOS DE DATOS
&.1. CONCEPTOS 49SICOS
De(inicin de ti0o
%n tipo de dato es un conjunto de objetos con una coleccin de operaciones! Jal
conjunto se conoce como dominio!
Ti0o ele.ental
Jambi(n conocido como escalar, es aquel cu$o dominio consta slo de #alores
constantes (enteros, reales, lgicos, caracteres)!
Ti0o estr-ct-rado
Jambi(n conocido como agregado, es aquel en el cual cada uno de los #alores de su
dominio es una composicin de objetos de tipo escalar $Go agregado!
S-bti0o
@e trata de un nue#o tipo definido como un subconjunto de #alores de cierto tipo
predefinido! "or ejemplo, t$pe subrango 5 2!!<<!
&.. CONSTRUCTORES DE TIPOS
Los tipos estructurados de datos se obtienen a partir de los tipos elementales utili*ando
constructores de tipos!
%n constr-ctor de ti0o impone la necesidad de contar con un modelo de construccin para
la futura creacin de objetos en memoria! Los traductores de lenguajes operan con tales
modelos con el propsito de satisfacer abstracciones de alto ni#el!
%n .odelo de constr-ccin est formado por un par consistente en un descri0tor $ un
.odelo de re0resentacin!
El descri0tor es un conjunto de atributos del objeto!
El .odelo de re0resentacin corresponde a la forma f'sica que adoptar el objeto en
memoria!
A partir del .odelo de constr-ccin se genera una (r.-la de acceso cu$a funcionalidad
es la transformacin de referencias lgicas en f'sicas!
Prod-cto Cartesiano
El producto cartesiano de n conjuntos &1, &2, !!! &n, denotado en la forma &1 x &2 x !!! x
&n, es un conjunto cu$os elementos son nRtuplas (c1, c2, !!! cn) donde ci &i! "or
ejemplo, los pol'gonos regulares se pueden caracteri*ar por un n)mero entero que
representa el n)mero de lados $ un n)mero real que representa la longitud de un lado!
Jodo pol'gono regular as' expresado ser'a un elemento del producto cartesiano ZxR!
Hctor Pinc!eira "onejeros
#%
1B
Lenguajes de Programacin

El modelo de construccin del producto cartesiano (modalidad "ascal) consta de un
descriptor $ de la disposicin secuencial de sus componentes (campos) en un bloque!
"or ejemplo
#ar K : record
a : integerH
b : realH
endH
se representa, grficamente, de la siguiente forma:
Tescriptor Vbjeto

El acceso al iR(simo selector, durante ejecucin, se expresa mediante la frmula:
Dir(K!Si) 5 ;
'
j
j
i
=

1
1
donde es la direccin base de K, resuelta en tiempo de carga, $ 'j el tamaSo del jR
(simo selector!
@in embargo, la expresin
'
j
j
i
=

1
1
se resuel#e en tiempo de traduccin!
Luego
Dir(K!Si) 5 ; 1i
con
1i 5
'
j
j
i
=

1
1
$ 11 5 2, constantes!
A0licacin inde2ada
%na aplicacin indexada (tambi(n finita) es una funcin de un conjunto de #alores
pertenecientes a un dominio D sobre un conjunto de #alores pertenecientes a una imagen
I!
Las aplicaciones indexadas se conocen como arreglos! En "ascal,
#ar a: arra$ 61!!D7 of realH
define una aplicacin del subrango de enteros 1!!!D sobre los n)meros reales, pudi(ndose
seleccionar mediante un 'ndice un objeto del conjunto imagen, por ejemplo a60], 1 0
D!
Hctor Pinc!eira "onejeros
#&
,ombre: K
&onstructor: record
@elector 1: a
Jipo 1: integer
JamaSo 1: '1
Tir! relati#a 1: 11 5 2
@elector 2: b
Jipo 2: real
JamaSo 2: '2
Tir! relati#a 2: 12
Tir! base:
a
b
1D
Lenguajes de Programacin

El modelo de construccin de una aplicacin indexada consta de un descriptor $ de un
bloque compuesto de un n)mero entero de unidades direccionables!
Jal es el caso de #ectores $ matrices en "ascal!
El #ector
#ar L : arra$ 62!!<7 of realH
@e representa, grficamente, de la siguiente forma:
Tescriptor Vbjeto

El acceso al iR(simo elemento de L, durante ejecucin , se expresa mediante la frmula:
Dir(L6i]) 5 ; (i R li)N'
donde los #alores li $ ' se determinan en tiempo de traduccin $ la direccin base en
tiempo de carga! Luego,
Dir(L6i]) 5 ; 1 ; iN' con 1 5 Rli2' constante
La matri*
#ar W : arra$ 62!!<,2!!<7 of realH
@e representa, grficamente, de la siguiente forma:
Hctor Pinc!eira "onejeros
#+
,ombre: L
&onstructor: arra$
Jipo elemento: real
JamaSo elemento: '
,um! dimensiones: 1
Jipo 'ndice: integer
L'mite inferior: li
L'mite superior: ls
Tireccin base:
L62]
L61]
L62]
E
E
E
L6<]
11
Lenguajes de Programacin

Tescriptor Vbjeto

El acceso al elemento W6i, j7, durante ejecucin, se expresa mediante la frmula:
Dir(W6i, j]) 5 ;(i R if)NS ; (j R ic)N'
donde los #alores S 5 (sc R ic ; 1)N' ( tamaSo de fila), if, ic $ ' se determinan en tiempo
de traduccin $ la direccin base en tiempo de carga! Luego,
Dir(W6i,j]) 5 ; 1 ; iNS ; jN' con 1 5 R(ifNS ; icN') constante
La frmula de acceso a un elemento de un arreglo multidimensional W, es la siguiente:
Dir(W6in, in3#, !!!, i$, i#]) 5 ;
( ) N i id S
4 4 4
4
n

1
con
S4 5 5rd(451)N' ; 5rd(441)N (sd43# R id43# ; 1)NS43#
$ donde, ' es el tamaSo de un elemento del tipo base, sd4 el l'mite superior de la 4R
(sima dimensin e id4 el l'mite inferior de la 4R(sima dimensin!
Unin
La unin constitu$e una extensin del producto cartesiano, cu$o propsito es permitir, en
cualquier instante de la ejecucin del cdigo al que pertenece, la eleccin de una entre
diferentes estructuras alternati#as, cada una de las cuales se denomina *ariante,
dependiendo del #alor que presenta un selector conocido como discri.inante!
El modelo de construccin de una unin, consta de un descriptor $ del espacio necesario
para sus componentes, considerando el tamaSo de la ma$or #ariante definida!
"or ejemplo:
#ar X : record
a : integerH
case b : boolean of
Hctor Pinc!eira "onejeros
#,
,ombre: W
&onstructor: arra$
Jipo elemento: real
JamaSo elemento: '
,um! dimensiones: 2
Jipo 'ndice: integer
L'm! inf! filas: if
L'm! sup! filas: sf
L'm! inf! columnas: ic
L'm! sup! columnas: sc
Tireccin base:
W62,2]
W62,1]
E
E
E
W62,<]
W61,2]
E
E
E
1M
Lenguajes de Programacin

true: (c : integer)H
false: (d : integerH e : real)H
endH
se representa, grficamente, de la siguiente forma:
Tescriptor Jabla seleccin

Vbjeto




El acceso al iR(simo selector, durante ejecucin, se expresa mediante la frmula:
Dir(X!Si) 5 ; 5rd(ij)N
'
4
4
i
=

1
1
;
5rd(i>j)N( '
4
4
j
=

1
; 5rd(X!Sj5Jrue)N
'
4
4 j
i
= +

1
1
; 5rd(X!Sj5>alse)N
'
4
4 j
i
= +

1
1
)
donde Sj es el selector discriminante!
@in embargo, las expresiones

se resuel#en en tiempo de traduccin!


Luego,
Hctor Pinc!eira "onejeros
#-
,ombre: X
&onstructor: union
@elector 1: a
Jipo 1: integer
JamaSo 1: '1
Tir! relati#a 1: 11 5 2
@elector 2: b
Jipo 2: boolean
JamaSo 2: '2
Tir! relati#a 2: 12
Tir! tabla seleccin:
Tir! base:
@elector +: c
Jipo +: integer
JamaSo +: '+
Tir relati#a +: 1+
@elector+: d
Jipo +: integer
JamaSo +: '+
Tir! relati#a+: 1+
@elector B: e
Jipo B: real
JamaSo B: 'B
Tir! relati#a B: 1B
true false

1Q
Lenguajes de Programacin

Dir(X!Si) 5 ; 5rd(ij)N1i ;
5rd(i>j)N( 1j ; 5rd(X!Sj5Jrue)N1p ; 5rd(X!Sj5>alse)N1q)
con
1i 5
'
4
4
i
=

1
1
, 1j 5 '
4
4
j
=

1
, 1p 5
'
4
4 j
i
= +

1
1
, 1q 5
'
4
4 j
i
= +

1
1
$ 11 5 2 constantes!
Con)-nto 0otencia
&orresponde a un mecanismo de estructuracin que permite definir #ariables cu$o #alor
puede ser cualquier subconjunto de un conjunto de elementos de un determinado tipo J!
El tipo de tales #ariables es el conjunto de todos los subconjuntos de elementos de tipo J,
conocido como tipo base!
@i J 5 8a, b, c9 entonces el conjunto potencia de J es
P (J) 5 8, 8a9, 8b9, 8c9, 8a, b9, 8a, c9, 8b, c9, 8a, b, c99 $
E(P (J)) 5 2
E(J)
5 2
+
5 Q
El modelo de construccin de un conjunto potencia est restringida a los conjuntos
definidos por extensin $ se sustenta en la estructura conocida como strin, de bits.
@i & es una #ariable de tipo conjunto potencia $ E(J) 5 n, entonces & se representa
mediante un string de n bits de modo que, el iR(simo bit en 1 indica la presencia del iR
(simo #alor del tipo J en &, mientras que los n bits en cero indican & 5 .
%n string de bits se identifica conceptualmente con la estructura 0ac5ed arra1 o(
boolean.
&on respecto a las #ariables ", Y $ K, de tipo conjunto potencia de J 5 8a, b, c9, con
" 5 8a, c9, Y 5 8b, c9 $ K 5 "Y 5 8c9,
la correspondiente representacin de string de bits es la siguiente:
a b c
"
Y
K
&.$. ESTRUCTURA DE TIPOS
La estructura de los tipos de datos en un lenguaje la determinan dos componentes:
EF-i*alencia
Hctor Pinc!eira "onejeros
#.
1 2 1
2 1 1
2 2 1
1<
Lenguajes de Programacin

&riterio con el cual se decide que dos objetos son del mismo tipo! @i los tipos de los dos
objetos tienen el mismo nombre, entonces la equi#alencia es no.inalH en cambio, si
tienen la misma estructura, la equi#alencia es estr-ct-ral! Ejemplo :
t$pe E 5 integerH
A 5 arra$61!!127 of integerH
#ar x1 : integerH
x2 : integerH
x+ : EH
#1 : arra$ 61!!127 of integerH
#2 : AH
#+ : AH
Equi#alencia nominal x1 eq x2 $ #2 eq #+ (el tipo de #1 es anni.o)
Equi#alencia estructural x1 eq x2 eq x+ $ #1 eq #2 eq #+
Con*ersin
La con#ersin de tipos en un lenguaje se reali*a con el propsito de transformar
la representacin interna de un r-valor seg)n la representacin interna del
respecti#o l-valor! La con#ersin se puede materiali*ar de dos formas:
&on#ersin impl'cita o coercin!
&on#ersin expl'cita o casting!
"or ejemplo, con el siguiente cdigo en lenguaje &
float p, qH
int s, nH
s 5 DH
n 5 2H
p 5 sGnH GN coercin NG
q 5 (float)sGnH GN casting $ coercin NG
printf(Uf Uf Zn, p, q)H
se despliegan los #alores 2!2 $ 2!D para p $ q, respecti#amente!
Esto debido a que la di#isin entre los enteros s $ n genera un #alor entero, el cual se
con#ierte al tipo de p (coercin)! En la siguiente l'nea, se crea una copia temporal de
tipo float del entero sH luego, se calcula la di#isin entre el #alor de la copia float de s
$ el #alor de una copia float de n (coercin)!
En &, un operador de casting es un operador unario!
&.$. CO%PRO4ACIN DE TIPOS
Hctor Pinc!eira "onejeros
#/
22
Lenguajes de Programacin

&omprobacin de tipos es la accin consistente en #erificar la consistencia entre un lR#alor $
un rR#alor! La comprobacin puede ser esttica, si ocurre durante el proceso de compilacin,
o dinmica, si ocurre durante el proceso de ejecucin!
La comprobacin esttica es ms segura $ eficiente que la dinmica! @in embargo, esta
)ltima (aunque ms costosa en tiempo $ espacio) dota de ma$or flexibilidad a los lenguajes!
&ostosa en tiempo en cuanto a la asignacin $ desasignacin de almacenamiento, al acceso
de datos $ la ejecucin de la operacin misma de comprobacin! &ostosa en espacio debido
a que el compilador no puede establecer el tamaSo de ciertos objetos lo cual impone el uso
de formas de gestin menos eficiente (por ejemplo, .eap)!
@i el objeti#o del diseSo de un lenguaje es la seguridad, entonces se intentar que toda la
comprobacin de tipos se realice durante la compilacin! Lamentablemente, esto no es
siempre posible! Es casi ine#itable la existencia de determinados tipos que fuer*an a
comprobaciones en tiempo de ejecucin! Esto puede ocurrir, por ejemplo, con los
inter#alos!
@i se tiene
t$pe rango 5 1!!122H
#ar 0, n : rangoH
AAA
n :5 2N0 ; 1H
el #alor que se intenta asignar a n slo se puede comprobar durante ejecucin! La misma
situacin se presenta con la comprobacin de 'ndices de arreglos! "or esta ra*n, casi no
existen lenguajes en los cuales toda la comprobacin de tipos se realice durante compilacin!
WL es una de las excepciones! A esta clase de lenguajes se les conoce como =fuertemente
tipados=!
En lenguajes similares a "ascal, la comprobacin de tipos es extraordinariamente simple! @i
la comprobacin es esttica, a partir de la declaracin, el compilador guardar en la tabla de
s'mbolos, para cada objeto, el tipo al que pertenece $, para cada operacin, los tipos de sus
operandos! Luego, al compilar una sentencia comprobar, consultando la tabla, si los
objetos tienen el tipo adecuado! "or ejemplo, si se tiene
x :5 f(x) ; *H
el compilador comprobar que x tenga el tipo del parmetro formal de f, que el tipo de f, el
de x $ el de * coincidan $ todos ellos sean compatibles!
@i la comprobacin fuera dinmica, el proceso ser'a similar, pero durante la ejecucinH para
ello, el compilador, al procesar las declaraciones, generar instrucciones que almacenen el
tipo asociado a cada objeto para que est( disponible durante la ejecucin! "osteriormente, al
procesar una instruccin, el compilador generar instrucciones que consulten la informacin
almacenada sobre los tipos de los objetos, $ que comprueben que los #alores que se #an
obteniendo durante la ejecucin de la instruccin tienen el tipo adecuado!
Hctor Pinc!eira "onejeros
$0
21
Lenguajes de Programacin

8. UNIDADES DE PRO"RA%A
8.1. UNIDADES SU4ORDINADAS
Los lenguajes de programacin permiten que un programa est( compuesto de cierto n)mero
de unidades, conocidas como subprogramas, las cuales se pueden desarrollar en forma
independiente $ cumplen un objeti#o bien definido resultante del proceso de descomposicin
de un problema!
Los subprogramas soportan la definicin de una accin abstracta (cuerpo de un
subprograma) $ su uso (in#ocacin del subprograma)!
Los datos declarados al interior de un subprograma se conocen como locales!
La in#ocacin de una unidad de programa durante ejecucin se conoce como acti*acin.
%na acti#acin se compone de un segmento de cdigo, de contenido fijo, $ un re,istro de
acti*acin de contenido #ariable, el cual inclu$e toda la informacin necesaria para ejecutar
la unidad!
%n subprograma se puede acti#ar desde otra unidad, a la cual se le de#ol#er el control una
#e* finali*ada la ejecucin de aquel! Luego, el registro de acti#acin debe almacenar la
direccin de retorno al efectuarse la in#ocacin!
%n subprograma puede referenciar #ariables no locales, pertenecientes a otro registro de
acti#acin que est( acti#o durante toda la ejecucin! Jales #ariables reciben el nombre de
,lobales!
El entorno de re(erencia para la acti#acin de cierta unidad @ consta de los objetos
contenidos en el registro de acti#acin de @ (entorno local) $ de los objetos contenidos en
los registros de acti#acin de otras unidades (entorno global)!
Estr-ct-ra ti0o !ortran
&ada unidad se compila por separado $ se asocia a un registro de acti#acin cu$o tamaSo
se determina antes de la ejecucin $ permanece ligado a la unidad durante la ejecucin
del programa, aun cuando tal unidad no est( acti#a!
El mbito de una #ariable se reduce a la unidad en la cual se .a declarado! @in embargo,
las unidades pueden tener acceso a #ariables globales, declaradas mediante sentencias
&ommon, las cuales se pueden considerar pertenecientes a un registro de acti#acin que
es global para todas las unidades!
Esta modalidad no soporta las acti#aciones recursi#as!
Hctor Pinc!eira "onejeros
$#
22
Lenguajes de Programacin

Estr-ct-ra ti0o Al,ol
Tos unidades cualesquiera de cdigo fuente pueden ser dis)-ntas o bien anidadas. El
ambiente (contexto de #alide*) de una #ariable 2 local a una unidad % es % $ todas las
unidades al interior de %, para las cuales 2 tiene el carcter de global! Las #ariables
locales se crean impl'citamente al acti#arse la unidad $ la cantidad de almacenamiento
requerido por ellas se determina en tiempo de traduccin!
Al igual que en >ortran, el tamaSo del registro se conoce en tiempo de traduccin! @in
embargo, el referido registro es asignado $ ligado dinmicamente al respecti#o cdigo
con cada nue#a acti#acin!
&on el fin de .acer posible el retorno desde una unidad acti#a es necesario que el registro
de acti#acin contenga:
La direccin de retorno, determinada por el puntero al segmento de cdigo de la
unidad que llama, ms el despla*amiento al interior de ese segmento!
El enlace dinmico, o puntero al registro de acti#acin de la unidad que llama!
,o obstante, el enlace dinmico es considerado elemento de los registros de acti#acin
slo si el respecti#o lenguaje contempla para (stos una estructura de almacenamiento no
contiguo! @i los registros de acti#acin se representan de manera contigua, el enlace
dinmico es innecesario!
El tratamiento de los registros de acti#acin es de naturale*a LF>V $, consecuentemente,
la estructura de soporte el stac0! Esto satisface las expectati#as de la recursi#idad!
In*ocaciones e20l@citas
La comunicacin entre unidades de programa se puede efectuar mediante parmetros! A
diferencia de la comunicacin a tra#(s de entornos globales, los parmetros permiten la
#ariabilidad de los elementos transferidos en diferentes llamadas! Luego, los parmetros
formales constitu$en parte del registro de acti#acin!
[eneralmente, los lenguajes utili*an la modalidad de corres0ondencia 0osicional entre
parmetros act-ales $ (or.ales en llamadas a subprogramas!
@in embargo, existe una alternati#a conocida como corres0ondencia no.inal, en la cual
se indica expl'citamente en la in#ocacin la correspondencia entre parmetros actuales $
formales! "or ejemplo, en la in#ocacin:
Fniciali*ar (Jabla is L, Limite is ,)H
L $ , son los parmetros actuales que corresponden a los parmetros formales Jabla $
Limite en una definicin como
procedure Fniciali*ar(Limite: in integerH Jabla: in out Arreglo)H
Hctor Pinc!eira "onejeros
$$
2+
Lenguajes de Programacin

In*ocaciones i.0l@citas
&iertos lenguajes contemplan la in#ocacin impl'cita de una unidad cuando se produce
alguna situacin de excepcin! Esta cualidad permite excluir aquellos errores que podr'an
des#iar la atencin del objeti#o principal del programa!
Las unidades que se acti#an cuando se detecta alguna irregularidad se denominan
.ane)adores de e2ce0ciones!
%n manejador de excepciones en Telp.i se establece como bloque protegido, delimitado
por tr$Gend, en cu$o interior las palabras reser#adas except o finall$ pro#een dos formas
alternati#as de comportamiento: except se usa para tratar errores mediante una
instruccin adR.ocH finall$ para ejecutar acciones finales de liberacin de recursos tales
como memoria!
Ejemplos:
function "otencia(/ase, Exponente : Keal) : KealH
begin
tr$
Kesult :5 Exp(Ln(Abs(/ase))NExponente)H
if (/ase 3 2) And (Vdd(Jrunc(Exponente))) t.en Kesult :5 RKesultH
except
on EWat.Error do Kesult :5 2H
endH
endH
function >ib(, : /$te) : LongintH
t$pe "untero 5 \ArregloH
Arreglo 5 Arra$62!!2DD] of LongintH
#ar Lista : "unteroH
/ : /$teH
> : LongintH
begin
,eC(Lista)H
tr$H
Lista\62] :5 2H
Lista\61] :5 1H
for / :5 2 to ,R1 do Lista\6/] :5 Lista\6/R1] ; Lista\6/R2]H
> :5 Lista\6,R1]H
finall$
Tispose(Lista)H
endH
Kesult :5 >H
endH
Hctor Pinc!eira "onejeros
$%
2B
Lenguajes de Programacin

8.. UNIDADES SI%GTRICAS
Las unidades sim(tricas, o corrutinas, son unidades que se acti#an mutua, alternada $
expl'citamente! El cdigo, en Algol1Q:
corroutine IH
begin
AAA
resume ]H
AAA
resume ]H
AAA
endH
corroutine ]H
begin
AAA
resume IH
AAA
resume IH
endH
se puede representar, grficamente, como sigue:
I ]

La sentencia =resume= tiene un comportamiento similar al de una sentencia =call= con la
sal#edad de que el punto de entrada a la corrutina es #ariable!
La ejecucin de una sentencia =resume= en I in#olucra dos acciones:
Almacenar en la direccin de reinicio la direccin de la sentencia inmediatamente
posterior a resume ]!
Accesar la direccin de reinicio de ] para obtener la direccin en la cual debe continuar
la ejecucin!
8.$. UNIDADES CONCURRENTES
Tos procesos son paralelos si se pueden ejecutar (conceptualmente) en forma simultnea!
Hctor Pinc!eira "onejeros
$&

resume ]

resume ]
resume I
resume I
2D
Lenguajes de Programacin

Tos procesos paralelos son disjuntos si, durante ejecucin, no acceden a recursos
compartidos!
Tos procesos paralelos son concurrentes si, durante ejecucin, interact)an compitiendo
por el acceso a recursos compartidos (competicin) $ cooperando para alcan*ar un objeti#o
com)n (cooperacin)!
Los procesos concurrentes interact)an en forma correcta slo si existe una cierta relacin de
procedencia entre sus acciones elementales, lo cual se logra estableciendo una adecuada
sincroniHacin entre ellos!
Wecanismos de sincroni*acin:
Se.+(oros
%n semforo constitu$e un mecanismo de bajo ni#el $ se define como un objeto de dato
que toma #alores enteros $ sobre el cual se pueden reali*ar las operaciones atmicas " $
L!
%onitores
%n monitor es un tipo abstracto de dato con las operaciones primiti#as Agregar $
Extraer! La exclusin mutua en el acceso a recursos compartidos est impl'citamente
garanti*ada por la implementacin! @in embargo, la cooperacin debe programarse
expl'citamente, suspendiendo $ acti#ando procesos mediante operaciones primiti#as!
RendeH*o-s
Es el mecanismo proporcionado por el lenguaje Ada para establecer la sincroni*acin de
procesos concurrentes (a los que se les denomina =tas0s=) mediante el cual desaparece la
distincin entre entidades acti#as (procesos) $ pasi#as (monitores)! Este esquema refleja
ms claramente el comportamiento de un sistema concurrente en una estructura
distribuida, en la cual recursos ajenos son administrados por procesos que act)an como
guardianes!
Hctor Pinc!eira "onejeros
$+
21
Lenguajes de Programacin

:. PARA%ETRI?ACIN
&ada uno de los elementos que participan en la representacin de una #ariable (nombre,
tipo, referencia $ #alor) es susceptible de ser parametri*ado! @in embargo, la
parametri*acin del tipo establece una diferencia conceptual importante en la categori*acin
de los lenguajes!
Luego, se diferenciar entre parametri*acin de datos (para aludir al nombre, la referencia o
el #alor) $ parameti*acin de tipos! "or otra parte, adems de datos, tambi(n es posible la
parametri*acin de subprogramas!
:.1. PARA%ETRI?ACIN DE DATOS
&onsid(rense los siguientes subprogramas:
#oid uno(3modalidad4 int a, 3modalidad4 int b)
8
a 5 MH
b 5 DH
9
#oid cero()
8 int c, dH
c 5 DH
d 5 MH
uno(c, d)H
cout 33 c 33 dH
9
Lla.ada 0or no.bre
/ajo esta modalidad, al producirse una in#ocacin, cada parmetro formal es
textualmente sustituido por el respecti#o parmetro actual!
En este caso, 3modalidad4 ::5 name!
Ejemplo:
c 5 DH
d 5 MH
uno(c, d)H
cout 33 c 33 dH

M D
$a que la regla de sustitucin establece que, en =uno=, las sentencias a ejecutar son:
Hctor Pinc!eira "onejeros
$,
2M
Lenguajes de Programacin

c 5 MH
d 5 DH
Esta regla, aparentemente simple, puede pro#ocar efectos inesperados! "or ejemplo, si
se tiene
#oid sCap(name int a, name int b)
8 int tempH
temp 5 aH
a 5 bH
b 5 tempH
9
la llamada sCap(i, #[i])H puede producir un resultado impre#isible e incorrecto, $a
que la regla de sustitucin especifica que las sentencias a ejecutar son:
temp 5 iH
i 5 #6i7H
#6i7 5 tempH
de modo que, si i 5 + $ #6+7 5 B antes de la llamada, entonces i 5 B $ #6B7 5 + al
finali*ar la ejecucin!
1 2 + B D n

# :
Vtra situacin poco clara se presenta con el cdigo
int c 5 DH
#oid sCap(name int a, name int b)
8 int tempH
temp 5 aH
a 5 bH
b 5 tempH
c 5 c ; 1H
9
#oid dos()
8 int c, dH
c 5 DH
d 5 MH
sCap(c, d)H
cout 33 c 33 dH
9
#oid main()
8 dos()H 9
$a que la regla de sustitucin especifica que las sentencias a ejecutar son:
Hctor Pinc!eira "onejeros
$-
< 1 B Q 2 AAA 1

2Q
Lenguajes de Programacin

temp 5 cH
c 5 dH
d 5 tempH
c 5 c ; 1H
segmento de cdigo en el cual la #ariable c de la )ltima l'nea no es la misma que
aparece en las l'neas primera $ segunda!
Lla.ada 0or re(erencia
Los parmetros actuales transfieren su referencia a los respecti#os parmetros formales!
@i se acepta como parmetro actual una expresin, se transfiere la direccin de la #ariable
temporal que contiene el #alor de la expresin!
En este caso, 3modalidad4 ::5 ref!
Ejemplo:
c 5 DH
d 5 MH
uno(c, d)H
cout 33 c 33 dH

M D
Lla.ada 0or co0ia
Los parmetros actuales se relacionan con sus respecti#os parmetros formales
mediante la asignacin de #alores!
Existen tres formas:
Lla.ada 0or *alor
Los #alores de los parmetros actuales se utili*an para iniciali*ar los respecti#os
parmetros formales!
En este caso, 3modalidad4 ::5 in!
Ejemplo:
c 5 DH
d 5 MH
uno(c, d)H
cout 33 c 33 dH

D M
Al producirse la in#ocacin de =uno= se ejecutan las acciones a 5 c $ b 5 dH
Hctor Pinc!eira "onejeros
$.
2<
Lenguajes de Programacin

Lla.ada 0or res-ltado
Los parmetros formales no se iniciali*an al in#ocarse el subprograma pero, al
terminar (ste su ejecucin, los #alores de aquellos son asignados a los respecti#os
parmetros actuales usados en la llamada!
En este caso, 3modalidad4 ::5 out!
Ejemplo:
uno(c, d)H
cout 33 c 33 dH

M D
Al finali*ar la ejecucin de =uno= se ejecutan las acciones c 5 a $ d 5 bH
Lla.ada 0or *alor6res-ltado
@e trata de un efecto combinado de llamada por #alor, al producirse la in#ocacin, $
llamada por resultado, al terminar la ejecucin del subprograma!
En este caso, 3modalidad4 ::5 in out!
Ejemplo:
c 5 DH
d 5 MH
uno(c, d)H
cout 33 c 33 dH

M D
Lla.ada 0or indireccin
@e trata de una llamada por #alor en la cual el parmetro formal recibe la direccin de la
#ariable utili*ada como parmetro actual!
En este caso, tambi(n 3modalidad4 ::5 in! @in embargo, en la definicin se debe
anteponer el operador de indireccin (por ejemplo, N) al nombre del parmetro formal $,
en la in#ocacin, se debe anteponer el operador de direccin (por ejemplo, O) al nombre
del parmetro actual!
#oid uno(in int Na, in int Nb)
8
Na 5 MH
Nb 5 DH
9
#oid cero()
Hctor Pinc!eira "onejeros
$/
+2
Lenguajes de Programacin

8 int c, dH
c 5 DH
d 5 MH
uno(Oc, Od)H
cout 33 c 33 dH

9 M D
:.. PARA%ETRI?ACIN DE TIPOS
Unidades ,en;ricas
En lenguaje Ada, la parametri*acin de tipos se define mediante el concepto de -nidad
,en;rica $ se implementa mediante el concepto de .acro6e20ansin.
%na unidad gen(rica es una unidad formal (modelo) cu$os parmetros son instalados en
tiempo de traduccin produci(ndose una unidad actual!
La parametri*acin de tipos conlle#a un alto ni#el de abstraccin $ reduce el tamaSo del
cdigo fuente, como se obser#a en el siguiente subprograma gen(rico en lenguaje Ada:
generic t$pe JH
procedure @Cap(I, ] : in out J) is
Jemp : JH
begin
Jemp:5 IH
I :5 ]H
] :5 JempH
endH
En este caso, el tipo de I e ] es el parmetro que debe ser sustituido en tiempo de
traduccin! La produccin de distintos subprogramas, que difieran slo en el tipo de
sus argumentos, se puede lograr, por ejemplo, mediante:
procedure @Capinteger is neC @Cap (integer)H
procedure @Capreal is neC @Cap (real)H
Plantillas de (-nciones
En lenguaje &;;, las funciones gen(ricas, es decir las funciones que parametri*an
tipos, se presentan como plantillas de funciones! @e escribe una definicin de plantilla
de funcin con el propsito de que el compilador genere, en forma automtica, tantos
cdigos objeto de funcin como llamadas con diferentes tipos de argumentos existan!
%na plantilla de funcin se define, por ejemplo, como template 3&LA@@ J4, donde
template $ &LA@@ son palabras reser#adas $ J es un parmetro formal de tipo (puede
.aber #arios)!
Hctor Pinc!eira "onejeros
%0
+1
Lenguajes de Programacin

Einclude 3iostream!.4
template 3&LA@@ J4
#oid printArra$(J Narra$, const int 0)
8 for(int i 5 2H i 3 0H i;;)
cout 33 arra$6i7 33 = =H
cout 33 ^Zn^H
9
main()
8 const int a0 5 B, b0 5 1, c0 5 DH
int a6B7 5 81, 2, +, B9H
float b617 5 81!1, 2!2, +!+, B!B, D!D, 1!19H
c.ar c6D7 5 =_ola=H
cout 33 =El arreglo a contiene: Zn=H
printArra$(a, a0)H
cout 33 =El arreglo b contiene: Zn=H
printArra$(b, b0)H
cout 33 =El arreglo c contiene: Zn=H
printArra$(c, c0)H
9
:.$. PARA%ETRI?ACIN DE SU4PRO"RA%AS
El uso de un subprograma como parmetro requiere pasar una referencia al segmento de
cdigo del parmetro actual $ la informacin relati#a al entorno no local de ese parmetro!
"or consiguiente, un subprograma parmetro se puede representar como un par ordenado
(c, r) donde c es un puntero al segmento de cdigo $ r un puntero al registro de acti#acin
de la unidad que contiene la definicin del subprograma!
En el cdigo mostrado a continuacin, " llama a / con el procedimiento A como parmetro
actual! &omo / tiene definido un parmetro formal I, la llamada a I acti#a el
procedimiento A! @eguidamente, / se autoin#oca con el procedimiento & como parmetro
actual!
Hctor Pinc!eira "onejeros
%#
+2
Lenguajes de Programacin

procedure "!!!
AAA
procedure A!!!
AAA
begin
AAA
endH
procedure /(procedure I)H
#ar $: integerH
procedure &!!!
AAA
begin
AAA
endH
begin
IH
/(&)H
AAA
endH
begin
AAA
/(A)H
AAA
endH
La parametri*acin de funciones en lenguaje & se puede obser#ar en el siguiente cdigo:
t$pedef int function(int)H
t$pedef int #ector6D7H
#ector # 5 8D, 1, M, Q, <9H
int mas(int 0)
8return 0 ; 2H 9
int por(int 0)
8return 2N0H 9
int suma(function Nf)
8 int i, s 5 2H
for(int i 5 2H i 3 DH i;;)
s ;5 f(#6i7)H
return sH
9
#oid main()
8 printf(=Ud=, suma(mas))H
printf(=Ud=, suma(por))H
9
Hctor Pinc!eira "onejeros
%$
++
Lenguajes de Programacin

>. CONTROL DE DATOS
>.1. DE!INICIONES
Alcance
Kango de cdigo en el cual est acti#o un nombre de objeto, es decir, segmento de
programa en el cual todas las instancias de un identificador se refieren al mismo objeto de
dato!
E2tensin
Jiempo de ejecucin durante el cual una #ariable se encuentra ligada a su referencia!
Entorno de re(erencia
&onjunto de objetos de dato acti#os al interior de un segmento de cdigo! Yueda
determinado por las reglas de alcance que pro#ee el lenguaje!
>.. RE"LAS DE ALCANCE
Est+ticas
"ermiten determinar el alcance de un nombre de objeto de dato durante compilacin
(>ortran, "ascal, &, Ada, etc!)!
Esta modalidad se basa en el concepto de re,istros de acti*acin l;2ica.ente
anidados, es decir, el uso de un objeto de dato genera una b)squeda del nombre de ese
objeto en (el registro de acti#acin de) la unidad en cursoH si no se encuentra all', se le
busca en la primera unidad que inclu$a (l(xicamente) a aquellaH de no encontrarse en ese
ambiente, se le busca en la siguiente unidad jerrquicamente superiorH este proceso se
puede extender .asta llegar al programa principal!
Din+.icas
"ermiten determinar el alcance de un nombre de objeto de dato durante ejecucin (Apl,
Lisp, @nobol, etc!)!
/ajo esta modalidad, el uso de un objeto de dato pro#oca la b)squeda del nombre de ese
objeto en (el registro de acti#acin de) la unidad en cursoH si no se encuentra all', se le
busca en la unidad que in#oc a aquellaH de no encontrarse en ese ambiente, el proceso
de b)squeda contin)a en sentido in#erso al de las in#ocaciones, .asta encontrar el objeto
en cuestin!
E)e.0lo
&on respecto a la ejecucin del siguiente cdigo:
Hctor Pinc!eira "onejeros
%%
+B
Lenguajes de Programacin

program Alcance(input, output)H
#ar b: integerH
procedure XH
begin
Crite(b)H
endH
procedure ]H
#ar b: integer
begin
b :5 <H
XH
endH
begin
b :5 DH
]H
end!
seg)n las reglas de alcance esttico, se imprime D $, seg)n las reglas de alcance
dinmico, se imprime <!
>.$. I%PLE%ENTACIN
Alcance est+tico
En >ortran, la extensin de los objetos de datos en un programa coincide con el tiempo
destinado a su completa ejecucin! &uando se in#oca un subprograma, se acti#an todos
los objetos locales, con excepcin de aquellos declarados en una sentencia &ommon! Al
terminar la ejecucin del subprograma, se desacti#an todos los objetos locales
(manteniendo los )ltimos #alores adquiridos) $ se acti#an todos los objetos de la unidad
que lo in#oc! &ada subprograma posee un registro de acti#acin que contiene:
Ob)etos locales
Par+.etros
Direccin de +rea Co..on
Direccin de retorno
En "ascal, la extensin de los objetos de datos en un programa comien*a en el instante en
que este se acti#a $ termina cuando de#uel#e el control a la unidad que lo in#oc! La
excepcin la constitu$en los datos creados con neI los cuales slo son destruidos con
dis0ose! &ada subprograma posee un registro de acti#acin que contiene:
Ob)etos locales
Par+.etros
Enlace a ob)etos no locales acti*os
Direccin de retorno
Hctor Pinc!eira "onejeros
%&
+D
Lenguajes de Programacin

Enlace din+.ico
La referenciacin de objetos no locales se consigue mediante una cadena de 0-nteros
est+ticos, lo cual significa que cada registro de acti#acin inclu$e un puntero al registro
de acti#acin del primer subprograma que lo contenga l(xicamente!
Lo anterior se encuentra condicionado por las operaciones 0-sC 1 0o0 de registros
(seg)n se concreten las in#ocaciones $ conclu$an las ejecuciones de subprogramas) sobre
un stac0 de registros de acti#acin!
A partir del siguiente cdigo:
program %H
procedure AH
procedure /H
procedure &H
begin
AH
end 8&9H
begin
&H
end 8/9H
procedure TH
begin
/H
end 8T9H
begin
TH
end 8A9H
begin
AH
end 8%9!
es posible construir la cadena de punteros estticos $ el stac0 de registros de acti#acin!
Alcance din+.ico
El soporte de las reglas de alcance dinmico es un stac0 de registros de acti#acin $ la
referenciacin de objetos de datos no locales desencadena procesos de b)squeda
determinados por el comportamiento LF>V! El registro de acti#acin perteneciente a
cada unidad de programa contiene:
Ob)etos locales
Par+.etros
Direccin de retorno
Enlace din+.ico
Hctor Pinc!eira "onejeros
%+
+1
Lenguajes de Programacin

>.&. E'TENSIN DE DATOS
Las caracter'sticas de los datos determinan su extensin $ se establecen durante el proceso
de definicin de un lenguaje!
Existen tres categor'as de datos:
Est+ticos
Jienen una extensin coincidente con la ejecucin de la totalidad del programa! El
soporte de almacenamiento es un rea fija de memoria (>ortran)!
A-to.+ticos
Jienen una extensin determinada por el tiempo que toma la ejecucin de la totalidad de
la unidad en la cual se encuentran definidos! El soporte de almacenamiento es un stac0 de
registros de acti#acin!
Din+.icos
Jienen una extensin definida por el programador, quien los crea $ destru$e
expl'citamente! El soporte de almacenamiento es un bloque de memoria denominado
Cea0!
Tependiendo de la extensin in.erente a los datos, cada lenguaje utili*a una o ms
alternati#as de soporte de almacenamiento!
>.8. SOPORTE JEAP
%n .eap es un bloque de memoria compuesto de elementos de tamaSo fijo o #ariable, dentro
del cual se puede reser#ar o liberar espacio de manera no estructurada!
Jea0 de ele.entos de ta.aKo (i)o
@i 0 es el tamaSo de un elemento (en b$tes) $ n es la cantidad total de elementos del
.eap, entonces (ste ocupar un espacio de 0Nn b$tes!
En un .eap, el espacio disponible tiene la estructura de una lista de enlace simpleH luego,
cada #e* que se solicita espacio, se despla*a el puntero de acceso al prximo elemento
libre, $ se retorna un puntero al primer elemento del espacio reser#ado!
Los elementos que conforman una #ariable, pueden distribuirse, por ejemplo, del
siguiente modo:
No.bre 1 Re(erencia, en un espacio fijo de memoria (tabla de #ariables)!
Atrib-to 1 Valor, en un espacio al interior de un .eap (a partir de la referencia)!
Hctor Pinc!eira "onejeros
%,
+M
Lenguajes de Programacin

El proceso de de#olucin de elementos en desuso a la lista de espacio disponible es
simple, sin embargo, el proceso de identificacin de esos elementos como tales resulta ser
extremadamente complejo! Existen tres formas de solucin a este problema:
De*ol-cin e20l@cita
Wecanismo que permite al programador identificar $ de#ol#er los elementos en
desuso! "resenta dos incon#enientes:
Dan,lin, re(erence
"untero a un elemento que .a sido de#uelto a la lista de espacio disponible!
&onceptualmente, en "ascal,
neC(p)H q :5 pH dispose(p)H 8q es una dangling reference9
&omo ejemplo de dangling reference en lenguaje & se tiene
int Nf(#oid)
8 int x 5 1H
return OxH
9
donde la funcin f retorna una dangling reference debido a que la extensin de la
#ariable local x termina con la acti#acin de f!
"arba,e
Elemento en condicin de ser reutili*ado pero inaccesible debido a su no
de#olucin a la lista de espacio disponible! &onceptualmente, en "ascal,
neC(p)H p:5qH
Tangling reference es, potencialmente, ms peligroso que garbage!
C-enta re(erencias
&onsiste en incluir, al interior del espacio para cada #ariable en el .eap, un contador
de referencias que lo apuntan! Al reser#arse un espacio, el contador se iniciali*a en 1H
cada #e* que se le asocia una nue#a #ariable, el contador se incrementa en 1H en
cambio, cada #e* que una #ariable se desliga de ese espacio, el contador se
decrementa en 1! @i el contador toma el #alor 2, el espacio en cuestin se de#uel#e a
la lista de espacio disponible!
"arba,e Collection
Esta t(cnica consiste en que, cuando la lista del espacio disponible se agota $ se
requiere ms memoria, se suspende temporalmente la ejecucin del proceso solicitante
precedi(ndose a marcar los elementos en uso $ recolectar los elementos en desuso
(de#ol#erlos a la lista de espacio disponible)!
Jea0 de ele.entos de ta.aKo *ariable
En este caso, se desea organi*ar el espacio disponible en bloques del mximo tamaSo
posible! Luego, inicialmente, el .eap tiene el carcter de bloque disponible )nico $,
solicitar un bloque de m b$tes implica:
A#an*ar m posiciones al puntero de acceso!
Ketornar la direccin a la cual apuntaba el puntero de acceso!
Hctor Pinc!eira "onejeros
%-
+Q
Lenguajes de Programacin

A causa de la #ariabilidad en el tamaSo de los bloques, el problema de reutili*acin de
espacio se puede resol#er de dos formas:
/uscar en la lista el espacio disponible $ reser#ar un bloque del tamaSo adecuado
de#ol#iendo, si existe, el espacio sobrante de la lista!
[enerar un )nico bloque de espacio disponible mediante el despla*amiento de todos
los elementos en uso .acia un extremo del .eap (compactacin)!
Hctor Pinc!eira "onejeros
%.
+<
Lenguajes de Programacin

L. PRO"RA%ACIN ORIENTADA A O4#ETOS
L.1. ORIENTACIN A O4#ETOS
Los len,-a)es de 0ro,ra.acin
Lisp >la#ors Loops &los
Eiffel
@imula @malltal0
Actor
Algol Vbjecti#e &
& &;; -a#a
"ascal Vbject "ascal Telp.i
1<12 1<M2 1<Q2 1<<2
!-nda.entos
Jipo abstracto de datos (JAT) es un modelo conceptual representati#o de un
conjunto de objetos cu$as caracter'sticas slo se pueden establecer a tra#(s de una
coleccin de operaciones!
Encapsulamiento es la propiedad que permite reunir datos $ operaciones al interior de
una estructura )nica, restringir su acceso $ ocultar informacin!
-erarqu'a es la propiedad que permite ordenar estructuralmente las abstracciones! @e
presenta en las formas de especiali*acin (relacin esRun) $ agregacin (relacin tieneR
un)!
"olimorfismo es la propiedad que permite a una entidad la adopcin de m)ltiples
formas! @e presenta en calidad de polimorfismo param(trico, polimorfismo adR.oc
(sobrecarga) $ polimorfismo jerrquico!
CaracteriHacin
%n objeto es un modelo de una entidad concreta o abstracta!
Vbjetos de una misma categor'a constitu$en una clase!
%n objeto es un ejemplar (instancia) de una clase!
Los objetos interact)an mediante mensajes!
%n m(todo (operacin) se acti#a mediante un mensaje en#iado al objeto!
Hctor Pinc!eira "onejeros
%/
B2
Lenguajes de Programacin

%n atributo (dato) es una #ariable interna mantenida por un ejemplar!
Los atributos de un objeto representan su estado!
Los m(todos de un objeto determinan su comportamiento (conducta)!
%n objeto es la combinacin de estado $ comportamiento!
Los ser#icios que pro#ee un objeto definen su comportamiento $ se ofrecen como
un conjunto de m(todos que se acti#an mediante mensajes!
%n miembro de una clase puede ser atributo o m(todo!
Interaccin entre ob)etos
%n objeto (agente emisor) en#'a un mensaje a otro objeto (agente receptor)!
El mensaje tiene codificada la peticin de una accin!
El mensaje inclu$e los argumentos (datos) necesarios para satisfacer la peticin!
El receptor que acepta un mensaje, acepta la responsabilidad de responder con la
ejecucin del m(todo que satisface la peticin!
La clase del receptor determina que m(todo se acti#a como respuesta a un mensaje!
Jodos los objetos de una clase usan el mismo m(todo en respuesta a mensajes
similares!
#erarF-@a
Wam'fero
>elino _umano Wonotremas
@ocilogo Fngeniero Artista
Ana Luis Vrnitorrinco Equidna
EF-i*alencia entre 0aradi,.as
Orientado a ob)etos Proced-ral
Vbjeto Lariable
&lase Jipo
W(todo "rocedimiento
Wensaje Llamada
-erarqu'a de clases -erarqu'a de tipos
Jerencia
Hctor Pinc!eira "onejeros
&0
B1
Lenguajes de Programacin

Jodas las clases pertenecen a una estructura jerrquica!
@e puede definir una nue#a clase a partir de una existente!
La nue#a clase se denomina subclase o clase deri#ada!
La clase existente se denomina superclase o clase base!
_erencia es la propiedad que permite a los ejemplares de una subclase acceder a los
miembros de la superclase!
Las subclases .eredan tanto los atributos como los m(todos de la superclase!
La .erencia es transiti#a!
%na subclase tiene todas las propiedades de la superclase $ otras ms (extensin)!
%na subclase constitu$e una especiali*acin de la superclase (reduccin)!
%n m(todo de superclase es anulado por un m(todo con el mismo nombre definido
en la subclase!
%na clase abstracta es una superclase que slo se usa para definir subclases $ para
la cual no se requiere crear ejemplares!
%na clase abstracta proporciona los atributos $ los m(todos que debieran compartir
todas las subclases de ella!
Al igual que una clase no abstracta, una clase abstracta puede incluir atributos $
m(todos no abstractos!
Los m(todos abstractos no pueden pertenecer a clases no abstractas!
Los m(todos abstractos deben ser redefinidos en las subclases de la clase abstracta!
Constr-ctores 1 destr-ctores
%n constructor es un m(todo especial que tiene el mismo nombre de la clase!
El constructor se in#oca automticamente para crear un objeto de cierta clase!
%n constructor por omisin es un constructor sin parmetros proporcionado por el
compilador ante la no especificacin de ese m(todo en la clase!
El mecanismo de constructores se puede combinar con la capacidad de sobrecarga
(dos o ms cuerpos de m(todo con un mismo nombre)!
Los m(todos sobrecargados se diferencian mediante distintas listas de argumentos!
@e usa esta capacidad para proporcionar ms de una alternati#a de iniciali*acin!
%n constructor de subclase siempre in#oca primero al constructor de su superclase!
%n destructor es un m(todo especial destinado a la destruccin de un objeto!
El orden de destruccin de los objetos es in#erso al orden de construccin de los
mismos!
L.. PRO"RA%ACIN EN CMM
Notacin
Los m(todos se conocen como funciones miembro $ los atributos como miembros
de datos!
Hctor Pinc!eira "onejeros
&#
B2
Lenguajes de Programacin

La notacin del en#'o de mensajes es la misma utili*ada para referenciar campos de
un registro, es decir, nombre del objeto receptor, seguido por un punto, seguido
por el nombre del m(todo!
Destr-ctores
%n destructor es un m(todo con el mismo nombre de la clase, precedido por el
s'mbolo !
El destructor se ejecuta para producir la liberacin del espacio asignado a un
objeto: para un objeto automtico, cuando termina la ejecucin del bloque que
contiene la declaracinH para un objeto dinmico, cuando se aplica el operador
delete!
E)e.0lo
class @tac0
8 pri#ate:
int #61227H
int topH
public:
#oid create()H
#oid pus.(int e)H
int pop()H
int empt$()H
9H
#oid @tac0::create()
8 top 5 1H9
#oid @tac0::pus.(int e)
8 if(top 3 <<)
8 top;;H
#6top7 5 eH
9
9
int @tac0::pop()
8 int mH
if (top 4 1)
8 m 5 topH
top H
return #6m7H
9
else
return 2H
9
int @tac0::empt$()
8 return top 55 1H9
#oid main()
8 @tac0 sH
Hctor Pinc!eira "onejeros
&$
B+
Lenguajes de Programacin

int i, 0, nH
cout 33 =Fngrese un #alor entero menor que <<: =H
cin 44 nH
s!create()H
for (i 5 2H i 3 nH i;;)
8 cout 33 =Fngrese un #alor entero : =H
cin 44 0H
s!pus.(0)H
9
C.ile (`s!empt$())
8 0 5 s!pop()H
cout 33 =%ltimo #alor: = 33 0 33 endlH
9
9
E)e.0lo
class &omplejo
8 pri#ate:
float realH
float imagH
public:
&omplejo()H
&omplejo(float)H
&omplejo(float, float)H
#oid imprimir()H
&omplejo()H
9H
&omplejo::&omplejo()
8 real 5 imag 5 2H 9
&omplejo::&omplejo(float pr)
8 real 5 prH imag 5 2H 9
&omplejo::&omplejo(float pr, float pi)
8 real 5 prH imag 5 piH 9
#oid &omplejo::imprimir()
8 cout 33 =(= 33 real 33 =,= 33 imag 33 =)=H 9
&omplejo::&omplejo()
8 cout 33 =liberando complejo = 33 real 33 imagH 9
#oid main()
8 &omplejo x, $(B!2), N*H
* 5 neC &omplejo(+!1B1D<, 2!B)H
x!imprimir()H
$!imprimir()H
(N*)!imprimir()H
9
E)e.0lo
class >raccion
Hctor Pinc!eira "onejeros
&%
BB
Lenguajes de Programacin

8 pri#ate:
int numH
int denH
public:
>raccion(int, int)H
#oid imprimir()H
float #alor()H
9H
>raccion::>raccion(int p, int q)
8 num 5 pH
den 5 qH
9
#oid >raccion::imprimir()
8 cout 33 ^Zn^H
cout 33 num 33 =G= 33 den 33 =5=H
9
float >raccion::#alor()
8 return (float)numGdenH 9
#oid main()
8 int n, dH
float xH
do
8 cout 33 =,umerador:=H
cin 44 nH
cout 33 =Tenominador:=H
cin 44 dH
if (d `5 2)
8 cout 33 =Vbjeto de clase >raccion=H
>raccion f(n,d)H
f!imprimir()H
x 5 f!#alor()H
cout 33 xH
9
9C.ile (d `5 2)H
9
E)e.0lo
class Lenguajes
8 pri#ate:
c.ar Nto0enH
public:
Lenguajes(c.ar N)H
Lengua()H
9H
Lenguajes::Lenguajes(c.ar Nt)
8 to0en 5 tH
cout 33 =Lenguaje= 33 to0en 33 endlH
Hctor Pinc!eira "onejeros
&&
BD
Lenguajes de Programacin

9
Lenguajes::Lenguajes()
8 cout 33 =orientado a objetos es= 33 to0en 33 endlH 9
#oid main()
8 Lenguajes bb(=Vbject "ascal=)H
cout 33 =es compilado!= 33 endlH
8 Lenguajes cc(="ascal=)H
cout 33 =tambi(n lo es! "ero no= 33 endlH
9
cout 33 =En cambio s'= 33 endlH
9
E)e.0lo
class Lista
8 pri#ate:
int datoH
Lista Nlin0H
public:
Lista(Lista Nnext, int e)
8 dato 5 eH lin0 5 nextH 9
Lista Nsiguiente()
8 return lin0H 9
int #alor()
8 return datoH 9
9
#oid main()
8 int j 5 DH
Lista Np 5 neC Lista(2,j)H
for(j 5 BH j 4 2H j)
8 p 5 neC Lista(p,j)H 9
9
Inter(aH e i.0le.entacin
"ara codificar una clase es posible $ deseable distinguir entre interfa* (es decir la
forma en que un objeto se conectar con el mundo) $ la implementacin (o sea la
forma en que se lograr la responsabilidad prometida en la interfa*!
La separacin entre interfa*, implementacin $ uso de una clase resulta ser uno de los
principios fundamentales la ingenier'a de softCare! &on esto, los cambios en la
implementacin, que no alteren la interfa*, pasan desapercibidos por los clientes de la
clase!
%na forma consiste en crear un arc.i#o, con extensin =!.=, destinado a la interfa* de
una clase $ otro, con extensin =!cpp=, destinado a la implementacin de la misma! Vtra
forma consiste en crear un )nico arc.i#o, con extensin =!.=, destinado a la interfa* e
implementacin de una clase! El uso de esa clase se consigue creando un =main= en un
arc.i#o con extensin =!cpp=, que inclu$a al arc.i#o con extensin =!.=!
Hctor Pinc!eira "onejeros
&+
B1
Lenguajes de Programacin

E)e.0lo
GG Fnterfa* de la clase @tac0 en el arc.i#o defstac0!.
Eifndef defstac0
Edefine defstac0
class @tac0
8 pri#ate:
int #61227H
int topH
public:
@tac0()H
#oid pus.(int)H
int pop()H
int empt$()H
9H
Eendif
GG Fmplementacin de la clase @tac0 en un arc.i#o con extensin cpp
Einclude 3iostream!.4
Einclude =defstac0!.=
@tac0::@tac0()
8 top 5 R1H9
#oid @tac0::pus.(int e)
8 if(top 3 <<)
8 top 5 top ; 1H
#6top7 5 eH
9
9
int @tac0::pop()
8 int mH
if (top 4 R1)
8 m 5 topH
top 5 top R 1H
return #6m7H
9
else
return 2H
9
int @tac0::empt$()
8 return top 55 R1H9
GG %so de la clase @tac0 en un arc.i#o con extensin cpp
Einclude 3iostream!.4
Einclude =defstac0!.=
main()
8 @tac0 sH
int i, 0, nH
cout 33 =Fngrese un #alor entero menor que <<: =H
cin 44 nH
s!create()H
Hctor Pinc!eira "onejeros
&,
BM
Lenguajes de Programacin

for (i 5 2H i 3 nH i;;)
8 cout 33 =Fngrese un #alor entero : =H
cin 44 0H
s!pus.(0)H
9
C.ile (`s!empt$())
8 0 5 s!pop()H
cout 33 =%ltimo #alor: = 33 0 33 endlH
9
return 2H
9
Co.0osicin de clases
La composicin de clases define una relacin de pertenencia $ consiste en incluir
objetos de una clase como atributos de otra clase!
E)e.0lo
class %no
8 pri#ate:
int iH
public:
%no(int 0)
8 i 5 0 H 9
int f()
8 return iH 9
9H
class Tos
8 pri#ate:
%no aH
float xH
public:
Tos(float $, int j): a(j)
8 x 5 $H 9
float g()
8 return x ; a!f()H 9
9H
#oid main()
8 Tos b(B!1,B)H
cout 33 = #alor : = 33 b!g()H
9
Plantillas de clases
"ara personali*ar la definicin de una plantilla gen(rica de clase se requiere de uno o
ms parmetros de tipo! Es el compilador quien genera el cdigo fuente para tantas
clases diferentes como instancias diferentes de tipos existan en calidad de parmetros
actuales! %na plantilla de clase se define, por ejemplo, como, template 3class J4!
Hctor Pinc!eira "onejeros
&-
BQ
Lenguajes de Programacin

E)e.0lo
GG Fnterfa* de la clase @tac0 en el arc.i#o defstac0!.
Eifndef defstac0
Edefine defstac0
template 3class J4
class @tac0
8 public:
@tac0(int 5 12)H
@tac0()H
int pus.(const JO)H
int pop(JO)H
int empt$() const
8 return top 55 1H 9
pri#ate:
int largoH
int topH
J NpH
9H
template 3class J4
@tac03 J4::@tac0(int s)
8 largo 5 sH
top 5 a1H
p 5 neC J6largo7H
9
template 3class J4
@tac03 J4::@tac0()
8 delete 67 pH 9
template 3class J4
int @tac03 J4::pus.(const J Oe)
8 if (top 3 largo a 1)
8 p6;;top7 5 eH
return 1H
9
return 2H
9
template 3class J4
int @tac03 J4::pop(J Oe)
8 if (`empt$())
8 e 5 p6topaa7H
return 1H
9
return 2H
9
Eendif
GG %so de la clase @tac0 en un arc.i#o con extensin cpp
Einclude 3iostream!.4
Hctor Pinc!eira "onejeros
&.
B<
Lenguajes de Programacin

Einclude =defstac0!.=
#oid main()
8 @tac03float4 fs(D)H
float f 5 1!1H
cout 33 =@e pone un elemento en el stac0 fs Zn=H
C.ile (fs!pus.(f))
8 cout 33 f 33 ^ ^H
f ;5 1!1H
9
cout 33 =Zn El stac0 est lleno! ,o se puede poner el #alor = 33 f
33 =ZnZn @e saca un elemento del stac0 fs= 33 endlH
C.ile (fs!pop(f))
cout 33 f 33 ^ ^H
cout 33 =Zn El stac0 est #ac'o! ,o se puede sacar = 33 endlH
@tac03int4 isH
int i 5 1H
cout 33 =@e pone un elemento en el stac0 is Zn=H
C.ile (is!pus.(i))
8 cout 33 fi33 ^ ^H
i;;H
9
cout 33 =Zn El stac0 est lleno! ,o se puede poner el #alor = 33 i
33 =ZnZn @e saca un elemento del stac0 is= 33 endlH
C.ile (is!pop(i))
cout 33 i 33 ^ ^H
cout 33 =Zn El stac0 est #ac'o! ,o se puede sacar = 33 endlH
9H
Jerencia
,o se necesita reescribir el cdigo del comportamiento .eredado aumenta la
#elocidad de desarrollo!
La reutili*acin de softCare slo exige conocer la naturale*a del componente $ su
interfa*!
Los m(todos .eredados se ejecutan ms lentamente que el cdigo especiali*ado!
El abuso de la .erencia sustitu$e una forma de complejidad por otra!
E)e.0lo
class Eslabon
8 pri#ate:
int datoH
public:
Eslabon(int d)
8 dato 5 dH 9
int Lalor()
8 return datoH 9
9
Hctor Pinc!eira "onejeros
&/
D2
Lenguajes de Programacin

class &adena : public Eslabon
8 pri#ate:
&adena NsigH
public :
&adena(&adena Ns, int e) : Eslabon(e)
8 sig 5 sH 9
&adena N,ex()
8 return sigH 9
int Fnfo()
8 return Eslabon::Lalor()H 9
9
#oid main()
8 int j 5 DH
&adena Nq, Np 5 neC &adena(2,j)H
for(j 5 BH j 4 2H jRR)
8 p 5 neC &adena(p,j)H 9
q 5 pH
for(j 5 DH j 4 2H jRR)
8 cout 33 =ZnLalor= 33 pR4Fnfo() 33 ^Zn^H
p 5 pR4,ex()H
9
9
%ie.bros 0rote,idos
Los miembros p)blicos de clase base son accesibles por cualquier funcin del
programa! Los miembros declarados pri#ados son accesibles por los m(todos de su
propia clase
Los miembros declarados protegidos son accesibles por los m(todos de su propia
clase o por los m(todos de sus clases deri#adas!
E)e.0lo
GG Fnterfa* de la clase "ar en el arc.i#o depar!.
Eifndef depar
Edefine depar
class "ar
8public:
"ar(const float, const float)H
#oid imprimir() constH
protected:
float pxH
float p$H
9H
Eendif
GG Fmplementacin de la clase "ar en el arc.i#o depar!cpp
Einclude 3iostream!.4
Einclude =depar!.=
"ar::"ar(const float x, const float $)
Hctor Pinc!eira "onejeros
+0
D1
Lenguajes de Programacin

8 px 5 xH
p$ 5 $H
9
#oid "ar::imprimir() const
8 cout 33 =(= 33 px 33 =,= 33 p$ 33 =)=H 9
GG Tefinicin de la clase Jrio en arc.i#o detrio!.
Eifndef detrio
Edefine detrio
Einclude =depar!.=
class Jrio : public "ar
8public:
Jrio(const float, const float, const float)H
#oid imprimir() constH
pri#ate:
float p*H
9H
Eendif
GG Fmplementacin de la clase Jrio en arc.i#o detrio!cpp
Einclude 3iostream!.4
Einclude =detrio!.=
Jrio::Jrio(const float x, const float $, const float *) : "ar(x, $)
8 p* 5 *H9
#oid Jrio::imprimir() const
8 cout 33 =(= 33 px 33 =,= 33 p$ 33 =,= 33 p* 33 =)=H 9
GG %so de la clase Jrio en el arc.i#o usotrio!cpp
Einclude 3iostream!.4
Einclude =detrio!.=
#oid main()
8 Jrio t(1!D, 2!D, +!D)H
t!imprimir()H
9
E)e.0lo
class >ic.a2
8 protected:
int numrefH
c.ar NtituloH
public:
#oid almacenar(int, c.ar N)H
#oid mostrar()H
int refigual(int)H
9H
#oid >ic.a2::almacenar(int nr, c.ar Nt)
8 numref 5 nrH
titulo 5 neC c.ar6strlen(t);17H
strncp$(titulo,t,12)H
9
#oid >ic.a2::mostrar()
Hctor Pinc!eira "onejeros
+#
D2
Lenguajes de Programacin

8 cout 33 = = 33 numref 33 = = 33 tituloH
cout 33 ^Zn^ 33 numref 33 ^Zn^ 33 tituloH9
int >ic.a2::refigual(int 0)
8 return 0 55 numrefH 9
class >ic.a1: public >ic.a2
8 pri#ate:
c.ar NautorH
public:
#oid almacenar(int, c.ar N, c.ar N)H
#oid mostrar()H
int refigual(int)H
9H
#oid >ic.a1::almacenar(int nr, c.ar Nt, c.ar Na)
8 >ic.a2::almacenar(nr,t)H
autor 5 neC c.ar6strlen(a);17H
strncp$(autor,a,12)H
9
#oid >ic.a1::mostrar()
8 >ic.a2::mostrar()H
cout 33 = = 33 autor 33 ^Zn^H
9
int >ic.a1::refigual(int 0)
8 return >ic.a2::refigual(0)H 9
class >ic.a2: public >ic.a2
8 pri#ate:
int numeroH
c.ar NnombreH
public:
#oid almacenar(int, c.ar N, int, c.ar N)H
#oid mostrar()H
int refigual(int)H
9H
#oid >ic.a2::almacenar(int nr, c.ar Nt, int 0, c.ar Nn)
8 >ic.a2::almacenar(nr,t)H
numero 5 0H
nombre 5 neC c.ar6strlen(n);17H
strncp$(nombre,n,12)H
9
#oid >ic.a2::mostrar()
8 >ic.a2::mostrar()H
cout 33 = = 33 numero 33 = = 33 nombre 33 ^Zn^H
9
int >ic.a2::refigual(int 0)
8 return >ic.a2::refigual(0)H 9
E)e.0lo
Einclude 3stdio!.4
Einclude 3iostream!.4
Hctor Pinc!eira "onejeros
+$
D+
Lenguajes de Programacin

class ,odo
8 public:
,odo Nlin0H
,odo()
8 lin0 5 (,odo N) 2H 9
#oid poner(,odo Nq)
8 lin0 5 qH 9
#oid agregar(,odo Nq)
8 if (lin0) lin0R4agregar(q)H else poner(q)H 9
#oid #er()
8 cout 33 =Lalor := 33 endlH 9
#oid enJodos(#oid f(,odo N))
8 f(t.is)H if (lin0) lin0R4enJodos(f)H 9
9H
class Lista
8 public:
,odo NnextH
Lista()
8 next 5 (,odo N) 2H 9
#oid agregar(,odo Nq)
8 if (next) nextR4agregar(q)H else next 5 qH 9
#oid enJodos(#oid f(,odo N))
8 if (next) nextR4enJodos(f)H 9
9H
class ,odoEnteros: public ,odo
8 pri#ate:
int datoH
public:
,odoEnteros(int i) : ,odo()
8 dato 5 iH 9
#oid #er()
8 ,odo::#er()H
cout 33 =Tato := 33 datoH
9
9H
#oid mostrar(,odoEnteros Np)
8 pR4#er()H 9
#oid main()
8 Lista .H
.!agregar(neC ,odoEnteros(+))H
.!agregar(neC ,odoEnteros(D))H
.!agregar(neC ,odoEnteros(M))H
.!enJodos(mostrar)H
9
Li,ad-ra 1 enlace
Ligadura es la accin de asociar tipo, referencia o #alor a un nombre de #ariable!
Hctor Pinc!eira "onejeros
+%
DB
Lenguajes de Programacin

Enlace es la accin de asociar una llamada de unidad de programa con el cdigo de
la misma!
@i el enlace entre un mensaje $ un m(todo se basa en las caracter'sticas del nombre
del objeto, entonces se trata de un enlace esttico o anticipado!
@i el enlace entre un mensaje $ un m(todo se basa en las caracter'sticas del #alor del
objeto, entonces se trata de un enlace dinmico o tard'o!
La ligadura esttica $ el enlace esttico se caracteri*an por su eficiencia!
La ligadura dinmica $ el enlace dinmico se caracteri*an por su flexibilidad!
La ligadura esttica simplifica una implementacin aun si se combina con el enlace
dinmico!
@i la ligadura esttica simplifica una implementacin, el enlace esttico la simplifica
a)n ms!
En construccin, la eficiencia es de bajo ni#el, mientras que la flexibilidad es de alto
ni#el!
%e.oria 1 Cerencia
@i Kombo es una subclase de "ol'gono, entonces un objeto de clase "ol'gono puede
tomar #alores de clase Kombo, $a que un rombo esRun pol'gono!
E)e.0lo
class Lentana
8 int alto, anc.oH
public:
#irtual #oid mismo()H
9
#oid Lentana::mismo()
8 cout 33 =Lentanaa/ase=H 9
class LentanaTeJexto: public Lentana
8 c.ar NindiceH
int pos&ursorH
public :
#irtual #oid mismo()H
9
#oid LentanaTeJexto::mismo()
8 cout 33 =LentanaTeJextoaTeri#ada= 33 pos&ursorH 9
#oid main()
8 Lentana xH
Lentana N$, N*H
$ 5 neC LentanaTeJextoH
* 5 $H
...
9
Efectos de la ejecucin del main() anterior:
Hctor Pinc!eira "onejeros
+&
DD
Lenguajes de Programacin

@e reser#ar en el stac0 espacio para un objeto de clase Lentana $ se ligar a la
#ariable x!
@e reser#ar en el .eap espacio para un objeto de clase LentanaTeJexto $ su
direccin se asignar a la #ariable $!
La asignacin x 5 N$ se interpreta como sigue:
@e copiarn en x slo los #alores de los atributos apuntados por $ que existan en x
(slicing)!
La semntica asegura que slo los m(todos definidos en la clase Lentana pueden
ser in#ocados usando x!
Kespecto de los m(todos definidos en Lentana pero anulados en LentanaTeJexto, su
interpretacin es la siguiente:
"ara objetos representados en el stac0, el enlace de un mensaje con un m(todo
#irtual se basa en la clase de la declaracin!
"ara objetos representados en el .eap, el referido enlace se basa en la clase del
#alor actual!
@i se selecciona x!mismo() se ejecutar el m(todo de la clase Lentana!
@i se selecciona (N*)!mismo()se ejecutar el m(todo de la clase LentanaTeJexto!
Asi,nacin
La sentencia x 5 $ tiene dos posibles interpretaciones:
@emntica de copia: @e almacena el #alor de $ en la referencia de x!
@emntica de punteros: @emntica de copia en la cual el #alor almacenado es la
referencia de un objeto!
I,-aldad
La expresin x 55 $ tiene dos posibles interpretaciones:
Equi#alencia estructural: x e $ son iguales si cada miembro de x tiene el mismo
#alor de cada miembro de $! Aqu' puede suceder que, si $ es ejemplar de una
subclase de x, entonces x55$ sea verdadero pero $55x sea falso!
Fdentidad de objetos: x e $ son iguales si x e $ tienen como #alor la misma
referencia de objeto!
Poli.or(is.o
%n objeto polimrfico es aquel que admite #alores de diferentes tipos durante
ejecucin!
El polimorfismo fa#orece la reutili*acin de softCare de alto ni#el con diferentes
abstracciones de bajo ni#el!
El polimorfismo puro consiste en definir una funcin con argumentos de diferentes
tipos!
El polimorfismo adR.oc o sobrecarga consiste en definir un mismo nombre para
m)ltiples funciones!
Hctor Pinc!eira "onejeros
++
D1
Lenguajes de Programacin

En los lenguajes con enlace dinmico de m(todos, todos los objetos son
potencialmente polimrficos!
En los lenguajes con enlace esttico, el polimorfismo aparece a tra#(s de la
diferencia entre la clase de la declaracin (la clase esttica) $ la clase del #alor
actual del objeto (la clase dinmica)!
%n objeto puede tener un #alor de su clase esttica o de cualquier subclase de esa
clase!
"ara objetos automticos el polimorfismo se logra slo mediante el uso de
indirecciones o referencias!
"ara un objeto declarado por #alor, la clase dinmica se #e siempre for*ada a ser la
misma que la clase esttica!
"ara un objeto declarado por indireccin o por referencia, la clase dinmica se
mantiene!
E)e.0lo
class "
8 pri#ate:
int jH
public:
"()
8 j 5 BH 9
#irtual int #alor()
8 return j ; 1H 9
9
class Y: public "
8 pri#ate:
int 0H
public:
Y()
8 0 5 1H 9
#irtual int #alor()
8 return 0 ; +H 9
9
#oid f1(" x)
8 cout 33 ="or #alor se imprime= 33 x!#alor()H 9
#oid f2(" Nx)
8 cout 33 ="or indireccin se imprime= 33 x4#alor()H 9
#oid f+(" Ox)
8 cout 33 ="or referencia se imprime= 33 x!#alor()H 9
#oid main()
8 Y *H
cout 33 *!#alor()H GG sale <
" r, Ns 5 O*, Ot 5 rH
cout 33 r!#alor()H GG sale D
cout 33 sR4#alor()H GG sale <
r 5 *H
Hctor Pinc!eira "onejeros
+,
DM
Lenguajes de Programacin

cout 33 r!#alor()H GG sale D
t 5 *H
cout 33 t!#alor()H GG sale D
f1(*)H GG sale D
f2(O*)H GG sale <
f+(*)H GG sale <
9
La llamada f1(*) con#ierte el #alor de * en uno de clase " que es la clase del
parmetro formal x se desplegar el #alor D!
La llamada f2(O*) no con#ierte el #alor de * pues f2(" Nx) define un parmetro
formal polimrfico se desplegar el #alor <!
La llamada f+(*) no con#ierte el #alor de * pues f+(" Ox) tambi(n define un
parmetro formal polimrfico se desplegar el #alor <!
Sobrecar,a
%n nombre de funcin est sobrecargado si existen dos o ms cuerpos de funcin
definidos con ese nombre
Existe sobrecarga cuando un )nico nombre designa dos o ms funciones distintas
las cuales proporcionan acciones semnticas similares sobre diferentes tipos de
datos
La coercin es un mecanismo, semnticamente distinto a la sobrecarga, que
con#ierte el tipo de un #alor en otro
Lo anterior permite que, por ejemplo, la suma (;) de dos #alores num(ricos pueda
tener diferentes interpretaciones:
&uatro funciones correspondientes a E;E, E;K, K;E $ K;K existe
sobrecarga pero no coercin!
Tos funciones correspondientes a E;E $ K;KH en los otros casos el #alor E es
for*ado a con#ertirse en K existe una combinacin de sobrecarga $ coercin!
%na funcin correspondiente K;KH en los casos restantes el #alor E es for*ado a
con#ertirse en K existe coercin pero no sobrecarga!
%;todos di(eridos
%n m(todo diferido (o m(todo #irtual puro) es un m(todo anulado cu$o
comportamiento en la superclase es nulo!
En &;;, un m(todo diferido debe declararse como una funcin #irtual sin cuerpo a
la cual se le asigna el #alor 2!
,o es posible definir ejemplares de una clase que contenga un m(todo diferido no
anulado!
La redefinicin de m(todos diferidos debe aparecer en una subclase inmediata!
E)e.0lo
class >orma
8 public:
Hctor Pinc!eira "onejeros
+-
DQ
Lenguajes de Programacin

"unto esquinaH
#oid ponerEsquina("unto Op)
8 esquina 5 pH 9
#irtual #oid dibujar() 5 2H
9H
class &irculo: public >orma
8 public:
int radioH
#oid ponerKadio(int i)
8 radio 5 iH 9
#oid dibujar()
8 dibujar&irculo(esquina ; radio, radio)H 9
9H
Hctor Pinc!eira "onejeros
+.
D<
Lenguajes de Programacin

L.$. PRO"RA%ACIN EN #AVA
Cdi,os en #a*a
Pro,ra.a 3 En -a#a, un programa es una coleccin de objetos que interact)an
para lograr un objeti#o com)n $ que puede adoptar la forma de
a0licacin, a00let o ser*let!
A0licacin 3 "rograma en -a#a que debe incluir un m(todo llamado .ain()!
A00let 3 "rograma en -a#a que se ejecuta desde un na#egador $ dota de
interacti#idad a una pgina ?eb! En este caso, el na#egador es la
aplicacin!
Ser*let 3 "rograma en -a#a que se ejecuta en un ser#idor ?eb con el
propsito de extender la funcionalidad de (ste!
ArcCi*o .java 3 Arc.i#o que contiene el cdigo fuente de un programa en -a#a!
ArcCi*o .class 3 Arc.i#o que contiene el cdigo b$te resultante de la compilacin de
un cdigo fuente en -a#a!
PaF-etes 1 0roteccin de clases
La biblioteca de clases )a*a consta de un conjunto de paquetes jerrquicamente
organi*ados!
%n paquete es un conjunto de clases lgicamente relacionadas $ agrupadas bajo un
nombre!
"or ejemplo, el paquete )a*a.io agrupa las clases que permiten la entrada $ salida
de datos!
%n paquete puede contener a otros paquetes!
%n paquete puede ser creado por el usuario!
El nombre completo de una clase de un paquete consta del nombre de la clase
precedido del nombre del paquete, por ejemplo, )a*a.lan,.S1ste.!
La proteccin de una clase determina la relacin que (sta tiene con las clases de
otros paquetes!
@e distinguen dos ni#eles de proteccin: de paquete $ p)blico!
%na clase con ni#el de proteccin de paquete slo puede ser utili*ada por las clases
de su paquete!
%na clase con ni#el de proteccin p)blico puede ser utili*ada por cualquier clase de
otro paquete!
"or omisin una clase tiene ni#el de proteccin de paquete!
I.0ortacin de clases
%na clase de un determinado paquete puede .acer uso de una clase de otro paquete
utili*ando su nombre completo o bien importndola!
"ara importar una clase se utili*a la sentencia i.0ort!
"or ejemplo, i.0ort )a*a.lan,.S1ste. permite al programa referirse a la clase
S1ste. sin utili*ar el nombre del paquete )a*a.lan,!
Hctor Pinc!eira "onejeros
+/
12
Lenguajes de Programacin

En un programa, la sentencia i.0ort debe situarse antes de cualquier definicin de
clase $ puede aparecer tantas #eces como sea necesario!
La sentencia i.0ort solamente indica al compilador donde encontrar las clases!
@e puede importar un paquete completo reempla*ando el nombre espec'fico de una
clase por un N!
"or ejemplo, i.0ort )a*a.lan,.N importa todas las clases p)blicas del paquete
)a*a.lan, que se usen en un programa!
Control de acceso
Existen cuatro ni#eles de acceso: predeterminado (de paquete), p)blico, pri#ado $
protegido!
%n miembro de una clase declarado predeterminado (sin un modificador de acceso)
es accesible por cualquier clase perteneciente al mismo paquete!
Los modificadores de acceso son: 0-blic, 0ri*ate $ 0rotected!
%n miembro declarado 0-blic es accesible por cualquier otra clase o subclase que
desee utili*arlo!
%n miembro declarado 0ri*ate es accesible slo por los m(todos de su propia
clase!
%n miembro declarado 0rotected es accesible por cualquier clase del mismo
paquete o cualquiera de sus subclases!
Destr-ctores
%n destructor es un m(todo con el nombre predefinido (inaliHe!
El destructor se in#oca automticamente justo antes de que el objeto sea
recolectado como basura, es decir, cuando no queden referencias apuntando a ese
objeto!
E)e.0lo
public class "ar
8 GG Atributos
pri#ate float x, $H
GG W(todos
public "ar(float a, float b)
8
x 5 aH
$ 5 bH
9
public float mas"ar()
8
return x ; $H
9
public float por"ar()
8
return xN$H
Hctor Pinc!eira "onejeros
,0
11
Lenguajes de Programacin

9
9
import ja#a!io!NH
public class "rueba
8
public static #oid main(@tring67 args)
8
float f, gH
f 5 1!2fH
g 5 1!DfH
"ar p1 5 neC "ar(f, g)H
@$stem!out!println(f ; = ; = ; g ; = 5 = ; p1!mas"ar())H
@$stem!out!println(f ; = N = ; g ; = 5 = ; p1!por"ar())H
9
9
E2ce0ciones
%na excepcin es un e#ento que impide la continuidad de ejecucin de un
programa!
Las excepciones proporcionan una manera limpia de #erificar errores!
@e puede capturar $ manejar una excepcin en un intento de e#itar que se detenga
la ejecucin del programa!
Las clases E2ce0tion $ Error son subclases de la clase TCroIable!
La clase E2ce0tion cubre las excepciones que un programa normal puede manejar!
La clase Error cubre los errores que un programa normal no puede manejar!
Las clases R-nti.eE2ce0tion, ClassNot!o-ndE2ce0tion e IOE2ce0tion son
subclases de la clase E2ce0tion!
Las que ocurren durante ejecucin se conocen como excepciones impl'citas $ son
cubiertas por las clases R-nti.eE2ce0tion $ Error! Las dems se conocen como
excepciones expl'citas!
@i ocurre una anomal'a mientras se ejecuta un m(todo, (ste lan*a (tCroI) una
excepcin, esperando que la atrape (catcC) quien lo llam!
"ara atrapar una excepcin, el cdigo que podr'a lan*arla se debe encerrar en un
bloque tr1!
El cdigo destinado a la liberacin de alg)n recurso externo, se encierra en un
bloque (inall1, despu(s de un bloque tr1 o catcC $ como )ltimo del m(todo que lo
contiene!
%ie.bros static
%n atributo static es un atributo de la clase $, por lo tanto, se puede utili*ar aunque
no existan objetos de esa clase!
Tesde otra clase, $ a tra#(s del nombre de su clase, se puede acceder a un atributo
declarado 0-blic static!
Hctor Pinc!eira "onejeros
,#
12
Lenguajes de Programacin

%n m(todo static carece de la referencia tCis, debido a lo cual no puede ser
in#ocado por un objeto de su clase!
%n m(todo static puede acceder a los miembros static de su clase, pero no a los
miembros no static de la misma!
%n miembro static puede ser accedido por m(todos static o no static!
La iniciali*acin de atributos static ocurre antes de la creacin de alg)n objeto de su
clase! "ara ello se utili*a un iniciali6ador esttico!
%n iniciali6ador esttico es un m(todo annimo, sin parmetros, que no retorna un
#alor $ que se in#oca automticamente cuando se carga la clase!
Constantes si.blicas
%na constante puede ser literal o simblica!
%na constante literal es aquella cu$o nombre es la representacin escrita de su
#alor!
%na constante simblica es una #ariable de alg)n tipo primiti#o, iniciali*ada
expl'citamente $ precedida del calificador (inal!
Adicionalmente, una constante puede incluir el calificador static!
%na constante puede definirse como atributo de clase o bien como local a un
m(todo!
&uando una constante aparece como atributo de clase mediante (inal static, slo se
crea una copia de ella para todos los objetos de esa clase!
&uando una constante aparece como atributo de clase mediante (inal, se crea una
copia de ella para cada objeto de esa clase!
%na constante local a un m(todo ,V puede ser declarada static!
Ti0os de datos
-a#a pro#ee dos categor'as de tipos de datos: primiti#os $ referenciados!
Los tipos primiti#os se clasifican en num(ricos enteros, num(ricos reales $ lgico:
b1te, sCort, int, lon, $ cCar
(loat $ do-ble
boolean
Los tipos referenciados se clasifican en clases, interfaces $ arreglos!
Adems, el paquete )a*a.lan, proporciona las clases 41te, CCaracter, SCort,
Inte,er, Lon,, !loat, Do-ble $ 4oolean!
Variables
El acceso a la representacin en memoria de #ariables de tipos primiti#os se reali*a
mediante direccionamiento directo!
El acceso a la representacin en memoria de #ariables de tipos referenciados se
reali*a mediante direccionamiento indirecto!
%na #ariable puede ser atributo (mbito de clase) o local (mbito de bloque)!
La referencia a un objeto declarada (inal es una referencia constante a ese objeto!
Hctor Pinc!eira "onejeros
,$
1+
Lenguajes de Programacin

Creacin de ob)etos
%na clase es una plantilla para crear objetos!
%n objeto se crea con el operador neI!
El operador neI retorna una referencia al nue#o objeto!
Asi,nacin de ob)etos
El operador de asignacin no sir#e para copiar un objeto en otro!
El efecto de la asignacin <objeto1> 5 <objeto2> es que las referencias <objeto1> $
<objeto2> queden apuntando al mismo objeto!
"ara lograr la copia efecti#a de un objeto en otro se debe utili*ar un m(todo
especialmente definido para ello, o bien, un constructor de copia!
%n constructor de copia es aquel in#ocado para iniciali*ar un nue#o objeto a partir
de otro existente!
Arre,los
Teclaracin
int67 mH
float67 temperaturaH
&reacin
m 5 neC int6127H
temperatura 5 neC float6D7H
Teclaracin $ creacin
int67 m 5 neC int6127H
float67 temperatura 5 neC float6D7H
Fniciali*acin
float67 temperatura 5 8+!D>, B!Q>, M!B>, Q!1>, 1!<>9H
bnico atributo del arreglo
int n 5 m!lengt.H GG n)mero de elementos del arreglo m
Tos m(todos .eredados de la clase Ob)ect
int67 m1 5 812, 22, +2, B2, D29H
int67 m2 5 (int67)m1!clone()H GG m2 es una copia de m1
if(m1!equals(m2)) GG equi#ale a if(m1 55 m2)
Arreglos de caracteres
c.ar67 cadena 5 8^a^, ^b^, ^c^, ^d^9H
E)e.0lo
public class Jest
8
public static #oid main(@tring67 args)
8
int nH
@$stem!out!print(c,)mero de elementos: c)H
Hctor Pinc!eira "onejeros
,%
1B
Lenguajes de Programacin

n 5 Leer!datoFnt()H
int 67 a 5 neC int6n7H
int i 5 2H
@$stem!out!println(cFntroducir #aloresc)H
for (i 5 2H i 3 n H i;;)
8
@$stem!out!print(ca6c ; i ; c7 5 d)H
a6i7 5 Leer!datoFnt()H
9
@$stem!out!println()H
for (i 5 2H i 3 n H i;;)
@$stem!out!print(a6i7 ; c d)H
@$stem!out!println(cZnZn>ind)H
9
9
E)e.0lo
public class Jest
8
GG Arreglo bidimensional por 2
static #oid "roducto(double6767 x)
8
for (int f 5 2H f 3 x!lengt.H f;;)
8
for (int c 5 2H c 3 x6f7!lengt.H c;;)
x6f76c7 N5 2H
9
9
public static #oid main(@tring67 args)
8
double6767 m 5 8812, 22, +29, 8B2, D2, 1299H
"roducto(m)H
for (int f 5 2H f 3 m!lengt.H f;;)
8
for (int c 5 2H c 3 m6f7!lengt.H c;;)
@$stem!out!print(m6f76c7 ; c c)H
@$stem!out!println()H
9
9
9
E)e.0lo
public class Jest
8
GG &opia de un arreglo bidimensional
static double67 &opiar(double6767 x)
8
Hctor Pinc!eira "onejeros
,&
1D
Lenguajes de Programacin

double6767 * 5 neC double6x!lengt.76x627!lengt.7H
for (int f 5 2H f 3 x!lengt.H f;;)
for (int c 5 2H c 3 x6f7!lengt.H c;;)
*6f76c7 5 x6f76c7H
return *:
9
public static #oid main(@tring67 args)
8
double6767 m1 5 8812, 22, +29, 8B2, D2, 1299H
double6767 m2 5 &opiar(m1)H
for (int f 5 2H f 3 m2!lengt.H f;;)
8
for (int c 5 2H c 3 m26f7!lengt.H c;;)
@$stem!out!print(m26f76c7 ; c c)H
@$stem!out!println()H
9
9
9
E)e.0lo
public class "rueba
8
GG Arreglos asociati#os
GG >recuencia de letras en un texto
public static #oid main(@tring67 args)
8
int67 c 5 neC int6e*f a eaf ; 17H
c.ar carH
final c.ar eof 5 egfH
@$stem!out!println(cFntroducir un texto: c)H
@$stem!out!println(c"ara finali*ar pulsar egf c)H
tr$
8
C.ile ((car 5 (c.ar)@$stem!in!read()) `5 eof)
8
if (car 45 eaf OO car 35 e*f)
c6car a eaf7;;H
}
9
catc. (FVException e) 89
@$stem!out!println(cZnd)H
for (car 5 eafH car 35 e*fH car;;)
@$stem!out!print(c d ; car)H
@$stem!out!println(cZnd)H
for (car 5 eafH car 35 e*fH car;;)
@$stem!out!print(c d ; c6car a eaf7)H
@$stem!out!println()H
Hctor Pinc!eira "onejeros
,+
11
Lenguajes de Programacin

9
9
Strin,s
La clase Strin, pertenece al paquete )a*a.lan,!
%n objeto de clase Strin, representa una cadena no modificable!
El m(todo para con#ertir una cadena en otra de#uel#e un nue#o objeto con la
cadena resultante, sin modificar el objeto original!
"ara concatenar objetos Strin, se utili*a el operador = ; =!
Algunos m(todos de la clase Strin,:
Strin,<Strin, <str>=
@tring str1 5 =abc=H GG crea el @tring =abc=
@tring str2 5 neC @tring(=def=)H GG crea el @tring =def=
@tring str+ 5 neC @tring(str1)H GG crea un nue#o @tring =abc=
Strin, toStrin,<=
@tring str1 5 =abc=, str2H GG str1 $ str2 acceden al mismo objeto
str2 5 str1!to@tring()H GG str2 5 str1
Strin, concat<Strin, <str>=
@$stem!out!println(=a=!concat(=b=))H GG sale =ab=
@$stem!out!println(=a=!concat(=b=!concat(=c=)))H GG sale =abc=
@tring str1 5 =abc=, str2 5 =def=H
str1 5 str1!concat(str2)H GG str1 5 str1 ; str2
int co.0areTo<Strin, <str>=
GG retorna un #alor 3 2 si el @tring que recibe el mensaje es menor que str
GG retorna el #alor 2 si el @tring que recibe el mensaje es igual que str
GG retorna un #alor 4 2 si el @tring que recibe el mensaje es ma$or que str
@tring str1 5 =abcde=, str2 5 =abcdefg=H
if(str1!compareJo(str2) 3 2)
@$stem!out!println(str1)H GG sale =abcde=
int co.0areToI,noreCase<Strin, <str>=
@tring str1 5 =abcde=, str2 5 =A/&TE=H
if(str1!compareJoFgnore&ase(str2) 55 2)
@$stem!out!println(str1 ; str2)H GG sale =abcdeA/&TE=
Jerencia
%na clase deri#ada se define agregando la clusula e2tends $ el nombre de la clase
base!
@i se omite la clusula e2tends, se entiende que la superclase es la clase Ob)ect!
"ara referirse a miembros 0-blic o 0rotected de clase base, desde objetos de clase
deri#ada, se utili*a la palabra reser#ada s-0er!
E)e.0lo
class &laseA
8
Hctor Pinc!eira "onejeros
,,
1M
Lenguajes de Programacin

public int x 5 1H
public int m"or()
8
return 12NxH
9
public int mWas()
8
return 122 ; xH
9
9
class &lase/ extends &laseA
8
protected int x 5 2H
public int m"or()
8
return R12NxH
9
public int m@um()
8
return 122 ; super!xH
9
9
public class Jest
8
public static #oid main(@tring67 args)
8
&lase/ obj/ 5 neC &lase/()H
@$stem!out!println(obj/!x)H GG escribe 2
@$stem!out!println(obj/!mWas())H GG escribe 121
@$stem!out!println(obj/!m"or())H GG escribe R22
@$stem!out!println(obj/!m@um())H GG escribe 121
9
9
E)e.0lo
public class "ar
8
pri#ate int x, $H
public "ar()
8
x 5 2H
$ 5 2H
9
public "ar(int a, int b)
8
x 5 aH
$ 5 bH
9
Hctor Pinc!eira "onejeros
,-
1Q
Lenguajes de Programacin

public int mas()
8
return x ; $H
9
public int por()
8
return xN$H
9
public #oid #erW()
8
@$stem!out!print(=Zn= ; x ; = ; = ; $ ; = 5 = ; mas())H
9
public #oid #er"()
8
@$stem!out!print(=Zn= ; x ; = N = ; $ ; = 5 = ; por())H
9
9
public class Jrio extends "ar
8
pri#ate int *H
public Jrio()
8
super()H
* 5 2H
9
public Jrio(int a, int b, int c)
8
super(a, b)H
* 5 cH
9
public int sum()
8
return super!mas() ; *H
9
public int prod()
8
return super!por()N*H
9
public #oid #erW()
8
super!#erW()H
@$stem!out!print(= ; = ; * ; = 5 = ; sum())H
9
public #oid #er"()
8
super!#er"()H
@$stem!out!print(= N = ; * ; = 5 = ; prod())H
9
Hctor Pinc!eira "onejeros
,.
1<
Lenguajes de Programacin

9
public class Jest
8
public static #oid main(@tring67 args)
8
"ar p 5 neC "ar(B, Q)H
Jrio t 5 neC Jrio(2, D, Q)H
p!#erW()H
p!#er"()H
t!#erW()H
t!#er"()H
9
9
Clases 1 .;todos abstractos
Tefinicin de clase $ m(todo abstractos:
0-blic abstract class <nombrehclase>
8
0-blic abstract *oid <nombrehm(todo1>()
0-blic *oid <nombrehm(todo2>()
9
Inter(aces
En -a#a, una interfa* es un dispositi#o que permite interactuar a objetos no
relacionados entre s'!
>orma de una interfa*:
60-blic7 inter(ace <nombrehinterfa*> 6e2tends <superinterfaces>7
8
<cuerpohinterfa*>
9
El nombre de una interfa* puede incluirse en cualquier lugar donde se pueda utili*ar
el nombre de una clase!
Jodos los m(todos declarados en una interfa* son impl'citamente p)blicos $
abstractos $ todos los atributos impl'citamente p)blicos, finales $ estticos!
&ualquier clase puede tener acceso a los atributos de la interfa* a tra#(s del nombre
de la misma!
%na clase que implemente la interfa* puede tratar los atributos como si los .ubiese
.eredado (accediendo directamente a su nombre)!
@i una clase implementa una interfa*, todas sus subclases .eredan los m(todos
implementados en aquella!
%na interfa* puede deri#ar de m)ltiples interfaces!
%so una interfa*:
<definicinhclase> i.0le.ents <nombrehinterfa*>
Hctor Pinc!eira "onejeros
,/
M2
Lenguajes de Programacin

E)e.0lo
GG Tefinicin de una interfa*
public interface F>ec.a
8
public final static int TFAhTELhWE@ 5 &alendar!TA]hV>hWV,J_H
public final static int WE@hTELhAiV 5 &alendar!WV,J_H
public final static int AiV 5 &alendar!]EAKH
public abstract int d'a()H
public abstract int mes()H
public abstract int aSo()H
9
E)e.0lo
GG %so de una interfa*
public class T extends / implements F>ec.a
8
public #oid m()
8
if(d'a() 55 1) return 2!2H
.
.
.
9
GGFmplementacin de los m(todos de la interfa*
public int d'a()
8
[regorian&alendar fec.aActual 5 neC [regorian&alendar()H
return fec.aActualH
9
public int mes() 8 return 2H 9
public int aSo() 8 return 2H 9
9
Hctor Pinc!eira "onejeros
-0
M1
Lenguajes de Programacin

Listas de enlace si.0le
E)e.0lo
GG Tefinicin de nodo de una lista de enlace simple
public class ,odo
8
pri#ate int datoH
pri#ate ,odo proxH
pri#ate ,odo() 89
9
GG Tefinicin de una lista de enlace simple
public class Lista
8
pri#ate ,odo p 5 nullH
public Lista() 89
public #oid agregar(int e)
8
,odo q 5 neC ,odo()H
q!dato 5 eH
q!prox 5 pH
p 5 qH
9
public #oid mostrar()
8
,odo q 5 pH
C.ile (q `5 null)
8
@$stem!out!print(q!dato ; d c)H
q 5 q!proxH
9
9
9
public class Jest
8
public static #oid main(@tring67 args)
8
Lista s 5 neC Lista()H
int nH
@$stem!out!println(cFntroducir dato enterod)H
n 5 Leer!datoFnt()H
C.ile (n `5 2)
8
s!agregar(n)H
@$stem!out!println(cFntroducir dato enterod)H
9
s!mostrar()H
GG La siguiente instruccin elimina todos los nodos de la lista
s 5 nullH
Hctor Pinc!eira "onejeros
-#
M2
Lenguajes de Programacin

9
9
Hctor Pinc!eira "onejeros
-$
M+
Lenguajes de Programacin

E)e.0lo
GG &&uenta es una clase abstracta que agrupa los datos comunes a cualquier tipo
de GG cuenta bancaria
public abstract class &&uenta
8
GG Atributos
pri#ate @tring nombreH
pri#ate @tring cuentaH
pri#ate double saldoH
pri#ate double tipoTeFnter(sH
GG W(todos
public &&uenta() 89
public &&uenta(@tring nom, @tring cue, double sal, double tipo)
8
asignar,ombre(nom)H
asignar&uenta(cue)H
ingreso(sal) H
asignarJipoTeFnter(s(tipo)H
9
public #oid asignar,ombre(@tring nom)
8
if (nom!lengt.() 55 2)
8
@$stem!out!println(cError: cadena #ac'ad)H
returnH
9
nombre 5 nom H
9
public @tring obtener,ombre()
8
return nombreH
9
public #oid asignar&uenta(@tring cue)
8
if (cue!lengt.() 55 2)
8
@$stem!out!println(cError: cuenta no #lidad)H
returnH
9
cuenta 5 cueH
9
public @tring obtener&uenta()
8
return cuentaH
9
public double estado()
8
return saldoH
Hctor Pinc!eira "onejeros
-%
MB
Lenguajes de Programacin

9
public abstract #oid comisiones()H
public abstract double intereses()H
public #oid ingresos(double cantidad)
8
if (cantidad 3 2)
8
@$stem!out!println(cError: cantidad negati#ad)H
returnH
9
saldo ;5 cantidadH
9
public #oid reintegro(double cantidad)
8
if (saldo 3 cantidad)
8
@$stem!out!println(cError: no dispone de saldod)H
returnH
9
saldo 5 cantidadH
9
public double obtenerJipoTeFnter(s()
8
return tipoTeFnter(sH
9
public #oid asignarJipoTeFnter(s(double tipo)
8
if (tipo 3 2)
8
@$stem!out!println(cError: tipo no #lidod)H
returnH
9
tipoTeFnter(s 5 tipoH
9
9
GG &&uentaA.orro es una clase deri#ada de &&uenta
public class &&uentaA.orro extends &&uenta
8
GG Atributos
pri#ate double cuotaWantenimientoH
GG W(todos
public &&uentaA.orro() 89
public #oid asignar&uotaWanten(double cantidad)
Hctor Pinc!eira "onejeros
-&
MD
Lenguajes de Programacin

8
if (cantidad 3 2)
8
@$stem!out!println(cError: cantidad negati#ad)H
returnH
9
cuotaWantenimiento 5 cantidadH
9
public double obtener&uotaWanten()
8
return cuotaWantenimientoH
9
public #oid comisiones()
8
GG @e aplican mensualmente por la mantencin de la cuenta
[regorian&alendar fec.aActual 5 neC[regorian&alendar()H
int dia 5 fec.aActual!get(&alendar!TA]hV>hWV,J_)H
if (dia 55 1) reintegro(cuotaWantenimiento)H
9
public double intereses()
8
[regorian&alendar fec.aActual 5 neC[regorian&alendar()H
int dia 5 fec.aActual!get(&alendar!TA]hV>hWV,J_)H
if (dia `5 1) return 2!2H
GG Acumular los intereses por mes slo los d'as 1 de cada mes
double intereses"roducidos 5 2!2H
double intereses"roducidos 5 estado() N obtenerJipoTeFnter(s() G 1222!2H
ingreso(intereses"roducidos()H
GG Te#ol#er el inter(s mensual por si fuera necesario
return intereses"roducidosH
9
public class Jest
8
public static #oid main(@tring67 args)
8
"ar p 5 neC "ar(B, Q)H
Jrio t 5 neC Jrio(2, D, Q)H
p!#erW()H
p!#er"()H
t!#erW()H
t!#er"()H
9
9
Hctor Pinc!eira "onejeros
-+

S-ar putea să vă placă și