Comprender algunos principios básicos de modularización
Se pretende comparar las ventajas y desventajas de diferentes soluciones a un mismo problema para comprender algunos principios básicos de modularización.
El problema a resolver es el siguiente:
Suponga que un pintor desea calcular el costo de mano de obra por pintar una serie de paredes.
Para tal efecto solicita la información de la cantidad de paredes con el fin de calcular el área de las mismas.
El costo de mano de obra se calcula en colones por metro cuadrado.
import javax.swing.*; public static void main(String argv[]){ |
import javax.swing.*; public class Pintor2 { private void preguntarCostoPorMetroCuadradoDePintura(){ |
La solución 2 tiene un mayor nivel de modularización :
Existe programación por objetos, existe una instancia de Pintor, y el
pintor es quien presupuesta.
Hay una separación clara en cuanto a funcionalidad entre las acciones
privadas y públicas que lleva a cabo el Pintor.
Existen acciones donde el Pintor interactúa con el usuario (aspectos
de interfaz externa a la clase) para solicitar o presentar información,
y otras donde lleva a cabo cálculos (aspectos propios de
la aplicación). Incluso se podría modularizar aún más
eliminando esta interacción del usuario de la clase Pintor. (ver Solucion
3)
En este caso si se desea cambiar un aspecto específico del programa
se puede ir directamente al método responsable de llevar a cabo tal acción
sin tener que preocuparse por la independencia con respecto a las demás
acciones.
Si se deseara restar el tamaño de las ventanas y puertas del área
total a pintar, esto solo implica modificar el método calcularAreaTotal
y esto no afecta en lo absoluto al método calcularCostoTotal , o si hay
un cambio en el cálculo del costo no hay que revisar el cálculo
del área ya que son módulos separados.
Es importante remarcar claramente la diferencia entre cuales métodos
son públicos y cuales son privados.
En esta última solución se han separado los aspectos relacionados con la interacción entre el usuario y el pintor (interfaz de usuario), de los aspectos asociados a la lógica de la aplicación. Ahora si se desea hacer cualquier otro tipo de interfaz (con componentes gráficos o vía páginas HTML) el Pintor sería completamente reutilizable ya que todas las funciones están concentradas en módulos no redundantes e independientes y no se mezclan varias funciones diferentes (ni se traslapan estos fragmentos de código) con los que están presentes en otros métodos.
Los métodos que se pretende que sean accesibles para "cualquiera" desde fuera de la clase deben ser públicos. Los privados serán aquellos que solo se crear para uso interno en la clase con el fin de modularizar.
Por ejemplo: No es lo mismo pedirle a una persona 5000 colones prestados, y
que esta persona en lo privado tome la decisión de prestar
el dinero y luego vaya al cajero automático y los saque de su cuenta
y lo entregue a quien se lo solicitó, que pedirle a una persona que nos
de acceso a su clave del cajero automático y a su tarjeta. Lo segundo
es un claro ejemplo de un método privado.
El sacar dinero del cajero es un método privado que la persona
puede hacer en varias circunstancias pero el pedir prestado es un
método público al que cualquiera puede recurrir. Lo que no implica
que se le vaya a prestar, en todo caso a nivel privado se decide si se
le presta o no a esa persona.