Professional Documents
Culture Documents
Ni nguna
Segundo y t ercer
crcul o di buj ados
(c2 y c3).
R3
Hal l ar el rea y el
per met ro de l os t res
crcul os.
Ni nguna
El rea y
per met ro de l os
crcul os c1, c2
y c3.
Observacin:
La tabla de requerimientos indica que R1, R2 y R3 carecen de entradas. No sera
contraproducente especificar que se tienen entradas no nulas, en este caso constantes.
Por ejemplo, para el requerimiento R1 la entrada sera Tres constantes enteras,
dos para el centro (7 y 8) y una para el radio (9.2). Sin embargo, se ha decidido
escribir Ninguna teniendo en cuenta que toda entrada implica un ingreso de datos
por el usuario o una lectura desde un dispositivo externo de memoria, como un disco
magntico.
b) Di agr ama de cl ases
46
Fundament os de Pr ogr amacin Or i ent ada a Obj et os
c) Seudocdi go
clase Sol uci n
publico etaco aco rncal ( )
/ / Requer i mi ent o R1
Crcul o c1 = neo Crcul o ( )
c1.asi gnar X (7)
c1.asi gnar Y (8)
c1.asi gnar Radi o (9.2)
c1.di buj ar ( )
/ / Requer i mi ent o R2
Crcul o c2 = neo Crcul o (3, 4, 8.0)
c2.asi gnar Col or C( r )
c2.asi gnar Col or R( a )
c2.di buj ar ( )
Crcul o c3 = neo Crcul o (-9, 3, 4.7)
c3.asi gnar Col or C( b )
c3.asi gnar Col or R( b )
c3.di buj ar ( )
/ / Requer i mi ent o R3
Flujo.i mpr i mi r (rea y per met ro de l os t res crcul os: )
Flujo.i mpr i mi r ( Crcul o 1: )
Flujo.i mpr i mi r (rea = + c1.rea( ) + cm
2
)
Flujo.i mpr i mi r ( Per met ro = + c1.per met ro( ) + cm )
Flujo.i mpr i mi r ( Crcul o 2: )
Flujo.i mpr i mi r (rea = + c2.rea( ) + cm
2
)
Flujo.i mpr i mi r ( Per met ro = + c2.per met ro( ) + cm )
Flujo.i mpr i mi r ( Crcul o 3: )
Flujo.i mpr i mi r (rea = + c3.rea( ) + cm
2
)
Flujo.i mpr i mi r ( Per met ro = + c3.per met ro( ) + cm )
netodo
nclae
Observaciones:
x El crculo c1 fue creado con el constructor sin argumentos y los crculos c2 y
c3 con el constructor sobrecargado.
x Al imprimir el rea y permetro de un crculo, tambin se puede visualizar su
estado, es decir, la informacin referente a su centro y radio. Para el caso del
crculo c1 se tendra:
47
Lgi ca y Pr ogr amacin or i ent ada a obj et os. Un enf oque basado en pr obl emas
Fl uj o.imprimir (Crculo 1: )
Fl uj o.imprimir (Centro: ( + c1.obtenerX( ) + , + c1.obtenerY( ) + ))
Fl uj o.imprimir (Radio: + c1.obtenerRadio( ) + cm)
Fl uj o.imprimir (rea = + c1.area( ) + cm
2
)
Fl uj o.imprimir (Permetro = + c1.permetro( ) + cm)
x Un diseo orientado a objetos ms adecuado, que se estudia en el captulo 5
(Relaciones entre clases), es el siguiente:
<<usar >>
Cr culo
Solucin
+ pr incipal ( )
- c1: Cr culo
- c2: Cr culo
- c3: Cr culo
Fluj o
c1, c2, c3
Se deja propuesto el desarrollo del pseudocdigo concerniente.
2.2. TIPOS DE DATOS PRIMITIVOS Y VARIABLES
Un dato es la representacin formal de hechos, conceptos o instrucciones, adecuada
para su comunicacin, interpretacin y procesamiento por seres humanos o medios
automticos. Un tipo de datos es la especificacin de un dominio (rango de valores) y
de un conjunto vlido de operaciones a los que normalmente los traductores
6
asocian
un esquema de representacin interna propio.
6 Un traductor es un lenguaje que decodifica las instrucciones escritas en un lenguaje de programa-
cin para que un computador las pueda interpretar.
48
Fundament os de Pr ogr amacin Or i ent ada a Obj et os
Cuando un tipo de datos est definido para un lenguaje o seudo lenguaje, se habla
de tipos de datos primitivos o estndar, utilizados para la construccin de expresiones
o nuevos tipos de datos. El seudo lenguaje definido en el proyecto Mtodo Integrado de
Programacin Secuencial y Programacin Orientada a Objetos -MIPSOO [GIISTA2006],
utiliza cinco tipos de datos:
x ent er o: nmeros enteros con signo almacenados en 32 bits (4 bytes), comprendidos
entre -2147483648 a 2147483647 (-2
31
a 2
31
-1)
Ejemplos:
-56789, 403, 0, 2344521567
x r eal : denota un tipo simple que almacena valores de punto flotante de 32 bits, en
un rango aproximado de 3.4 * 10
38
a 3.4 * 10
38
.
Ejemplos:
3.1416, -88.7, 49795.1, 17, -1.0
Las cantidades reales anteriores, separadas por comas, incluyen punto decimal.
Teniendo en cuenta que los nmeros enteros son un subconjunto de los nmeros reales,
la cifra 17 dada en los ejemplos se podra haber escrito de igual manera como 17.0.
x car act er : se utiliza para declarar un carcter Unicode. Todo carcter va encerrado
entre comillas simples.
Ejemplos:
@, ,, b, B, 4, , +
Se puede notar que los caracteres pueden ser numricos como 4, alfabticos como
B y especiales como@. La barra espaciadora (carcter blanco) se representa como
dos comillas simpes vacas ( ).
x l ogi co: se utiliza para declarar variables que almacenan el valor de verdad ci er t o
o f al so, nicos valores posibles para una variable de este tipo, propios del algebra
de Boole.
49
Lgi ca y Pr ogr amacin or i ent ada a obj et os. Un enf oque basado en pr obl emas
x cadena: este tipo representa una cadena de caracteres Unicode. Toda cadena se
escribe entre comillas dobles.
Ejemplos:
XYZ123, Programar con OO es fascinante, Ser o no ser, 123
Los tipos de datos se utilizan para declarar variables locales, definir atributos de
clases, declarar parmetros formales y especificar valores de retorno de los mtodos
que se comportan como una funcin.
Una variable se considera como un compartimiento de memoria con una direccin
y nombre nicos, cuyo contenido puede variar en tiempo de ejecucin del programa.
Para efectos de procesamiento de una variable, interesa conocer su nombre y no su
direccin. Un nombre de variable es un identificador que debe cumplir las siguientes
caractersticas:
x Debe comenzar con una letra.
x No puede contener espacios ni caracteres especiales, a excepcin del guin bajo o
underline.
x No puede coincidir con una palabra reservada del seudo lenguaje o con un tipo de
datos estndar. El apndice B expone el listado de palabras reservadas.
x No existe lmite para la longitud de un identificador, aunque en general se aconseja
que no exceda los 15 caracteres para facilitar su escritura y manejo. A continuacin
se dan ejemplos de identificadores vlidos y observaciones sobre su creacin.
Tabl a 2.1. Identificadores vlidos
Algunos identificadores invlidos se presentan en la siguiente tabla:
IDENTIFICADOR OBSERVACIN
suma
contadorDePlantas
dasConFro
rbol
mesa
Los cinco identificadores contienen slo letras
50
Fundament os de Pr ogr amacin Or i ent ada a Obj et os
cedula
cdula
Ambos identificadores son distintos: se diferencian
por la vocal e tildada. Es necesario aclarar que
se evitarn las tildes en los identificadores para
facilitar el proceso de codificacin a un lenguaje de
programacin
promedioAnual
promedio_anual
tiempoEsperado
tiempo_esperado
deporteExtremo
deporte_extremo
Los seis identificadores estn formados por dos
palabras; si no se utiliza el guin bajo, la letra inicial
de cada nueva palabra, a excepcin de la primera,
va en maysculas para efectos de claridad en su
lectura. Si las palabras van separadas por guin bajo,
se puede escribir todo en minsculas
PI
VALOR_MIN
CONST_DE_AVOGADRO
Por estar escritos en maysculas, deben hacer
referencia a constantes figurativas
Animal
Producto
CuentaBancaria
Al comenzar con letra mayscula deber hacer
referencia a nombres de clases
mes7,
cont123,
a1b2_c
Contienen combinaciones de letras, dgitos y guiones
Tabl a 2.2. Identificadores invlidos
IDENTIFICADOR OBSERVACIN
suma total Contiene un espacio
3cedula Comienza con un dgito
si
Clase
fin_si
segun
Coinciden con palabras reservadas del seudo lenguaje
entero
caracter
Coinciden con tipos de datos estndar o primitivos
Entero
Mat
Real
Cadena
Coinciden con clases de uso comn
calle#31
valorEn$,
pago*mes
Contienen caracteres especiales no permitidos
51
Lgi ca y Pr ogr amacin or i ent ada a obj et os. Un enf oque basado en pr obl emas
Para declarar variables se sigue la siguiente sintaxis general:
tipoDeDato lista_de_identificadores_separados_por_comas
veamos:
ent er o x
r eal y
ent er o edad, contador
l ogi co sw, sexo, estado
Si un identificador se declara como parmetro o al interior de un mtodo se
considera campo variable local o simplemente variable local; si se declara por fuera
de todo mtodo se convierte en un atributo de clase. Por ejemplo, en la figura 2.6
codigo y precio son atributos, mientras que c y p son variables locales pasadas como
parmetros.
Fi gur a 2.6. Diferencia entre atributos y variable
2.3. OPERADORES Y EXPRESIONES
Se utilizarn en este libro los operadores binarios del lenguaje C, especificados en
la tabla 2.3.
52
Fundament os de Pr ogr amacin Or i ent ada a Obj et os
Tabl a 2.3. Operadores binarios del lenguaje C
TIPO DE OPERADOR OPERADORES DESCRIPCIN
Aritmticos
+
*
/
%
Suma
Resta
Producto
Divisin
Mdulo
Menos unitario
Lgicos
&&
||
!
Conjuncin
Disyuncin
Negacin
Relacionales
<
<=
>
>=
==
!=
Menor que
Menor o igual que Mayor
que
Mayor o igual que Igual a
Diferente de
De asignacin = Asignacin
De concatenacin + Concatenar con
Una expresin, es una combinacin vlida de operadores y operandos que devuelven
un valor nico. En la expresin a + b c, las variables a, b y c son operandos y los
smbolos + y son operadores.
Una expresin puede ser aritmtica, lgica, relacional, de asignacin o de
concatenacin, como se indica en la tabla contigua:
Tabl a 2.4. Tipos de expresiones
TIPO DE
EXPRESIN
EXPRESIONES DESCRIPCIN
Aritmtica
a + b
5 * 7
valor 17 % 9
Mat .seno (30) Mat .
coseno (45) * 2
x Suma de dos variables
x Producto de dos constantes
x Expresin compuesta: resta a la variable
valor el resultado de 17 % 9
x Expresin que incluye a la clase de uso
comn Mat para calcular el seno de un
ngulo y el coseno de otro
53
Lgi ca y Pr ogr amacin or i ent ada a obj et os. Un enf oque basado en pr obl emas
Lgica p && q || r
Expresin lgica compuesta. Las variables p,
q y r son de tipo l gi co
Relacional
a < b
salario >= 2500000
nombre == Ana
x Compara dos variables
x Compara una variable con una constante
numrica
x Compara una variable con una constante
de cadena
De asignacin
x = 9
nombre = Daro
x Asigna a una variable, una constante
numrica entera
x Asigna a una variable, una constante de
tipo cadena
De
concatenacin
Total = + total Concatena un texto (o constante de tipo
cadena) con una variable de tipo cadena.
Observaciones:
x Una expresin lgica puede combinar sub-expresiones aritmticas, lgicas y
relacionales, como en el siguiente caso:
(7 % 5 < 9) && (edad > 20) || (indicativo == ci er t o)
x En los operadores aritmticos el mdulo (%) slo opera con enteros y el resultado
es otro entero.
La operacin 33 % 7 da como resultado el residuo de la divisin entera, es
decir 33 % 7 == 5 porque
x El menos unitario devuelve el mismo tipo que el operando. En el resto de los
operadores aritmticos, si algn operador es real, el resultado ser real.
x Para los operadores lgicos los operandos deben ser del mismo tipo.
x En la asignacin slo se pueden operar datos del mismo tipo en los miembros
izquierdo (que siempre es una variable) y derecho (que puede ser otra variable,
54
Fundament os de Pr ogr amacin Or i ent ada a Obj et os
una constante o una expresin). Para la asignacin entre diferentes tipos, se puede
aplicar la conversin forzada de tipos (casting), como en el siguiente caso:
ent er o a, b
r eal c
c = (r eal ) a + b
x La prioridad de un operador hace referencia al orden en el cual se ejecuta dentro
de una expresin. La prioridad se puede alterar con el uso del agrupador parntesis,
en cuyo caso se evala primero su contenido. Obsrvese la tabla 2.5, organizada de
arriba hacia abajo segn la precedencia del operador, donde el agrupador parntesis
posee la mayor prioridad; y los operadores de relacin y asignacin, la menor.
Tabl a 2.5. Prioridad de los operadores
Prioridad de los operadores
Parntesis ( )
Operadores unitarios -, +
Operaciones de la clase Mat Mat .elevar( ), Mat .aleatorio( ), etc.
Operadores multiplicativos *, /,%, &&
Operadores auditivos +, -, ||
Operadores de relacin ==, !=, <, <=, >, >=
Operador de asignacin =
En el ejemplo 2.3. se evaluarn tres expresiones donde se utilizan los mismos
operandos y operadores, pero se cambia el orden de prioridad con el uso de parntesis.
Los crculos debajo de las llaves indican el orden en el cual se efectan las operaciones.
Notar que los tres resultados son distintos.
55
Lgi ca y Pr ogr amacin or i ent ada a obj et os. Un enf oque basado en pr obl emas
1) 5 8 * 7 / 6 + Mat.elevar (2, 5) * 3 % 2
5 8 * 7 / 6 + 32 * 3 % 2
5 56 / 6 + 32 * 3 % 2
5 9.33 + 32 * 3 % 2
5 9.33 + 96 % 2
5 9.33 + 0
4.33 + 0
32
9.33
56
96
0
-4.33
Respuesta
-4.33
Ejemplo 2.3: evaluacin de tres especmenes aritmticas
56
Fundament os de Pr ogr amacin Or i ent ada a Obj et os
2) (5 8 * ( 7 / 6)) + Mat.elevar (2, 5) * 3 % 2
(5 8 * 1.16) + Mat.elevar (2, 5) * 3 % 2
(5 9.28) + Mat.elevar (2, 5) * 3 % 2
-4.28 + Mat.elevar (2, 5) * 3 % 2
-4.28 + 32 * 3 % 2
-4.28 + 96 % 2
-4.28 + 0
32
0
-4.28
Respuesta
1.16
9.28
-4.28
96
57
Lgi ca y Pr ogr amacin or i ent ada a obj et os. Un enf oque basado en pr obl emas
3) (5 8) * 7 / (6 + (Mat.elevar (2, 5) * 3 ) % 2)
-3 * 7 / (6 + (Mat.elevar (2, 5) * 3 ) % 2)
-3 * 7 / (6 + (32 * 3 ) % 2)
-3 * 7 / (6 + 96 % 2)
-3 * 7 / (6 + 0)
-3 * 7 / 6
-21 / 6
-3
32
96
0
6
-21
-3.5
Respuesta
58
Fundament os de Pr ogr amacin Or i ent ada a Obj et os
2.4. CLASES DE USO COMN: UN MICRO MUNDO PARA EFECTOS
DE REUTILIZACIN
Las clases de uso comn, como su nombre lo indica, son de uso generalizado para
una gran variedad de problemas y establecen un marco de trabajo similar a un pequeo
mundo reutilizable.
TI POS DE DATOS ESTNDAR COMO OBJETOS
Los tipos de datos primitivos ent er o, r eal , car act er , l ogi co y cadena representan
valores simples, no objetos complejos. En ciertos casos, el uso de tipos de datos
primitivos puede aumentar el rendimiento por cuestiones de almacenamiento interno.
Sin embargo, en ocasiones la eficiencia as lograda dificulta ciertos procesos, resultando
ms conveniente el tratamiento de los tipos de datos en base a objetos.
En lo que sigue se analizarn las clases de uso comn. Debe aclararse que el
nombre de las clases correspondientes a cada tipo de datos coincide con el nombre del
dato primitivo; slo cambia la primera letra del nombre del tipo a mayscula: Entero,
Real, Caracter, Logico y Cadena.
59
Lgi ca y Pr ogr amacin or i ent ada a obj et os. Un enf oque basado en pr obl emas
LA CLASE ENTERO
Ent ero
- val or : entero
- cont etaco entero M IN_VALOR = -2.147.483.648
- cont etaco entero M AX_VALOR = 2.147.483.647
+ Ent ero ( )
+ asi gnar Val or (entero x)
+ obt ener Val or ( ): entero
+ obt ener M i nVal or ( ): entero
+ obt ener M axVal or ( ): entero
etaco obt ener M i nVal or ( ): entero
etaco obt ener M axVal or ( ): entero
+ esIgual (Lntero x): logico
+ convBi n ( entero x): Cadena
+ convBi n ( ): Cadena
etaco convBi n (entero x ): Cadena
+ convOct al (entero x ): Cadena
+ convOct al ( ): Cadena
etaco convOct al (entero x ): Cadena
+ convHex (entero x ): Cadena
+ convHex ( ): Cadena
etaco convHex (entero x ): Cadena
+ An cadena x): entero
etaco An cadena x): entero
Miembros dato de la clase Entero:
valor: cantidad que representa el valor entero, comprendido entre -2.147.483.648
y 2.147.483.647 (almacenamiento de un entero en 4 bytes).
MIN_VALOR: constante esttica entera igual a -2.147.483.648
MAX_VALOR: constante esttica entera igual a 2.147.483.647
60
Fundament os de Pr ogr amacin Or i ent ada a Obj et os
Tabl a 2.6. Mtodos de la clase Entero
MTODO DESCRIPCIN
Entero( )
Constructor por defecto. Inicializa el miembro dato
valor en 0
asignarValor (ent er o x) Asigna el entero x al miembro dato valor
obtenerValor ( ): ent er o Devuelve el valor actual del miembro dato valor
obtenerMinValor( ): ent er o Devuelve el mnimo valor entero
obtenerMaxValor( ): ent er o Devuelve el mximo valor entero
est at i co obtenerMinValor( ): ent er o Devuelve el mnimo valor entero. Mtodo de clase
est at i co obtenerMaxValor( ): ent er o Devuelve el mximo valor entero. Mtodo de clase
esIgual (Ent er o x): l ogi co
Devuelve ci er t o si el objeto Ent er o que lo llama es
equivalente a x. En caso contrario devuelve f al so
convBin (ent er o x): Cadena
Convierte en binario el entero x. Retorna el resultado
como un objeto de tipo Cadena
convBin ( ): Cadena
Retorna una cadena igual al equivalente binario del
miembro dato valor
est at i co convBin (ent er o x ): Cadena
Retorna una cadena igual al equivalente binario del
parmetro x. Mtodo de clase
convOctal (ent er o x): Cadena
Convierte a base octal el entero x. Retorna el
resultado como un objeto de tipo Cadena
convOctal (ent er o x): Cadena
Retorna una cadena igual al equivalente octal del
miembro dato valor
est at i co convOctal (ent er o x ):
Cadena
Retorna una cadena igual al equivalente octal del
parmetro x. Mtodo de clase
convHex (ent er o x): Cadena
Convierte a base hexadecimal el entero x. Retorna el
resultado como un objeto de tipo Cadena
convHex ( ): Cadena
Retorna una cadena igual al equivalente hexadecimal
del miembro dato valor
est at i co convHex (ent er o x ): Cadena
Retorna una cadena igual al equivalente hexadecimal
del parmetro x. Mtodo de clase
convertirANum(cadena x): ent er o Convierte una cadena a nmero entero
est at i co convertirANum (cadena x):
ent er o
Convierte una cadena a nmero entero Mtodo de
clase
61
Lgi ca y Pr ogr amacin or i ent ada a obj et os. Un enf oque basado en pr obl emas
LA CLASE REAL
Real
- val or : real
cont etaco real M IN_VALOR = 3.4 * 10
Z
123
Lgi ca y Pr ogr amacin or i ent ada a obj et os. Un enf oque basado en pr obl emas
c) Cont r at o de l a cl ase Pr oyect o
Nombr e del
mt odo
Requer i _
mi ent o
asoci ado
Pr econdi ci n Post condi ci n Model o ver bal
principal( ) R1
R2
Se desconocen
los datos de
los productos
Se sabe el
nombre del
producto ms
caro o se ha
identificado
que ambos
productos
tienen igual
precio
1. Declarar dos
variables de tipo
cadena y dos
variables de tipo real
2. Ingresar los nombres
y precios de los dos
productos
3. Comparar los precios
de los productos para
identificar el nombre
del producto ms
caro o visualizar el
mensaje que indic
precios iguales
d) Seudo cdi go or i ent ado a obj et os ( OO)
clase Proyect o
pblico rncal ( )
cadena nom1, nom2
real preci o1, preci o2
Flujo.i mpr i mi r ( Ingrese nombre y preci o de dos product os: )
nom1 = Flujo.l eer Cadena( )
preci o1 = Flujo.l eer Real ( )
nom2 = Flujo.l eer Cadena( )
preci o2 = Flujo.l eer Real ( )
si (preci o1 > preci o2)
Flujo.i mpr i mi r ( El product o ms caro es + nom1)
no
si (preci o2 > preci o1)
Flujo.i mpr i mi r ( El product o ms caro es + nom2)
no
Flujo.i mpr i mi r ( Ti enen preci os i gual es )
n
n
ntodo
nclae
124
Clases: t ipos de dat os abst r act os
Observaciones:
x Las variables nom1 y nom2 son de tipo cadena y las variables precio1 y precio2
son de tipo r eal .
x La entrada y salida de datos estndar se realiza a travs de la clase Fl uj o.
x Para facilitar la lectura de datos, se debe mostrar al usuario el mensaje respectivo.
Por ejemplo, antes de leer los nombres y precios de los productos se imprimi el
mensaje Ingrese nombre y precio de dos productos:, teniendo as, para abreviar,
una instruccin de salida por cuatro de entrada. No obstante, se puede preceder
cada instruccin de entrada por una de salida, de la siguiente manera:
Fl uj o.imprimir (Ingrese nombre del primer producto:)
nom1 = Fl uj o.leerCadena( )
Fl uj o.imprimir (Ingrese precio del primer producto:)
precio1 = Fl uj o.leerReal( )
Fl uj o.imprimir (Ingrese nombre del segundo producto:)
nom2 = Fl uj o.leerCadena( )
Fl uj o.imprimir (Ingrese precio del segundo producto:)
precio2 = Fl uj o.leerReal( )
En general, en el seudo cdigo se prefiere la forma abreviada. De esta
manera, la comunicacin con el usuario se realiza a travs de interfaces
de texto, donde los datos de entrada se solicitan en un solo mensaje. La
comunicacin con el usuario a travs de interfaces grficas se pospone para
la etapa de codificacin en un lenguaje de programacin, lo cual est excede
los intereses del presente texto.
x La estructura de control selectiva (o sentencia de decisin si ) permite ejecutar un
grupo de instrucciones u otro, dependiendo del valor de verdad de una expresin
lgica o condicin. En el seudocdigo expuesto se presentan dos estructuras de control
selectivas, una de ellas anidada, es decir, una sentencia de decisin dentro de otra.
x El mtodo imprimir de la clase Fl uj o se encuentra sobrecargado, es decir, admite
parmetros enteros, reales, caracteres y cadenas. Cuando se pretende visualizar
125
Lgi ca y Pr ogr amacin or i ent ada a obj et os. Un enf oque basado en pr obl emas
informacin variada, sta va separada por el operador de concatenacin cruz (+)
que tambin se encuentra sobrecargado (dependiendo del contexto, significa sumar
o concatenar).
x Como se indic antes, se puede presentar un diseo de clases ms acertado en
trminos de la orientacin por objetos.
Product o
- nombre: cadena
- precio: real
+ Product o ( )
+ asignarNombre (cadena n)
+ asignarPrecio (real p)
+ obt enerNombre ( ): cadena
+ obt enerPrecio ( ): real
Proyect o
- ec p1: Product o
- ec p2: Product o
+ ec principal ( )
Flujo
+ imprimir( )
+ leerCadena( )
+ leerReal( )
Los atributos p1 y p2 son estticos porque se crean e instancian dentro del mtodo
principal ( ), que tambin es de naturaleza esttica.
El diagrama conceptual correspondiente se presenta en la figura 3.1, donde los
atributos estticos p1 y p2 se han reemplazado por la asociacin (flecha de lnea
continua) que parte de la clase Proyecto y llega a la clase Producto. Observar que entre
las clases Proyecto y Flujo se presenta una relacin de uso porque dentro del mtodo
principal ( ) se utilizan los mtodos estticos imprimir ( ), leerCadena ( ) y leerReal ( )
de dicha clase. Ver Figura 3.1.
126
Clases: t ipos de dat os abst r act os
El seudocdigo correspondiente a la clase Proyecto es el siguiente:
Fi gur a 3.1. Asociacin entre clases Proyecto y Producto
clase Proyect o
rado etco Product o p1, p2
pblico etco rncal ( )
C
p1 = neo Product o ( )
p2 = neo Product o ( )
/ / Asignar est ado a los objet os
Flujo.imprimir ( Ingrese el nombre y precio del primer product o: )
p1.asignarNombre (Flujo.leerCadena( ))
p1.asignarprecio (Flujo.leerReal( ))
Flujo.imprimir ( Ingrese el nombre y precio del segundo product o: )
p2.asignarNombre (Flujo.leerCadena( ))
p2.asignarprecio (Flujo.leerReal( ))
/ / Analizar el est ado de los objet os
si (p1.obt enerPrecio ( ) > p2.obt enerPrecio ( ))
Flujo.imprimir ( El product o ms caro es + p1.obt enerNombre ( ))
no
si (p2.obt enerPrecio ( ) > p1.obt enerPrecio ( ))
Flujo.imprimir ( El product o ms caro es + p2.obt enerNombre ( ))
no
Flujo.imprimir ( Tienen precios iguales )
n
n
ntodo
nclae
127
Lgi ca y Pr ogr amacin or i ent ada a obj et os. Un enf oque basado en pr obl emas
Ahora se tratar un problema que involucra las sentencias de control ciclo y selector
mltiple, adems de aportar algunas observaciones acerca de la definicin de la tabla
de requerimientos para un problema especfico.
PROBLEMA 9. ESTAD STI CAS POR PROCEDENCI A
De un nmero determinado de personas se conoce la estatura, procedencia y edad.
La estatura y la procedencia se manejan de acuerdo a las siguientes convenciones:
Estatura = 1 (alta), 2 (baja) o 3 (Mediana)
Procedencia = L (Americana), E (Europea), A (Asitica) u O (Otra).
Determinar:
- El nmero de americanos altos, europeos bajos y asiticos medianos.
- La edad promedio de los individuos de otras procedencias.
- La cantidad de americanos bajos mayores de edad.
Problema adaptado de [Oviedo2004]
Solucin:
a) Tabl a de r equer i mi ent os
I dent i f i caci n
del
r equer i mi ent o
Descr i pci n Ent r adas
Resul t ados
( Sal i das)
R1 Conocer la
cantidad de
personas a
procesar
Un nmero entero
ingresado por el usuario
La cantidad de
personas a procesar
almacenada en una
variable (n)
R2 Conocer las
estaturas,
procedencias y
edades de todas
las personas
- Un nmero entero
(n), igual a la
cantidad de personas
a procesar.
- Por cada persona: su
estatura, procedencia
y edad
Se conocen los
datos de todas las
personas
128
Clases: t ipos de dat os abst r act os
R3 Encontrar el
nmero de
americanos altos
Los datos de todas las
personas
El nmero de
americanos altos
R4 Encontrar el
nmero de
europeos bajos
Los datos de todas las
personas
El nmero de
europeos bajos
R5 Encontrar
el nmero
de asiticos
medianos
Los datos de todas las
personas
El nmero de
asiticos medianos
R6 Hallar la edad
promedio de los
individuos de otras
procedencias
Los datos de todas las
personas
La edad promedio
de los individuos de
otras procedencias
R7 Hallar la cantidad
de americanos
bajos mayores de
edad
Los datos de todas las
personas
La cantidad de
americanos bajos
mayores de edad
Nota importante:
La identificacin de requerimientos es de trascendental importancia en el desarrollo
de software, ya que en esta etapa se analiza el problema y se identifican las necesidades
(requerimientos) de los usuarios. Si los requerimientos estn mal especificados, vendrn
futuros inconvenientes cuando se analicen los resultados del programa.
Aunque la definicin de requerimientos de un problema debe ser objetiva, su
identificacin es subjetiva. Por esto, los diferentes analistas de un problema deben
llegar a estructurar, en trminos generales, los mismos requerimientos, aunque su
descripcin en lenguaje natural tenga ligeras diferencias. Incluso, el nmero de filas
de la tabla de requerimientos puede diferir de un analista a otro, porque cualquiera
de ambos puede describir un requerimiento como la unin de dos o ms de ellos
propuestos por el otro analista.
129
Lgi ca y Pr ogr amacin or i ent ada a obj et os. Un enf oque basado en pr obl emas
Por lo anterior, la siguiente tabla con cinco requerimientos tambin es vlida, aunque
en este ejemplo seguiremos trabajando con los siete requerimientos ya definidos.
I dent i f i caci n
del
r equer i mi ent o
Descr i pci n Ent r adas
Resul t ados
( Sal i das)
R1 Conocer la cantidad
de personas a
procesar
Un nmero
ingresado por el
usuario
Se conoce la
cantidad de
personas a procesar
R2 Conocer las estaturas,
procedencias y
edades de todas las
personas.
- Un nmero
entero (n), igual
a la cantidad
de personas a
procesar.
- Por cada persona:
su estatura,
procedencia y
edad
Se conocen los
datos de todas las
personas
R3 Encontrar el nmero
de americanos altos,
europeos bajos y
asiticos medianos
Los datos de todas
las personas
La cantidad de
americanos altos,
europeos bajos y
asiticos medianos
R4 Hallar la edad
promedio de los
individuos de otras
procedencias
Los datos de todas
las personas
La edad promedio
de los individuos de
otras procedencias
R5 Hallar la cantidad
de americanos bajos
mayores de edad
Los datos de todas
las personas
La cantidad de
americanos bajos
mayores de edad
b) Di agr ama de cl ases
El diagrama de clases se enfoca al uso exclusivo del selector mltiple, por lo que todo
el seudocdigo de incluye en el mtodo principal. Como ejercicio propuesto se invita a
redisear la solucin con una clase adicional, por ejemplo denominada Persona.
130
Clases: t ipos de dat os abst r act os
b) Cont r at o de l a cl ase Pr oyect o
Nombr e
del
mt odo
Reque-
r i mi ent o
asoci ado
Pr econ-
di ci n
Post con-
di ci n
Model o ver bal
principal( ) R1
R2
R3
R4
R5
R6
R7
Se desco-
nocen los
datos de las
personas
Se conocen
todos los
datos
estadsti-cos
solicita-dos
1. Declarar e inicializar
contadores y acumuladores
2. Ingresar la cantidad de
personas a procesar
3. Por cada persona
3.1. Ingresar edad, estatura y
procedencia.
3.2. Segn los datos ingresados,
actualizar contadores y
acumuladores.
4. Mostrar los resultados
c) Seudo cdi go or i ent ado a obj et os ( OO)
Antes de proceder con el seudocdigo es conveniente documentarlo, es decir, definir
el significado de cada variable utilizada. La documentacin se dar en la siguiente
tabla, donde los identificadores de las variables se describen segn su orden de
aparicin en la seccin de declaracin de variables del mtodo principal( ).
131
Lgi ca y Pr ogr amacin or i ent ada a obj et os. Un enf oque basado en pr obl emas
Documentacin:
I dent i f i cador Ti po Si gni f i cado
n ent er o Cantidad de personas a procesar.
cont ent er o
Contador de personas. Es la variable controladora del
ciclo par a.
estat ent er o Estatura de una persona.
cla ent er o Cantidad (o contador) de latinos altos.
ceb ent er o Cantidad de europeos bajos.
cam ent er o Cantidad de asiticos medianos
co ent er o
Cantidad otros (o cantidad de individuos de otras
procedencias).
proc car ct er Procedencia de una persona.
edad r eal Edad de una persona.
epo r eal Edad promedio individuos de otras procedencias.
aeo r eal
Acumulador de edad para individuos de otras
procedencias.
132
Clases: t ipos de dat os abst r act os
Seudocdigo:
clase Proyect o
lco rncal ( )
entero n, cont , est at , cl a = 0, ceb = 0, cam = 0, co = 0
caracter proc
real edad, epo, aeo = 0
Flujo l
n = Flujo.l eer Ent ero( )
ara (cont = 1, cont <= n, cont = cont + 1)
Flujo.imprimir( Ingrese est at ura (1 = Alt a, 2 = Baja, 3 = Mediana): )
est at = Flujo.l eer Ent ero( )
Flujol L L L L
A A C C
proc = Flujo.l eer Caract er ( )
Flujo.i mpr i mi r ( Ingrese edad: )
edad = Flujo.l eer Ent ero( )
en (proc)
caso L :
si (est at ==1)
cl a = cl a + 1
n
roer
caso E :
si (est at == 2)
ceb = ceb + 1
n
roer
caso A :
si (est at == 3)
cam = cam + 1
n
roer
caso O:
co = co + 1
aeo = aeo + edad
nen
nara
Flujon
Flujo.i mpr i mi r ( Nmero de europeos baj os: + ceb)
Flujon
epo = aeo / co
Flujo.i mpr i mi r ( Edad promedi o i ndi vi duos de ot ras procedenci as: + epo)
netodo
nclae
133
Lgi ca y Pr ogr amacin or i ent ada a obj et os. Un enf oque basado en pr obl emas
Observacin:
Como antes se anot, el diagrama de clases y en consecuencia el seudocdigo
expuesto, hacen hincapi en el uso del selector mltiple o sentencia segn.
LA ESTRUCTURA I TERACI N
La estructura iteracin, denominada tambin estructura repeticin, bucle o ciclo,
permite repetir un bloque de instrucciones, un determinado nmero de veces. Esta
estructura de control admite tres variantes fundamentales: ciclo mi ent r as, ciclo par a
y ciclo r epet i r / hast a.
a) El ciclo mi ent r as repite un bloque de instrucciones, denominado cuerpo del ciclo,
mientras que una condicin sea cierta; cuando la condicin sea falsa, el ciclo
mi ent r as dejar de ejecutarse.
Sintaxis del ciclo mi ent r as:
mi ent r as (e)
instrucciones o cuerpo del ciclo
f i n_ mi ent r as
Donde,
e: expresin lgica.
instrucciones: instrucciones a ejecutar si la expresin e es verdadera; al menos una
de ellas debe hacer variar la expresin e, con el objetivo de evitar un ciclo infinito.
134
Clases: t ipos de dat os abst r act os
Ejemplos:
Ciclo mi ent r as simple:
cont = 1
mi ent r as (cont < 10)
Fl uj o.imprimir (cont)
cont = cont + 1
f i n_ mi ent r as
Ciclo mi ent r as con una condicin compuesta y selector mltiple interno:
ent er o opcion = Fl uj o.leerEntero( )
l gi co sw = ci er t o
ent er o cont = 1, c1 = 0, c2 = 0, c3 = 0
mi ent r as (opcin != 4 && sw == ci er t o)
segn (opcin)
caso 1:
c1 = c1 + 1
adicionar( )
r omper
caso c2:
c2 = c2 + 1
eliminar( )
Fl uj o.imprimir (cont)
cont = cont + 1
si (cont == 15)
sw = f al so
f i n_ si
r omper
caso c3:
c3 = c3 + 1
ordenar( )
f i n_ segun
Fl uj o.imprimir(Ingrese opcin: )
opcion = Fl uj o.leerEntero( )
f i n_ mi ent r as
135
Lgi ca y Pr ogr amacin or i ent ada a obj et os. Un enf oque basado en pr obl emas
Puede observarse que la estructura secuencia del caso c2 del selector mltiple
incluye una instruccin de decisin.
Ciclo mi ent r as anidado:
ent er o a, b
a = 1
mi ent r as (a <= 12)
b = 1
mi ent r as (b <= 10)
Fl uj o.imprimir(a + * + b + = + a * b)
b = b + 1
f i n_ mi ent r as
a = a + 1
f i n_ mi ent r as
No existe un lmite para la cantidad de ciclos anidados; el nmero de anidamientos
depende de la situacin a resolver.
b) El ciclo par a es una variacin del ciclo mi ent r as, donde el bloque de instrucciones
se repite una cantidad conocida de veces.
Sintaxis del ciclo par a:
par a (c = vi , e, i)
instrucciones
f i n_ par a
Donde,
c : variable contadora del ciclo.
vi: valor inicial para c.
e: expresin lgica relacionada con c.
i: incremento para c.
136
Clases: t ipos de dat os abst r act os
Ejemplo:
ent er o c
par a (c = 0, c < 100, c = c + 1)
Fl uj o.imprimir(c)
f i n_ par a
Observar la relacin entre los ciclos par a y mi ent r as, ya que el anterior ciclo se
puede reescribir de la siguiente manera:
ent er o c
c = 0
mi ent r as (c < 100)
Fl uj o.imprimir(c)
c = c + 1
f i n_ mi ent r as
c) El ciclo r epet i r / hast a tambin es una variante del ciclo mi ent r as, donde la
condicin del ciclo es evaluada al final del mismo. Si de entrada la condicin es
falsa, el cuerpo de un ciclo mi ent r as puede no ejecutarse, mientras que el cuerpo
del ciclo r epet i r / hast a siempre se ejecutar mnimo una vez.
Sintaxis del ciclo r epet i r / hast a:
r epet i r
instrucciones
hast a (e)
Donde,
e: expresin lgica.
instrucciones: instrucciones a ejecutar si la e es verdadera; al menos una de ellas
hace variar la e.
137
Lgi ca y Pr ogr amacin or i ent ada a obj et os. Un enf oque basado en pr obl emas
Ejemplo:
r epet i r
valor = Fl uj o.leerReal( )
hast a (valor < 0)
Es interesante observar la relacin que existe entre los tres ciclos; por ejemplo, los
siguientes tres segmentos de cdigo son equivalentes:
- Segmento de cdigo con ciclo mi ent r as:
ent er o n = 5, suma = 0
mi ent r as (n < 1200)
suma = suma + n
n = n + Mat .aleatorio(10)
f i n_ mi ent r as
- Segmento de cdigo con ciclo par a:
ent er o n, suma = 0
par a (n = 5, n < 1200, n = n + Mat .aleatorio(10) )
suma = suma + n
f i n_ mi ent r as
- Segmento de cdigo con ciclo r epet i r / hast a:
ent er o n = 5, suma = 0
r epet i r
suma = suma + n
n = n + Mat .aleatorio(10)
hast a (n < 1200)
La equivalencia de estos tres ciclos se rompe si, por ejemplo, inicializamos la
variable n en un valor mayor a 1200, cantidad que controla la ejecucin de los tres
bucles. As, al hacer n = 1300, la variable suma en los dos primeros ciclos queda en
0 (cero), pero en el ciclo r epet i r / hast a queda valiendo 1300 (el cuerpo de este ciclo
se ejecuta, en este caso, una vez).
138
Clases: t ipos de dat os abst r act os
En general, el ciclo mi ent r as puede realizar la tarea de los otros dos, por esta
razn es el ms utilizado. Sin embargo, debemos tener en cuenta las siguientes
recomendaciones para utilizar un determinado ciclo:
x Si se desconoce el nmero de iteraciones del ciclo, o sea cuando estas dependen
de una entrada del usuario o de una funcin interna generada por el programa como
un nmero aleatorio, se debe utilizar el bucle mi ent r as.
Ejemplo:
cadena respuesta = Fl uj o.leerCadena( )
mi ent r as (Cadena.comparar(respuesta, si) == 0)
/ / instrucciones
respuesta = Fl uj o.leerCadena( )
f i n_ mi ent r as
x Si la cantidad de iteraciones del ciclo es conocida, dada por una constante numrica
o por un valor entero ingresado por el usuario, se recomienda el uso del ciclo par a.
Ejemplos:
x ent er o c
par a (c = 1, c < 100, c = c + 2)
/ / cuerpo del ciclo
f i n_ par a
x n = Fl uj o.leerEntero( )
par a (cont = 1, cont < n, cont= cont + 1)
/ / cuerpo del ciclo
f i n_ par a
x Cuando se requiere de la validacin de entradas de datos o que las instrucciones
del cuerpo del ciclo se ejecuten por lo menos una vez, se recomienda el uso del ciclo
r epet i r / hast a. Ejemplo:
139
Lgi ca y Pr ogr amacin or i ent ada a obj et os. Un enf oque basado en pr obl emas
Fl uj o.imprimir (Ingrese un entero positivo:)
ent er o num
r epet i r
num = Fl uj o.leerEntero( )
hast a (num < 0)
El apndice B, tem B2, presenta una tabla con un resumen de las estructuras de
control.
Para llevar a la prctica la estructura de control ciclo con sus tres posibilidades
(mientras, para y hacer / mientras), se tratar en la siguiente sesin un problema
sencillo que permite establecer diferencias entre los tipos de ciclos.
PROBLEMA 10. PRI MEROS CI EN NATURALES
Mostrar los nmeros enteros del 1 al 100.
Solucin:
a) Tabl a de r equer i mi ent os
I dent i f i caci n del
r equer i mi ent o
Descr i pci n Ent r adas Resul t ados ( Sal i das)
R Mostrar los
nmeros
enteros del 1 al
100
Ninguna Los primeros 100 nmeros
naturales se han mostrado en
pantalla
b) Di agr ama de cl ases
140
Clases: t ipos de dat os abst r act os
c) Cont r at o de l a cl ase Pr i mer os100Nat ur al es
Nombr e del
mt odo
Requer i _
mi ent o
asoci ado
Pr econdi ci n Post condi ci n Model o ver bal
principal( ) R No se han
v i s ual i z ado
en pantalla
los nmeros
solicitados
Los nmeros
del 1 al 100 han
sido impresos
en pantalla
1. Declarar un contador
e inicializarlo en 1.
2. Mientras el contador
sea menor o igual a
100:
2.1. Mostrar el contador
2.2. Incrementar el
contador en una
unidad
d) Seudo cdi go or i ent ado a obj et os ( OO)
clase Pr i meros100Nat ural es
pblico rncal ( )
entero numero = 1
entra (numero <= 100)
Flujo.i mpr i mi r (numero)
numero = numero + 1
nentra
ntodo
nclae
Observaciones:
x La clase se ha denominado Primeros100Naturales, en lugar de Proyecto como
nombre genrico que aplica a cualquier solucin.
x El ciclo mi ent r as es una sentencia de control que permite la ejecucin reiterada
de un conjunto de instrucciones en tanto que una expresin lgica sea verdadera.
141
Lgi ca y Pr ogr amacin or i ent ada a obj et os. Un enf oque basado en pr obl emas
Este problema se puede resolver con los ciclos par a y r epet i r / hast a, obteniendo el
mismo efecto final, aunque un determinado ciclo aplica ms que otro dependiendo de
la circunstancia.
Solucin con ciclo par a:
clase Pr i meros100Nat ural es
lco rncal ( )
entero numero
ara (numero = 1, numero <= 100, numero = numero + 1)
Flujo.i mpr i mi r (numero)
nara
ntodo
nclae
Notar que la inicializacin y el incremento de la variable numero, as como la
condicin que garantiza el fin de las iteraciones, van todas ubicadas en la cabecera del
ciclo y encerradas entre parntesis.
Solucin con ciclo r epet i r / hast a:
clase Pr i meros100Nat ural es
lco rncal ( )
entero numero = 1
reer
Flujo.i mpr i mi r (numero)
numero = numero + 1
hasta (numero < 100)
ntodo
nclae
Observar que el bucle r epet i r / hast a carece de fin, porque la palabra reservada
r epet i r determina el inicio y la palabra hast a determina el fin de la estructura.
142
Clases: t ipos de dat os abst r act os
x La finalizacin de un mtodo, un ciclo o una clase se especifica con las clusulas
f i n_ met odo, f i n_ mi ent r as, f i n_ par a y f i n_ cl ase, a excepcin del ciclo r epet i r /
hast a que, como se acaba de indicar, carece de clusula de finalizacin.
3.5. BANDERA O INTERRUPTOR
Una variable cuyo contenido adquiere uno de dos valores, se denomina bandera,
interruptor o switche. Aunque una bandera puede ser de tipo ent er o, car ct er o l gi co,
su tipo natural es este ltimo, porque precisamente las variables lgicas admiten tan
slo los valores de verdad: ci er t o o f al so.
Los interruptores sirven para controlar procesos alternos o para determinar si una
condicin en particular se cumple o no.
PROBLEMA 11. SUCESI N NUMRI CA
Generar y visualizar los primeros n trminos de la sucesin:
3, -1, 4, 0, 5, 1, 6, 2, 7,
Solucin
Pr e anl i si s
En este problema se presenta un proceso alterno porque para generar cada trmino
de la sucesin, que comienza en 3, se le suma de manera alternada los nmeros -4 y
5. Cmo controlar si se suma un valor o el otro? Una manera sencilla es por medio de
una bandera que se inicializa en ci er t o para indicar que sumo -4 al trmino actual y
que cambia a f al so para indicar que sumo 5. La bandera cambiar de valor de forma
reiterada y alternada dentro de un ciclo que contiene una sentencia de decisin: si el
interruptor vale ci er t o, sumo -4 al trmino actual y cambio el switche a f al so; de lo
contrario sumo 5 y cambio la bandera a ci er t o.
143
Lgi ca y Pr ogr amacin or i ent ada a obj et os. Un enf oque basado en pr obl emas
a) Tabl a de r equer i mi ent os
I dent i f i caci n del
r equer i mi ent o
Descr i pci n Ent r adas
Resul t ados
( Sal i das)
R1 Saber la cantidad de
trminos de la serie
Un nmero
entero (n)
Se conoce la
cantidad de
trminos de la
sucesin
R2 Generar la sucesin n Sucesin generada
e impresa
b) Di agr ama de cl ases
c) Cont r at o de l a cl ase Pr oyect o
Mt odo
Reque-
r i mi ent o
asoci ado
Pr econdi ci n Post condi ci n
principal ( ) R1
R2
Se desconoce la cantidad
de trminos a generar en
la sucesin
La sucesin se ha
mostrado al usuario
Nota: por su extensin la columna Model o ver bal , fue unida a la tabla y se presenta
a continuacin.
1. Iniciar trmino ter en 3 y bandera band en ci er t o.
2. Ingresar el valor de n.
3. En un ciclo controlado por n:
144
Clases: t ipos de dat os abst r act os
- Mostrar el trmino
- La bandera es verdadera?
S: Incrementar el trmino en -4
Poner bandera a falso.
No: Incrementar el trmino en 5
Poner bandera a verdadero
d) Seudo cdi go
clase Proyect o
publico rncal ( )
lco band = certo
entero t er = 3, n, cont
Flujol
reer
n = Flujo.l eer Ent ero( )
hasta (n <= 0)
ara (cont = 1, cont <= n, cont = cont + 1)
Flujo.i mpr i mi r (cont )
si (band)
t er = t er - 4
band = falso
no
t er = t er + 5
band = certo
n
nara
netodo
nclae
Este mismo ejercicio se resolver con un vector en la sesin 4.1., en el problema 14
de este libro.
145
Lgi ca y Pr ogr amacin or i ent ada a obj et os. Un enf oque basado en pr obl emas
3.6. MTODOS RECURSIVOS
Un mtodo es recursivo o recursin directa cuando se invoca a s mismo. Cuando
dos o ms mtodos se atraen, hablamos de recursin indirecta. Los problemas que a
continuacin se presentan son de recursin directa, y pueden graficarse mediante un
seudocdigo, veamos:
[visibilidad][<tipo_dato>] nombreMetodo(pf)
si (x)
//Ejecucin del caso base
si no
nombreMetodo(pa) // Ejecucin del caso recursivo
f i n_ si
r et or ne
Donde:
pf : Conjunto de parmetros formales.
x : Expresin que evala la llegada al caso base.
pa : Conjunto o lista de parmetros actuales.
Debe recordarse que la lista de parmetros actuales debe coincidir en nmero,
orden y tipo con la lista de parmetros formales.
En general, todo algoritmo recursivo debe evaluar el caso base; si este no se presenta,
se realiza la llamada recursiva con un parmetro que permita el acercamiento paulatino
al caso base (decremento o incremento de una variable, cambio del estado de un objeto,
etc.). Cuando se llega al caso base finaliza el proceso recursivo y se llega al resultado final
por evacuacin de las pilas de direcciones, parmetros y variables locales.
El seguimiento de la recursin implica el uso de la estructura de datos Pila para
guardar las direcciones de retorno, valores de los parmetros y variables locales. Una
pila, que se gestiona segn la metodologa FIFO (Primero en Entrar Primero en Salir,
por sus siglas en ingls), forma parte del paquete de uso comn Cont enedor expuesto
146
Clases: t ipos de dat os abst r act os
brevemente en la sesin 2.4. En lo que sigue, se tratarn solo las estructuras de datos
lineales y estticas, vale decir, los arreglos; las estructuras internas restantes como
las pilas, colas, listas, rboles y grafos quedan por fuera del alcance de este libro. El
estudio de los algoritmos (mtodos) recursivos se har por medio de algunos problemas
representativos.
PROBLEMA 12: FACTORI AL DE UN NMERO
Calcular el factorial de un nmero entero n >= 0.
Solucin:
Pr e anl i si s:
Una definicin iterativa (no recursiva) del factorial del nmero entero n >= 0 es:
n * (n - 1) * (n - 2) *... * 2 * 1, si n > 0
n! =
1, si n == 0
Ejemplos: 5! = 5 * 4 * 3 * 2 * 1 = 120
0! = 1
La definicin recursiva del factorial de un nmero y de cualquier otro caso que
implique al diseo recursivo implica el planteamiento de la denominada ecuacin de
recurrencia, la cual constar siempre de dos casos: uno no recursivo llamado caso
base y otro denominado caso recursivo, que al ejecutarse reiteradamente, acercar
al caso base posibilitando la solucin del problema.
La ecuacin de recurrencia para el factorial de un nmero es la siguiente:
1, si n == 0 (caso base)
n! =
n * (n - 1)!, si n > 0 (caso recursivo)
147
Lgi ca y Pr ogr amacin or i ent ada a obj et os. Un enf oque basado en pr obl emas
En trminos algortmicos, la representacin matemtica para el factorial de un valor
entero n, dada por n!, se transforma en factorial(n), y la ecuacin de recurrencia se
reescribe as:
1, si n == 0
factorial(n) =
n * factorial(n-1), si n > 0
a) Tabl a de r equer i mi ent os
I dent i f i caci n del
r equer i mi ent o
Descr i pci n Ent r adas Resul t ado ( Sal i das)
R1 Conocer la entrada
del usuario
Un nmero
entero
Nmero entero
almacenado en memoria y
listo para procesar
R2 Hallar el factorial de
un nmero entero
positivo o cero
Un nmero
entero
El factorial del nmero
ingresado.
b) Di agr ama de cl ases
Proyect o
+ fact orial(n):
+ principal ( )
Flujo
148
Clases: t ipos de dat os abst r act os
c) Responsabi l i dades de l as cl ases
Contratos de la clase Proyecto:
Mt odo
Requer i mi ent o
asoci ado
Pr econdi ci n Post condi ci n Model o ver bal
factorial(
entero x)
R2 Se desconoce
el factorial del
nmero entero x
Se conoce el
factorial del
nmero entero x
Remitirse a la
ecuacin de
recurrencia
principal( ) R1
R2
Se desconoce
el nmero
entero al cual
se le hallar el
factorial
Se conoce el
nmero entero
ingresado por
el usuario y
su respectivo
factorial
1. Ingresar el
nmero entero.
2. Hallar
el factorial
del nmero
(de manera
recursiva)
d) Seudo cdi go
Clase Proyect o
entero etco f act or i al (entero x)
entero f / / var i abl e l ocal
si (x == 0)
f = 1 / / Caso base
no
f = x * f act or i al (x - 1) / / Caso recursi vo
n
retornar(f )
netodo
/ / ------------------------------------------------------------------------
pr i nci pal ( )
entero n
Flujo. i mpr i mi r ( Ingrese un ent ero >= 0: )
149
Lgi ca y Pr ogr amacin or i ent ada a obj et os. Un enf oque basado en pr obl emas
reer
n = Flujo. l eer Ent ero( )
hasta (n < 0)
Flujo. i mpr i mi r ( El f act or i al de + n + es + f act or i al (n))
netodo
nclae
Observaciones:
x El mtodo factorial( ) tiene un parmetro formal de entrada x, tal como lo indica la
flecha. Dicho parmetro es del mismo tipo que el argumento (parmetro actual, o
de llamada) n del mtodo principal( ).
x La llamada recursiva es limitada por el caso base; las reiteradas llamadas
recursivas simulan un ciclo transparente al programador.
PROBLEMA 13: CLCULO DE UN TRMI NO DE FI BONACCI
Calcular y mostrar el n-simo trmino de la serie de Fibonacci, dada por 1, 1, 2, 3, 5,
8, 13, 21,34,
Solucin:
Pr e anl i si s
La serie a generar fue ideada por el matemtico italiano Leonardo Fibonacci a partir
del estudio reproductivo de dos conejos (primer par de elementos de la serie).
Se observa que todo trmino de la serie se genera a partir de la suma de los
dos anteriores, exceptuando los dos primeros, considerados semillas de la serie. La
ecuacin de recurrencia para generar el n_simo trmino de la serie est dada por:
1, si n == 1 n == 2
fibonacci(n) =
fibonacci(n -1) + fibonacci(n - 2), si n > 2
150
Clases: t ipos de dat os abst r act os
Ejemplos:
fibonacci(1) = 1 (caso base 1)
fibonacci(2) = 1 (caso base 2)
fibonacci(3) = fibonacci (2) + fibonacci(1) = 2
fibonacci (4) = fibonacci(3) + fibonacci(2) = 3
fibonacci(n) = fibonacci(n -1) + fibonacci(n - 2) = x
a) Tabl a de r equer i mi ent os
I dent i f i caci n del
r equer i mi ent o
Descr i pci n Ent r adas Resul t ado ( Sal i das)
R1 Conocer el valor
de n (nmero del
trmino de Fibonacci
a generar)
Un nmero
entero
Nmero entero
almacenado en memoria
y listo para procesar
R2 Hallar el n_simo
trmino de la serie
de Fibonacci
El nmero
entero n.
El n_simo trmino de la
serie de Fibonacci
b) Di agr ama de cl ases
Proyecto
etco occentero): entero
rc )
&o
151
Lgi ca y Pr ogr amacin or i ent ada a obj et os. Un enf oque basado en pr obl emas
c) Responsabi l i dades de l as cl ases
Contrato de la clase Proyecto:
Mt odo
Requer i mi ent o
asoci ado
Pr econdi ci n Post condi ci n Model o ver bal
Fibonacci
(ent er o
n)
R2 Se desconoce
el n_simo
trmino de
la serie de
Fibonacci.
Se conoce el
n_simo trmino
de la sere de
Fibonacci.
Remitirse a la
ecuacin de
recurrencia
principal
( )
R1
R2
Se desconoce
el nmero
del trmino
a generar de
la serie de
Fibonacci.
Se conoce el
nmero entero
correspondiente
al n-simo
trmino de
la serie de
Fibonacci.
1. Ingresar el
nmero entero
n.
2. Hallar el n_
simo trmino
de la serie de
Fibonacci.
d) Seudo cdi go
Clase Proyect o
entero entero n)
entero l
entero t er1, t er2
si (n == 1 n == 2)
t er = 1
no
t er = t er1 + t er2
n
retornar(t er)
netodo
/ / ------------------------------------------------------------------------------
principal( )
entero n
Flujo. l
Fibonacci que desea encont rar: )
reer
n = Flujo. leerEnt ero( )
hasta (n < 0)
Flujo. L
l
netodo
nclae
152
Clases: t ipos de dat os abst r act os
Observaciones:
x El mtodo fibonacci( ) tiene un parmetro formal n, cuyo nombre coincide con
el argumento o parmetro de llamada utilizado en el mtodo principal( ). Los
argumentos y los parmetros pueden tener igual nombre, pero esto no significa
que se trate del mismo espacio de memoria; en ambos casos se trata ms bien
de variables locales, una pasada como parmetro al mtodo fibonacci( ), y otra
definida dentro del mtodo principal( ). En general, es preferible utilizar nombres
distintos entre los argumentos y parmetros correspondientes, aunque esto queda
a decisin personal del programador.
x El mtodo fibonacci( ) presenta dos llamadas recursivas:
ter1 = fibonacci(n 1)
ter2 = fibonacci(n 2)
Los productos de cada llamada se almacenan en variables locales, cuyos contenidos
son sumados posteriormente para as obtener el trmino deseado.
Las variables locales ter1 y ter2 se pueden omitir si se utiliza la instruccin:
ter = fibonacci(n 1) + fibonacci(n 2)
Incluso, el mtodo fibonacci( )admite una nueva versin con una variable local
infaltable el parmetro n-, como se ilustra a continuacin:
entero entero n)
si (n == 1 __n == 2)
retornar(1)
no
retornar
n
netodo
153
Lgi ca y Pr ogr amacin or i ent ada a obj et os. Un enf oque basado en pr obl emas
3.7. EJERCICIOS PROPUESTOS
Mt odos
1. Escriba mtodos que permitan:
Hallar el dato mayor entre tres elementos.
Visualizar la media, mediana y desviacin tpica para un conjunto de datos.
Imprimir el valor total de la serie:
(1 - x) + (3 + x )
2
+ (5 - x )
4
+ (7 + x )
8
+
...
El mtodo recibe como parmetros el valor de x y la cantidad de trminos
a generar.
Sent enci as de cont r ol
2. Solucionar el problema nueve (Estadsticas por procedencia), utilizando otra clase
adems de la que contiene el mtodo principal ( ). El enunciado de dicho problema
es el siguiente:
Para un nmero determinado de personas se conoce su estatura, procedencia
y edad. La estatura y la procedencia se manejan de acuerdo a las siguientes
convenciones:
Estatura = 1 (alta), 2 (baja) o 3 (Mediana)
Procedencia = L (Americana), E (Europea), A (Asitica) u O (Otra).
Determinar:
El nmero de americanos altos, europeos bajos y asiticos medianos.
La edad promedio de los individuos de otras procedencias.
La cantidad de americanos bajos mayores de edad.
3. Hallar los datos mayor y menor entre una muestra de n nmeros enteros ingresados
por el usuario.
Presentar dos estilos de solucin: una con aplicacin de sentencias de control
segn lo explicado en este captulo, otra con aplicacin de las clases de uso comn,
segn el captulo 2.
154
Clases: t ipos de dat os abst r act os
Recur si n
4. Sean b y p nmeros enteros mayores o iguales a cero. Calcular b
p
: el nmero b
elevado a la potencia p.
5. El mximo comn divisor de los enteros x y y es el mayor entero que divide tanto
a x como a y. La expresin x % y produce el residuo de x cuando se divide entre y.
Defina el mximo comn divisor (mcd) para n enteros x y y mediante:
mcd (x, y) = y si (y <= x && x % y == 0)
mcd (x, y) = mcd (y, x) si (x < y)
mcd (x, y) = mcd (y,x % y ) en otro caso.
Ejemplos.: mcd(8, 12) = 4, mcd(9, 18) = 9, mcd(16, 25) = 1, mcd(6, 15) = 3.
6. Suponga que com(n, k) representa la cantidad de diferentes comits de k personas
que pueden formarse, dadas n personas entre las cuales elegir. Por ejemplo com(4,
3) = 4, porque dadas cuatro personas A, B, C y D hay cuatro comits de tres
personas posibles: ABC, ABD, ACD y BCD.
Para m valores, compruebe la identidad
com(n, k) = com(n - 1, k) + com(n - 1, k - 1), donde n, k >= 1.
7. Los coeficientes binomiales pueden definirse por la siguiente relacin de recurrencia,
que es el fundamento del tringulo de Pascal:
c(n, 0) = 1 y c(n, n) = 1 para n >= 0
c(n, k) = C(n - 1, k) + c(n - 1, k - 1) para n > k > 0.
155
Lgi ca y Pr ogr amacin or i ent ada a obj et os. Un enf oque basado en pr obl emas
Ejemplo: tringulo de Pascal de altura 5.
Defina c(n, k) para dos enteros cualquiera n >= 0 y k > 0, donde n > k.
8. Multiplicar n pares de nmeros naturales por medio de la recurrencia
a si b == 1
a * b =
a * (b - 1) + a si b > 1
donde a y b son enteros positivos.
9. La funcin de Ackerman se define para los enteros no negativos m y n de la siguiente
manera:
a (m, n) = n + 1 si m = 0.
a (m, n) = a (m - 1, 1) si m != 0, n == 0.
a (m, n) = a (m - 1, a (m, n - 1)) si m != 0, n != 0.
Compruebe que a(2, 2) = 7.
10. El siguiente es un algoritmo recursivo para invertir una palabra:
si (la palabra tiene una sola letra)
Esta no se invierte, solamente se escribe.
si no
Quitar la primera letra de la palabra.
Invertir las letras restantes
Agregar la letra quitada.
f i n_ si
156
Clases: t ipos de dat os abst r act os
Por ejemplo, si la palabra a invertir es ROMA, el resultado ser AMOR; si la palabra
es ANILINA (cadena capica), el resultado ser ANILINA.
Invertir n palabras, donde la variable n debe ser especificada por el usuario.
3.8. REFERENCIAS
[ Ar i st i zbal 2007] : Aristizbal, Diego Alejandro (2007). Un Cuento para tu Ciudad en
Cien Palabras. Metro de Medelln, Tercer puesto.
[ Bobadi l a2003] : Bobadilla, Jess. Java a travs de ejemplos. Alfaomega-Rama,
Madrid, 2003.
[ Eckel 2002] : Eckel, Bruce. Piensa en Java. Segunda edicin, Pearson Educacin,
Madrid, 2002.
[ Ovi edo2004] : Oviedo, Efran. Lgica de Programacin. Segunda Edicin. Ecoe
Ediciones, Bogot, 2004.
4.1. Oper aci ones con ar r egl os
Declaracin de un arreglo
Asignacin de datos a un arreglo
Acceso a los elementos de un arreglo
Problema 14: Sucesin numrica almacenada en un vector
4.2. La cl ase Vect or
Problema 15: Unin de dos vectores
Problema 16: Bsqueda binaria recursiva
4.3. La cl ase Mat r i z
Problema 17: Proceso electoral
4.4. Ej er ci ci os pr opuest os
4.5. Ref er enci as
C A P T U L O 4
Ar r egl os
159
ESE INOLVIDABLE CAFECITO
Juan Carlos Vsquez
Un da en el Instituto nos invitaron -a los que quisiramos acudir-, a pintar una pobre construccin que
haca de colegio y que era el centro de un poblado de chozas, cuyo nombre no puedo acordarme, en una
zona muy marginal, muy pobre y muy apartada de nuestras urbanizaciones, aunque, no muy distante.
Voluntariamente, acudi todo el curso, acompaado de nuestros hermanos guas, los promotores
de la iniciativa solidaria.
Fue un sbado muy temprano, cuando montados en nuestras dos cafeteras de autobuses todos tan
contentos, armados con nuestras respectivas brochas, para pintar de alegra y de esperanza, los
rostros de aquella desconocida gente.
Cuando llegamos, vimos como unas veinte chozas alrededor de una pobre construccin de cemento
que haca de colegio y, escuchamos la soledad escondida, excluida, perdida.
Nos pusimos manos a la obra: unos arriba, otros abajo; unos dentro, otros fuera. Como ramos
como ochenta pintores de brocha grande, la obra dur tan solo unas tres o cuatro horas.
Pero, antes de terminar, nos llamaron para que descansramos, y salimos para fuera y vimos una humilde
seora que nos invitaba a tomar caf. La seora, con toda la amabilidad, dulzura, y agradecimiento, nos
fue sirviendo en unas tacitas de lata que bamos pasando a otros despus de consumirlo.
Nunca olvidar ese olor y ese sabor de caf, pues qued grabado en mi memoria olfativa y gustativa
para siempre. Nunca me han brindado un caf tan rico como el que nos ofrecieron en ese da solidario.
Fue un caf dado con todo el amor del mundo. Me supo a humanidad, me supo a gloria.
Fue mi mejor caf, el caf ms rico del mundo.
160
Ar regl os
Diagrama de clases:
161
Lgi ca y Pr ogr amacin or i ent ada a obj et os. Un enf oque basado en pr obl emas
O
bj et i vos de apr endi zaj e
x Resolver problemas mediante la utilizacin de las estructuras de datos contenedoras
lineales Vector y Matriz.
x Manejar arreglos unidimensionales y bidimensionales de tipos estndar y tipos
abstractos de datos.
Un arreglo es una estructura de datos lineal y esttica, con nombre nico,
compuesta por elementos del mismo tipo; se considera lineal porque para cada
elemento del arreglo, siempre existirn un predecesor o elemento anterior y un sucesor
o elemento siguiente (exceptuando los elementos primero y ltimo del arreglo), dando la
sensacin abstracta de linealidad en la disposicin de los elementos que componen la
estructura; se considera esttica porque la memoria de computadora (RAM Random
Access Memory) que ocupar la estructura se debe definir en tiempo de compilacin
y no en tiempo de ejecucin, como ocurre con las estructuras dinmicas como las
listas ligadas.
7
Esto significa que el programador debe conocer la mxima cantidad de
elementos del arreglo para poder dimensionarlo antes de proceder con la ejecucin del
programa.
4.1. OPERACIONES CON ARREGLOS
Los arreglos se clasifican de acuerdo a su dimensin as:
x Unidimensionales o vectores.
x Bidimensionales o matrices.
7 Las estructuras de datos dinmicas como las listas enlazadas, as como la implementacin din-
mica de otras estructuras contenedoras de datos como las pilas, colas, rboles y grafos, forman
parte de un segundo curso de lgica de programacin. Para profundizar estas estructuras remitirse
a las referencias [Cair 1993], [Weiss1995] y [Flrez 2005].
162
Ar regl os
x N-dimensionales, donde N > 2
Los arreglos pueden contener muchos elementos del mismo tipo, a modo de paquete
de datos que se puede referenciar a travs de un solo nombre; por esto se dice que
un arreglo es una estructura de datos contenedora. Debe tenerse en cuenta que todo
arreglo se debe declarar y dimensionar antes de comenzar a utilizarlo.
DECLARACI N DE UN ARREGLO
En general, la declaracin de un arreglo tiene la siguiente sintaxis:
Donde:
El miembro izquierdo de la asignacin corresponde a la declaracin del arreglo,
y se explicita el tipo de datos del arreglo, su nombre y cantidad de dimensiones
(cantidad de pares de corchetes vacos); la parte derecha hace referencia al
dimensionamiento del arreglo, es decir, al espacio de memoria que utilizar el
arreglo.
<tipo_dato>: Es el tipo de datos del arreglo. Puede ser un tipo estndar (ent er o,
r eal , car act er , l ogi co, cadena), un tipo abstracto de datos (Producto, Cuenta,
Planta, etc.) o un tipo estndar clasificado (Ent er o, Real , Car act er , Logi co,
Cadena).
nomArreglo: Es el nombre dado al arreglo, que debe cumplir todas las caractersticas
para la construccin de identificadores.
[ ] [[ ] [ ]]: Son pares de corchetes, donde cada par indica una nueva dimensin
del arreglo; del segundo al ltimo son opcionales.
<po_dato> nomArreglo[ ] [[ ] [ ]] = nuevo <po_dato> [d1] [[d2] [dn]],
Declaracin Dimensionamiento
163
Lgi ca y Pr ogr amacin or i ent ada a obj et os. Un enf oque basado en pr obl emas
nuevo: Es una palabra reservada del seudo lenguaje con la cual se solicita memoria
para el arreglo. Como se ver, con esta misma palabra se podrn crear objetos.
[d1] [[d2] [dn]]: Son nmeros enteros que determinan la mxima capacidad
de cada dimensin del arreglo. No hay un lmite para la cantidad de dimensiones,
simplemente se debe tener claro que n > 0.
Si se quiere definir un vector se especifica slo la dimensin d1, para una matriz
se especifican las dimensiones d1 y d2, para un arreglo de tridimensional las
dimensiones d1, d2 y d3, y as sucesivamente.
Observar que las dimensiones d2 a dn son opcionales, por esto se encierran entre
un par de corchetes adicionales.
Ejemplos:
ent er o valores[ ] = nuevo ent er o[100]
r eal numeros[ ] [ ] = nuevo r eal [4] [5]
cadena nombres[ ] [ ] [ ] = nuevo cadena[2] [3] [5]
En el primer ejemplo se ha declarado el vector valores de 100 enteros, en el segundo
la matriz numeros de 20 reales (en cuatro filas y 5 columnas) y en el tercero el arreglo
tridimensional nombres con 30 cadenas (2 filas, 3 columnas y 5 planos).
La declaracin y el dimensionamiento de un arreglo se pueden independizar en dos
instrucciones, de la siguiente manera:
<tipo_dato> nomArreglo[ ] [[ ] [ ]] // Decclaracin
nomArreglo = nuevo <tipo_dato> [d1] [[d2] [dn]] // Dimensionamiento
Reescribiendo los ejemplos anteriores, se tiene:
a) ent er o valores[ ]
valores = nuevo ent er o[100]
164
Ar regl os
b) r eal numeros[ ] [ ]
nmeros = nuevo r eal [4] [5]
c) cadena nombres[ ] [ ] [ ]
nombres = nuevo cadena[2] [3] [5]
ASI GNACI N DE DATOS A UN ARREGLO
La asignacin de datos a un arreglo debe seguir la sintaxis:
Donde:
p1, p2,, pn: son nmeros enteros vlidos para alguna posicin del arreglo.
dato: un dato del mismo tipo del arreglo.
Algunos ejemplos de asignacin de datos en los arreglos ya citados:
valores [0] = 7
valores [24] = 238
numeros[1] [4] = 2,718
numeros[3] [0] = 9,81
nombres[0] [0] [1] = guayasamn
nombres[1] [2] [3] = las acacias
Tambin se pueden asignar datos definidos por el usuario a todas las posiciones
del vector, mediante un ciclo y una instruccin de lectura. As, el vector valores se
puede asignar este proceso tambin se denomina llenado del vector- de la siguiente
manera:
165
Lgi ca y Pr ogr amacin or i ent ada a obj et os. Un enf oque basado en pr obl emas
ent er o i
par a (i = 0, i <` 100, i = i+1)
Fl uj o.imprimir(Ingrese un nmero entero: )
valores[i] = Fl uj o.leerEntero( )
f i n_ par a
ACCESO A LOS ELEMENTOS DE UN ARREGLO
El acceso a los elementos de un arreglo se hace escribiendo el nombre del mismo
y entre corchetes la posicin que ocupa el elemento referenciado. La posicin est
dada por un nmero entero que se puede especificar a manera de constante o variable.
Algunos ejemplos:
a) valores[i] = valores[i + 1]
b) ent er o f, c
par a (f = 0, f > 4, f = f + 1)
par a (c = 0, c > 5, c = c + 1)
Fl uj o.imprimir(numeros[f][c])
f i n_ par a
f i n_ par a
c) nombres[i][j][k] = Cadena.concatenar(valor ,agregado)
PROBLEMA 14: SUCESI N NUMRI CA ALMACENADA EN UN VECTOR
Generar los primeros n trminos de la sucesin:
3, -1, 4, 0, 5, 1, 6, 2, 7,
Solucin:
Pr e anl i si s
Aunque este problema es idntico al nmero 11, ahora se soluciona con el uso de un
vector donde se almacenarn los elementos de la sucesin. La tabla de requerimientos
166
Ar regl os
no cambia con respecto a la ya planteada; sin embargo, el diagrama de clases,
responsabilidades y seudo cdigo se reestructuran como sigue.
a) Di agr ama de cl ases
Proyect o
+ generar Sucesion(x): [ ]
+ pr incipal ( )
Fluj o
El mtodo esttico generarSucesin( ) recibe un parmetro x equivalente al nmero
de trminos de la sucesin, y retorna un vector de enteros con la sucesin almacenada.
En el mtodo principal( ) se lee el nmero n (cantidad de trminos de la sucesin)
y se invoca al mtodo generarSucesion( ) con la variable n como argumento. Es
conveniente recordar que el mtodo principal( ) no retorna valor y es de carcter
esttico.
b) Responsabi l i dades de l as cl ases
Contratos de la clase Proyecto
Mt odo
Reque-
r i mi ent o
asoci ado
Pr econdi ci n Post condi ci n
generarSucesion( ) R2 Conocer el valor
de n
La sucesin se ha generado
y se encuentra almacenada
en un vector
principal ( ) R1
R2
Se desconoce
la cantidad de
trminos de la
sucesin
La sucesin se ha mostrado
al usuario
167
Lgi ca y Pr ogr amacin or i ent ada a obj et os. Un enf oque basado en pr obl emas
c) Seudo cdi go
clase Proyect o
pblico:
etaco generar Sucesi on(entero x): entero [ ]
entero vec[ ] = neo entero[ x]
lco band = certo
entero t er = 3, cont
ara (cont = 0, cont < x, cont = cont + 1)
vec[ cont ] = neo entero( )
vec[ cont ] = t er
si (band)
t er = t er - 4
band = falso
no
t er = t er + 5
band = certo
n
nara
retornar vec
netodo
//------------------------------------------------------------------------------
publico rncal ( )
entero n
Flujol
reer
n = Flujo.l eer Ent ero( )
hasta (n <= 0)
entero v[ ] = neo entero[ n]
v = generar Sucesi on(n)
v.most rar ( )
netodo
nclae
Observaciones:
x El vector v declarado despus del ciclo r epet i r / hast a del mtodo principal( ),
es un arreglo local unidimensional que recibir el vector devuelto por el mtodo
generarSucesion( ).
x La sucesin es mostrada al usuario a travs del mtodo mostrar( ) de la clase
Vector, definida a continuacin.
168
Ar regl os
4.2. LA CLASE VECTOR
Un vector es un arreglo unidimensional que puede almacenar elementos de
cualquier tipo primitivo de datos o referencias a objetos. La figura 4.1. representa los
vectores valores, letras y frutas de tipo ent er o, car act er y cadena, respectivamente.
El vector valores de tipo ent er o contiene seis nmeros, el vector letras de tipo
car act er contiene cuatro caracteres alfabticos, y frutas de tipo cadena posee tres
nombres de frutas. Cada elemento tiene una posicin absoluta, dada por un nmero
entero denominado ndice. As, el contenido del vector valores en su posicin 3 es igual
a 17, y se representa por: valores[ 3] = 17. De manera similar se debe notar que:
valores[0] = 12
valores[1] = 25
valores[5] = 7
valores[6] no existe.
letras[0] = x
letras[1] = e
letras[2] = w
letras[-1] no existe.
frutas[0] = uva
frutas[1] = manzana
Fi gur a 4.1. Tres vectores de diferente tipo
169
Lgi ca y Pr ogr amacin or i ent ada a obj et os. Un enf oque basado en pr obl emas
frutas[2] = mora
frutas [3] no existe
Observaciones:
x Los nombres de los vectores se cien a las reglas de cualquier identificador.
Comienzan con letras, no admiten espacios, no pueden coincidir con palabras
reservadas del seudo lenguaje, admiten el guin bajo en cualquier posicin. As,
otros nombres vlidos para vectores seran:
telfonos_empresa, tel, vec, v5, v
x Recordar que las cantidades no incluyen comillas, pero los caracteres una comilla
y las cadenas dos. Cabe entonces diferenciar entre el carcter 8, el nmero 8 y la
cadena de un carcter 8; y entre el nmero 438 y la cadena 438.
x Cuando un ndice sobrepasa los lmites del vector, sea por debajo o por encima,
ocurre una excepcin de ndice fuera de rango. Las excepciones son errores que
se deben manejar en tiempo de ejecucin para evitar una finalizacin anormal
del programa.
La clase Vector se define de la siguiente manera:
cont enedor
Vect or
-vec[ ]: Objet o
+ n: ent ero
+ t am: ent ero
+ Vect or(ent ero x)
+ Vect or(Objet o v[ ])
+ asignarDat o(Objet o d, ent ero p)
+ obt enerDat o(ent ero p): Objet o
+ llenar( )
+ most rar( )
+ buscar(Objet o x): ent ero
+ insert ar(Objet o x): lgico
+ eliminar(Objet o x): lgico
+ ordenar( )
170
Ar regl os
Donde:
x La clase Vect or forma parte del paquete de uso comn cont enedor , presentado
en la sesin 2.4 (Paquetes de uso comn). Este paquete contiene otras clases
(Mat r i z, Li st aOr denada, Pi l a, Col a, ABB, Gr af o y Ar chi vo) conocidas como
estructuras de datos internas debido a que su objetivo es optimizar el manejo
de grandes cantidades de datos en la memoria interna de la computadora. En
este libro nos ocuparemos de las clases Vect or y Mat r i z.
x La clase Vect or posee tres atributos: un arreglo unidimensional de visibilidad
privada denominado vec, que guarda datos de tipo Obj et o; una variable n de
visibilidad pblica que almacena el nmero de datos que guarda el vector; y una
variable tam, tambin de visibilidad pblica, que contiene la mxima cantidad
de elementos que puede almacenar el vector. Tener en cuenta el rango del
atributo n: 0 <= n <= tam.
Los atributos n y tam son pblicos porque usualmente se utilizan en las diferentes
operaciones que pueden hacerse sobre un vector: recorrido, bsqueda de un
elemento, ordenamiento, entre otras.
x Esta clase maneja dos constructores. El primero, Vector(ent er o x), tiene como
parmetro el nmero de elementos que va a guardar el vector. Al tamao tam
se le suma 10 con el objetivo de conservar espacio de memoria adicional
para futuras adiciones de elementos; este valor es subjetivo y puede variar de
acuerdo a la conveniencia del caso. Este constructor inicializa en nul o todos los
elementos del arreglo, como se detalla a continuacin:
Vect or (ent er o x)
ent er o i
n = x
tam = x + 10
vec = nuevo Obj et o[x]
par a (i = 0, i < x, i = i + 1)
vec[i] = nuevo Obj et o( )
vec[i] = nul o
f i n_ par a
f i n_ met odo
171
Lgi ca y Pr ogr amacin or i ent ada a obj et os. Un enf oque basado en pr obl emas
Para crear un vector v de tamao cien se escribe:
Vect or v = nuevo Vect or (100)
El segundo constructor, Vect or (Obj et o v[ ]), tiene como parmetro un arreglo
unidimensional de tipo Obj et o, e inicializa el atributo vec con los valores que guardan
los elementos del parmetro v por medio de una nica y simple operacin de asignacin,
como se observa a continuacin:
Vect or (Obj et o v[ ])
vec = v
n = v.n
tam = v.tam
f i n_ met odo
Para crear un vector v1 que guarde los datos del arreglo v2 se escribe:
r eal v2[ ]= {1, 2, 3, 4}
Vect or v1 = nuevo Vect or (v1)
x Los mtodos restantes se describen as:
asignarDato(Obj et o d, ent er o p) Asigna el dato d a la posicin p del vector
vec. Este mtodo permite modificar el estado del vector porque el contenido de
vec[ p] cambia por d.
obtenerDato(ent er o p): Obj et o Retorna el contenido de vec[ p] , es decir,
permite conocer el estado del vector en su posicin p.
llenar( ) Llena el vector con n datos de tipo Obj et o.
mostrar( ) Imprime el contenido del vector vec.
buscar(Obj et o x): ent er o Busca el dato x en el vector vec y retorna la
posicin (ndice del vector) donde fue hallado. Si x no existe retorna un valor
igual a -1.
172
Ar regl os
insertar(Obj et o x): l gi co Inserta el dato x al final del vector vec, es decir, en
la posicin n+ 1. Si la insercin tuvo xito se retorna ci er t o; si no hay espacio
disponible porque tam == n, se retorna f al so.
eliminar(Obj et o x): l gi co Elimina el dato x en el vector vec. Retorna ci er t o
si x fue eliminado o f al so en caso contrario.
ordenar( ) Ordena el vector vec de menor a mayor.
El seudocdigo para la clase Vect or es el siguiente:
clase Vect or
rado Ceto vec[ ]
publico entero n
publico entero t am
publico:
Vector(entero x)
entero i
n = x
t am = x
vec = nuevo Objeto[ x]
ara (i = 0, i < x, i = i + 1)
vec[ i ] = nlo
nara
netodo
//---------------------------------------------------------------------
Vector(Objeto v[ ] )
vec = v
n = v.n
t am = v.t am
netodo
//---------------------------------------------------------------------
asi gnar Dat o (Objeto d, entero p)
vec[ p] = d
netodo
//---------------------------------------------------------------------
Objeto obt ener Dat o (entero p)
retornar vec[ p]
netodo
//---------------------------------------------------------------------
173
Lgi ca y Pr ogr amacin or i ent ada a obj et os. Un enf oque basado en pr obl emas
l l enar ( )
entero i
ara (i = 0, i < n, i = i + 1)
vec[ i ] = Flujo.l eer Obj et o( )
nara
netodo
//----------------------------------------------------------------------
cadena most rar ( )
cadena t ext o =
entero i
ara( i = 0, i < n, i = i + 1)
t ext o = t ext o + vec[ i ] .aCadena( ) +
nara
retornar t ext o
netodo
//----------------------------------------------------------------------
entero buscar (Objeto x)
entero pos = 0 / / Cont ador para recorrer el vect or
lco hal l ado = falso / / Supuest o: x no exi st e
/ / M i ent ras no encuent re a x y exi st an
el ement os por comparar
entra hal l ado == falso && pos < n)
si (vec[ pos] .comparar (x) == 0) / / Lo encont r?
hal l ado = certo
no
pos = pos + 1 / / Avance a la siguient e posicin
n
nentra
si (hal l ado == falso) / / No encont r a x en vec?
pos = -1
n
retornar pos
netodo
//----------------------------------------------------------------------
logico i nser t ar (Objeto x)
logico falso // No se ha i nser t ado
entero v
i nser t ar exi st e en vec
si (p == -1) / / No encont r el dat o x?
si (n < t am) / / Hay espaci o di sponi bl e en el
vect or ?
vec[ n] = x
n = n + 1
certo / / Inserci n real i zada
Flujo.i mpr i mi r ( Inserci n real i zada )
174
Ar regl os
no
Flujo.i mpr i mi r ( No hay espaci o para l a i nserci n )
n
no
Flujo.i mpr i mi r (x.aCadena( ) + ya exi st e )
n
retornar
netodo
//--------------------------------------------------------------------------------
entero el i mi nar (Objeto x)
entero v
si (p ! = -1) Encont r a x en l a posi ci n p?
/ / Desde p, desplazar los element os de vec una posicin hacia at rs
ara (i = p, i < n - 1, i = i + 1)
vec[ i ] = vec[ i + 1]
nara
8
Flujo.i mpr i mi r (x.aCadena( ) + el i mi nado )
no
Flujo.i mpr i mi r (x.aCadena( ) + no exi st e )
n
retornar p
netodo
//--------------------------------------------------------------------------------
ordenar ( )
entero i , j
Objeto aux
ara (i = 0, i < n -1, i = i + 1)
ara (j = i + 1, j < n, j = j + 1)
si (vec[ i ] .comparar (vec[ j ] ) > 0)
aux = vec[ i ]
vec[ i ] = vec[ j ]
vec[ j ] = aux
n
nara
nara
netodo
//-----------------------------------------------------------------------------
nclae
175
Lgi ca y Pr ogr amacin or i ent ada a obj et os. Un enf oque basado en pr obl emas
Observaciones:
x El mtodo mostrar( ) utiliza la variable local texto de tipo cadena para crear una
representacin textual del vector a imprimir. Cada elemento del vector vec es
convertido a texto mediante el mtodo aCadena( ) de la clase Obj et o, con el fin
de concatenarlo a la variable texto a travs el operador cruz (+).
A manera de ejemplo, para mostrar el vector v en pantalla, basta con escribir
las instrucciones:
r eal v1[ ] = {1.7, 2.8, 3.9}
Vector v = nuevo Vector(v1)
v.mostrar( )
x El mtodo buscar( ) devuelve la posicin -nmero entero- donde fue hallado el
dato x. En el proceso de bsqueda del elemento, se utiliza el mtodo comparar( )
de la clase Obj et o.
x Los mtodos insertar( ) y eliminar( ) verifican si el dato x existe o no dentro
del vector vec, porque este contiene claves de bsqueda -no puede contener
elementos repetidos-. En los ejercicios propuestos del captulo se plantea un
problema sobre un vector que puede contener elementos duplicados.
x El mtodo insertar( ) inserta el dato x al final del vector vec, siempre y cuando
exista espacio disponible.
x La eliminacin de un elemento del vector implica un borrado lgico en lugar de
un borrado fsico. En la figura 4.2. se observa el proceso que se lleva a cabo
cuando se desea eliminar el dato x, ubicado en la posicin pos del vector vec,
que en este caso almacena nmeros enteros.
Fi gur a 4.2. Eliminacin de un dato en un vector
176
Ar regl os
x El ordenamiento ascendente del vector se lleva a cabo a travs del mtodo de
la burbuja, que compara el contenido de la primera posicin con las dems
que le siguen, el contenido de la segunda con todas las que le preceden, y as
sucesivamente hasta llegar a comparar el contenido de la penltima posicin
con el de la ltima. Cuando la comparacin es verdadera, es decir, cuando se
cumple vec[ i] .comparar(vec[ j] ) > 0 (esto significa que el contenido del vector
en la posicin i es mayor que el contenido del vector en la posicin j), se debe
realizar el intercambio de contenido de las dos posiciones, lo que se logra con
la variable auxiliar aux.
El mtodo de la burbuja tiene varias versiones; aqu se ha presentado una de
las ms conocidas.
Si se analiza la eficiencia del mtodo ordenar( ) por medio del clculo de su
orden de magnitud
8
, se llega a la conclusin que este tipo de ordenamiento es
aplicable cuando el volumen de datos a tratar es pequeo, de lo contrario se
hace ineficiente. Cuando la cantidad de datos es grande se pueden utilizar otros
mtodos como el ordenamiento rpido (quick sort), por insercin, seleccin o
montculo (heap sort), que tienen un mejor comportamiento en el tiempo de
ejecucin. En este sentido, el mtodo ordenar( ) se puede sobrecargar siguiendo
los lineamientos lgicos de otros mtodos de ordenamiento.
PROBLEMA 15: UNI N DE DOS VECTORES
Se tienen dos vectores v1 y v2 de n y m elementos, respectivamente. Se pide: crear
otro vector v3 con los elementos correspondientes a la unin de v1 y v2, ordenar el
vector v3, e imprimir los tres vectores.
8 El orden de magnitud, conocido tambin como notacin O Grande, es una medida para la eficiencia
de un algoritmo. El mtodo de la burbuja tiene orden de magnitud cuadrtica, expresado como
O(n
2
). Para mayor informacin sobre este tema remitirse a [Brassard 1997] y [Aho 1988].
177
Lgi ca y Pr ogr amacin or i ent ada a obj et os. Un enf oque basado en pr obl emas
Solucin:
a) Tabl a de r equer i mi ent os
I d. del r eq. Descr i pci n Ent r adas Resul t ados
R1
Conocer el tamao de los
vectores
Dos nmeros
enteros m y n
Se conoce el
tamao de los dos
arreglos
R2
Conocer los datos del primer
vector
m
El vector v1 ha sido
creado
R3
Conocer los datos del segundo
vector
n
El vector v2 ha sido
creado
R4 Unir los vectores v1 y v2 m y n
El vector unin v3
ha sido creado
R5
Ordenar el vector unin
v3.n
El vector v3 est
ordenado
R6 Visualizar los tres vectores v3
Los vectores v1,
v2 y v3 han sido
impresos
b) Tabl a de r equer i mi ent os
Vect or
Flujo
Vect or a, Vect or b): Vect or
Proyect o
178
Ar regl os
c) Cont r at o de l a cl ase Pr oyect o
Mt odo
Reque-
r i mi ent o
asoci ado
Pr econdi ci n Post condi ci n
Vect or union
(Vect or a,
Vect or b )
R4 No se han unido los
vectores a y b
La unin de los vectores
a y b se encuentra
almacenada en un tercer
vector
principal ( ) R1, R2, R3,
R4,
R5 y R6
No existen vectores a
procesar
Se conoce la unin de los
vectores v1 y v2
d) Seudo cdi go
Clase Proyect o
publico:
etaco Vector uni on(Vector a, Vector b)
Vector c = neo Vector (a.n + b.n )
entero i , p
/ / Copi ar el cont eni do del vect or a en el vect or c
ara (i = 0, i < a.n, i = i + 1)
c.i nser t ar (a.obt ener Dat o(i ))
nara
// Copi ar en el vect or c l os el ement os de b que no est n en a
ara (i = 0, i < b.n, i = i + 1)
p = a.buscar (b.obt ener Dat o(i )) / / buscar b.vec[ i] en a
si (p ! = -1) / / Lo encont r?
c.i nser t ar (b.obt ener Dat o(i ))
n
nara
retornar c
netodo
//-------------------------------------------------------------------------
rncal
entero m, n
Flujo.i mpr i mi r ( Creaci n de dos vect ores de t amaos m y n )
Flujo.i mpr i mi r ( Ingrese el val or de m: )
179
Lgi ca y Pr ogr amacin or i ent ada a obj et os. Un enf oque basado en pr obl emas
reer
m = Flujo.l eer Ent ero( )
hasta (m < 0)
Flujo.i mpr i mi r ( Ingrese el val or de n: )
reer
n = Flujo.l eer Ent ero( )
hasta (n < 0)
/ / Reser va de memor i a para l os dos vect ores
Vector v1 neo Vector(m)
Vector v2 neo Vector(n)
/ / Ll enar l os vect ores v1 y v2
v1.l l enar ( )
v2.l l enar ( )
/ / Uni r v1 y v2
Vector v3 neo Vector(m + n)
v3 = uni on(v1, v2)
/ / Ordenar v3
v3.ordenar ( )
/ / Vi sual i zar el cont eni do de l os t res vect ores
v1.most rar ( )
v2.most rar ( )
v3.most rar ( )
netodo
nclase
PROBLEMA 16: BSQUEDA BI NARI A RECURSI VA
Escribir un mtodo que busque un elemento dado como parmetro, dentro de un
vector que se encuentra ordenado.
Solucin:
Pr e anl i si s
La bsqueda binaria se aplica a conjuntos de datos ordenados, almacenados en
estructuras de datos lineales como vectores o listas enlazadas. Si los datos no se
encuentran ordenados, se aplican otros mtodos de bsqueda como la secuencial o la
hash (por transformacin de claves).
En este caso, nos ocuparemos de la bsqueda binaria en un vector, mtodo que formara
parte de la clase VectorOrdenado. Un objeto perteneciente a esta clase es un arreglo
unidimensional compuesto por elementos del mismo tipo, los cuales se hallan ordenados
de forma ascendente (por omisin siempre se asume este tipo de ordenamiento).
180
Ar regl os
Todos los mtodos aplicados a la clase VectorOrdenado deben conservar el estado
de ordenamiento de los datos. Una posible definicin para esta clase sera la siguiente.
Los mtodos llenarVector( ), mostrarVector( ), eliminarDato( ) e insertarDato( )
quedan propuestos como ejercicios para el lector, y no necesariamente se deben tratar
como mtodos recursivos. Nos interesa por el momento el desarrollo del mtodo recursivo
busquedaBinaria(Obj et o x, ent er o b, ent er o a):ent er o, y el mtodo sobrecargado
busquedaBinaria(Obj et o x):ent er o, que es de naturaleza no recursiva.
Document aci n del mt odo busquedaBi nar i a( ) recursiva.
Segn el diagrama de clases, el mtodo forma parte de la clase VectorOrdenado,
que a su vez contiene los miembros privados vec, tam y n, donde:
vec : nombre del vector ordenado.
tam: tamao del vector, equivalente a la mxima cantidad de elementos
que puede almacenar.
n: cantidad de elementos reales en el vector. Siempre se cumplir que n
<= tam.
El mtodo busquedaBinaria(Obj eto x, enter o b, enter o a):enter o retorna la posicin p
donde el dato x fue encontrado o retorna un valor igual a -1 si x no existe. 0 <= p < n
Vect orOrdenado
- vec[ ]: Objeto
+ t am: entero
+ n: entero
+ Vect orOrdenado(entero x )
+ llenarVect or( entero x)
+ most rarVect or( )
+ busquedaBinaria(Objeto x, entero b, entero a): entero
+ busquedaBinaria(Objeto x): entero
+ eliminarDat o(Objeto x): logico
+ insert arDat o(Objeto x): logico
181
Lgi ca y Pr ogr amacin or i ent ada a obj et os. Un enf oque basado en pr obl emas
Los parmetros x, b y a adquieren el siguiente significado:
x: dato a buscar en el vector ordenado.
b: valor ms bajo para un ndice del arreglo. Su valor inicial es 0 (cero).
a: valor ms alto para un ndice del arreglo. Su valor inicial es el atributo n.
Definicin del mtodo:
entero busquedaBi nar i a(Objeto x, entero b, entero a)
entero p, m
si (b > a)
p = -1
no
m = (a + b) / 2
si (x < vec[ m] )
p = busquedaBi nar i a(x, b, m -1)
no
si (x > vec[ m] )
p = busquedaBi nar i a(x, m +1, a)
no
p = m
n
n
n
retornar(p)
netodo
Observaciones:
x Los tres parmetros del mtodo son pasados por valor. La primera vez que se
ejecute el mtodo los valores de b y a sern 0 y n- 1, respectivamente. (Recordar
que el valor de n es igual a la cantidad de elementos presentes en el vector).
El valor del parmetro x siempre ser el mismo para las distintas llanadas
recursivas.
x El mtodo busquedaBinaria( ) recursiva busca el dato x dividiendo sucesivamente
por mitades el vector vec. Si el dato x es menor que el dato ubicado en la
posicin media del vector (dada por m), se busca por la mitad izquierda del
182
Ar regl os
vector mediante la llamada recursiva busquedaBinaria (x, b, m - 1); si el dato
x es mayor que el dato ubicado en la posicin media del vector, se busca por
la mitad derecha del vector mediante la llamada recursiva busquedaBinaria(x,
m + 1, a); finalmente, si no se cumplen los dos casos anteriores se concluye
que el dato fue hallado y se asigna a la posicin p el valor de m. La finalizacin
de la recursividad se presenta cuando el valor de b supera al valor de a (primer
bloque de decisin del mtodo).
4.3. LA CLASE MATRIZ
Una Matriz es un arreglo de dos dimensiones compuesto por elementos del mismo
tipo, cada uno de ellos ubicado en una posicin especfica tanto por un nmero para la
fila como para la columna. Toda matriz -y de hecho cualquier arreglo- tiene un nombre
nico que sirve para diferenciarlo de los dems en el marco de una aplicacin.
La matriz tabla de m filas y n columnas es llamada matriz de orden m * n y se
denota por tabla(m * n); su presentacin grfica est dada por:
t abla
Espacio disponible
t abla[ 2, 1]
t abla[ 1, n-1]
0 1 n-1
0
1 81
2 25
m-1 m * n
Fi gur a 4.3. Representacin de una matriz
183
Lgi ca y Pr ogr amacin or i ent ada a obj et os. Un enf oque basado en pr obl emas
Para referenciar los elementos de una matriz se escribe el nombre del arreglo y entre
corchetes dos expresiones enteras separadas por comas; la primera correspondiente al
nmero de la fila y la segunda al nmero de columna. As, el primer elemento de toda
matriz ocupa la posicin [0, 0]. As en la figura 4.3. puede observarse que tabla[ 2, 1]
= 25 y tabla [ 1, n- 1] = 81. Debe sealarse que, como en los vectores, debe existir un
espacio disponible para realizar operaciones de insercin de nuevas filas o columnas.
La clase Mat r i z se puede definir de la siguiente manera:
Cont enedor
Mat riz
- mat [ ] [ ] : Objeto
entero
entero
&entero
entero
+ Mat riz(entero f, entero c)
+ Mat riz (Objeto m[ ] [ ] )
+ asignarDat o(Objeto d, entero f, entero c)
+ obt enerDat o(entero f, entero c): Objeto
+ most rarMat riz( )
+ buscar(Objeto x): entero[ ]
+ eto sumaMat rices(Matriz a, Matriz b): Matriz
+ etao product oMat rices(Matriz a, Matriz b): Matriz
+ etao WMatriz m, entero e): Matriz
Donde:
x La clase Mat r i z maneja cinco atributos: un arreglo bidimensional de objetos
con visibilidad privada, denominado mat, y cuatro atributos pblicos de tipo
entero para la cantidad de filas, la cantidad de columnas, el nmero mximo de
filas y de columnas, respectivamente.
184
Ar regl os
Cabe anotar que 0 <= fil <= maxFil y 0 <= col <= maxCol.
x Esta clase maneja dos constructores. Veamos:
Al primero se le pasa el nmero de filas y de columnas e inicializa todos sus
miembros en cero.
Mat r i z (ent er o f, ent er o c)
fil = f
col = c
maxFil = f + 10
maxCol = c + 10
mat = nuevo Obj et o[f][c]
ent er o i, j
par a (i = 0, i < f, i = i + 1)
par a (j = 0, j < c, j = j + 1)
mat[i][j] = 0
f i n_ par a
f i n_ par a
f i n_ met odo
Para crear una matriz m de dimensin de orden 5 * 6, se escribe:
Mat r i z m = nuevo Mat r i z(5, 6)
Al segundo constructor se le pasa un arreglo bidimensional de objetos, para
inicializar el miembro dato mat con los valores que guardan los elementos de dicho
arreglo mediante una operacin de asignacin.
Mat r i z(Obj et o m[ ][ ])
mat = m
fil = m.fil
col = m.col
maxFil = m.maxFil
maxCol = m.maxCol
f i n_ met odo
185
Lgi ca y Pr ogr amacin or i ent ada a obj et os. Un enf oque basado en pr obl emas
Lo anterior, para crear la matriz tabla(4 * 3) con el siguiente contenido:
Tabla
2 1 0
4 3 9
6 5 10
8 7 11
A partir de la tabla se crea un arreglo bidimensional para este caso denominado
cuadro- y se le pasa al constructor de la clase Mat r i z, como se observa a continuacin:
ent er o cuadro[ ][ ] = {{2, 1, 0}, {4, 3, 9}, {6, 5, 10}, {8, 7, 11} }
Mat r i z tabla = nuevo Mat r i z(cuadro);
x El mtodo asignarDato(Obj et o d, ent er o f, ent er o c), asigna el objeto d a mat[ f, c] .
x El mtodo obtenerDato(ent er o f, ent er o c): Obj et o, devuelve el dato almacenado
en mat[ f, c] .
x Los mtodos restantes se describen as:
mostrarMatriz( ) Muestra el contenido de la matriz mat.
buscar(Obj et o x): ent er o[ ] Busca el dato x en la matriz mat; y retorna un
vector de tipo entero con la posicin donde fue hallado el dato x. La primera
posicin del vector retornado contendr el nmero de la fila y la segunda el
nmero de la columna. Pero, si el dato x no existe, el vector contendr dos
valores iguales a -1.
est at i co sumaMatrices(Mat r i z a, Mat r i z b): Mat r i z Suma dos matrices
del mismo orden y retorna otra matriz con el resultado de la suma.
est at i co productoMatrices(Mat r i z a, Mat r i z b): Mat r i z Multiplica dos
matrices compatibles respecto al producto. Para que dos matrices se puedan
multiplicar, el nmero de columnas de la primera debe coincidir con el nmero
de columnas de la segunda. Por tanto, si las matrices a multiplicar son a(m *
n) y b(n * p), el resultado ser una matriz de orden m * p.
est at i co productoPorEscalar(Mat r i z m, ent er o e): Mat r i z Realiza el
186
Ar regl os
producto de una matriz por un escalar de tipo r eal , dando como resultado otra
matriz cuyos elementos estn todos multiplicados por dicho escalar.
El seudocdigo para la clase Mat r i z es el siguiente:
Clase M at r i z
rado Ceto mat [ ] [ ]
lco entero l C
publ i co:
M at r i z(entero f, entero c)
col = c
maxFi l = f + 10
maxCol = c + 10
mat = neo Objeto[ f ] [ c]
entero i , j
ara (i = 0, i < f, i = i + 1)
ara (j = 0, j < c, j = j + 1)
mat [ i ] [ j ] = 0
nara
nara
netodo
//----------------------------------------------------------------------
M at r i z (Objeto m[ ] [ ] )
mat = m
col = m.col
maxFi l = m.maxFi l
maxCol = m.maxCol
netodo
/ / --------------------------------------------------------------------
187
Lgi ca y Pr ogr amacin or i ent ada a obj et os. Un enf oque basado en pr obl emas
asi gnar Dat o(Objeto d, entero f, entero c)
mat [ f ] [ c] = d
netodo
//----------------------------------------------------------------------
Objeto obt ener Dat o(entero f, entero c)
retornar mat [ f ] [ c]
netodo
//----------------------------------------------------------------------
most rar M at r i z( )
cadena t ext o =
entero i , j
ara
ara ( j = 0, j < col , j = j + 1)
t ext o = t ext o + mat [ i ] [ j ] .aCadena( ) +
n ara
/ / sal t o de l nea
n ara
Flujo.i mpr i mi r (t ext o)
netodo
//-------------------------------------------------------------------------------
entero[ ] buscar (Objeto x)
entero pos[ ] = {-1, -1}
entero i = 0, j
logico hal l ado = falso // Supuest o: x no exi st e
entra falso)
j = 0
entra ( j < col && hal l ado == falso)
si (mat [ i ] [ j ] .comparar (x) == 0) / / Se encont r x?
pos[ 0] = i
pos[ 1] = j
hal l ado = certo
n
j = j + 1
n entra
i = i + 1
n entra
r etornar pos
netodo
//-------------------------------------------------------------------------------
188
Ar regl os
Matr sumaM at r i ces(Matr a)
Matr b = neo Matr
entero i , j
ara
ara (j = 0, j < b.col , j = j + 1)
b.mat [ i ] [ j ] = a.mat [ i ] [ j ] + mat [ i ] [ j ]
n ara
n ara
retornar b
netodo
//--------------------------------------------------------------------------------
Matr product oM at r i ces(Matr a)
Matr b = nlo
b = neo Matr
entero i , j , k
ara
ara ( j = 0, j < b.col , j = j + 1)
b.mat [ i ] [ j ] = 0
ara ( k = 0, k < col , k = k + 1)
b.mat [ i] [ j ] = b.mat [ i] [ j ] + mat [ i] [ k] * a.mat [ k] [ j ]
n ara
n ara
n ara
retornar b
netodo
//-----------------------------------------------------------------------------------
Matr product oPor Escal ar (entero e)
Matr r = neo Matr
entero i , j
ara
ara ( j = 0, j < col , j = j + 1)
r.mat [ i ] [ j ] = mat [ i ] [ j ] * e
n ara
n ara
retornar r
netodo
//----------------------------------------------------------------------
nclae
189
Lgi ca y Pr ogr amacin or i ent ada a obj et os. Un enf oque basado en pr obl emas
Observaciones:
x El mtodo mostrarMatriz( ) utiliza la variable local texto de tipo cadena para
crear una representacin textual de la matriz a visualizar. Cada elemento de la
matriz mat es convertido a texto mediante el mtodo aCadena( ), con el objetivo
de concatenarlo a la variable texto a travs el operador cruz (+).
La matriz es visualizada por filas, para lo cual se debe incluir un salto de lnea
al finalizar cada fila.
Por ejemplo, para mostrar la matriz m en pantalla se podra escribir:
car act er tabla[ ] [ ] = {{a, b, c}, {1, 2, 3}, {@, *, &}
Mat r i z m = nuevo Mat r i z(tabla)
tabla.mostrarMatriz( )
x En el producto de dos matrices, los elementos c
ij
se obtienen multiplicando los
elementos a
ik
de la fila i por los elementos b
kj
de la columna j, sumando los
resultados k veces, de acuerdo a la siguiente frmula:
a.col -1
K = 0
c[i][j] = 6 a[i][k] * b[k][j]
PROBLEMA 17: PROCESO ELECTORAL
En las elecciones para alcalde de una ciudad se han presentado cuatro candidatos
(A, B, C y D). La ciudad est dividida en cinco zonas de votacin. El reporte de votos
se recibe en orden segn la zona: primero la zona 1, segundo la 2, y as sucesivamente
hasta la zona 5. Calcular el total de votos obtenido por cada candidato, con su
porcentaje correspondiente. Escriba un mensaje declarando ganador a un candidato, si
ste obtuvo ms del 50% de la votacin.
190
Ar regl os
Solucin:
Pr e anl i si s
Este problema plantea un proceso de elecciones simple donde el analista debe
decidir sobre las estructuras de datos a utilizar.
El anlisis del enunciado induce al trabajo con una matriz y un vector. En la matriz
se pueden almacenar los votos obtenidos por cada candidato en las diferentes zonas,
de manera que las filas correspondan a las zonas y las columnas a los candidatos,
obteniendo as una matriz de orden 5 * 4. En el vector se almacenar el total de votos
por candidato, este se calcula a partir de la suma de la columna correspondiente, la
cual forma un vector de tamao igual a 4. Esta representacin se ilustra en la figura
4.4., donde votos representa la matriz de votos y vxc el vector de votos por candidato.
Fi gur a 4.4. Matriz de votos y vector de votos por candidato
191
Lgi ca y Pr ogr amacin or i ent ada a obj et os. Un enf oque basado en pr obl emas
a) Tabl a de r equer i mi ent os
I dent i f i caci n del
r equer i mi ent o
Descr i pci n Ent r adas
Resul t ados
( Sal i das)
R1 Para cada zona, conocer
la cantidad de votos por
candidato
Veinte nmeros
enteros
ingresados por
el usuario
Los votos obtenidos
por cada candidato
en todas las zonas,
es decir, la matriz
inicializada con
valores consistentes
(votos)
R2 Conocer la cantidad
de votos por candidato
con su porcentaje
correspondiente, as
como identificar si hubo
un ganador.
La matriz
votos.
Los resultados de
las elecciones para
alcalde
b) Di agr ama de cl ases
Vect or
Mat riz
Fluj o
Elecciones
- vot os: Mat riz
- vxc: Vect or
+ Elecciones( )
+ result adoComicios( )
Proyect o
+ principal ( )
En este diagrama de clases se puede observar la diferencia entre una relacin
de dependencia (flecha con lnea punteada) y una de asociacin (flecha con lnea
continua). Entre las clases Elecciones y Matriz existe una asociacin a travs del
atributo votos; de manera similar, entre las clases Elecciones y Vector existe una
asociacin a travs del atributo vxc.
Entre las clases Proyecto y Elecciones y entre Elecciones y Flujo se presentan relaciones
de dependencia (en este caso, de uso), porque el mtodo principal( ) instancia un
192
Ar regl os
objeto de la clase Elecciones y esta ltima utiliza la clase Fl uj o en operaciones de
entrada y salida de datos.
c) Responsabi l i dades de l as cl ases
Contratos de la clase Elecciones
Mt odo
Req.
asoci ado
Pr econdi ci n Post condi ci n
Elecciones( ) R1 Se desconocen los
votos obtenidos
por los candidatos
en cada una de las
zonas
Los votos obtenidos por los
candidatos en cada una
de las zonas se conocen y
estn almacenados en la
matriz votos
resultadoComicios( )
R2
Se desconoce el
resultado de los
comicios.
Se conoce la cantidad de
votos por cada candidato
con su porcentaje
respectivo y se sabe si
existe o no un ganador
Contrato de la clase Proyecto
Mt odo
Reque_
r i mi ent o
asoci ado
Pr econdi ci n Post condi ci n
principal ( ) R1
R2
No se ha realizado el
proceso de votacin
Las elecciones se han
realizado, se conocen los
votos por candidato y si
existe o no un ganador
193
Lgi ca y Pr ogr amacin or i ent ada a obj et os. Un enf oque basado en pr obl emas
d) Seudo cdigo
clase El ecci ones
rado:
Matr vot os
Vect or vxc
publico:
El ecci ones( )
entero f, c
Flujo.i mpr i mi r ( El ecci ones para al cal de )
ara (f = 0, f < 5, f = f + 1)
Flujo.i mpr i mi r ( Zona N + (f + 1))
ara (c = 0, c < 4, c = c + 1)
en (c)
caso 0:
Flujo.i mpr i mi r ( Candi dat o A )
altar
caso 1:
Flujo.i mpr i mi r ( Candi dat o B )
altar
caso 2:
Flujo.i mpr i mi r ( Candi dat o C )
altar
caso 3:
Flujo.i mpr i mi r ( Candi dat o D )
nen
vot os.asi gnar Dat o(Flujo.l eer Ent ero( ), f, c)
nara
nara
netodo
//---------------------------------------------------------------------
resul t adoComi ci os( )
1. entero f, c
2. ara (c = 0, c < 4, c = c + 1)
3. vxc.asi gnar Dat o(0, c)
4. ara (f = 0, f < 5, f = f + 1)
5. vxc.asi gnar Dat o(vxc.obt ener Dat o(c ) +
vot os.obt ener Dat o(f, c), c)
6. nara
7. nara
8. entero t ot al V = vxc.obt ener Dat o(0) + vxc.obt ener Dat o(1) +
vxc.obt ener Dat o(2) + vxc.obt ener Dat o(3)
9. real pa, pb, pc, pd / / Porcent aj es de vot os por candi dat o
194
Ar regl os
10. pa = (vcx.obt ener Dat o(0) / t ot al V) * 100
11. pb = (vcx.obt ener Dat o(1) / t ot al V) * 100
12. pc = (vcx.obt ener Dat o(2) / t ot al V) * 100
13. pd = (vcx.obt ener Dat o(3) / t ot al V) * 100
14. Flujo.i mpr i mi r ( Tot al vot os candi dat o A: +
vxc.obt ener Dat o(0) + , con un porcent aj e de: + pa + % )
15. Flujo.i mpr i mi r ( Tot al vot os candi dat o B: +
vxc.obt ener Dat o(1) + , con un porcent aj e de: + pb + % )
16. Flujo.i mpr i mi r ( Tot al vot os candi dat o C: +
vxc.obt ener Dat o(2) + , con un porcent aj e de: + pc + % )
17. Flujo.i mpr i mi r ( Tot al vot os candi dat o D: +
vxc.obt ener Dat o(3) + , con un porcent aj e de: + pd + % )
18. si (pa>50) / / vxc.obt ener Dat o(0) > t ot al V / 2
Flujo.i mpr i mi r ( Candi dat o ganador. + A)
no
19. si (pb>50)
Flujo.i mpr i mi r ( Candi dat o ganador. + B)
no
20. si (pc>50)
Flujo.i mpr i mi r ( Candi dat o ganador. + C)
no
21. si (pd>50)
Flujo.i mpr i mi r ( Candi dat o ganador. + A)
no
Flujo.i mpr i mi r ( No hay ganador )
22. n
23. n
24. n
25. n
netodo
//---------------------------------------------------------------------
nclae / / El ecci ones
//**************************************************
clase Proyect o
publico pr i nci pal ( )
El ecci ones e = neo El ecci ones( )
e.resul t adoComi ci os( )
netodo
nclae
195
Lgi ca y Pr ogr amacin or i ent ada a obj et os. Un enf oque basado en pr obl emas
Observaciones:
x El constructor sin argumentos Elecciones( ) es el encargado de llenar la matriz
votos, miembro privado de la clase Elecciones. Este constructor recorre la matriz
de votos por filas mediante dos ciclos par a unirlos. El ciclo externo imprime
un mensaje relativo a la zona; el ciclo interno utiliza un selector mltiple para
informar acerca del candidato en proceso.
La instruccin votos.asignarDato(Fl uj o.leerEntero( ), f, c) ofrece un particular
inters en tanto asigna al miembro privado mat de la matriz votos en su posicin
[ f, c] , y fija el dato digitado por el usuario, obtenido a travs de la ejecucin de la
sentencia Fl uj o.leerEntero( ).
x El cuerpo del mtodo resultadoComicios( ) se encuentra numerado para facilitar
las siguientes explicaciones:
La instruccin 3 asigna 0 (cero) a la posicin c del vector vxc; la instruccin
5, que consume dos lneas de seudo cdigo, asigna al vector vxc en la
posicin c, el contenido de su propia posicin ms el contenido de la matriz
votos en la posicin [ f, c] ; la instruccin 8 asigna a la variable totalV la
suma de los votos obtenidos por todos los candidatos.
Las instrucciones 10 a 13 asignan a las variables pa, pb, pc y pd
los porcentajes de votacin obtenidos por los candidatos A, B, C y D,
respectivamente; las instrucciones 14 a 17 imprimen la cantidad de votos
por candidato y su respectivo porcentaje, mientras que las instrucciones 18
a 25 contienen una serie de sentencias si anidadas, que permiten conocer
quin fue el candidato ganador de las elecciones o si no hubo ganador.
196
Ar regl os
4.4. EJERCICIOS PROPUESTOS
1. En el problema 16 se present la bsqueda binaria recursiva sobre un vector
ordenado. Sobrecargar el mtodo de la bsqueda binaria de tal manera que se
elimine la recursividad (bsqueda binaria no recursiva) y desarrollar el seudocdigo
de los dems mtodos de la clase VectorOrdenado, definida as:
Vect orOrdenado
- vec[ ]: Objeto
+ t am: entero
+ n: entero
+ Vect orOrdenado( entero x)
+ llenarVect or(entero x )
+ most rarVect or( )
+ busquedaBinaria(Objeto x, entero b, entero a): entero
+ busquedaBinaria(Objeto x):entero
+ eliminarDat o(Objeto x): logico
+ insert arDat o(Objeto x): logico
El constructor asigna x al tamao del vector, pone n en cero e inicializa el vector
vec con nulos. El mtodo llenarVector(ent er o x ) asigna el valor de x al atributo n y
llena el vector con x elementos. Los mtodos eliminarDato( ) e insertar dato( ) retornan
ci er t o o f al so, dependiendo del xito o fracaso de la operacin. Recordar que todas las
operaciones deben conservar el ordenamiento del vector.
2. Escriba un mtodo que acepte como parmetros dos vectores ordenados y que retorne
un tercer vector ordenado que contenga los elementos de los vectores iniciales.
3. Se tiene una matriz cuadrada de orden n. Formar un vector con los elementos de la
matriz triangular inferior, ordenar el vector creado e imprimirlo.
4. Redefina la clase Vector considerando que el vector puede contener elementos
repetidos. Realice los supuestos semnticos necesarios. Por ejemplo, para eliminar
197
Lgi ca y Pr ogr amacin or i ent ada a obj et os. Un enf oque basado en pr obl emas
un dato del vector debe aclarar si quita la primera ocurrencia, la ltima o todas las
ocurrencias que se presentan.
5. En un arreglo de enteros, presente algoritmos recursivos para calcular:
a) El elemento mximo del arreglo.
b) El elemento mnimo del arreglo.
c) La suma de los elementos del arreglo.
d) El producto de los elementos del arreglo.
e) El promedio de los elementos del arreglo.
6. Llenar dos conjuntos. Hallar los conjuntos unin, interseccin, diferencia y producto
cartesiano entre el primero y el segundo, respectivamente. Recuerde que un conjunto
no admite elementos repetidos.
7. Una compaa distribuye N productos distintos. Para ello almacena en un arreglo
toda la informacin relacionada con su mercanca: clave, descripcin, existencia,
mnimo a mantener de existencia y precio unitario.
Escriba mtodos que permitan suplir los siguientes requerimientos:
a). Venta de un producto: se deben actualizar los campos que correspondan, y
comprobar que la nueva existencia no est por debajo del mnimo (Datos:
clave, cantidad vendida).
b). Reabastecimiento de un producto: se deben actualizar los datos que
correspondan (Datos: clave, cantidad comprada).
c). Actualizar el precio de un producto aclarando si el precio aumenta o disminuye
(Datos: clave, porcentaje).
d). Informar sobre un producto: se deben proporcionar todos los datos relacionados
con un producto (Dato. Clave).
e). Listado de productos ordenado por precio unitario. El listado incluye clave y
precio.
8. El dueo de una cadena de tiendas de artculos deportivos desea controlar sus
ventas por medio de una computadora. Los datos de entrada son :
198
Ar regl os
x El nmero de la tienda (1 a 10)
x Un numero que indica el deporte relacionado con el artculo (1 a 5)
x Costo del artculo.
Al final del da, visualizar el siguiente informe:
x Las ventas totales en el da para cada tienda
x Las ventas totales de artculos relacionados con cada uno de los deportes.
x Las ventas totales de todas las tiendas.
9. El departamento de polica de una ciudad ha acumulado informacin referente a las
infracciones de los lmites de velocidad durante un determinado periodo de tiempo.
El departamento ha dividido la ciudad en cuatro cuadrantes y desea realizar una
estadstica de las infracciones a los lmites de velocidad en cada uno de ellos. Para
cada infraccin se ha preparado una tarjeta que contiene la siguiente informacin:
x Nmero de registro del vehculo.
x Cuadrante en el que se produjo la infraccin.
x Lmite de velocidad en milla por hora (mph).
x Velocidad registrada.
a) Elabore mtodos para obtener dos informes; el primero debe contener una lista con
las multas de velocidad recolectadas, donde la multa se calcula como la suma del
costo de la corte ($20,000) mas $ 1,250 por cada mph que exceda la velocidad
lmite. Prepare una tabla con los siguientes resultados:
INFRACCIONES A LOS LMITES DE VELOCIDAD
Registro del Vehculo-Velocidad Registrada (MPH)-Velocidad Lmite-Multa
b) El segundo informe debe proporcionar un anlisis de las infracciones por cuadrante.
Para cada uno de los 4 mencionados, debe darse el nmero de infracciones y la
multa promedio.
199
Lgi ca y Pr ogr amacin or i ent ada a obj et os. Un enf oque basado en pr obl emas
10. Crear una matriz de orden m * n. Imprimir los elementos ubicados en:
a) La matriz triangular inferior
b) La matriz triangular superior
c) Las diagonales principal y secundaria (letra X)
d) El primer y cuarto cuadrante.
e) El segundo y tercer cuadrante.
f) El reloj de arena
g) El ajedrez (recuerde que no necesariamente es 8 * 8 sino m * n)
h) La mariposa
i) La Letra Z
j) Las montaas
11. Multiplicar dos matrices A(m, n) y B(n, p), ambas de contenido entero. Validar que
el nmero de columnas A sea igual a la cantidad de filas de b, para garantizar el
producto.
12. Leer un nmero en arbigo y mostrarlo en letras.
Ejemplo: 1795 se lee como MIL SETECIENTOS NOVENTA Y CINCO
El programa debe manejar nmeros en un rango de 0 a 99999999
13. Se tienen dos matrices del mismo tipo, A (m, n) y B (f, c). Crear un vector C (m * n
+ f * c), que contenga los elementos de las matrices A y B recorridas por filas.
1 2
3 4
1 2
3 4
200
Ar regl os
4.5 REFERENCIAS
[ Aho1998] : Aho-Hopcroft-Ullman. Estructuras de Datos y Algoritmos. Addison-Wesley
Iberoamericana, Wilmington, Delaware, E.U.A., 1998.
[ Br assar d1997] : Brassard-Bratley. Fundamentos de Algoritmia. Prentice Hall, Madrid,
1997.
[ Cai r 1993] : Cair-Guardati. Estructuras de Datos. McGraw-Hill, Mxico, 1993.
[ Fl r ez2005] : Flrez Rueda, Roberto. Algoritmos, estructuras de datos y programacin
orientada a objetos. Ecoe Ediciones, Bogot, 2005.
[ Vsquez2007] : Vzquez, Juan Carlos. Ese inolvidable cafecito. La Corua, Espaa,
http://www.servicioskoinonia.org/cuentoscortos/articulo.php?num=031. Consultado
en noviembre de 2007.
[ Wei ss1995] : Weiss, Mark Allen. Estructuras de Datos y Algoritmos. Addison-Wesley
Iberoamericana, Wilmington, Delaware, E.U.A., 1995.
5.1. Ti pos de r el aci n ent r e cl ases
Asociacin
Dependencia
Generalizacin / Especializacin
Agregacin y composicin
Realizacin
Problema 18: Suma de dos nmeros
5.2. Paquet es
Problema 19: Venta de productos
5.3. Ej er ci ci os pr opuest os
5.4 Ref er enci as
C A P T U L O 5
Rel aci ones ent r e cl ases
203
SUEO DE LA MARIPOSA
Chuang Tzu
Chuang Tzu so que era una mariposa. Al despertar ignoraba si era Tzu que haba soado que era
una mariposa o si era una mariposa y estaba soando que era Tzu.
204
Relaci ones ent re clases
Diagrama de clases:
Diagrama de objetos:
205
Lgi ca y Pr ogr amacin or i ent ada a obj et os. Un enf oque basado en pr obl emas
O
bj et i vos de apr endi zaj e
x Establecer relaciones lgicas entre las clases identificadas para la solucin de un
problema.
x Identificar los diferentes tipos de relacin en un diagrama de clases.
x Crear objetos en un proyecto y reconocer la interrelacin entre ellos.
x Crear clases a partir de otras ya existentes.
x Empaquetar clases con una funcionalidad comn para efectos de reutilizacin.
5.1. TIPOS DE RELACIN ENTRE CLASES
En el Unified Modeling Language (UML) los elementos se unen entre s a la vez que
establecen una forma de interaccin entre dichos elementos, incluyendo casos de uso,
clases, estados, objetos, paquetes y otras representaciones propias del lenguaje de
modelado. En este libro nos ocuparemos de las relaciones entre clases.
En un diagrama de clases, las relaciones que unen las clases entre s tienen dos
funciones: vincularlas entre s y establecer las formas de su interaccin. Se clasifican
en cinco tipos:
x Asociacin: conexin entre clases.
x Dependencia: relacin de uso.
x Generalizacin/Especializacin: relacin de herencia o superior-subordinado.
x Agregacin y composicin: relaciones todo-parte.
x Realizacin: relacin semntica entre clases.
206
Relaci ones ent re clases
Vemoslas en detalle:
ASOCI ACI N
Una asociacin es una relacin estructural que describe un conjunto de enlaces,
los cuales son conexiones entre objetos. Se representa con una lnea continua que
puede incluir puntas de flecha que indican la navegabilidad (direccin o sentido) de
la asociacin. Si no existen flechas, la asociacin se considera bidireccional. Algunos
casos son:
Asociacin entre Vehculo y Empresa
Asociacin recursiva
Empresa
Equivale a:
f abricant e
Vehculo
- placa: cadena
- fabricant e: Empresa
Vehculo
- placa: cadena
Equivale a:
jefe
Empleado
- carnet : cadena
- jefe: Empleado
Empleado
- carnet : cadena
207
Lgi ca y Pr ogr amacin or i ent ada a obj et os. Un enf oque basado en pr obl emas
La multiplicidad o cardinalidad de una asociacin hace referencia a la cantidad de
objetos inmiscuidos en la asociacin. La multiplicidad puede ser de uno a uno (1-1),
uno a muchos (1...*), cero o uno (0, 1) u otra especfica que depende de la naturaleza
de la asociacin, como 2..24, 1..*. Un resumen de la multiplicidad puede observarse
en la siguiente tabla.
Tabl a 5.1. Multiplicidades de una asociacin
Mul t i pl i ci dad Si gni f i cado
1 Uno y slo uno
0,1 Cero o uno
0.. * Cero o muchos
* Cero o muchos
1..* Uno o muchos
n..m Desde n hasta m, donde n y m son nmeros enteros
m Exactamente m, donde m es un nmero entero
Observaciones a la multiplicidad:
- Para indicar la multiplicidad de una asociacin, se deben especificar las
multiplicidades mnima y mxima.
- Cada asociacin tiene dos multiplicidades, una a cada extremo de la lnea. Si
se omite informacin sobre la multiplicidad, se asume igual a 1 (uno).
- Cuando la multiplicidad mnima es cero, la asociacin es opcional.
- Multiplicidades especficas de m..n podran ser 1..10, 2..24 o 5..20.
Ejemplos:
Un cliente puede ser titular de varias cuentas, pero una cuenta de ellas tiene el
titular nico
208
Relaci ones ent re clases
Un estudiante puede matricular desde dos a seis asignaturas:
Una bicicleta tiene exactamente 2 llantas y un camin de 6 a 24 llantas.
t ular
* 1
Client e
- cdula: cadena
- nombre: cadena
- direccin: cadena
Client e
- nombre: cadena
- saldo: real
mat rcula[ ]
2 ..6
Est udiant e
- carnet : cadena
- nombre: cadena
- direccin: cadena
Asignat ura
- cdigo: cadena
- crdit os: ent ero
6..24
2
Biciclet a
- numeroPiones: ent ero
- numeroPlat os: ent ero
- t amaoCuadro: real
Llant a
- anchura: real
- dimet ro: real
- color: cadena
Camin
- placa: cadena
- modelo: ent ero
- pot encia: real
209
Lgi ca y Pr ogr amacin or i ent ada a obj et os. Un enf oque basado en pr obl emas
DEPENDENCI A
La dependencia es una relacin semntica entre dos elementos, en la cual un
cambio a un elemento (el elemento independiente) puede afectar la semntica del
otro elemento (el dependiente). Esta relacin se representa con un segmento de flecha
punteado, donde el segmento inicia en la clase dependiente y finaliza con la flecha que
seala al elemento independiente. Por ejemplo, en el siguiente ejemplo donde la clase
Proyecto depende de la clase Fl uj o.
GENERALI ZACI N / ESPECI ALI ZACI N
En una relacin de generalizacin/ especializacin los objetos del elemento
especializado (el hijo) pueden sustituir a los objetos del elemento general (el padre); de
esta forma el hijo comparte la estructura y el comportamiento del padre. Una relacin
de especializacin / generalizacin se conoce tambin como herencia y ser tratada en
el captulo 6.
La relacin de herencia se representa con una flecha de punta triangular hueca que
seala hacia la clase padre, denominada tambin clase base o superclase. La clase
especializada recibe el nombre de clase derivada o subclase. Por ejemplo, la clase
Rinoceronte es una subclase de la clase Animal, como se observa en la figura 5.1.
<<usar>>
Flujo
Proyect o
+ principal ( )
Animal
Rinoceront e
Fi gur a 5.1. Rinoceronte es subclase de Animal
210
Relaci ones ent re clases
Una clase abstracta no puede ser instanciada pues posee mtodos abstractos
(an no han sido definidos, es decir, sin implementacin). La nica forma de utilizarla
es a travs de la definicin de subclases, que implementan los mtodos abstractos
declarados. Una clase es final si no se pueden definir ms subclases a partir de ella. Por
ejemplo, la clase Persona es una clase abstracta, y las clases Eprimaria, ESecundaria
y EUniversitario son finales, segn lo muestra la figura 5.2, donde se observa el uso de
estereotipos en un diagrama de clases.
Un estereotipo es una estructura flexible que se puede utilizar de varios modos.
Asi, un estereotipo o clis es una extensin del vocabulario de UML que permite crear
nuevos bloques de construccin desde otros ya distintos pero especficos a un problema
concreto [ Booch1999] ; se representa como un nombre entre dos pares de parntesis
angulares. Se puede utilizar el estereotipo sobre el nombre de una clase para indicar
algo respecto al papel de la clase [ Schmuller2000] .
Persona
<<abstracta>>
Estudiante
EPrimaria
<<na>>
ESecundaria
<<na>>
EUniversitario
<<na>>
Fi gur a 5.2. estereotipos <<abstracta>> y <<final>>
En el captulo 6, los estereotipos y las clases finales se volvern a tratar con el
estudio de los mecanismos de herencia.
211
Lgi ca y Pr ogr amacin or i ent ada a obj et os. Un enf oque basado en pr obl emas
AGREGACI N Y COMPOSI CI N
Cuando se requiere estructurar objetos que son instancias de clases ya definidas
por el analista, se presentan dos posibilidades: composicin y agregacin.
La composicin es un tipo de relacin esttica, en donde el tiempo de vida del
objeto incluido est condicionado por el tiempo de vida del que lo incluye. En este tipo
de relacin el objeto base se construye a partir del objeto incluido, presentndose as
una relacin todo/parte.
La composicin se representa con un rombo relleno que seala hacia el todo,
como se ilustra en la figura 5.3:
Nota: en la figura 5.3., (*) significa cero o muchos
La agregacin es un tipo de relacin dinmica, donde el tiempo de vida del objeto
incluido es independiente del que lo incluye. En este tipo de relacin, el objeto base se
ayuda del incluido para su funcionamiento. La agregacin se representa con un rombo
sin relleno que seala hacia el todo.
Fi gur a 5.3. Composicin
Fi gur a 5.4. Agregacin
Edicio
Ladrillo
*
Banco
Cuent acorrenst a
*
212
Relaci ones ent re clases
Se pueden presentar relaciones de composicin y agregacin de manera simultnea,
como en el siguiente caso:
Fi gur a 5.5. Combinacin de composicin y agregacin
REALI ZACI N
La realizacin es un vnculo semntico entre clases, en donde una clase especifica
tiene un contrato que otra clase garantiza que cumplir (clasificacin). Se pueden encontrar
relaciones de realizacin entre interfaces y las clases o componentes que las realizan.
Semnticamente, la realizacin es una mezcla entre dependencia y generalizacin.
La realizacin se representa como la generalizacin, con la punta de la flecha sealando
hacia la interfaz. Por ejemplo, la clase Caleidoscopio realiza interfaz EspejosCruzados.
A continuacin, en el problema 18, pueden observarse dos relaciones de
dependencia, debido a que el funcionamiento del mtodo principal( ) depende de las
clases Fl uj o y Suma2.
Caleidoscopio
eea
speosCados
iea
eea
* *
Banco
Cuent a Client e
213
Lgi ca y Pr ogr amacin or i ent ada a obj et os. Un enf oque basado en pr obl emas
PROBLEMA 18: SUMA DE DOS NMEROS
Sumar dos nmeros enteros. Visualizar el resultado.
Solucin:
Aunque este problema es de extrema sencillez, puede resolverse dentro del mtodo
principal ( ) con el uso de dos variables locales, a saber: una operacin de suma y la
clase Fl uj o. Aqu se plantea otra alternativa que busca aplicar una relacin de uso
(dependencia) entre dos clases, veamos:
a) Tabl a de r equer i mi ent os
La tabla de requerimientos es idntica a la ya presentada en el Captulo 1 de este libro.
I dent i f i caci n del
r equer i mi ent o
Descr i pci n Ent r adas
Resul t ados
( Sal i das)
R1 Capturar
dos nmeros
enteros
Dos nmeros
ingresados por el
usuario
Dos nmeros enteros
almacenados en memoria
(variables n1 y n2)
R2 Operar dos
nmeros
enteros
Las variables n1
y n2
La suma de los nmeros n1
y n2
b) Di agr ama de cl ases
Pr oyect o
Fluj o
Suma2
- a: entero
- b: entero
+ Suma2( )
+ asignar A (entero x)
+ asignar B (entero x)
+ obt ener A ( ): entero
+ obt ener B ( ): entero
+ sumar ( ): entero
+ pr incipal( )
214
Relaci ones ent re clases
La clase Suma2 consta de dos atributos (los nmeros a sumar), un constructor,
cuatro mtodos modificadores y um mtodo analizador.
c) Responsabi l i dades de l as cl ases
Contratos de la clase Suma2
Nombr e del
mt odo
Requer i _
mi ent os
asoci ados
Pr econdi ci n Post condi ci n Model o ver bal
Suma2( ) R1
No existen los
nmeros a
sumar
Los nmeros a
sumar existen
en un objeto de
tipo Sumar2
No aplica
asignarA
(ent er o x)
R1 a == 0
El atributo a ha
cambiado su
estado
Asignar el parmetro
x al atributo a
(modificar el estado
del atributo)
asignarB
(ent er o x)
R1 b == 0
El atributo b ha
cambiado su
estado
Asignar el parmetro x
al atributo b
obtenerA( ):
ent er o
R2
Se desconoce el
valor del atributo
a (encapsulado)
Se conoce
el valor del
atributo a
Recuperar u obtener
el estado actual del
atributo a
obtenerB( ):
ent er o
R2
Se desconoce el
valor del atributo
b (encapsulado)
Se conoce
el valor del
atributo b
Recuperar u obtener
el estado actual del
atributo b
sumar( ):
ent er o
R2
No se han
sumado los
nmeros
Se conoce la
suma de los
atributos a y b
1. Sumar los valores
actuales de los
atributos a y b.
2. Retornar la suma
215
Lgi ca y Pr ogr amacin or i ent ada a obj et os. Un enf oque basado en pr obl emas
Contrato de la clase Proyecto
Nombr e del
mt odo
Requer i _
mi ent os
asoci ados
Pr econdi ci n Post condi ci n Model o ver bal
principal ( )
R1 y R2
Se
desconocen
los nmeros a
sumar
Se ha
calculado y
visualizado
la suma de
dos nmeros
enteros
1. Instanciar un objeto de
la clase Suma2
2. Asignar valores a los
atributos a y b del
objeto creado
3. Enviar el mensaje
sumar( ) al objeto
creado para calcular
la suma
4. Visualizar el resultado
de la suma
d) Seudo cdi go:
clase Suma2
rado:
entero a
entero b
pblico:
//---------- ------------
asi gnar A (entero x)
a = x
ntodo
asi gnar B (entero x)
b = x
ntodo
//---------- ----------------
entero obt ener A ( )
retornar a
ntodo
entero obt ener B ( )
retornar b
ntodo
//-------------- const r uct ores ----------------
Suma2 ( )
ntodo
216
Relaci ones ent re clases
Suma2 (entero a1, entero b1)
asi gnar A (a1)
asi gnar B (b1)
ntodo
//------------------- f unci n -------------------
entero sumar ( )
retornar a + b
ntodo
nclae
En la clase Proyecto se crea un objeto de la clase Suma2, tal como se especifica en
el contrato de dicha clase:
clase Proecto
etco rncal ( )
Suma2 num = neo Suma2 ( )
num.asi gnar A(7)
num.asi gnar B(8)
Flujo.imprimir (num.obt enerA ( ) + + + num.obt enerB ( ) +
= + num.sumar ( ))
ntodo
nclae
Observaciones:
x La definicin dada para la clase Suma2 (mtodos asignar, obtener, constructores
y funcin), le permite al analista-programador una serie de posibilidades para
plantear la solucin del problema. Ya se ha presentado una primera alternativa:
usar el constructor por defecto para crear el objeto num, asignarle dos valores a
sus miembros dato (7 y 8, valores arbitrarios escogidos a criterio del analista) y
mostrar el resultado con tres mensajes al objeto num: obtenerA( ), obtenerB( ) y
sumar( ).
217
Lgi ca y Pr ogr amacin or i ent ada a obj et os. Un enf oque basado en pr obl emas
num.obtenerA ( )
Objeto Mensaje
Veamos otras alternativas para sumar dos nmeros enteros, redefiniendo el mtodo
pr i nci pal ( ), nico mtodo que no admite sobrecarga.
Alternativa 1: uso del constructor con argumentos.
est t i co pr i nci pal ( )
Suma2 num = nuevo Suma2(15, 24)
Fl uj o.imprimir (num.obtenerA( ) + + + num.obtenerB( ) + = +
num.sumar( ))
f i n_ mt odo
Alternativa 2: aqu se prescinde del mtodo sumar( ), es decir, se imprime el resultado
de una expresin aritmtica.
est t i co pr i nci pal ( )
Suma2 num = nuevo Suma2(73, -55)
Fl uj o.imprimir (num.obtenerA( ) + +, num.obtenerB( ) + = +
num.obtenerA( ) + num.obtenerA( ) )
f i n_ mt odo
Alternativa 3: con entrada de datos especificada por el usuario.
est t i co pr i nci pal ( )
Suma2 num = nuevo Suma2( )
Fl uj o.imprimir(Ingrese dos nmeros enteros:)
num.asignarA(Fl uj o.leerEntero( ))
num.asignarB (Fl uj o.leerEntero( ))
Fl uj o.imprimir (num.obtenerA( ) + + + num.obtenerB ( ) + = +
num.sumar( ))
f i n_ mt odo
218
Relaci ones ent re clases
x El desempeo de los mtodos asignarA ( ), asignarB ( ) y sumar ( ) se puede
mejorar con el uso de la clase de uso comn Ent er o o con el manejo de
excepciones.
En el primer caso, se utilizan las constantes figurativas MAX_VALOR y MIN_VALOR
que representan el mximo y mnimo valor del tipo de dato ent er o.
asignarA (ent er o a1)
si (a1 > Ent er o.MAX_VALOR || a1 < Ent er o.MIN_VALOR)
a = 0
si no
a = a1
f i n_ si
f i n_ mt odo
En el segundo caso, se puede aplicar el manejo de excepciones para controlar la
instruccin de asignacin:
asignarA (ent er o a1)
pr obar
a = a1
f i n_ pr obar
capt ur ar (Excepci n e)
Fl uj o.imprimir (Error+ e.mensaj e ( ))
a = 0
f i n_ capt ur ar
f i n_ mt odo
De igual forma, se puede reescribir el mtodo asignarB( ).
219
Lgi ca y Pr ogr amacin or i ent ada a obj et os. Un enf oque basado en pr obl emas
El mtodo sumar( ) puede tomar el siguiente cuerpo:
ent er o sumar ( )
si ((a + b) > Entero.MAX_VALOR)
Fl uj o.imprimir (La suma ha sobrepasado al mximo
entero)
r et or nar 0
si no
r et or nar a + b
f i n_ mt odo
5.2. PAQUETES
Los paquetes ofrecen un mecanismo general para la organizacin de las clases que
tienen responsabilidades relacionadas, y permiten agrupar modelos o subsistemas con
funcionalidades comunes. En general un paquete se representa como:
Un paquete puede contener otros paquetes sin lmite de anidamiento, pero cada
elemento pertenece a (o est definido en) un slo paquete. Una clase de un paquete
puede aparecer en otro paquete por medio de la importacin a travs de una relacin
de dependencia entre paquetes como en la siguiente figura:
nombrePaquet e
nombrePaquet e
Fi gur a 5.6. Representacin de un paquete
220
Relaci ones ent re clases
paquet e
clase1
clase2
Prueba
Fi gur a 5.9. Dependencia entre una clase externa y otras del mismo paquete
Adems, una clase puede establecer relaciones de dependencia con otras clases
del mismo paquete. (Ver Figura 5.8)
En la figura 5.9 las clases clase1 y clase2 forman parte del espacio de nombres
paquete. La clase Prueba no forma parte del espacio de nombres e incluye al mtodo
principal que instancia por lo menos un objeto de las otras clases del paquete.
Fi gur a 5.7. Dependencia entre paquetes
Fi gur a 5.8. Relacin de dependencia entre clases del mismo paquete
<<acceder >>
Client es Banco
Alcalde
Gobernador
nacin
221
Lgi ca y Pr ogr amacin or i ent ada a obj et os. Un enf oque basado en pr obl emas
Fi gur a 5.10. Composicin, dependencia, paquete y restriccin
{y/ o}
1..*
paquet e
clase_A clase_B
Proyect o
Otro modelo posible consiste en un conjunto de clases con asociaciones de
composicin y dependencia, como ilustra el diagrama de clases de la figura 5.10,
donde Clase_ B est formada por uno o ms objetos Clase_ A y la clase Proyecto
depende de la clase Clase_ B y/o de la clase Clase_ A.
Como se ha expuesto, la clase Proyecto contiene el mtodo principal ( ). La
composicin establece una relacin todo-parte entre clases; en la figura 5.10, Clase_ B
(el todo) est formada por una o ms partes de objetos Clase_ A (la parte).
A continuacin, en el problema 19 se presenta un diagrama de clases con relaciones
de dependencia y asociacin, donde las clases Producto y Venta se agrupan en el
paquete denominado almacn.
PROBLEMA 19: VENTA DE PRODUCTOS
Al producirse una venta en un determinado almacn, se toman los detalles del
producto (su cdigo y precio) y la cantidad vendida. Se pide: simular el proceso de dos
ventas, imprimir el valor de cada una de ellas y el monto total por las dos transacciones.
Nota: suponga que cada venta involucra un solo producto
222
Relaci ones ent re clases
Solucin:
a) Tabl a de r equer i mi ent os
I dent i f i caci n del
r equer i mi ent o
Descr i pci n Ent r adas
Resul t ados
( Sal i das)
R1
Conocer los
datos de las
dos ventas:
x Cdigo del
producto
x Precio del
producto
x Ca n t i d a d
vendida
Los cdigos
y precios de
dos productos
aportados por el
usuario
Los cdigos y precios de los
dos productos se encuentran
almacenados en dos ventas.
(objetos v1 y v2)
R2 Hallar el valor
de cada venta.
Los objetos (o
ventas) v1 y v2.
El valor de cada venta ( )
R3 Hallar el valor
total de las
dos ventas
Las ventas v1
y v2
El valor total por las dos
ventas
b) Di agr ama de cl ase
Proyect o
almacn
prod
Product o
-cdigo: cadena
-precio: real
+ asignarCd (cadena)
+ asignarPrecio (real)
+ obt enerCd ( ): cadena
+ obt enerPrecio ( ): real
+ Product o (cadena, real)
Vent a
- cant : ent ero
+ asignarProd (Product o)
+ asignarCant (ent ero)
+ obt enerProd ( ): Product o
+ obt enerCant ( ): ent ero
+ Vent a (Product o, ent ero)
+principal ( )
p1,p2
v1,v2
223
Lgi ca y Pr ogr amacin or i ent ada a obj et os. Un enf oque basado en pr obl emas
c) Seudo cdi go
aete
clase Product o
rado:
cadena cdi go
real preci o
pblico:
asi gnar Cd (cadena c)
cdi go = c
ntodo
//-----------------------------------
asi gnar Preci o (real p)
preci o = p
ntodo
//-----------------------------------
cadena obt ener Cd ( )
retornar cdi go
ntodo
//-----------------------------------
real obt ener Preci o ( )
retornar preci o
ntodo
//-----------------------------------
Product o (cadena cod, real cost o)
asi gnar Cd (cod)
asi gnar Preci o (cost o)
ntodo
nclae
//-----------------------------------------------------------
clase Vent a
rado:
Product o prod
entero cant
pblico:
asi gnar Product o(Product o p)
prod = p
ntodo
//-----------------------------------
224
Relaci ones ent re clases
Asi gnar Cant (entero c)
cant = c
ntodo
//-----------------------------------
Product o obt ener Product o( )
retornar prod
ntodo
//-----------------------------------
entero obt ener Cant ( )
retornar cant
ntodo
//-----------------------------------
Vent a(Product o p, entero c )
asi gnar Product o (p)
asi gnar Cant (c)
ntodo
nclae
naete
En otro archivo de cdigo fuente se reutilizan las clases del paquete almacn:
ortar
clase Proyect o
etco rncal( )
cadena codP1, codP2
real precP1, precP2
entero cant VP1, cant VP2
/ / Pr i mera vent a
codP1 = Flujo.l eer Cadena ( )
precP1 = Flujo.l eer Real ( )
cant VP1 = Flujo.l eer Ent ero ( )
Product o p1 = neo Product o (codP1, precP1 )
Vent a v1 = neo Vent a (p1, cant VP1 )
/ / Segunda vent a
codP2 = Flujo.l eer Cadena ( )
precP2 = Flujo.l eer Real ( )
cant VP2 = Flujo.l eer Ent ero ( )
Product o p2 = neo Product o (codP2, precP2 )
Vent a v2 = neo Vent a (p2, cant VP2 )
225
Lgi ca y Pr ogr amacin or i ent ada a obj et os. Un enf oque basado en pr obl emas
real t ot V1, t ot V2, t ot al
t ot V1 = p1.obt ener Preci o ( ) * v1.obt ener Cant ( )
t ot V2 = p2.obt ener Preci o ( ) * v2.obt ener Cant ( )
t ot al = t ot V1 + t ot V2
Flujo.i mpr i mi r (t ot V1, t ot V2, t ot al )
ntodo
nclae
Observaciones:
x Los constructores de las clases se han omitido porque estn disponibles por
omisin.
x La clase Fl uj o pertenece al paquete sistema (espacio de nombres importado por
defecto). La lectura de cualquier tipo de dato incluye el manejo de excepciones
(errores en el proceso de entrada de datos), como se observa en el siguiente
seudo cdigo:
Fl uj o :: leerCadena ( )
Cadena c
pr obar
c = leer ( )
f i n_ pr obar
capt ur ar (Excepci n)
c =
f i n_ capt ur ar
r et or nar c
f i n_ mt odo
El carcter :: es el operador de resolucin de mbito propio de C++y no forma
parte del seudo lenguaje Sismoo; se usa aqu para indicar que el mtodo leerCadena
( ) pertenece a la clase Fl uj o.
226
Relaci ones ent re clases
El mtodo leer( ) posibilita la entrada datos desde el dispositivo estndar (teclado).
Las palabras reservadas pr obar y capt ur ar equivalen a las sentencias t r y y cat ch
propias de algunos lenguajes de programacin orientados a objetos.
De forma anloga se definen los dems mtodos:
Fl uj o :: leerCarcter ( )
Car ct er c
pr obar
c = Car ct er. convertirACarcter (leer ( ))
f i n_ pr obar
capt ur ar (Excepci n)
c = Car ct er . MIN_VALOR
f i n_ capt ur ar
r et or nar c
f i n_ mt odo
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Fl uj o:: leerReal ( )
Real r
pr obar
r = Real .convertirANum (leer ( ))
f i n_ pr obar
capt ur ar (Excepci n)
r = Real . MIN_VALOR
f i n_ capt ur ar
r et or nar r
f i n_ mt odo
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Fl uj o :: leerEntero( )
Ent er o e
pr obar
e = Ent er o.convertirANum (leer ( ))
f i n_ pr obar
227
Lgi ca y Pr ogr amacin or i ent ada a obj et os. Un enf oque basado en pr obl emas
capt ur ar (Excepci n)
e = ent er o. MIN_VALOR
f i n_ capt ur ar
r et or nar e
f i n_ mt odo
En los mtodos para lectura de datos estndar se ha tratado con objetos de las
clases Cadena, Car ct er , Real y Ent er o, que encapsulan a sus respectivos tipos de
datos.
El mtodo leer( ) captura una cadena de la entrada estndar teclado-, es decir,
almacena un flujo de bits ingresado desde el dispositivo de entrada de consola hacia la
memoria interna de la computadora.
5.3. EJERCICIOS PROPUESTOS
1. Escriba una aplicacin que calcule el total de entradas vendidas para un concierto.
Hay tres tipos de asiento: A, B y C. El programa acepta el nmero de entradas
vendidas. El total de ventas se calcula de la siguiente forma:
ventasTotales = numeroAsientos_A * precioAsiento_A +
numeroAsientos_B * precioAsiento_B +
numeroAsientos_C * precioAsiento_C
Definir y usar la clase TipoAsiento: una instancia de la clase TipoAsiento conoce el
precio para un tipo de asiento dado A, B o C.
2. Resolver un sistema de ecuaciones con tres incgnitas.
3. Un negocio de deportes ofrece un 10% de descuento en la compra de balones
de ftbol y un 5% por paquete de tres pelotas de tenis. Se requiere escribir una
228
Relaci ones ent re clases
solucin objetual que le permita a un empleado del negocio ingresar los precios
originales de los balones y los paquetes de pelotas. La solucin deber usar esta
entrada de datos para calcular el precio rebajado; y la salida deber mostrar tanto
el precio original como el precio con descuento.
4. Suponga que trabaja en un videoclub. El encargado quiere que le escriba un programa
que calcule el recargo que tienen que pagar los clientes cuando se retrasan en la
devolucin de pelculas de acuerdo con las siguientes normas:
x El alquiler de los videos cuesta $1000 al da, pagados por el usuario en el
almacn. El periodo de alquiler es de un da y el recargo por retraso es de $100
al da, valor que debe abonarse al ser devuelta la pelcula.
x Cuando el cliente entregue la pelcula, un empleado introducir los siguientes
datos: nombre del cliente, ttulo de la pelcula y nmero de das de retraso
(que pueden ser cero). Se pide, entonces, que programa muestre la siguiente
informacin: el nombre del cliente, el ttulo de la pelcula y el recargo por retraso.
5. Crear una clase para los vehculos de carga con los siguientes atributos,
constructores y mtodos:
x Atributos privados carga y cargaMxima.
x Constructor pblico que aporta un valor inicial al atributo cargaMaxima.
x Mtodo pblico: obtenerCarga( ) que retorna el valor del atributo carga.
x Mtodo pblico: obtenerCargaMaxima( ) que retorna el valor del atributo
cargaMaxima.
x Mtodo publico agregarCaja( ), que toma el peso de una caja en kilos, y verifica
que al agregar la caja al vehculo de este no sobrepase la carga mxima. Si una
caja sobrepasa la carga mxima, es rechazada y se retorna el valor f al so; en
caso contrario, se agrega el peso de la caja a la carga del vehculo, y se retorna
el valor ci er t o. Todos los datos estn expresados en kilos.
Despus de definir la clase, hacer las siguientes tareas: crear una cantidad
desconocida de vehculos de carga, y visualizar el listado de vehculos
ingresados, la carga promedio, la mnima y la mxima.
6. Plantear soluciones alternativas al problema 19. Sea creativo, usted es un analista
potenciado y en potencia.
229
Lgi ca y Pr ogr amacin or i ent ada a obj et os. Un enf oque basado en pr obl emas
5.4 REFERENCIAS
[ Booch1999] : Booch-Jacobson-Rumbaugh. El lenguaje Unificado de Modelado.
Addison-Wesley Iberoamericana, Madrid, 1999.
[ Schmul l er 2000] : Schmuller, Joseph. UML en 24 horas. Pearson Educacin, Mxico,
2000.
[ Tzu2006] : Tzu, Chuang. Sueo de la mariposa. http://www.ciudadseva.com/textos/
cuentos/mini/suenyo.htm. Consultado en junio de 2006.
6.1. Her enci a
Herencia simple
Herencia mltiple: interfaces
Problema 20: Empleados por hora y a destajo
6.2. Pol i mor f i smo
6.3. Ej er ci ci os pr opuest os
6.4. Ref er enci as
C A P T U L O 6
Mecani smos de her enci a
233
FLORES DE LAS TINIEBLAS
Villers de LIsle-Adam
A Lon Dierx
Buenas gentes que pasis, rogad por los difuntos!
(Inscripcin al borde del camino)
Oh, los bellos atardece-
res! Ante los brillantes
cafs de los bulevares, en
las terrazas de las horcha-
teras de moda, qu de
mujeres con trajes multi-
colores, qu de elegantes
callejeras dndose tono!
Y he aqu las pequeas
vendedoras de flores,
quienes circulan con sus
frgiles canastillas.
Las bellas desocupadas
aceptan esas flores pe-
recederas, sobrecogidas,
misteriosas
-Misteriosas?
-S, si las hay!
Existe -sabedlo, sonrien-
tes lectoras-, existe en el
mismo Pars cierta agencia
que se entiende con varios
conductores en los entierros de lujo, incluso con enterradores, para despojar a los difuntos de la maana, no
dejando que se marchiten intilmente en las sepulturas todos esos esplndidos ramos de flores, esas coronas,
esas rosas que, por centenares, la piedad filial o conyugal coloca diariamente en los catafalcos.
Estas flores casi siempre quedan olvidadas despus de las tenebrosas ceremonias. No se piensa ms en ello; se
tiene prisa por volver. Se concibe!...
Es entonces cuando nuestros amables enterradores se muestran ms alegres. No olvidan las flores estos seo-
res! No estn en las nubes, son gente prctica. Las quitan a brazadas, en silencio. Arrojarlas apresuradamente
por encima del muro, sobre un carretn propicio, es para ellos cosa de un instante.
Dos o tres de los ms avispados y espabilados transportan la preciosa carga a unos floristas amigos, quienes,
gracias a sus manos de hada, distribuyen de mil maneras, en ramitos de corpio, de mano, en rosas aisladas
inclusive, esos melanclicos despojos.
Llegan luego las pequeas floristas nocturnas, cada una con su cestita. Pronto circulan incesantemente, a las
primeras luces de los reverberos, por los bulevares, por las terrazas brillantes, por los mil y un sitios de placer.
Y jvenes aburridos y deseosos de hacerse bienquistos por las elegantes, hacia las cuales sienten alguna inclina-
cin, compran esas flores a elevados precios y las ofrecen a sus damas.
stas, todas con rostros empolvados, las aceptan con una sonrisa indiferente y las conservan en la mano, o bien
las colocan en sus corpios.
Y los reflejos del gas empalidecen los rostros.
De suerte que estas criaturas-espectros, adornadas as, con flores de la Muerte, llevan, sin saberlo, el emblema
de amor que ellas dieron y el del amor que reciben.
234
Mecanismos de herencia
Diagrama de clases:
235
Lgi ca y Pr ogr amacin or i ent ada a obj et os. Un enf oque basado en pr obl emas
O
bj et i vos de apr endi zaj e
x Identificar jerarquas de clase, y dentro de ellas los conceptos de clase base y clase
derivada.
x Diferenciar entre clases abstracta, convencional y final.
x Implementar mecanismos de herencia simple y herencia mltiple, esta ltima
mediante interfaces.
x Comprender el concepto de asociacin entre clases, roles y cardinalidad (o
multiplicidad).
x Aprender a empaquetar clases para casos especficos, en bsqueda de su
reutilizacin para la solucin de otros problemas.
6.1. HERENCIA
La herencia es una propiedad que permite crear objetos a partir de otros ya
existentes. Con ella fcilmente pueden crearse clases derivadas (clase especfica)
a partir de una clase base (clase general); y deja reutilizar a la clase derivada los
atributos y mtodos de la clase base. La herencia conlleva varias ventajas:
x Permite a los programadores ahorrar lneas de cdigo y tiempo en el desarrollo
de aplicaciones.
x Los objetos pueden ser construidos a partir de otros similares, heredando cdigo
y datos de la clase base.
x Las clases que heredan propiedades de otra clase pueden servir como clase
base de otras, formando as una jerarqua de clases.
La herencia se clasifica en simple y mltiple
236
Mecanismos de herencia
HERENCI A SI MPLE
La herencia simple le permite a un objeto extender las caractersticas de otro objeto
y de ningn otro, es decir, solo puede heredar o tomar atributos de un solo padre o de
una sola clase.
En el UML, la herencia simple se representa con una flecha de punta triangular. En
la figura 6.1., el segmento de lnea de la flecha inicia en la clase subordinada y la punta
seala hacia la clase base.
Fi gur a 6.1. Herencia simple
Fi gur a 6.2. Dos clases derivadas de una misma clase base
ClaseBase
ClaseDerivada
Por ejemplo, en geometra, un retngulo es un cuadriltero, as como los cuadrados,
los paralelogramos y los trapezoides. Por ende, se puede decir que la clase Rectngulo
hereda de la clase Cuadriltero. En este contexto, el Cuadriltero es una clase base y
Rectngulo es una clase derivada. [Deitel2007]
A partir de una clase base -o superclase- se pueden definir varias clases derivadas,
como se observa en la figura 6.2, equivalente en semntica a la figura 6.3.
<<abstracta>>
ClaseBase
<<nal>>
ClaseDerivada_2
Proyecto
+ principal ( )
<<nal>>
ClaseDerivada_1
237
Lgi ca y Pr ogr amacin or i ent ada a obj et os. Un enf oque basado en pr obl emas
La superclase ClaseBase es abstracta (obsrvese el uso del estereotipo
<<abstracta>> propio de UML). No se pueden definir objetos a partir de una
clase abstracta, es decir, una clase abstracta no puede ser instanciada. Las clases
abstractas se usan como patrn para definir clases instanciables o concretas por
medio de mecanismos de herencia.
Por su parte, una clase final (<<final>>) nunca puede ser abstracta. Cuando
una clase es definida como final se establece, por razones de diseo o seguridad, que
no se desea heredar de ella.
A su vez, las subclases ClaseDerivada_1 y ClaseDerivada_2 heredan el estado y
comportamiento (atributos y mtodos) de la superclase ClaseBase.
Fi gur a 6.3. La clase ClaseDerivada realiza la interfaz InterfazX
Proyect o
+ principal ( )
ClaseDerivada_1
ClaseDerivada_2
ClaseBase
238
Mecanismos de herencia
HERENCI A MLTI PLE: I NTERFACES
Con la ayuda de la herencia mltiple un objeto puede extender las caractersticas de
uno o ms objetos, es decir, puede tener varios padres. Respecto a esta herencia, son
varias las discrepancias entre los diseadores de lenguajes de programacin: algunos
de ellos han preferido no admitir la herencia mltiple por las posibles coincidencias en
nombres de mtodos o datos miembros. Por ejemplo C++ y Python admiten herencia
mltiple, mientras que Java, Ada y C# slo permiten herencia simple, pero manejan la
herencia mltiple por medio de interfaces, como se ilustra en la figura 6.4.
Proyecto
+ principal ( )
ClaseDerivada
<<abstracta>>
ClaseBase
<<interfaz>>
InterfazX
Fi gur a 6.4. La clase ClaseDerivada realiza la interfaz InterfazX
La clase ClaseDerivada hereda de ClaseBase, realiza la interfaz InterfazX y es
usada por la clase Proyecto.
Una clase puede realizar (o implementar) varias interfaces, como en el siguiente
diagrama de clases de la figura 6.5, donde se presentn los estereotipos abstracto,
final e interfaz.
239
Lgi ca y Pr ogr amacin or i ent ada a obj et os. Un enf oque basado en pr obl emas
Una interfaz permite al creador establecer la forma de una clase: nombres de
mtodos, listas de parmetros y tipos de retorno, pero no cuerpos de mtodos. En
algunos lenguajes de programacin una interfaz puede contener campos (caso Java);
en otros una interfaz no admite el uso de campos (caso C#).
Una interfaz proporciona slo la forma, pero no la implementacin, y se puede
considerar como una clase que contiene un conjunto de operaciones que otras clases
deben implementar o realizar.
Fi gur a 6.5. La clase ClaseDerivada_ 1 realiza dos interfaces
ClaseDerivada_1
Proyecto
+ principal ( )
<<abstracta>>
ClaseBase
<<nal>>
ClaseDerivada_1_1
<<interfaz>>
Interfaz1
<<interfaz>>
Interfaz2
240
Mecanismos de herencia
PROBLEMA 20. EMPLEADOS POR HORA Y A DESTAJO
Una pequea empresa hace dos tipos de empleados: los que trabajan por horas o
por cantidad de trabajo realizado. Del primer tipo se conoce su identificacin, nmero
de horas trabajadas y costo de la hora; del segundo grupo se conoce su identificacin y
nmero de unidades producidas. Para stos ltimos el pago por unidad producida tiene
un valor constante de $2500.
Se pide: ingresar la informacin de m empleados por hora y n a destajo, donde m y
n son variables enteras. Visualizar un informe con la identificacin y salario devengado
por cada empleado. Finalmente, mostrar el salario promedio de los empleados
asalariados y a destajo.
Problema adaptado de [Deitel2007]
Solucin:
a) Tabl a de r equer i mi ent os
I dent i f i caci n
del
r equer i mi ent o
Descr i pci n Ent r adas
Resul t ados
( Sal i das)
R1
Conocer la cantidad de
empleados por hora y a
destajo
Dos nmeros
enteros ingresados
por el usuario
Las variables
enteras m y
n han sido
inicializadas
R2
Para una cantidad
conocida de empleados
por hora, dada por la
variable m, conocer su
identificacin, nmero de
horas trabajadas y valor de
la hora
El nmero m.
Para cada empleado
por hora: ident, nht
y vrHora
Un vector de
tamao m
(empPorHoras)
con los datos de
los empleados
por hora
241
Lgi ca y Pr ogr amacin or i ent ada a obj et os. Un enf oque basado en pr obl emas
R3
Para una cantidad
conocida de empleados
a destajo, dada por la
variable n, conocer su
identificacin y cantidad
de unidades producidas
El nmero n.
Para cada empleado
a destajo: ident y
cup
Un vector
de tamao n
(empADestajo)
con los datos de
los empleados a
destajo
R4
Para todos los empleados
(por horas y a destajo):
conocer su identificacin y
salario devengado
Los datos de todos
los empleados.
Por cada
empleado:
identificacin y
salario.
R5
Conocer el salario
promedio de los empleados
asalariados y a destajo.
Los salarios de
todos los empleados
Salario promedio
de los empleados
asalariados y
salario promedio
de los empleados
a destajo
Documentacin:
I dent i f i cador Ti po Si gni f i cado
m ent er o Cantidad de empleados por hora.
n ent er o Cantidad de empleados a destajo.
ident cadena
Identificacin de un empleado (por horas
o a destajo).
nht ent er o Nmero de horas trabajadas.
vrHora r eal Valor de la hora.
cup ent er o Cantidad de unidades producidas.
empPorHoras EmpleadoPorHoras Vector de empleados por hora.
empADestajo EmpleadoADestajo Vector de empleados a destajo.
242
Mecanismos de herencia
b) Di agr ama de cl ases
Proyecto
+ principal ( )
nal
EmpleadoPorHoras
-nht: ent ero
-vrHora: real
+ asignarNHT (ent ero)
+ asignarVH (real)
+ obtenerNHT ( ): ent ero
+ obtenerVH ( ): real
+ EmpleadoPorHoras (cadena, ent ero, real)
+ calcularSalario( ): real
<<abstracta
Empleado
- ident: cadena
+ asignarIdent (cadena)
+ obtenerIdent ( ): cadena
+ Empleado ( )
+ Empleado (cadena )
<<nal
EmpleadoADestajo
- cup: ent ero
- VALOR_UP = 2500
+ asignarCUP (ent ero)
+ obtenerCUP ( ): ent ero
+ EmpleadoADestajo (cadena, ent ero)
+ calcularSalario( ): real
empADestajo[n]
empPorHoras[m]
243
Lgi ca y Pr ogr amacin or i ent ada a obj et os. Un enf oque basado en pr obl emas
c) Seudo cdi go
atracta clae Empl eado
rado
cadena i dent
pblico:
asi gnar Ident (cadena i )
i dent = i
ntodo
//---------------------------------------------
cadena obt ener Ident ( )
retornar i dent
ntodo
//---------------------------------------------
Empl eado ( )
ntodo
//---------------------------------------------
Empl eado (cadena i )
asi gnar Ident (i )
ntodo
//---------------------------------------------
nclae / / Empl eado
/ / * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
nal clae Empl eadoPor Horas eredaDe Empl eado
rado
entero nht
real vr Hora
pblico:
asi gnar NHT (entero ht )
nht = ht
ntodo
//---------------------------------------------
asi gnar VH (real vh)
vr Hora = vh
ntodo
//---------------------------------------------
entero obt ener NHT ( )
retornar nht
ntodo
//---------------------------------------------
real obt ener VH ( )
retornar vr Hora
ntodo
//---------------------------------------------
244
Mecanismos de herencia
Empl eadoPor Ho C
ntodo
//---------------------------------------------
Empl eadoPor Horas(cadena i d, entero nh, real vh)
er (i d) / / i nvoca al const r uct or de l a supercl ase
asi gnar NHT(ht )
asi gnar VH(vh)
ntodo
//---------------------------------------------
real cal cul ar Sal ar i o( )
retornar nht * vr Hora
ntodo
nclae Empl eadoPor Horas
/ / * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
nal clae Empl eadoADest aj o eredaDe Empl eado
rado
entero cup
cont entero VALOR_UP = 2500
pblico:
asi gnar CUP(entero up)
cup = up
ntodo
//---------------------------------------------
entero obt ener CUP( )
retornar cup
ntodo
//---------------------------------------------
Empl eadoADest aj o( )
ntodo
//---------------------------------------------
Empl eadoADest aj o(cadena i d, entero up)
er(i d)
asi gnar CUP(up)
ntodo
//---------------------------------------------
real cal cul ar Sal ar i o( )
retornar VALOR_UP * cup
ntodo
nclae Empl eadoADest aj o
/ / -----------------------------------------------------------------------------------------
245
Lgi ca y Pr ogr amacin or i ent ada a obj et os. Un enf oque basado en pr obl emas
clase Proyect o
etco rncal( )
entero m, n
m = Flujo.l eer Ent ero( )
n = Flujo.l eer Ent ero( )
Empl eadoPor Horas empPor Horas[ ] = neoEmpl eadoPor Horas[ m]
Empl eadoADest aj o empADest aj o[ ] = neo Empl eadoADest aj o[ n]
cadena i dent
entero numHT, numUP, c
real vr H
/ / i ngreso de empl eados por hora
ara (c = 0, c < m, c = c + 1)
i dent = Flujo.l eer Cadena( )
numHT = Flujo.l eer Ent ero( )
vr H = Flujo.l eer Real ( )
empPor Horas[ c] = neo Empl eadoPor Horas(i dent , numHT,
vr H)
nara
/ / i ngreso de empl eados a dest aj o
ara (c = 0, c < n, c = c + 1)
i dent = Flujo.l eer Cadena( )
numUP = Flujo.l eer Ent ero( )
empADest aj o[ c] = neo Empl eadoADest aj o(i dent , numUP)
nara
/ / i nfor me de sal ar i os: nmi na
real sal ar i o, suma1 = 0, suma2 = 0
entero c
ara (c = 0, c < m, c = c + 1)
sal ar i o = empPor Horas[ c] .cal cul ar Sal ar i o( )
suma1 = suma1 + sal ar i o
Flujo.i mpr i mi r (empPor Horas[ c] .obt ener Ident ( ), sal ar i o)
nara
ara (c = 0, c < n, c = c + 1)
sal ar i o = empADest aj o[ c] .cal cul ar Sal ar i o( )
suma2 = suma2 + sal ar i o
Flujo.i mpr i mi r (empADest aj o[ c] .obt ener Ident ( ), sal ar i o)
nara
real prom1 = suma1 / m
real prom2 = suma2 / n
Flujo.i mpr i mi r (prom1, prom2)
ntodo pr i nci pal ( )
nclae / / Proyect o
246
Mecanismos de herencia
Observaciones:
x En el mtodo Proyecto.principal( ) se han omitido los mensajes respectivos que
deben preceder las lecturas de las variables m y n, y los mensajes al usuario
para la lectura de datos dentro de los ciclos para, esto por simple cuestin de
ahorro escritural de seudocdigo.
x La instruccin:
EmpleadoPorHoras empPorHoras[ ] = nuevo EmpleadoPorHoras[m],
reserva memoria para almacenar m empleados en el vector de objetos
empPorHoras. Observar que empADestajo es otro vector de objetos.
x Al interior de los ciclos para que posibilitan la entrada de datos (o llenado de
los dos vectores), se requiere de una instruccin que almacene en una posicin
determinada del vector los datos del nuevo empleado; para esto se requiere del
operador nuevo (que reserva memoria) y del constructor sobrecargado, como
en la instruccin:
empPorHoras[c] = nuevo EmpleadoPorHoras(ident, numHT, vrH)
6.2. POLIMORFISMO
El polimorfismo es uno de los conceptos esenciales de la programacin orientada a
objetos. Si la herencia est relacionada con las clases y su jerarqua, el polimorfismo
lo est con los mtodos.
En general, hay tres tipos de polimorfismo: polimorfismo de sobrecarga, polimorfismo
paramtrico (tambin llamado polimorfismo de plantillas) y polimorfismo de inclusin
(tambin llamado redefinicin o subtipado).
El polimorfismo paramtrico es la capacidad para definir varios mtodos utilizando
el mismo nombre dentro de una misma clase, pero con parmetros diferentes (figura
6.6). El polimorfismo paramtrico selecciona automticamente el mtodo correcto
247
Lgi ca y Pr ogr amacin or i ent ada a obj et os. Un enf oque basado en pr obl emas
a aplicar en funcin del tipo de datos pasado en el parmetro, y es equivalente al
concepto de sobrecarga de un mtodo.
Persona
<<>abst ract a>
+ caminar( )
+ caminar(acompaant e: Persona)
+ caminar(m: Mulet a)
+ caminar(acompaant e: Persona, m: Mulet a)
Fi gur a 6.6. Polimorfismo paramtrico
Fi gur a 6.7. Polimorfismo de subtipado
Pieza
Rey
+ mover( )
Pen
+ mover( )
Reina
+ mover( )
Movimient o
<<int erfaz>>
+ mover( )
El polimorfismo de subtipado permite ignorar detalles de las clases especializadas
de una familia de objetos, enmascarndolos con una interfaz comn (siendo
esta la clase bsica). Imagine un juego de ajedrez con los objetos rey, reina,
alfil, caballo, torre y pen, cada uno heredando el objeto pieza (ver figura 6.7).
248
Mecanismos de herencia
El mtodo mover( ) podra, usando polimorfismo de subtipado, hacer el movimiento
correspondiente de acuerdo a la clase de objeto que se llame. Esto permite al programa
realizar el movimiento de pieza sin tener que verse conectado con cada tipo de pieza en
particular.
6.3. EJERCICIOS PROPUESTOS
1. Con la ayuda de ejemplos de la vida cotidiana, explique los siguientes trminos:
objeto, clase, herencia simple, herencia mltiple, atributo, mtodo, mensaje,
sobrecarga de mtodos, polimorfismo y encapsulacin de datos.
2. Un centro hospitalario posee N ambulancias distribuidas a lo largo y ancho de una
ciudad. De cada ambulancia se conoce su localizacin. En caso de presentarse una
emergencia (por ejemplo un accidente de trnsito o una atencin domiciliaria), se
toman los datos de su localizacin.
El problema consiste en hallar la ambulancia ms cercana al punto de la
emergencia, considerando que sta puede estar ocupada en otra situacin, lo que
solicita hallar la siguiente ambulancia ms cercana. Se debe enviar un mensaje de
SOS al hospital, en caso de que todas las ambulancias estn ocupadas.
3. Defina el paquete t i empo con las clases Fecha y Hor a.
La clase Fecha debe incluir los atributos enteros da (entre 1 y 30), mes (entre 1 y
12) y ao (mayor o igual a 2006), cuyos valores predeterminados estn dados para
el 1 de enero de 2006; sobrecargue el constructor con tres parmetros enteros para
da, mes y ao.
La clase Hor a se debe definir con los atributos hor (entre 0 y 23), mi n (entre 0 y 59)
y seg (entre 0 y 59), cuyos valores predeterminados estn dados para las 06:30:00;
sobrecargue el constructor con tres parmetros enteros para hor , mi n y seg.
249
Lgi ca y Pr ogr amacin or i ent ada a obj et os. Un enf oque basado en pr obl emas
Ambas clases deben constar de las operaciones asignar y obtener respectivas; las
funciones asignar deben verificar los rangos de cada atributo.
Incluir adems las operaciones:
most r ar Fecha ( ), que despliega la fecha actual.
most r ar Hor a ( ), que despliega la hora actual.
i ncr ement ar Fecha (ent er o d, ent er o m, ent er o a), que incrementa la fecha
actual en d das, m meses y a aos. Este ltimo mtodo debe finalizar con una
fecha consistente.
i ncr ement ar Hor a (ent er o h, ent er o m, ent er o s), que incrementa la hora
actual en h horas, m minutos y s segundos. Este ltimo mtodo debe finalizar
con una hora consistente. Sobrecargar este mtodo con un objeto tipo Hor a,
as: i ncr ement ar Hor a (Hor a h).
Fuera del paquete t i empo definir la clase Tr ansacci nBancar i a, con los atributos
numeroCuenta (tipo cadena), tipoTransaccion (tipo ent er o), saldo (tipo r eal ), fecha
(tipo Fecha) y hora (tipo Hor a). Realizar dos transacciones bancarias y visualizar
todos sus datos.
Incrementar tanto la fecha de la primera transaccin en 3 das, 5 meses y 4 aos,
como la hora de la segunda transaccin con la hora de la primera.
4. El gobierno colombiano desea reforestar los bosques del pas segn el nmero de
hectreas que mida cada bosque. Si la superficie del terreno excede a 1 milln de
metros cuadrados, entonces decidir sembrar de la siguiente manera:
Porcentaje de la superficie del bosque Tipo de rbol
70% Pino
20% Oyamel
10% Cedro
Si la superficie del terreno es menor o igual a un milln de metros cuadrados,
entonces la siembra se realizar as:
250
Mecanismos de herencia
Porcentaje de la superficie del bosque Tipo de rbol
50% Pino
30% Oyamel
20% Cedro
De cada bosque se conoce su nombre, extensin en hectreas y departamento
donde se ubica; de cada rbol se conoce su nombre (vulgar) y valor de trasplante de un
ejemplar.
El gobierno desea saber el nmero de pinos, oyameles y cedros que tendr que
sembrar cada bosque, si se conocen los siguientes datos: en 10 metros cuadrados
caben 8 pinos, en 15 metros cuadrados caben 15 oyameles y en 18 metros cuadrados
caben 10 cedros; se requiere una hectrea equivale a 10 mil metros cuadrados.
Adems se requiere responder los siguientes interrogantes: Cul es el Departamento
de Colombia con ms bosques reforestados? Cul fue el precio por cada reforestacin
realizada?
5. Escriba una jerarqua de herencia para las clases Cuadr i l t er o, Tr apezoi de,
Par al el ogr amo, Rect ngul o y Cuadr ado. Utilice Cuadr i l t er o como superclase
de la jerarqua, y haga la jerarqua tan profunda (esto es, con tantos niveles) como
pueda. Los datos privados de Cuadr i l t er o debern incluir los pares de coordenadas
(x, y) para las cuatro esquinas del cuadriltero. Escriba un mtodo pr i nci pal ( ) que
ejemplarice y exhiba objetos de cada una de estas clases con su rea respectiva.
6. Disear una jerarqua de clases: Cr cul o, Ci l i ndr o y Ci l i ndr oHueco. En esencia
se puede decir que un objeto cilindro es un crculo con una altura y un cilindro
hueco es un cilindro con un espacio hueco dentro de l. Escribir el mtodo
Proyecto.principal( ) que permita crear objetos Cr cul o, Ci l i ndr o y Ci l i ndr oHueco
y calcule la longitud de la circunferencia y las reas del crculo, del cilindro y del
cilindro hueco, y los volmenes del cilindro y del cilindro hueco.
251
Lgi ca y Pr ogr amacin or i ent ada a obj et os. Un enf oque basado en pr obl emas
Frmulas:
Crculo
Longitud: 2..r
rea: .r
2
Cilindro
rea: 2..r.h + 2..r
2
Volumen: .r
2.
h
C i l i n d r o
hueco
Longitud: 2..(r
2
rIinterno
2
) + 2..r.h +2..rInterno.h
Volumen: .(r
2
rInterno
2
).h
Nota:
r = radio del cilindro y radio externo cilindro hueco.
rInterno = radio interno del cilindro hueco.
6.4. REFERENCIAS
[ de L I sl e- Adam2003] : de LIsle-Adam, Villers. Cuentos Crueles (Serie Grandes
Clsicos Universales). Espasa, Madrid, 2003.
[ Dei t el 2007] : Deitel&Deitel. Como programar en C#. Segunda edicin, Pearson
Educacin, Mxico, 2007.
[ Eckel 2002] : Eckel, Bruce. Piensa un Java. Segunda edicin. Pearson Educacin,
Madrid, 2002.
252
Apndi ces
Apndi ce A
Ent or no Int egr ado de Desar r ol l o Si smoo
El entorno integrado de desarrollo (IDE) Sismoo presenta el ambiente de trabajo
para el usuario expuesto en la fig. A.1, donde se observa una ventana con un men
principal, un barra de iconos o herramientas, un panel lateral izquierdo para exploracin
de archivos, un panel lateral derecho que hace las veces de editor, donde se pueden
desplegar varios archivos a la vez y un panel inferior para la emisin de mensajes al
usuario sobre el estado del sistema y el proceso de compilacin de las aplicaciones.
Figura A.1. Entorno integrado de desarrollo Sismoo
El entorno permite editar, compilar y ejecutar programas escritos en el
seudolenguaje propuesto en MIPSOO, de una manera tan simple que permite agilizar
los procesos de aprendizaje de la programacin. El trabajo con el editor Sismoo puede
constituir un paso previo para interactuar con otros editores comerciales durante el
desarrollo de software a gran escala.
253
Lgi ca y Pr ogr amacin or i ent ada a obj et os. Un enf oque basado en pr obl emas
Los resultados que emiten los programas se presentan en ventanas independientes
a la ventana principal, como se observa en la figura A.2. Sismoo cuenta con la opcin
de traduccin a lenguaje Java, que se considera una buena herramienta de introduccin
al lenguaje de programacin y se proyecta la traduccin a otro lenguaje como Visual
Basic.Net o C#.
Figura A.2. Resultados de un programa
A continuacin de da una breve descripcin del la parte funcional del IDE Sismoo,
orientada a los lectores que no estn muy familiarizados con este tipo de herramienta y
posteriormente se presentan algunos aspectos referentes al diseo, dirigido a lectores
avanzados para que reconozca su estructura interna.
254
Apndi ces
Funci onal i dad de Si smoo
Al ingresar a Sismoo se despliega la siguiente pantalla de presentacin, tipo splash:
Figura A.3. Pantalla de presentacin de Sismoo
En ella se ofrece al usuario la posibilidad de trabajar seudocdigo MIPSOO, o cdigo
en lenguajes Java o C#; esta dos ltimas opciones estn desactivadas, porque en el
momento de la impresin de este libro no estaban implementadas. Futuras versiones
del programa incluirn estas opciones; la versin actual corresponde a la 1.0.
El ambiente de trabajo del IDE Sismoo posee cinco opciones en el men principal:
Archivo, Editar, Programa, Herramientas y Ayuda, las cuales se muestran en detalle
a continuacin. Presenta adems una barra de iconos que permite, de izquierda a
derecha, ejecutar las siguientes tareas: Nuevo, Abrir, Cerrar, Guardar, Guardar todo,
Deshacer, Rehacer, Cortar, Copiar, Pegar, Borrar todo el texto, Traducir a Java, Detener
Ejecucin, Compilar, Ejecutar, Ayuda, Acerca de , y Tamao de Fuente.
Una breve descripcin de cada opcin del men principal se presenta a continuacin.
x Men Ar chi vo: Permite la manipulacin de archivos o ficheros. Por definicin,
todo archivo almacenado posee la extensin sis. El men Archivo cuenta
con tems que permiten crear un nuevo archivo, abrirlo, cerrarlo, guardarlo,
cambiarle de nombre y guardar todos los archivos abiertos.
255
Lgi ca y Pr ogr amacin or i ent ada a obj et os. Un enf oque basado en pr obl emas
Figura A.4. Men Archivo
x Men Edi t ar : Su funcionalidad es similar a la de cualquier editor de texto y
consta de las opciones: deshacer y rehacer la ltima accin realizada en el
editor, cortar y copiar el texto seleccionado en el editor, pegar lo almacenado
en memoria o clipboard, seleccionar todo lo escrito en el editor y modificar el
tamao de la fuente.
Figura A.5. Men Editar
x Men Pr ogr ama: Permite compilar y ejecutar un programa escrito en
seudolenguaje orientado a objetos; adems tambin permite detener la
ejecucin del programa actual y traducir a Java el cdigo escrito en el editor.
Figura A.6. Men Programa
256
Apndi ces
x Men Her r ami ent as: Sismoo requiere para su funcionamiento del Kit de
Desarrollo de Java (JDK), por lo tanto debe estar instalado previamente en el
computador. Esta opcin permite configurar el traductor de tal manera que se
puedan compilar y ejecutar los programas de la manera correcta.
Figura A.7. Men Herramientas
Al seleccionarla aparece la siguiente ventana:
Figura A.8. Configuracin de Sismoo
x Men Ayuda: Permite obtener ayuda en lnea acerca del programa SISMOO
Resistent e informa acerca de los derechos de autor del programa.
257
Lgi ca y Pr ogr amacin or i ent ada a obj et os. Un enf oque basado en pr obl emas
Figura A.9. Men Ayuda
Aspect os de di seo
Algunos aspectos relacionados con el diseo y construccin de IDE traductor
Sismoo se presentan a continuacin, en forma grafica, para simplificar su descripcin.
En la representacin simblica de SISMOO de la figura A.10, se ilustran los
lenguajes que intervienen en el proceso.
Byt ecode
Programa
Obj et o
Excepcione
Jav
Seudo
l enguaj e
Er r or es Si smoo
Si smo
Javac JVM
Error
Java
Java
Seudol enguaj e
Figura A.10. Diagrama simblica de Sismoo
Del diagrama esquemtico presentado en la figura A.11, se deduce el proceso de
ejecucin de un programa desarrollado en seudolenguaje y la relacin de Sismoo con el
lenguaje de programacin Java; se observan las labores de compilacin y traduccin a
bytecode (que la realiza la aplicacin Javac) y el trabajo de la mquina virtual de Java
(JVM) en el manejo de excepciones y generacin del programa objeto.
Figura A.11. Diagrama esquemtico de Sismoo
258
Apndi ces
Para finalizar, en la figura A.12 se ilustran los diagramas de clases conceptuales
en notacin UML y en la tabla A.1 una breve descripcin de cada una de las clases que
hacen parte de aplicativo Sismoo.
Figura A.12. Diagrama conceptual de clases Sismoo
Tabla A.1 Descripcin de clases para Sismoo
Nombr e Der i va de Br eve Descr i pci n
SISMOO JFrame Ventana de inicio
Principal JFrame
Es la clase central que contiene el ambiente
de trabajo de SISMOO
SisTree JTree Implementa el explorador
SisMutable
TreeNode
DefaultMutable
TreeNode
Para manejar los nodos o carpetas en el
explorador
JavaFilter FileFilter Filtro general para los archivos
259
Lgi ca y Pr ogr amacin or i ent ada a obj et os. Un enf oque basado en pr obl emas
SisFilter FileFilter
Filtra los archivos tipo SISMOO, con
extensin punto sis (.sis)
Editor JPanel Panel principal para el editor de texto
SismoText
Panel
JPanel Panel para las carpetas de cada archivo
Numero
Linea
JComponent
Maneja la numeracin de las lneas de
cdigo
Codigo
Documento
DefaultStyled
Document
Reconoce los elementos que poseen formato
especial
lineaHighlighter DefaultHighlighter Para resaltar el texto seleccionado
MenuPopup JPopupMenu Men contextual del rea de edicin
VentanaRun JDialog Despliega la venta de ejecucin
MiJTextArea JScrollPane
Maneja el rea de texto de salida en la
ventana de ejecucin
ErrorTextArea MiJTextArea
Captura las excepciones o errores en tiempo
de ejecucin
RunErrorTextArea ErrorTextArea
Maneja el rea de texto de errores en tiempo
de ejecucin
ReadStream Runnable
Controla la caja de texto de lectura en tiempo
de ejecucin
SplitLayout LayoutManager
Para el diseo de los panel en la ventana de
ejecucin
SisActivo
Panel
JPanel Panel para la ventana de configuracin
JavaOpcion
Panel
SisActivoPanel
Ventana de configuracin de Kit de Desarrollo
de Java
Convertir Object Realiza la traduccin a Java
Compilar Thread Ejecuta la compilacin en Java
AcercaDe JFrame Ventana de Ayudas
260
Apndi ces
Apndi ce B
El ement os si nt ct i cos del seudo l enguaj e
B.1. Listado de palabras reservadas para el seudo lenguaje orientado a objetos
atracta
cadena
Cadena
catrar
caracter
Caracter
certo
clase
cont
deecto
entero
Lntero
etaco
este
Lcecon
LceLS
ExcepMat
falso
ncatrar
nclae
netodo
nentra
nntera
nara
nroar
nen
n
nal
Flujo
hasta
eredaDe
leenta
ortar
ntera
logico
Logico
Mat
entra
neo
nlo
Objeto
aete
ara
rncal
rado
roar
rotedo
publico
real
Real
reer
retornar
roer
en
si
no
Soo
er
TipoDeDato
aco
261
Lgi ca y Pr ogr amacin or i ent ada a obj et os. Un enf oque basado en pr obl emas
B.2. Estructuras de control
ESTRUCTURA
DE CONTROL
SINTAXIS GENERAL OBSERVACIONES
Secuencia
instruccin_ 1
instruccin_ 2
instruccin_ N
El conjunto de instrucciones conforma una
secuencia o lista. Una instruccin puede ser
una asignacin, una decisin, un selector o
un ciclo
Decisin
si (e)
instrucciones_ 1
[si no
instrucciones_ 2]
f i n_ si
e: expresin lgica
instrucciones_ 1: bloque de instrucciones
a ejecutar si la expresin e es verdadera
instrucciones_ 2: bloque de instrucciones a
ejecutar si expresin es falsa
Selector
mltiple
segn (vs)
caso c1:
instrucciones_ 1
caso c2:
instrucciones_ 2
caso cN:
instrucciones_ N
[si no
instrucciones_ x]
f i n_ segun
vs: variable selectora. Debe ser de
tipo entero, carcter, tipo enumerado o
subrango
ci: constante i, de igual tipo al de la
variable selectora vs. i = 1, 2, , N
instrucciones_ i: lista de instrucciones a
ejecutar en caso de existir coincidencia entre
vs y ci, i = 1, 2,, N. Si no se presenta
coincidencia, se ejecutan las intrucciones_ x
Ciclos
mi ent r as (e)
instrucciones
f i n_ mi ent r as
e: expresin lgica
instrucciones: instrucciones a ejecutar si
la expresin e es verdadera; al menos una
de ellas debe hacer variar la e
par a (c = vi, e, i)
instrucciones
f i n_ par a
c : variable contadora del ciclo.
vi: valor inicial para c
e: expresin lgica relacionada con c.
i: incremento para c
r epet i r
instrucciones
hast a (e)
e: expresin lgica
instrucciones: instrucciones a ejecutar si la
e es verdadera; al menos una de ellas hace
variar la e
262
Apndi ces
B.3. Elementos estructurales del seudo lenguaje orientado a objetos
En la especificacin de la forma general de los elementos estructurales del seudo
lenguaje orientado a objetos, se utilizan las siguientes smbolos:
Corchetes: [ ] Todo lo encerrado entre ellos se considera opcional
Si no se especifica la visibilidad (pbl i co, pr i vado), por
omisin se asume privada
Barra vertical: | Indica posibilidad, es decir, se debe escoger una de las
opciones separadas por la barra vertical
Doble barra inclinada: // Indica comentario
ESTRUCTURA DE UNA CLASE
[abst r act o | f i nal ] [publ i co | pr i vado | pr ot egi do] cl ase nomClase [her edaDe
nomClaseBase] [i mpl ement a nomInterfaz]
// Cuerpo de la clase
f i n_ cl ase
Si no se indica la visibilidad de la clase, se asume privada.
ESTRUCTURA DE UN MTODO
[est at i co][<tipo_devuelto>] nomMtodo([argumentos] )
[ publ i co:
// Miembros pblicos]
[ pr i vado:
// Miembros privados]
f i n_ met odo
<tipo_devuelto> puede ser un tipo primitivo de datos, o cualquier tipo abstracto de
datos definido por el programador.
263
Lgi ca y Pr ogr amacin or i ent ada a obj et os. Un enf oque basado en pr obl emas
ESTRUCTURA DE UN PAQUETE
paquet e nomPaquete
// Cuerpo del paquete
f i n_ paquet e
ESTRUCTURA DE UNA INTERFAZ
i nt er f az nomInterfaz
// Cuerpo de la interfaz
f i n_ i nt er f az
ESTRUCTURA GENERAL DE UNA SOLUCIN ORIENTADA A OBJETOS
[sentencias i mpor t ar ]
[definicin de clases del mbito de la solucin]
cl ase Proyecto
est at i co pr i nci pal ( )
// Cuerpo del mtodo principal
f i n_ met odo
f i n_ cl ase
264
Apndi ces
Apndi ce C
Gl osar i o bsi co par a l a or i ent aci n a obj et os
Abst r acci n. Tomar del espacio del problema aquellas caractersticas que son
importantes para utilizarlas en el espacio de la solucin. Una buena abstraccin
es aquella que enfatiza sobre detalles significativos al lector y al usuario y suprime
aquellos irrelevantes o que causan distraccin.
Existen dos tipos bsicos: el primer tipo es la abst r acci n de ent i dades, que
representa una entidad ya sea del dominio del problema o del dominio de la solucin.
El segundo tipo es la abst r acci n de acci ones o abst r acci n de compor t ami ent o,
que proporciona un conjunto especializado de operaciones que pueden desempear un
objeto en el mbito del espacio del problema a solucionar.
Agr egaci n. Forma de asociacin que especifica una relacin todo-parte entre el
agregado (el todo) y las partes que lo componen.
At r i but o. Miembro dato de una clase. Puede ser de un tipo primitivo o de un tipo
abstracto de datos. Ver objeto.
Bi t . Contraccin del trmino ingls Binary digit. Condicin binaria (encendido |
apagado) almacenada en un medio (generalmente magntico).
Byt e. Conjunto de 8 bits.
Cl ase. Es la abstraccin de un grupo de objetos que comparten las mismas
caractersticas y el mismo comportamiento.
Cl ase abst r act a. Clase desde la cual no se pueden instanciar objetos, pero s otras
clases. El comportamiento de esta clase tambin es abstracto, por tanto debe ser
implementado por una clase derivada (sea clase comn o clase final).
265
Lgi ca y Pr ogr amacin or i ent ada a obj et os. Un enf oque basado en pr obl emas
Cl ase base. Es padre de otra clase en una relacin de generalizacin, es decir, en la
especificacin del elemento ms general. Una clase base puede ser abstracta o comn
pero nunca final. Tiene como sinnimo la palabra Superclase.
Cl ase comn. Es una clase que tiene clases ascendientes y descendientes. A partir
de ella se pueden instanciar objetos u otras clases.
Cl ase der i vada. Es la hija de otra clase en una relacin de generalizacin, es
decir, en la relacin ms especfica. Esta clase hereda la estructura, relaciones y
comportamiento de su superclase; adems puede hacer sus propias adiciones.
Sinnimo: Subclase.
Cl ase fi nal . Es una clase que no admite instanciar a otras a partir de ella, es decir, no
admite clases descendientes. Desde una clase final slo se pueden instanciar objetos.
Composi ci n. Forma de asociacin de agregacin con fuerte sentido de posesin
y tiempo de vida coincidente de las partes con el todo. Una pieza puede pertenecer
a solamente una composicin. Las partes con multiplicidad no fija se pueden crear
despus del elemento compuesto, pero una vez creadas, viven y mueren con l (es
decir, comparten tiempo de vida). Tales piezas pueden quitarse explcitamente antes
de la muerte del elemento compuesto. La composicin puede ser recurrente.
Const r uct or. Mtodo u operacin con el mismo nombre de la clase, usado para
crear un objeto. Un constructor establece el estado inicial de un objeto y puede ser
sobrecargado varias veces.
Dat o. Conjunto de bytes que operan algo con significado.
Dest r uct or. Mtodo con el mismo nombre de la clase (en C++), y usado para
destruir un objeto. Un destructor da un estado final a los atributos, es el ltimo mtodo
a invocar antes de la finalizacin del programa. En lenguajes como Java y C# no
existen destructores, porque su accin la realiza el recolector de basura (garbage
collector) y el mtodo finalize( ).
266
Apndi ces
Encapsul aci n. Protege los atributos que conforman el objeto, al definirles una
visibilidad privada. Para alterar el estado de un objeto en su atributo x, se requiere
enviar un mensaje asignarX (dato), denominado mtodo setX (dato) en ciertos lenguajes
de programacin.
Enl ace di nmi co. Al correr el programa se puede cambiar el tipo de dato del objeto
creado.
Enl ace est t i co. Una vez declarado un objeto, se asocia con su tipo abstracto de
dato, y no se puede modificar con posteridad. En C++ la ligadura por defecto es
esttica; para implementar la ligadura dinmica es necesario declarar las funciones
como virtuales.
Est ado de un obj et o. Identidad de un objeto en determinado momento del tiempo.
La identidad la dan los valores especficos que toman los atributos del objeto. Un
constructor establece el estado inicial de un objeto.
Excepci n. Es una condicin anormal que ocurre cuando se ejecuta un programa.
Una excepcin ocurre cuando al flujo normal de una solucin le surge un imprevisto. En
este caso se debe tomar una decisin adecuada que permita controlar el error.
Ext ensi bi l i dad. Propiedad de crear nuevas clases con elementos (atributos y
propiedades) de otras clases ya definidas.
Fi r ma. Denota el tipo de visibilidad, el nombre, el tipo de retorno, el tipo y nmero
de parmetros con los cuales se va a especificar una clase, un mtodo o un atributo.
La firma de un mtodo se conoce como prototipo.
Funci n. Operacin con o sin parmetros (por lo general uno), que retorna un valor
nico al punto de la llamada (paso de un mensaje al objeto).
Gener al i zaci n/ Especi al i zaci n. Relacin taxonmica entre un elemento ms
general (generalizacin) y un elemento ms especfico (especializacin), el cual es
267
Lgi ca y Pr ogr amacin or i ent ada a obj et os. Un enf oque basado en pr obl emas
completamente consistente con el elemento ms general y contiene informacin
adicional. Una relacin de generalizacin se establece entre elementos del mismo tipo,
como clases, paquetes y otros tipos de elementos.
Her enci a. Proceso que permite a unos elementos ms especficos incorporar
la estructura y el comportamiento definidos por otros elementos ms generales. La
herencia puede crear una jerarqua entre clases, lo cual a su vez permite realizar
nuevas clases con base en una (herencia simple) o ms clases ya existentes (herencia
mltiple). La nueva clase adquiere todas las caractersticas y el comportamiento de las
que hereda, a la vez que puede agregar otras. Esto permite reutilizar cdigo y generar
nuevos programas por extensin.
La herencia mltiple puede conducir a un conflicto cuando los padres tienen mtodos
iguales. Para evitar este inconveniente, Java y C# - entre otros lenguajes- manejan la
herencia mltiple creando una segunda clase padre llamada Interfaz, reemplazando el
termino herencia por el de implementa.
I nst anci a. Valor especfico de una clase, es decir, un objeto en particular. Un objeto
se instancia cuando se ejecuta su constructor o cuando se le enva un mensaje que
cambie su estado -con un mtodo asignarX (dato).
I nt er f az. Es una clase sin atributos, con los comportamientos especificados
a nivel de prototipo o firma. Por definicin una interfaz es abstracta, por tanto sus
comportamientos deben ser implementados por otras clases (que implementan la
interfaz). Las interfaces son una manera de tratar la herencia mltiple.
Jer ar qua. Es una disposicin que establece relaciones lgicas entre clases u objetos.
Un objeto puede estar formado por una cantidad de objetos distintos (agregacin), o
puede heredar las caractersticas y comportamientos de otro (generalizacin).
Mensaj e. Ejecucin de un mtodo.
Mt odo. Tambin se denomina funcin miembro (como en C++) u operacin
268
Apndi ces
(UML). Es una operacin definida sobre un objeto, es un algo que el objeto sabe (o
conoce) y por tanto define su comportamiento. Todo objeto debe tener al menos un
atributo (X) y tres mtodos: un constructor, un modificador de atributo para controlar el
estado del objeto (asignarX ( )) y un recuperador de la informacin privada del objeto
(obtenerX ( )).
Mt odo de cl ase. Ver Mtodo esttico.
Mt odo est t i co. Es un mtodo que no requiere de una instancia u objeto para
ejecutar la accin que desarrolla, debido a que tiene la semntica de una funcin
global. Sinnimo: Mtodo de clase.
Mt odo de i nst anci a. Mtodo que requiere de una instancia (objeto) para ejecutar
su accin mediante el envo de un mensaje.
Modul ar i dad. Consiste en dividir un sistema en mdulos con el fin de reducir
la complejidad. Cada mdulo se puede compilar de manera independiente, tiene la
posibilidad de conectarse con otros mdulos y realiza una tarea bien especfica y
delimitada. Cuando se agrupan clases con direccin o comportamiento comn en un
slo paquete, se presenta la modularidad basada en paquetes.
Obj et o. Instancia de una clase. Es un tipo de dato abstracto. Tiene caractersticas
llamadas atributos y comportamientos denominados mtodos. Un objeto es una
abstraccin que puede representar algo tangible o no tangible asociado al dominio del
problema, y que refleja la informacin sobre un sistema.
Per si st enci a. Ya creado un objeto, este consume un espacio de memoria y un
tiempo de vida. La funcin de la persistencia es permitirle que est disponible durante
la ejecucin de una aplicacin. As, cuando un objeto deja de ser persistente, se hace
obsoleto y ya no tiene importancia para la aplicacin, es decir, se convierte en basura
y debe liberarse de la memoria. Este proceso de limpieza se conoce como recoleccin
de basura; en algunos lenguajes (Java) es responsabilidad de un hilo de ejecucin
(thread), por lo tanto siempre se est liberando memoria, de tal forma que se use la
269
Lgi ca y Pr ogr amacin or i ent ada a obj et os. Un enf oque basado en pr obl emas
realmente necesaria. En otros lenguajes (C++), la recoleccin de basura debe ser
explcita, lo que implica trabajo extra para el programador.
Pol i mor f i smo. Se presenta cuando un mtodo funciona de varias maneras, segn
el objeto que lo invoque. Hay tres formas de implementar polimorfismo: por sobre
escritura (a travs de la ligadura dinmica), por sobrecarga de mtodos (polimorfismo
por parmetros) y polimorfismo por reemplazo (una clase derivada y su clase base
implementan de manera distinta la misma operacin).
Pr ocedi mi ent o. Operacin que puede tener cero, uno o ms parmetros de salida.
Pr ot ot i po. Ver firma.
Reusabi l i dad. Utilizar los mtodos pblicos de clases existentes (su interfaz
pblica) y adecuarlos a nuestra necesidad, incorporndolos al espacio del dominio del
problema o al espacio del dominio de la solucin.
Sobr ecar ga. La sobrecarga se aplica al poner el mismo nombre a varios mtodos,
pero cada uno recibe parmetros diferentes. De esta manera, consiste en tomar una
firma existente y pasarle parmetros distintos; la especificacin del parmetro definir
cul mtodo ser el que se enlace en tiempo de ejecucin.
Subcl ase. Ver Clase derivada.
Super cl ase. Ver Clase base.
Ti pi f i caci n. Conocida tambin como verificacin de tipos y se refiere al uso de
datos abstractos. Existen dos tipos de tipificacin: fuerte y dbil. La fuerte detecta los
errores desde la compilacin y la dbil nicamente marca errores en la ejecucin. Java
hace ambos tipos de verificaciones.
Ti po de Dat o, TD. Forma de representacin de un dato. Existen seis tipos de dato
primitivos (nativos, intrnsecos o estndar): ent er o, r eal , l gi co, vaco, car ct er y
cadena.
270
Apndi ces
Ti po de Dat o Abst r act o, TDA. Son objetos, estructuras de datos (extendidas) a las
que se les aplica una caracterstica (son creados, por ejemplo Entero).
Vi si bi l i dad. Es el tipo de permiso que se establece para una clase, sus atributos
y operaciones. La visibilidad puede ser pblica, privada, protegida o amigable. La
visibilidad pblica implica que los mtodos pertenecientes o no a la clase pueden
acceder a lo declarado pblico. La visibilidad privada implica que slo los mtodos
de la clase pueden usar lo privado definido en ella; la visibilidad protegida implica que
slo la misma clase o su descendencia tiene el derecho de usar lo declarado protegido.
Por ltimo, la visibilidad amigable se hace implcita para aquellas clases que estn
almacenadas en el mismo lugar fsico; por ejemplo, en el mismo directorio, as que
pueden compartir informacin entre s.
271
ndi ce Anal t i co
A
Abstraccin de clases, 14, 16, 23
Agregacin, 205, 211, 215, 264
Alcance, 93 (V. tambin Visibilidad)
Algoritmo cualitativo, 17, 101
Aprendizaje basado en problemas, 2, 12, 14
Aprendizaje colaborativo, 12, 14
Aprendizaje por descubrimiento, 11, 14
Aprendizaje significativo, 12, 14
Argumento, 106, 149
Arreglo, 161
asignacin de datos a un, 164
declaracin de un, 162
dimensionamiento de un, 163
acceso a los elementos de un, 165
Asociacin, 23, 125, 205
cardinalidad de una, 207 (V. tambin Multiplicidad)
Atajo, 103
Atributo, 17, 34, 91
esttico, 40
272
Indi ce anali t i co
B
Bandera, 142
Bucle, 133 (V. tambin Estructura iteracin)
Bsqueda binaria, 179, 196
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
C
Campo variable local, 51 (V. tambin Variable local)
Caractersticas, 34
Casos de uso, 16
Ciclo, 133, 142 (V. tambin Estructura de control iteracin)
mi ent r as, 133, 138, 140
par a, 135, 138
r epet i r / hast a, 104, 136, 141
Clase, 32, 264
abstracta, 92, 210, 238, 264
base, 209, 236, 238, 265 (V. tambin Superclase)
Cadena, 70
Car ct er , 63
cuerpo de una, 92
derivada, 209, 236, 265 (V. tambin Subclase)
Ent er o, 59, 75
Fl uj o, 17, 20, 65, 75
final, 237, 265
Lgi co, 64
Mat 54, 71
Mat r i z, 182, 190
Obj et o, 67
Proyecto, 23, 39, 130, 215, 220
Real , 61
Ti poDeDat o, 68
Vect or , 168
Vect or Or denado, 196
Clases de uso comn, 22, 58, 73, 81
Clusula, 119
Comportamientos, 13, 34 (V. tambin Mtodo)
Composicin, 211, 221, 265
273
Lgi ca y Pr ogr amacin or i ent ada a obj et os. Un enf oque basado en pr obl emas
Constructor, 34, 42, 265 (V. tambin Mtodo constructor)
sobrecargado, 44
Contratos, 17
Conversin forzada de tipos, 54
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
D
Dato, 47, 265
Decisin anidada, 120
Dependencia, 42, 209, 221
Diagrama conceptual, 16, 125
Diagrama de clases, 16, 38
Divide y vencers, 23
Documentacin, 17, 131
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
E
Ecuacin de recurrencia, 146
Espacio de nombres, 20, 225 (V. tambin Paquete)
Especializacin, 209
Especificador de acceso, 93 (V. tambin Visibilidad)
Estereotipado, 95
Estereotipo, 210, 238
Estructura de control, 117, 261
decisin, 118, 124
iteracin, 133
secuencia, 118, 261
seleccin, 118
selector mltiple, 118, 120, 133, 261
Estructura de datos, 161
externa, 65
interna, 65
Excepcin, 61, 169, 266
Expresin, 52
274
Indi ce anali t i co
F
Funcin, 95
Firma, 38 (V. tambin Prototipo)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
G
Generalizacin, 209, 267
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
H
Herencia, 209, 212, 237, 264
simple, 236
mltiple, 238 (V. tambin Interfaz)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
I
Identificacin de requerimientos, 128
Identificador, 49
ndice, 168
Interfaz, 238
Interruptor , 142 (V. tambin Bandera)
Iteracin, 133 (V. tambin Estructura de control iteracin)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
M
Matriz, 182
Mensaje, 267
paso de un, 42
Mtodo, 17, 94
analizador, 23, 34
asignarX( ), 35
constructor, 34, 41
cuerpo de un, 96
declaracin de un, 94
definicin de un, 95
esttico, 20, 71, 98
275
Lgi ca y Pr ogr amacin or i ent ada a obj et os. Un enf oque basado en pr obl emas
finalizacin, de un 95, 97
invocacin de un, 97
modificador, 34
nombre del, 95
obtenerX( ), 35
principal, 24, 38, 94, 125
recursivo, 145
Modelo verbal, 17, 115
Multiplicidad, 207 (V. tambin Asociacin)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
O
Objeto, 31, 94
estado de un, 32
Operaciones, 17, 91
Operador, 52
de concatenacin, 125
de resolucin de mbito, 225
nuevo, 42
prioridad de un, 54
Operando, 52
Orden de magnitud, 176
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
P
Palabras clave, 19, 103
Paquete, 23 (V. tambin Espacio de nombres)
cont enedor , 65
si st ema, 20, 65, 74
Paquetes de uso comn, 65
Parmetro, 94, 95, 105
actual, 145
de entrada, 105
de entrada y salida, 105
de salida, 105
formal, 145, 149
Paso de parmetros, 105
276
Indi ce anali t i co
por direccin, 106
por referencia, 106
por valor, 106
Polimorfismo, 246
de subtipado, 247
paramtrico, 247
Postcondicin, 17
Precondicin, 17
Procedimiento, 94
Prototipo, 38
definicin de, 94 (V. tambin Firma)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
R
Realizacin, 212
Recursin
directa, 145
indirecta, 145
Relacin
de agregacin, 205 (V. tambin Agregacin)
de composicin, 211
de dependencia, 209 (V. tambin Dependencia)
de uso, 125
Responsabilidades de las clases, 17
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
S
Selector mltiple, 118 (V. tambin Estructura de control selector mltiple)
Sentencia
retornar, 96
segn, 120
si, 118
Seudo cdigo orientado a objetos, 18
Sobrecarga
de operadores, 21
de mtodos, 106
277
Lgi ca y Pr ogr amacin or i ent ada a obj et os. Un enf oque basado en pr obl emas
Subclase, 209 (V. tambin Clase derivada)
Subprograma, 94
Superclase, 209 (V. tambin Clase base)
Switche, 142 (V. tambin Bandera)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
T
Tabla de requerimientos, 15
Tipo abstracto de datos, 93
Tipo de datos, 47, 269
cadena, 70
car ct er , 63
ent er o, 59
l gi co, 64
primitivo, 48
r eal , 61
Tipo de retorno, 95
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
V
Variable, 49
declaracin de, 51
local, 51
Vector, 168
Visibilidad, 93, 95
privada, 34
pblica, 34
Este libro se proces con
Microsoft Office Word 2007.
Los diagramas de clase de los cuentos,
epgrafes de algunos captulos, se realizaron
con una copia de evaluacin
de VP-UML EE versin 6.3.
El sofware Sismoo fue desarrollado en
la edicin Java2SE 1.6
Medelln-Colombia, octubre de 2009.