Menu
Coddy logo textTech

Repaso - Calculadora de figuras

Parte de la sección Programación Orientada a Objetos del Journey de Dart de Coddy. Lección 49 de 110.

challenge icon

Desafío

Fácil

Construyamos un sistema calculador de figuras que reúna clases abstractas e interfaces para crear un kit de herramientas de geometría flexible. Diseñarás una jerarquía de clases en la que distintas figuras compartan un comportamiento común mediante la abstracción, mientras cada figura proporciona sus propios cálculos únicos.

Organizarás tu código en tres archivos:

  • shape.dart: Define aquí tu clase base abstracta y tu interfaz:
    • Una clase abstracta Shape con una propiedad String name y un constructor. Incluye los métodos abstractos double calculateArea() y double calculatePerimeter(). Añade un método normal describe() que muestre [name] - Area: [calculateArea()], Perimeter: [calculatePerimeter()]
    • Una clase Drawable con un método draw() que muestre Drawing shape...
  • shapes.dart: Importa shape.dart y crea tus clases de figuras concretas:
    • Una clase Rectangle que extienda Shape e implemente Drawable. Añade las propiedades double width y double height. Calcula el área como width * height y el perímetro como 2 * (width + height). El método draw() debe mostrar Drawing rectangle [width]x[height]
    • Una clase Circle que extienda Shape e implemente Drawable. Añade una propiedad double radius. Usa 3.14159 para pi. Calcula el área como pi * radius * radius y el perímetro (circunferencia) como 2 * pi * radius. El método draw() debe mostrar Drawing circle with radius [radius]
  • main.dart: Importa shapes.dart y muestra el funcionamiento de tu calculador de figuras:
    • Crea un Rectangle llamado 'Rectangle' con un ancho de 5.0 y una altura de 3.0
    • Crea un Circle llamado 'Circle' con un radio de 4.0
    • Para cada figura, llama a draw() y después a describe()
    • Muestra una línea vacía entre las dos figuras

Este desafío demuestra cómo las clases abstractas definen una estructura compartida (cada figura tiene cálculos de área y perímetro), mientras que las interfaces añaden capacidades adicionales (figuras que se pueden dibujar). Cada clase concreta extiende la clase abstracta para su identidad principal e implementa la interfaz para obtener funcionalidad adicional.

Salida esperada:

Drawing rectangle 5.0x3.0
Rectangle - Area: 15.0, Perimeter: 16.0

Drawing circle with radius 4.0
Circle - Area: 50.26544, Perimeter: 25.13272

Pruébalo tú mismo

import 'shapes.dart';

void main() {
  // TODO: Crea un Rectangle llamado 'Rectangle' con un ancho de 5.0 y una altura de 3.0
  
  // TODO: Crea un Circle llamado 'Circle' con un radio de 4.0
  
  // TODO: Para el rectángulo, llama a draw() y luego a describe()
  
  // TODO: Imprime una línea vacía
  
  // TODO: Para el círculo, llama a draw() y luego a describe()
}

Todas las lecciones de Programación Orientada a Objetos

Practica por tu cuenta: Compilador de Dart online