lunes, 29 de abril de 2013


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:
  1. Apraez Torres Christiam.
  2. España Rodas Karina.
  3. Lucas Marquez Abel.
  4. Mera Quiroz Junior.
  5. Quiñonez Angulo Francisco.

No hay comentarios:

Publicar un comentario