Fundamentos JAVA - O guia definitivo para iniciantes
Neste artigo você verá os passos necessários para dominar a linguagem Java. Ao decorrer do texto, deixei várias dicas e links gratuitos úteis e demonstrarei como eu queria ter aprendido sem perder tempo e de forma ágil. Se você já é familiar com alguns dos seguintes passos, sinta-se livre para pular alguns.
1º passo) Lógica de programação
O domínio da lógica de programação é crucial antes de avançarmos para temas mais complexos. Se você nunca teve experiência com uma linguagem de programação, eu recomendo o curso de Algoritmos e Lógica de Programação usando a linguagem Portugol, do renomado professor Gustavo Guanabara. Ele explica de forma simplificada e apresenta conceitos com os quais sempre teremos contato. Clique aqui
2º passo) Já fiz finalizei o curso ou já conheço a lógica, e agora?
Agora, precisamos conhecer a sintaxe do Java. Uma das melhores e mais seguras formas de fazer isso é lendo uma documentação atualizada. Aprender a ler documentação é uma característica essencial para o desenvolvedor, pois sempre precisaremos fazer consultas em fontes seguras ou aprender uma nova ferramenta.
Uma das minhas plataformas favoritas para isso é a W3Schools, com uma interface fácil de entender, intuitiva e conteúdo bem simplificado. É uma ótima opção para iniciantes. Clique aqui.
3º Passo) Que editor de código escolher?
Caso você não saiba, existem diversos editores de código. Eles são o ambiente onde escrevemos, modificamos, editamos e executamos código. Embora seja possível escrever código até mesmo no Bloco de Notas, é muito mais conveniente fazer isso em um editor especializado.
Um dos mais populares, e sobre o qual você provavelmente já ouviu falar, é o VS Code. Ele possui uma interface amigável, facilidade para instalar plugins e personalizar configurações, e é, de fato, capaz de rodar Java.
No entanto, para a linguagem Java, eu recomendo o IntelliJ IDEA. Como ele foi desenvolvido especificamente para a linguagem, ele contribui para um fluxo de trabalho mais tranquilo e já vem configurado para atender às demandas do ecossistema Java
JVM e JDK
O que significa essas siglas? Essas siglas representam algo de suma importância para a linguagem java e que permitem que rode normalmente. Vamos para uma explicação simplificado sobre o que são e seus funcionamentos com uma analogia.
JDK = Java Development Kit)
Vamos dizer que é o kit de chef completo, é o pacote que irá conter tudo o que você precisa para criar seu programa usando Java, como se fosse seu "prato".
Ele vem com o compilador, que transforma sua "receita" em um "prato pronto", e , também, com o forno (a JVM).
É pacote para quem vai desenvolver "cozinhar", que somos nós, os "cozinheiros" ou desenvolvedores.
JVM = Java virtual Machine
Vamos dizer que é o forno, é um software (máquina virtual), que fica dentro do seu computador.
Ele pega o seu programa, o "prato pronto", e faz ele rodar, não importando o seu Sistema Operacional, garantindo que o programa funcione em qualquer lugar. Isso só é possível porque ela transforma o código compilado, chamado de bytecode, em instruções que o computador entenda.
Clique aqui para uma explicação mais completa e detalhada.
Clique aqui para saber como fazer a instalação do InteliJ e JDK.
4º Passo) Pôr a mão na massa
Se você chegou até aqui, está na hora de praticarmos alguns exercícios, afinal, só assim podemos afiar nossas habilidades na programação, com bastante prática. Deixei um repositório cheio de exercícios para que você possa desfrutar.
5º Passo) Orientação a Objetos
O que faz do Java ser uma linguagem tão poderosa é o fato de sua construção ser baseada em orientação a objetos, é um paradigma de programação que organiza o código em objetos, que são entidades que combinam dados (atributos) e comportamentos (métodos). Abaixo vamos passar alguns termos de suma importância de POO.
Classes
Classes são como moldes que definem como algo deve ser, pense que seja com uma fórmula para criar algo sem que essa coisa realmente exista ainda.
Objetos
Objeto é uma instância, uma representação da classe.
Exemplo: Classe e objetos são fortemente ligados, vamos dar um exemplo de como um interage com o outro.
Imagine uma fôrma de biscoito, essa fôrma será nossa classe, uma fôrma é capaz de dar forma à vários biscoitos, esses serão os nossos objetos, sejam eles de chocolate, com flocos, qualquer sabor.
Uma classe, assim como a fôrma é capaz de criar vários objetos a partir das características fornecidas pela fôrma, os atributos serão as características dos biscoitos, que podem ser diferentes ou iguais à medidas que criamos novos biscoitos. Os métodos serão as ações que podemos tomar diante ao biscoito, podemos assar, decorar, embalar...
Encapsulamento
Quando falamos em encapsulamento, pensamos em ocultar algo. Nesse sentido, trata-se de ocultar uma parte do código, seja por segurança, para diminuir a complexidade, ou para facilitar a legibilidade, permitindo que o código seja dividido em partes menores e independentes.
Para acessar esse código oculto existem 4 modificadores de acesso, que controlam quem pode acessar o conteúdo:
- Public = Pode ser acessado de qualquer lugar (por qualquer classe, em qualquer pacote).
- Private = Só pode ser acessado dentro da própria classe.
- Protected = Pode ser acessado pela mesma classe, pelas subclasses (mesmo que estejam em outro pacote) e pelas classes do mesmo pacote
- Default = Quando não colocamos nada, o acesso é permitido apenas dentro do mesmo pacote.
Herança
Como o nome sugere, é quando herdamos algo, em POO é possível herdar os atributos e métodos de uma classe.
Pense novamente no exemplo da fôrma e dos biscoitos. Agora, imagine que criamos outra classe chamada Forno. Dependendo dos ingredientes usados nos biscoitos, o tempo de assar pode variar.
Em vez de repetir os mesmos atributos e métodos da classe Fôrma, poderíamos herdar tudo dela na classe Forno, e ainda adicionar novas características e comportamentos específicos do forno.
Assim, a herança nos permite reutilizar código, evitar repetições e expandir funcionalidades sem precisar reescrever o que já foi feito.
Polimorfismo
Significa assumir várias formas, quando os métodos podem ter o mesmo nome, mas se comportarem de maneira diferente.
class Animal{
public void fazerSom(){
System.out.print("produzindo som");
}
}
Image uma classe animal que tenha um método chamado fazerSom(), e que outras classes herdem esse método mas quiséssemos fazer mudanças, o nome do método seria o mesmo mas o seu comportamento seria diferente.
class Cachorro extends Animal{
@Override
public void fazerSom(){
System.out.print("au au");
}
}
6º Passo) O que é uma API?
O que é API no sentido semântico?
Destrinchando a API = Programming Interface Application → Interface de Programação de Aplicativos
Programação de Aplicativos → Todos os aplicativos são soluções que programamos para resolver um problema de negócio.
Interface → Interface é igual a um contrato, mas o que é um contrato? Um contrato é um conjunto de regras a ser seguidas entre duas partes. Exemplo: Um comprador assina um contrato para comprar uma casa, nesse contrato vai ter regras a ser seguidas entre o comprador e o vendedor. Outro exemplo pode ser entre a comunicação do FrontEnd com o Backend, os dois devem seguir regras para se comunicarem.
API = Aplicação que foi programada para servir dados para um negócio, seguindo padronização de um tipo de contrato de programação.
Resumindo → Aplicação para servir dados de maneira padronizada seguindo algum protocolo de comunicação. O mais usado é o protocolo HTTP.
REST
REST significa Representational State Transfer, ou, Transferência de Estado Representacional.
Representational State → significa estado, tá, mas o que é isso? Um estado seria um conjunto de condições, características que se encontram em determinado momento. Exemplo: Mãe pergunta como está o estado do quarto do filho, pode estar arrumado ou bagunçado. Então Representational significa a representação do estado de algum conteúdo que tem dentro de algum lugar(variáveis, objeto, arquivos);
Transfer → Transferência, seria você transferir uma coisa para outro lugar.
Características
REST é um padrão de arquitetura, que para ser REST precisa seguir uma das características
- Ter arquitetura cliente X servidor → afinal, se for junto o back com o front vira um monolito
- Comunicação stateless → não guarda estado, depois de receber a requisição ela se livra informação.
- Cache → se várias pessoas fizerem a mesma requisição, você pode guardar a resposta para evitar processamento desnecessário.
- Interface uniforme → Segue uma regra, um padrão, exemplo: se você só entrega em formato json, continuar entregando em formato json sem ser XML ou outro.
- Sistema em camadas → um sistema de organização, não querer colocar várias funções diferentes na mesma pasta.
Para ser REST basta seguir apenas algumas das características acima. Mas caso você seguir todas as características à risca, você estará usando um padrão de arquitetura RESTFUL.
Mais explicações:
7º Passo) Git e Github
Git é uma ferramenta de controle de versão, usada para gerenciar e acompanhar as alterações no código ao longo do tempo.
Com ela, é possível saber o que foi feito, quem fez e quando, além de manter um histórico completo das versões do projeto, facilitando o trabalho em equipe e a recuperação de versões anteriores.
Já o GitHub é uma plataforma online que utiliza o Git para armazenar, compartilhar e colaborar em projetos de código.
Ele facilita o trabalho em equipe, permitindo que várias pessoas trabalhem juntas no mesmo projeto, enviem atualizações e revisem o código de forma organizada.
Clique aqui. Para acessar um curso gratuito e introdutório.
8º Passo) Deploy
Você terminou um projeto e quer colocar no ar? existem opções gratuitas que fazem isso. Aqui estão alguns sites em que você pode hospedar:
Referências
https://www.youtube.com/watch?v=xEKo29OWILE&list=PLHz_AreHm4dm7ZULPAmadvNhH6vk9oNZA
https://www.w3schools.com/
https://youtu.be/3LHSyha0xN0?si=qGtcwdFaTPUHLuu8
https://www.jetbrains.com/pt-br/idea/download/?section=windows
https://docs.oracle.com/en/java/
https://aws.amazon.com/pt/what-is/api/