Вы находитесь на странице: 1из 24

La solucin de problemas 1

Metodologa

La solucin de problemas
Objetivos

Indicar el modelo cliente-proveedor para el enfoque del


modelamiento de la solucin a problemas

Indicar los pasos de una metodologa para la solucin de


problemas mediante el enfoque de objetos en el curso de
Algoritmia y programacin

Utilizarse como guia en el desarrollo del curso de Algoritmia y


Programacin

Introduccin1
Un problema sentido en el desarrollo del curso de Algoritmia y programacin
que se ofrece por parte del escuela de Ingeniera de Sistemas y Computacin es
conciliar el enfoque de objetos con el enfoque de procesos. En tanto el primero
sirve para el modelamiento en general y la elaboracin de los diagramas de
clases, el segundo se utiliza para el desarrollo de los algoritmos asociados con
todos y cada uno de los mtodos de las clases involucradas en la solucin.
Un segundo aspecto es el modelamiento del problema en trminos de los
conceptos asociados con dos tipos de clases fundamentales, denominadas
proveedora aquella que presta sus servicios de computo y la clase cliente o
1. Notas desarrolladas por el profesor Jaime Tafur V, para los cursos de Algoritmia y Programacin y
Programacin Interactiva

La solucin de problemas: Introduccin1

sea aquella que utiliza los servicios que provee la clase proveedora. Con este
esquema la clase cliente es la clase principal o sea aquella que contiene el
mtodo main(String a[]). De esta manera el desarrollo es de carcter
modular permitiendo en las partes avanzadas del curso dejar en las clases
proveedoras las interfaces y las dems clases. Las clases a utilizar por parte
del desarrollador y que toma de paquetes o que ya se encuentran listas para su
uso, se denominaran auxiliares. De esta manera, el modelo de clases detallado,
contemplara la clase cliente, las clases proveedoras y las clases auxiliares.
El tema se desarrolla a partir del enunciado de un problema, el cual se lo
resuelve utilizando los pasos metodolgicos propuestos. Es importante
recordarle a los docentes que, el curso est dirigido a estudiantes de la Facultad
de ingeniera que no son de ingeniera de sistemas, y que el nfasis debe hacerse
por un lado en la metodologa y por el otro al desarrollo de algoritmos,
obviamente sin descuidar los aspectos de la programacin.

La metodologa
Debido a que el objetivo del curso es la solucin de problemas mediante el
enfoque de objetos, desarrollando sus mtodos con algoritmos estructurados y
programando su solucin en un lenguaje de programacin orientado a objetos,
se le prestar adecuada atencin a la presentacin desarrollo y prctica de una
metodologa.
La solucin de un problema a fin de que sea llevada a cabo usando un
computador, no solo implica la solucin del problema en s, sino la presentacin
de su solucin de una manera tal que sea entendible por este y que en el
seguimiento de los pasos o indicaciones se obtenga la solucin esperada.
Enfocar la solucin a un problema con una metodologa, hace que quien est
solucionando el problema ponga su mirada en tres sentidos:

Desde el punto de vista del problema a resolver, obviamente en el


seguimiento de las diferentes etapas, como ya se ha indicado y cuya sntesis
comn establece: formulacin y definicin del problema, establecimiento de
un mtodo de solucin y verificacin de los resultados obtenidos.

Desde el punto de vista del dominio del problema, es decir en los elementos
u objetos que no solo especifican al problema sino tambin orientan su
solucin. En este sentido, la solucin a un problema puede ser uno o mas
objetos, que otro objeto utiliza para aplicar la solucin. El esquema para
establecer el dominio del problema se denomina cliente-proveedor. El cliente
es el encargado de usar la solucin ( de uno o mas objetos), y esta se
constituye en el proveedor del servicio.

La solucin de problemas: La metodologa 3

Desde el punto de vista de quien va a llevar a cabo los pasos de la


solucin, o sea el computador. Requiere que la solucin contemple no solo
instrucciones, sintaxis, semntica, sino estructura general de la lgica de la
solucin, que haga que esta solucin se pueda lograr con la ayuda de la
mquina. Esto implica la escritura de los mtodos de la solucin en lenguaje
algortmico y su conversin a un lenguaje de programacin, adems de
seguir los pasos propios que se llevan a cabo dentro del ambiente del trabajo
en computadores. Claro est que la parte mas difcil radica en la construccin
del algoritmo, secuencia de pasos de la solucin, y no en la conversin al
lenguaje de programacin.

Esto significa que, a partir de los elementos comunes, aplicables a la bsqueda


de solucin prcticamente a cualquier tipo de problema estructurado, se les debe
adicionar los propios que corresponden a la implementacin de esa solucin en
el computador.
Adems de los objetos o instancias de las clases creadas por el programador, se
recurre a clases existentes de las libreras API, disponibles. Por ejemplo para
escribir System.out.println( ), para un botn la clase JButton, para
convertir de cadenas a nmeros reales, Double.parseDouble(), etc.
La metodologa que se presenta a continuacin, desarrollada por el profesor
Jaime Tafur, pretende servir de orientacin y gua en el desarrollo del curso de
Algoritmia y Programacin, ofrecido a programas de la Facultad de Ingeniera,
para la solucin de problemas usando el computador, mediante el enfoque de
objetos.
1. Entender claramente el problema
2. Identificar los objetos del dominio del problema.
3. Establecer y disear un modelo de clases
4. Desarrollar y probar los algoritmos para cada uno de los mtodos de las
clases.
5. Codificar las clases en un lenguaje de programacin y refinar el diagrama
de clases .
6. Ejecutar el programa en el computador, obtener y analizar los resultados.
A continuacin se explica en que consiste cada una de las etapas indicadas.

La solucin de problemas: La metodologa

1. Entender claramente el problema.


Entender el problema, bajo el supuesto de que ha sido formulado correctamente,
es un paso fundamental. Todo el esfuerzo que se dedique a esta fase se ver
recompensado en facilitar la solucin del problema en las siguientes fases.
A fin de ilustrar cada una de las fases de la metodologa para resolver
problemas utilizando el computador se plantea el desarrollo del siguiente
problema:

Calcular el rea de un tringulo, dadas su base y su altura.


Enunciado que por lo simple es claramente entendible. Sin embargo, para tener
certeza que se ha entendido, se debe estar en capacidad de encontrar su solucin
utilizando lpiz y papel. En algunos casos si los clculos son complejos, desde
el punto de vista aritmtico, se puede recurrir a una calculadora, a fin de realizar
las operaciones que aseguren se ha entendido el enunciado del problema.

2. Identificar los objetos del dominio del problema


El modelo a seguir en la metodologa se denominar Cliente-Proveedor, en
razn de que la solucin es usada por alguien para resolver uno o mas
problemas del mismo tipo. Por ejemplo, en la siguiente figura se ilustra que la
solucin a un problema con el enfoque de objetos es uno o mas objetos.

Figura 1 Problema bajo el enfoque de objetos

En la figura No. 1 se puede entender que la ClaseP, usa o utiliza los servicios

La solucin de problemas: La metodologa 5


que le brindan las clase ClaseA, ClaseB, ClaseC y ClaseD. As mismo puede
entenderse que, la clase ClaseP es una clase principal y que las otras clases son
clases base de la solucin, o sea que estas ltimas son la solucin.
En el modelo Cliente-Proveedor se visualizan entonces por lo menos dos clases:
la clase Proveedor (que puede ser mas de una clase y son las clase base ) y la
clase Cliente, la cual denominaremos principal.
En la siguiente forma se tiene que el proveedor se forma de mas de una clase, y
a su vez cada clase puede usar otras clases.

Figura 2 La solucin como un conjunto de clases

En general, la solucin a un problema se puede establecer con dos clases, la


clase cliente y la clase solucin, como se ilustra en la siguiente figura:

La solucin de problemas: La metodologa

Figura 3 La solucin a un problema

En resumen, la identificacin de los objetos del dominio del problema, pasa por
establecer el modelo de solucin, para nuestro caso, el modelo se basa en el
esquema cliente-proveedor, que se ha indicado.
Tomando el caso del problema del clculo del area de un tringulo a partir de su
base y su altura, se le puede pedir a una persona que lo resuelva. A esa persona
se le suministra, el valor de la base y la altura, por ejemplo lo lee de un papel,
del tablero, se le dicta, a fin de que calcule el area del tringulo. Se le pide a la
persona que utilice una calculadora, para realizar la operacin de producto de la
base por la altura y luego realizar la operacin de dividir entre dos. La escena
puede verse segn lo ilustrado en la figura 4.

Figura 4 Dos personas en la solucin del problema

La solucin de problemas: La metodologa 7


Llevado a nuestro modelo Cliente-Proveedor, se observa que la solucin del
problema se lleva a cabo mediante dos objetos: el objeto personaB y el objeto
calculadora. De esta manera, los objetos del dominio del problema son: el
objeto personaB y el objeto calculadora. Sin embargo, tambin podra pensarse
en que los objetos del dominio del problema comprenden a quien requiere la
solucin, en este caso la personaA, quien usa a la personaB, para que calcule el
rea de un tringulo dadas su base y su altura. La personaA sera el cliente y el
proveedor la personaB quien usa la calculadora para hacer las operaciones
aritmticas requeridas.
Claro est, que alguien podra comentar que, para ese problema, la solucin es
mas simple, hacer un producto y luego una divisin, es decir realizando el
proceso de cmputo de dos operaciones aritmticas. Y tiene razn, ese es el
enfoque de procesos, en donde el eje central de la solucin es el proceso. Sin
embargo, bajo el enfoque de objetos, el universo se compone de objetos y la
solucin a un problema es uno o mas objetos. Se deber razonar cono se ha
hecho arriba, an para un problema tan simple como el que se est
desarrollando. Y esta es una manera adecuada para explicar la metodologa.

3. Establecer y disear un modelo de clases


Aqu se procede a la identificacin tanto de atributos como mtodos de cada una
de las clases a las cuales pertenecen los objetos involucrados en la solucin. La
figura No. 5 ilustra, de manera preliminar, las clases involucradas en la solucin.
En este diagrama se puede decir que hay una representacin de los conceptos
asociados con la solucin al problema, puesto que no se han establecido ni los
atributos ni los mtodos:

Figura 5 Diagrama de conceptos

En este diagrama se ha establecido que la clase CalculaArea, rquiere de otra


clase que le brinda la posibiliad de realizar operaciones, o sea que se tiene una
abstraccin del objeto Calculadora.

La solucin de problemas: La metodologa

Ahora se debe tomar cada una de las clases y definirles sus atributos y mtodos.
Se toma inicialmente la clase CalculaArea, para la identificacin de sus atributos
y mtodos:

Identificacin de atributos: si se observa el comportamiento del objeto


personaB, el criterio para la identificacin de sus atributos se basa en
aquello que el objeto debe conocer o que le es suministrado (atributos de
entrada) y lo que esta suministra (atributos de salida). Para este caso a la
clase CalculaArea se le deben ingresar, mediante sus atributos el valor de
la base y la altura, para que devuelva el valor del area del tringulo a travs
del atributo elArea. Esto no excluye la utilizacin de otros atributos
auxiliares, que se pueden considerar como privados, los cuales obviamente
surgirn en el momento de desarrollar los algoritmos de los mtodos.

Identificacin de los mtodos: se puede establecer que para calcular el rea


del tringulo se requiere de un mtodo area(), al cual se le suministran
los valores de la base y la altura, y entrega como resultado elArea.

La clase Calculadora, en el caso de modelarse como tal requiere de por lo menos


de los siguientes atributos y mtodos:

Atributos, los valores para realizar las operaciones aritmticas bsicas.


Entran dos valores val1 y val2 de tipo entero y da el resultado en valorRes.
Aunque los atributos pueden ser de carcter real.

Mtodos: debe disponer por lo menos de mtodos tales como sumar(),


restar(), multiplicar() y dividir().

Ahora se toma la clase UsaCalculaArea, o sea la clase cliente, la cual es una


clase principal ya que esta contiene el mtodo main().

Atributos: aunque puede contener atributos, en su forma simplificada no


requiere.

Mtodos: al ser la clase principal lleva inevitablemente el mtodo main


(), ademas de llevar otros mtodos en caso de ser necesario. Su forma
simple contiene el mtodo main().

En el modelo de la vida real, efectivamente la persona que solicita el clculo del


rea es el objeto principal y quien resuelve el problema o la solucin la clase
base o proveedora. Por simplicidad se ha eliminado la calculadora, asumiendo
que la clase CalculaArea pueda realizar estas operaciones aritmticas, por
ejemplo si los valores son de un solo dgito se pueden hacer de manera directa
sin necesidad de calculadora. El diseo de esta clase junto con la clase anterior
se ilustra en el siguiente Diagrama de Clases del problema:

La solucin de problemas: La metodologa 9

Figura 6 Diagrama de clases

Si se tuviera la calculadora, por ejemplo la clase Calculadora, se agregara al


diagrama anterior como una relacin de uso por parte de CalculaArea.
Para facilidad en el desarrollo de los diagramas de clases, se utiliza el programa
Poseidon el cual se puede descargar del sitio http://www.gentleware.com

4. Desarrollar y probar los algoritmos de cada mtodo


El diagrama de clases anterior indica que se tiene dos mtodos, el mtodo
principal main() en la clase principal, y el mtodo area() en la clase
CalculaArea. Ahora lo que se debe hacer es describir cada uno de los pasos que
se deben realizar para lograr el propsito de cada uno de los mtodos, teniendo
en cuenta tanto la existencia previa de los atributos de entrada como la
generacin de los atributos de salida.
algoritmo mtodo area():
1. inicio
2. elArea= (base*altura)/2.0;
3. termina

algoritmo mtodo main():


1. inicio
2. CalculaArea miArea;
3. miArea = new CalculaArea();
4. miArea.base = 20;
5. miArea.altura = 40;
6. miArea.area();
7. escriba(El area es : +
miArea.elArea);
8. termina

En los algoritmos anteriores se ha utilizado la notacin adecuada haciendo


nfasis en el proceso de calculo, dejando de lado los aspectos de
implementacin, por ejemplo de las entradas y salidas. La prueba del algoritmo
se lleva a cabo siguiendo cada una de las lneas o pasos de ste. Veamos el
seguimiento de estos mediante las explicaciones segn los nmeros de lneas:

En la clase CalculaArea: Cuando se le da control al mtodo area(), este


tiene acceso a los atributos altura y base de tipo entero ( int). Por tanto es
correcto el calculo de elArea segn la formula indicada en la linea 2.

La solucin de problemas: La metodologa

10

Linea 1-3: es el cuerpo del mtodo que calcula elArea en funcion de la base y
la altura.

Para la clase UsaCalculaArea, en su mtodo main():


Aqu debe observarse que la utilizacin de la clase CalculaArea se hace
mediante la creacin de un objeto o instancia de esta clase, denominado
miArea y utilizando el mtodo constructor de la clase CalculaArea. Esta
notacin de creacin y uso de los objetos se conserva en los algoritmos, lo
cual facilita su implementacin en el lenguaje de programacin orientado a
objetos.
Linea 1: para indicar inicio del algoritmo.
Linea 2: Declara al objeto miArea del tipo CalculaArea.
Linea 3: crea el objeto miArea

a partir del mtodo constructor

CalculaArea().

Las dos lineas anteriores se pueden interpretar como disponer para su uso
del objeto miArea a la mano.
Linea 4: le asigna al atributo base del objeto miArea, el valor 20.
Linea 5: le asigna al atributo altura el valor 40.
Linea 6. ejecuta el mtodo area() del objeto miArea. Al terminar la
ejecucin de este mtodo, queda almacenado en el atributo elArea el valor
del rea.
Linea 7: genera una linea de salida en la ventana de terminal, la cual
contiene un cadena de caracteres y el contenido de miArea.elArea, o sea el
valor del area calculada.
Comentarios sobre el lenguaje algortmico
El lenguaje algortmico es un lenguaje para escritura de procedimientos,
mtodos, algoritmos, de soluciones a problemas que van a ser ejecutados por el
computador. Como todo lenguaje, tiene un conjunto de elementos y una
gramtica que define cmo construir las frases u oraciones (instrucciones) del
lenguaje.

La solucin de problemas: La metodologa 11


El concepto de algoritmo pertenece a las nociones fundamentales de la
matemtica. Se entiende por algoritmo la prescripcin exacta sobre el
cumplimiento de cierto sistema de operaciones en un orden determinado para la
resolucin de todos los problemas de algn tipo dado.
Los algoritmos ms sencillos son las reglas con que se cumplen una u otra de
las cuatro operaciones aritmticas en el sistema de numeracin decimal (el
propio trmino de algoritmo procede del nombre del matemtico uzbeko AlJwarizmi quien ya en el siglo IX propuso tales reglas). Por ejemplo, la accin de
la suma de dos nmeros de varias cifras se descompone en una cadena de
operaciones elementales, en las que al realizar cada una de ellas, la persona que
hace la cuenta trata solamente con dos cifras de los respectivos sumandos (una
de ellas puede tener una marca que indica el traslado de una unidad). Estas
operaciones son de dos tipos:
Anotacin de la cifra correspondiente a la suma.
Marca sobre el traslado por encima de la cifra vecina de la izquierda; aqu
la regla prescribe un orden determinado del cumplimiento de estas
operaciones (de derecha a izquierda).
El carcter formal de estas operaciones elementales consiste en que cada una de
ellas puede ser realizada automticamente con una tabla de suma de cifras dada,
una vez para siempre, abstrayndose por completo del sentido de su contenido.
Otra forma de definir algoritmo establece que, es un conjunto finito, ordenado
lgicamente, de las operaciones requeridas para resolver un tipo especfico de
problema. A partir de esta definicin, se puede decir que, algoritmo hace
referencia a proceso, tcnica, pasos para un cambio de estado, procedimiento,
rutina, mtodo. Por otro lado se observa que, el trmino algoritmo tiene en
comn caractersticas con recetas de cocina, instrucciones para elaborar algo,
prescripciones mdicas, indicaciones, recomendaciones y otras, comunes en la
vida diaria, y que consisten en pasos a seguir para lograr un fin. La misma
metodologa propuesta aqu para solucionar problemas en el computador, que
aunque general, es un ejemplo de algoritmo.
Los algoritmos as definidos y con el propsito de su implementacin en el
computador, presentan las siguientes caractersticas:
Finito: un algoritmo debe terminar despus de un nmero finito de pasos, el
cual no necesariamente se conoce de antemano. Esta caracterstica hace
referencia no solamente al nmero de pasos para formular el algoritmo sino
tambin al nmero de pasos u operaciones requeridas para encontrar una
solucin.

La solucin de problemas: La metodologa

12

Definido: cada paso de un algoritmo debe ser definido en forma precisa. Las
acciones se deben especificar rigurosamente y sin ambigedades. Se
sobreentiende que habr un nivel mnimo de definicin en los pasos de un
algoritmo.
El hecho de que un algoritmo sea definido, es lo que permite que ste sea
utilizado por cualquier persona y resuelva as problemas para los cuales el
algoritmo fue creado.
Con entradas: para aadir generalidad a un problema, muchas veces se
plantea en trminos de valores que deben conocerse antes de iniciar la
ejecucin de los pasos del algoritmo.
Estos valores conforman las condiciones iniciales para la aplicacin del
algoritmo, si no se tienen estos valores iniciales, el algoritmo no podr
aplicarse.
Si un algoritmo no tiene entradas, el resultado de su ejecucin ser siempre
el mismo.
Con salidas: un algoritmo debe presentar sus resultados de forma clara al
usuario, los resultados se conocen con el nombre de salidas. Estas salidas
tienen estrecha relacin con las entradas, dependiendo su valor de aquellas.
Efectivo: las operaciones planteadas por el algoritmo deben ser
suficientemente bsicas como para que puedan desarrollarse en una cantidad
finita de tiempo y que resuelva el problema planteado.
En la matemtica se considera resuelta una serie de problemas de un
determinado tipo, cuando se elabora un algoritmo para su resolucin. El
objetivo natural de las matemticas es la creacin de tales algoritmos. Por
ejemplo, en el lgebra hay algoritmos que por los coeficientes dados de una
ecuacin algebraica permiten calcular en forma completamente automtica la
cantidad de diferentes races que tiene esa ecuacin (y de que multiplicidad) y
las propias races, con cualquier grado de exactitud dado de antemano.
Algunos algoritmos se presentan como secuencias de instrucciones aritmticas
para obtener un resultado. Otros como secuencias de pasos a realizar para
resolver el problema.
Puesto que los algoritmos se plantean para ser luego escritos en un lenguaje que
entienda el computador, se ha tratado de que los algoritmos en su presentacin
tengan caractersticas de los lenguajes de programacin Una primera
aproximacin a estas caractersticas es lo que algunos autores denominan
pseudo cdigo.
En este texto se va a manejar el lenguaje algortmico que comparte muchas

La solucin de problemas: La metodologa 13


caractersticas con los modernos lenguajes de programacin, pero que no siendo
tan estricto en su sintaxis, permitiendo as que al aplicar el lenguaje algortmico
en la solucin de un problema, nos ocupemos ms de los detalles del problema
en s, de su anlisis y no del lenguaje de programacin y su implementacin. En
otras palabras, la notacin algortmica es en seudo cdigo, lo cual significa que
en algunas situaciones se utilizaran las instrucciones en el lenguaje de
programacin, por ejemplo en los ciclos, do, while, en la seleccin if then
else, en la seleccin mltiple switch, en la declaracin de instancias y
creacin de objetos.
La forma como se escriben las instrucciones en un lenguaje se conoce como
sintaxis, una solucin escrita en lenguaje algortmico debe ser sintcticamente
correcta, los compiladores de los lenguajes de programacin son los que se
encargan de chequear la sintaxis, cuando la solucin se escribe en el lenguaje de
programacin definitivo.
Lo que hacen las instrucciones, se denomina semntica, la semntica define lo
que se debe hacer, la lgica de la solucin. Debe entenderse que, en algunos
casos es bastante complejo detectar errores semnticos.
Conocido el lenguaje algortmico, sus elementos, y su gramtica es posible
"traducir" la solucin del problema lograda hasta la fase anterior a lenguaje
algortmico. El nivel de dificultad de este paso depende de qu tanto se haya
refinado el plan de solucin o metodologa de la solucin de problemas.
Cualquiera que sea el lenguaje a utilizar los algoritmos usados en la solucin del
problema, debern ser codificados, bien como procesos en el modelo
computacional o bien como mtodos dentro de los objetos en el modelo de
objetos.
Comentarios sobre la prueba de los algoritmos
Una vez desarrollado el algoritmo como se ha indicado antes, es necesario
realizar su prueba, de tal manera que se pueda tener certeza sobre la efectividad
de ste en la bsqueda de la solucin para lo que el mtodo respectivo deba
resolver, por ejemplo en el caso tratado, el clculo del rea.
El algoritmo debe probarse, para ello se propone lo que se conoce como
prueba de escritorio, que consiste en seguir las indicaciones ejecutables del
algoritmo, realizando las operaciones y asignacin de valores a variables, de
clculo y modificacin de valores, de ejecucin de ciclos y selecciones, de
generacin de mensajes y presentacin de resultados. En el caso de tener
aserciones, pre condiciones o post condiciones, se las debe verificar para poder
continuar con la prueba.

La solucin de problemas: La metodologa

14

Debe tenerse en cuenta que en el algoritmo, todas aquellas indicaciones


delimitadas por los smbolos /* y */ son tratadas como comentarios, similar a
los comentarios en C, C++ y Java, por lo tanto no son ejecutables, en el sentido
que no dan lugar a operacin alguna. Su propsito es la documentacin del
algoritmo y brindar mayor claridad sobre sus componentes y lo que stos
realizan.
Debido a que esta prueba se la puede realizar con lpiz y papel, se la denomina
prueba de escritorio. Los problemas tratados en el curso pueden ser
desarrollados de tal manera que su prueba se realice pueda realizar con lpiz y
papel. Para problemas grandes y complejos, al ser descompuestos en
subproblemas, para cada uno de estos se podr realizar la prueba de
escritorio de una manera sencilla, pues se ha descompuesto la complejidad.
Aqu se hace referencia claramente a que un problema complejo , desde el
punto de vista de los mtodos se lo puede descomponer en un conjunto de
mtodos los cuales al ser invocados de manera lgica permitirn la solucin a
un problema o mtodo mas complejo.
En el desarrollo de la prueba de escritorio se recurre a la analoga del casillero
para indicar las posiciones de memoria y los nombres de las variables usadas en
los algoritmos. De esta manera se podrn ilustrar los datos que van tomando
ellas y la manera como stos se transforman a lo largo de la prueba del
algoritmo. A cada variable se le asigna un cajn, que representa una posicin de
memoria, en donde se guarda el valor de la variable. Al cajn se le asigna el
nombre de la variable respectiva, colocndolo en la parte inferior de ste.
Cuando una variable no tiene definido an valor alguno, por ejemplo cuando es
declarada en la especificacin del tipo de dato, se indica el contenido del cajn
de la variable con el smbolo () se utiliza aqu para indicar indefinido, o se
puede utilizar la palabra null. Los siguientes pruebas de solucin para los
ejemplos que se han venido tratando:
Elaborar la prueba de solucin para el algoritmo desarrollado del problema
Calcular y mostrar el valor del rea de un tringulo, dadas su base y altura.
En el desarrollo de la prueba de escritorio se utiliza la figura rectangular, para
representar la posicin de memoria, o cajn en la analoga con el casillero, la
cual se la denomina con el nombre de variable en la parte inferior, y cuyo valor
que toma en cualquier paso del algoritmo se indica dentro del rectngulo. El
smbolo () dentro del rectngulo indica que no se ha asignado valor alguno
a esta variable (est indefinida an).
Para indicar los valores que van tomando las variables y las operaciones a ser
realizadas, se tomarn a continuacin las instrucciones o pasos ejecutables del

La solucin de problemas: La metodologa 15


algoritmo con el nmero de lnea respectiva en este. El problema se inicia por
parte de la clase principal, por lo tanto el seguimiento de los algoritmos se har
en ese orden.
Linea 1-3: en el metodo main() se ha declarado y creado un objeto denominado
miArea, a partir de la clase CalculaArea.
A partir de este evento se dispone de un objeto miArea, con las caractersticas y
comportamiento dado por la clase CalculaArea. Debe observarse que antes de
usar el mtodo area(), se debe asignar valores de los atributos base y altura;
estos atributos han sido declarados en la clase CalculaArea. Estos atributos
deben ser mayores que cero. Se utilizarn por tanto, tres cajones con sus
nombres respectivos, el de los atributos, y cuyo contenido est indefinido hasta
ahora, pues no se les han asignado valores aun, como se ilustra a continuacin:


"

base

altura

elArea

Linea 4-5. se le asigna a los atributos base y altura del objeto miArea, los
valores 30 y 40 respectivamente. Los cajones quedan as:
30

40

base

altura

"

elArea

Linea 6: se ejecuta el mtodo area del objeto miArea. Aqu se le da control al


mtodo area(), del cual se ejecutan las instrucciones en este orden:
Linea 1: para iniciar el mtodo.
Linea 2: calcula el rea segn la formula de la base por la altura sobre dos. Se le
asigna el valor al atributo elArea, quedando los cajones con los siguientes
valores:
30
base

40
altura

600
elArea

Habindose calculado el valor del rea se termina la ejecucin del mtodo area
() y se contina el procesamiento del algoritmo del mtodo main().
Linea 7: los resultados obtenidos de CalculaArea mediante el objeto miArea,
quedan guardados en el atributo elArea, por lo tanto se recuperan mediante el
llamado al objeto seguido de un punto y el nombre del atributo respectivo. En la
terminal saldr:

La solucin de problemas: La metodologa

16

el rea es: 600

Linea 8: para terminar el algoritmo.

5. Programar en Java cada una de las clases.


Una vez se haya elaborado el algoritmo y realizada la prueba de escritorio, se
debe proceder a su codificacin en un lenguaje de programacin. Se entiende
por codificacin el proceso mediante el cual se traducen las instrucciones del
algoritmo a las instrucciones con su estructura y sintaxis propias de dicho
lenguaje.
Ahora, de cara a la implementacin, se debe seleccionar la clase que permita
escribir en la pantalla, por ejemplo en el modo de terminal. Para tal efecto se
debe refinar el diagrama de clases con las nuevas clases: System.out para
escribir con el mtodo println(), y System para terminar en forma normal
el programa mediante su mtodo exit().
Para este primer caso no se va a leer valor alguno, con lo cual no se requieren
las clases para la lectura. De esta manera el diagrama de clases refinado queda:

Los programas se ilustran a continuacin:

La solucin de problemas: La metodologa 17


clase CalculaArea
public class CalculaArea{
int base, altura;
float elArea;
public void area(){
elArea= (base*altura)/2.0;}
}

Y el cdigo para la clase UsaCalculaArea es el siguiente:


clase UsaCalculaArea
public class UsaCalculaArea{
public static void main(String a[]){
CalculaArea miArea = new CalculaArea();
miArea.altura = 30;
miARea.base = 40;
miArea.area();
System.out.println(El area es : + miArea.elArea);
System.exit(0);}
}

6. Ejecutar el programa en el computador y obtener los


resultados
Una vez se ha codificado el algoritmo en el lenguaje de programacin,
utilizando un editor de texto por ejemplo, y generado el archivo respectivo,
siguiendo los procedimientos y medios requeridos por el lenguaje de
programacin, se procede a su ejecucin en un computador. La ejecucin
implica realizar las operaciones indicadas en el programa y generar los
resultados. Cuando se ejecuta la clase UsaCalculaArea se obtiene el siguiente
resultado:
El area es : 600.0
Exit code: 0
No Errors

7. Anlisis de los resultados


Una vez obtenidos los resultados en el paso anterior, se verifican en el sentido
de que correspondan a los valores esperados como solucin del problema, en

La solucin de problemas: La metodologa

18

cuyo caso se podrn disear otras pruebas a fin de tener certeza de que el
algoritmo diseado inicialmente funcionar para diferentes valores. En caso de
encontrarse inconsistencias en los resultados o que no sean satisfactorios, por
ejemplo valores no esperados, o que no arroje resultados, se debe proceder a la
revisin del algoritmo y su lgica, as como tambin la revisin del cdigo del
programa ejecutado. Proceso ste que se repetir cuantas veces sea necesario.
Al ejecutarse los programas respectivos tanto en lenguaje Pascal como en Java,
los resultados obtenidos para los dos problemas desarrollados, corresponden a
los mismos obtenidos durante la prueba de escritorio. Se observa que si se
cumplen las precondiciones, los datos que se suministren producirn resultados
consistentes.

Otro ejercicio resuelto de guia

 Desarrollar una aplicacin que lea N (n<0 y n<20) ternas de nmeros

enteros positivos y calcule para cada terna, la suma de sus elementos. As


mismo la suma de todas las sumas de los elementos de las ternas

1. Entender claramente el problema.


Como ya se ha visto, es tener la certeza que el enunciado se entiende,
suponiendo que este se ha establecido de manera clara, correcta y concreta.
Desde el punto de vista del estudiante esto se comprueba si es capaz con lpiz y
papel, y posiblemente con la ayuda de una calculadora, realizar los clculos y
obtener los resultados, si no todos, si al menos algunos, o dejar planteadas las
operaciones que demuestren que si ha entendido el problema. Esta condicin es
indispensable para poder continuar con la aplicacin de la metodologa.

2. Identificar los objetos del dominio del problema


Aqu se parte de la premisa que la solucin a un problema es un conjunto de
objetos , los cuales en su forma mas general se pueden representar con el
siguiente diagrama de conceptos:

Figura 7

La solucin de problemas: Otro ejercicio resuelto de guia 19

Para el caso del problema a desarrollar, los objetos del dominio del problema
se pueden identificar a partir de su representacin en el mundo real. En este
caso se le pide al estudiante que represente con otra persona el modelo
cliente-proveedor, en el cual una persona le da datos a otra y le solicita que
resuelva el problema, suministrando los resultados solicitados. Ahora bien, a
partir de esa representacin y recurriendo al principio de la abstraccin,
identificar los objetos que forman parte de la solucin. Por ejemplo se le
entregan a la persona proveedora 5 ternas para que haga los clculos del
caso, observando lo que hace y como lo hace. Esta persona puede disponer
de una calculadora si es necesario.

Especficamente supongamos que existe un objeto, una persona con todo el


respeto que nos merece (ya que en el mundo de los objetos todo lo que
existe son objetos, inclusive las personas, el profesor, los estudiantes, etc.),
que permite calcular la suma de los elementos de una terna.
Como se pide adems calcular la suma de las sumas de todas las ternas, esta
operacin tambin la har el proveedor, acumulando la suma de cada una
de las ternas. Sin embargo, debe tenerse en cuenta que, existen mas
soluciones que dan el mismo resultado, por ejemplo, hacer el clculo de la
suma de todas las ternas en la clase cliente, o desarrollar un mtodo
adicional en la clase proveedora para llevar ese acumulado.
En este sentido aparecen por lo menos dos objetos, la solucin al problema
(quien hace los clculos) y la persona que la usa. Se observa la necesidad de
por lo menos dos objetos: la persona que usa la calculadora y la calculadora
en si. Extendiendo estos conceptos al de clase, se dispondr de las dos
clases requeridas para la solucin del problema. Llamemos la primera o la
persona usuaria del servicio, UsaCalculaTernas, o cliente
y a la

La solucin de problemas: Otro ejercicio resuelto de guia

20

calculadora, CalculaTernas, o sea la prestadora del servicio, o servidor.

3. Diseo de las clases del dominio del problema


Aqu se procede a la identificacin tanto de atributos como mtodos de cada una
de las clases involucradas en la solucin. Tomemos inicialmente la clase
CalculaTernas:

Identificacin de atributos: como se ha establecido antes, el criterio para su


identificacin se basa en aquello que la clase debe conocer o que le es
suministrado (atributos de entrada) y lo que esta suministra (atributos de
salida). Para este caso a la clase CalculaTernas le debe entrar tres valores
enteros y entrega como resultado el valor de la suma, as como la suma
total de todas las ternas.

Identificacin de los mtodos: se puede establecer que para calcular la


suma de la terna se requiere de un mtodo, llamado por ejemplo
calculaSumas(). En este mismo mtodo se llevar el acumulado de
todas las sumas de las ternas. Debe tenerse en cuenta que, el mtodo
constructor CalculaTernas() forma parte de los mtodos de las clases y
como tal su utilizacin es vlida.

Ahora se toma la clase UsaCalculaTernas, la cual se denomina principal ya que


esta contiene el mtodo main(). En el modelo de la vida real, efectivamente la
persona es el objeto principal. En esta clase se leen por ejemplo los valores de
las ternas y se le suministran a la clase CalculaTernas mediante sus atributos,
para luego ejecutar el mtodo calculaSumas, hasta que se termine con todas las
ternas a procesar, en cuyo caso se escribirn los resultados obtenidos a partir de
los atributos de la clase CalculaTernas. Todas estas acciones se llevan a cabo en
el mtodo main(). La siguiente figura ilustra el Diagrama de Clases del
problema:

Figura 8

La solucin de problemas: Otro ejercicio resuelto de guia 21

4. Los algoritmos para cada uno de los mtodos


Cada uno de los algoritmos de las clases anteriores se ilustran a continuacin:
mtodo calculaSuma():
1.inicio
2. sumaTerna = val1+val2+val3;
3. sumaTotal+=sumaTerna;
4.termina
mtodo CalcularTernas():
/* es el mtodo constructor de instancias de la clase.
Aqu se utiliza para crear un primer objeto con los
valores 0, 0, 0 para sus atributos */
1.inicio
2. val1=0, val2=0; val3=0;
3. sumaTerna = 0;
4. sumaTotal=0;
5.termina
mtodo main(String a[]):
1.inicio
2.CalculaTernas misTernas;
3.misTernas = new CalculaTernas();
4.lee(numTernas);
5.conTer = 0;
6.repite{
7. lee(valorA);
8. misTernas.val1=valorA;
9. lee(valorB);
10. misTernas.val2=valorB;
11. lee(valorC);
12. misTernas.val3=valorC;
13. misTernas.calculaSumas();
14. escriba(La suma de la terna: + valorA + , +
valorB + , + valorC + da: + misTernas.sumaTerna;)
15. conTer= conter+1;}
16.hasta(conTer == numTernas);
17.escriba(Suma total da + misTernas.sumaTotal);
18.termina

Ahora debe realizarse la prueba de cada uno de los algoritmos, en lo que se


denomina la prueba de escritorio. Tmese por ejemplo los siguientes valores de
tres ternas :
2, 3, 4
4, 5, 6
7, 8, 9

La solucin de problemas: Otro ejercicio resuelto de guia

22

Obviamente se inicia con el mtodo main(), en el cual se declara una instancia


de la clase CalculaTernas, denominada misTernas en la lnea No. 2. En la lnea
No. 3 se crea una instancia de la clase mediante el mtodo constructor
CalculaTernas(),. Luego se se suministra el valor 3, para la variable numTernas
en la lnea No. 4, que corresponde al nmero de ternas a procesar.
En la linea 5 se hace el contador de ternas, conTer igual a 0;
Entre las lineas 6 y 16 se lleva a cabo el ciclo de lectura de los elementos de las
ternas, valorAS, valorB, y valorC, los cuales se asignan respectivamente a los
atributos mediante las instrucciones misTernas.val1, misTernas.val2,
misTernas.val3.
Una vez asignados los valores a los atributos se ejecuta el mtodo
misTernas.claculaSumas(), el cual calcula la suma de los elementos de la terna
en la lnea No. 2 y los almacena en el atributo sumaTerna. As mismo lleva el
acumulado de las sumas de las ternas en sumaTotal, en la lnea No. 3. El valor
de la suma de los elementos de la terna leda se escribe mediante la instruccin
de la linea No. 14. En la lnea No. 15 se incrementa en una unidad el contador
de ternas. Cuando se ha terminado de procesar las ternas, en este caso 3, el ciclo
se termina y se continua con la instruccin No. 17 del mtodo main().
Este ejercicio debe hacerse con lpiz y papel asignando los valores a cada una
de las variables durante el seguimiento de la ejecucin de los algoritmos.

5. Programacin en el lenguaje y refinamiento del


diagrama de clases
En la implementacin de la solucin anterior en el lenguaje Java, se debe
pensar entonces en los componentes grficos, clases u objetos requeridos por su
aplicacin, por ejemplo para entrada/salida de informacin, para conversin,
visualizacin y eventualmente otros. El siguiente diagrama refina el diagrama
de clases visto antes, agregndose le las dems clases requeridas.

La solucin de problemas: Otro ejercicio resuelto de guia 23

Los programas de las dos clases bsicas, son los siguientes:


public class CalculaTernas{
int val1, val2, val3, sumaTerna, sumaTotal;
CalculaTernas(){
val1=1;
val2=2;
val3=3;}
public void calcularSuma(){
sumaTerna= val1+val2+val3;
sumaTotal+=sumaTerna; }
}
}

La solucin de problemas: Otro ejercicio resuelto de guia

24

import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
public class UsaCalculaTernas{
public static void main(String arg[]){
CalculaTernas misTernas;
JTextArea miArea = new JTextArea(10,25);
JScrollPane miScroll = new JScrollPane(miArea);
String entrada, salida= "Resultados Programa
UsaCalculaTernas \n";
int valor1, valor2, valor3, n;
do{
entrada = JoptionPane.showInputDialog(
"Digite el numero de ternas");
n=Integer.parseInt(entrada);}
while(n<1 || n >20);
for(int i = 1; i <= n; i++){
misTernas = new CalculaTernas();
valor1 = Integer.parseInt
( JoptionPane.showInputDialog(
"Primer valor entero" ));
valor2= Integer.parseInt
(JOptionPane.showInputDialog(
"Segundo valor entero"));
valor3= Integer.parseInt
(JOptionPane.showInputDialog(
"Tercer valor entero"));
misTernas.val1= valor1; misTernas.val2 = valor2;
misTernas.val3 = valor3;
misTernas.calcularSuma();
JOptionPane.showMessageDialog(null, "Terna "+i+":
"+valor1+", "+valor2+", "
+valor3+"\nSuma=
"+misTernas.sumaTerna+"\n");
salida+="Terna "+i+": "+valor1+", "+valor2+", "
+valor3+" Suma=
"+misTernas.sumaTerna+"\n";}
salida += "\nLa suma de todas las ternas da :
"+sumaTotal;
miArea.setText(salida);
JOptionPane.showMessageDialog(null,miScroll,
"Calculo suma ternas",
JOptionPane.INFORMATION_MESSAGE);
System.exit(0);}
}