Escolar Documentos
Profissional Documentos
Cultura Documentos
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
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
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
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:
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
Encapsulacin - Herencia - Polimorfismo Sobrecarga de Mtodos Aspectos del Lenguaje Las Clases Abstractas Las Interfaces
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
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.
//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.
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
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
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.