Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Projeto] Faça como eu fiz: Encapsulamento

main.dart

import 'viagem.dart';
import 'transporte.dart';

void main() {
  Viagem viagemFerias = Viagem(locomocao: Transporte.aviao, dinheiro: 1200);
  viagemFerias.escolherMeioTransporte(viagemFerias.locomocao);
  print('Código de desconto: ${viagemFerias.returnCodigo()}');
  print(
      'O valor final da viagem é: R\$${Viagem.codigoDescontoViagem(viagemFerias.dinheiro)}');

  viagemFerias.visitar('Porto Alegre');
  viagemFerias.registrarPrecosVisitas('Porto Alegre', 1500);
  viagemFerias.visitar('Rio de Janeiro');
  viagemFerias.registrarPrecosVisitas('Rio de Janeiro', 2200);
  print(viagemFerias.registrosVisitados);
  print(viagemFerias.registrarPreco);
  print(viagemFerias.consultarLocaisVisitados);
  viagemFerias.visitar('São Paulo');
  viagemFerias.visitar('Salvador');
  viagemFerias.alterarLocaisVisitados = 15;
  print(viagemFerias.consultarLocaisVisitados);
}

viagem.dart

import 'transporte.dart';

class Viagem {
  static String codigoViagem = 'JD23JDF';
  double dinheiro = 0;
  Transporte locomocao;
  Set<String> registrosVisitados = <String>{};
  Map<String, dynamic> registrarPreco = {};
  int _totalLocaisVisitados = 0;

  Viagem({required this.locomocao, required this.dinheiro});

  returnCodigo() {
    return codigoViagem;
  }

  void escolherMeioTransporte(Transporte locomocao) {
    switch (locomocao) {
      case Transporte.carro:
        print('Vou de carro.');
        break;
      case Transporte.bike:
        print('Vou de bike.');
        break;
      case Transporte.moto:
        print('Vou de moto.');
        break;
      case Transporte.aviao:
        print('Vou de avião.');
        break;
      case Transporte.andando:
        print('Vou andando.');
        break;
      default:
        print('Inválido!');
    }
  }

  void visitar(String localVisita) {
    registrosVisitados.add(localVisita);
    _totalLocaisVisitados++;
  }

  void registrarPrecosVisitas(String local, dynamic valor) {
    registrarPreco[local] = valor;
  }

  static double codigoDescontoViagem(double dinheiro) {
    double taxa = 0.25;
    return dinheiro * taxa;
  }

  int get consultarLocaisVisitados {
    return _totalLocaisVisitados;
  }

  set alterarLocaisVisitados(int novaQnt) {
    if (novaQnt < 10) {
      _totalLocaisVisitados = novaQnt;
    } else {
      print('Não é possível visitar tantos locais em tão pouco tempo.');
    }
  }
}

transporte.dart

enum Transporte { carro, bike, moto, aviao, andando }

Saída do código

2 respostas

.....

solução!

Olá, Jhonatan.

Tudo bem?

Pelo código que você compartilhou, parece que você está trabalhando em um projeto de viagem usando a linguagem Dart. Pelo que entendi, você está com dúvidas sobre como usar encapsulamento e getters/setters para gerenciar o acesso no seu código.

No arquivo "viagem.dart", você definiu a classe "Viagem" com algumas propriedades e métodos. Para garantir o encapsulamento, você pode usar o modificador "_" antes do nome de uma propriedade ou método para torná-lo privado. Isso significa que esses elementos só podem ser acessados de dentro da própria classe.

Por exemplo, você definiu a propriedade "_totalLocaisVisitados" como privada e criou um getter chamado "consultarLocaisVisitados" para acessar seu valor. Isso é uma ótima prática, pois permite que você controle o acesso a essa informação e evita que ela seja modificada diretamente de fora da classe.

Além disso, você também criou um setter chamado "alterarLocaisVisitados" para modificar o valor da propriedade "_totalLocaisVisitados". No entanto, você adicionou uma validação para garantir que o novo valor seja menor que 10. Se o novo valor for maior ou igual a 10, uma mensagem de erro será exibida. Isso é outra forma de controlar o acesso e garantir que os valores sejam alterados de acordo com as regras definidas.

No seu código, você está usando essas propriedades e métodos encapsulados corretamente. Por exemplo, você chama o método "visitar" para adicionar um local visitado à lista "registrosVisitados" e incrementar o valor da propriedade "_totalLocaisVisitados". Você também usa o getter "consultarLocaisVisitados" para exibir o valor atual de locais visitados.

Em resumo, você está no caminho certo ao usar encapsulamento e getters/setters para controlar o acesso às propriedades e métodos da classe "Viagem". Continue praticando e explorando esses conceitos para melhorar ainda mais seu código!

Espero ter ajudado e bons estudos!