Professional Documents
Culture Documents
Metodologa
La solucin de problemas
Objetivos
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
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 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.
En la figura No. 1 se puede entender que la ClaseP, usa o utiliza los servicios
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.
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:
10
Linea 1-3: es el cuerpo del mtodo que calcula elArea en funcion de la base y
la altura.
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.
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
14
"
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
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:
16
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.
Figura 7
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.
20
Figura 8
22
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);}
}