Vous êtes sur la page 1sur 31

UNIDAD 4

IMPLEMENTACION DE PROPIEDADES DE LOS OBJETOS JAVA


Analista Programador Universitario Universidad Nacional de Jujuy

JTP Jorge R. Mendoza

Implementacin de propiedades de los objetos Java Contenido


Encapsulacin- Herencia - Polimorfismo Sobrecarga de Mtodos Aspectos del Lenguaje Las Clases Abstractas Las Interfaces

Encapsulacin - Herencia - Polimorfismo Sobrecarga de Mtodos Aspectos del Lenguaje Las Clases Abstractas Las Interfaces

Encapsulacin: En POO, se denomina encapsulamiento al ocultamiento del estado, es decir, de los datos miembro, de un objeto de manera que slo se puede cambiar mediante las operaciones definidas para ese objeto. Una correcta encapsulacin de atributos implica que los atributos de una clase no pueden ser accedidos en forma directa, para ello deben existir operaciones que realicen las acciones de modificar o leer los valores de los atributos.

Encapsulacin - Herencia - Polimorfismo Sobrecarga de Mtodos Aspectos del Lenguaje Las Clases Abstractas Las Interfaces

El Diagrama de Clases UML ofrece un mecanismo denominado VISIBILIDAD determinada por un conjunto de modificadores de acceso:

- Los atributos y operaciones de la clase slo estn disponibles para las operaciones de la misma clase. + Los atributos y operaciones de la clase estn disponibles para las operaciones de cualquier clase independientemente del paquete en el cual se encuentren. # Los atributos y operaciones de la clase estn nicamente disponibles para las operaciones de la misma clase y las operaciones de sus subclases

Encapsulacin - Herencia - Polimorfismo Sobrecarga de Mtodos Aspectos del Lenguaje Las Clases Abstractas Las Interfaces

Entonces en nuestro anlisis de la encapsulacin de atributos lo correcto es definir lo que se denominan PROPIEDADES. Las propiedades simplemente constituyen el conjunto de: el atributo a encapsular (por lo que su modificador es privado) y sus operaciones para leer y modificar el atributo (los cuales deben poseer el modificador pblico).

Encapsulacin - Herencia - Polimorfismo Sobrecarga de Mtodos Aspectos del Lenguaje Las Clases Abstractas Las Interfaces

Ejemplo 1: Una clase Persona con sus atributos encapsulados, con el esquema de propiedades. Ejemplo 2: Una clase alumno que hereda de la clase Persona, los atributos de la clase persona no usan el esquema de propiedades, en el sentido que la clase Alumno puede modificar o eliminar en forma directa los atributos dni y nombre porque estn definidos como protegidos. Por ejemplo el mtodo mostrarDatos() puede leer en forma directa los atributos dni y nombre sin necesidad de usar el mtodo getDni() y getNombre() respectivamente. Problema de este esquema: si cambiamos el nombre del atributo dni a docUnico esto provocar que tengamos que actualizar la operacin mostrarDatos de la subclase Alumno. Por lo tanto se recomienda siempre usar el esquema de las propiedades

Encapsulacin - Herencia - Polimorfismo Sobrecarga de Mtodos Aspectos del Lenguaje Las Clases Abstractas Las Interfaces

En JAVA existen 4 modificadores de acceso para implementar la visibilidad de los atributos y mtodos de objetos:

- Los atributos y mtodos de la clase slo estn disponibles para las operaciones de la misma clase. Es igual al modificador de UML. En JAVA se define con la palabra private + Los atributos y operaciones de la clase estn disponibles para las operaciones de cualquier clase independientemente del paquete en el cual se encuentren. Es igual al modificador de UML. En JAVA se define con la palabra public # Los atributos y operaciones de la clase estn nicamente disponibles para las operaciones de la misma clase y, las operaciones de sus subclases. Pero tambin permite que las clases en el mismo paquete puedan acceder a esos atributos. Es decir que difiere del modificador de UML. En JAVA se define con la palabra protected
Default Los atributos y mtodos de la clase estn disponibles para todas las clases ubicadas en el mismo paquete. Es el valor por defecto de JAVA, no requiere que ningn operador, es decir que si no utilizamos alguno de los definidos anteriormente JAVA asume que el modificador es default

Encapsulacin - Herencia - Polimorfismo Sobrecarga de Mtodos Aspectos del Lenguaje Las Clases Abstractas Las Interfaces

La siguiente tabla muestra una relacin de la visibilidad de los atributos:

Encapsulacin - Herencia - Polimorfismo Sobrecarga de Mtodos Aspectos del Lenguaje Las Clases Abstractas Las Interfaces

Existen 2 tipos de herencia: Herencia Simple y Herencia Mltiple.

Encapsulacin - Herencia - Polimorfismo Sobrecarga de Mtodos Aspectos del Lenguaje Las Clases Abstractas Las Interfaces

La herencia en JAVA se implementa usando la palabra reservada extends.

Esto permitir el uso de los atributos y mtodos de la superclase segn como hayamos definido la visibilidad de los mismos.

Encapsulacin - Herencia - Polimorfismo Sobrecarga de Mtodos Aspectos del Lenguaje Las Clases Abstractas Las Interfaces

La sustitucin de operaciones: Sobre escritura de JAVA

Recordemos que el concepto de herencia permite la especializacin de operaciones y la agregacin de nuevos atributos, propios de la subclase. Para lograr la sustitucin lo que debemos hacer es definir en la subclase una operacin con el mismo tipo de retorno y argumentos que recibe (la misma firma), el mismo nombre (la misma semntica).

En JAVA si queremos utilizar la funcionalidad definida en la superclase desde un mtodo que lo sustituy en la subclase podemos usar el operador super.

Encapsulacin - Herencia - Polimorfismo Sobrecarga de Mtodos Aspectos del Lenguaje Las Clases Abstractas Las Interfaces

La herencia de constructores

Un constructor es la estructura que utiliza JAVA para crear objetos en tiempo de ejecucin. Los constructores de una clase deben definirse con el mismo nombre de la clase sobre los que se aplica y no tienen tipo de retorno. En general se definen como public pero pueden llegarse a definir con otro tipo de modificador de acceso si lo requieren. Su invocacin se hace usando el operador new. Se puede invocar el constructor de una superclase cuando crea una subclase mediante el operador super().

Encapsulacin - Herencia - Polimorfismo Sobrecarga de Mtodos Aspectos del Lenguaje Las Clases Abstractas Las Interfaces

Se puede invocar el constructor de una superclase cuando crea una subclase mediante el operador super().

En la subclase hemos definido su constructor que recibe como parmetros lu y nombre. Como ya poseemos en Persona un constructor para asignar el nombre al atributo nombre podemos reutilizarlo por medio de herencia usando el operador super(). Observe que es requisito que si va a existir el operador super() debe ser la primera lnea de cdigo dentro del constructor.

Encapsulacin - Herencia - Polimorfismo Sobrecarga de Mtodos Aspectos del Lenguaje Las Clases Abstractas Las Interfaces

Polimorfismo:

En JAVA el polimorfismo se concibe como un polimorfismo limitado.

Encapsulacin - Herencia - Polimorfismo Sobrecarga de Mtodos Aspectos del Lenguaje Las Clases Abstractas Las Interfaces

Ejemplo de Polimorfismo:

Encapsulacin - Herencia - Polimorfismo Sobrecarga de Mtodos Aspectos del Lenguaje Las Clases Abstractas Las Interfaces

Sobrecarga de Mtodos:

Bsicamente nos permite poseer dentro de una clase mtodos con el mismo nombre. Para que JAVA no de error de poseer mtodos con el mismo nombre (misma semntica), lo que vara es la lista de parmetros (firma diferente).

Encapsulacin - Herencia - Polimorfismo Sobrecarga de Mtodos Aspectos del Lenguaje Las Clases Abstractas Las Interfaces

Las clases abstractas:


Son clases que no se pueden instanciar. Es decir no se puede usar el operador new para crear un objeto de la clase. Por lo tanto no debe poseer un constructor. Son el resultado de un nivel muy alto de abstraccin, que solo sirve para acumular atributos y operaciones que son compartidas por sus subclases. Diremos que en el anlisis ya no pueden existir una superclase mas alta en el nivel de jerarqua.

Encapsulacin - Herencia - Polimorfismo Sobrecarga de Mtodos Aspectos del Lenguaje Las Clases Abstractas Las Interfaces

Ejemplo de clase abstracta:

InventoryItem es una superclase abstracta, posee atributos y operaciones que usan Movie y Vcr. No existe otra clase que pueda estar por encima de InventoryItem. Adems resulta que esta clase es tan general que nosotros siempre crearemos clases de Movie o Vcr, no de InventoryItem.

Encapsulacin - Herencia - Polimorfismo Sobrecarga de Mtodos Aspectos del Lenguaje Las Clases Abstractas Las Interfaces

Para crear clases abstractas usamos la palabra reservada abstract

Encapsulacin - Herencia - Polimorfismo Sobrecarga de Mtodos Aspectos del Lenguaje Las Clases Abstractas Las Interfaces

Las Clases abstractas pueden poseer mtodos abstractos. Los mtodos abstractos son mtodos declarados pero cuya implementacin se realiza en las subclases de la clase abstracta.

Encapsulacin - Herencia - Polimorfismo Sobrecarga de Mtodos Aspectos del Lenguaje Las Clases Abstractas Las Interfaces

Lo que se hace es declarar el mtodo en la superclase y definir el cdigo del mismo en las subclases. Observe que se ha declarado la Clase Persona de forma abstracta, y se ha creado un mtodo abstracto mostrar() (se antepone la palabra abstract y adems finaliza con un ;)
Con esto usted indica que todas sus subclases deben implementar este mtodo (definirlo y colocar el cdigo tal como lo habamos venido haciendo hasta ahora). Una clase abstracta puede tener mtodos que NO sean abstractos por ello es que se requiere la palabra abstract en la definicin.

Persona p=new Persona();

//ESTO NO ES VALIDO
//PORQUE ES ASBTRACT

Encapsulacin - Herencia - Polimorfismo Sobrecarga de Mtodos Aspectos del Lenguaje Las Clases Abstractas Las Interfaces

Las interfaces en Java son una coleccin de mtodos abstractos y propiedades. En ellas se especifica qu se debe hacer pero no su implementacin.

El uso de interfaces proporciona las siguientes ventajas:


Organizar la programacin. Obligar a que ciertas clases utilicen los mismos mtodos (nombres y parmetros). Establecer relaciones entre clases que no estn relacionadas.

Encapsulacin - Herencia - Polimorfismo Sobrecarga de Mtodos Aspectos del Lenguaje Las Clases Abstractas Las Interfaces

Java proporciona dos palabras reservadas para trabajar con interfaces: interface e implements. Las interfaces son definiciones similares a las clases abstractas con la diferencia de que:

Todos sus mtodos son abstractos Todos sus atributos son constantes de clase (o sea son definidas como static y final) por lo tanto no puede tener atributos de instancia.

Encapsulacin - Herencia - Polimorfismo Sobrecarga de Mtodos Aspectos del Lenguaje Las Clases Abstractas Las Interfaces

Una clase solamente puede derivar extends de una clase base, pero puede implementar varios interfaces. Los nombres de los interfaces se colocan separados por una coma despus de la palabra reservada implements.

Encapsulacin - Herencia - Polimorfismo Sobrecarga de Mtodos Aspectos del Lenguaje Las Clases Abstractas Las Interfaces

Mediante las clases abstractas y los interfaces podemos definir el esqueleto de una familia de clases, de forma que los subtipos de la clase abstracta o la interfaz implementen ese esqueleto para dicho subtipo concreto. Por ejemplo, podemos definir en la clase Animal el mtodo dibuja() y el mtodo imprime(), y que Animal sea una clase abstracta o un interfaz.

Vemos la diferencia entre clase, clase abstracta e interfaz con este esquema: En una clase, al definir Animal tendramos que implementar los mtodos dibuja() e imprime(). Las clases hijas no tendran por qu implementar los mtodos, a no ser que quieran adaptarlos a sus propias necesidades. En una clase abstracta podramos implementar los mtodos que nos interese, dejando sin implementar los dems (dejndolos como mtodos abstractos). Dichos mtodos tendran que implementarse en las clases hijas. En un interfaz no podemos implementar ningn mtodo en la clase padre, y cada clase hija tiene que hacer sus propias implementaciones de los mtodos. Adems, las clases hija podran implementar otros interfaces.

Encapsulacin - Herencia - Polimorfismo Sobrecarga de Mtodos Aspectos del Lenguaje Las Clases Abstractas Las Interfaces

Definicin de una interfaz:

Uso de la interfaz definida:

Encapsulacin - Herencia - Polimorfismo Sobrecarga de Mtodos Aspectos del Lenguaje Las Clases Abstractas Las Interfaces

La clase InstrumentoViento implementa la interface, declarando los mtodos y escribiendo el cdigo correspondiente.

Una clase derivada (hija) puede tambin redefinir si es necesario alguno de los mtodos de la interface.

Encapsulacin - Herencia - Polimorfismo Sobrecarga de Mtodos Aspectos del Lenguaje Las Clases Abstractas Las Interfaces

El operador final y static

Encapsulacin - Herencia - Polimorfismo Sobrecarga de Mtodos Aspectos del Lenguaje Las Clases Abstractas Las Interfaces

El operador final se puede aplicar en la definicin de Clases, operaciones, atributos y variables, teniendo distinto efecto en cada uno de ellos. Es decir que final en el caso de las clases y las operaciones rompe el esquema tradicional de la herencia.

La Clase es definida como final: esta clase ya no puede poseer subclases. Es decir convierte a la clase en la ltima clase en la jerarqua. La Operacin definida como final: esta operacin no puede ser sobreescrita en la subclase. Los atributos: cuando se aplica final, entonces ese atributo es una constante dentro de la clase. Las variables definidas dentro de los mtodos, final las convierte en constantes dentro del mtodo.

En ambos casos al ser constantes es requisito inicializarlas, adems el formato es indicar el nombre de la constante en mayscula y si son varias palabras se separan con _

Encapsulacin - Herencia - Polimorfismo Sobrecarga de Mtodos Aspectos del Lenguaje Las Clases Abstractas Las Interfaces

El Operador Static: En un momento determinado se puede querer crear una clase en la que el valor de una variable de instancia sea el mismo (y de hecho sea la misma variable) para todos los objetos instanciados a partir de esa clase. Es decir, que exista una nica copia de la variable de instancia. Se usar para ello la palabra clave static. El valor de la variable version ser el mismo para cualquier objeto instanciado de la clase Documento. Siempre que un objeto instanciado de Documento cambie la variable version, sta cambiar para todos los objetos.

De la misma forma se puede declarar un mtodo como esttico, lo que evita que el mtodo pueda acceder a las variables de instancia no estticas:
La modificacin de la variable numero_de_capitulos no funciona porque se est violando una de las reglas de acceso al intentar acceder desde un mtodo esttico a una variable no esttica.

Vous aimerez peut-être aussi