10.7 Ejemplo práctico: creación y uso de interfaces
En nuestro siguiente ejemplo (fi guras 10.11 a 10.13) analizaremos nuevamente el sistema de nómina de la sección
10.5. Suponga que la compañía involucrada desea realizar varias operaciones de contabilidad en una sola aplica-
ción de cuentas por pagar; además de calcular los ingresos de nómina que deben pagarse a cada empleado, la com-
pañía debe también calcular el pago vencido en cada una de varias facturas (por los bienes comprados). Aunque se
aplican a cosas no relacionadas (es decir, empleados y facturas), ambas operaciones tienen que ver con el cálculo de
algún tipo de monto a pagar. Para un empleado, el pago se refi ere a sus ingresos. Para una factura, el pago se refi ere
al costo total de los bienes listados en la misma. ¿Podemos calcular esas cosas distintas, como los pagos vencidos
para los empleados y las facturas, en forma polimórfi ca en una sola aplicación? ¿Ofrece Java una herramienta que
requiera que las clases no relacionadas implementen un conjunto de métodos comunes (por ejemplo, un método
que calcule un monto a pagar)? Las
interfaces
de Java ofrecen exactamente esta herramienta.
Las interfaces defi nen y estandarizan las formas en que pueden interactuar las cosas entre sí, como las per-
sonas y los sistemas. Por ejemplo, los controles en un radio sirven como una interfaz entre los usuarios del radio
y sus componentes internos. Los controles permiten a los usuarios realizar un conjunto limitado de operaciones
(por ejemplo, cambiar la estación, ajustar el volumen, seleccionar AM o FM), y distintos radios pueden imple-
mentar los controles de distintas formas (por ejemplo, el uso de botones, perillas, comandos de voz). La interfaz
especifi ca
qué operaciones debe permitir el radio que realicen los usuarios, pero no especifi ca cómo deben realizarse
las operaciones. De manera similar, la interfaz entre un conductor y un automóvil con transmisión manual inclu-
ye el volante, la palanca de cambios, el pedal del embrague, el pedal del acelerador y el pedal del freno. Esta misma
interfaz se encuentra en casi todos los automóviles de transmisión manual, lo que permite que alguien que sabe
cómo manejar cierto automóvil de transmisión manual sepa cómo manejar casi cualquier automóvil de transmi-
sión manual. Los componentes de cada automóvil individual pueden tener una apariencia ligeramente distinta,
pero el propósito general es el mismo; permitir que las personas conduzcan el automóvil.
Los objetos de software también se comunican a través de interfaces. Una interfaz de Java describe un
conjunto de métodos que pueden llamarse sobre un objeto, para indicar al objeto que realice cierta tarea, o que
devuelva cierta pieza de información, por ejemplo. El siguiente ejemplo introduce una interfaz llamada
PorPa-
gar
, la cual describe la funcionalidad de cualquier objeto que deba ser capaz de recibir un pago y, por lo tanto,
debe ofrecer un método para determinar el monto de pago vencido apropiado. La
declaración de una interfaz
empieza con la palabra clave
interface
y sólo puede contener constantes y métodos
abstract
. A diferencia de
las clases, todos los miembros de la interfaz deben ser
public
, y las interfaces no pueden especifi car ningún detalle
de implementación, como las declaraciones de métodos concretos y variables de instancia. Por lo tanto, todos
los métodos que se declaran en una interfaz son
public abstract
de manera implícita, y todos los campos son
implícitamente
public
,
static
y
final
.
Buena práctica de programación 10.1
De acuerdo con el capítulo 9 de la Especifi cación del lenguaje Java, es un estilo apropiado declarar los métodos de
una interfaz sin las palabras clave
public
y
abstract
, ya que son redundantes en las declaraciones de los métodos
de la interfaz. De manera similar, las constantes deben declararse sin las palabras clave
public
,
static
y
final
, ya
que también son redundantes.
Para utilizar una interfaz, una clase debe especifi car que implementa (
implements
) a esa interfaz y debe
declarar cada uno de sus métodos con la fi rma especifi cada en la declaración de la interfaz. Una clase que no
implementa a todos los métodos de la interfaz es una clase abstracta, y debe declararse como
abstract
. Imple-
mentar una interfaz es como fi rmar un contrato con el compilador que diga, “Declararé todos los métodos espe-
cifi cados por la interfaz, o declararé mi clase como
abstract
”.
Error común de programación 10.6
Si no declaramos ningún miembro de una interfaz en una clase concreta que implemente (
implements
) a esa inter-
faz, se produce un error de compilación indicando que la clase debe declararse como
abstract
.
Por lo general, una interfaz se utiliza cuando clases dispares (es decir, no relacionadas) necesitan compartir
métodos y constantes comunes. Esto permite que los objetos de clases no relacionadas se procesen en forma
polimórfi ca; los objetos de clases que implementan la misma interfaz pueden responder a las mismas llamadas
a métodos. Usted puede crear una interfaz que describa la funcionalidad deseada y después implementar esta
10.7 Ejemplo práctico: creación y uso de interfaces
439
10_MAQ_CAP_10.indd439
4/19/081:25:21AM