Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

usando Classes Abstratas e Subscrevendo

import 'dart_classes_abstratas.dart';

void main(){

  Legumes mandioca1 = Legumes(true, 'Macaxeira', 1200.59, 'Marrom');

  Frutas banana1 = Frutas('Doce', 5, true, 'Banana', 250.65, 'Amarela');

  Nozes macadamia1 = Nozes(100.00, 'Doce', 20, true , 'Macadâmia', 1.95, 'Branco Amarelado');

  Citricas limao1 = Citricas(10, 'Azedo', 5, true, 'Limão', 5.25, 'Verde');

  mandioca1.infoAlimento();
  banana1.infoAlimento();
  macadamia1.infoAlimento();
  limao1.infoAlimento();

  mandioca1.cozinhar();
  limao1.fazerSuco();
  
  banana1.estaMadura(10);

  mandioca1.separarIngredientes();
  mandioca1.fazerMassa();
  mandioca1.assar();

  macadamia1.separarIngredientes();
  macadamia1.fazerMassa();
  macadamia1.assar();

}


class Alimento{
  String nome;
  double peso;
  String cor;

  Alimento(
    this.nome,
    this.peso,
    this.cor
  );

  void infoAlimento(){
    print('Este(a) $nome é saboroso e pesa $peso gramas, além da coloração $cor');
  }
}

class Frutas extends Alimento implements Bolo{
  
  String sabor;
  int diasDesdeColheita;
  bool? isMadura; 
 
  Frutas(
    this.sabor,
    this.diasDesdeColheita,
    this.isMadura,
    super.nome, 
    super.peso, 
    super.cor);

 estaMadura(int diasParaMadura) {
  isMadura = diasDesdeColheita >= diasParaMadura;
    if(isMadura == true){
      print('A $nome está madura');
    }
    else{
      print('A $nome não está madura, ela precisa de $diasParaMadura dias para estar madura');
    }
  }

void fazerSuco(){
  print('Você fez um ótimo suco de $nome');
}

 @override
  void assar() {
    print('Indo para o forno \n45min... \nPlim Plim o Bolo de $nome está pronto bom apetite');
  }
  
  @override
  void fazerMassa() {
    print('Misturando o(a) $nome com farinha de rosca fermentada 3 ovos açucar e uma pitada de sal');
  }
  
  @override
  void separarIngredientes() {
    print('Separando $nome... \nLavando $nome...');
  }

}

class Legumes extends Alimento implements Bolo{
  bool isPrecisaCozinhar;
  
  Legumes(
    this.isPrecisaCozinhar, 
    super.nome, 
    super.peso, 
    super.cor);

  void cozinhar(){
    if(isPrecisaCozinhar){
      print('Pronto, o(a) $nome está cozinhando');
    }else{
      print('Não precisa cozinhar');
    }
  }  
  
  @override
  void assar() {
    print('Indo para o forno \n45min... \nPlim Plim o Bolo de $nome está pronto, bom apetite');
  }
  
  @override
  void fazerMassa() {
    print('Misturando o(a) $nome com farinha de rosca fermentada 3 ovos açucar e uma pitada de sal');
  }
  
  @override
  void separarIngredientes() {
    print('Separando $nome... \nLavando $nome...');
  }
}

class Citricas extends Frutas{
  double nivelDeAzedo;

  Citricas(
    this.nivelDeAzedo,
    super.sabor, 
    super.diasDesdeColheita,
    super.isMadura, 
    super.nome, 
    super.peso, 
    super.cor);

void existeRefri(bool existe){
  if(existe){
    print('Existe refrigerante de $nome');
  }else{
    print('Não existe refri de $nome');
  }
}
}

class Nozes extends Frutas{
  double porcentagemOleoNatural;

  Nozes(
    this.porcentagemOleoNatural,
    super.sabor, 
    super.diasDesdeColheita, 
    super.isMadura, 
    super.nome, 
    super.peso, 
    super.cor);

    @override
    void fazerMassa(){
      print('Tirar a casca');
      super.fazerMassa();
    }
}

a classe abstrata ficou em outro arquivo estava vendo sobre como melhor organizar meu código, porém o restante vou organizar depois era mais para testar

abstract class Bolo{

  void separarIngredientes();

  void fazerMassa();

  void assar();
}

resultado:

Este(a) Macaxeira é saboroso e pesa 1200.59 gramas, além da coloração Marrom Este(a) Banana é saboroso e pesa 250.65 gramas, além da coloração Amarela Este(a) Macadâmia é saboroso e pesa 1.95 gramas, além da coloração Branco Amarelado Este(a) Limão é saboroso e pesa 5.25 gramas, além da coloração Verde Pronto, o(a) Macaxeira está cozinhando Você fez um ótimo suco de Limão A Banana não está madura, ela precisa de 10 dias para estar madura Separando Macaxeira... Lavando Macaxeira... Misturando o(a) Macaxeira com farinha de rosca fermentada 3 ovos açucar e uma pitada de sal Indo para o forno 45min... Plim Plim o Bolo de Macaxeira está pronto, bom apetite Separando Macadâmia... Lavando Macadâmia... Tirar a casca Misturando o(a) Macadâmia com farinha de rosca fermentada 3 ovos açucar e uma pitada de sal Indo para o forno 45min... Plim Plim o Bolo de Macadâmia está pronto bom apetite

Exited.

1 resposta
solução!

Oii Jonatas, tudo bem?

Ótimo trabalho na prática com classes abstratas e sobrescrita em Dart!

  1. Você definiu uma classe abstrata Bolo com três métodos abstratos: separarIngredientes, fazerMassa e assar. Isso é uma ótima prática para definir um conjunto de comportamentos que as classes concretas devem implementar.

  2. Você implementou a interface Bolo nas classes Frutas e Legumes, sobrescrevendo os métodos abstratos conforme necessário para cada tipo de alimento. Isso demonstra um bom uso do polimorfismo para permitir que diferentes tipos de alimentos compartilhem um conjunto comum de comportamentos.

  3. Você usou a anotação @override ao sobrescrever os métodos da classe abstrata, o que ótimo pra garantir que você esteja realmente substituindo um método da classe pai.

  4. Você incluiu uma implementação personalizada do método fazerMassa na classe Nozes, que primeiro executa uma ação específica para nozes e depois chama o método fazerMassa da classe pai usando super.fazerMassa(). Isso mostra uma boa compreensão de como estender o comportamento de métodos em classes herdeiras.

Seu código tá bem organizado e mostra um bom entendimento dos conceitos de classes abstratas, herança e polimorfismo em Dart.

Um abraço e bons estudos.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software