Menu
Coddy logo textTech

Recapitulação - Calculadora de Formas

Parte da seção Programação Orientada a Objetos do Journey de Dart da Coddy — lição 49 de 110.

challenge icon

Desafio

Fácil

Vamos construir um sistema de calculadora de formas que reúne classes abstratas e interfaces para criar um kit de ferramentas de geometria flexível. Você projetará uma hierarquia de classes onde diferentes formas compartilham comportamentos comuns por meio da abstração, enquanto cada forma fornece seus próprios cálculos exclusivos.

Você organizará seu código em três arquivos:

  • shape.dart: Defina sua classe base abstrata e interface aqui:
    • Uma classe abstrata Shape com uma propriedade String name e um construtor. Inclua os métodos abstratos double calculateArea() e double calculatePerimeter(). Adicione um método regular describe() que imprime '$name - Area: ${calculateArea()}, Perimeter: ${calculatePerimeter()}'
    • Uma classe Drawable com um método draw() que imprime 'Drawing shape...'
  • shapes.dart: Importe shape.dart e crie suas classes de formas concretas:
    • Uma classe Rectangle que estende Shape e implementa Drawable. Adicione as propriedades double width e double height. Calcule a área como width * height e o perímetro como 2 * (width + height). O método draw() deve imprimir 'Drawing rectangle ${width}x$height'
    • Uma classe Circle que estende Shape e implementa Drawable. Adicione uma propriedade double radius. Use 3.14159 para pi. Calcule a área como pi * radius * radius e o perímetro (circunferência) como 2 * pi * radius. O método draw() deve imprimir 'Drawing circle with radius $radius'
  • main.dart: Importe shapes.dart e demonstre sua calculadora de formas:
    • Crie um Rectangle chamado 'Rectangle' com largura 5.0 e altura 3.0
    • Crie um Circle chamado 'Circle' com raio 4.0
    • Para cada forma, chame draw() e depois describe()
    • Imprima uma linha vazia entre as duas formas

Este desafio demonstra como as classes abstratas definem uma estrutura compartilhada (toda forma tem cálculos de área e perímetro), enquanto as interfaces adicionam capacidades adicionais (formas que podem ser desenhadas). Cada classe concreta estende a classe abstrata para sua identidade principal e implementa a interface para funcionalidade extra.

Saída 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

Experimente você mesmo

import 'shapes.dart';

void main() {
  // TODO: Crie um Rectangle chamado 'Rectangle' com width 5.0 e height 3.0
  
  // TODO: Crie um Circle chamado 'Circle' com radius 4.0
  
  // TODO: Para o rectangle, chame draw() e depois describe()
  
  // TODO: Imprima uma linha vazia
  
  // TODO: Para o circle, chame draw() e depois describe()
}

Todas as lições de Programação Orientada a Objetos