|
1 | 1 | # Encapsulamento |
2 | 2 |
|
3 | | -- Crie uma classe para representar uma pessoa, com os atributos privados de nome, data de nascimento e altura. Crie os métodos públicos necessários para sets e gets e também um método para imprimir todos dados de uma pessoa. Crie um método para calcular a idade da pessoa. |
| 3 | +- Crie uma classe para representar uma pessoa, com os atributos privados de nome, data de nascimento e altura. Crie os métodos públicos necessários para sets e gets e também um método para imprimir todos dados de uma pessoa. Crie um método para calcular a idade da pessoa. |
| 4 | + |
| 5 | +**Resolução:** |
| 6 | + |
| 7 | +<details> |
| 8 | + <summary>Spoiler warning</summary> |
4 | 9 |
|
5 | 10 | ```java |
6 | | -TODO |
| 11 | + |
| 12 | +import java.time.LocalDate; |
| 13 | +import java.time.Period; |
| 14 | + |
| 15 | +/** |
| 16 | + * Classe que representa uma pessoa com nome, data de nascimento e altura. |
| 17 | + */ |
| 18 | +public class Pessoa { |
| 19 | + private String nome; |
| 20 | + private LocalDate dataDeNascimento; |
| 21 | + private float altura; // Altura em metros |
| 22 | + |
| 23 | + // Setters |
| 24 | + public void setNome(String nome) { |
| 25 | + this.nome = nome; |
| 26 | + } |
| 27 | + |
| 28 | + public void setDataDeNascimento(LocalDate dataDeNascimento) { |
| 29 | + this.dataDeNascimento = dataDeNascimento; |
| 30 | + } |
| 31 | + |
| 32 | + public void setAltura(float altura) { |
| 33 | + this.altura = altura; |
| 34 | + } |
| 35 | + |
| 36 | + // Getters |
| 37 | + public String getNome() { |
| 38 | + return nome; |
| 39 | + } |
| 40 | + |
| 41 | + public LocalDate getDataDeNascimento() { |
| 42 | + return dataDeNascimento; |
| 43 | + } |
| 44 | + |
| 45 | + public float getAltura() { |
| 46 | + return altura; |
| 47 | + } |
| 48 | + |
| 49 | + /** |
| 50 | + * Calcula a idade da pessoa com base na data de nascimento. |
| 51 | + * |
| 52 | + * @return idade em anos |
| 53 | + */ |
| 54 | + public int getIdade() { |
| 55 | + return Period.between(dataDeNascimento, LocalDate.now()).getYears(); |
| 56 | + } |
| 57 | + |
| 58 | + @Override |
| 59 | + public String toString() { |
| 60 | + return String.format("Nome: %s | Idade: %d | Altura: %.2f m", |
| 61 | + nome, getIdade(), altura); |
| 62 | + } |
| 63 | +} |
| 64 | + |
7 | 65 | ``` |
8 | 66 |
|
9 | | -* * * |
| 67 | +</details> |
| 68 | + |
| 69 | +--- |
10 | 70 |
|
11 | 71 | - Crie uma classe Televisão e uma classe ControleRemoto que pode controlar o volume e trocar os canais da televisão. O controle de volume permite: |
12 | 72 | - Aumentar ou diminuir a potência do volume de som em uma unidade de cada vez; |
13 | 73 | - Aumentar e diminuir o número do canal em uma unidade; |
14 | 74 | - Trocar para um canal indicado; |
15 | 75 | - Consultar o valor do volume de som e o canal selecionado; |
16 | 76 |
|
| 77 | +**Resolução:** |
| 78 | + |
| 79 | +<details> |
| 80 | + <summary>Spoiler warning</summary> |
17 | 81 |
|
18 | 82 | ```java |
19 | | -TODO |
| 83 | + |
| 84 | +/** |
| 85 | + * Classe que representa uma televisão com controle de volume e canal. |
| 86 | + */ |
| 87 | +public class Televisao { |
| 88 | + private int volume; |
| 89 | + private int canal; |
| 90 | + |
| 91 | + private final int VOLUME_MAXIMO = 100; |
| 92 | + private final int VOLUME_MINIMO = 0; |
| 93 | + |
| 94 | + public Televisao() { |
| 95 | + this.volume = 50; |
| 96 | + this.canal = 1; |
| 97 | + } |
| 98 | + |
| 99 | + public void setCanal(int canal) { |
| 100 | + this.canal = canal; |
| 101 | + } |
| 102 | + |
| 103 | + public void setVolume(int volume) { |
| 104 | + this.volume = volume; |
| 105 | + } |
| 106 | + |
| 107 | + public int getCanal() { |
| 108 | + return canal; |
| 109 | + } |
| 110 | + |
| 111 | + public int getVolume() { |
| 112 | + return volume; |
| 113 | + } |
| 114 | + |
| 115 | + public boolean estaNoVolumeMaximo() { |
| 116 | + return volume >= VOLUME_MAXIMO; |
| 117 | + } |
| 118 | + |
| 119 | + public boolean estaNoVolumeMinimo() { |
| 120 | + return volume <= VOLUME_MINIMO; |
| 121 | + } |
| 122 | + |
| 123 | + @Override |
| 124 | + public String toString() { |
| 125 | + return String.format("Canal atual: %d | Volume atual: %d", canal, volume); |
| 126 | + } |
| 127 | +} |
| 128 | + |
20 | 129 | ``` |
| 130 | + |
| 131 | +```java |
| 132 | +/** |
| 133 | + * Classe que representa um controle remoto para uma televisão. |
| 134 | + */ |
| 135 | +public class ControleRemoto { |
| 136 | + |
| 137 | + private Televisao televisao; |
| 138 | + |
| 139 | + public ControleRemoto(Televisao televisao) { |
| 140 | + this.televisao = televisao; |
| 141 | + } |
| 142 | + |
| 143 | + /** |
| 144 | + * Aumenta o volume da televisão em 1 unidade. |
| 145 | + */ |
| 146 | + public void aumentarVolume() { |
| 147 | + if (!televisao.estaNoVolumeMaximo()) { |
| 148 | + televisao.setVolume(televisao.getVolume() + 1); |
| 149 | + } |
| 150 | + } |
| 151 | + |
| 152 | + /** |
| 153 | + * Diminui o volume da televisão em 1 unidade. |
| 154 | + */ |
| 155 | + public void diminuirVolume() { |
| 156 | + if (!televisao.estaNoVolumeMinimo()) { |
| 157 | + televisao.setVolume(televisao.getVolume() - 1); |
| 158 | + } |
| 159 | + } |
| 160 | + |
| 161 | + /** |
| 162 | + * Exibe as informações atuais da televisão. |
| 163 | + */ |
| 164 | + public void exibirInfo() { |
| 165 | + System.out.println(televisao.toString()); |
| 166 | + } |
| 167 | + |
| 168 | + /** |
| 169 | + * Muda o canal da televisão para o canal especificado. |
| 170 | + * |
| 171 | + * @param canal número do canal (deve ser maior a 0) |
| 172 | + */ |
| 173 | + public void mudarCanal(int canal) { |
| 174 | + if (canal > 0) { |
| 175 | + televisao.setCanal(canal); |
| 176 | + } |
| 177 | + } |
| 178 | + |
| 179 | + public void setTelevisao(Televisao televisao) { |
| 180 | + this.televisao = televisao; |
| 181 | + } |
| 182 | +} |
| 183 | + |
| 184 | + |
| 185 | +``` |
| 186 | + |
| 187 | +</details> |
| 188 | + |
| 189 | +--- |
| 190 | + |
| 191 | +**Resolução final:** |
| 192 | + |
| 193 | +<details> |
| 194 | + <summary>Spoiler warning</summary> |
| 195 | + |
| 196 | +```java |
| 197 | +import java.time.LocalDate; |
| 198 | + |
| 199 | +/** |
| 200 | + * Classe principal para testar as funcionalidades das classes Pessoa, |
| 201 | + * Televisão e ControleRemoto. |
| 202 | + */ |
| 203 | +public class Main { |
| 204 | + public static void main(String[] args) { |
| 205 | + |
| 206 | + // Parte 1 - Criar e exibir informações de uma pessoa |
| 207 | + System.out.println("---Parte 1---"); |
| 208 | + Pessoa pessoa = new Pessoa(); |
| 209 | + pessoa.setNome("Pessoa"); |
| 210 | + pessoa.setDataDeNascimento(LocalDate.of(2000, 1, 1)); |
| 211 | + pessoa.setAltura(1.72f); // Altura em metros |
| 212 | + |
| 213 | + System.out.println(pessoa.toString()); |
| 214 | + |
| 215 | + // Parte 2 - Criar televisões e controles remotos |
| 216 | + System.out.println("---Parte 2---"); |
| 217 | + Televisao tv1 = new Televisao(); |
| 218 | + Televisao tv2 = new Televisao(); |
| 219 | + |
| 220 | + ControleRemoto controle1 = new ControleRemoto(tv1); |
| 221 | + ControleRemoto controle2 = new ControleRemoto(tv2); |
| 222 | + ControleRemoto controle3 = new ControleRemoto(tv2); |
| 223 | + |
| 224 | + // Exibir informações iniciais |
| 225 | + controle1.exibirInfo(); |
| 226 | + controle2.exibirInfo(); |
| 227 | + controle3.exibirInfo(); |
| 228 | + |
| 229 | + // Alterar volumes e canais |
| 230 | + for (int i = 0; i < 3; i++) { |
| 231 | + controle1.aumentarVolume(); |
| 232 | + } |
| 233 | + |
| 234 | + controle2.diminuirVolume(); |
| 235 | + controle3.mudarCanal(8); |
| 236 | + |
| 237 | + // Exibir informações atualizadas |
| 238 | + controle1.exibirInfo(); |
| 239 | + controle2.exibirInfo(); |
| 240 | + controle3.exibirInfo(); |
| 241 | + } |
| 242 | +} |
| 243 | + |
| 244 | + |
| 245 | +``` |
| 246 | + |
| 247 | +**Saída esperada:** |
| 248 | + |
| 249 | +```bash |
| 250 | +---Parte 1--- |
| 251 | +Nome: Pessoa | Idade: 25 | Altura: 1.72 m |
| 252 | +---Parte 2--- |
| 253 | +Canal atual: 1 | Volume atual: 50 |
| 254 | +Canal atual: 1 | Volume atual: 50 |
| 255 | +Canal atual: 1 | Volume atual: 50 |
| 256 | +Canal atual: 1 | Volume atual: 53 |
| 257 | +Canal atual: 8 | Volume atual: 49 |
| 258 | +Canal atual: 8 | Volume atual: 49 |
| 259 | + |
| 260 | +``` |
| 261 | + |
| 262 | +</details> |
0 commit comments