-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathjavaPoo.txt
More file actions
249 lines (164 loc) · 11.5 KB
/
Copy pathjavaPoo.txt
File metadata and controls
249 lines (164 loc) · 11.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
Java – Programação Orientada a Objetos (POO)
Conceitos básicos da linguagem
Java é case sensitive, CamelCase e Orientação a Objetos pura.
CamelCase: Classes e interfaces têm letra maiúscula em cada palavra. Métodos e atributos começam com minúscula e depois maiúscula, por exemplo calcularMedia.
Main mais limpo possível, focada na lógica e interação com o usuário. Usar classes de gerenciamento e criação de objetos.
Single Responsiblity Principle: um dos cinco princípios do SOLID. Uma classe deve ter apenas uma razão para mudar, significando que uma classe deve ter apenas um trabalho ou responsabilidade.
Packages
Package define o pacote, que é uma forma de organizar classes.
Funciona como uma pasta lógica dentro do projeto.
Permite reutilizar código usando import.
Exemplo: package poojava;
Tipos de dados
Tipos primitivos guardam valores diretamente na memória e são mais rápidos. Principais tipos primitivos:
int para números inteiros | double e float para números reais.
boolean para verdadeiro ou falso | char para um único caractere.
long e short para inteiros maiores ou menores | void indica que um método não retorna valor.
final | Modificador constante, como o const.
Tipos por referência guardam o endereço de memória (heap).
Exemplos: String, arrays e objetos.
String não é tipo primitivo, é uma classe.
Possui métodos como length, isEmpty, toUpperCase, toLowerCase.
Bibliotecas (imports)
| import java.X.Y; | X: util para utilidades, io para in/out, time para data-hora, etc.
InputMismatchException / FileNotFoundException / IOException | Erros.
LocalDate / LocalTime / LocalDateTime / DateTimeFormatter | Data e hora.
Arrays / ArrayList / HashMap / LinkedList / List / Vector | Listas.
FileWriter / BufferedReader / FileReader | Leitura e escrita em arquivo.
Scanner | Leitura do usuário.
Random | Aleatoriedade.
Manipulação de String
Os principais métodos são:
length retorna o tamanho do texto.
charAt retorna o caractere em uma posição.
indexOf e lastIndexOf encontram posições.
replace substitui texto.
toUpperCase e toLowerCase mudam para maiúsculo ou minúsculo.
contains verifica se contém texto.
isEmpty verifica se está vazio.
Estruturas de decisão
if e else executam blocos dependendo de uma condição.
Operador ternário é uma forma curta de if e else.
Exemplo: condição ? valorSeVerdadeiro : valorSeFalso
switch é usado quando há várias opções possíveis.
default executa quando nenhum caso é atendido.
Estruturas de repetição
while repete enquanto a condição for verdadeira.
do while executa pelo menos uma vez antes de testar a condição.
for é usado quando se sabe quantas vezes repetir.
break interrompe o loop.
continue pula para a próxima repetição.
Métodos
Métodos servem para reutilizar código. Podem retornar valor ou não.
Sobrecarga de método acontece quando existem métodos com o mesmo nome, mas parâmetros diferentes.
Varargs permitem passar quantidade variável de argumentos para um método.
Tratamento de erros (exceções)
try contém o código que pode gerar erro, catch trata o erro, finally sempre executa no final.
Evita que o programa quebre. Quando não se sabe o tipo de erro, coloque no catch Exception e
Exceptions: Condições excepcionais que ocorrem durante a execução de um programa e podem interromper o fluxo normal de execução. Usadas para lidar com erros e situações imprevistas.
São objetos que herdam da classe Throwable e são divididas em duas categorias principais:
checked exceptions: são aquelas que devem ser tratadas explicitamente pelo programador,
unchecked exceptions: não exigem tratamento obrigatório. RuntimeException
Arquivos de texto
FileWriter escreve arquivos pequenos.
BufferedWriter é melhor para arquivos grandes.
PrintWriter é usado para relatórios e logs.
FileReader e BufferedReader leem arquivos.
FileOutputStream é usado para arquivos binários como imagens e áudios.
Programação Orientada a Objetos
Classe é o modelo. Objeto é uma instância da classe.
Encapsulamento esconde partes da classe e controlar quem pode acessar.
public | Pode ser acessado de qualquer lugar do programa.
private | Só pode ser acessado dentro da própria classe. getters e setters.
protected | Pode ser acessado na mesma classe, no mesmo pacote e em classes filhas(herança).
static | Pertence á classe, não ao objeto. Será algo em comum em todas intâncias.
Herança
Uma classe filha herda características da classe pai. Usado quando houver classes semelhantes e quiser reutilizar código. Usa a palavra 'extends', public class Cliente extends Pessoa.
'super' é usado para chamar um métodos da classe pai, super.imprimir().
Polimorfismo
Capacidade de um objeto ser referenciado por uma superclasse/interface e comportar de maneira diferente pra cada classe filha.
A interface "Animal" declara o método "comunicar()" que é implementado pelas classes descendentes.
Um objeto de qualquer uma das classes descendentes pode ser referenciado como um objeto da superclasse "Animal".
Permite tratar objetos de diferentes classes de forma genérica, simplificando o código.
Durante a execução, o método chamado dependerá do tipo de classe descendente.
Permite a criação de métodos que operam em objetos da superclasse ou da interface, mas que podem ser sobrescritos e comportarem de maneira diferente nas classes descendentes.
Acontece quando passamos a interface como parâmetros de funções.
Classe Abstrata
Não podem ser instanciadas. Servem como modelo para classes filhas. Pode ter atributos e métodos concretos.
Tem métodos abstratos (sem código, só assinatura), e se uma classe tiver um, toda classe vira abstrata.
Ex: Tenho Engenheiro, Diretor, Secretario, Gerente. Todos são Funcionario, mas não preciso new Funcionario(), então torno Funcionario abstrato para servir de bússola/molde para as filhas.
É possível criar uma referência de uma classe abstrata e atribuí-la a um objeto de uma classe concreta que a estende.
Interface
Classe abstrata onde todos métodos são abstratos, sem implementação, sem atributos.
Tudo dentro da interface é PUBLICO, STATICO e CONSTANTE.
Uma classe pode implementar várias interfaces.
Usa a palavra 'implements'.
toString
Converte um objeto em texto.
Quando se usa System.out.println(obj), o Java chama toString automaticamente.
Pode ser sobrescrito para mostrar informações do objeto.
Wrapper Classes
Permitem tratar tipos primitivos como objetos.
Exemplos:
int vira Integer
double vira Double
boolean vira Boolean
Autoboxing converte automaticamente primitivo para objeto.
Unboxing faz o contrário.
Enum
Representa um conjunto fixo de constantes.
Mais seguro que usar String para opções fixas.
Threads
Executam tarefas simultaneamente.
Ajudam no desempenho.
Multithreading significa vários fluxos de execução ao mesmo tempo.
Collection Framework e Map
Conjunto unificado de classes e interfaces que permite manipular dados. Fornece Estruturas de Dados prontas.
For-each percorre todos os elementos de um array.
Collection > Set > HashSet
> List > Vector > Stack
> ArrayList
> LinkedList
> Queue > ^
Map > HashMap
SET
HashSet: Não permite repetições. Melhor opção para busca rápida, não mantendo os elementos em nenhuma ordem específica.
Map
HashMap: Mapeia chaves únicas a valores. Permite valores duplicados. Busca rápida com duplicidade de valores.
Processa o valor de entrada(chave) com a função hashCode() e o valor resultante é "bucket" em que a chave será armazenada. Se 2+ chaves tiverem mesmo hash code, temos uma colisão. HashMap armazenará esses pares no mesmo bucket como uma lista encadeada ou uma árvore balanceada quando muitas colisões em um só bucket.
Queue
LinkedList: Funciona como fila. O primeiro que entra é o primeiro que sai (FIFO – First In, First Out).
Stack: Pilha de pratos. O primeiro aentrar é o último a sair(FILO – First In, Last Out).
List
Coleção que permite elementos duplicados. Permite acesso posicional e inserção de elementos em pontos arbitrários da lista.
Array: é uma estrutura de tamanho fixo. Array 2D é um array que guarda outros arrays, formando uma matriz.
ArrayList (lista contigua): array dinâmico, cresce conforme necessário, acesso rápido via índice.
LinkedList (lista encadeada): melhor performance em inserção e remoção em qualquer ponto da lista.
Vector (lista sincronizada): parecido com ArrayList, mas seguro para múltiplas threads e um pouco mais lento.
SOLID - Princípio da Responsabilidade Única (Single Responsiblity Principle - SRP)
É um dos cinco princípios fundamentais do SOLID. Declara que uma classe deve ter apenas uma razão para mudar, significando que uma classe deve ter apenas um trabalho ou responsabilidade.
Gerenciador de classes: é uma classe cuja responsabilidade é criar, armazenar, buscar, atualizar e remover objetos de outra classe, pois sem ela, o Main - que deveria apenas chamar classes - ficaria responsável por tudo isso e violaria o SRP. Usa quando tem múltiplas instâncias de uma classe e precisa consultar, organizar ou manipular dados.
Dependency Inversion Principle
Depender de abstrações e não de implementações concretas, programar para interfaces e não para implementações, o que torna o código mais flexível e de fácil manutenção.
Componentes de alto nível devem depender de abstrações, enquanto os componentes de baixo nível devem ser implementações concretas dessas abstrações.
Relacionamentos: Associação
Relação do tipo "tem um", onde uma classe possui outra como atributo.
Exemplo: classe Carro tem atributo do tipo Roda rodas.
Relacionamentos: Agregação
Um objeto usa outro, mas o objeto usado pode existir independentemente.
Exemplo: classe Voo possui uma atributo List<Passageiro> passageiros;
Swing GUI(Graphical User Interface)
Cada interface gráfica, cada componente, é um objeto.
JFrame: A janela principal vazia. Uma classe. Nela se recebe os dados e as respostas ao usuário. A interface gráfica é formada por Componentes, formados por Propriedades(caracteristicas dum componente) e Eventos(comportamento de um componente).
JDialog: Janela secundária, depende de outra janela principal e modal. Modal = true: bloqueia outras telas até esta estar concluida.
JForm: É uma tela visual pronta criada pelo NetBeans.
JLabel: Texto na tela. Nomenclatura: lblxyz
JTextField/Area: Campo de digitação. Nomenclatura: edtxyz
JButton: Botão clicável. Nomenclatura: btnxyz
JPanel: Container. Nomenclatura: panxyz
Model View Controller
Dividir a aplicação em três camadas de acordo com as responsabilidades.
- Model(modelo): camada que representa a lógica de negócio da aplicação, onde são realizadas as operações e cálculos que manipulam os dados. Gerencia o estado do sistema e notifica a View sobre mudanças relevantes. Model não deve ter conhecimento sobre a existência da View ou do Controller.
É onde ficam os dados e as regras. Ex: private String atributo. Não sabe que existe tela.
- View(visualização): camada que representa a interface de usuário da aplicação. Ela é responsável por exibir os dados e permitir que o usuário interaja com a aplicação. A View é notificada pelo Model e atualiza sua interface de acordo. interface gráfica, JFrame e JDialog
- Controller(controlador): lida com a entrada do usuário, como cliques e digitação, e manipula o Model e a View em resposta. Notifica a View sobre mudanças relevantes no Model. Pega dados, cria objeto, mostra mensagem.