Del 08/04 al 12/04.
Introducción
a programación orientada a objetos en java.
1. Herencia.
La herencia se
la utiliza para copiar todos los métodos y atributos de una determinada clase,
con el fin de poder utilizar, sobrescribir o mejorar dichos métodos y atributos
heredados sin necesidad de volverlos a escribir.
En java la
sintaxis para heredar es la siguiente:
Tipo class
nombre_de_la_clase extends clase_padre{
}
2. Polimorfismo.
Se denomina
polimorfismo en java, cuando dentro de una determinada clase existen varios
métodos que llevan el mismo nombre con la única diferencia de que cada uno de
estos métodos recibe parámetros diferentes.
Un ejemplo de
polimorfismo es el siguiente;
Public class hola_mundo{
public void mensaje(){
system.out.println(“Hola
mundo”);
}
public void mensaje(String mensaje){
system.out.println(mensaje);
}
}
3. Clase.
En java una
clase es un conjunto de atributos y métodos que se crean o elaboran para
resolver un determinado problema u objetivo.
En java la
sintaxis para crear una clase es la siguiente :
Tipo class
nombre_de_la_clase { métodos y atributos
}
4. Objetos.
En java un
objeto es una entidad independiente con sus propios datos y programación, que
se crea a partir de la instanciación de una clase.
5. Instanciación.
La
instanciación se la utiliza en pocas palabras para darle vida a un objeto, todo
esto a partir de una clase creada anteriormente.
La sintaxis
para instanciar una clase es la siguiente:
Nombre_de_la_clase
Nombre_del_objeto = new Nombre_de_la_clase( );
6. Constructor.
El constructor
es un método especial de una clase. El objetivo fundamental del constructor es
inicializar los atributos del objeto que creamos, en java el constructor lleva
el mismo nombre de la clase.
7. Métodos.
Se le denomina
métodos a todas aquellas funciones que se encuentran dentro de una clase,
dentro de una clase cada método realiza una función específica.
8. Atributos.
Se le denomina
atributos a todas aquellas variables globales que se encuentran dentro de una
clase, estas variables pueden ser utilizadas dentro de cualquier método de la
clase.
Clases
Abstractas
Una de las características más útiles de cualquier
lenguaje orientado a objetos es la posibilidad de declarar clases que definen
como se utiliza solamente, sin tener que implementar métodos, son las clases
abstractas. Mediante una clase abstracta se intenta fijar un conjunto
mínimo de métodos (el comportamiento) y de atributos, que permitan modelar un
cierto concepto, que será refinado y especializado mediante el mecanismo de la
herencia. Como consecuencia, la implementación de la mayoría de los métodos de
una clase abstracta podría no tener significado. Para resolver esto, Java
proporciona los métodos abstractos. Estos métodos se encuentran
incompletos, sólo cuentan con la declaración y no poseen cuerpo de definición.
Esto es muy útil cuando la implementación es específica para cada usuario, pero
todos los usuarios tienen que utilizar los mismos métodos. Un ejemplo de clase
abstracta en Java es la clase Graphics:
public abstract class
Graphics {
public abstract void drawLine( int
x1,int y1,int x2,int y2 );
public abstract void drawOval( int
x,int y,int width,int height );
public abstract void drawArc( int x,int
y,int width,
int height,int startAngle,int
arcAngle );
. . .
}
Los métodos se declaran en la clase Graphics, pero el código que ejecutará
el método está en algún otro sitio:
public class MiClase
extends Graphics {
public void drawLine( int x1,int y1,int
x2,int y2 ) {
<código para pintar líneas -específico de la
arquitectura->
}
}
Cuando una clase contiene un método abstracto tiene
que declararse abstracta. No obstante, no todos los métodos de una clase
abstracta tienen que ser abstractos. Las clases abstractas no pueden tener
métodos privados (no se podrían implementar) ni tampoco estáticos. Una clase
abstracta tiene que derivarse obligatoriamente, no se puede hacer un new de una
clase abstracta.
Interfaces
Los métodos abstractos son útiles cuando se quiere
que cada implementación de la clase parezca y funcione igual, pero necesita que
se cree una nueva clase para utilizar los métodos abstractos. Los interfaces
proporcionan un mecanismo para abstraer los métodos a un nivel superior, lo que
permite simular la herencia múltiple de otros lenguajes.
Un interfaz sublima el concepto de clase abstracta
hasta su grado más alto. Un interfaz podrá verse simplemente como una forma, es
como un molde, solamente permite declarar nombres de métodos, listas de
argumentos, tipos de retorno y adicionalmente miembros datos (los cuales podrán
ser únicamente tipos básicos y serán tomados como constantes en tiempo de
compilación, es decir, static y final).
Un interfaz contiene una colección de métodos que
se implementan en otro lugar. Los métodos de una clase son public, static y
final.
La principal diferencia entre interface y abstract
es que un interfaz proporciona un mecanismo de encapsulación de los protocolos
de los métodos sin forzar al usuario a utilizar la herencia. Por ejemplo:
public interface VideoClip {
// comienza la reproduccion del video
void play();
// reproduce el clip en un bucle
void bucle();
// detiene la reproduccion
void stop();
}
Las clases que quieran utilizar el interfaz VideoClip utilizarán la palabra
implements y proporcionarán el código necesario para implementar los métodos
que se han definido para el interfaz:
class MiClase implements
VideoClip {
void play() {
<código>
}
void bucle() {
<código>
}
void stop() {
<código>
}
Al utilizar implements para el interface es como si
se hiciese una acción de copiar-y-pegar del código del interface, con lo
cual no se hereda nada, solamente se pueden usar los métodos.
La ventaja principal del uso de interfaces es que
una clase interface puede ser implementada
por cualquier número de clases, permitiendo a cada clase compartir el interfaz
de programación sin tener que ser consciente de la implementación que hagan las
otras clases que implementen el interface.
class MiOtraClase
implements VideoClip {
void play() {
<código nuevo>
}
void bucle() {
<código nuevo>
}
void stop() {
<código nuevo>
}
Es decir, el aspecto más importante del uso de
interfaces es que múltiples objetos de clases diferentes pueden ser tratados
como si fuesen de un mismo tipo común, donde este tipo viene indicado por el
nombre del interfaz.
Aunque se puede considerar el nombre del interfaz
como un tipo de prototipo de referencia a objetos, no se pueden instanciar
objetos en sí del tipo interfaz. La definición de un interfaz no tiene
constructor, por lo que no es posible invocar el operador new sobre un tipo
interfaz.
Un interfaz puede heredar de varios interfaces sin
ningún problema. Sin embargo, una clase solamente puede heredar de una clase
base, pero puede implementar varios interfaces. También, el JDK ofrece la
posibilidad de definir un interfaz vacío, como es el caso de Serialize, que permite serializar
un objeto. Un interfaz vacío se puede utilizar como un flag, un marcador para
marcar a una clase con una propiedad determinada.
La aplicación java514.java, ilustra
algunos de los conceptos referentes a los interfaces. Se definen dos
interfaces, en uno de ellos se definen dos constantes y en el otro se declara
un método put() y un método get(). Las constantes y los métodos
se podrían haber colocado en la misma definición del interfaz, pero se han
separado para mostrar que una clase simple puede implementar dos o más
interfaces utilizando el separador coma (,) en la lista de interfaces.
También se definen dos clases, implementando cada
una de ellas los dos interfaces. Esto significa que cada clase define el método
put() y el método get(), declarados en un interfaz y hace uso de
las constantes definidas en el otro interfaz. Estas clases se encuentran en
ficheros separados por exigencias del compilador, los ficheros son Constantes.java y MiInterfaz.java, y el contenido de ambos ficheros es el que se
muestra a continuación:
public
interface Constantes {
public final double pi = 6.14;
public final int constanteInt = 125;
}
public
interface MiInterfaz {
void put( int dato );
int get();
}
Es importante observar que en la definición de los
dos métodos del interfaz, cada clase los define de la forma más adecuada para
esa clase, sin tener en cuenta cómo estará definidos en las otras clases.
Una de las clases también define el método show(),
que no está declarado en el interfaz. Este método se utiliza para demostrar que
un método que no está declarado en el interfaz no puede ser accedido utilizando
una variable referencia de tipo interfaz.
El método main() en la clase principal
ejecuta una serie de instanciaciones, invocaciones de métodos y asignaciones
destinadas a mostrar las características de los interfaces descritos
anteriormente. Si se ejecuta la aplicación, las sentencias que se van
imprimiendo en pantalla son autoexplicactivas de lo que está sucediendo en el
corazón de la aplicación.
Los interfaces son útiles para recoger las
similitudes entre clase no relacionadas, forzando una relación entre ellas.
También para declarar métodos que forzosamente una o más clases han de
implementar. Y también, para tener acceso a un objeto, para permitir el uso de
un objeto sin revelar su clase, son los llamados objetos anónimos, que
son muy útiles cuando se vende un paquete de clases a otros desarrolladores.
C++ permite al programador crear nuevas clases como
una subclase de dos o más superclases diferentes, es la herencia múltiple.
Java no permite herencia múltiple. Hay autores que dicen que el interfaz de
Java es un sustituto de la herencia múltiple y hay otros que están en
desacuerdo con eso. Lo cierto es que sí parece una alternativa y los interfaces
resuelven algunos de los problemas de la herencia múltiple, por ejemplo:
- No se pueden heredar variables desde un interfaz
- No se pueden heredar implementaciones de métodos desde un interfaz
- La jerarquía de un interfaz es independiente de la jerarquía de
clases que implementen el mismo interfaz
y esto no es cierto en la herencia múltiple, tal
como se ve desde C++.
ESTUDIANTES RESPONSABLES:
- Apraez Torres Christiam.
- España Rodas Karina.
- Lucas Marquez Abel.
- Mera Quiroz Junior.
- Quiñonez Angulo Francisco.