Вы находитесь на странице: 1из 25

?

ETEC “RODRIGUES DE ABREU”

Habilitação Profissional Técnica de Nível Médio

Desenvolvimento de Sistemas

Pesquisa e Elaboração De Relatório.

Aluno(a) Samara Moreira da Silva

Bauru

05/2020
Pesquisar e descrever seu entendimento sobre: Classes, Objetos, Programação Orientada a Objeto,
Variáveis, Métodos, Encapsulamento, Execução de aplicação e Instalação. Procure exemplificar
quando possível. O livro base está postado no material de aula o capítulo 4 é a parte que mais
exemplifica alguns destes itens.

Classe

Uma classe é um elemento do código Java que utilizamos para representar objetos do


mundo real. Dentro dela é comum declararmos atributos e métodos, que representam,
respectivamente, as características e comportamentos desse objeto.

A declaração de uma classe em Java é bastante simples. Utilizamos a palavra reservada


class seguida pelo nome da classe. Logo após, entre chaves, definimos os elementos a
ela relacionados: atributos, construtores e métodos. Sintaxe de declaração de classe:

1<modificador de acesso> class NomeDaClasse {

2  

3  // Local onde atributos, construtores e métodos são criados

4  

5}

Note que também é possível especificar o modificador de acesso. Por meio dele
informamos a visibilidade da classe, que pode ser public, private ou default.

Exemplo de declaração de classe:

1 public class Produto {

2   

3   private String nome;

4   private int quantidade;

5   

6   public Produto() {
7

9     // Código do construtor

1   }
0   

1   public void apresentarProduto() {


1
    // Código do método
1
  }
2
  
1
3 }

1
4

Este exemplo apresenta o código da classe Produto. Como foi declarada como public,
poderá ser utilizada por todas as classes do projeto. Além disso, ela possui dois atributos
(nome e quantidade), um construtor sem argumentos e um método.

Regras para nomeação de classes

Ao nomear uma classe algumas convenções devem ser seguidas:

1. Manter o nome simples e descritivo;


2. Usar palavras inteiras, isto é, sem siglas e abreviações;
3. A primeira letra de cada palavra deve estar em caixa alta.

Como utilizar

Para utilizar uma classe devemos declará-la da mesma maneira que se declara uma
variável de tipo primitivo. Declaramos o tipo (neste caso o nome da classe) seguido pelo
nome da variável.
Exemplo de instanciação de classe:

1Produto produtoUm;

2produtoUm = new Produto();

3produtoUm.apresentarProduto();

A segunda linha deste código representa o processo de instanciação de uma classe. Na


linha anterior, a variável produtoUm foi definida como sendo do tipo Produto. Em
seguida, com a palavra reserva new, um espaço é criado na memória para armazenar um
novo objeto do tipo Produto. O construtor Produto() especifica como o objeto deve ser
criado. Por fim, uma referência a esse objeto é atribuída à variável produtoUm.

Assim, através de produtoUm podemos acessar o objeto criado (e seus atributos e


métodos). Na terceira linha, por exemplo, utilizando a variável, acessamos o objeto e
chamamos o método apresentarProduto(). Apesar do exemplo acima, o código para criar
um objeto e definir a variável que conterá sua referência normalmente é declarado em
apenas uma linha.

Exemplo de instanciação de classe:

1Produto produtoUm = new Produto();


Objetos (computacionais) são caracterizados por atributos e métodos. Atributos são as
propriedades de um objeto. Métodos são as ações que um objeto pode realizar. Os
objetos são características definidas pelas classes. Neles é permitido instanciar objetos
da classe para inicializar os atributos e invocar os métodos.
Atributos
são as características de um objeto, essas características também são conhecidas como
variáveis, utilizando o exemplo dos cães, temos alguns atributos, tais como: cor, peso,
altura e nome.
public class Cachorro{
               public String nome;
               public float  peso;
               public float  altura;
               public String cor;
}
Métodos são as ações que os objetos podem exercer quando solicitados, onde podem
interagir e se comunicarem com outros objetos, utilizando o exemplo dos cães, temos
alguns exemplos: latir, correr, pular.
Implementando a classe “Cachorro” além dos Atributos, agora com Métodos:

public class Cachorro{
               public String nome;
               public float  peso;
               public float  altura;
               public String cor;
 
             void pular {
                             if (altura >= 80){
                                          System.out.println(“Seu cachorro pula
alto”);
                             }
                             if (altura < 80 || altura >= 50{
                                          System.out.println(“Seu cachorro pula
normalmente”)
                             }
                             else{
                                          System.out.println(“Seu cachorro pula
baixo”)
}

Orientação a objetos no Java

Programas grandes são difíceis de manter – por isso, é um bom hábito separá-los em
unidades mais ou menos isoladas. Em Java, isso é feito utilizando objetos, que são
compostos por atributos e métodos definidos a partir de classes, que por sua vez são
organizadas em pacotes. Esses conceitos são tão centrais em Java que não se pode
programar na linguagem sem utilizá-los.

Todo programa em Java usa classes e objetos, e compreender esses conceitos é


fundamental para compreender a própria linguagem. Na prática, sistemas de software
reais são grandes e precisam ser fatorados em partes relativamente independentes para
serem viáveis. Como em Java isso é feito com classes e objetos, compreendê-los é
imprescindível para escrever qualquer programa significativo.

Antigamente, os programas de computador eram escritos como uma série de instruções,


como receitas culinárias: dados os “ingredientes” (arquivos no disco, interfaces de rede,
memória, ciclos do processador etc.), uma série de passos era seguida. A semelhança
era tão notável que várias linguagens de programação exigiam que os “ingredientes” do
programa (variáveis, arquivos etc.) fossem reservados antes de se escrever o “modo de
preparo”.

Esta abordagem era ineficiente para grandes programas, com muitas de funcionalidades.
Para tentar solucionar isso, uma maneira diferente de programar foi proposta: os
softwares não seriam mais vistos apenas como instruções alterando recursos, mas sim
como vários pedaços, pequenos softwares trabalhando em conjunto para alcançar o
objetivo. Os programas não seriam mais pensados como receitas, mas sim como carros
e empresas: várias peças, relativamente independentes e fáceis de trocar, exerceriam
tarefas complicadas isoladamente, sendo coordenadas de modo que o resultado final
fosse uma máquina fácil de dirigir, ou uma organização eficiente. Assim como o
operário que põe o motor na carroceria não precisa compreender seu funcionamento
interno, e a secretária não precisa saber dos detalhes do setor de marketing, o
programador poderia se concentrar em uma parte do programa, sabendo que as outras
partes poderiam ser escritas depois, ser feitas por outros programadores ou até mesmo
compradas. O “programa como uma receita” ainda estaria nessas partes (assim como o
motor do carro segue uma série de passos, e o funcionário uma série de procedimentos),
mas essas “receitas” seriam menores, mais fáceis de entender, alterar e substituir,
podendo haver em uma só parte vários “modos de preparo”.

O primeiro método é chamado programação estruturada e ainda hoje é usado.


Entretanto, o segundo modo se tornou popular e preferido de vários programadores e
organizações. É chamado programação orientada a objetos e é desse modo que se
programa em Java.

Variáveis

Uma variável é um recurso das linguagens de programação utilizado para armazenar


valores em memória. Assim, sempre que precisarmos desse valor, basta referenciarmos
essa variável. Em Java, podemos declarar variáveis e constantes. A primeira pode ter
seu valor modificado a qualquer momento, enquanto a segunda recebe um valor e não
pode ser alterada. Na linguagem Java, declaramos uma variável informando o tipo de dados
que ela poderá receber e seu nome.

Exemplos de declaração de variáveis:

1int numero;

2String nome;

Neste código informamos que a variável numero é do tipo inteiro e, por isso, só poderá
receber valores desse tipo. O mesmo comportamento é válido para a variável nome do
tipo String.

Nota: Como a linguagem Java é fortemente tipada, a declaração do tipo é obrigatória.

O tipo de dado pode ser qualquer um dos tipos primitivos (como int, float, boolean),


assim como qualquer outra classe/interface, seja ela nativa do Java
(como String, ArrayList) ou criada por você ou por terceiros
(como Produto, ProdutoDAO).

Nomeação de variáveis

A nomeação de variáveis precisa ser feita respeitando algumas regras e convenções:

1. Pode conter letras, números e o caractere sublinhado (_), mas não pode começar
com um número;
2. Devem ser declaradas em minúsculo. Caso sejam nomes compostos, a primeira
letra de todas as palavras, menos da primeira, deve ser maiúscula (Camel Case);
3. Java é uma linguagem case sensitive. Assim, numeroUm é diferente
de numeroum.

Exemplos de declaração de variáveis:

1int nome123;

2float _salarioBase;

3String 1erro; // Erro de compilação por iniciar com caractere numérico.

Variáveis de classe

Ao declarar uma variável dentro de uma classe, antes do tipo também podemos
especificar o modificador de acesso.

Exemplo de declaração de variável:

1class Funcionario {

2  

3    private int matricula;

4    private String nome;

5  
6}

A palavra private é um modificador de acesso. Em Java, também temos as


opções public e protected.

Métodos

Quando definimos um objeto num programa orientado a objetos, implementamos todo o


comportamento desse objeto em um ou mais métodos. Um método em Java é
equivalente a uma função, subrotina ou procedimento em outras linguagens de
programação.Não existe em Java o conceito de métodos globais. Todos os métodos
devem sempre ser definidos dentro de uma classe.A sintaxe para construção de um
método é a seguinte: 

[modificador] tipo_retorno identificador ([argumentos]) {

//Corpo do método

Modificadores de Acesso

Java controla o acesso a atributos e métodos através do uso dos modificadores de


acesso. São eles : 

public : É o menos restritivo de todos. Atributos e métodos declarados como public em


uma classe podem ser acessados pelos métodos da própria classe, por classes derivadas
desta e por qualquer outra classe em qualquer outro pacote (veremos mais sobre pacotes
e classes derivadas posteriormente). 

protected : Atributos e métodos definidos como protected são acessíveis pelos métodos
da própria classe e pelas classes derivadas.

private : É o mais restritivo. Atributos e métodos declarados como private só podem ser
acessados pelos métodos da própria classe. Quando nenhum modificador é definido
(acesso do tipo “package”), os atributos e métodos podem ser acessados pelos métodos
da própria classe, pelas classes derivadas e por qualquer outra classe dentro do mesmo
pacote.  É importante destacar que esse controle não se aplica às variáveis locais aos
métodos. 

Nome de Métodos

O nome de um método deve começar com uma letra (a-z/A-Z), um underscore (_), ou
um sinal de dólar ( $ ). Os caracteres subsequentes podem incluir os dígitos de 0 a 9. 

Convenção : Use verbos para nome de métodos. Faça a primeira letra do nome
minúscula com cada letra inicial interna maiúscula.

Por exemplo :

 getUserName(),
 getMaxPrice().

Argumentos

Um método pode ter zero ou mais argumentos (ou parâmetros). Caso não tenha
argumentos, é necessário informar os parênteses vazios tanto na definição como na
chamada do método. O nome do método acrescido de seus parâmetros é
denominado assinatura do método.

Cada argumento deve ser declarado como define-se uma variável, especificando o seu
tipo e nome.

Caso seja mais de um argumento, cada declaração deve estar separada por vírgula.

 public void setAge(int newAge)

age = newAge;

}
//exemplo a

public void displayAge()

System.out.println(“Age is : ” + age);

//exemplo b

public void setUser(int newAge, String newName)

age = newAge;

name = newName;

//exemplo c

Retornando Valor a Partir de um Método

É possível associar um valor de retorno a um método. Para isso, é preciso definir, na


frente do nome do método, o tipo do valor a ser retornado. O tipo pode ser um primitivo
ou então uma classe ou interface. Caso o método não retorne valor algum, é obrigatória
a utilização do tipo void na assinatura do método. Veja os exemplos abaixo:

public int getAge () {

return age;

}
public String getName () {

return name;

O comando return é utilizado para passar o valor requerido de volta para quem chamou
o método e é obrigatório quando o tipo de retorno não é void. Ele deve receber um
único valor ou uma expressão que deve ser compatível com o tipo de retorno
especificado para o método. Quando o comando é encontrado, o método termina sua
execução imediatamente, ignorando todas as instruções subsequentes.  Um comando
return sem valor de retorno retorna o tipo void, mas não é obrigatória sua utilização
nestes casos. 

Passando Parâmetros para um Método

Passando um Primitivo : Quando um valor primitivo é passado na chamada de um


método, uma cópia deste valor é criada e atribuída para o argumento do método
responsável por recebê-la. Se o método mudar este valor, apenas o valor do argumento
local ao método é afetado. Quando o método terminar sua execução, o valor original da
variável utilizada para passar o valor primitivo na chamada do método permanecerá
inalterado.

public void incrementa (int num) {

num++;

System.out.println(“num : ” + num);

// veja agora

int num = 10;

incrementa (num); //Imprimirá 11


System.out.println(”num : ” + num); //Imprimirá 10

Passando a Referência de um Objeto : Quando o tipo passado para o método não for um
primitivo mas sim um objeto, esse comportamento muda. Quando passamos um objeto,
uma referência ao objeto original é passada ao invés de uma cópia do objeto.

A referência contém o endereço de memória onde está contido o objeto original e


qualquer modificação feita pelo método no argumento que recebeu esta referência
afetará também o objeto original.

 
O Java é mais purista em relação à orientação a objetos que Delphi, portanto não
existem “funções” perdidas, cada método esta hierarquicamente ligado a uma classe,
portanto você sempre irá acessar um método através:

 Classe.Método() ou Objeto.Método

Para os métodos estáticos não é necessário instanciar um objeto para usá-lo, já nos
outros casos, a funcionalidade do método só é possível após instanciação, que é a
criação de um objeto a partir da sua classe.

Já utilizamos métodos de classes pré-definidas como em:

Integer.parseInt()
String.charAt()

String.length(),

entre outros.Podemos criar nossos próprios métodos e já temos feito isso nos exemplos,
já que código funcional em Java sempre esta dentro de métodos. O método main que
recebe o argumento String[] args tem sido utilizado em todos os exemplos, porém
podemos dividir, modularizar mais ainda, distribuído a lógica em outros métodos.Até
aqui os exemplos têm sido pequenos, imagine algo maior, com várias tarefas agregadas,
cada um com seu escopo natural, neste contexto o uso de métodos se faz quase
imprescindível.O uso de métodos separa e organiza a lógica, além disso, tratar
problemas grandes, dividindo os mesmos em problemas menores é uma técnica bastante
efetiva.

Um método deve ser codificado dentro da classe a qual pertence, portanto estará entre
as chaves da classe. Um método em Java, tal como uma função retorna um valor, mas
alternativamente podemos dizer que ele retorna vazio (void), sendo, portanto somente
um procedimento. Vejamos a sintaxe básica para criação de um método:

<qualificadores> <tipo-de-retorno> <nome-do-método> ([lista-de-parâmetros]){

<bloco-de-comandos>

O primeiro detalhe é relativo a <qualificadores> estes podem assumir várias formas,


iremos destacar mais a frente este tópico, mas neste momento você deve conhecer:

 public static – Permite criar um método que pode ser executado por agentes
externos, inclusive independente de instanciação.
 private static  – Como o nome sugere este método só é visível dentro da própria
classe onde foi definido e poderá ser executado diretamente sem necessidade de
instanciação.

Em ambos os casos omitindo-se a palavra, static, estaremos obrigando a instanciação de


um objeto para então utilizar o método, um método estático é mais oneroso para o
sistema, porém sempre temos algum método estático que inicia o processo de execução.
Com estes dois qualificadores é possível atender a praticamente todos os casos.

O <tipo-de-retorno> é um valor ou objeto que é retornado pelo método após o


processamento interno do método, como em uma função matemática, você pode passar
parâmetros e ter um valor como resposta. Você declara o <tipo-de-retorno> como um
tipo de dados ou uma classe. O <nome-do-método> segue o padrão de nomenclatura
adotado até agora, veja que você poderá executar o método chamado-o pelo nome.
Relembrando este nome deverá ter letras minúsculas, a não ser as iniciais das segundas
componentes em diante.

A [lista-de-parâmetros] é opcional, mas muito interessante para fazer a interface entre o


exterior e a rotina que esta internalizada ao método, ao seja, pela parametrização que
você consegue criar métodos genéricos, que atendam a várias situações. As chaves
servirão para agrupar o que faz parte do método, em termos de codificação.Vejamos um
exemplo, onde iremos definir um método chamado terco, que calcula um terço do valor
que foi passado como parâmetro, veja que continuamos a definir main e é por onde tudo
se inicia.

UmTerco.java

public class UmTerco{

public static void main(String[] args){

double num;

for (num=1; num<10; num++){

System.out.println ("Um terço de " + num + " é " + terco(num));

System.out.println ("*** FIM ***");

// método auxiliar terco (calcula um terço de um parametro double)


private static double terco (double n){

return n/3;

Encapsulamento

Encapsulamento vem de encapsular, que em programação orientada a objetos significa


separar o programa em partes, o mais isolado possível. A idéia é tornar o software mais
flexível, fácil de modificar e de criar novas implementações. O Encapsulamento serve
para controlar o acesso aos atributos e métodos de uma classe. É uma forma eficiente de
proteger os dados manipulados dentro da classe, além de determinar onde esta classe
poderá ser manipulada. Usamos o nível de acesso mais restritivo, private, que faça
sentido para um membro particular. Sempre usamos private, a menos que tenhamos um
bom motivo para deixá-lo com outro nível de acesso. Não devemos permitir o acesso
público aos membros, exceto em caso de ser constantes. Isso porque membros públicos
tendem a nos ligar a uma implementação em particular e limita a nossa flexibilidade em
mudar o código. O encapsulamento que é dividido em dois níveis:

 Nível de classe: Quando determinamos o acesso de uma classe inteira que pode
ser public ou Package-Private (padrão);
 Nível de membro: Quando determinamos o acesso de atributos ou métodos de
uma classe que podem ser public, private, protected ou Package-Private
(padrão).

Então para ter um método encapsulado utilizamos um modificador de acesso que


geralmente é public, além do tipo de retorno dele. Para se ter acesso a algum atributo ou
método que esteja encapsulado utiliza-se o conceito de get e set. Por definição, com
SET é feita uma atribuição a algum atributo, ou seja, define, diz o valor que algum
atributo deve ter. E  com GET é possível recuperar esse valor. 

Exemplo:
1private String atributo1 = new String();  

2private String atributo2 = new String();  

3public String getAtributo1(){  

4  return this.atributo1;  

5}  

6public String getAtributo2(){  

7  return this.atributo2;  

8} 

A herança é um mecanismo da Orientação a Objeto que permite criar novas classes a


partir de classes já existentes, aproveitando-se das características existentes na classe a
ser estendida. Este mecanismo é muito interessante, pois promove um grande reuso e
reaproveitamento de código existente.  Com a herança é possível criar classes derivadas,
subclasses, a partir de classes bases, superclasses. As subclasses são mais especializadas
do que as suas superclasses, mais genéricas. As subclasses herdam todas as
características de suas superclasses, como suas variáveis e métodos. A linguagem Java
permite o uso de herança simples, mas não permite a implementação de herança
múltipla. Para superar essa limitação o Java faz uso de interfaces, o qual pode ser visto
como uma “promessa”que certos métodos com características previamente estabelecidas
serão implementados, usando inclusive a palavra reservada implements para garantir
esta implementação. As interfaces possuem sintaxe similar as classes, no entanto
apresentam apenas a especificação das funcionalidades que uma classe deve conter, sem
determinar como essa funcionalidade deve ser implementada. Apresentam apenas
protótipos dos métodos.

Por exemplo, Imagine que dentro de uma organização empresarial, o sistema de RH


tenha que trabalhar com os diferentes níveis hierárquicos da empresa, desde o
funcionário de baixo escalão até o seu presidente. Todos são funcionários da empresa,
porém cada um com um cargo diferente. Mesmo a secretária, o pessoal da limpeza, o
diretor e o presidente possuem um número de identificação, além de salário e outras
características em comum. Essas características em comum podem ser reunidas em um
tipo de classe em comum, e cada nível da hierarquia ser tratado como um novo tipo,
mas aproveitando-se dos tipos já criados, através da herança. Os subtipos, além de
herdarem todas as características de seus supertipos, também podem adicionar
mais características, seja na forma de variáveis e/ou métodos adicionais, bem como
reescrever métodos já existentes na superclasse, polimorfismo. A herança permite
vários níveis na hierarquia de classes, podendo criar tantos subtipos quanto necessário,
até se chegar ao nível de especialização desejado. Podemos tratar subtipos como se
fossem seus supertipos, por exemplo, o sistema de RH pode tratar uma instância de
Presidente como se fosse um objeto do tipo Funcionário, em determinada
funcionalidade. Porém não é possível tratar um supertipo como se fosse um subtipo, a
não ser que o objeto em questão seja realmente do subtipo desejado e a linguagem
suporte este tipo de tratamento, seja por meio de conversão de tipos ou outro
mecanismo. Algumas linguagens de programação permitem herança múltipla, ou seja,
uma classe pode estender características de várias classes ao mesmo tempo. É o caso do
C++. Outras linguagens não permitem herança múltipla, por se tratar de algo perigo se
não usada corretamente. É o caso do Java. Na Orientação a Objetos as palavras classe
base, supertipo, superclasse, classe pai e classe mãe são sinônimos, bem como as
palavras classe derivada, subtipo, subclasse e classe filha também são sinônimos.

O que um aluno, um professor e um funcionário possuem em comum? Todos eles são


pessoas e, portanto, compartilham alguns dados comuns. Todos têm nome, idade,
endereço, etc. E, o que diferencia um aluno de outra pessoa qualquer? Um aluno possui
uma matrícula; Um funcionário possui um código de funcionário, data de admissão,
salário, etc.; Um professor possui um código de professor e informações relacionadas à
sua formação. 

É aqui que a herança se torna uma ferramenta de grande utilidade. Podemos criar uma
classe Pessoa, que possui todos os atributos e métodos comuns a todas as pessoas e
herdar estes atributos e métodos em classes mais específicas, ou seja, a herança parte do
geral para o mais específico. Comece criando uma classe Pessoa, Pessoa.java, como
mostrado no código a seguir:

1public class Pessoa{


2  public String nome;   
3  public int idade;
4}
Esta classe possui os atributos nome e idade. Estes atributos são comuns a todas as
pessoas. Veja agora como podemos criar uma classe Aluno que herda estes atributos da
classe Pessoa e inclui seu próprio atributo, a saber, seu número de matrícula. Eis o
código: 

1public class Aluno extends Pessoa{


2public String matricula;
3}

Observe que, em Java, a palavra-chave usada para indicar herança é extends. A classe
Aluno agora possui três atributos: nome, idade e matricula. Exemplo: 

1
2
public class Estudos{
3
  public static void main(String args[]){
4
    Aluno aluno = new Aluno();
5
    aluno.nome = "Aluno Esforçado";
6
    aluno.idade = 20;
7
    aluno.matricula = "XXXX99999";
8
     
9
    System.out.println("Nome: " + aluno.nome + "\n" +
1
    "Idade: " + aluno.idade + "\n" +
0
    "Matrícula: " + aluno.matricula);
1
  }
1
}
1
2

A herança nos fornece um grande benefício. Ao concentrarmos características comuns


em uma classe e derivar as classes mais específicas a partir desta, nós estamos
preparados para a adição de novas funcionalidades ao sistema. Se mais adiante uma
nova propriedade comum tiver que ser adicionada, não precisaremos efetuar alterações
em todas as classes. Basta alterar a superclasse e pronto. As classes derivadas serão
automaticamente atualizadas.

Etapa 1: criação/edição de um programa Java


Nesta primeira fase se dá a criação ou edição de arquivos em um programa editor, onde
são inseridos os códigos pelo programador, os quais são posteriormente salvos em uma
unidade física de armazenamento como um programa de extensão “.java”.

Figura 1: O programa é criado no editor salvo com a terminação .java.

Para criarmos uma aplicação em Java, é necessário que utilizemos um programa de


edição conhecido como ambiente de desenvolvimento integrado, ou IDE (do inglês
Integrated Development Enviroment) . As IDE´s fornecem ferramentas que suportam o
processo de desenvolvimento do software, incluindo editores para escrever e editar
programas, e depuradores para localizar erros de lógica e sintaxe.

Etapa 2: compilação do programa Java em bytecodes

Supondo que em um exemplo geramos um arquivo chamado “Ola.java”, na hora da


compilação, o compilador produz um arquivo “.class” chamado “Ola.class” onde
contém a versão compilada. O compilador Java converte o código-fonte em bytecodes
que representam tarefas a serem executadas na fase de execução, melhor detalhada na
Etapa 5.

Figura 2: O compilador cria bytecodes que são armazenados com a extensão .class.

Os bytecodes são executados pela Java Virtual Machine (JVM) - uma parte do JDK e a
base da plataforma Java. A Máquina Virtual (Virtual Machine - VM) é um aplicativo
software que simula um computador, mas oculta o sistema operacional e o hardware
subjacente dos programas que interagem com ela, o que garante a possibilidade de
execução de programas Java em vários sistemas operacionais distintos.

Características dos bytecodes

 Independentes de plataforma
 Portáveis

Etapa 3: carregando um programa na memória

A JVM armazena o programa na memória para executá-lo, efetuando o carregamento. O


carregador de classe da JVM pega os arquivos “.class” que contêm os bytecodes do
programa e os transfere para a memória primária.

Figura 3: O carregador da classe lê os bytecodes e os aloca na memória

Etapa 4: Verificação de bytecode

Enquanto as classes são carregadas, o verificador examina seus bytecodes para


assegurar que são válidos e não violam restrições de segurança do Java.
Figura 4: Verificação da integridade dos bytecodes

Etapa 5: Execução

As JVMs executam bytecodes utilizando uma combinação de interpretação chamada


compilação JIT (Just In Time) - conhecido como compilador Java HotSpot.

Figura 5: A JVM faz a leitura dos bytecodes e compila para uma linguagem de
computador

O Java HotSpot traduz os bytecodes para a linguagem de máquina, quando a JVM


encontra novamente essas partes compiladas, o código de linguagem de máquina é
executado mais rápido. Uma explicação mais detalhada é que o programa Java passa por
duas fases de compilação que são:

 Quando o código-fonte é traduzido em bytecodes que acaba tendo uma


portabilidade entre JVMs em diferentes plataformas do computador
 E a outra é durante a execução, os bytecodes são traduzidos em linguagem de
máquina para o computador real em que o programa é executado.

A partir das informações aqui expostas, podemos entender como se dá o processo de


desenvolvimento de um programa em Java, desde o tempo de design até sua execução.

Instalação

Para instalar o JDK no Linux ou no Windows primeiramente é necessário efetuar o


download do arquivo de instalação. Para isso deve-se acessar o site da Oracle (vide
seção Links) e baixar versão do JDK correspondente ao sistema operacional e
arquitetura (32 ou 64 bits) utilizada. Após o download do arquivo de instalação ter sido
concluído, a instalação do JDK é feita executando-se o programa de instalação. O nome
do arquivo de instalação para o Windows tem o formato jdk-<versão>-windows-
<arquitetura>.exe, onde <versão> é a versão do JDK e arquitetura pode ser 32 ou 64
bits, por exemplo, jdk-8u66-windows-x64.exe. No sistema operacional Linux o formato
do nome é jdk-<versão>-linux-<arquitetura>.tar.gz, por exemplo, jdk-8u66-linux-
x64.tar.gz. Para instalar o JDK no Windows, executar o programa de instalação e clicar
no botão Next em todas as telas apresentadas. O processo é simples e rápido. Para
instalar o JDK no Linux executar os comandos da Listagem 1.

Listagem 1. Instalação do JDK no Linux

2 - Estando no modo gráfico, abrir um Terminal

3     

4   - Copiar o arquivo de instalação para o diretório de sua preferência com o comando

5 abaixo

6     

7     $ cp jdk-<versão>.tar.gz <caminho-completo-do-seu-diretório>

8     

9   - Mudar para o diretório de sua preferência

1     
0     $ cd /<caminho-completo-do-seu-diretório>

1     
1
  - Descompactar o arquivo
1
    
2
    $ tar -zvxf jdk-<versão>.tar.gz
1
3
Outra maneira de instalar o JDK no Linux é usando o programa apt-get presente nas
distribuições Linux. O apt-get é um programa que permite a instalação e a atualização
de pacotes (programas e bibliotecas) de maneira simples e fácil. A Listagem 2 mostra
como instalar o JDK usando o apt-get.

Listagem 2. Instalação do JDK no Linux usando apt-get

1- Estando no modo gráfico, abrir um Terminal e digitar os comandos abaixo

2    

3    $ sudo add-apt-repository ppa:webupd8team/java

4    $ sudo apt-get update

5    $ sudo apt-get install oracle-java8-installer

O comando add-apt-repository adiciona o local ppa:webupd8team/java no repositório


do apt-get. Em seguida o repositório é atualizado com o comando apt-get update. O
comando apt-get install irá instalar o pacote JDK 8 da Oracle.
Bibliografia

http://www.cin.ufpe.br/~if101/turmaatual/aulas/aula3/objetos.html
http://www.devmedia.com.br/introducao-a-programacao-orientada-a-objetos-em-
java/26452
http://www.caelum.com.br/apostila-java-orientacao-objetos/orientacao-a-objetos-
basica/#4-3-uma-classe-em-java
http://www.ic.unicamp.br/~cmrubira/aacesta/java/javatut9.html
https://www.devmedia.com.br/
Livro: Livro4_alta.pdf

Вам также может понравиться