Mobile App Development · Dart/Flutter

06 · Objetos — Desafios

Dois cenários mais completos combinando classes, listas de objetos e laços: um catálogo de produtos e um sistema de gerenciamento de tarefas.

Desafio 1

desafio_01_catalogo_produtos.dart

Modela um catálogo com a classe Produto, uma List<Produto> e um acumulador que soma o preço de cada item enquanto percorre a lista com for-in.

// Desafio: criar um catálogo de produtos com classe, lista e acumulador.
// Demonstra como combinar orientação a objetos com controle de fluxo.

// Classe Produto com três atributos e um método de exibição.
class Produto {
  String nome;
  String categoria;
  double preco;

  // Construtor posicional: recebe nome, categoria e preço nessa ordem.
  Produto(this.nome, this.categoria, this.preco);

  // Exibe um resumo do produto com todos os atributos separados por " | ".
  void exibirResumo() {
    print('$nome | $categoria | R\$ ${preco.toStringAsFixed(2)}');
  }
}

void main() {
  // Lista de produtos do catálogo — cada elemento é um objeto Produto.
  List<Produto> produtos = [
    Produto('Mouse', 'Acessorios', 89.90),
    Produto('Teclado', 'Acessorios', 150.00),
    Produto('Monitor', 'Video', 900.00),
  ];

  // Acumulador para somar os preços de todos os produtos.
  double total = 0;

  print('=== Catalogo ===');

  // Percorre cada produto, exibe seu resumo e acumula o preço no total.
  for (Produto produto in produtos) {
    produto.exibirResumo();
    total += produto.preco;
  }

  // Exibe o valor total de todos os produtos cadastrados no catálogo.
  print('Total cadastrado: R\$ ${total.toStringAsFixed(2)}');
}

Saída esperada

=== Catalogo ===
Mouse | Acessorios | R$ 89.90
Teclado | Acessorios | R$ 150.00
Monitor | Video | R$ 900.00
Total cadastrado: R$ 1139.90

Como executar

dart run 06-Objetos/03_Desafio/codigo_fonte/desafio_01_catalogo_produtos.dart

Desafio 2

desafio_02_sistema_tarefas.dart

Modela tarefas com a classe Tarefa, usando um parâmetro nomeado opcional ({this.concluida = false}) e um método concluir() que altera o estado do objeto.

// Desafio: sistema de gerenciamento de tarefas com classe e lista de objetos.
// Demonstra uso de atributo bool, parâmetro nomeado opcional e método de ação.

class Tarefa {
  String titulo;
  String prioridade;
  // 'concluida' começa como false por padrão (tarefa ainda não realizada).
  bool concluida;

  // O parâmetro 'concluida' é nomeado e opcional — padrão é false.
  Tarefa(this.titulo, this.prioridade, {this.concluida = false});

  // Método de ação: marca a tarefa como concluída alterando o atributo 'concluida'.
  void concluir() {
    concluida = true;
  }

  // Exibe um resumo da tarefa com título, prioridade e status atual.
  void exibirResumo() {
    // Operador ternário converte bool para texto legível.
    String status = concluida ? 'concluida' : 'pendente';
    print('$titulo | Prioridade: $prioridade | Status: $status');
  }
}

void main() {
  // Cria uma lista com três tarefas — todas começam como pendentes.
  List<Tarefa> tarefas = [
    Tarefa('Estudar funcoes', 'alta'),
    Tarefa('Praticar classes', 'alta'),
    Tarefa('Revisar colecoes', 'media'),
  ];

  // Marca a primeira tarefa como concluída usando o índice [0].
  tarefas[0].concluir();

  print('=== Tarefas ===');

  // Percorre a lista e exibe o resumo atualizado de cada tarefa.
  for (Tarefa tarefa in tarefas) {
    tarefa.exibirResumo();
  }
}

Saída esperada

=== Tarefas ===
Estudar funcoes | Prioridade: alta | Status: concluida
Praticar classes | Prioridade: alta | Status: pendente
Revisar colecoes | Prioridade: media | Status: pendente

Como executar

dart run 06-Objetos/03_Desafio/codigo_fonte/desafio_02_sistema_tarefas.dart