Encapsulación se refiere a la combinación de campos y métodos juntos en una
clase de tal manera que los métodos trabajan sobre los datos, en oposición a
los usuarios que acceden directamente a los campos
Encapsulación estricta se refiere a la utilización de la encapsulación en
todos los campos de una clase, y sólo facilitar el acceso a los campos a
través de métodos
Con encapsulación estricta, los campos de un objeto no pueden ser
modificados o accedidos directamente, sólo a través de métodos
Para implementar encapsulación estricta, los campos de una clase privada
deben proveer métodos públicos de acceso ("getter") y de modificación ("setter")
Beneficios
Se puede monitorear y validar todos los cambios de un campo
Se puede supervisar y dar formato a todos los accesos de un campo
El tipo de dato real de un campo puede ser ocultado al usuario
El usuario de un objeto no tiene conocimiento de cómo el objeto almacena sus datos
Si se necesita alterar un campo, los usuarios de la clase no se ven afectados por
el cambio, siempre y cuando no se modifique la firma de los métodos
Bajo
Acoplamiento
El acoplamiento es el grado en que un objeto depende
de otro objeto de lograr su objetivo
Si los objetos están estrechamente acoplados, cambiar
el código en una clase tiene un efecto importante sobre
las clases dependientes y se requerirá cambios de código
para varias clases
El código cambiante en una clase tiene un efecto mínimo
en sus clases dependientes
Aumenta la reutilización de las clases
Alta
Cohesión
Cohesión se refiere a cómo se vinculan las tareas específicas de un objeto
Alta cohesión es cuando un objeto realiza un conjunto de tareas que están
estrechamente relacionadas
Bajaa cohesión es cuando un objeto realiza múltiples tareas que no están
relacionadas entre sí
La baja cohesión crea código que es difícil de mantener y reutilizar
Las clases que implementan la alta cohesión, son más reutilizables
y más fácil de probar y entender
Relaciones
de Diseño
Relación
"es un"
Es una sencilla comprobación para verificar que se
está utilizando la herencia correctamente
En concreto, se debe ser capaz de afirmar que un
objeto hijo "es un" objeto padre
Topic
Topic
Relación
"tiene un"
Es una sencilla comprobación para verificar que se
está utilizando adecuadamente la composición
Composición refiere a una clase que contiene una
referencia a otra clase
Si un objeto "tiene un" atributo o propiedad específica,
el atributo o propiedad es un buen candidato para crear
un campo dentro de la clase del objeto
Topic
Beneficios
El código resultante es más lógico
El código es más fácil de entender
Las clases son más fáciles de reutilizar en otras
relaciones y aplicaciones
El código es más fácil de mantener, especialmente si
cambian las necesidades y requerimientos del programa
Modificadores
y Herencia
Modificadores
de Acceso
public
Un campo, método o constructor público de una clase
es accesible a cualquier otra clase
private
Un campo, método o constructor privado sólo es
accesible desde dentro de la clase que se declara
protected
Un campo, método o constructor protegido es
accesible desde otras clases del mismo paquete
o desde sus subclases (clases hijas)
default
Un campo, método o constructor sin modificador
es accesible desde otras clases del mismo paquete
Modificador
abstract
Una clase abstracta no puede ser instanciada
Un método abstracto debe ser sobrescrito
Una clase que contiene un método abstracto también
debe declararse abstracta
Una clase hija debe sobrescribir los métodos abstractos de
su clase padre o la clase hija también debe ser abstracta
Los modificadores de acceso en la clase hija deben ser
al menos tan accesible como los modificadores de acceso
de los méódos abstractos de la clase padre
Un método abstracto no puede ser privado porque no seria
visible en su clase hija y por lo tanto no puede ser sobrescrito
Los constructores no puedes ser abstractos
ya que estos no se sobreescriben
Modificador
final
Se aplica a las variables locales, campos, métodos o clases
Una variable o campo final no se puede cambiar una vez
que se asigna. Estos se conocen como constantes
Un método final no puede ser sobrescrito
Una clase final no puede tener subclases
Convención
Los nombres de las variables deben estar en mayúsculas
Si el nombre de la variable es una palabra compuesta,
se utiliza el guión bajo (_) para separar las palabras
final String COMPANY_NAME = "Sun";
Polimorfismo
Se refiere a cómo un objeto en Java puede adoptar "muchas formas"
Una clase hija puede adoptar la forma de su clase padre
Una clase puede adoptar la forma de sus interfaces implementadas
Métodos
Virtuales
Todos los métodos en Java son métodos virtuales
Si un método se sobrescribre, el método se reemplaza en tiempo de ejecución
El compilador ve el método de la clase padre en tiempo de compilación
Referencias polimórficas a menudo necesitan ser moldeadas a su tipo de clase adecuada
Topic
Operador
instanceof
Es un operador booleano que se utiliza para comparar
una referencia a un tipo de clase
Si la referencia es del tipo de clase dada, entonces el
resultado es verdadero, de lo contrario, es falso
Sintaxis
reference instanceof ClassName
Uso
Un uso son los métodos con parámetros polimórficos
Si el parámetro de un método es un tipo de clase,
el argumento puede ser cualquier clase hija
Topic
Colección
Heterogénea
Es una colección de objetos que no son del mismo tipo de dato,
pero que tienen una clase padre común