Semana 8 - Vicvargas/PortafolioDigital GitHub Wiki

Martes 10/09/2019

UML, Patrones y Software de calidad

Formas formales de hacer nuestro trabajo: Métodos de project management. Métodos de desarrollo. Standards y frameworks. Mejores prácticas. Herramientas.

Todo lo mencionado anteriormente es lo que separa a un ingeniero de un niño.

UML: Tiene una estrecha orientación con POO.

Paradigma orientado a objetos

Un objeto empaqueta datos y procedimientos sobre la data. La data son los atributos y los métodos son procedimientos. La única forma de interactuar con un objeto es con un mensaje.

Interfaz de un objeto

Encapsular: Es restringir el acceso a los detalles de la implementación. El estado interno del objeto está encapsulado. Al nombre de un objeto, sus parámetros y return se le llama firma del método.

El conjunto de firmas conforma la interfaz del objeto. Un objeto tiene una clase y ésta define la implementacipon del objeto: especifica los atributos y la interfaz del objeto. Los objetos se crean instanciando una clase. Cuando creo una instancia, reservo memoria para los atributos y métodos del objeto.

Herencia

Forma de crear clases basada en clases existentes. Una subclase extiende a un padre.

Clase abstracta

Su propósito es definir una interfaz común para varias clases. No se puede instanciar, solo extender. La subclase de la la clase absracta se llama clase concreta. Una clase abstracta puede o no implementar métodos.

Overriding

Consiste en remplazar el método original de su clase padre dentro de la clase hija.

Overloading

Una clase puede un método con el mismo nombre que otro pero con diferentes parámetros o valor de return.

Polimorfismo

Heredar de una clase permite hacer override a un método de la clase padre. Dynamic binding: La asociación entre el objeto y el método se hace durante el run-time. Permite sustituir objetos que tienen interfaces idénticas en run-time.

Composición de objetos

Se puede reusar un objeto para: Herencia Composición

En herencia se puede definir un objeto en términos de otro.

Acoplamiento

Grado de dependencia entre dos módulos o dos clases. Bajo acoplamiento: Si no hay mucha dependencia entre los módulos.

Cohesión

Grado en el cual los elementos o módulos de una clase están estrechamente relacionados.

El acoplamiento debería ser bajo y la cohesión debería ser alta.

UML

Significa Unified Modeling Language. Es un lenguaje estandarizado para la elaboración de diagramas. El uso de UML da un standard profesional durante el SDLC (Software Development Life Cycle).

Como cualquier arquitecto entiende el dibujo de una casa un ingeniero entiende UML.

Actividad

Realizamos la primera actividad de la bitácora.

Instrucciones:

  1. Deben elaborar un mapa conceptual que incluye los principales conceptos de los diferentes esquemas de gestión de memoria vistos en clases. Pueden utilizar cualquier herramienta para la elaboración del mapa conceptual; no puede ser elaborado a mano.

  2. Describa una estrategia que utilizarían para validar que la complejidad teórica de los algoritmos de búsqueda, vistos en clases, se cumple en la práctica cuando se ejecutan los algoritmos.

  3. Debe describir, mediante código en Java, cómo podría implementarse un hash utilizando el lenguaje de programación Java. La implementación debe incluir todos los conceptos, vistos en clases, asociados a las tablas Hash.

1.

2.

A la hora de verificar la complejidad de un algoritmo de búsqueda se podría realizar la prueba de forma simulacional, esto realizando casos de prueba con data simulada. Se utilizaría la misma estructura de datos en la que se desee realizar la búsqueda para cada algoritmo puesto a prueba. Al final se comprobaría si sus complejidades corresponden con el tiempo ocupado y si tienen sentido con el valor obtenido mediante la teoría.

3.

package hash;

import java.util.*;

public class HashTable {

`private Hashtable<Integer, String> hm; `
`public HashTable() { `
`hm = new Hashtable<Integer, String>(); `

}

public int aritmeticaModular(int llave) {

`//Elegimos un número primo para definir los buckets `

`int primo = 2; `
`return llave%primo; `

}

public int midSquare(int llave) {

`//Tomar la llave y elevarla al cuadrado`
`int llaveCuadrado = llave^2;`
`//Tomar los r digitos de en medio del resultado`
`int r = llaveCuadrado = llaveCuadrado/10;`
`return (2^r)-1;`

}

public int truncacion(int llave) {

`//Ignorar parte de la llave y usar el resto como el indice del array`
`return llave%10;`

}

public int folding(int llave) {

`//Dividir la llave en partes`
`int primeraParte = llave/10;`

`int segundaParte = llave/100;`

`return primeraParte + segundaParte;`

}

//Colisiones se pueden evitar examinando la tabla de hash y tratando

//de encontrar otra ranura abierta para contener el elemento que causa la colisión

Jueves 12/09/19

Realizamos el quiz 4.

¿Por qué es necesario hacer modeling?

Para comunicar la estructura deseada. Visualizar y controlar la arquitectura del sistema. Para entender mejor el sistema. Para gestionar o mitigar riesgos.

Modelamos porque es una técnica de ingeniería aceptada. Un modelo es la simplificación de la realidad o sea una abstracción.

UML está compuesto por tres modelos:

  • Funcional

  • De objetos

  • Dinámico

Cada modelo compuesto por un set de diagramas:

Diagrama de casos de uso

Captura el comportamiento del sistema subsistema clase o componente como le aparece al usuario. Permite identificar cuáles funcionalidades están asociadas a qué usuario. Podemos tener herencia extend e include.

Relaciones en los diagramas de casos de uso.

Association

Extend

Include

Generalization

Class diagram o Vista estática

Captura la estructura de objetos. Incluye todas las estructuras de datos y las operaciones. No presenta información sobbre el comportamiento dinámico del sistema.

Diagrama de componentes

Diagrama de módulos del sistema.

Modularidad: Agrupamiento lógico de clases.

Diagrama de despliegue: Contiene las librerías que necesito para ejecutar el programa.

Diagrama de secuencia: Se utiliza para formalizar el comportamiento dinámico del sistema.

Patrones de diseño

Un patrón es una regularidad discernile en el mundo de diseño. Los expertos reutilizan soluciones que les hayan servido en el pasado. "Base new designs on prior experience".

Patrones de diseño en POO

Solución reutilizable y general para un problema común. Contiene la descripción de la comunicación entre los objetos y las clases que permiten dar solución a un problema.

Elementos que tienen los patrones:

  • Nombre

  • Problema

  • Solución

  • Consecuencias - Positivas o Negativas

Se clasifican en dos categorías: Propósito y alcance.

Propósito: Refleja lo que hace un patrón.

Scope: Si el patrón es para clases u objetos.

Creacionales

Cómo se crea el objeto. Permiten abstraer el proceso de instanciación.

Estructurales

Composición entre clases u objetos.

Comportamiento

Cómo la interacción entre clases u objetos permiten brindar una nueva funcionalidad.

Encapsular el conocimiento acerca de cuáles clases concretas utiliza el sistema.

Builder

Separar la construcción de un objeto complejo.

¿Cuándo aplicar?

Cuando puedo tener componentes del producto y ensamblarlos al final.

Permite escocnder la estrucctura interna de un producto. Oculta cómo el producto es ensamblado.

Estructurales

Relacionados a composición entre objetos y clases para dcrear nuevas funcionalidades.

Facade

Los clientes se comunican con el subsistema enviando solicitudes al Facade.

Aplica cuando:

Quiero dar vista simple.

El Facade desacopla el subsistema de los clientes.

Quiero definir un único punto de entrada para un sistema.

Adapter

Permite que dos clases que son incompatibles puedan comunicarse.

Aplica cuando:

Tengo clases que de otra forma no podrían trabajar juntas.