Skip to content

Commit 8c54c68

Browse files
Merge pull request #46 from LuisGutierrez15/feature/encapsulamento
feat: resolver exercício de encapsulamento (closes #45)
2 parents f3c5b08 + 15edf76 commit 8c54c68

5 files changed

Lines changed: 447 additions & 4 deletions

File tree

1-POO1/4-encapsulamento.md

Lines changed: 246 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,262 @@
11
# Encapsulamento
22

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>
49

510
```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+
765
```
866

9-
* * *
67+
</details>
68+
69+
---
1070

1171
- 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:
1272
- Aumentar ou diminuir a potência do volume de som em uma unidade de cada vez;
1373
- Aumentar e diminuir o número do canal em uma unidade;
1474
- Trocar para um canal indicado;
1575
- Consultar o valor do volume de som e o canal selecionado;
1676

77+
**Resolução:**
78+
79+
<details>
80+
<summary>Spoiler warning</summary>
1781

1882
```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+
20129
```
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>
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package POO1_encapsulamento;
2+
3+
/**
4+
* Classe que representa um controle remoto para uma televisão.
5+
*/
6+
public class ControleRemoto {
7+
8+
private Televisao televisao;
9+
10+
public ControleRemoto(Televisao televisao) {
11+
this.televisao = televisao;
12+
}
13+
14+
/**
15+
* Aumenta o volume da televisão em 1 unidade.
16+
*/
17+
public void aumentarVolume() {
18+
if (!televisao.estaNoVolumeMaximo()) {
19+
televisao.setVolume(televisao.getVolume() + 1);
20+
}
21+
}
22+
23+
/**
24+
* Diminui o volume da televisão em 1 unidade.
25+
*/
26+
public void diminuirVolume() {
27+
if (!televisao.estaNoVolumeMinimo()) {
28+
televisao.setVolume(televisao.getVolume() - 1);
29+
}
30+
}
31+
32+
/**
33+
* Exibe as informações atuais da televisão.
34+
*/
35+
public void exibirInfo() {
36+
System.out.println(televisao.toString());
37+
}
38+
39+
/**
40+
* Muda o canal da televisão para o canal especificado.
41+
*
42+
* @param canal número do canal (deve ser maior a 0)
43+
*/
44+
public void mudarCanal(int canal) {
45+
if (canal > 0) {
46+
televisao.setCanal(canal);
47+
}
48+
}
49+
50+
public void setTelevisao(Televisao televisao) {
51+
this.televisao = televisao;
52+
}
53+
}

src/POO1_encapsulamento/Main.java

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package POO1_encapsulamento;
2+
3+
import java.time.LocalDate;
4+
5+
/**
6+
* Classe principal para testar as funcionalidades das classes Pessoa,
7+
* Televisão e ControleRemoto.
8+
*/
9+
public class Main {
10+
public static void main(String[] args) {
11+
12+
// Parte 1 - Criar e exibir informações de uma pessoa
13+
System.out.println("---Parte 1---");
14+
Pessoa pessoa = new Pessoa();
15+
pessoa.setNome("Pessoa");
16+
pessoa.setDataDeNascimento(LocalDate.of(2000, 1, 1));
17+
pessoa.setAltura(1.72f); // Altura em metros
18+
19+
System.out.println(pessoa.toString());
20+
21+
// Parte 2 - Criar televisões e controles remotos
22+
System.out.println("---Parte 2---");
23+
Televisao tv1 = new Televisao();
24+
Televisao tv2 = new Televisao();
25+
26+
ControleRemoto controle1 = new ControleRemoto(tv1);
27+
ControleRemoto controle2 = new ControleRemoto(tv2);
28+
ControleRemoto controle3 = new ControleRemoto(tv2);
29+
30+
// Exibir informações iniciais
31+
controle1.exibirInfo();
32+
controle2.exibirInfo();
33+
controle3.exibirInfo();
34+
35+
// Alterar volumes e canais
36+
for (int i = 0; i < 3; i++) {
37+
controle1.aumentarVolume();
38+
}
39+
40+
controle2.diminuirVolume();
41+
controle3.mudarCanal(8);
42+
43+
// Exibir informações atualizadas
44+
controle1.exibirInfo();
45+
controle2.exibirInfo();
46+
controle3.exibirInfo();
47+
}
48+
}

0 commit comments

Comments
 (0)