Coder Social home page Coder Social logo

jaycesar / java-springboot Goto Github PK

View Code? Open in Web Editor NEW
2.0 2.0 0.0 62.13 MB

[📚 Study ] This repository was created to add files and my notes from the course POO of Java ( + spring);

JavaScript 67.43% Java 32.57%
git java jdbc lambda oriented-object-programming spring-boot

java-springboot's Issues

Seção 15: Tratamento de exceções

📌Exceções

Uma exceção é qualquer condição de erro ou comportamento inesperado encontrado por um programa em execução.

Em Java, uma exceção é um objeto herdado da classe:

  • java.lang.Exception - compilador obriga a tratar ou propagar;
  • java.lang.RuntimeException - o compilador não obriga a trata ou propagar;

Quando lançada, uma exceção é propagada na pilha de chamadas de métodos em execução, até que seja capturada (tratada) ou o programa seja encerrado.

image


Hierarquia de exceções dos Java

Existe uma super classe genérica com todas as exceções e erros chamada "Throwable"

  • A classe Error engloba erros dos quais não são esperados que o programador corrija.
  • A classe Exception são erros que ocorrem no programa e se espera que seja tratado, ou seja, que é possível tratar.
  • IOException: Algum erro de entrada e saída irá disparar esse erro;
  • RuntimeException: São exceções que o compilador não obriga a tratar!
    • IndexOutOfBoundsException: Quanto eu tento acessar a posição que não existe dentro de um array;
    • NullPointerException: Quando eu acesso uma variável que vale nulo.

image


Por que exeções?

  • O modelo de tratamento de exceções permite que erros sejam tratados de forma consistente e flexível, usando boas práticas!

Vantagens:

  • Delega a lógica do erro para a classe responsável por conhecer as regras que podem ocasionar o erro;
  • Trata de forma organizada (inclusive hierárquica) exceções de tipos diferentes;
  • A exceção pode carregar dados quaisquer

Seção 12: Bônus - Nivelamento sobre Git e Github

🔨Introdução ao Git e Github

GIT é um sistema de versionamento: você controla as modificações de um projeto por meio de de versões chamadas "commit".
Ele me permite gerenciar as versões!

GITHUB - É um serviço online de hospedagem de projetos gerenciados pelo GIT. Ele é tipo um serviço social de hospedagem de projetos e é o maior do mundo.

Seção 2: Conceitos de Programação

Algoritmo, Automação, Programa de Computador:

Algorito: É uma sequência finita de instruções para resolver um problema. Isso se aplcia a diversas áreas de conhecimento, como por exemplo lavar roupa.

Autmoação: Consiste em utilizar máquina(s) para executar o prodecimento desejado de forma automática ou semiautomática. Por exemplo uma máquina que encha de água, lave a roupa e depois seque-a.

  • A autmoação é importante na sociedade moderna, pois poupa tempo e melhora a qualidade de vida.
  • Automação em programação é um termo que se refere ao uso de mecanismos para gerar programas de computador com o objetivo de minimizar a entrada humana no processo de programação

Computador

  • Hardware é a parte física (a máquian em sí);
  • Software é a aprte lógica (programas);
    • SO (Windows, Linux, IOS);
    • Aplicativos (apps de escritório, app de câmera, navegador web);
    • Jogos;
    • Utilitários (Antivírus, compactador de arquivos);
    • Outros;

Existe uma similaridade entre programa e algoritmo.

  • Programas de computador são algoritmos executados pelo computador (isso em linhas gerais).
    Conclusão: ou seja, o computador é uma máquina que automatiza a execução de algoritmos

Mas qualquer algoritmo? Não. Apenas algoritmos computacionais, como processamento de dados e cálculos


O que é preciso para fazer um programa de computador? 4 coisas:

  1. Uma linguagem de programação: um conjunto de regras léxicas e sintáticas para escrever o programa.
  2. Uma IDE: software para editar e testar o programa;
  3. Um compilador: sotware para transforamr o código fonte (escrito pelo programador) em código objeto (entendido pela máquina);
  4. Um gerador de código ou Máquina virtual: sofware que permite que o programa seja executado.

Linguagem de programação:

É um conjunto de regras léxicas (ortografia) e sintáticas (gramática) para se escrever programas.

Léxicas:
Diz respeito à correção das palavras "isoladas" (ortografia);
Exemplo (Português):

  • cachorro (está certo)
  • caxorro (está errado)

Exemplo (Linguagem de programação):
main (está certo)
'maim' (está errado)

Sintática:
Diz respeito à correção das sentenças (gramática). As palavras isoladas estão certas mas como um todo elas estão erradas.
Exemplo (Português):

  • O cachorro está com fome (está certo)
  • A cachorro está com fome (está errado)

Exemplo (Linguagem de programação):

  • x = 2 + y; (está certo)
  • x = + 2 y; (está errado)

Existem inúmeras linguagens de programação no mercado (C, Pascal, C++, Java, C#, Python, Ruby, PHP, JavaScript, etc.)

Conclusão: Léxicas são as palavras que utilizo na linguagem que estou programnado e e Sintática é colocação dessas palavras na ordem correta.


IDE - Ambiente Integrado de Desenvolvimento (Integrated Development Environment)

É um conjunto de software utilizado para a construção de programas.

Por exemplo:
C/C++: Code Blocks
Java: Eclipse, NetBeans
C#: Microsoft Visual Studio

Funcionalidades de uma IDE:

  • Edição de código Fonte (endentação, autocompletar, destaque de palavras, etc.)
  • Depuração e testes;
  • Construção do produto final (build);
  • Sugestão de modelos (tempaltes);
  • Auxiliar em várias tarefas do seu projeto;
  • Etc.

⚠️ Compilação, Interpretação, Código fonte, Código Objeto e Máquina Virtual

Código fonte:
É aquele escrito pelo programador em linguagem de programação. Ele não é entendido computador nem pelo sistema operacional. É aqui que entra a compilação.

Compliação

É o processo que transforma o código fonte em código objeto. Esse processo é feito por um software chamado compilador. Durante o processo de compilação o compilador faz uma análise léxica e análise sintática e se tiver algum erro léxico ou sintático, a compilação é abortada e o programador é obrigado a corrigir os erros que por ventura existam.

Após transformação em código objeto, esse código objeto vai ter que passar por um gerador de código para que seja feito um processo chamado de construção(build) que irá gerar um código executável - podendo agora ser exectuado pelo sistema operacional.

Código fonte -> Compilação -> Código Objeto -> Gerador de Código (build) -> Código Executável

Esse modelo de compilação e geração é adotado por algumas linguagens, como por exemplo C e C++

WhatsApp Image 2023-04-06 at 11 52 10 (1)

Contudo, nem toda linguagem utiliza esse processo. Existe um outro chamado Interpretação

Interpretação

É quando existe um software chamado Interpretador que vai ler o código fonte e fazer a análise léxica, análise sintática e a geração de código SOB DEMANDA. Isso signfica que gradualmente o interpetador lê o código, vai traduzindo ele para o código executável e executando.

Esse modelo de execução é utilizado por várias linguagens, tais como PHP, Javascript, Python e Ruby.

WhatsApp Image 2023-04-06 at 11 52 10

Abordagem Híbrida

O código fonte é 'compilado' e transformado em um Bytecode, o qual pode ser executado em uma máquina virtual. O bom é que cada sistema operacional tem sua própria MV, ou seja, não é necessário alterar o código fonte para cada sistema operacional.

WhatsApp Image 2023-04-06 at 11 52 10 (2)

--

Vantagens:

  • Compilação:
    • velocidade do programa;
    • auxílio do compilador antes da execução

Interpretação

  • flexibilidade de manutenção do aplicativo em produção;
  • expressividade da linguagem (escrever em poucas linhas);
  • código fonte não precisa ser recomplicado para rodar em plataformas diferentes

Abordagem Híbrida
Ela aproveita diferentes aspectos das abordagens acima, sendo as principasi essas:

  • código fonte não precisa ser recomplicado para rodar em plataformas diferentes ;
  • auxílio do compilador antes da execução

2023-04-01_10h52_34

2023-04-01_10h54_44

Draw chart!

02-conceitos-de-programacao.pdf

Banco de dados e ORM com Java e Spring (Week DevSuperior)

Tópicos abordados:

Mapeamento Objeto Relacional:
Como eu mapeio o modlo de objetos para o modelo de tabelas

Banco de dados relacional:
Banco H2

Seed da base da dados:
Salvar no banco de dados alguns dados e veriicar como eles se relacionam
2023-05-04_14h57_52

ORM: Mapemento de Objeto Relacional

O banco H2 e um banco em memória!

Essas são as dependências:

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

<dependency>
	<groupId>com.h2database</groupId>
	<artifactId>h2</artifactId>
	<scope>runtime</scope>
</dependency>

É importante salientar que quando eu tenho uma classe que possui uma outra classe como atributo, então eu tenho uma associação!

Banco Relacional: Os dados sãorepresentados em foram de tabela!

Fazer o 'seed' signfica povoar!


Repository (sufixo)

Quando eu crio um objeto que acessa o banco de dados, esse objeto por convenção precisa ter o sugixo "Repository"

2023-05-04_16h38_45

Seção 5: estrutura condicional

📌 Expressões comparativas

São aquelas expressões que comparam uma coisa com outra e resultam num valor vedade (verdadeiro ou falso)

2023-04-04_21h37_08

📌 Expressões Lógicas

Também resultado num valor verdade (verdadeiro ou falso)
2023-04-04_21h39_28

📌 Estrutura Condicional

É uma estrutura de controle que permite definir que um certo bloco de comandos somente será executado dependendo de um condição. Ou seja, agora eu tenho um controle para direcionar o fluxo do programa dependendo se a condição for verdadeira ou falsa.

Estrutura Simples
2023-04-04_21h52_22

Estrutura Composta
2023-04-04_21h56_46

E se eu tiver mais de duas possibilidades?
Eu posso fazer um encadeamento de estruturas condicionais!
2023-04-04_22h04_43


📌Operadores de atribuição cumulativa

2023-04-06_16h49_40

📌Estrutura switch-case

Quando se tem várias opções de fluxo a serem tratadas com base no valor de uma variável, ao invés de várias estruturas if-else encadeadas, alguns preferem utilizar a estrutura switch-case.
2023-04-06_17h53_23

📌Expressão condicional Ternária

Estrutura opcional ao if-else quando se deseja decidir um VALOR com base em uma condição;

Sintaxe:
( condição ) ? valor_se_verdadeiro : valor_se_falso;
2023-04-06_17h55_59

📌 Escopo e inicialização

  • Escopo de uma variável é a região do programa onde a variável é válida, ou seja, onde ela podeser referenciada;
  • Uma variável não pode ser usada se não for iniciada;

Obs: Todas as variáveis que eu declarara dentro de uma esturutra condicional irão exsitir somente dentro dessa estrutura. Ou seja, deixarão de existir assim que a estrutura acabar;

2023-04-06_18h01_49


05-estrutura-condicional (1).pdf

Seção 3: Introdução à Linguagem Java + Instalações (Java e Eclipse)

Entendendo as versões do Java

Link: https://www.oracle.com/java/technologies/java-se-glance.html

SE = Stantard Edition
LTS = Long-term support

O Java lança novas versões entre uma LTS e outra. Isso significa que após uma versão LTS eu posso ver versões "pequenas".
A versões LTS (de longo período de suporte) possui suporte ao longo do tempo! Por isso que para o curso iremos utilizar a versão SE 11 (LTS). A versão 8 é a última versão de longo suporte antes da versão 11. Versões LTS implicam em menos trabalhos "dor de cabeça" com atualizações, por isso as empresas utilizam ela.

2023-04-01_15h37_40
SE: Standard Edition (Padrão/Simples)

→ Indicado para quem irá desenvolver aplicativos em janelas

EE: Enterprise Edition

→ Indicado para quem irá desenvolver aplicativos em janelas e irá utilizar bancos de dados gigantes, coisas maiores, usados em empresas

ME: Micro Edition (Algo portátil)

→ Indicado para quem vai utilizar cosias pequenas, controle, controle de um dispositivo, aplicações para celular.


Histórico e Edições do Java

O que é Java?
É um conjunto de regras de programação (regras léxicas e sintáticas)
Mas ela também é uma plataforma de desenvolviment oe execução

  • Oferece Bibliotecas (API);
  • Oferece ambientes de execução

Histórico

  • Problemas resolvidos e motivo de seu sucesso

  • Ponteiros / gerenciamento de memória;

  • Portabilidade falha: reescrever parte do código ao mudar de SO;

  • Utilização em dispositivos diversos;

  • Custo alto;
    Isso significa haviam todos esses problemas com a atual situação de desnvolvimento.

  • Por isso na meio da década de 90 a empresa Sun Microsystems criou o Java.

    • Foi uma revolução no mercado pois era uma linguagem de orientação ao objeto e era uma linguagem de mai alto nível.
  • O Java foi adquirida pela Oracle Corporation em 2010!

Aspectos notáveis:

  • Código compilado para bytecode e executado em máquina virtual (JVM);
  • A plataforma do Java é portável, segura e robusta;
  • Roda em vários tipos de dispositivos;
  • Domina o mercado corporativo desde o fim do século 20 (Pois ela foi pioneira ao resolver os problemas);
  • Padrão Android por muitos anos;

Edições:

JDK / JVM - Máquina Virtual do Java

  • JVM - Java Virtual Machine
  • Máquina Virtual do Java - necessário para executar sistemas Java;

2023-04-01_15h56_23

Com a abordadem interpretada eu não tenho problema com portabilidade, ou seja, roda em diferentes sistemas operacionais com apenas um executável, mudando somente o interpretador. Por isso são mais lentas pois são executadas Just in Time , ou seja, no momento da execução.

Obs: Linguagens compiladas rodam mais rápidas pois são feitas voltadas para o sistema operacional específico.

Resumo

Linguagens Compiladas: C, C++ (Mais rápidas)

  • Menos suscetíveis a bugs pois o compilador ajuda a verificar o código;
  • Mais rápidas;
    Exemplo: Se eu quiser usar uma uma linguagem compilada em diferentes sistemas operacionais, eu TENHO QUE USAR OUTRO COMPILADOR, ou seja, problema de portabilidade.

Linguagens Intepretadas. PHP, JS

  • São mais difíceis de programar - tipagem fraca - o que abre uma brecha para bugs.
  • Mais lentas;
  • Maior flexibilidade e manutenção e tem menos bug;

Linguagens Híbridas. Java, C#.

  • Obtém vantagens dos dois mundos e maior portabilidade.
  • Possuem uma abordadem híbrida. Obteve vantagens dos dois mundos e maior portabilidade.
  • O processo de compilação do Byte code se chama JIT (just-in-time)

Estrutura de uma aplicação Java

Classes
Java é uma linguagem Orienteada a Objetos e a undiade lógica baica de um programa orientada objeto é a classe. Todo código Java tem que star dentro de Classes.
2023-04-01_16h21_41

Pacotes (Packages):
Agrupamento lógico de classes relacionadas.
2023-04-01_16h21_48

Módulos
Agrupamento de pacotes relacionados. (Introduzidos no Java 9)
Runtime = agrupamento físico
2023-04-01_16h21_52

Aplicação = Agrupamento de módulso relacionados
2023-04-01_16h23_16


Instalação JDK (A última versão LTS é a 17)

Segui esse vídeo: https://www.youtube.com/watch?v=QekeJBShCy4

1) Eu preciso pesquisar por Java e uma distribuição gratuita, tem a 'adopt' e a 'zulu'.
"Java JDK zulu"
Link: https://www.azul.com/downloads/?package=jdk#zulu
2023-04-03_10h10_01

2) Baixar a versão LTS para Windows, criar uma pasta chamda "Java" dentro de "Arquivos e Programas" e descompactar o arquivo baixado lá dentro.
2023-04-03_09h50_05

3) Configurar as variáveis de ambiente

1 - Em avançado, clico em Variváveis de Ambiente
2023-04-03_09h52_20

2 - Caso não exista nenhuma variável de sistema chamada Java, eu devo criar uma nova clicando em "Novo"
2023-04-03_09h52_59

3 - Eu preciso adicionar o nome como JAVA_HOME em caixa alta e depois colocar o caminho do arquivo que acabei de baixar
2023-04-03_09h54_01

4) Configurar a variável PATH

1 - Clicar na variável PATH e depois clicar em editar
2023-04-03_09h57_56

2 - Copiar o caminho do arquivo que acabei de baixar, clicar em novo e adicionar ele:
2023-04-03_09h59_26

3 - Adicionar '\bin' no final do caminho:
2023-04-03_10h12_29

4 - Mover para cima para evitar possíveis conflitos com outras versões:
2023-04-03_10h00_32

5) Para testar se está funcionando, devo abrir o Prompt de Comando e digitar 'java -version'
2023-04-03_10h06_23

Instalação do Eclipse:

Usar este link: https://www.eclipse.org/downloads/packages/

  1. Rolar e procurar as versões do Elcipse e selecionar a mais atual:
    2023-04-03_10h16_24

  2. Procurar pela opção Eclipse IDE for Enterprise Java and Web Developer e clicar no tipo de SO que utilizo:
    2023-04-03_10h16_49

  3. Clicar em "Download"
    2023-04-03_10h17_26

Obs: workspace é a pasta onde eu vou guardar os meus projetos

Meu primeiro programa em Java e Eclipse

  1. Para cada linguagem/operações há um tipo de layout específico que se chama 'perspective"
  • Window -> Perspective -> Open Perspective -> Java
    2023-04-03_10h39_10
  1. Pode ser que eu feche por engano alguma janela por engano, para resolver isso eu posso 'zerar o layout':
  • Window -> Perspective -> Reset Perspective
    2023-04-03_10h41_36
  1. Eu preciso da aba 'Console' para ver meu programa executando, para fazer ela aparecer:
  • Window -> ShowView -> Console
    2023-04-03_10h43_18
  1. Para criar um arquivo, cliclo em 'File' -> 'New Java Project'. Os programas que eu criar irão ficar dentro da pasta 'src':
    2023-04-03_10h46_15

introducao-linguagem-java.pdf

Movimentos possíveis de uma peça

No jogo de Xadrex cada peça tem um tipo de movimento que ela pode fazer;

Image

Hook methods

Quando eu 'utilizo um método abstrato dentro de um concreto'

Image

Interfaces

🎯 O objetivo das intercace é definir um contrato que as classes terão que implementar!

📌Interfaces

• A partir do Java 8, interfaces podem ter "default methods" ou "defender methods"

• Isso possui implicações conceituais e práticas, que serão discutidas mais à frente neste capítulo

• Primeiro vamos trabalhar com a definição "clássica" de interfaces. Depois vamos acrescentar o conceito de default methods

Definição clássica

A interface é um tipo que define um conjunto de operações que uma classe deve implementar.

É como se fosse uma classe abstrata que possui somente métodos e todos os métodos são abstrados! (a grosso modo);

A interface estabelece um contrato que a classe deve cumprir.

Pra quê interfaces?

É para criar sistemas com baixo acoplamento e flexíveis!

2023-05-20_14h07_52

Introdução

⚠️ Importância da base sólida

  • Existe o Springboot, Java, CDI, Java, Bin...mas é importante ter um bom fundamento. Sim, as empresas buscam um bom profissional, por isso tem que ter uma base bem consolidada.

  • A formação de um profissional Java tem duas etapas:
    1) Etapa de Fundamentos
    2) Etapa comercial

1) Etapa Fundamentos:
Lógica de Programação (Estrutura de dados, POO, Banco de Dados, Análise & Design de Sistemas)

Após isso vem a parte comercial:

2) Etapa Comercial

  • Back end
  • Web
  • Mobile
  • Desktop

Para utilizar o potencial de um bom carro, é necessário saber dirigir!


Sobre as tecnologias:

  • O framework SpringBoot é o mais importante do mercado e ele permite desenvolver aplicações Java com uma produtividade muito grande.
  • O Tomcat é o container web que roda aplicações de webservices;
  • O maven é o gerenciador de dependencias;
  • O banco H2 é o banco de dados de teste do Java;
  • Postman é utilizado para fazer requisições HTTP na palicaçõe web;
  • Também será abordado Banco de dados com SQL, NoSQL e MongoDB.

Sobre a metologia:

  • Video aulas;
  • Material de apoio;
  • Exercícios propostos;
  • Exercícios resolvidos.

Sobre os Projetos:

  • Videos;
  • Material de apoio;
  • Github.

IDE:
Eclipse para mexer com Java;
Spring Tool Suite para mexer com spring-boot.

Pdf:
Curso-Java-COMPLETO.pdf

Seção 11: Tópicos especiais em Java: Data-hora

📌 Introdução a data-hora e duração

- Data-[hora] local:

  • ano-mês-dia-hora sem fuso horário
  • [hora] opcional;
    Obs: Quando a gente registra uma data local, a hora é opcional!

- Data-hora global:

  • ano-mês-dia-hora com fuso horário;
    Obs: A data hora local é armazenda sem fuso-horario e a data hora global é registrada com fuso-horário.

2023-04-22_09h38_06

O programa precisa ler a data de que eu recebo por meio de uma API no banco de dados e conseguir diferenciar de acordo com os fuso-horários de países diferentes:

2023-04-22_09h40_42

Contúdo, em alguns casos a hora local é mais indicada:

- Data-[hora] local:
Quando o momento exato não interessa a pessoas de outro fuso horário.
Uso comum: sistemas de região única, excel:

- Data-[hora] global:
Quando o momento exato interessa a pessoas de outro fuso-horário.
Uso comum: sustemas multi-região, web, live de futebol, jogo;

2023-04-22_09h44_12

Primeira classe - Position

Esses são os tópicos abordados:

Image

package boardgame;

public class Position {

private int row;
private int column;

public Position(int row, int column) {
	this.row = row;
	this.column = column;
}

public int getRow() {
	return row;
}

public void setRow(int row) {
	this.row = row;
}

public int getColumn() {
	return column;
}

public void setColumn(int column) {
	this.column = column;
}

@Override
public String toString() {
	return row + ", " + column;
}

}

Pequena melhora no tabuleiro

Aborded topics:

Image

Termo novo: 'Boilderplate'

Boilerplate is any text, documentation, or procedures that can be reused more than once in a new context without any substantial changes to the original. Boilerplates are commonly used online and in written documents by a variety of entities including corporations, legal firms, and medical facilities.

Para rodar o jogo no terminal, eu preciso acessar a pasta bin - que é onde está a palsta application - e execudar o comando:
java application/Program

Image

Seção 17: Trabalhando com arquivos

📌Lendo arquivo texto com classes File e Scanner

Serão utilizadas as calsses File, Scanner e IOException;

File
É um representação abstrata de um arquivo e seu caminho
https://docs.oracle.com/javase/10/docs/api/java/io/File.html

Scanner
É um leitor de texto
https://docs.oracle.com/javase/10/docs/api/java/util/Scanner.html

IOException (Exception)
A exceção padrão de entrada e saída quando se mexe co marquivos
Ela herda de Exception
https://docs.oracle.com/javase/10/docs/api/java/io/IOException.html

2023-05-18_19h31_33


Leitura básica de um arquivo:

package application;

import java.io.File;
import java.io.IOException;
import java.util.Scanner;

public class Program {

	public static void main (String[] args) {
		File file = new File("D:\\workspace\\ws-eclipse\\java-springboot\\files_class\\file.txt"); 
                // Precisa de 2 barras!

		Scanner sc = null;
		try {
			sc = new Scanner(file);
			while (sc.hasNextLine()) {
				System.out.println(sc.nextLine());
			}
		}
		catch(IOException e) {
			System.out.println("Error: " + e.getMessage());
		}
		finally {
			if (sc != null) {
				sc.close();
			}
		
		}
	}
	
}

Seção 12: Herança e Polimorfismo

📍Visão geral do capítulo Herança e Polimorfismo

Nesse capaítulo o 'Polimorfismo' será tratado de forma introdutória, de forma que quando eu chegar em interfaces eu poderei ver na prática!

Aula 2: Domínio, consultas

2023-05-10_10h02_35

💡A classe ItemPedido é uma classe de associação! Isso ocorroe quando há uma relação de muitos para muitos com dados adicionais.

No diagrama:

2023-05-10_10h05_42

Na memória:

image

Banco de dados relacional (dados representados em foram de tabela):

image

O mesmo ocorre no projeto que está sendo desnvolvido, ou seja, há um 'item' no desenvolvimento ,ou seja, o 'belonging':

image

Seção 9: Construtores, Palavra this, Sobrecarga e Encapsulamento

Alguns dizem que Encapsulameto é um dos pilares da Orientação à Objetos;

📌 Construtores

  • É uma operação especial da classe, que executa no momento da instanciação do objeto, ou seja, acontece no momento!

- Usos comuns:

  • Iniciar valores dos atributos;

  • Permitir ou obrigar que o objeto receba dados / dependências no momento de sua instanciação (injeção de dependência);

  • Se um construtor customizado não for especificado, a classe disponibiliza o construtor padrão:
    Product p = new Product();

  • É possível especificar mais de um consturtor na mesma classe (isso se chama Sobrecarga);


continuando...

Quando eu crio um objeto assim:

product = new Product();

Eu crio espaços vazios na memória;

2023-04-13_19h22_28

Eis a questão, isso faz sentido?

2023-04-13_19h22_52

A ideia é já forçar/obrigar o programador a informar os dados do objeto dentro dos parenteses! Ou seja, criar um construtor;

O construtor tem o nome da classe!

Ele é o 'cara' que executa no momento da instanciação do objeto.

A palavrinah this signficado uma referência para o prórpio objeto. Eu referencio o atributo do objeto!

Conclusão: O construtor serve para proteger que programador não faça besteira

ChessException e ChessPosition

Aborded topics

Image

Esse é um 'macetinho' para o compilador entender que ue preciso contatenar:

Image

CTRL + SHIFT + O também serve para atualizar imports não utilizados!

Começando a implementar Board e Piece

Tópicos abordados:

Image

⚠️Eu deixo tanto a Clase Position quanto o a Classe Board como Protected porque somente classes dentro do Pacote board-game terão acessos

Seção 8: Introdução à Programação Orientada a Objetos

Os três conceitos básicos de POO são:

  • Classes
  • Atributos
  • Métodos

📌Criando uma classe com três atributos para representar melhor o triângulo

  • Eu tive que criar variáveis distintas para representar representar um triângulo, o que é ruim. Por isso usamos Classes.

Classe:

  • É um tipo estruturado que pode conter (membros):

  • Atributos (dados/campos);

  • Métodos (funções / operações);

  • A classe também pode prover muitos outros recursos, tais como:

  • Construtores;

  • Sobrecarga;

  • Encapsulamento;

  • Herança;

  • Poliformismo

2023-04-12_16h18_02

Quando eu crio uma classe, é isso que acontece:
2023-04-12_16h24_32

Eu uso o "Triangle como um tipo, assim como eu fiz com o "double". Ou seja, quando eu crio um variável do tipo Triangule, eu to criando uma variável composta - classe é um 'variável composta' - e ela só se torna composta após eu digitar "new Triangle";

Para que eu possa usar o objeto - para que ele exista - eu preciso 'instanciar' ele!

Quando eu crio uma variável no programa, ela fica salva em uma parte da memória chamada 'stack'. MAS, quando eu instancio um objeto em uma variável; por exemplo: x = new Triangle() - essa variável x contém o endereço de memória do objeto que foi criado numa parte chamada heap

2023-04-12_16h35_24

Isso seria o pontero? Provavelmente sim, pois eu 'aponto' para onde estão os dados da variável.

Conclusão:

  • Classe = definição do tipo;
  • Objetos = instâncias da classe;

Eu estou 'instanciando', ou seja, 'salvando' dentro daquela variável o endereço de memória onde estão os atributos/métodos daquele tipo de class;

📌 Criando um método para obtermos os benefícios de reaproveitamento e delegação

2023-04-12_16h45_43

Importante:
2023-04-12_16h53_10
Eu coloco 'void' quando o método não retorna nada.

2023-04-12_16h54_03

Benefícios de calcular a área dentro da Classe Triangulo utilizando um Método:

    1. Reapreoveitamneto de código;
    1. Cada classe é responsável por sim mesma (delegação de responsabilidades) - isso se chama coesão;

2023-04-12_16h56_14

## Dúvida sobre diferença na ordem da soma e subtração - quando altero a ordem, acabo alterando o resultado

Código:

package exercises;

import java.util.Scanner;

public class calcula_hora_de_jogo {

/** 
 Leia a hora inicial e a hora final de um jogo. A seguir calcule a duração do jogo, 
 sabendo que o mesmo pode começar em um dia e terminar em outro, tendo uma duração 
 mínima de 1 hora e máxima de 24 horas
**/

public static void main(String[] args) {
	Scanner sc = new Scanner(System.in);
	
	int horaInicial  = sc.nextInt();
	int horaFinal = sc.nextInt();
	
	int duracao;
	if (horaFinal > horaInicial) {
		duracao = horaFinal - horaInicial;
	}
	else {
		duracao = 24 - horaInicial + horaFinal;
	}
	

	
	System.out.println("O JOGO DUROU " + duracao + " HORA(S)");
	
	
	sc.close();
}

}


Entrada:

16
2

Saída:

O JOGO DUROU 10 HORA(S)


Dúvida

Nó último else ettá assim:
duracao = 24 - horaInicial + horaFinal;

Mas quando eu altero para:
duracao = 24 - horaFinal + horaInicial ;

Desa forma alterando a ordem das variaáveis, o resultado sai diferente:
O JOGO DUROU 38 HORA(S)

Video:
https://user-images.githubusercontent.com/44206400/230244816-34a38b41-0f09-4f50-8dbb-0bd96c23e3c8.mp4

Seção 4: Estrutura Sequencial

📌Expressões aritméticas

Expressões que quando calculádas resultam em um valor numérico. Para eu fazer as expressõs arimtéticas eu preciso conehcer os operadores aritméticos. É importante conhecer a precedência também!

Precedência:
1°Lugar: * / %
2°Lugar: +-

2023-04-03_15h54_29


📌Variáveis e tipos básicos em Java

Variável
Em programação, uma variável é uma porção de memória (RAM) utilizada para armanezar dados durante a execução dos programas.
2023-04-03_19h55_46

Declaração de variáveis

Sintaxe (o jeito de se escrever):
'tipo' 'nome' = 'valor inicial';

Exemplo:
int idade = 25; double altura = 1.68; char sexo = 'F';

Uma variável possui:

  • Nome (ou identificador);
  • Tipo;
  • Valor;
  • Endereço.

2023-04-03_20h00_14

A linguagem Java possui 8 tipos primitivos!
2023-04-03_20h05_15

Um bit (1 bit) pode armazenar 2 valores possíveis (0 ou 1)
Cada bit = 2 possibilidades
2 x 2 x 2 x 2 x 2 x 2 x 2 x 2 = 2⁸ = 256 possibilidades
Mas como pode haver número negativo, devemos utilizar entre -128 e 127.

2023-04-03_20h07_44

Conclusão:
Adotar o padrão CamelCase


📌As três operações básicas de programação

2023-04-03_20h12_11

1) Entrada de dados:
Quando o user informa dados para o programas os quais serão armazenados em variáveis. Esse processo também é chamado de leitura;
2) Processamento de dados:
Quando o programa realiza os cálculos. O processamento de dados se dá por um comando chamado atribuição;
3) Saída de dados:
Quando o programa informa dados para o usuário - essa etapa também é chamada de escrita.


📌Saída de dados

Para imprimir número double
System.out.printf("%.2f%n", x);

  • O "printf" é para formtar
  • Quando eu coloco "%.2f" eu quero apenas duas casas após o ponto;
  • Quando eu adiciono "%n" ou "\n "no final, ou seja, "%.2f%n" eu mando quebra de linha no final;

O printf por padrão pega o idioma do computador, para eu transformar tudo para um único tipo de separador, eu digito:
Local.setDefault(Locale.US);
Eu preciso adicionar "import java.util.Locale;" lá em cima da JDK.
2023-04-03_20h27_56

Para concatenar várias elementos em um mesmo comando de escrita:
%s = texto;
%f = ponto flutuante;
%d = inteiro;
%n = quebra de linha.
2023-04-03_20h35_12
For more information: https://docs.oracle.com/javase/tutorial/java/data/numberformat.html


📌Processamento de dados em Java Casting

Boa prática: sempre indque o tipo do número, se a expressão for de ponto flutuante (não inteira);

  • Para double use:
    .0

  • Para float use:
    .f
    2023-04-04_16h23_15

Quando eu escrevo uma expressão de divisão de dois inteiros então eu tenho um resultaod inteiro:
2023-04-04_16h24_49
O reusultado será 2.0

Para resolver isso, basta colocar a palavrinha (double) na frente:
2023-04-04_16h27_00
O nome disse é Casting (a conversão explícita dos valores);

  • É necessário quando o compilador não é capaz de “adivinhar” que o resultado de uma expressão deve ser de outro tipo.

📌Entrada de dados em Java

  • Para fazer entrada de dados, é necessário cirar um objeto do tipo "Scanner" da seguinte forma:
    2023-04-04_16h32_04

  • sc.close() devo usar essa função quando eu não precisar mais utilizar o Scanner;

Para ler número inteiro:
2023-04-04_16h40_10

Para ler ponto flutuante
2023-04-04_16h41_44

Para ler caractere
2023-04-04_16h47_19
Ele lê apenas o primeiro caractere:
2023-04-04_16h48_25

Para ler vários dados na mesma linha (Separados por espaço)
2023-04-04_16h49_14

** Para ler um texto ATÁ A QUEBRA DE LINHA**

Tips:
CTRL + SHIFT + F = Indentação do código
nextLine() = assim ele lê a linha inteira!

Quando eu digito enter eu quebro uma linha! Ou seja, cuidado! Pois quando eu preciso 'consumir' as quebras de linahs pendentes! Isso se chama limpar o bufer de leitura.

2023-04-04_16h49_14


📌Funções Matemáticas

A = Math.abs()
A variável A recebe o valor absoluto de x, ou seja, o valor sem o negativo caso ele exista. É como se fosse o módulo da matemática.

2023-04-04_17h11_11

Para mais informações: java.lang.math

Tip:
CTRL + SHIFT + O = Importar todos os pactoes necessários automaticamente no eclipse;
CTRL + SPACE = Mostra uma opção de autocomplete;

04-estrutura-sequencial (1).pdf

Seçao 20: Programação Funcional e expressões Lambda

Interface Funcional possui apenas um método! A interface Comparator é uma delas


📍Programação funcional e cálculo Lambda

image

image
image

Transparência Referencial é quando o resultado da função depene exclusivamente dos valores de entrada!

Numa linguagem funcional eu posso passar uma função como argumento de outro função (Por isso é uma função de primeira classe / ordem )

Inferência de tipos: é quando o compilador sabe que tipo de variável está sendo utilizada (tipagem dinâmica)

O que são "expressões lambda"?

Em programação funcional, expressão lambda corresponde a uma
função anônima de primeira classe

Principais IDEs para Java e Spring (Week DevSuperior)

Para desenolver aplicativos comerciais em qualquer linguagem:

Eu tenho que instalar:

SDK (Software Development Kit) da linguagem:

  • Compliador / Interpretador
  • Bibliotecas padrão
  • Ferramentas padrão da linguagem;

Framework de linguagem

  • Para eu produzir de forma ma**is produtiva

IDE

  • Ambiente de desenvolvimento;

2023-04-27_10h30_33

  • O JDK é distribuido de forma gratuita por empresas como a Azul Zulu, Adopt, Amazon Corretto mas a Oracle é paga!
    -O Spring Boot é utilizado para desenvolver com Java

IDE's

2023-04-27_10h33_08

O "pessoal" da Spring criam plugins chamados "Spring Tools" que pode ser utilizados com o VS Code, Eclipse e Theia

Theia é um Mix do Vs Code com o Eclipse!

Dificuldade com Matrizes

Eu encontrei dificuldade com matrizes na parte que envolve buscar itens nas posições dentro dela

Exercício:
Fazer um programa para ler dois números inteiros M e N, e depois ler uma matriz de M linhas por N colunas contendo números inteiros, podendo haver repetições. Em seguida, ler um número inteiro X que pertence à matriz. Para cada ocorrência de X, mostrar os valores à esquerda, acima, à direita e abaixo de X, quando houver, conforme exemplo

Exemplo
2023-04-22_08h56_42

Código:

package classes;

import java.util.Locale;
import java.util.Scanner;

public class MatrizExercise {

	public static void main(String[] args) {
		Locale.setDefault(Locale.US);
		Scanner sc = new Scanner(System.in);
		
		int M = sc.nextInt();
		int N = sc.nextInt();
		
		int[][] mat = new int[M][N];
		
		for (int i = 0; i < mat.length; i++) {
			for (int j = 0; j < mat[i].length; j ++) {
				mat[i][j] = sc.nextInt();
			}
		}
		
		int X = sc.nextInt();
		
		for (int i = 0; i < mat.length; i++) {
			for (int j = 0; j < mat[i].length; j++) {
				if (mat[i][j] == X) {
					System.out.print("Position: " + i + ", " + j + ": \n");
					if (j > 0) {
						System.out.println("Left: " + mat[i][j-1]);
					}	
					if (i > 0) {
						System.out.println("Up: " + mat[i - 1][j]);
					}
					if (j < mat[i].length-1) {
						System.out.println("Right: " + mat[i][j+1]);
					}
					if (i < mat.length-1) {
						System.out.println("Down: " + mat[i+1][j]);
					}
					
				}
			}
		}
		
	
		sc.close();

	}



}

API Rest Java e Spring - Exemplo na prática (Week DevSuperior)

O que precisamos fazer para criar uma aplicação web que disponibiliza uma API Rest?

  1. Primeiro a gente precisa de um Web Server (É uma aplicação que recebe nossa aplicação Java + Spring) e será ele que irá escutar as requisições e responder à elas!

  2. Nossa aplicação será a App Srping Boot Java.

  • Ela é uma aplicação Multi-threading, ou seja, a cada requisição ela abre um processo em execução que vai processar a execução e depois retorna a resposta.
  • Mapeamento de URL - ou seja, buscar os dados a partir da URL - processar os dados obtidos a partir da URL
  • Serialização JSON - transformar os objetos em Java em JSON!

Conclusão: Ou seja, fazer tudo isso utilizando apenas uma linguagem do zero levaria muito tempo e um trabalho muito complexo. Por isso para agilizar o processo nós utilizamos um framework e é aqui que entra o Spring.

O Spring é um framework Java criado com o objetivo de facilitar o desenvolvimento de aplicações, explorando, para isso, os conceitos de Inversão de Controle e Injeção de Dependências.

2023-05-02_16h59_13

Seção 13: Enumerações, composição

🏁 Visão geral do capítulo Enumerações e Composição

Enumerações
Enumerações servem para representar vários tipos que compõem CONSTANTES relacionadas!
Os estados de um pedido pode ser representados por uma enumeração ou tipo enumerado!

Composição de objetos:
Como consigo compor objetos para construir/desenvolver modelos mais complexos.

Seção 7: Outro tópicos básico sobre Java (Funções, Restrições, bitwise) + Funções interessantes para String

📌 Restrições e convenções para nomes

Restrições

  • Não pode começar com dígito: use uma letra ou _
  • Não usar acentor ou til;
  • Não pode ter espaço em branco
  • Sugestão: use nomes que tenham um significado;

Conveções:

- Camel Case: lastName
Utilizar com

  • pacotes;
  • atributos;
  • métodos;
  • variáveis e parâmentros

- Pascal Case: ProductService
Utilizar com

  • Classes;

📌 Operadores bitwise

2023-04-10_18h28_58

Ele serve para avaliar o bit de um número, ou seja, os números binários que compõem um número. O número '1' por exemplo é igual a 0001:

2023-04-10_18h39_44

Essa forma (utilizando o operador bitwise) eu consigo analisar qual é o sexto, sétimo, oitavo número de um determinado número.

Obs: o ou-exclusivo signnifica que será verdade somente se um dos dois forem verdadeiros e não os dois!


📌 Funções interessantes para String

Funções mais utilizadas:

- Formatar: toLowerCase(), toUpperCase(), trim();
- Recortar: substring(inicio), substring(inicio, fim);
- Substituir: Replace(char, char), Replace(string, string);
- Buscar: indexOf(); LastIndexOf();

  • str.Split("");

Operador Split
Quando eu utilizo o oeprador Split, eu consigo adicionar o separador dele, ex:
String s = "potato apple lemon";
String[] vect = s.split(" ");

2023-04-10_19h09_50

📌 Funções (Sintaxe)

  • Elas representam um processamento que possui um significado. Por exemplo:

  • Math.sqrt(double);

  • System.out.print(string);

  • Principais vantangens: modularização, delegação e reaproveitamento

  • Divido em várias partes (módulos);

  • Eu delego a lógica de executar algo para outro lugar;

  • Dados de entrada e saída:

  • Funções podem receber dados de entrada (parâmetros ou argumentos);

  • Funções podem ou não retornar uma saída

  • Em orientação a objetos, funções em classes recebem o nome de "métodos;

Obs:
Função: Parte de um programa ou classe que retorna um valor (da definição de Delphi/Pascal/Visual Basic/Visual Basic . NET);
Método: Procedimento ou função pertencente a uma classe (várias linguagens de programação definem desta forma, por exemplo, c++, c#, java, etc.).

public = fique disponível em outras calsses;
static = indica que pode ser chamada independente de se criar um objeto;
o tipo de dado que ela retorna

⚠️Sobre o 'void':
Quando uma função simplesmente faz uma ação sem retornar um valor que pode ser reaproveitado no programa, logo o tipo
que esssas função retorna é void! Ou seja, retorna vazio. Isso significa que quando ela faz somente uma ação, como por exemplo imprimir uma mensagem.

Doc:
07-outros-topicos-basicos.pdf

Movendo peças

Aborde topics:

Image

A exceção InputMismatchException é uma exceção que ocorre quando há um erro na entrada de dados

Seção 19: Generics, Set, Map

📍Generics

Generics permitem que classes, interfaces e métodos possam ser parametrizados por tipo, Seus benefícios são:

  • Reuso

  • Type safety;

  • Performance;

  • Uso comum: coleções

List<String> list = new ArrayList<>();
list.add("Maria");
String name = list.age(0);

2023-07-08_10h54_09


2023-07-08_10h55_48

Supomos que ao invés de números, eu queira utilizar nomes! ou seja, "Strings", logo não seria possível!

Seu deixar a List com o tipo "Object"

List<Object> list = new ArrayList<>();

Quando eu foi querer adicionar um dos valores dela para uma variável do tipo integer, eu terei que fazer um casting (converter):

Integer x = (Integer) ps.first(); // Eu vou ter que converter

Logo eu terei um problema de segurança de tipos → TypeSafety e também de Performance.

É aqui que entra os Generics:
2023-07-08_11h21_14

public class PrintService<T> {
	
	List<T> list = new ArrayList<>();
	
	public void addValue(T value) {
		list.add(value);
	}
}

⚠️Se eu instanciar um PrintService do tipo String, ele só irá aceitar String, se for Inteiro, será só Inteiro e etc..

Quando eu for instanciar no programa principal, eu preciso indicar o tipo:

PrintService<Integer> ps = new PrintService<>();
// Repare que é preciso colocar '<>' no final antes dos parêntreses para dizer pro compilador que é um Generics;

// Seu quiser adicionar um tipo String eu não irei conseguir:

ps.addValue("Maria"); // O compilador irá reclamar

Classe Service:

// Agora minha classe está parametrizada com um certo tipo "T";
public class PrintService<T> {
	
	List<T> list = new ArrayList<>();
	
	public void addValue(T value) {
		list.add(value);
	}
	
	public T first() {
		if (list.isEmpty()) {
			throw new IllegalStateException("List is empty"); // Programação defensiva
		}
		return list.get(0);
	}
	
	public void print() {
		System.out.print("[");
		if (!list.isEmpty()) {
			System.out.print(list.get(0));
		}
		for(int i = 1; i < list.size(); i++) {
			System.out.print(", " + list.get(i));
		}
		System.out.println("]");
	}
}

Programa principal:

package application;

import java.util.Scanner;

import services.PrintService;

public class Program {
	
	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		
		PrintService<Integer> ps = new PrintService<>();
		
		System.out.println("How many values? ");
		int n = sc.nextInt();
		
		
		for (int i = 0; i < n; i++) {
			Integer value = sc.nextInt();
			ps.addValue(value);
		}
		
		ps.print();
		Integer x = ps.first(); 
		System.out.println("First: " + x);
		
		sc.close();
	
	}
}

Seção 10: Comportamento de memória, arrays, listas

📌Tipos referência vs. tipos valor

Classes são tipos referência

Variáveis cujo tipo são classes não devem ser entendidas como caixas, mas sim como "tentáculos" (ponteiros) para caixa. Ou seja, as classes nada mais são d que variáveis que guardam um endereço que mostra onde estão os objetos. Elas guardam um endereço memória e essa memória fica ho HEAP. As variáveis ficam dentro do Stack e dentro delas ficam o endereço que aponta para o a memória dentro do Heap:

  • Heap é uma área de memória onde são alocados os objetos em tempo de execução (alocação dinâmica de memória);

2023-04-18_11h37_31

Nos livros eu encontrarei isso:
2023-04-18_11h39_24

Valor null

Tipos referência aceitam o valor "null", que indica que a variável aponta pra ninguém;
2023-04-18_11h40_28

Tipos primitivos são tipos valor

Em Java, tipos primitivos são tipo valor. Tipos valor são CAIXAS e não ponteiros.

Esss tipos primitivos abaixo são Caixas, ou seja, eles ficam dentro do Stack!
2023-04-18_11h43_55

2023-04-18_11h44_31

Valores padrão

Quando alocamos (new) qualquer tipo estruturado (calsse ou array) são atribuídos valores padrão aos seus elementos
- números: 0;
- boolean: false;
- char: caractere código 0;
- objeto: null
Obs: String é um objeto!
2023-04-18_11h48_36

Resumo:

2023-04-18_11h53_14

Garbage collector é um processo que serve para verificar o heap e desalocar os objetos que não estão sendo mais utilizados!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.