Menu
Coddy logo textTech

Resumen: Calculadora de figuras

Parte de la sección Programación Orientada a Objetos del Journey de GO de Coddy — lección 33 de 107.

challenge icon

Desafío

Fácil

Vamos a construir una calculadora de formas que reúna todos los conceptos de interfaces de este capítulo. Crearás un sistema donde diferentes formas geométricas puedan procesarse uniformemente a través de una interfaz compartida, demostrando el poder del polimorfismo en Go.

Organizarás tu código en tres archivos:

  • shape.go: Define una interfaz Shape con dos métodos: Area() float64 y Perimeter() float64. También crea una función llamada DescribeShape que acepte cualquier Shape y devuelva una cadena formateada que muestre tanto su área como su perímetro.
  • shapes.go: Crea dos structs que implementen la interfaz Shape:
    • Un Rectangle con los campos Width y Height
    • Un Circle con un campo Radius
    Cada struct debe implementar los métodos Area() y Perimeter(), además de un método String() (implementando fmt.Stringer) que devuelva una descripción legible de la forma.
  • main.go: Lee los datos de la forma desde la entrada, crea las formas apropiadas y usa tu función DescribeShape para mostrar información sobre cada una. También imprime cada forma directamente para demostrar la interfaz Stringer.

Se proporcionarán las siguientes entradas:

  • Línea 1: Ancho del rectángulo (float)
  • Línea 2: Altura del rectángulo (float)
  • Línea 3: Radio del círculo (float)

Para los cálculos, usa 3.14159 como el valor de pi. El perímetro del círculo es 2 * pi * radius.

Tus métodos String() deben devolver:

  • Rectangle: "Rectangle(%.2f x %.2f)"
  • Circle: "Circle(Radius: %.2f)"

Tu función DescribeShape debe devolver:

"Area: %.2f, Perimeter: %.2f"

Formatea todos los valores flotantes con dos decimales usando %.2f.

Por ejemplo, dados 4, 3, y 5, tu salida debería ser:

Rectangle(4.00 x 3.00)
Area: 12.00, Perimeter: 14.00
Circle(Radius: 5.00)
Area: 78.54, Perimeter: 31.42

Imprime cada forma primero (usando su método String()), luego su descripción de DescribeShape. Procesa primero el rectángulo, luego el círculo.

Pruébalo tú mismo

package main

import (
	"fmt"
)

func main() {
	// Leer los valores de entrada
	var width, height, radius float64
	fmt.Scanln(&width)
	fmt.Scanln(&height)
	fmt.Scanln(&radius)

	// TODO: Crear un Rectangle con el ancho y la altura dados

	// TODO: Crear un Circle con el radio dado

	// TODO: Imprimir el rectángulo (usa el método String())
	// TODO: Imprimir la descripción del rectángulo usando DescribeShape()

	// TODO: Imprimir el círculo (usa el método String())
	// TODO: Imprimir la descripción del círculo usando DescribeShape()
}

Todas las lecciones de Programación Orientada a Objetos