¡Recomienda este blog!

miércoles, 10 de marzo de 2010

Mi comienzo con JAVA.

Hace relativamente poco que me he adentrado de lleno en el mundo de la programación orientada a objetos y dando salida a mis inquietudes voy a realizar una especie de resumen para hacer incapié en apectos que son desconocidos en programación imperativa.

Cabe destacar la gran importancia del concepto de polimorfismo y herencia en lenguajes como Java. Por este hecho voy a centrar esta pequeña reflexión en estos aspectos.

Por supuesto se admiten todo tipo de críticas constructivas.

Cuando comienzas a estudiar un lenguaje orientado a objetos como en este caso lo es Java, desde mi punto de vista lo primero que hay que tener claro es que es una clase, objeto etc. A continuación vamos a realizar una definición informal para centrar un poco nuestro estudio. Y seguidamente daremos definiciones breves sobre conceptos de POO.

DEFINICIÓN DE CLASE

Descripción abstracta de un grupo de objetos (Instancia de la clase ), cada uno de los cuales se diferencia por un estado específico y porque es capaz de realizar una serie de operaciones,es decir, podemos denominar clase de una forma incorrecta pero que sirva de aclaración, como una estructura en C.

• Plantilla o patrón que describe una colección de objetos similares, siendo el objeto una instancia de la clase.
• Define un nuevo tipo de datos
• En general, consta de

< style="color: rgb(51, 51, 255);">( Y a veces de un Constructor,
que es un método que inicia un objeto inmediatamente después de su creación. De esta forma nos evitamos el tener que iniciar las variables explícitamente para su iniciación. )

Los datos definidos en una clase se llaman variables de instancia.
• En general, las variables de instancia son modificadas por los métodos definidos en su clase.
• Los datos de un objeto o instancia son propios y están separados de los datos de otro objeto.
• Sólo se especifica un método main en la clase que sea punto de partida del programa.
• Las applets ( Applet: Aplicacion java para entorno web) no utilizan método main.
• La declaración de la clase y la implementación de los métodos se almacenan en el mismo fichero.

HERENCIA.


La herencia permite establecer una relación jerárquica entre las clases (y por tanto entre los objetos) permitiendo la reutilización de las características (atributos y métodos) ya definidas para ciertas clases.

La herencia supone una clase base (superclase)y una jerarquía de clases que contiene las clases derivadas (subclases) que heredan el código y los datos de la superclase, añadiendo su propio código y datos e incluso cambiando los de la superclase (anulación).

CÓMO HEREDAR EN JAVA.

Se trata de jerarquizar las diversas clases que componen el sistema, de forma que las clases situadas en la parte inferior de la jerarquía hereden las características
(métodos y atributos) de las clases situadas en los niveles superiores de la jerarquía Consideremos un sistema de control de tráfico en el que se incluye un subsistema para modelar vehículos de cualquier tipo:

Ejemplo:
1. Identificar las clases relevantes del modelo.

2. Abstraer las características comunes a los distintos objetos agrupándolas dentro de una clase para reutilizarla por herencia en la construcción de nuevas clases.

• Creamos la superclase Vehículo que contiene las características comunes a todos los vehículos.
• Creamos las subclases Vehículo con motor que hereda la clase Vehículo y añadiendo características propias.

< style="font-weight: bold;">UPCASTING


• Consiste en asignarle a una variable referencia de una clase una referencia a un objeto perteneciente a una subclase de esta.
• La subclase puede ser inmediata o no.
• Cuando se realiza upcasting, sólo se puede tener acceso a aquellos miembros definidos en la superclase.

Se utiliza para invocar al constructor de la superclase o para hacer referencia a los miembros definidos en la superclase.

Automovil(int c, int nr, int p, int cil, int np) { super(c,nr,p,cil); numPuertas=np; }

Los atributos de la subclase y la superclase están en la misma dirección de memoria. Si el constructor de la superclase está sobrecargado, el tipo y número de argumentos pasados a super deciden cual es el constructor utilizado.

• Sólo se puede utilizar super en el constructor de la subclase.
• Debe ser la primera línea en el constructor de la subclase.
• Si no se utiliza super en el constructor de la subclase, se invoca al constructor por defecto (nombreDeSuperclase()) por lo que debe estar definido.
• super se puede utilizar para acceder a los atributos y métodos definidos en la superclase inmediata: super.miembro HERENCIA

MULTINIVEL

• Se pueden construir jerarquías de clases que pueden contener tantos niveles de herencia como se desee.
• En este caso cada subclase hereda todas las características encontradas en todos sus superclases.
• Cuando se construye un objeto de una subclase, Java inserta automáticamente una llamada al constructor de la superclase para asegurar una correcta inicialización del objeto de la subclase.

EL ESPECIFICADOR DE ACCESO protected

El especificador de acceso protected permite hacer visibles los miembros de una superclase a todas aquellas subclases definidas en un paquete distinto al de la superclase, quedando ocultos al resto de clases externas al paquete de la superclase, aunque visible a cualquier clase del paquete. Por tanto tienen acceso a un miembro protected:

< style="font-weight: bold;">SOBREESCRITURA DE MÉTODOS Y LIGADURA DINÁMICA


• En dos clases ligadas por una relación de herencia se puede sobrescribir los métodos.
• La implementación del método puede cambiar en función de la clase en la que aparezca definido.
• Este mecanismo permite llevar a la práctica el concepto de polimorfismo
• Enlazado: Proceso de conexión entre la llamada a un método y su implementación.

< style="font-weight: bold;">CLASES ABSTRACTAS

Las clases abstractas son clases que se pueden definir de manera incompleta, es decir podemos definir métodos (abstractos) postergando su implementación.
Declaración de una clase abstracta:

abstract class Nombre { // cuerpo de la clase }

Declaración de un método abstracto:

abstract tipo nombre (parámetros);

Propiedades:
• No se puede instanciar, aunque si se puede referenciar.
• Si una clase contiene al menos un método abstracto, debe ser declarada como abstracta.
• Puede tener constructores.
• Puede no contener métodos abstractos.
• No se pueden declarar métodos estáticos abstractos ni constructores abstractos.
• Las subclases, o son abstractas o implementan todos

LA CLASE Object .

• Es una clase especial definida por Java que es la superclase de todas las clases (tanto las definidas por el programador como las del propio lenguaje)
• Es una clase sin atributos que contiene un conjunto de métodos heredados por todas las clases.
• Cualquier variable referencia de tipo Object puede referenciar a un objeto de cualquier otra clase (incluyendo matrices, dado que son definidas como objetos).

PASO DE OBJETOS POR VALOR

• En Java cualquier parámetro se pasa por valor ( cosa que en C no ocurre ): tanto primitivas como variables referencia a objeto.
• Al pasar referencias a objetos, la modificación de estos en el método afecta también al objeto fuera del método. Dado que se pasamos una referencia a objeto, de hecho siempre los objetos se pasan por referencia.
• Para pasar tipos simples por referencia se utiliza un objeto asociado a las mismas.
• Para simular el paso de objetos por valor pasamos como parámetro una copia del objeto.
Utilizamos el método clone de la clase Object heredado por todas las clases.
• Para evitar que todos los objetos puedan ser clonados por defecto es declarado protected.

¿Que hacer para clonar?:

1. Sobreescribir el método clone haciéndolo público para ser accesible desde cualquier clase.
2. Implementar la interfaz vacía Cloneable que nos permitirá averiguar si un objeto puede ser
clonado: S Preguntando si una variable objeto es una instancia de Cloneable if (exc1
instanceof Cloneable) { ..... } S Mediante la excepción CloneNotSupportedException
3. Realizar un casting sobre el valor devuelto por clone.

JERARQUIZACIÓN POR AGREGACIÓN

• Consiste en encapsular un conjunto de objetos dentro de una clase, creando nuevas clases.
• Para clonar clases compuestas hay que clonar, en el método clone() del objeto compuesto, los objetos encapsulados utilizando a su vez el método clone() de cado uno de estos objetos.
• Es necesario asegurarse mantener las referencias a los objetos compuestos para poder a su vez
clonar estos objetos.

0 comentarios:

Publicar un comentario