Estou documentando todo meu aprendizado nessa linguagem, para que me ajude no futuro com conceitos "básicos" e espero que possa ajudar a outros como eu.
R: De todas as linguagens de programação, Java é a que mais me chama atenção por sua tipagem e também pela organização que o Paradigma Orientado a Objetos proporciona.
R: Para aprender a sintaxe da língua, sobre Classes e as peculiaridades estou usando a Maratona Dev Dojo
R: Porém, paralelo a isso, estou lendo livros para entender como as coisas funcionam por debaixo dos panos.
Eles são:
- Use a cabeça - Java
- Orientação a Objetos - Aprenda seus conceitos e suas aplicabilidades de forma eletiva
- Algoritmos e Estrutura de Dados em Java
int, byte, long, char, short, float, double and boolean
Definição segundo o Wikipédia: "A Orientação a Objetos é um paradigma de análise, projeto e programação de Sistemas de software baseado na composição e interação entre diversas unidades de software chamadas de objetos".
O POO em sua essência visa melhorar complexidades que a Programação Estruturada possui, por exemplo a reutilização de códigos Herânça, a capacidade de um trecho de código fazer apenas uma tarefa Coesão e também a capacidade de um código se relacionar com outro trecho de código Acoplamento. Lembrando... uma linguagem que usa o Paradigma Estruturado, consegue fazer Herânça, Coesão e Acoplamento, porém a complexidade para atingir esses termos é muito grande
Ela representa de forma mais eficaz as características e necessidades que um Software possue.
Reúso -> Em Linguagens de Programação nota-se que duas coisas podem ser reutilizadas: Comportamentos - Operações, serviços e açoes - e Informações - Dados e características.
Obs: Para se atingir o Reuso atráves de Linguagens Estruturadas é necessário um código mais complexo, o que o torna mais propricio a erros.
Coesão -> Este princípio diz que cada trecho de código deve ser responsável por apenas uma função.
Acoplamento -> Citação do livro "Poo - Aprenda seus conceitos e aplicabilidades": Acoplamento é uma conexão, união ou ligação entre dois ou mais corpos, formando um único conjunto. Para a computação, acoplamento é o nível de interdependência entre os códigos de um programa de computador.
AbstraçãoSignificado segundo o dicionário Michaelis: "Processo pelo qual se isolam características de um objeto, considerando os que tenham em comum certos grupos de objetos". Uma abstração por natureza será incompleta, mas isso não quer dizer que ela não terá utilidade. Na verdade, isso a torna valiosa, pois apartir dessa abstração podemos modelas, adicionar e editar novas características.
EXEMPLO: Imagine que uma fábrica de motos fosse representar da maneira mais simples (Abstrata) os produtos que ela fábrica e vende. Ela não saberia todos os tipos de moto que poderia fabricas, mas saberia que uma moto precisa de acento, motor, pneus e etc...
E apartir dessa abstração pode-se criar novos modelos de moto, onde uma moto pode ter 3 rodas, uma outra moto pode ter o acento reclinável e assim se segue.
Encapsulamento: Tornar o complexo, simples e tragável.
Com o encapsulamento podemos esconder toda a complexidade do código e retornar apens o resultado esperado.
As Classes são a estrutura miníma necessária de um Código OO.
Antes de existir um Objeto é necessário existir uma classe, isso nos mostra que não é possível criar objetos sem que existam classes.
A Classe é a abstração inicial de um produto ou "abstração de uma entidade".
Seja ela Física (Bola, pessoa) ou Conceitual (viagem, venda, estoque e etc...)
Dica
Para facilitar o processo de indentificação das necessidades de um software o ponto de partida é pensar em Substantivos.
Ex: Imagine que precisamos desenvolver um site de vendas online, entidades como Venda, Cliente, Fornecedor, Produto.
public class Cliente{
// Implementação aqui
}
public class Venda{
// Implementação aqui
}
public class Fornecedor{
// Implementação aqui
}
public class Produto{
// Implementação aqui
}
Os atributos de uma classe, são suas características. Imagine nossa classe Cliente, como atributos poderiámos ter Nome, CPF, Email, RA e etc...
public class Cliente{
// Características
int id;
String nome;
String CPF;
String Email;
}
Em Java é necessário informar o tipo e variável que será criada
Método é um trecho de código, disponibilizado pela Classe.
É executado quando é feita uma requisição a ele.
Dica
Para facilitar a indentificação de um método pense em verbos.
Por exemplo, a classe Cliente pode ter os métodos getNome, getCPF, getEmail, setEmail, setNome, setCPF.
public class Cliente{
// Características
int id;
String nome;
String CPF;
String email;
// Métodos
// setters
public void setNome(String nome){
this.nome = nome;
}
public void setCPF(String CPF){
this.CPF = CPF;
}
public void setEmail(String email){
this.email = email;
}
// getters
public int getId(){
return id;
}
public String getNome(){
return nome;
}
public String getCPF(){
return CPF;
}
public String getEmail(){
return email;
}
}
Nos Métodos getters temos que informar o tipo de retorno da variável.
Lembrete: Na Linguagem Java o retorno informado deve ser retornado.
São métodos especiais que ficam responsáveis por criar objetos
Cliente cliente = new Cliente(); // Referência do objeto cliente à Classe Cliente.
// Análise do trecho de código.
// Cliente cliente -> Cria uma variável `cliente` do tipo `Cliente`.
// new Cliente() -> Com o operador 'new' faz uma referência a Classe.
public class Cliente { // Classe principal
private String nome;
// atributos
// construtores
public Cliente(){} // Nota-se que o Construtor omite o tipo de retorno.
// Como o construtor é um método da própria Classe, não é necessário
// informar o tipo de retorno.
// métodos abaixo
public String getNome(){return nome;}
}
Há ainda a sobrecarga de construtores.
public class Cliente { // Classe principal
// atributos
// construtores
public Cliente(){}
public Cliente(String nome){
this.nome = nome;
}
public Cliente(String nome, String CPF){
this.nome = nome;
this.CPF = CPF;
}
public Cliente(String nome, String CPF, String email){
this.nome = nome;
this.CPF = CPF;
this.email = email;
}
// métodos
}
Agora se fossemos fazer refêrencia a um objeto poderiámos fazer de várias maneiras.
Cliente cliente1 = new Cliente();
Cliente cliente2 = new Cliente("Richarde");
Cliente cliente3 = new Cliente("Xanderson", "000.000.000-00");
Cliente cliente4 = new Cliente("Charley", "000.000.000-00", "[email protected]");
System.out.println(cliente1.getNome()); // null
System.out.println(cliente2.getNome()); // "Richard"
System.out.println(cliente3.getNome()); // "Xanderson"
System.out.println(cliente4.getNome()); // "Charley"
Todas as linhas fazem instância a mesma Classe, porém são objetos diferentes na memória do computador.
Esse possui o papel inverso do Construtor, serve para eliminar a referência do objeto à memória.
void finalize(){
}
// esse método não é necessário, pesquise sobre "Garbage Collection - Java"