---
title: Katas Intermedias en Programación Orientada a Objetos (OOP)
description: Mejora tus habilidades en OOP con katas intermedias, aprende sobre dobles de test y aplica estilos avanzados de TDD para resolver problemas complejos.
---

[publicaciones ](https://www.codurance.com/es/publications)

# [Katas Intermedias en Programación Orientada a Objetos (OOP)](https://www.codurance.com/es/publications/katas-intermedias-oop-y-dobles-de-test)

 Escrito por [Emmanuel Valverde](https://www.codurance.com/es/publications/author/emmanuel-valverde) | 02 Nov 2023

Una vez que hayas empezado a utilizar el [Desarrollo Guiado por Pruebas (TDD)](https://www.codurance.com/es/guia-completa-desarrollo-guiado-por-pruebas-tdd) y profundizado en conceptos básicos como condicionales, bucles y estructuras simples, es hora de añadir complejidad a tu práctica. Refuerza tus conocimientos de programación orientada a objetos (OOP), así como otros conceptos de testing, como los dobles de test y distintos estilos de TDD, y cómo enfrentar problemas con estos enfoques.

## Lista de Katas Intermedias en OOP

### [Text Processing](https://www.codurance.com/es/katas/procesamiento-de-texto)

En esta kata se enseña el concepto de DTO, enfocándose en no acoplarse a la salida por pantalla sino a la información realmente importante. Se trabaja de manera iterativa e incremental. NO te centres en la representación gráfica.

### [Bags](https://www.codurance.com/es/katas/bolsas)

Kata para trabajar estructuras de datos, OOP y polimorfismo.

### [PrintDate](https://github.com/CodiumTeam/print-date)

Esta kata se centra en los colaboradores, los dobles de test y la teoría de qué tipo de doble sería un `[Command]`y qué tipo de doble sería un `[Query].`

- **Iteración 1**: Utilización de dobles de test y comprensión del [“*Don’t Mock What You Don’t Own*](https://hynek.me/articles/what-to-mock-in-5-mins/)” - Opcional, usa CRC cards.
- **Iteración 2**: Crear tus propios dobles de test.

### [Tic Tac Toe](https://github.com/SoftwareCraftersMurcia/tic-tac-toe-2022)

Kata diseñada para aprender 2 enfoques importantes:

- **Iteración 1**: TDD inside-out, viendo cómo evolucionan los test y trabajando la separación `[Commands]`y `[Queries].`
- **Iteración 2: TDD** `outside-in` sin acoplarse a la representación gráfica, esta parte se trabajará en la Bank kata (aunque si alguien termina pronto puede intentar ver como poder implementarlo).
- **Iteración 3**: [Aplicación de object calisthenic](https://williamdurand.fr/2013/06/03/object-calisthenics/) y utiliza mutant testing para crear tests más fuertes.

### [Smart Fridge](https://www.codurance.com/es/katas/smart-fridge)

Esta kata se centra en la gestión de colaboradores y el uso de dobles de test, permitiendo practicar tanto TDD inside-out como outside-in.

- **Iteración 1**: TDD `inside-out` (introducción a colaboradores).
- **Iteración 2**: TDD `outside-in` (test de contrato con dobles de test).
- **Iteración 3**: [Aplicación de object calisthenic](https://williamdurand.fr/2013/06/03/object-calisthenics/)

### [Guess the Random Number](https://www.codurance.com/es/katas/numero-aleatorio-kata)

Kata para aprender 3 enfoques:

- **Iteración 1**: TDD `inside-out` (introducción a colaboradores).
- **Iteración 2**: TDD `outside-in` (test de contrato con dobles de test).
- **Iteración 3**: TDD outside-in con contrato y y creación de colaboradores haciendo TDD (double loop con [ATDD](https://rogeriodasilva.com/wp-content/uploads/2022/01/Acceptance-Test-Driven-Development-ATDD.webp)).<https://rogeriodasilva.com/wp-content/uploads/2022/01/Acceptance-Test-Driven-Development-ATDD.webp>

### [ATM Machine](https://www.codurance.com/es/katas/kata-cajero-automatico)

Kata iterativa incremental con estado, abordable desde inside-out o outside-in.

- **Iteración 1**: Elige el estilo que crees que debes trabajar más.
- **Iteración 2**: Trabaja con el estilo con el que te sientas más cómodo.
- **Iteración 3**: [Aplicación de object calisthenic](https://williamdurand.fr/2013/06/03/object-calisthenics/)

### [Shopping Cart](https://www.codurance.com/es/katas/cesta-de-la-compra-kata)

Kata iterativa incremental que tiene estado y que puede ser afrontada desde inside-out o outside-in

- **Iteración 1**: Elige el estilo que crees que debes trabajar más - Opcional, usa CRC cards.
- **Iteración 2**: Trabaja con el estilo con el que te sientas más cómodo.
- **Iteración 3**: [Aplicación de object calisthenic](https://williamdurand.fr/2013/06/03/object-calisthenics/)

### [Bank](https://www.codurance.com/es/katas/bank-kata)

Kata diseñada para trabajarla con `outside-in` y utilizando [`ATDD`](https://rogeriodasilva.com/wp-content/uploads/2022/01/Acceptance-Test-Driven-Development-ATDD.webp)`.`<https://rogeriodasilva.com/wp-content/uploads/2022/01/Acceptance-Test-Driven-Development-ATDD.webp>

- <https://rogeriodasilva.com/wp-content/uploads/2022/01/Acceptance-Test-Driven-Development-ATDD.webp>**Iteración 1**: TDD `outside-in`
- **Iteración 2**: BDD con Gherkin o Cucumber.

### [Salary Slip Kata](https://github.com/sandromancuso/salaryslipkata)

Kata diseñada para trabajar con OOP y con BDD

- **Iteración 1**: Trabaja `outside-in` utilizando [`ATDD`](https://rogeriodasilva.com/wp-content/uploads/2022/01/Acceptance-Test-Driven-Development-ATDD.webp)`.`<https://rogeriodasilva.com/wp-content/uploads/2022/01/Acceptance-Test-Driven-Development-ATDD.webp>
- <https://rogeriodasilva.com/wp-content/uploads/2022/01/Acceptance-Test-Driven-Development-ATDD.webp>**Iteración 2**: Trabaja el `inside-out.`
- **Iteración 3**: Trabaja el `BDD`, aprende qué es BDD, cómo sería una feature correcta y haz el setup para el lenguaje que necesites.

### [Conway's Game of Life](https://www.codurance.com/es/katas/game-of-life-de-conway)

Esta kata es ideal para practicar el uso de colaboradores y dobles de test, aplicando tanto TDD inside-out como outside-in.

- **Iteración 1**: TDD `inside-out` (introducción a colaboradores).
- **Iteración 2**: TDD `outside-in` (test de contrato con dobles de test).

## Consejos para mejorar en OOP y TDD

- Aprende a pivotar entre inside-out y outside-in según lo necesites.
- Piensa en la capa de la pirámide de tests desde la que deberías comenzar, dependiendo de lo que intentes implementar.

## Aprendizajes

- Piramide de test
- Trabajo con colaboradores
- Principios de diseño de software
- Estrategias de testing, incluyendo dobles de test: 
    - ¿Qué son?
    - ¿Qué tipos existen?
    - ¿Cuándo usarlos?
    - ¿Cómo crear tus propios dobles de tes?
    - [Don’t Mock What You Don’t Own](https://hynek.me/articles/what-to-mock-in-5-mins/)
- DTO y Value Objects
- Evita trabajar con primitivos
- [Ley de Demeter](https://javarevisited.blogspot.com/2014/05/law-of-demeter-example-in-java.html)
- Inside-out y Outside-in
- BDD y ATDD
- Uso de mutant testing para evaluar la fuerza de tus tests
- [YAGNI](https://es.wikipedia.org/wiki/YAGNI) y <https://es.wikipedia.org/wiki/YAGNI>[DRY](https://en.wikipedia.org/wiki/Don%27t_repeat_yourself) : Relaciona esto con la ley de las 3 repeticiones

[Ver post completo](https://www.codurance.com/es/publications/katas-intermedias-oop-y-dobles-de-test)

```json
{
  "@context" : "http://schema.org",
  "@type" : "BlogPosting",
  "author" : {
    "@type" : "Person",
    "name" : "Emmanuel Valverde"
  },
  "dateModified" : "2024-10-03T07:42:07.731Z",
  "datePublished" : "2023-11-02T15:55:28Z",
  "headline" : "Katas Intermedias en Programación Orientada a Objetos (OOP)",
  "image" : {
    "@type" : "ImageObject",
    "height" : 630,
    "url" : "https://3042464.fs1.hubspotusercontent-na1.net/hubfs/3042464/Social%20Media%20-%20Spanish/2023/Blogposts/Blog%20Header_Emmanuel_3.png",
    "width" : 1200
  },
  "mainEntityOfPage" : "https://www.codurance.com/es/publications/katas-intermedias-oop-y-dobles-de-test",
  "publisher" : {
    "@type" : "Organization",
    "logo" : {
      "@type" : "ImageObject",
      "height" : 60,
      "url" : "/hs/hsstatic/content_shared_assets/static-1.4092/img/default-amp-logo.png",
      "width" : 60
    },
    "name" : "Publicaciones"
  }
}
```