1
resposta

[Atividade] Polimorfismo e sobrescrita usando TRANSPORTES

Elaborei um exercício com veículos de transporte, para tentar abstrair o conceito de polimorfismo e sobrescrita com outro tema que não fosse alimentos. Dessa forma, abaixo eu crio 5 objetos de transporte, e faço alguns testes para cada um deles.

"Transporte" é a classe concreta principal, e dela derivam 2 sub-classes, "Motorizado" e "NaoMotorizado". Para a classe "Motorizado"temos as classes filhas "Eletrico" e "Combustao" e também temos uma implementação de uma classe abstrata "Motor" das quais as duas classes filhas se utilizam. Para motores à combustão ainda é possível definir o tipo do combustível.

Já para a sub-classe "NaoMotorizado" apenas implementei um método para verificar se o veículo está montado ou não.

Tive diversos problemas na hierarquia entre as classes, e isso me fez entender bem o conceito sobre em qual classe devo utilizar quais métodos, sendo que classes mais baixas herdam as variáveis das classes mais altas, sendo que o contrário não é verdadeiro, então tentar usar uma variável mais específica dentro de uma classe mais alta não funcionaria e isso tem uma relação importante com a estrutura e a lógica do que você está implementando.

Bons estudos a todos! :)

void main() { NaoMotorizado patinete01 = NaoMotorizado('Happy', 10, 'azul', true); NaoMotorizado bicicleta01 = NaoMotorizado('Caloi', 20, 'verde', false); NaoMotorizado bicicleta02 = NaoMotorizado('Monark', 20, 'verde', true); Eletrico carro01 = Eletrico('HB20', 600, 'prata'); Combustao caminhao01 = Combustao('Volvo', 3500, 'amarela', 'Diesel');

//testando alguns métodos

//PATINETE patinete01.printVeiculo(); //BICICLETA bicicleta01.printVeiculo(); bicicleta01.estaMontado(); bicicleta02.estaMontado(); //CARRO carro01.printVeiculo(); carro01.montarMotor(); carro01.adicionarCombustivel(); //CAMINHAO caminhao01.printVeiculo(); caminhao01.adicionarCombustivel(); }

class Transporte { String nome; double peso; //kg String cor;

//construtor Transporte(this.nome, this.peso, this.cor); }

class Motorizado extends Transporte implements Motor { Motorizado(String nome, double peso, String cor) : super(nome, peso, cor);

@override void montarMotor() { print('Montar o motor com as peças selecionadas!'); }

@override void encaixarMotorNoChassi() { print('Encaixar o motor montado no chassi do $nome!'); }

@override void adicionarCombustivel() { print('Adicionar combustível ao motor montado.'); } }

class NaoMotorizado extends Transporte { bool isMontado;

NaoMotorizado(String nome, double peso, String cor, this.isMontado) : super(nome, peso, cor);

//metodos void printVeiculo() { print( "Este(a) $nome pesa $peso quilogramas e é $cor. Esse veículo não possui motor"); }

void estaMontado() { if (isMontado == true) { print("Esse(a) $nome está montada!"); } else { print("Você precisa montar esse(a) $nome."); } } }

class Eletrico extends Motorizado { String? tipoMotor = 'Elétrico';

//construtor Eletrico(String nome, double peso, String cor, {this.tipoMotor}) : super(nome, peso, cor);

//metodos

void printVeiculo() { print( "Este(a) $nome pesa $peso quilogramas e é $cor. Esse veículo possui motor"); }

@override void montarMotor() { print('Esse $nome é elétrico. Selecionar as peças para motor elétrico'); super.montarMotor(); }

@override void encaixarMotorNoChassi() { print('Encaixar o motor no chassi.'); }

@override void adicionarCombustivel() { print( 'Esse $nome não utiliza combustíveis fósseis. Utiliza energia elétrica.'); } }

class Combustao extends Motorizado { String combustivel;

Combustao(String nome, double peso, String cor, this.combustivel) : super(nome, peso, cor);

void printVeiculo() { print( "Este(a) $nome pesa $peso quilogramas e é $cor. Esse veículo possui motor e é movido à $combustivel"); }

@override void montarMotor() { print('Selecionar as peças para motor a combustão'); }

@override void encaixarMotorNoChassi() { print('Encaixar o motor no chassi.'); }

@override void adicionarCombustivel() { print('Esse $nome tem motor à combustão. Adicionar $combustivel ao motor.'); } }

abstract class Motor { void montarMotor() { print("Montar o motor com as peças selecionadas"); }

void encaixarMotorNoChassi();

void adicionarCombustivel(); }

1 resposta

Olá! Parabéns pelo seu empenho em criar um exercício para praticar os conceitos de polimorfismo e sobrescrita. A sua implementação está correta e bem estruturada, e você conseguiu aplicar os conceitos de maneira eficaz.

A classe abstrata "Motor" foi implementada na classe "Motorizado" e seus métodos foram sobrescritos nas subclasses "Eletrico" e "Combustao", o que é um excelente exemplo de polimorfismo e sobrescrita.

A sua observação sobre a hierarquia das classes também está correta. As subclasses herdam os atributos e métodos da superclasse, mas a superclasse não tem acesso aos atributos e métodos específicos das subclasses. Isso é fundamental para a organização do código e para a implementação de lógicas específicas para cada tipo de objeto.

Parabéns e continue assim.

Espero ter ajudado e bons estudos!