Blog Semana 6: Clases y TDD

Esta semana hablamos de Test Driven Development, o en español Desarrollo guiado por pruebas y también  hicimos un repaso de clases y sus relaciones.

La técnica de desarrollo guiado por pruebas (TDD)

Una de las técnicas de pruebas de software que más está alineada conel desarrollo ágil de software es la de Desarrollo guiado por pruebas, conocida como “Test Driven Development” (TDD), que a su vez es una de las técnicas de programación extrema (“Extreme Programming” / XP).

TDD es una técnica que cambia el orden establecido en cuanto a primero desarrollar (programar) y luego probar, de manera que primero se define las pruebas (casos de prueba) y a partir de estos se va desarrollando la funcionalidad, repitiendo el ciclo.

A medida que se van añadiendo nuevas funcionalidades, se añaden nuevas pruebas, las cuales (naturalmente) fallan al no estar implementadas, luego se desarrolla el software necesario para aprobar el caso de prueba, hasta que todos tengan éxito.

Los pasos para aplicar esta técnica son:

  • Tomar un requerimiento o característica del software claramente definida y aprobada por el dueño de producto (product owner en Scrum).
  • Escribir una serie de pruebas iníciales para ese requisito, las cuales naturalmente fallan al no estar desarrollado el requerimiento.
  • Desarrollar código necesario para pasar” ó “aprobar” esos casos de pruebas.
  • Se verifican los casos de prueba y se marcan como aprobados.
  • De la revisión pueden surgir nuevos casos de prueba producto del refinamiento de la definición del producto, adicionalmente, se incluyen pruebas de nuevas funcionalidades recibidas del dueño de producto.
  • Desarrollar más código o refactorizar el existente para pasar los casos de prueba adicionales.
  • El proceso continua hasta que no pueden idearse más casos de prueba.

TDD permite asegurar que escribimos el código justo necesario para cubrir dicho requisito, a la vez que se cumplen los criterios de aceptación del cliente.

CLASES

DEFINICIÓN DE CLASE

Una clase es un conjunto de objetos que comparten una estructura común y un comportamiento común.

Un solo objeto no es más que una instancia de una clase.

RELACIONES ENTRE CLASES

La mayoría de los lenguajes orientados a objetos ofrecen soporte directo para alguna combinación de las siguientes relaciones:

• Asociación
• Herencia
• Agregación
• Uso
• Instanciación (creación de instancias o ejemplares)
• metaclase

Una clase en una definición abstracta de un objeto
• Define la estructura y comportamiento de cada objeto en la clase
• Sirve como una plantilla para crear objetos

Un objeto es una instancia concreta de una clase (un ejemplar)
• Los objetos pueden agruparse en clases

En los lenguajes Orientados a Objetos, las clases están compuestas por dos características básicas:
• Atributos
• Comportamientos.

Los atributos son las características individuales que diferencian un objeto de otro y determinan su apariencia (ej. color, estilo, marca,etc.), su estado (ej. Encendido o pagado) y otras cualidades.

El comportamiento de una clase determina la manera en que un objeto de esa clase opera o reacciona, esto es, su funcionabilidad (por ejemplo: vuela, rueda, navega, ladra, maulla, suma, resta, calcula, etc.).

Como modelar un clase

modelado clase

especificacion de tipos en uml

UML

UML es un lenguaje para visualizar, especificar, construir y documentar los artefactos de un sistema

  • Lenguaje: léxico (gráfico), sintaxis (diagramas),semántica
  • Visualizar: representación gráfica
  • Especificación: preciso, completo, no ambiguo
  • Construcción: traslado hacia lenguajes de programación
  • Documentación: produce requisitos, arquitectura, diseño, código fuente, planificación de proyectos, pruebas, prototipos, versiones.

Elementos principales de UML
• Bloques básicos de construcción
• Reglas que dictan cómo se pueden combinar estos bloques

Se incluyen tres clases de bloques básicos:
I. Elementos. Son abstracciones de primera clase en un modelo.
II. Relaciones. Ligan estos elementos entre sí.
III. Diagramas. Agrupan colecciones de elementos

Convenciones para darle nombre a los objetos y clases
• Nombres de clases:
o Inician con Mayúscula
o Son en singular
o Se aplica notación camello

• Nombre de atributos
o sustantivos
o Inician con minúscula
o Se aplica notación camello
• Nombre de los métodos
o Verbos (acciones)
o Inician con minúscula
o Se aplica notación camello

Por visibilidad se entiende al acto de acceder a los miembros de una clase. En este sentido, los miembros de una clase pueden ser: públicosprivados yprotegidos.

  • Un miembro público significa que el acceso al mismo puede darse dentro del interior de la clase, dentro de una subclase, y desde un objeto instanciado de cualquiera de estas.
  • Un miembro privado significa que el acceso al mismo puede darse solamente dentro del interior de la clase que lo posee. Normalmente, el programador creador de una clase declara a los atributos de la clase como privados y a los métodos como públicos, esto con la idea de que el usuario de la clase no pueda tener acceso a los atributos sino es a través de los métodos definidos para el caso.
  • Un miembro protegido se comporta de manera parecida a un miembro privado, salvo que estos son accesibles dentro de la clase que lo posee y desde las clases derivadas, pero no desde los objetos instanciados a raiz de dichas clases.

Nota: por defecto, los miembros de una clase son privados.

Relaciones entre clases

• Asociación: es una conexión entre clases, que implica la existencia de una relación estructural entre objetos de esas
clases.
• Generalización: es una relación entre una clase más general y una más específica o especializada.
• Dependencia: es una relación de uso entre clases.

relaciones 1

Enlaces y asociaciones
• Los enlaces y las asociaciones son los medios de establecer relaciones entre objetos y clases, respectivamente.
• Enlace: es una conexión física o conceptual entre instancias de objetos.
– Matemáticamente, un enlace se define como una tupla, es decir, una lista ordenada de instancias de objetos.
• Asociación: describe un grupo de enlaces con estructura y semántica comunes.
– Todos los enlaces de una asociación conectan objetos de las mismas clases.
– Un enlace es una instancia de una asociación.

relaciones2

• Una asociación puede tener un nombre que describe la naturaleza de la relación.
• Las asociaciones son bidireccionales.
– La dirección en que se lee el nombre de una asociación binaria es la dirección directa y la dirección opuesta es la dirección inversa.
– La dirección del nombre puede indicarse con un pequeño triángulo sólido.
– En ciertos casos, sólo es útil una dirección de navegación; esto se representa con una flecha orientada.

relaciones3

Multiplicidad
• La multiplicidad especifica cuántas instancias de una clase pueden relacionarse con una instancia simple de una clase asociada. Por tanto, limita el número de objetos relacionados.
– En general, la multiplicidad es un subconjunto (posiblemente infinito) de los números enteros no negativos.
• En los diagramas de clases se indica la multiplicidad con símbolos especiales en los extremos de las líneas de las asociaciones.

multiplicidad

REPRESENTACION EN UML DE LAS RELACIONES ENTRE CLASES

Agregación.

La relación que se establece entre estos objetos se llama “tiene un”, “es parte de” o “consta de”

agregacion

Composición.

La relación que se establece entre estos objetos se llama “tiene un”, sólo que en este caso la relación es más fuerte.

composicion

Generalización y Herencia

Las clases con atributos y operaciones comunes se pueden organizar de forma jerárquica, mediante la herencia. La herencia es una abstracción importante para compartir similitudes entre clases, donde todos los atributos y operaciones comunes a varias clases se pueden compartir por medio de la superclase, una clase más general. Las clases más refinadas se conocen como las subclases.

Herencia es una relación «es-una» entre las clases las más refinadas y más generales. Ejemplo: Impresora Láser es una Impresora.

herencia

Polimorfismo

El polimorfismo se define como la capacidad de objetos de clases diferentes, relacionados mediante herencia, a responder de forma distinta al mismo mensaje(llamada a un método) Es decir, el mismo mensaje que se envía a muchos tipos de objetos, toma “muchas formas” y de ahí viene el término polimorfismo.

  • La definición del método reside en la superclase
  • La implementación del método reside en la subclase
  • La invocación es resuelta al momento de ejecución (ligadura dinámica)

ejemplo diagrama de clases herencia

¿cómo saber que es una clase y que es un atributo?

como saber que es objeto y atributo

Deja un comentario