Java

Introdução à linguagem Java.

  1. O que é Java
  2. Hello World
  3. Classes

Classes

Este capítulo apresenta os conceito de classe, a principal característica dos programas em Java, paradigma chamado Orientação a Objetos.

OO

O paradigma de desenvolvimento de software chamado Orientação a Objetos refere-se ao desenvolvimento de um modelo orientado a objetos do domínio da aplicação. Os objetos nesse modelo são abstrações que geralmente refletem as entidades e as operações associadas ao problema a ser resolvido.

Há importantes conceitos, envolvidos neste paradigma que permitirão a modelagem do problema e sua solução. Esta modelagem e os algoritmos do programa em desenvolvimento precisam estar comprometidos com este preceito.

  1. Abstração

Apenas as funcionalidades e propriedades de uma entidade real serão considerados na modelagem e implementação, representando-a de forma isolada e sintética para permitir a solução otimizada do problema e a reutilização desta modelagem em diversas partes do sistema em desenvolvimento.

  1. Encapsulamento

O encapsulamento é um dos pilares da orientação a objetos, permitindo a elaboração de entidades simples e sintéticas. Segundo este preceito devemos ocultar a implementação, mostrar apenas as funcionalidades e esconder os detalhes complexos do mundo exterior. Os objetos encapsulados funcionam como uma caixa preta, mostrando apenas sua interface externa.

  1. Classe

Podemos entender Classe como o modelo de uma série de objetos com as mesmas propriedades e funcionalidades.

As propriedades são em geral chamadas de atributos e as funcionalidades de métodos.

  1. Objeto

Objeto pode ser entendido como a instância de uma classe. Todo objeto pertence a uma determinada classe e possui atributos próprios. Os atributos são mutáveis e podem receber diferentes valores de acordo com as características e o estado do objeto.

Exemplo: todas as lâmpadas em um edifício possuem propriedades e funcionalidades similares. Cada uma individualmente, entretanto, guarda seus valores e estado, como corrente elétrica, potência, cor, etc, podendo estar apagada ou acesa.

  1. Herança

Em OO é possível criar classes derivadas de outras classes genéricas. As classes filhas herdarão as características das classes mãe, incorporando novas propriedades e funcionalidades.

A herança é uma das principais características das linguagens de programação orientadas a objetos, permite o reaproveitamento de métodos e atributos, diminuindo o tempo de desenvolvimento e simplificando o código, de forma a facilitar as manutenções futuras.

Exemplo: lâmpadas controladas pelo celular tem as mesmas funcionalidades das lâmpadas comuns mas com algumas especializações, como controle à distância e variação da luminosidade.

  1. Polimorfismo

Quando uma classe recebe heranças de uma classe mãe, sempre será possível mudar a interface e o comportamento de alguns métodos herdados.

Os métodos que precisam ser mais especializados para atender aos novos requisitos deverão ser reimplementados na classe filha. Dá-se a esta modificação o nome de Polimorfismo.

Exemplo: lâmpadas controladas pelo celular devem ser mais especializadas. Seu estado não seria apenas apagada ou acesa mas a interface de controle de estado deverá possibilitar o recebimento de valores inermediários que representem sua luminosidade.

Implementação de classes

Em um programa escrito em Java, é preciso que ao menos uma classe seja implementada. Vimos isto em nosso primeiro programa, na lição Introdução quando escrevemos a classe Oi, que escreve "Oi, mundo!" no terminal. Esta classe, para ser acessível pelo sistema precisa ser pública e implementar um método público e estático "main", que tem por assinatura o rebebimento de um vetor de Strings.

Outras classes podem ser implementadas, preferentemente cada uma implementada em próprio arquivo, com o nome da classe.

Para a melhor organização do sistema o Java permite o uso de pacotes (package), organizando as classes em diretórios.

Lâmpadas

Vamos criar um sistema que permita representar as lâmpadas de um edifício em uma cidade, sendo que algumas são lâmpadas comuns, outras tem controle de luminosidade, outras acendem com o som de batida de palmas e outras, além disso, são controladas por celular.

Crie o diretorio edificio e dentro a classe Edificio.java, que será o programa principal:

``` package cidade;

/** * Edificio é um programa que gera um edificio com diversas lampadas. * * Algumas lampadas podem ser acesas ou apagadas * Algumas lampadas podem ser acesas com palmas * Outras lampadas tem controle de luminosidade * Há lampadas controladas pelo celular * * @author Monsenhor * @version 1.0 * @since 2019-13-11 */

public class Edificio {

/** A lampada deste edificio */ Lampada lampadaDaSala;

/** Contruindo o edificio com uma lampada */ public Edificio(Lampada umaLampada) { this.lampadaDaSala = umaLampada; }

// método principal public static void main (String[] args){ Lampada minhaLampada = new Lampada(); Edificio edificio = new Edificio(minhaLampada); edificio.acenderLampada(); edificio.apagarLampada(); } } ```

Crie também a classe Lampada, no mesmo diretório:

``` package cidade;

/** * Lampada representa uma lamapada simples * * Uma lampada pode ser acesa ou apagada * * @author Monsenhor * @version 1.0 * @since 2019-13-11 */ public class Lampada {

Boolean estado; /** Contruindo uma lampada apagada */ public Lampada() { this.estado = false; }

/** Acende a lampada */
public void acenderLampada() { this.estado = true; System.out.println("Acendeu!"); }

/** Apaga a lampada */
public void apagarLampada() { this.estado = false; System.out.println("Apagou!"); }

} ```

A classe Edificio carrega a classe Lampada, definida no arquivo Lampada.java e instancia o objeto lampadaDaSala. Em seguida chama o método acender, deste objeto e imediatamente o método apagar.

Introdução

Este capítulo apresenta os conceitos iniciais necessários para o aluno iniciante em Java.

A primeira providência é instalar o Java em sua máquina de desenvolvimento. Se você está usando um Debian Linux poderá instalar o kit de desenvolvimento compatível Java (openJDK 11) com o comando:

sudo apt install default-jdk

  1. Oi Mundo

Java é uma linguagem de programação de alto nível, orientada a objetos e como possui uma grande variedade de bibliotecas, APIs e um ambiente de execução, pode ser considerada também uma plataforma de desenvolvimento.

java class Oi{
public static void main(String args[]){
System.out.println("Oi mundo!");
}
}

Vamos entender este código, linha por linha.

1. A primeira linha declara a classe **Oi**, que será instanciada no objeto que executa as ações que desejamos. Perceba que esta linha termina com uma chave {, que inicia o bloco de código que implementa o algoritmo que imprimirá uma frase.

2. A segunda linha declara o método estático **main**, que será executado automaticamente na chamada do objeto instanciando a classe **Oi**. Este método recebe como argumento um vetor de strings _args[]_, contendo os argumentos da linha de comando, neste caso, nulo, mas esta assinatura é obrigatória na definição do método principal de uma classe.

O qualificado void indica que o método não retorna nenhum valor mas apenas realiza algo, no caso, imprime algo no terminal.

Um método estático pertence à classe e não será instanciado por um objeto, resultando em melhor aproveitamento de memória. O método principal de uma classe precisa ser estático para ser executável.

Para compilar e executar o código acima será preciso criar um arquivo com o nome da classe e executar o compilador.

mkdir Oi && cd $_

gedit Oi.java

javac Oi.java

java Oi

gedit oi.sh

```

!/bin/sh

mypath=$(realpath $0); cd $(dirname $mypath); java Oi ```

chmod +x oi.sh

O java precisa encontrar a classe Oi, que se encontra no mesmo diretório deste script, para funcionar.

  1. Tipos de programa

Com Java é possível criar programas para várias utilizações:

Existem 4 Plataformas ou Edições oficias do Java:

OpenJDK ("Open Java Development Kit") é uma implementação livre e gratuita da plataforma Java, Edição Standard ("Java SE"). É o resultado dos esforços da Comunidade Java para a evolução atemporal da linguagem.

Atualmente (Novembro de 2019) as versões disponíveis nas distribuições baseadas em Debian são a openJDK 8 e openJDK 11.

  1. JDK, JRE e JVM

Uma das principais dúvidas do iniciante em Java é a diferença entre JDK, JRE e JVM.

JVM é a máquina virtual Java, responsável pela execução do código de bytes gerado ao se compilar o código escrito na linguagem Java. É uma máquina abstrata, uma mera especificação, e outras linguagens como raku, javascript, PHP, Haskel, Ruby, COBOL, etc, podem ser compiladas para rodar sobre esta máquina virtual. O principal objetivo de usar-se uma máquina virtual é a compatibilidade de ambientes computacionais entre as diversas plataformas.

JRE é a implementação da máquina virtual Java para determinada plataforma. É um ambiente de execução, responsável por físicamente rodar o código de bytes Java em tempo de execução (RTE), possuindo as bibliotecas usadas nos códigos Java e outros arquivosi complementares, dependendo da plataforma.

JDK é o kit de desenvolvimento, contendo, além do ambiente de execução(JRE e java executável), ainda as ferramentas de desenvolvimento, como o compilador (javac), gerador de documentação (javadoc), gerenciador de arquivos (jar), entre outras.