Download Leccion4_Programacion en Java [Modo de compatibilidad]

Document related concepts
no text concepts found
Transcript
Programación en Java
Programación en OO
Lección 4:Programación en OO
1. Herencia
2. Modificadores de Acceso
3. Interfaces
Programación en Java
Herencia
Es la acción en la que una clase obtiene los
métodos y propiedades definidos en otra clase,
siempre y cuando no seán privados.
Para heredar en java se utiliza la clase
reservada extends.
Ejemplo:
public class SubClases extends SuperClase {}
Programación en Java
Herencia
A la clase que extiendo se le denomina
subclase o clase hija.
La clase de la que se extiende se le denomina
superclase o clase padre.
Ejemplo:
class PersonaDAO extends ConexionBaseDatos {}
Superclase: ConexiónBaseDatos
Subclase: PersonaDAO
Programación en Java
Modificadores de acceso
Los modificadores de acceso son:
public
protected
private
default (sin modificador)
Programación en Java
Modificadores de acceso
public: Una clase, variable o método puede ser
utilizado en cualquier programa de java sin
ninguna restricción.
private: El más restrictivo de los modificadores.
Una variable o método puede ser utilizado sólo
por una instacia de la clase
Programación en Java
Modificador de acceso
protected: Se le asigna a las variables o
métodos que sólo pueden ser accedidos por la
clase que los contiene o sus subclases.
Programación en Java
Modificadores de acceso
default: Es el modificador de acceso que se asigna al no
definirle un modificador de acceso.
Default, no es una palabra reservada, simplemente es el
nombre que se le asigna a la acción que resulta de no
especificar un modificador de acceso.
Este modificar sólo permite el acceso a clases que se
encuentren en el mismo paquete.
Programación en Java
Constructores en una subclase
Como hemos visto al heredar se obtienen los
métodos y variables de la clase padre, pero
también se tiene acceso a sus constructores.
Para acceder a los constructores de la clase
padre se utiliza la palabra reservada super,
seguida de los argumentos que requiere el
constructor de la clase padre.
Programación en Java
Constructores en una subclase
La instrucción con la palabra reservada super,
debe ser la primera en el cuerpo del constructor.
El constructor de la superclase debe ser visible
para la subclase es decir debe ser public,
protegido y o estar en el mismo paquete, por
ningún motivo se puede acceder un constructor
privado de la clase hija.
Programación en Java
Constructores en una subclase
Ejemplo:
public class Transaccion extends ControladorConexion
implements Conexion {
public Transaccion() throws SQLException {
super();
}
public Transaccion(int controlador)
throws SQLException {
super(controlador);
}
}
Programación en Java
Heredando y redefiniendo miembros
Al igual que con los constructores se tiene
acceso a todas las propiedades y métodos que
sean accesibles por la subclase, esto es
considerando los modificadores de acceso.
Programación en Java
Heredando y redefiniendo miembros
Ejemplo:
public class ControladorConexion {
protected Connection sqlConnection;
public Connection getConexion()
throws ImposibleCrearConexionException {..}
}
public class Transaccion
extends ControladorConexion {
//Contiene la variable slqConnection
public void commit() throws SQLException{}
//Cuenta además con el método getConexion()
}
Programación en Java
Accediendo miembros heredados
Para acceder a los miembros heredados sólo
basta con utilizar el nombre de la variable o
método.
Programación en Java
Sobre escritura de métodos
Al igual que lo sobrecarga la sobre escritura es
una característica de Java.
Utilizar el mismo nombre de método con su
conjunto de argumentos iguales y mismo tipo de
retorno se conoce como sobre escritura.
Programación en Java
Sobre escritura de métodos
La sobre escritura existe cuando:
En una subclase se define un método con el mismo
nombre, una lista de argumentos idéntica en orden y
tipo y con el mismo tipo de retorno, que un método
de la superclase.
Los métodos marcados con final no pueden ser sobre
escritos.
Programación en Java
Sobre escritura de métodos
La accesibilidad no debe ser más restrictiva que en el
método original.
El método no debe lanzar ninguna excepción
comprobada (o subclases de esas excepciones) que
no hayan sido declaradas por los métodos sobre
escritos.
Programación en Java
La palabra reservada super
La palabra reservada super tiene como
objetivos:
Acceder a las variables ocultas de la superclase
• super.variableOculta;
Acceder a los métodos sobre escritos de la clase
padre.
• super.metodoSobreEscrito();
Invocar a los constructores de la superclase
• super(agumentos);
Programación en Java
Interfaces
Define un conjunto de variables de clase y métodos que
especifican sólo la firma de los métodos que debe
contener la clase que la implementa.
Para definir una interfaz se utiliza la palabra reservada
interface.
Las interfaces son abstractas implícitamente. Por
convención el abstract se omite
Programación en Java
Interfaces
En una interfaz se pueden declarar tres tipos de
miembros
Constantes (fields)
Métodos
Clases internas o interfases
Programación en Java
Interfaces - Constantes
En una interfaz se pueden declarar constantes,
por lo cual los campos (fields) deben serán
implícitamente publicas, estáticas y finales.
Por convención los modificadores son omitidos
en la declaración de los campos.
Deben ser inicializadas, ya que variables finales
en blanco no son permitidas
Programación en Java
Interfaces - Constantes
Ejemplo:
public interface PerfilDeSeguridad
{
/**
* Tipo de autenticación por base de datos
*/
String TIPO_BASE_DE_DATOS =
“seguridad.ValidacionBD”;
/**
* Tipo de autenticación por base de datos
*/
String TIPO_EMAIL =
“seguridad.ValidacionEmail”;
}
Programación en Java
Interfaces - Métodos
Las interfaces definen la forma de los métodos,
pero existen algunas reglas que deben
seguirse.
Los métodos son abstractos implícitamente, no
pueden tener cuerpo. Por convención el abstract se
omite en la declaración del método
Son públicos implícitamente
No se permite ningún otro modificador
Programación en Java
Interfaces - Métodos
Ejemplo:
/**
* La interfaz conexión permite tener un método
* común en el uso de JDBC
* @author ITNova Solutions
*/
public interface Conexion
{
/** Este metodo se encarga de obtener una nueva conexión.
* @throws java.sql.SQLException
* @return Conexión a la base de datos
*/
Connection abrirConexion() throws SQLException;
/** Cierra la conexion existente
* @throws java.sql.SQLException
*/
void cerrarConexion() throws SQLException;
}
Programación en Java
Implementando interfaces
Para implementar una interfaz en la declaración
de la clase se utiliza la palabra reservada
implements, seguida por la lista de interfaces
que deseamos implementar.
Al implementar una interfaz estamos forzados a
implementar todos los métodos que defina.
Programación en Java
Implementando interfaces
Ejemplo:
class ControladorConexion implements Conexión
/** Constructor de la clase
*/
public ControladorConexion(){
this.seleccionarControlador();
}
{
Connection abrirConexion() throws SQLException {
//Implementación del método
}
void cerrarConexion() throws SQLException {
//Implementación del método
}
}
Programación en Java
Utilizando interfaces
El diseño orientado a interfaces nos permite
mantener la abstracción del sistema e
implementar su funcionamiento de diferentes
maneras.
Programación en Java
Uso de interfaces
Consideremos el siguiente escenario:
Programación en Java
Uso de interfaces
Una de las posibles implementaciones de la clase persona:
class PersonaDAO {
private Conexion conexion;
/** Constructor de la clase
*/
public PersonaDAO(){
//En caso de utilizar Oracle
//conexion = new OracleConecion();
conexion = new MySQLConecion();
Connection c = conexion.abrirConexion();
//Implementación del constructor
}
}
Programación en Java
Compatibilidad y tipos de conversión
En Java existen dos formas de tener cambios
en referencias:
Las implícitas o automáticas que son conocidas
como conversiones.
Las explicitas son hechas a través de un Cast.
Programación en Java
Conversion
La conversión es
permitida cuando es de
abajo hacia arriba.
Correcto:
Tangelo tange = new Tangelo();
Citrus cit = tange;
Incorrecto:
Citrus cit = new Citrus();
Tangelo tange = cit;
//
Programación en Java
Cast
El Cast es necesario cuando
es de arriba hacia abajo.
Ejemplo:
GrapeFruit g, g1;
Citrus c;
Tangelo t;
g = new GrapeFruit();
c = g; //Conversión
//Casting correcto
g1 = (GrapeFruit)c;
//Casting no permitido
t = (Tangelo)t;