Java para programadores. De la subrutina al método

UNA SUBRUTINA CONSISTE EN UN GRUPO DE INSTRUCCIONES  que desarrollan un trabajo y que han sido escritas juntas y se les ha dado un nombre. El fraccionar permite tratar tareas que pueden ser muy complicadas, de una forma relativamente sencilla. En vez de tener que preocuparse por los muchos y muchos pasos que el ordenador debe dar para realizar una tarea, solo necesita acordarse del nombre de la subrutina. Cuando quiere que el ordenador realice un trabajo, solo ha de llamar a la subrutina. Las subrutinas son una de las mejores herramientas para resolver problemas complejos.

Aveces a la subrutina se le considera como una “caja negra” porque no se sabe lo que contiene (o, para ser mas precisos, normalmente no se quiere saber lo que contiene porque entonces, se encontraría con la complejidad que la subrutina esta ocultando).

Naturalmente, una “caja negra” que no pueda interactuar con el resto del mundo, no sirve para nada. La “caja negra” necesita algún tipo de interface con el resto del mundo, que permita interactuar con lo que hay dentro de la caja y aprovechar la salida.

Una caja negra física, puede tener botones en el exterior, que se puedan pulsar, diales que se puedan mover y conectores que permitan pasar información hacia dentro y hacia fuera. Puesto que la idea es esconder la complejidad, y no crearla, tenemos la primera regla de las cajas negras:

La interface con una caja negra, debe ser relativamente directa, bien definida, y fácil de entender

¿Existe algún ejemplo de caja negra en la vida real?. Si; estamos rodeados por ellas. Su televisor, su coche, su vídeo, su nevera,…Puede encender y apagar el televisor, cambiar canales y ajustar el volumen usando los elementos de su  interface — botones, mandos remotos, no se olvide del enchufe de corriente — y todo eso lo puede hacer sin entender absolutamente nada acerca de como trabaja.

Lo mismo ocurre con el vídeo, aunque si las historias acerca de las dificultades de las personas para ponerlo en hora son ciertas, quizás esté violando la regla de una interface sencilla.

Ahora: la caja negra tiene cosas en su interior — en la subrutina, el código para realizar una tarea, en el televisor, toda su electrónica–. Lo que hay dentro de una caja negra, se llama implementacion, y la segunda regla es:

Para utilizar una caja negra, no es necesario conocer absolutamente nada de su implementacion; solo es necesario conocer su interface.

De hecho, es perfectamente posible el cambiar la implementacion sin necesidad de cambiar el comportamiento de la caja ,de tal forma que desde fuera todo parezca igual. Por ejemplo, cuando se cambió el interior del televisor, que estaba construido con válvulas de vacío, y se utilizaron transistores, el usuario no necesitó conocer nada mas, nada cambió para él.

De forma semejante, es posible el reescribir el interior de una rutina, para usar mas eficientemente el código, por ejemplo, sin que afecte en nada al programa que usa la subrutina.

Naturalmente que para que existan las cajas negras, primeramente es necesario que alguien las diseñe y realice su implementacion.

La idea de trabajar con cajas negras, aporta ventajas tanto al constructor de ellas, como a su usuario. Después de todo, la caja negra puede usarse en un numero ilimitado de situaciones distintas.

El implementador (programador que la escribe), no necesita conocer nada sobre los sitios en donde se usaran. El implementador sólo necesita asegurarse que la caja realizará correctamente el trabajo que se le asigne y que la interface se relaciona correctamente con el resto del mundo. Esta es la tercera regla de las cajas negras:

El implementador de la caja negra, no necesita conocer nada acerca del sistema completo en donde se utilizará la caja.

De esta forma, la caja negra divide al mundo en dos partes: la interior(implementacion) y la exterior. La interface es la frontera que conecta ambas partes.


A propósito de todo esto, no debe pensar que la interface es, unicamente, una conexión física entre la caja y el resto del mundo.

La interface también incluye las especificaciones sobre qué hace la caja y cómo se controla usando los elementos de la interface física.

No basta con decir que la TV tiene un interruptor para ponerla en marcha, necesita especificar también, cual es el interruptor que sirve para encenderla y apagarla.

Para poner todo esto en términos informáticos, la interface de una subrutina tiene un componente semántico y otro sintáctico. La parte sintáctica de la interface, le dice que tiene que escribir para poder llamar a la subrutina. El componente semántico, especifica exactamente que tarea realiza la subrutina.

Para escribir correctamente un programa, necesita conocer las especificaciones sintácticas de la subrutina.

Para entender el propósito de la subrutina y que su uso sea efectivo, necesita conocer las especificaciones semánticas de la subrutina.

Para referirme a las dos partes de la interface — sintáctica y semántica– de forma conjunta, utilizare la palabra contrato de la subrutina.

El contrato de una subrutina dice esencialmente:

“Esto es lo que tiene que hacer para usarme, y esto es lo que puedo hacer por usted.Garantizado”.

Cuando escribe una subrutina, el comentario que escribe sobre ella, ha de conseguir que  el contrato quede muy claro.(Debo admitir que en la practica, los contratos de las subrutinas a menudo son inadecuados, para desesperación de los programadores que las deben usar)

En los siguientes articulos, pasare de las ideas generales sobre las cajas negras y las subrutinas en general, a las especificaciones para escribir subrutinas en Java, y las empezaré a llamar por su nombre ‘metodos‘.

Pero conserve en mente la idea general y los principios. Hay razones para que existan los metodos, y hay normas para usarlas. Todo esto deberá estar especialmente claro en la ultima sección del capitulo, donde explicare el empleo de los metodos para el desarrollo de un programa.

Acerca de Miguel Garcia

Programador, Desarrollador web, Formador en distintas areas de informatica y director de equipos multidisciplinares.
Esta entrada fue publicada en Formacion, Java y etiquetada , . Guarda el enlace permanente.

2 respuestas a Java para programadores. De la subrutina al método

  1. Pingback: Java para programadores. Diseño de programas y subrutinasRecursos para formacion

  2. Pingback: Java - Un resumen organizado....o no.Recursos para formacion

Deja un comentario

Este sitio usa Akismet para reducir el spam. Conoce cómo se procesan los datos de tus comentarios.