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

Vamos a construir un sistema de calculadora de formas que combine clases abstractas e interfaces para crear un kit de herramientas de geometría flexible. Diseñarás una jerarquía de clases donde diferentes formas comparten un comportamiento común a través de la abstracción, mientras que cada forma proporciona sus propios cálculos únicos.

Organizarás tu código en tres archivos:

  • shape.dart: Define tu clase base abstracta e interfaz aquí:
    • 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 regular describe() que imprima '$name - Area: ${calculateArea()}, Perimeter: ${calculatePerimeter()}'
    • Una clase Drawable con un método draw() que imprima 'Drawing shape...'
  • shapes.dart: Importa shape.dart y crea tus clases de formas 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 imprimir '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 imprimir 'Drawing circle with radius $radius'
  • main.dart: Importa shapes.dart y demuestra tu calculadora de formas:
    • 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 forma, llama a draw() y luego a describe()
    • Imprime una línea vacía entre las dos formas

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

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