Módulo 2 Programación
Orientada a Objetos
Fases de análisis y diseño:
2
Análisis
• ¿Qué?objetivos debe
perseguir el sistema.
• Se definen los
elementos implicados:
Usuarios, dispositivos y
otros sistemas, las
actividades Y
comportamientos.
Diseño
• ¿Cómo? alcanzará el
sistema esos objetivos.
• Se crea un modelo de
los elementos
implicados (UML ->
Unified Modeling
Language).
28/04/2013
Abstracción:
• Es el proceso de simplificar un problema complejo
enfocándose tan sólo en los aspectos relevantes para la
solución.
• En el desarrollo de software esto significa centrarse en lo
que es y hace un objeto antes de decidir cómo debería ser
implementado.
4
Abstracción:
¿Cuál es la diferencia entre Clase
y Objeto?:
• Una clase no es un objeto. (pero se usa para construirlo).
• Una clase es el prototipo del objeto.
• Le dice a la máquina virtual cómo crear un objeto de cierto
ese tipo.
• Cada objeto de esa clase puede tener sus propios valores
para las variables de instancia de esa clase.
Clase
JVM
Modificadores de acceso:
Modificador Clase a
nivel de
archivo
Variable Método Constructor Bloque
de código
public SI SI SI SI NO
private NO SI SI SI NO
protected NO SI SI SI NO
DEFAULT SI SI SI SI N/A
Encapsulación:
• La regla general de encapsulación es: OCULTAR LOS
ATRIBUTOS (private) y proporcionar interfaces públicas, es
decir métodos (public) get() y set().
• Se denomina encapsulamiento al ocultamiento del estado, es
decir, de los datos miembro, de un objeto de manera que
sólo se puede cambiar mediante las operaciones definidas
para ese objeto.
• Esto es conveniente porque lo que nos interesará será
conocer qué hace la Clase pero no será necesario saber
cómo lo hace.
• Por lo tanto, la encapsulación garantiza la integridad de
los datos que contiene un objeto.
Acoplamiento y cohesión:
• Todo desarrollador de software debe tener en cuenta que se
obtienen tantos más beneficios cuanto más alta es la
cohesión (High Cohesion) y más bajo es el acoplamiento
(Loose coupling) en la programación orientada a objetos .
Acoplamiento:
• El acoplamiento débil (Loose coupling) se refiere a reducir al
mínimo la dependencia de un objeto en otros objetos.
• En otras palabras, puede cambiar la implementación de una
clase sin afectar a otras clases.
• Estas propiedades hacen que el código extensible y fácil de
mantener.
Acoplamiento:
• Por ejemplo, considere dos clases, A y B. Si estas no se
utilizan entre si (ninguna de ellas crea una instancia de la
otra o invoca un método en el otra), no están acopladas.
A B
Acoplamiento:
• Si A usa a B (por ejemplo, crea una instancia de B), pero B
no usa A, entonces son débilmente acoplados (loosely
coupled).
A B
Acoplamiento:
Rev. 1.0 28/04/2013
• Si ambas A y B se utilizan entre si, entonces están
estrechamente acopladas (tightly coupled).
A B
Cohesión:
• Piense en el siguiente escenario:
• La clase A necesita hacer una conexión a una Base de Datos (DB), para ello en
la clase A declaras un método llamado getConnection() donde haces la
conexión a la DB mediante un usuario y contraseña.
• La clase B también necesita enlazarse a la base de datos y decides copiar el código dentro del método getConnection() de la clase A y pegarlo en la clase
B.
• Creas una clase C y haces el mismo procedimiento anterior.
• Nuestro diseño cumple con el objetivo, tenemos un par de líneas que hacen la
conexión satisfactoriamente a la DB.
• ¿Qué sucederá si por alguna razón cambia el usuario y
contraseña de la DB?.
Cohesión:
• Mientras que el acoplamiento se refiere a la forma en que
dos clases interactúan unas con otras.
• La cohesión se refiere a cómo una clase se estructura.
• La cohesión es una medida interna de la clase referente a lo
bien estructurado y muy relacionado con la funcionalidad en
una clase.
Cohesión:
• El objetivo es diseñar las clases con gran cohesión, que
realicen tareas bien definidas y relacionadas (llamada
también la cohesión funcional).
• Los métodos públicos de una clase altamente cohesivos
suelen poner en práctica una sola tarea específica que se
relaciona con el propósito de la clase.
• Un método en una clase no debe realizar una tarea que en
realidad debería ser implementada por otra clase.
Cohesión: Yo hago la
conexión a la
base de
datos.
Muy bien yo utilizo tu
método getConnection(), si
algo cambia tu
solucionas los
problemas.
Yo también
necesito
conectarme
a la BD.
¿Hay alguien que
se conecte ya a la
DB?, no quiero
trabajar doble
Principios Orientados a objetos:
• (Weak vs. Strong) Encapsulation
• (Tight vs. Loose) Coupling
• (Low vs. High) Cohesion
higher cohesion <=> looser coupling