lunes, 20 de abril de 2009

Java Clases y Objetos

Unas definiciones clásicas, antes de nada.
Clase

Una clase define un miembro real o una entidad abstracta. Es el tipo o clasificación de datos. Una clase define el comportamiento y atributos de un grupo de objetos de características similares.




Clase Coche <--- Nombre de la clase
arrancar, ir, parar, girar <--- Metodos (funciones)
color, velocidad, carburante <--- Atributos (datos)

Objeto
Un objeto es una instancia o variable de una clase. Se dice que pertenece a la clase. Un objeto se distingue de otros miembros de la clase por sus atributos.




Coche.ferrari <--- Nombre del objeto,
Contiene:
arrancar, ir, parar, girar <--- Metodos (funciones)
color, velocidad, carburante <--- Atributos (datos)


Clases Relacionadas

Una clase describe un conjunto de objetos con un comportamiento común y atributos relacionados. Probablemente a estas alturas de la lectura la clase coche resulte ya pesada, así que se hace necesario un cambio de aires y utilizar otra clase de objetos.



Una clase relacionada es Fútbol, que es una especialización de la clase Pelota.
Otra clase relacionada es Equipo_deportivo, que es una generalización de la clase Pelota
Los objetos rara vez caen dentro de grupos completamente distintos. A menudo existe solapamiento entre el comportamiento de los grupos de objetos. Esto se ve incluso en la clase Pelota.

La clase PelotaDeTenis es como la clase Pelota, pero modifica su comportamiento para ser utilizada en el tenis. Por contra, la clase Equipamiento_Deportivo es una generalización de Pelota, pero las características comunes de todos los objetos del campo de juego se encuentran en ella.

La jerarquía mostrada se explota en la orientación a objetos para propiciar la reusabilidad a través de un mecanismo que es la herencia.

Herencia

La herencia es un mecanismo que permite la definición de una clase a partir de la definición de otra ya existente. La herencia permite a un conjunto de clases relacionadas permanecer bajo un único paraguas, de forma que puedan ser consideradas y manejadas colectivamente.

La herencia permite el refinamiento o especialización de una clase existente:

Se pueden definir los miembros
Se pueden ocultar los miembros
Se pueden añadir nuevos miembros
La herencia es la característica clave de los sistemas orientados a objeto para propiciar la reusabilidad:

Es la parte orientada de los sistemas de objetos
Implementa las relaciones es-un (type of) o es-una-clase-de (instance of)




La clase Pelota es la clase padre (o base, o superclase) en la jerarquía de abajo. Sus métodos y atributos son heredados por las clases derivadas (hijas o subclases). Para los objetos de las clases derivadas no es evidente si los métodos son nativos a Rugby o Fútbol, o si han sido derivados de una clase de nivel superior.

Fútbol es una clase de Pelota. Fútbol tiene todos los atributos y operaciones de Pelota. No obstante, la clase Fútbol ha ocultado (hecho privada) la operación desinflar (sacándola del interfaz público) y sobrecargando el método lanzar con una implementación apropiada para el fútbol.



La herencia es una forma de especialización en la que las clases hijas son refinadas para tener el comportamiento y atributos adecuados para la aplicación de que se trate. Al poder las clases derivadas añadir, redefinir y ocultar miembros, la herencia se convierte en reusabilidad programable.

Otra razón para redefinir un método es que la clase base proporcione una implementación no óptima. A la luz del contexto en que se usen, las subclases pueden proporcionar una implementación óptima. Por ejemplo, mejores algoritmos y técnicas de almacenamiento pueden ser posibles en determinadas clases derivadas.


Modelado con Objetos

Los problemas se pueden modelar en los términos específicos del dominio. Una de las ventajas de la aproximación orientada a objetos es que permite que el problema sea representado en términos específicos del dominio. Esto permite a los diseñadores construir modelos que se proyectan directamente en el problema de la aplicación.


Sistema escuela

Clase Libro
Clase Pizarra
Clase Tiza
Clase Diploma
Clase Borrador
Sistema interfaz gráfico de usuario

Clase Pantalla
Clase Ventana_De_Texto
Clase Botón
Clase Barra_De_Desplazamiento
Clase Ventana_De_Dialogo
La ventaja de crear modelos cercanos al dominio es que son fáciles de comprender, hay menor probabilidad de cometer errores y descuidos, y los modelos pueden ser verificados por los usuarios que definen los requisitos.

Clases Abstractas

Una clase abstracta es una descripción incompleta de algo. Un conjunto de operaciones y atributos que por sí solos no describen nada.

Las clases abstractas no pueden ser instanciadas
No es posible crear objetos o variables
Describen partes de objetos
Creadas por generalización, características comunes, pero no completas
Utilizadas en polimorfismo para definir operaciones comunes
Las clases abstractas se utilizan junto con la herencia
Hay mucho interés en torno al polimorfismo. Los métodos pueden ser polimórficos si se aplican objetos de distintas clases para conseguir el mismo significado semántico. Por ejemplo, lanzar puede ser implementado tanto para un objeto PelotaDeTenis como para el objeto Béisbol.

He aquí un ejemplo de clase abstracta. En un sistema de clase GUI (interfaz gráfica de usuario), los métodos para la GUI pueden ser abstraídos para conseguir la definición de múltiples interfaces. Por ejemplo, si se supone que la clase ventana de diálogo es una clase abstracta; esto permite que la implementación de la clase sea manejada por el programador.

No hay comentarios:

Publicar un comentario