O que falta para você se tornar um desenvolvedor Java e começar 2023 com uma formação completa? Inscreva-se já no Orange Tech+ Back-End e tenha mais de 80 horas para transformar sua carreira e conquistar as melhores vagas do mercado tech em 2023! Tenha acesso a módulos sobre a linguagem Java que vão desde o básico e introdução ao ambiente até códigos mais avançados e frameworks mais usados.
Módulos sobre a linguagem Java que vão desde o básico e introdução ao ambiente até códigos mais avançados e frameworks mais usados.
- Prepare-se para a Jornada
- Princípios de Desenvolvimento de Software
- Conhecendo a Linguagem Java
- Dominando Algoritmos básicos
- Programação Orientada a Objetos com Java
- Ganhando Produtividade com Spring Framework
- Dominando Algoritmos Intermediários com Desafios de Código Java
- Fortalecendo sua Carreira Profissional
Introdução ao Desenvolvimento Moderno de Software
Conhecer a estrutura, a história de criação e evolução da linguagem Java
, além de suas plataformas, instalação e utilização de IDEs
para desenvolvimento.
Java Fundamentos:
- Classe e Objeto
- Encapsulamento
- Abstração
- Herança
- Polimorfismo
Plataforma independente, robusta,
JVM
(Java Virtual Machine)
C
e C++
que seu criador James Gosling, chamou de Oak (carvalho) em homenagem a uma árvore que crescia na janela do seu escritório. Porém o nome Oak já ixistia e o nome Java foi de uma cafeteria. Com a explosão da World Wide Web em 1993 a Sun potencializou Java para criar páginas da Web.
1-Como é chamado o conceito de execuções paralelas em uma aplicação?
R: Multi-threading
2-Qual foi o fato que contribuiu para que a linguagem se tornasse tão popular?
R: A Linguagem se popularizou pelo termo "White Once, Run Anywhere", que enaltece a interoperabilidade da plataforma java.
3-Qual dos itens citados NÃO faz parte do conjunto de funcionalidades (features) da linguagem Java?
R: Sem tipagem, ou seja, fracamente tipada.
4-Hoje sabemos que a linguagem Java é mantida pela empresa Oracle Inc, mas antes, que empresa tinha os direitos desta tecnologia?
R: Sun Microsystems
5-A linguagem Java é baseada sobre quais linguagens de programação?
R: C
e C++
6-Como é denominado o código originado da compilação de programas Java?
R: Bytecode
7-Qual dos itens citados NÃO faz parte dos 4 pilares da orientação a Objetos?
R: Sobrecarga
8-Para executar uma aplicação desenvolvida em Java, convertendo os bytecodes em código de máquina, é necessário ter disponível em nosso sistema operacional o recurso denominado de?
R: JVM
, através e uma JDK
ou JRE
9-Antes da linguagem receber o nome de Java, qual foi o primeiro nome escolhido pelo time de desenvolvimento?
R: Oak
10-Como se chama o desenvolvedor que liderou o projeto para criação da linguagem Java?
R: James Gosling
IDE(Integrated Development Environment), capaz de prover vários mecanismo que dispõe de recursos que auxiliam muito no nosso desenvolvimento. Ex: - Aceleração de nossa escrita com *Auto-Complete* ou *IntelliSense*; - Formatação de palavras e blocos de códigos; - Análise de erro de sintaxe; - Compilação de programa; - Depuração (acompanhamento) de execução do programa.
Cada IDE dispõe de recursos comuns ou plugins espec[ificos para te auxiliar na agilidade de desenvolvimento. Dentre elas temos o *Visual Sudio Code, NetBeans, Eclipse, Intellij*.
- Eclipse: mais utilizada no ambiente corporativo com interface bem interativa. - NetBeans: Utilizada mais em ambiente acadêmico e com versão de menu e assistentes em português.
- IntelliJ: Oferece muito recursos de inteligência para agilidade de nosso desenvolvimento com sugestões de ações bem assertivas.
- VS Code: Hoje muito utilizada para desenvolvedores que já atuam com NodeJs ou plataformas de front-end.
1- Qual dos itens citados NÃO é considerada uma IDE para desenvolver aplicações na linguagem Java?
R: PyCharm
2- Qual a extensão de um arquivo que contém o código fonte da linguagem Java?
R: .java
3- Considerando os inúmeros recursos de uma IDE, qual do itens citados não é aplicado como uma funcionalidade do ambiente de desenvolvimento ?
R: Integração contínua
4- Qual plataforma contém recursos para desenvolvimento com recursos como páginas Web?
R: Java EE
5- Qual ferramenta tem o papel de converter o bytecode em um algoritmo que é interpretado pelo sistema operacional?
R: JVM
6- Após a compilação do código fonte na linguagem, qual a extensão do conteúdo gerado?
R: .class
7- Sabemos que uma das plataformas da linguagem Java contém uma biblioteca de componentes visuais, selecione esta plataforma.
R: Java SE1
8- Quais são os componentes de instalação da plataforma Java?
R: JDK
/JRE
9- A linguagem Java conta com 4 plataformas de desenvolvimento, qual das alternativas NÃO faz parte?
R: Java IO
10- Você disponibilizou uma aplicação compilada para seus clientes, qual componente será necessário estar instalado na máquina do seu cliente?
R: JRE
Regras essenciais para a construção de códigos com base na linguagem Java. A escrita de códigos de um programa é feito através da composição de palavras pré-definidas pela linguagem com as expressões que utilizam para determinar o nome do nossos arquivos, classes, atributos e métodos. É muito comum mesclarmos expressões no idioma amaericano com o nosso vocabulário. Nome de classe, métodos.
Padrão de nomenclatura Quando se trata de escrever códigos na linguagem Java, é recomendado seguir algmas convenções de escrita. Esses padrões estão expressos nos itens abaixo:
-
Arquivo Java: Todo arquivo
.java
deve começar com a Letra MAIÚSCULA. Se a palavra for comporta, a segunda palavra deve também ser maiúscula, exemplo:Calculadora.java
CalculadoraCientifica.java
-
Nome da classe no arquivo: A classe deve possuir o mesmo nome do arquivo.java, exemplo:
1// arquivo CalculadoraCientifica.java
public class CalculadoraCientifica {
}
- void: executa mais não retorna nada.
-
Nome de variável: toda variável deve ser escrita com letra minúscula, porém se a palavra for comporta, a primeira letra da segunda palavra deverá ser MAIÚSCULA, exemplo: ano e anoFabricacao. O nome dessa prática para nomear variáveis dessa forma se chama "camelCase"
-
ve conter apenas letras, _ (underline), $ ou os números de 0 a 9.
-
ve obrigatoriamente se iniciar por uma letra(preferencialmente), - ou $, jamais com número
-
Deve iniciar com uma letra minúscula
-
Não pode conter espaçoes
-
Não podemos usar palavras reservadas da linguagem
-
o nome deve ser único dentro de um escopo
Declarando variáveis e métodos:
• Declarar uma variável em Java segue sempre a seguinte estrutura:
Tipo NomeBemDefinido = Atribuição
(opcional em alguns casos)
Declarando métodos em Java segue uma estrutura bem simples: (todos os metodos na linguagem Java costuma a ser no infinitvo). Cada parâmentro é separado por vírgula.
TipoRetorno NomeObjetoNoInfinito Parametro (s)
Identação: é um termo utilizado para escrever o código do programa de forma hierárquica, facilitando assim visualização e o entendimento do programa.
Organizando arquivos: packge + nomeDaPastaEmQueOArquivoEsta
Java Beans: uma das maiores dificuldades na programação é escrever algoritmos legíveis a níveis que sejam compreendidos por todo seu time ou por você mesmo no futuro. Para isso a linguagem Java sugere, através de convenções, formas de escrita universal para nossas classes, atributos, métodos e pacotes.
• Uma variável deve ser clara, sem abreviações ou definição sem sentido;
• uma variáel é sempre no singular, exceto quando se referir a um array ou coleção;
• Defina um idioma único para suas variáveis. Se você for declarar variáveis em inglês, defina todas em inglês.
🗂️📑Ebook
Na linguagem Java existem algumas palavras reservadas para a representação dos tipos de dados básicos que precisam ser manipulados para a construção de programas. Esses tipos de dados são conhecidos como tipos primitivos (Primitive Types).
Primitive Types:
• int (ex: *in* cep = 21070333; // se comecar com zer, talvez tenha que ser de outro tipo)
• byte (ex: *byte* idade = 45; )
• shot (ex: *shot* ano = 2023; )
• long (ex: *long* cpf = 4563285788400L; // precisa ser encerrado com um "L" para representar que o numero não è inteiro è do tipo longo. Se comecar com zer, talvez tenha que ser de outro tipo).
• float (ex: *float* pi = 3.14F; tem que ter "f")
• double (ex: *double* salario = 1275.33; )
• boolean
• char
Esses tipos não são considerados objetos, e portanto representam valores brutos. Eles são armazenados diretamente na pilha de memória. (Memory stack).
Variável x Constantes:
- variável é uma área de memória associado a um nome que pode armazenar valores de um determinado tipo. Um tipo de dado define um conjunto de valores e um conjunto de operações. Java é uma linguagem com rigidez de tipos, diferente do JavaScript onde declarar o tipo de variável não é obrigatorio.
- Já as constantes são valores armazenados em memória que não podem ser modificados depois de declarados. Em java, esses valores são representados pela reservada final, seguida do tipo. Por convenção constantes são sempre escritas em CAIXA ALTA.
-
Atribuição representando pelo símbolo de = , atribuir um valor a uma determinada variável.
-
Aritméticos é utilizado para realizar operações matemáticas entre valores númericos, podendo se tornar ou não uma expressao mais complexa.
-
Unário são aplicados juntamento com um outro operador aritmético e eles realizam alguns trabalhos básicos como incrementar. decrementar, inverter valores númericos e booleanos.
(+) Operador unário de valor positivo: número são positivos sem esse operador explicitamente;
(-) Operador unário de valor negativo: nega um número ou expressão aritmética;
(++) Operador unário de incrementar de valor: incrementa o valor em 1 unidade;
(!) Operador unário lógico de negação: nega o valor de uma expressão booleana;
(%) resto da divisáo;
número ++; é a mesma coisa que número = número +1;
- Ternário é uma forma resumida para definir uma condição e escolher por um dentre dois valores. Você deve pensar numa condição ternária como se fosse uma condição IF norma, porém, de uma forma em que toda a sua estrutura estará escrita numa única linha. O operador ternário é representado pelo símbolo ?: utilizados na seguinte estrutura de sintaxe:
<Expressão Condicional> ? <caso condição seja tru> : <caso condição seja false>
- Relacionais avaliam a relação entre duas variáveis ou expressões. NEste caso, mais precisamente, definem se o operando à esquerda é igual, diferente, menor, menor ou igual, maior ou maior ou igual da direita, retornando um valor booleano como resultado.
== quando desejamos verificar se uma variável é IGUAL A outra.
!= quando desejamos verificar se uma variável é DIFERENTE da outra.
> quando quando desejamos verificar se uma variável MAIOR QUE a outra.
>= quando desejamos verificar se uma variável é MAIOR OU IGUAL a outra.
< quando desejamos verificar se uma variável é MENOR QUE outra.
<= quando desejamos verificar se uma variável é MENOR OU IGUAL a outra.
método equals compara conteúdo
• Lógicos representam o recurso que nos permite criar expressões lógicas maiores a partir da junção de duas ou mais expressões
&& operador lógico "E"
( || )operador lógico "OU"
2-Qual o tipo de retorno esperado após executar o método ? Você deve analisar se o método será responsável por retornar algum valor ou não.
3-Quais os parâmetro serão necessários para execução do método ? Os métodos as vezes
4-O método possui o risco de apresetar alguma exceção ? Exceções são comuns na execução de métodos, as vezes é necessário prever e tratar a possível existência de uma exceção.
5-Qual a visibilidado do método ? Será necessário que o método seja visível a toda aplicação, somente em mesmo pacotes, através de herança ou somente a nível a própria classe.
Todos o métodos são disposto por uma classe mais isso não quer dizer que todos os métodos precisa estar visivel em todo o programa.
Uma classe é definida por atributos e métodos. Atributos são, em sua grande maioria, variáveis de diferentes tipos e valores. Os métodos, por sua vez, correspondem a funções ou sub-rotinas disponíveis dentro de nossas classes.
Critério de nomeação de métodos: não são obrigatórios, mas é recomendável que sejam seguidos, pois essas convenções facilitam a vida dos programadores ao trabalharem em códigos de forma colaborativa.
- deve ser nomeado como verbo (exemplo: acelerar, freiar, processar, concluir ...)
- seguir o padrão camelCase (todas as letras minúsculas com a exceção da primeira letra da segunda palavra).
Não existe em Java o conceito de métodos globais. Todos os métodos devem SEMPRE ser definidos dentro de uma classe.
O escopo pode ser entendido como o ambiente onde uma variável pode ser acessada. Em java, o escopo de variáveis vai de acordo com o bloco onde ela foi declarada.
A variável é criada no primeiro acesso à ela, se tornando inacessível após o interpretador sair do bloco de excecução ao qual ela pertence. Portando, esta variável não pode ser lida ou manipulada por rotinas e códigos que estão fora do seu bloco de declaraçã, ou seja, foa do escopo da variável.
Em uma Classe, podemos visualizar a diferença de escopos. Os atributos (variáveis) são declarados no corpo principal da Classe, sendo portando acessíveis por todos os métodos.
Palavras reservadas, são identidicadores de uma linguaem que já possuem uma finalidade específica, portanto, não podem ser utilizados para nomear variáveis, classes, métodos ou atributos.A linguagem Java possui 52 palavaras reservadas. Todas essas palavras são classificadas com uma cor especial pela maioria das IDE's. Abaixo temos a lista de palavras agrupadas por suas finalidades.
_Palavra reservada em Java
abstract | continue | goto | package | synchronized | assert | default | if | private |
this | boolean | do | implements | protected | throw | break | double | import |
public | throws | byte | else | instanceof | return | transient | case | extends |
int | short | try | catch | final | interface | static | void | char |
finally | long | strictfp | volatile | class | float | native | super | while |
const | for | new | switch |
Controle de pacotes:
- import: importa pacotes ou classes para dentro do código;
- package: especifica a que pacote, todas as classes de um arquivo pertencem.
Modificadores de acesso:
- public: acesso de qualquer classe;
- private: acesso apenas dentro da classe;
- protected: acesso por classes no mesmo pacote e subclasses.
Primitivos:
- boolean: um valor indicando verdadeiro ou falso;
- byte: um inteiro de 8 bits (signed);
- cha: um character unicode (16-bit unsigned);
- double: um número de ponto flutuando de 64 bits (signed);
- float: um número de ponto flutuante de 32 bits (signed);
- int: um inteiro de 32 bits (signed);
- long: um inteiro de 64 bits (signed);
- short: um inteiro de 32 bits (signed);
- void: indica que o método não tem retorno de valor.
Docymentation: Menciona aspecto de documentação
/ **
* Está duas estrelinhas acima
* é pra identificar que você
* pretende elaborar um comentário
* a nível de documentação
*/
Com o JVM devidamente configurada, nós podemos criar um executável do nosso programa e disponilizar o instalador para qualquer sistema operacional.
Observe que nosso projeto Java criado por um IDE, ele terá uma pastada chama bin. É nesta pasa que ficarão os arquivos .class, o nosso bytecode. No terminal quando for executar colocar apenas "MinhaClasse" sem o ".class".
Quando executamos uma classe que contenha o método main, o mesmo permie que passemos um array [] de argumentos do tipo String. Logo podemos após a definição da classe a ser execuada informar estes parâmetros, exemplo:
java MinhaClasse argumentoUm argumentoDois
Os parâmentros pode ser adicionados manualmente nos arquivos .json assim não temos que ficar passar passando toda outra no terminal.
Classe Scanner proposta de ter melhor interação no que se refere aos inputs a entrada de dados que os nossos usuários vão querer realizar em nosso programa. Ex:
Scanner scanner = new Scanner(System.in).useLocale(Locale.US);
System.out.println("Digite sua idade");
int idade = scanner.nexIt();
1- Qual o tipo de dados seria mais recomendado para representar um CPF? R: long
2- Encontre o erro no código abaixo:
public class Tv {
int canal = 1;
void mudarCanal(){
canal = novoCanal;
}
}
R: o método mudarCanal deveria ter o parâmetro int novoCanal
3- Considerando que você precisa criar um arquivo Java para representar um Ponto Eletrônico, qual seria a forma mais recomendada para conteúdo inicial do arquivo?
R: public class PontoEletronico {}
4- Qual a melhor definição do método abaixo:
public String formatarCep(long cep){}
R: Este método tem por finalidade formatar um número de cep para texto que represente um código postal legível.
5- Qual é o valor impresso na execução do código abaixo ?
public static void main(String[] args) throws Exception {
int numero1 = 1;
String numero2 = "2";
System.out.println(numero1+numero2);
}
R: 12
São símbolos especiais quais são capazes de realizar comparações entre determinados operandos e, em seguida, retornar um resultado. Tipos:Similaridade: (==) igualdade, (!=) diferente
Tamanho: (>)maior, (>=) maior igual, (<) menor, (<=) menor igual
Tipos: Conjunção, Disjunção, Disjunção exclusiva e Negação.
Conjunção: operação lógica que só é verdadeira quando ambos os operando ou expressões envilvidas são verdadeiras.
Simbologia:
* &&
Terminologia:
* and(e)
O - Operando E - Expressão R- Resultado
Disjunção: operação que só é falsa quando ambos os operando ou expressões envolvidas sçao falsos.
Simbologia:
* ||
Terminologia:
* or(ou)
O - Operando E - Expressão R- Resultado
Disjunção exclusiva: operação que só é verdade quando ambos os operando ou expressões são opostos.
Simbologia:
* ^
Terminologia:
* xor
O - Operando E - Expressão R- Resultado
Negação: operação inverte o valor lógico de um operando ou expressão.
Simbologia:
* !
Terminologia:
* inversão
O - Operando E - Expressão R- Resultado
operador bitwise: & e |
operador: shift: ~, >>, >>>, << (~ = vai inverter o bitwise, >>, >>>, << =vai mexer com os zeros)
Tipos:
- Decisão: if, if-else, if-else-if, switch e operador ternário
- Repetição: for, while, do while
- Interrupção: break, continue e return
Decisão: estrutura que avalia uma condição booleana ou variável para direcionar o fluxo de execução. Opções: if(se), switch(escolha), e operador ternário
Decisão: if, if-else, if-else-f
if (condição) {
}
if (condição) {
} else {
}
if (condição) {
} else if (condição){
} else {
}
Decisão: Operador Ternário
condição ? true: false;
ligado ? desligar: ligar;
condição ? true : null;
emMovimento ? freia: null;
Decisão: switch
variável: byte
, short
, char
, int
, enum
, string
switch (variável) {
case 1:
break;
case ...:
break;
default:
break;
}
- Switch é para valores exatos e if para expressções booleanas;
- Evitar usar o default do awitch para "cases genéricos"
- Evitar o efeito "flecha" dos if's
- Evitar muitos if's aninhados
- Blocos É um grupo de 0 ou mais códigos quais trabalham em conjunto para executar uma operação. Tipos: locais dentro de métodos, estátivos dentro de classes, instância dentro de classes.
1- Sobre controle de fluxo, é incorreto afirmar:
R: switch avalia expressões booleanas.
2- Dado o seguinte código é correto afirmar:
if (!b2)
System.out.println("Verdade");
else {
System.out.println("Mentira");
System.out.println("Mentira");
}
R: como o "if" tem só uma linha, as "{" e "}" são opcionais.
3- Avalie o código a seguir e marque a opção correta:
if ((10 + 15) < 20)
System.out.println("Verdade");
else
System.out.println("Mentira");
R: O texto "Mentira" deve ser exibido.
4- Sobre operadores relacionais, qual das alternativas a seguir é a INCORRETA?
R: "=" é o operador de igualdade.
5-Sobre controle de fluxo, é correto afirmar:
R: if não suporta expressões aritméticas.
6- Dadas as variáveis:
int i1 = 10; float f1 = 4.5f; char c1 = "x";
boolean b1 = true;
Qual operação é válida?
R:
c1>i1<
7- Qual das expressões lógicas a seguir é válida?
R:
(10 > 15) && true
8- São tipos de operadores relacionais:
R: Igualdade e menor
9- Avalie as expressões e marque a verdadeira.
R: true || false é true
10- Sobre operadores lógicos, é correto afirmar que:
R: "!" corresponde a operação lógica "inversão"
Objetivo do Curso
- Conhecer as estruturas de repetição
- Arrays na Linguagem Java
-
Estrutura
for-each
Percurso
-
Comando
while
-
Comando
do-while
-
Comando
for
-
Controle de Repetição:
break
econtinue
O real poder dos computadores está na sua habilidade para repetir uma operação ou uma série de operações várias vezes. Cada repetição é chamada laço loop
é um dos conceitos básicos da programação estruturada.
Uma estrutura de repetição permite que uma sequência de comandos seja executada repetidamente, caso determinadas condições sejam satisfeitas.
As Estruturas de repetição podem ser classificadas em:
-
repetição com teste no início
while
-
repetição com teste no final
while
-
repetição contada
for
-
O Comando
break
é utilizado para terminar de forma abrupta uma repetição. -
Quando o comando
continue
é executado, os comandos restantes da repetição são ignorados e programa volta a testar novamente a condição.
OPERADORES DE INCREMENTO E DECREMENTO
Arrays
Array é um objeto utilizado para armazenar sequencialmente dados do mesmo tipo. Permanecem com o mesmo tamanho depois de criados.
Array Unidimensional
Nome do array (c) {(c) é o nome do meu<code>array</code> nesse exemplo.}
Indíce (ou subscrito) {c[0] = o 0 seria a posição em que o<code>array</code> está. Lembrando que as posições sempre começa do "0".}
Array Multidimensional
Primeiro conchete guarda a posição da linha e o segundo da coluna:
Coluna 0 | coluna 1 | coluna 2 |
---|---|---|
a [0] [0] | a [0] [1] | a [0] [2] |
a [1] [0] | a [1] [1] | a [1] [2] |
Pré-requistos
- Java JDK 11
- IDE para desenvolvimento Java
- Conhecer a sintaxe Java
🔗 Visão geral: Estruturas de Repetição e Arrays
🔗 Lista de Exercícios Arrays Unidimensionais - Possíveis soluções
🔗 Lista de Exercícios Arrays Multidimensionais
Nome e Idade
package exercicios.loops;
import java.util.Scanner;
/*
Faça um programa que leia conjuntos de dois valores,
o primeiro representando o nome do aluno e o segundo representando a sua idade.
(Pare inserindo o valor 0 no campo nome)
*/
public class NomeEIdade {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
//variáveis
String nome; //armazena o nome
int idade; //armazena a idade
while(true) { //Enquando o loop for verdadeiro
System.out.println("Nome: "); //Peça o nome
nome = scan.next(); //armazene esse nome na variável
if (nome.equals("0")) { //caso o nome igual a "0"
break; //interrompa o programa
}
System.out.println("Idade: "); //Peça a idade
idade = scan.nextInt(); //armazene a idade na variável
//imprima o nome e a idade
System.out.println("Nome: " + nome + " - idade: " + idade);
}
}
}
Nota
package exercicios.loops;
/*
Faça um programa que peça uma nota, entre zero e dez.
Mostre uma mensagem caso o valor seja inválido
e continue pedindo
até que o usuário informe um valor válido.
*/
import java.util.Scanner;
public class Nota {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in); //Abertura da entrada de fluxo de dados através do teclado
System.out.println("Nota de 0 a 10: "); //Peça uma nota de 0 a 10
int nota = scan.nextInt(); //Entrada de dados, neste caso de um int
while(nota < 0 | nota > 10) { //Enquanto o valor da nota for menor que 0 ou maior que 10.
System.out.println("Nota Inválida!"); //Mensagem que o valor é inválido
System.out.println("Tente novamente. Nota: "); //Peça novamente a nota
nota = scan.nextInt(); //Entrada de dados, neste caso de um int
}
System.out.println("Nota: " + nota); //imprimindo a nota válida
}
}
Maior e Média
package exercicios.loops;
/*
Faça um programa que leia 5 números
e informe o maior número
e a média desses números.
*/
import java.util.Scanner;
public class MaiorEMedia {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in); //Abertura da entrada de fluxo de dados através do teclado
//variáveis
double maior = 0; //guarda o maior número
double soma = 0; //guarda a soma
double media; //guarda a média
int count = 0; //controla o loop
//loop
do {
System.out.println("Número: "); //Peça um número
double numero = scan.nextDouble(); //Entrada de dados, neste caso de um Double.
if (numero > maior) { //Caso o valor que o usuário digitou seja maior que o valor armazanado na variável maior.
maior = numero; //atribua o valor deste número a variável maior.
}
soma = soma + numero; //some o número informado pelo usuário com variável soma (independente do valor)
count = count + 1; //some o valor 1 ao contador, até que invalide a condição do loop. (count < 5)
} while (count < 5); //enquanto o contador tiver o valor menor que 5
media = soma / 5; //faça o cálculo da média. (soma/quantidade)
//imprimindo o maior número digtados e a média dos mesmos
System.out.println("Maior: " + maior + " - Média: " + media);
}
}
Par e Ímpar
package exercicios.loops;
/*
Faça um programa que peça N números inteiros,
calcule e mostre a quantidade de números pares
e a quantidade de números impares.
*/
import java.util.Scanner;
import java.util.Scanner;
public class ParEImpar {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in); //Abertura da entrada de fluxo de dados através do teclado
System.out.println("Quantidade de números: "); //Peça um número
int quantidadeDeNumeros = scan.nextInt(); //Entrada de dados, neste caso de um int.
//variáveis para guardar a quantidade dos números pares e ímpares
int quantPar = 0, quantImpar = 0;
int count = 0; //controla o loop
//loop
do { //primeiro, independente do que tem no while, faça:
System.out.println("Número: "); //Peça um número
int numero = scan.nextInt(); //Entrada de dados, neste caso de um int.
//se o resto da divisão do número por 2 (numero/2) for 0,
if (numero % 2 == 0) quantPar++; //acrescente o valor 1 a variável quantPar.
//caso contrário, o número digitado é ímpar
else quantImpar++; //adicione o valor 1 a variável quantImpar.
count++; //some o valor 1 ao contador até que invalide a condição do loop. (count < quantidadeDeNumeros)
} while (count < quantidadeDeNumeros);
// Faça o loop caso o valor do contador seja menor que a quantidade de números
//imprimindo a quantidade de números pares digtados e números ímpares digitados
System.out.println("Quantidade números pares: " + quantPar + " / Quantidade números ímpares: " + quantImpar);
}
}
Tabuada
package exercicios.loops;
/*
Desenvolva um gerador de tabuada,
capaz de gerar a tabuada de qualquer número inteiro entre 1 a 10.
O usuário deve informar de qual numero ele deseja ver a tabuada.
A saída deve ser conforme o exemplo abaixo:
Tabuada de 5:
5 X 1 = 5
5 X 2 = 10
...
5 X 10 = 50
*/
import java.util.Scanner;
public class Tabuada {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in); //Abertura da entrada de fluxo de dados através do teclado
System.out.println("Número: "); //Peça um número
int numero = scan.nextInt(); //Entrada de dados, neste caso de um int.
System.out.println("Tabuada de " + numero + ":");//frase ilustrativa para indicar a tabuada
//para: variável i = 0, até i menor ou igual a 10, adicionando 1 ao valor de i a cada loop.
for (int i = 0; i <= 10; i = i + 1) {
//número escolhido pelo usuário "X" o valor de i "=" a multiplicação do número com o i.
System.out.println(numero + " X " + i + " = " + (numero * i));
}
}
}
Fatorial
package exercicios.loops;
/*
Faça um programa que calcule o fatorial de um número inteiro fornecido pelo usuário.
Ex.: 5!=5.4.3.2.1=120
*/
import java.util.Scanner;
public class Fatorial {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in); //Abertura da entrada de fluxo de dados através do teclado
System.out.println("Número: "); //Peça um número
int numero = scan.nextInt(); //Entrada de dados, neste caso de um int.
int multiplicacao = 1; //variável para guardar o valor da multiplicação dos valores.
System.out.print(numero + "!="); //frase ilustrativo para indicar o fatorial
//para: variável i = numero, até i maior que 0, diminuimos 1 ao valor de i a cada loop.
for(int i = numero; i > 0; i--) {
multiplicacao *= i; //multiplicamos os valores de i e armazenamos na variável multiplicação
//criamos esta estrutura condicional para imprimir o resultado conforme foi solicitado no exercício.
if (i != 1) { //se o i tiver o valor diferente de 1
System.out.print(i + "."); //imprima o valor do i seguido de "."
} else { //se não (se o i tiver o valor igual a 1)
//imprima o valor do i seguido do sinal "=" e o resultado da multiplicação
System.out.print(i + "=" + (multiplicacao));
}
}
}
}
Ordem Inversa
package exercicios.arrays;
/*
Crie um vetor de 6 números inteiros
e mostre-os na ordem inversa.
*/
import java.util.Scanner;
public class OrdemInversa {
public static void main(String[] args) {
int[] vetor = {-5, -6, 15, 50, 8, 4};
//System.out.println(vetor.length);
System.out.print("Vetor: ");
int count =0;
while(count < (vetor.length)) {
System.out.print(vetor[count] + " ");
count++;
}
System.out.print("\nVetor: ");
for(int i = (vetor.length - 1); i >= 0; i --) {
System.out.print(vetor[i] + " ");
}
}
}
Consoantes
package exercicios.arrays;
/*
Faça um Programa que leia um vetor de 6 caracteres,
e diga quantas consoantes foram lidas.
Imprima as consoantes.
*/
import java.util.Scanner;
public class Consoantes {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String[] consoantes = new String[6];
int quantidadeConsoantes = 0;
int count = 0;
do {
System.out.println("Letra: ");
String letra = scan.next();
if ( !(letra.equalsIgnoreCase("a") |
letra.equalsIgnoreCase("e") |
letra.equalsIgnoreCase("i") |
letra.equalsIgnoreCase("o") |
letra.equalsIgnoreCase("u")) ) {
consoantes[count] = letra;
quantidadeConsoantes++;
}
count++;
} while(count < consoantes.length);
System.out.print("Consoantes: ");
for ( String consoante : consoantes ) {
if ( consoante != null)
System.out.print(consoante + " ");
}
System.out.println("Quantidade de consoantes: " + quantidadeConsoantes);
System.out.println(consoantes.length);
}
}
Números Aleatórios
package exercicios.arrays;
/*
Faça um Programa que leia 20 números inteiros aleatórios (entre 0 e 100) armazene-os num vetor.
Ao final mostre os números e seus sucessores.
*/
import java.util.Scanner;
public class NumerosAleatorios {
public static void main(String[] args) {
Random random = new Random();
int[] numerosAleatorios = new int[20];
for(int i = 0; i < numerosAleatorios.length; i++) {
int numero = random.nextInt(100);
numerosAleatorios[i] = numero;
}
System.out.print("Numeros Aleatorios: ");
for (int numero : numerosAleatorios) {
System.out.print(numero + " ");
}
System.out.print("\nAntecessor dos Numeros Aleatorios: ");
for (int numero : numerosAleatorios) {
System.out.print((numero-1) + " ");
}
System.out.print("\nSucessores dos Numeros Aleatorios: ");
for (int numero : numerosAleatorios) {
System.out.print((numero+1) + " ");
}
}
}
Array Multidimensional
package exercicios.arrays;
/*
Gere e imprima uma matriz M 4x4 com valores aleatórios entre 0-9.
*/
public class ArrayMultidimensional {
public static void main(String[] args) {
Random random = new Random();
int[][] M = new int[4][4];
for(int i = 0; i < M.length; i++) {
for( int j = 0; j < M[i].length; j++) {
M[i][j] = random.nextInt(9);
}
}
System.out.println("Matriz: ");
for (int[] linha : M ) {
for (int coluna : linha ) {
System.out.print(coluna + " ");
}
System.out.println();
}
}
}
import java.util.Scanner;
1- As estruturas de repetição podem ser classificadas em:
R: Repetição com teste de início while
, repetição de teste no final do-while
, repetição contada for
2-
int num = 5, count = 1;
while(count <= 3) {
++count;
num += count;
}
System.out.println(num);
Dado o código acima, o que será impresso no console?
R: 14
3- Sobre arrays, marque a alternativa correta.
R: Permanecem com o mesmo tamanho em que foram criados.
4-
int i, num = 5;
for (i = 0; i < 3; i++) {
num += i;
System.out.print(i);
}
Dado o código acima, o que será impresso no console?
R: 012
5- “É um objeto utilizado para armazenar sequencialmente dados do mesmo tipo.” Acima definimos:
R: array
6- Sobre Estruturas de repetição, julgue a alternativa INCORRETA:
R: As estruturas de repetição podem ser classificadas em: while
, do-while
, e array
7- Como podemos definir “Estruturas de repetição”:
R: Uma estrutura que permite a execução de uma sequência repetidamente, caso determinadas condições sejam satisfeitas.
8-
int num = 5, count = 1;
do {
num += count;
System.out.println(num);
} while (count <= 3);
Dado o código acima, o que será impresso no console?
R: lopping infinito
9-
int[][] numeros = {{4, 9, 8, 5}, {3, 0, 1, 5}, {1, 2, 7, 4}};
System.out.print(numeros[2][2]);
Dado o código acima, o que será impresso no console?
R: 7
10-
String[] nomes = {"Camila", "Venilton", "Leonardo", "Renan", "Rafael"};
System.out.print(nomes.length);
Dado o código acima, o que será impresso no console?
R: 5
Conceituação
É uma porção de códigos (sub-rotina) que é disponibilizada por uma classe. Este é executado quando é feita uma requisição a ele. São responsáveis por definir e realizar um determinado comportamento.
Padrão de definição:
<?visibilidade?><?tipo><?modificador?>retorno nome(<?parâmentros?>)<?exceções?>corpo
Onde:
__V:__ "public", "protected" ou "private"
T: concreto ou abstrato
M: "static" ou "final"
__R:__ tipo de dado ou "void" // não retorna nada só
__N:___ nome que é fornecido ao método // padrão
__P:__ parâmetros que pode receber // se o método for usado de ficar dentro do parâmetro ou parâmetro vazio
E: exceções que pode lançar
__C:__ código que possui ou vazio
Exemplos
public String getNome() {...} // retorna uma nome
public double calcularTotalNota() {...}
public int verificarDistancia(int cordenada1, int cordenada2) {....}
public abstract void executar(); // corpo vazio do m[etodo
public void alterarFabricante(Fabricante fabricante) {...}
public Relatorio gerarDadosAnaliticos(Cliente cliente, List<Compra>compras){...} // como passar mais de um parâmentro.
public static R N(P) {...}
Utilização Passa-se uma mensagem através de uma classe ou objeto.
nome_da_classe.nome_do_metodo();
ou nome_da_classe.nome_do_metodo(...);
Math.random();
ou Math.sqrt(4);
usuario.getEMail();
ou usuario.alterarEndereco(endereco);
Particularidades
Assinatua é a forma de identificar unicamente o método:
Ass = nome + parâmetros
Método:
public double calcularTotalVenda (double precoItem1, double precoItem2, double precoItem3) {....}
Assinatura:
calcularTotalVenda(double precoItem1, double precoItem2, double precoItem3)
Exercícios:
- Tente ao máximo criar métodos que trabalhem sozinhos ou conjunto;
- Pode chamar um método dentro de outro;
- Pode passar como parâmetro, a chamada de um outro método.
É a capacidade de definir método para diferentes contextos, mas preservando seu nome.
Criação
Alterar a assinatura do método:
Ass = nome + parâmetros
converterParaInteiro(float f);
converterParaInteiro(double d);
converterParaInteiro(String s);
converterParaInteiro(float f, RoundType rd);
converterParaInteiro(double d, RoundType rd);
converterParaInteiro(String s, RoundType rd);
converterParaInteiro(RoundType rd, String s);
converterParaInteiro();
Exemplo
Exemplo
Exercícios:
Crie uma aplicação que calcula a área dos 3 quadriláteros notáveis: quadrado, retângulo e trapézio. (Obs: use sobrecarga.)
É uma estrução de interrupção
Simbologia: return
Funcionamento
O método executa seu retorno quando:
- Completa todas suas instruções internas; - Chega a uma declaração explícita de retorno; - Lança uma exceção.Considerações
- O tipo de retorno do método é definido na sua criação e pode ser um tipo primitivo ou objeto;
- O tipo de dado do return deve ser compatível com o do método;
- Se o método for sem retorno
void
, pode ou náo ter umreturn
para encerrar sua execução.
Exemplos
public String getMensagem(){
return "Ola!";
}
public double getJuros() {
return 2.36;
}
public int getParcelas(){
return 1.36f;
}
public void setIdade(...){
return 10;
}
public void executar() {
...
return;
....
}
Exercícios:
Recrie aplicação que calcula a área dos 3 quadriláteros notáveis. Agora faça os métodos retornarem valores.
1- Sobre métodos, marque o que for INCORRETO:
R: Métodos só podem ser utilizados a partir de classes, de forma estática.
2- Tendo o método a seguir, marque o que for INCORRETO:
public double calcularTotalNota() {…}
R: Ele pode retornar um valor do tipo texto.
3- Sobre métodos, marque o que for VERDADE:
R: Todo método deve ter um nome.
4- A partir do método a seguir, marque a alternativa CORRETA:
public int verifica(int i) {...}
R:
public int verifica(int i) {return 0;} // é uma implementação válida.
5- Em relação a assinatura de um método, marque o CORRETO:
R: É constituída do nome e lista de parâmetros do método.
6- Tendo o método a seguir, qual não é uma sobrecarga válida?
public int avaliar()
R:
public int avaliar(double i)
7- Avalie o método a seguir e marque a alternativa INCORRETA:
public String verifica(int idade)
if (idade > 18) {
return “Maior de idade”;
} else {
return “Menor de idade”;
}
R: O corpo do método está definido corretamente.
8- Um método deve ser público, sem retorno, se chamar xpto, tem um int como parâmetro e ter corpo vazio. Baseado nessa especificação, qual é a definição correta?
R:
public void xpto(int i){}
9- Avalie o método a seguir e marque a alternativa CORRETA:
public void verifica(int i) {
if (i > 1) {
return “Maior”;
} else {
return “Menor”;
}
}
R: Ocorre um erro de compilação, pois métodos void
não tem retorno.
10- Sobre métodos, marque o que for INCORRETO:
R: Os parênteses são opcionais na definição de métodos.
-
🗂️📑Slide
import java.util.Scanner;
/*
* Seu sobrinho começou a ganhar mesada dos pais. No auge dos seus 8 anos recebendo 50 reais por mês, ele quer saber quanto
* terá se juntar todo o dinheiro, sem gastar nada, durante alguns meses. E você, como um bom tio com habilidades de programação,
* vai criar um programa que com as entradas do seu sobrinho vai calcular automaticamente a quantidade de dinheiro que ele terá
* em X meses.
*
* Entrada
* A entrada será o número de meses que o sobrinho polpará o dinheiro.
*
* Saída
* A saída deve ser o valor que o sobrinho terá ao final dos meses. (sem as aspas)
*
*/
public class MesadaSobrinho {
public static void main(String[] args) {
try (Scanner leitor = new Scanner(System.in)) {
int entrada = leitor.nextInt();
int mesada = 50;
int total = mesada * entrada;
System.out.println(total);
}
}
}
import java.util.Scanner;
/*
* Desafio
Você foi contratado para criar um gerenciador de pacotes. Porém, o que restou para você fazer foi o contador de
porcentagem de download dos pacotes. Mas como o espaço para essa informação ficou pequeno, a empresa optou por fazer uma
escala de 10 – 1. Então a escala será 1 = 10%, 2 = 20%, 3 = 30% e etc.
Para cada 10% de download, o programa deve printar, em sequência e sem espaços, uma barra “/”.
Entrada
A entrada será um número que representará a porcentagem
Saída
A saída serão as barras sem espaços entre elas.
*/
public class DownloadPacotes {
public static void main(String[] args) {
try (Scanner leitor = new Scanner(System.in)) {
int tamanho = leitor.nextInt();
for (int i = 1; i <= tamanho && i <= 10; i++) {
System.out.print("/");
}
}
}
}
import java.util.Scanner;
/*
* Desafio
Sua tia Gertrudes é uma leitora assídua. E ela gostaria de ter um aplicativo que dissesse para ela, de acordo com o número
de páginas de um livro, quanto tempo ela levaria para ler lendo apenas 3 páginas por dia. Como você está aprendendo Java,
você se disponibilizou para ajudá-la com esse desenvolvimento.
Entrada
A entrada será o número de páginas de um determinado livro
Saída
A saída deverá ser quanto tempo ela vai levar para ler esse livro
*/
public class Leitura {
public static void main(String[] args) {
try (Scanner leitor = new Scanner(System.in)) {
int paginas = leitor.nextInt();
int paginasLidas = paginas / 3;
System.out.print(paginasLidas + " dias");
}
}
}
import java.util.Scanner;
/*
* Desafio
Uma lojinha de doces tem muitos clientes por ser ao lado de uma escola. Para aumentar as vendas o dono resolveu
colocar uma máquina onde os clientes, principalmente as crianças que estão muito acostumadas com a tecnologia,
poderiam colocar suas moedas e receber dois doces aleatórios. Cada 1 real irá render 2 doces aleatórios.
Entrada
A entrada será a quantidade de dinheiro que cada cliente, um por vez, possui.
Saída
A saída deverá ser a quantidade de doces que cada cliente conseguiu obter. (sem as aspas)
*/
public class Lojinha {
public static void main(String[] args) {
try(Scanner leitor = new Scanner (System.in)) {
int dinheiro = leitor.nextInt();
int doces = dinheiro * 2;
System.out.print("O cliente obteve " + doces + " doces");
}
}
}
import java.util.Scanner;
/*Desafio
A prefeitura de uma cidade A instalou uma câmera para verificar quem estava acima da velocidade permitida na rodovia
da entrada da cidade. Porém, ela é uma cidade extremamente movimentada e a prefeitura não deu conta de enviar as multas
necessárias para quem ultrapassasse a velocidade permitida de 60km/h.
O seu papel será o de criar um programa que verifique os dados recebidos da câmera e envie uma mensagem dizendo se o motorista
será multado ou não.
*
*
* Entrada
A entrada vai ser a velocidade do motorista.
*
*
* Saída
A saída será uma mensagem no console dizendo se o motorista foi multado ou não. (sem as aspas)
*/
public class Multa{
public static void main(String[] args) {
try(Scanner leitor = new Scanner(System.in)) {
int velocidadeAtual = leitor.nextInt();
if(velocidadeAtual <= 60) {
System.out.print("Nao foi multado");
} else {
System.out.print("Foi multado");
}
}
}
}
__POO__
- Paradigma: Modelo, exemplo a ser seguido;
- Programação: Desenvolvimento de uma aplicação;
- Orientada: Aquilo que é regido segue uma orientação;
- Objeto: Um molde que represena uma determinada classe.
Paradigma de Programação Orientada a Objetos: É um modelo de desenvolvimento de aplicações, sendo este modelo construído acerca do conceito de objetos.
Linguagem de programação: É uma linguagem formal que, através de uma série de instruções, permite que um programador escreva um conjunto de ordens, açoes consecutivas, dados de algoritmos para criar programas. Podem ser classificadas:
- Níveis de abstração;
- Paradigma de programação;
- Arquitetura de aplicação;
- Tipo de execução.
Paradigma de Linguagem de Programação: É um conjunto de características que podem ser utilizado para categorizar determiado grupo de linguagens. Um paradigma pode oferecer técnins apropriadas para uma aplicação específica.
Paradigmas Principais e seus Subparadigmas:
Paradigma Imperativo:
- Paradigma Estruturado
- Paradigma Concorrente
- Paradigma OO (Orientação à Objeto)
Paradigma Declarativo:
- Paradigma Funcional
- Paradigma Lógico
Atalho para gerar os métodos getters e setters no VSCode (Visual Studio Code):
ctrl + .
Outra forma seria clicar com o botão direito selecionar o Source Action...
Generate Getters and Setters...
e depois selecionar quais atributos precisa ser gerado.
digitar sout
e apertar enter
para abrir System.out.println()
Professor: Willyan Guimarães Caetano
- Criar um Projeto utilizando a ferramenta; - Entender os Principais conceitos por trás do Maven; - Gerenciar dependências do seu projeto; - Configurar plugins e projetos com necessidades específicas.Ferramenta para gerenciar build e dependências de um projeto. Primeira versão foi em julho de 2004, mantido pela Apache Software Foundation.
- Endereça como o Software foi constrído e suas dependências através do (POM) Project Object Model;
- Facilitar a compreensão do desenvolvedor;
- Fornecer informações de qualidade.
- Necessário ter a versão 11.0 do
JDK
Note Importante verificar no prompt de comando se o JDK está instalado
javac -version
Painel de controle > Sistema e Segurança > Sistema > Configuração avançada de Sistema > variáveis de ambiente > variável de sistema > Path > novo
Iremos adicionar manualmente no Path utilitarios que o Windows enxerga em seu ambiente para execução o caminho da pasta "maven" que fizemos o download para assim ser possível em independente do caminho ao ser executado na linha de comando ser aberto.
Verificar novamente no prompt de comando se o MVN foi instalado e está funcionando corretamente:
mvn --version
Abra o terminal acesse a pasta de Download e descompacta o arquivo, comando tar xf nomeDaPasta
.
Note Importante verificar no prompt de comando se o JDK está instalado
javac -version
O arquivo bashrc é um script em shell que roda todas as vezes que abrimos o terminal.
Para adicionar o caminho no Path do sistema:
Abra um editor de texto de sua preferência e acesse o arquivo .bashrc
e no final do arquivo coloque:
Note O arquivo
.bashrc
é um arquivo oculto então para acessar aperte:ctrl+h
export PATH=/localEmqueAPastaEsta:$PATH
Verificar novamente no prompt de comando se o MVN foi instalado e está funcionando corretamente:
mvn --version
Criando o primeiro projeto pelo terminal prompt de comando:
mvn archetype:generate -DgroupId=one.digitalinnovation -DartifactId=quick-start-maven -Darchetype=maven-archetype-quickstart -DinteractiveMode=false
O comando "mvn archetype:generate -DgroupId=one.digitalinnovation -DartifactId=quick-start-maven -Darchetype=maven-archetype-quickstart -DinteractiveMode=false" é usado para gerar um novo projeto Maven usando o arquétipo Quickstart.
Veja o que cada parâmetro significa:
"mvn" é o comando para executar o Maven. "arquétipo:gerar" é o objetivo do Maven que gera um novo projeto a partir de um arquétipo. "-DgroupId=one.digitalinnovation" define o ID do Grupo para o novo projeto como "one.digitalinnovation". "-DartifactId=quick-start-maven" define a ID do Artefato para o novo projeto como "quick-start-maven". "-Darchetype=maven-archetype-quickstart" especifica que o arquétipo de início rápido deve ser usado para gerar o projeto. "-DinteractiveMode=false" especifica que o Maven não deve solicitar a entrada do usuário durante o processo de geração do projeto. Quando você executar esse comando, o Maven criará um novo diretório chamado "quick-start-maven" no diretório atual. Esse diretório conterá um projeto Maven esqueleto baseado no arquétipo de início rápido, com a ID do Grupo definida como "one.digitalinnovation" e a ID do Artefato definida como "quick-start-maven".
- Compilar: compilemvn compile
Ao executar o código mvn compile
todos os códigos Java da aplicação são automaticamente compilados e inseridos na pasta target
- Testar: test mvn test
É possivel que mv encontre todas as classes de teste que existe no projeto e execute as respectivas validações que existe dentro de cada uma delas.
- Empacotar: package mvn package
Cria o Jar
da aplicação e fica dentro da pasta target
- Limpar diretório de trabalho: Clean mvn clear
Referências | Referências | Referências
- Maven archetype: template que possibilita a personalização e a configuração de como um projeto construído. Neste arquivo definimos versão de componentes, quais componentes vão inseridos automaticamente. POM (project object model) unidade fundamental de trabalho ele é em formato XML ele que vai detalha o projeto, como construir o projeto. Maven sempre procura pela pom.xml para realizar sua execução.Entre nesse site e procure por "Hibernate-validator":
E adicione no pom.xml
abaixo das
bash <dependencies> <dependency> </dependency>
depois volte no terminal e copile o projeto mvn compile
.
mvn install
Direta: dependências declaradas no pom.xml Transitiva: dependências obrigatórias das dependências declaradas no pom.xml
_O Maven_- Runtime (tempo de execução)
- Test (teste)
- Compile (compilar)
Escopo Compile
- escopo default
- Disponível em todos os
classpaths
- É transitivo
Escopo probided
- Indica que a dependência será fornecida em tempo de execução por uma implementação na JDK ou via container.
- Exemplos: Servlet API, Java EE APIs
- A dependência com esse escopo é adicionado no classpath usado para compilação(compile) e teste(test) mas não em runtime;
- Não é transitiva.
<scope>provided</scope>
Escopo runtime
- Indica que a dependência é necessária para execução e não para compilação
- Maven inclui no classpath dos escopos de runtime e test
<dependency>
<groupId>msql</groupId>
<artifactId>msql-connector-java</artifactId>
<version>6.0.6</version>
<scope>provided</scope>
</dependency>
Escopo test
- Disponível somente para compilação e execução de testes;
- Não é transitivo.
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupier-engine</artifactId>
<version>${junit.jupiter.version}</version>
<scope>test</scope>
</dependency>
Escopo system
- Similar ao escopo provided exceto por ser necessário prover o JAR explicitamente;
- A dependência com esse escopo é adicionado no classpath usado para compilação(compile) e teste(test) mas não em rutime;
- Não é transitiva.
<dependency>
<groupId>com.baeldung</groupId>
<artifactId>custom-dependency</artifactId>
<version>1.3.2</version>
<scope>system</scope>
<systemPath>${project.basedir}/libs/costom-dependency-1.3.2.jar</systemPath>
</dependency>
Escopo import
- Este escopo é disponível apenas com uma dependência do tipo pom e com tag
- Indica um processo de reutilizar dependências de um projeto.
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.programmergirl</groupId>
<artifactId>my-project</artifactId>
<version>1.1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
mvn dependency:build-classpath -DincludeScope=complie mvn dependency:build-classpath -DincludeScope=teste mvn dependency:build-classpath -DincludeScope=runtime
dependências opcionais Utilizado quando uma dependência não é necessária para os projetos que irão reutilizar seu componente.
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.8</version>
<optional>true</optional>
</dependency>
Exclusions Utilizado quando o componente que você usa compartilha uma biblioteca que você já tem ou não quer ter disponívell.
<dependency>
<exclusions>
<exclusion>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
</exclusion>
</exclusions>
</dependency>
<p></p>
como é o ciclo de vida
Default lifecycle
Principal ciclo responsável pelo deploy local e é composto por 23 fases:
- validate
- compile
- test-compile
- test
- integration-tes
- package
- install
- deploy
Clean lifecycle
Ciclo intermediário responsável pela limpeza do projeto e é composto por 3 fases:
- pre-clean
- clean
- post-clean
Site lifecycle
Ciclo final responsável pela criação do site de documentação do projeto composto por 4 fases:
- pre-site
- site
- post-site
- site-deploy
mvn archetype:generate -DgroupId=one.digital.innovation -Dartifact=projec-parent -Darchetype=maven-quick-star
Define value for property 'version' 1.0-SNAPSHOT: :
Entre no arquivo pom e inclua o packaging
:
Feito isso volte ao terminal entre nesse pasta e execute os seguintes comando:
// criar o projeto "core"
mvn archetype:generate -DgroupId=one.digital.innovation -Dartifact=core Darchetype=maven-quick-star -DinteractiveMode=false
// criar o projeto "service"
mvn archetype:generate -DgroupId=one.digital.innovation -Dartifact=service Darchetype=maven-quick-star -DinteractiveMode=false
// criar o projeto "controller"
mvn archetype:generate -DgroupId=one.digital.innovation -Dartifact=controller Darchetype=maven-quick-star -DinteractiveMode=false
Plugins Maven
Principais Plugins
- eclipse - war
- jacoco - compile
- ear - clean
- checkstyle - javadoc
Uso do Puglin
``
// formato:
mvn [plugin-name]:[goal-name]
// exemplo:
mvn javadoc:javadoc
``
<p>A configuração de um plugin é sempre feita pela tag <code>build</code></p>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<release>11</release>
</configuration>
</plugin>
</plugins>
1- Quando o Maven executa algum tarefa e não encontra a dependência no repositório local o que acontece ?
R: O Maven busca a dependência em um reposiório e faz download e armazena o componente no repositório local
2- Sobre o pom.xml, não é correto afirmar:
R: É um arquivo de configuração do Maven
3- Quais são os comandos para testar, empacotar, compilar e limpar o projeto, respectivamente ?
R: mvn test, mvn package, mvn compile, mvn clean
4- O Maven proporciona uma forma automatizada de criar projetos. Qual o nome do recurso e comando é utilizado para executar esta tarefa ?
R: O recurso é Maven Archetype. O comando é mvn archetype:generate
5- Qual comando no maven possibilita verificar dependências que não estão sendo utilizadas ?
R: mvn dependency:analyze
6- Quais são os escopos de dependência que existem ? Qual é o escopo padrão ?
R: Os escopos são compile, provided, runtime, test, system, import. O escopo padrão é compile.
7- Quais são os três ciclos de vida integrados do Maven para construir e distribuir um projeto?
R:default, clean, site
8- O que são repositórios para o Maven ?
R: Um repositório no Maven contém artefatos de construção e dependências de vários tipos.
9- Qual o nome dado para dependências que são herdadas indiretamente quando passamos a utilizar um novo componente ?
R: Dependências transitivas
10- O que é o Maven ?
R: Ferramenta para gerenciar build e dependências de um projeto
-
🗂️📑slides
Implementar recursos HTTP
para interação de arquivos json
pelas aplicações.
O que é uma API?
Uma API (interface application program) é um código programável que faz a "ponte" de comunicação entre duas aplicações distintas.
REST e RESTful
A API REST(representational state transfer) é como um guia de boas práticas e RESTful é a capacidade de determinado sistema aplicar os princípios de REST.
Princípios
Para que uma arquitetura seja RESTful, é necessário ter uma série de princípios ou padrões:
☑️ cliente-servidor : siginifica aprimorar a portabilidade entre várias plataformas de interface do usuário e do servidor, permitindo uma evolução independente do sitema;
☑️ interface uniforma: representa uma interação uniforme entre clientes e servidor. Para isso, é preciso ter uma interface que identifique e represente recursos, mensagens autodescritivas, bem com hypermedia(HATEOAS);
☑️ stateless: indica que a cada inteção via API tem acesso a dados completos e compreensíveis;
☑️ cache - necessário para reduzir o tempo médio de resposta, melhorar eficiência, desempenho e escalabilidade da comunicação;
☑️ camadas - permite que a arquitetura seja menos compleza e altamente flexível.
Nível de Maturidade
Para padronizar e facilitar o desenvolvimento de APIs REST, Leonardo Richardson propôs um modelo de maturidade para esse tipo de API, definido em 4 níveis:
Nível 0: Ausência de Regras
Esse é consiferado o nível mais básico de uma API, quem implementa apenas esse nível não pode ser considerada REST pois não segue qualquer padrão.
Verbo HTTP | URI | Operação |
---|---|---|
POST | /getUsuario | Pesquisar Usuario |
POST | /salvarUsuario | Salvar |
POST | /alterarUsuario | Alterar |
POST | /excluirUsuario | Deletar |
Um único verbo com nomes que não seguem nenhum padrão
Nível 1: Aplicação de Recursos
Observe que o nome dos recursos foram equalizados e para não gerar ambiguidade é necessário definir o verblo apropriadamente.
Verbo HTTP | URI | Operação |
---|---|---|
GET | /usuarios/1 | Pesquisar Usuario |
POST | /usuarios | Salvar |
PUT | /usuarios/1 | Alterar |
DELETE | /usuarios/1 | Deletar |
Nível 2: Implementação de verbos HTTP
Como a definição dos verbos já foi requisitada no Nível 1, o Nível 2 s encarrega de validar a aplicabilidade dos verbos para finalizades específicas como:
Verbo HTTP | Função |
---|---|
GET | Retornar dados |
POST | Grava dados |
PUT | Alterar dados |
DELETE | Remove dados |
Note Existe uma discussão quando precisamos retornar dados, através de parâmentos via body, recebidos pelo método POST.
Nível 3: HATEOAS
HATEOAS significa Hypermedia as the Engine of Applications State . Uma API que implementa esse nível fornece aos seus clientes links que indicarão como poderá ser feita a navegação entre seus recursos. Ou seja, quem for consumir API precisará saber apenas a rota principal e a resposta dessa requisição terá todas as demais rotas possíveis.
Note O nível 3 é sem dúvidas o menos explorado, muitas APIs existentes no mercado não implementam esse nível.
No exemplo acima, podemos ver o resultado de uma API que implementa HATEAOS, veja que na resposta dessa API há uma coleção "link", cada link aponta para uma rota dessa API. No caso desse exemplo, temos um link para a própria rota, um link para alterar um cliente e outra para excluir.
Passo a passo para criar seu primeiro projeto Spring Boot e maven.
✅ Criamos de um projeto Web;
✅ Estrurturamos nossos Controllers;
✅ Documentamos nossa API;
✅ Habilitamos tratamento de exceções;
✅ Interafimos com a API via Postman.
🚀 REST e RESTful | API REST e RESTful | Handling | Exception handler
1- "Um manipulador de exceção é o código que estipula o que um programa fará quando um evento anômalo interromper o fluxo normal das instruções deste programa."
A afirmativa acima, se trata do conceito de:
<R: Exception Handler2- O que você entende por Swagger:
3- O que é o Postman?
4- O endpoint “/usuarios/1“ seguindo o padrão RESTful, é comumente utilizado com alguns métodos HTTP, exceto:
5- O que significa o acrônimo CRUD?
6- Seguindo a metodologia RESTful, para que serve o método HTTP “GET”?
7- “É a camada da aplicação que lida com as requisições dos usuários.” Estamos falando de qual camada?
8- Qual a função da anotação @RestController?
9- Como podemos definir uma API?
10- “É a URL onde seu serviço pode ser acessado por uma aplicação cliente.“. Na frase citada, simplificamos o conceito de:
- 🗂️📑[slides] - ✅ [Certificado]( Desafio Sua irmã está com o computador muito lento e pediu para você formata-lo. Mas ela gostaria muito de que todas as músicas dela fossem salvas e não deletadas com o resto dos arquivos durante a formatação. Todas as músicas estão no formato .mp3 Crie um programa que cada arquivo com esse formato não seja deletado. Entrada A entrada será uma String com o nome da música e seu formato.Saída A saída deve ser se o arquivo será salvo ou não. Exemplo:
Entrada | Saída |
---|---|
"minhasamigas.png" | "Deletar" |
"Californication.mp3" | "Salvar" |
"Zeca Pagodinho - Algum Completo.rar" | "Deletar" |
import java.util.Scanner;
public class SalvandoMusica {
public static void main(String[] args) {
Scanner leitor = new Scanner(System.in);
String arquivoDoPc = leitor.next();
if(arquivoDoPc.endsWith(".mp3")){
System.out.println("Salvar");
} else {
System.out.println("Deletar");
}
}
}
Lembrando que toda vez que um carro é pego pela câmera e está acima da velocidade permitida automaticamente já é contabilizado uma multa para ele.
Entrada A entrada será a velocidade que o veículo está e quantas multas ele já recebeu. Se ele estiver acima da velocidade, deve ser somado mais uma multa.
Saida A saída deverá ser quantas multas o motorista já tem e se ele irá receber pontuação na carteira de habilitação.
Exemplo:
Entrada | Saída |
---|---|
80 | "1 multas. Nao levou pontos na |
1 | carteira" |
85 | "2 multas. Nao levou pontos na |
1 | carteira" |
95 | "3 multas. Levou pontos na |
2 | carteira" |
import java.util.Scanner;
public class PontosCarteira {
public static void main(String[] args) {
try (Scanner leitor = new Scanner(System.in)) {
int velocidade = leitor.nextInt();
int multas = leitor.nextInt();
if(velocidade>80){
multas ++;
}
System.out.printf((multas<=2) ? multas+" multas. Nao levou pontos na carteira" : multas+" multas. Levou pontos na carteira");
}
}
}
Entrada A entrada será a classificação do imóvel, o valor do aluguel dele e se ele está disponível no momento.
Saída A saída deverá ser as informações da entrada, porém de uma forma mais amigável. (sem as aspas)
Exemplo:
Entrada | Saida |
---|---|
Casa/1900/Disponivel | "Imovel: Casa R$1900 Disponivel" |
Apartamento/850/Indisponivel | "Imovel: Apartamento R$850 Indisponivel" |
import java.util.Scanner;
public class ImoveisDisponiveis {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String entrada = scanner.nextLine();
String[] dados = entrada.split("/");
String classificacao = dados[0];
int valorAluguel = Integer.parseInt(dados[1]);
String disponibilidade = dados[2];
String saida = "Imovel: " + classificacao + " R$" + valorAluguel + " " + disponibilidade;
System.out.println(saida);
}
}
Pao Presunto Carne Pao
Ajude o restaurante a programar isso.
Entrada A entrada serão os ingredientes que compõem o lanche.
Saída A saída deverá ser o lanche montado com as palavras que definem os ingredientes.
Exemplo:
Entrada | Saida |
---|---|
Pao;Presunto;Carne;Pao | Pao |
Presunto | |
Carne | |
Pao | |
Pao;Picles;Tomate;Pao | Pao |
Picles | |
Tomate | |
Pao | |
Pao;Tomate;Carne;Pao | Pao |
Tomate | |
Carne | |
Pao |
import java.util.Scanner;
public class DcMonalds {
public static void main(String[] args) {
Scanner leitor = new Scanner(System.in);
String ingredientes = leitor.next();
String[] listaIngredientes = ingredientes.split(";");
System.out.println(listaIngredientes[0]);
for (int i = 1; i < listaIngredientes.length - 1; i++) {
System.out.println(listaIngredientes[i]);
}
System.out.println(listaIngredientes[listaIngredientes.length - 1]);
}
}
Entrada A entrada será o tamanho da fila que aguardava para ver o show.
Saída A saída deve ser o número de pessoas que foram colocadas no camarote. (sem as aspas)
Exemplo:
Entrada | Saída |
---|---|
100 | "50 pessoas no camarote" |
40 | "20 pessoas no camarote" |
25 | "13 pessoas no camarote" |
import java.util.Scanner;
public class CamaroteBlue {
public static void main(String[] args) {
Scanner leitor = new Scanner(System.in);
int tamanhoDaFila = leitor.nextInt();
int pessoasNoCamarote = (tamanhoDaFila +1) / 2;
System.out.println(pessoasNoCamarote + " pessoas no camarote");
}
}
import java.util.Scanner;
public class CamaroteBlue {
public static void main(String[] args) {
Scanner leitor = new Scanner(System.in);
int tamanhoDaFila = leitor.nextInt();
int pessoasNoCamarote = 0;
for(int i=0; i<=tamanhoDaFila; i++){
if(i % 2 != 0){
pessoasNoCamarote++;
}
}
System.out.println(pessoasNoCamarote + " pessoas no camarote");
}
}
👩🏻🎓 Certificado de conclusão
By: Amanda Ribeiro