1
resposta

Duvida entre quando usar classe abstrata ou classe herdada

Srs,

Ao realizar esse curso me deparei com uma dúvida. Quando usar classe abstrata e quando usar a herança ?

Então criei um exemplo do meu dia a dia e tentei aplicar com o conhecimento do curso, mas estou com dúvida se apliquei corretamente o conceito de herança e de classe abstrata.

  • Class Pessoa

  • Class Aluno extends Pessoa

  • Class abstract Status // Define se o aluno está matriculado, trancado,desistente, etc..

  • Class AlunoTurma extends Aluno implements status

Poderiam me ajudar ?

Segue meu código:

void main() { AlunoTurma pessoa1 = AlunoTurma( nome: "Virginio", sexo: "M", idade: 47, ra: "016001", codturma: "10º-DIREITO-2023/2"); pessoa1.isMaioridade(); pessoa1.imprimeDados(); pessoa1.imprimeTurmaAluno(); pessoa1.alterarStatus(2); }

class Pessoa { int idade; String nome; String sexo; bool? maiorIdade;

//Construtor Pessoa( {required String this.nome, required String this.sexo, required int this.idade, bool? maiorIdade});

void isMaioridade() { print("$nome-$sexo-$idade"); maiorIdade = 18 >= idade; print(maiorIdade); }

void imprimeDados() { print("Meu nome é $nome com sexo $sexo, idade $idade "); } }

bool isOld(int idade) { if (idade > 60) { return true; } else if (idade < 60) { return false; } else { return false; } }

class Aluno extends Pessoa { String ra;

Aluno({required nome, required sexo, required idade, required this.ra}) : super(idade: idade, nome: nome, sexo: sexo);

void imprimeDadosAluno() { print("Meu nome é $nome com sexo $sexo, idade $idade e matricula $ra"); } }

class AlunoTurma extends Aluno implements Status { String codturma; AlunoTurma( {required nome, required sexo, required idade, required ra, required this.codturma}) : super(idade: idade, nome: nome, sexo: sexo, ra: ra);

void imprimeTurmaAluno() { print("O aluno $nome - $ra esta na turma $codturma"); }

@override alterarStatus(int codStatus) { if (codStatus == 1) { print("Pre-matriculado"); } else if (codStatus == 2) { print("Matriculado"); } else if (codStatus == 4) { print("Trancado"); } } }

abstract class Status {

void alterarStatus(int codStatus);

}

1 resposta

Olá, Virginio!

Parece que você está com dúvidas sobre quando usar uma classe abstrata ou uma classe herdada. Vou tentar te ajudar!

Uma classe abstrata é uma classe que não pode ser instanciada, ou seja, você não pode criar objetos diretamente a partir dela. Ela serve como uma base para outras classes que irão herdar seus atributos e métodos. No seu exemplo, a classe "Status" é uma classe abstrata, pois ela define um comportamento que deve ser implementado pelas classes que a herdam.

Por outro lado, a herança ocorre quando uma classe herda os atributos e métodos de outra classe. No seu exemplo, a classe "Aluno" herda os atributos e métodos da classe "Pessoa". Isso significa que a classe "Aluno" terá todos os atributos e métodos da classe "Pessoa", além dos seus próprios atributos e métodos.

A classe "AlunoTurma" é uma classe que herda os atributos e métodos da classe "Aluno" e também implementa o comportamento definido na classe abstrata "Status". Ou seja, ela herda os atributos e métodos da classe "Aluno" e também implementa o método "alterarStatus" definido na classe "Status".

No seu código, você está utilizando corretamente a herança e a classe abstrata. A classe "AlunoTurma" herda os atributos e métodos da classe "Aluno" e implementa o método "alterarStatus" definido na classe "Status".

No entanto, notei que você não está chamando o método "imprimeDadosAluno" da classe "Aluno" em nenhum lugar do seu código. Se você deseja imprimir os dados do aluno, você pode chamar esse método dentro do método "imprimeTurmaAluno" da classe "AlunoTurma".

Espero ter ajudado a esclarecer suas dúvidas! Se tiver mais alguma pergunta, é só me dizer. Bons estudos!