Encapsulamiento: Permite la protección de ciertas partes de un objeto del acceso desde otros objetos externos
Herencia: Jerarquía de clases basada en la agrupación de atributos o métodos comunes
Polimorfismo: Tratamiento generalizado a todas las clases pertenecientes a una jerarquía de herencia.
Encapsulamiento
- El encapsulamiento consiste en la agrupación de datos y su tratamiento en una misma estructura.
- Permite la protección de la manipulación externa de algunas partes de los objetos.
- Un objeto suele tener datos y métodos privados, de acceso restringido.
- Fuerza al usuario a usar una interfaz para acceder a los datos.
- Hace que el código sea más fácil de mantener
Modificaciones para restringir un acceso
- La definición de los miembros de una clase se puede ampliar añadiendo modificadores al principio.:
[modificador]<tipo> <identificador>;
[modificador]<tipo> <nombre>(<args>)
{…}
- Los modificadores permiten acceder a los datos o métodos de manera restringida
public
El miembro de la clase es accesible desde cualquier parte del código
private
El miembro de la clase sólo es accesible desde código perteneciente a la propia clase
protected(o friendly)
Sólo las subclases de la clase y nadie más pueden acceder a las variables y métodos
Herencia
- Jerarquía de clases basada en agrupar atributos y/o métodos comunes
- Las clases descendientes se llaman subclases.
- Las clases ascendientes se llaman superclases.
- Las subclases heredan características y métodos de las superclases (excepto los constructores)
- Supongamos que tenemos la clase Jefe y la clase Secretaria definidas como:
-Jefe {<int><numEmpleado>, <String><nombre>, <int><numDepart>, <int><numSupervisados>}
-Secretaria {<int><numEmpleado>, <String><nombre>, <int><numDepart>, <Jefe><trabajaPara>}
- Las partes comunes se pueden agrupar en una misma clase, manteniendo las otras dos con las partes no comunes y heredando de esta nueva clase con la palabra reservada extends.
Ejemplo
public class Articulo { // clase padre
public float precio=0;
…
public void setPrecio(float elPrecio) {
precio = elPrecio;
}
…
public float getPrecio() {
return precio;
}
}
//los métodos y atributos de Articulo son heredados a Pelicula
public class Pelicula extends Articulo {// clase hijo
public void setDescripcion(String descrip) {
descripcion = descrip;
}
…
public string getDescripcion() {
return descripcion;
} }
Relación de Contenido
- Una clase puede tener referencias a objetos de otras clases.
- Se diferencia de la herencia en que es necesario instanciarlos por separado.
- Responde afirmativamente a la pregunta: <contenedor> tiene un <contenido>?
Métodos Virtuales
- Una subclase puede modificar los métodos que ha heredado de las superclase, manteniendo los mismos nombres, tipos de retorno y listas de argumentos.
class Empleado {
int calcularVacaciones() {…}
}
class Jefe extends Empleado {
int numSupervisados,
int calcularVacaciones() {…}
}
Polimorfismo
- Un método con el mismo nombre, tipo de retorno y lista de parámetros puede ser aplicado a objetos de diferentes clases.
- Uso, trabajar con la clase más general:
-Parámetros polimórficos
-Colecciones heterogéneas
Empleado e1 = new Empleado();
Empleado e2 = new Jefe();
Empleado e1 = new Secretaria();
e2.numSupervisados = 15; // ERROR((Jefe)e2).numSupervisados = 15;