0% acharam este documento útil (0 voto)
12 visualizações42 páginas

Elementos Essenciais da Linguagem Java

O documento aborda os elementos da linguagem Java, incluindo especialização, construtores, e conceitos como classes abstratas e métodos abstratos. Destaca a importância dos construtores para a inicialização de objetos e as regras de herança, além de mencionar práticas recomendadas como o padrão Java Beans. Também discute o polimorfismo e a resolução de colisões de nomes em importações.
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
12 visualizações42 páginas

Elementos Essenciais da Linguagem Java

O documento aborda os elementos da linguagem Java, incluindo especialização, construtores, e conceitos como classes abstratas e métodos abstratos. Destaca a importância dos construtores para a inicialização de objetos e as regras de herança, além de mencionar práticas recomendadas como o padrão Java Beans. Também discute o polimorfismo e a resolução de colisões de nomes em importações.
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd

Elementos da Linguagem Java - Alessandro Cerqueira - 03/11/2025

Outros Elementos da Linguagem

Assuntos
Especialização
Construtores
1 Java Beans
Créditos
Autor
Prof. Alessandro Cerqueira
([Link]@[Link])
Elementos da Linguagem Java - Alessandro Cerqueira - 03/11/2025
3

Especialização
• Utilizamos palavra reservada extends para indicar que
uma classe é especialização de outra.
• Em Java não há herança múltipla; ou seja, uma classe
Elementos da Linguagem Java - Alessandro Cerqueira - 03/11/2025

só pode ser especialização direta de uma única classe.


• Toda classe em Java é especialização direta ou indireta
da classe [Link].
– Se não indicarmos que uma classe é uma especialização, o
compilador irá torná-la automaticamente uma
especialização da classe Object.
Exemplo de Especialização
4

Classe Pessoa
package dominio;

public class Pessoa //extends Object (acrescentado pelo compilador)


{
Elementos da Linguagem Java - Alessandro Cerqueira - 03/11/2025

private String cpf;


private String nome;

public Pessoa(String cpf, String nome) {


// super(); (acrescentado pelo compilador)
[Link] = cpf;
[Link] = nome;
}

public String getCpf() {


return [Link];
}

public String getNome() {


return [Link];
}
}
Exemplo de Especialização
5

Classe Aluno
Object
package dominio;

public class Aluno extends Pessoa {


private String matr;
Elementos da Linguagem Java - Alessandro Cerqueira - 03/11/2025

public Aluno(String cpf, String nome, String matr) {


super(cpf, nome); // chamada ao
// construtor de Pessoa
Pessoa
[Link] = matr; cpf
} nome
Pessoa(String, String)
public String getMatr() { getCpf()
return [Link]; getNome()
}
}
Aluno
matr
Aluno(String, String, String)
getMatr()
6
Construtores
• Sabemos que o método construtor é um método que promoverá a
inicialização de um objeto assim que for criado.
• Para ser um construtor, o nome do método deverá ser exatamente igual ao da
classe e não deve apresentar indicação de tipo de retorno.

public class A { public class A { public class A {


Elementos da Linguagem Java - Alessandro Cerqueira - 03/11/2025

public A() public a() //erro public void A()


{ { {
super(); } }
} } }
}
Este é um construtor inválido Este é um construtor inválido
Este é um construtor pois o nome não exatamente pois há a indicação de tipo de
válido! igual ao nome da classe. Neste retorno (void). Mas, neste
caso o compilador dará erro! caso o compilador não dará
erro pois ele permitirá a
existência do método A,
porém este não é um
construtor!
7

Construtores
• Estratégia de Programação: Toda vez que formos
codificar uma classe devemos escrever um ou mais
construtores.
Elementos da Linguagem Java - Alessandro Cerqueira - 03/11/2025

– A estratégia a ser adotada é verificar para cada atributo da


classe quais devem ser inicializados no momento de sua
instanciação.
– Todos os atributos que precisarem ser inicializados (com
padrões diferentes do proposto pela inicialização default)
deverão ser manipulados no construtor.
– Na maioria das vezes, os valores que utilizaremos para a
inicialização precisam ser recebidos através de parâmetros no
construtor.
8

Construtores
• Regra: Quando estabelecermos uma especialização, todos
construtores das subclasses sempre deverão chamar um
construtor de sua superclasse na primeira linha de código.
Elementos da Linguagem Java - Alessandro Cerqueira - 03/11/2025

– A chamada a um construtor de uma superclasse se dá através da


instrução super(...);

• Se não especificarmos no código do construtor a chamada


do construtor da superclasse, o compilador colocará
automaticamente a chamada super();
– Se a superclasse não tiver um construtor com a assinatura vazia, o
compilador acusará erro.
9

Super
• Se um método for redefinido em uma subclasse, mas desejarmos
chamar na subclasse a implementação presente em sua superclasse,
utilizamos a instrução:
super.<nome do método>(...)
Elementos da Linguagem Java - Alessandro Cerqueira - 03/11/2025

• Exemplo:
– Considere que adicionamos na classe Pessoa o método toString com a
seguinte implementação:
@Override
public String toString() {
return [Link] + [Link]();
}
– Veja as considerações abaixo:
[Link](); // Chama a implementação de Pessoa
[Link](); // Chama a implementação de Object
10

Construtores
• Se não colocarmos pelo menos um construtor na
classe, o compilador colocará um construtor default.
– A assinatura do construtor default é vazia.
Elementos da Linguagem Java - Alessandro Cerqueira - 03/11/2025

– O construtor default apresenta um código que só terá a


chamada “super();”.
– OBS: Se colocarmos algum construtor na classe, o
compilador não irá colocar o construtor default.
• Regra Semântica: Se um método for chamado em um
construtor, este deverá ser declarado como final.
11

Construtores - Exemplo
Código Original Código Processado pelo Compilador
public class A public class A extends Object {
{ public A() {
} super();
Elementos da Linguagem Java - Alessandro Cerqueira - 03/11/2025

}
}
public class B extends A { public class B extends A {
public B(int x) { public B(int x) {
} super();
}
}
}
public class C extends B public class C extends B {
{ public C() {
} super(); // Erro!!!
}
OBS: Todo texto que não foi }
escrito em verde corresponde
a coisas que foram acrescentadas // Teremos um erro neste caso pois a classe
pelo compilador. // B não tem um construtor com assinatura
// vazia
Construtores - Exemplo
12

• Considere a classe Disciplina (código, nome e numCréditos).


• Não faz sentido termos um objeto desta classe sem a determinação
imediata de seu código, nome e numCréditos. Assim estes deverão ser
manipulados pelo construtor e os valores destes deverão ser informados
através do envio de parâmetros.
Elementos da Linguagem Java - Alessandro Cerqueira - 03/11/2025

package model;

public class Disciplina {


private String código;
private String nome;
private int numCréditos;

public Disciplina(String código, String nome, int numCréditos)


throws ModelException {
[Link]ódigo(código);
[Link](nome);
[Link]éditos(numCréditos);
}

public final void setCódigo(String código) throws ModelException {


[Link](código);
this.código = código;
}
...
13

Construtores - Exemplo
public final String getCódigo() {
return this.código;
}

public final void setNome(String nome) throws ModelException {


Disciplina
[Link] = nome;
}
Elementos da Linguagem Java - Alessandro Cerqueira - 03/11/2025

public final String getNome() {


return [Link];
}

public final void setNumCréditos(int numCréditos) throws ModelException {


if(numCréditos > 0)
[Link]éditos = numCréditos;
else
[Link]éditos = 4;
}

public final int getNumCréditos() {


return [Link]éditos;
}
...
}

OBS: Repare que para instanciar um objeto Disciplina é necessário repassar para o new os parâmetros código,
nome e numCréditos.

new Disciplina(“EIN226”, “Sistemas Distribuídos I”, 4);


14

Construtores
• Quando houver sobrecarga de construtores e desejarmos evitar que
dois ou mais construtores tenham que repetir um trecho de código,
podemos utilizar a instrução this( ... ) para chamar um construtor a
partir de outro.
Elementos da Linguagem Java - Alessandro Cerqueira - 03/11/2025

• Exemplo:
public Disciplina(String código, String nome, int numCréditos)
{
[Link]ódigo(código);
[Link](nome);
[Link]éditos(numCréditos);
}

public Disciplina(String código, String nome)


{
this(código, nome, 4); // Se não passarmos o númCréditos,
// inicializaremos com o 4.
}
15

Método finalize()
• Método presente na classe Object e que pode ser
redefinido nas classes.
• Teoricamente, este método é chamado sempre
Elementos da Linguagem Java - Alessandro Cerqueira - 03/11/2025

que um objeto for finalizado (recolhido pelo


Garbage Collection)
• Não contar com a execução deste método!
16

Classe Abstrata
• Para indicarmos que uma classe é abstrata, utilizamos o
modificador abstract.
– A determinação se uma classe é ou não abstrata depende do
domínio.
Elementos da Linguagem Java - Alessandro Cerqueira - 03/11/2025

package model;

abstract public class Pessoa {


private String cpf;
private String nome;

public Pessoa(String cpf, String nome) {


[Link] = cpf;
[Link] = nome;
}
public String getCpf() {
return [Link];
}
public String getNome() {
return [Link];
}
}
17

Método Abstrato
• Método que colocamos na interface da classe mas que não
apresenta implementação
– Provavelmente não conseguimos colocar a codificação pois não conseguimos
definir um código que valha para a classe e para as suas especializações.
Elementos da Linguagem Java - Alessandro Cerqueira - 03/11/2025

• Exemplo:
package model;

abstract public class Veiculo {


private String combustível; ...
abstract public void parar();
abstract public void acelerar();
}

• Se uma classe apresenta um ou mais métodos abstratos, ela deve ser


declarada explicitamente como abstrata.
• As especializações deverão implementar o método abstrato. Senão o
compilador dará erro (a não ser que a especialização também seja
declarada como abstrata).
18

Bloco static
• O bloco static é executado sempre que uma classe for carregada
pelo Class Loader.
• Só poderá manipular com atributos e métodos estáticos:
Elementos da Linguagem Java - Alessandro Cerqueira - 03/11/2025

package dominio;

public class Aluno


{
private static int numTotalAlunos;
private static Aluno[] listaAlunos;
...
static
{
[Link] = 0;
[Link] = new Aluno[100];
}

public Aluno()
{
[Link][[Link]++] = this;
...
}
...
}
19

Late Binding
• Para termos polimorfismo, é necessário que a linguagem
ofereça Late Binding.
– Verificação realizada em tempo de execução para se descobrir o
método a ser executado.
Elementos da Linguagem Java - Alessandro Cerqueira - 03/11/2025

• Ex: Sabendo que a classe Object tem o método toString() e supondo


que a classe Pessoa tenha feito uma redefinição do método,
considere o trecho abaixo:
Object ptr = new Pessoa();
[Link]();
– Qual Implementação do método toString() será executada? A de
Object ou a de Pessoa?
• A de Pessoa!!! A resolução se dá em tempo de execução.
– Se a verificação fosse em tempo de compilação, seria Early
Binding (como ocorre em C).
20

Colisões
• Se com as várias cláusulas import tivermos duas ou mais
classes com o mesmo nome, é necessário colocar a sua
descrição (com pacote) completa.
Elementos da Linguagem Java - Alessandro Cerqueira - 03/11/2025

• Ex:
import [Link]; // Date do pacote [Link]
import [Link]; // Date do pacote [Link]
...
Date umaData; // Erro! Qual Date queremos?
[Link] novaData; // Ok! Escrevemos de forma
// completa pois há colisão
// de nomes de classe no import
21
Atribuições na
Declaração de Atributos
• Ao declararmos um atributo em uma classe, podemos
fazer a atribuição de um valor de inicialização para ele.
– Estas atribuições são executadas imediatamente antes da
Elementos da Linguagem Java - Alessandro Cerqueira - 03/11/2025

execução do método construtor.


private int voltagem = 110;
– A atribuição pode utilizar o new ou métodos estáticos.
private Button btSair = new Button(“Sair”);
private JanelaPrincipal janelaPai =
[Link]();
– É útil quando tivermos vários construtores para evitar de
reescrevermos a mesma inicialização nestes métodos
22
Atribuições na
Declaração de Atributos
public class CelularPrePago {
private String numTel;
private int numMinutosDisponíveis = 5; //atributo com inicialização!
private double precoMinuto = 1.0; //atributo com inicialização!
Elementos da Linguagem Java - Alessandro Cerqueira - 03/11/2025

public CelularPrePago(String numTel){


[Link] = numTel; // Antes de executar esta linha teremos:
// [Link]íveis = 5 e
// [Link] = 1.0;
}
public CelularPrePago(String numTel, double precoMinuto) {
this(numTel); // Antes de executar esta linha também teremos:
// [Link]íveis = 5 e
// [Link] = 1.0;
[Link] = precoMinuto; // Neste ponto, redefinimos o
// valor do preco por minuto
}
...
}
23

Padrão Java Beans ou POJO


• Conjunto de convenções para a codificação de uma classe.
– POJO  Plain Old Java Object
• Construtor
– Um JavaBean deve implementar pelo menos um construtor sem
argumentos, como a seguir:
Elementos da Linguagem Java - Alessandro Cerqueira - 03/11/2025

public Pessoa() {
// código opcional de inicialização
}
• Propriedades
– Propriedades são definidas por atributos e métodos get/set. Na maioria dos casos,
declara-se os atributos como private e os métodos get e set como public; por
exemplo:
private String nome;
public String getNome(){
return [Link];
}
public void setNome(String nome) {
[Link] = nome;
}
24

Padrão Java Beans


– Em casos especiais, como na criação de frameworks, pode-
se declarar os atributos como protected para que fiquem
acessíveis diretamente em subclasses.
• Propriedades Booleanas
Elementos da Linguagem Java - Alessandro Cerqueira - 03/11/2025

Para propriedades do tipo boolean, segue-se a convenção de substituir o


prefixo "get" por "is":
private boolean inscrito;
public boolean isInscrito() {
return [Link];
}
25

Visibilidade
• Para cada propriedade da classe (atributo, método ou classe
interna) associamos um tipo de visibilidade. Os modificadores de
visibilidade indicam o nível de acesso ao método ou atributo.
– Private: a propriedade só pode ser utilizada dentro do escopo da classe
onde foi declarada.
Elementos da Linguagem Java - Alessandro Cerqueira - 03/11/2025

– Sem modificador: a propriedade só pode ser utilizada nas classes do


mesmo pacote (visibilidade package).
– Protected: a propriedade só pode ser utilizada nas classes do mesmo
pacote e em suas subclasses
– Public: a propriedade pode ser utilizada em qualquer classe.

• A visibilidade é resolvida por classe e em tempo de compilação.


• Para que possamos implementar o encapsulamento conforme é
proposto pelo modelo OO, os atributos devem ser declarados
como private ou protected e seus métodos devem ser
declarados como public.
26

Visibilidade
• Na declaração da classe podemos associar um aspecto
de visibilidade que pode ser public ou “package” (não
podemos utilizar protected nem private, a não ser que
sejam classes internas). public indica que a classe
Elementos da Linguagem Java - Alessandro Cerqueira - 03/11/2025

pode ser conhecida por qualquer outra classe; já a


visibilidade “package” indica que a classe só é conhecida
pelas classes do mesmo pacote.
• Exemplo:
public class ClasseVisibilidadePublica { class ClasseVisibilidadePackage {
... ...
} }
27

Visibilidade
• Como os atributos devem ser privados, é necessária a
implementação de métodos que permitam o acesso
de leitura e escrita a estes métodos.
Elementos da Linguagem Java - Alessandro Cerqueira - 03/11/2025

– No padrão JavaBeans são implementados os métodos get e


set.

• Estes métodos são exemplos de Métodos Implícitos,


uma vez que não devem aparecer na especificação de
requisitos da classe. Os construtores também são
exemplos de métodos implícitos.
28

Exemplo de Visibilidade
pacoteUm
A
private int x
protected int y
Elementos da Linguagem Java - Alessandro Cerqueira - 03/11/2025

(package) int z
public A()
public int getX()
C
public void setX(int)
public A criaObjetoA()

B
public B()

pacoteDois

D
public D()
29

Exemplo de Visibilidade
package pacoteUm;
public class A {
// A visibilidade de x é private, o que indica que o
// atributo x só pode ser manipulado no código dentro
// do escopo da classe A.
Elementos da Linguagem Java - Alessandro Cerqueira - 03/11/2025

private int x;
// A visibilidade de y é protected, o que indica que
// o atributo y pode ser manipulado no código dentro do
// escopo da classe A, dentro do escopo de suas especializações
// e dentro do escopo das classes de seu pacote (pacoteUm)
protected int y;
// A visibilidade de z é package, o que indica que o
// atributo z pode ser manipulado no código dentro do escopo
// da classe A e dentro do escopo das classes de seu
// pacote (pacoteUm)
int z;
(continua...)
30

Exemplo de Visibilidade
(continuação da classe A)
public A() {
this.x = 10;
this.y = 20;
this.z = 30;
}
Elementos da Linguagem Java - Alessandro Cerqueira - 03/11/2025

// A visibilidade de getX é public, o que indica que o


// método getX pode ser disparado no escopo de toda
// e qualquer classe
public int getX() {
return this.x;
}
// A visibilidade de setX é public, o que indica que
// o método setX pode ser disparado no escopo de toda
// e qualquer classe
public void setX(int x) {
this.x = x;
}
}
31

Exemplo de Visibilidade
package pacoteUm;
public class B extends A {
public B() {
// Não posso fazer pois a visibilidade de x foi declarada
Elementos da Linguagem Java - Alessandro Cerqueira - 03/11/2025

// private na classe A. Assim, o atributo x só pode ser


// manipulado no código no escopo da classe A
// this.x = 40;
// Posso enviar a mensagem setX pois o método setX foi declarado
// na classe A como public.
[Link](40);
// Posso manipular com o atributo y pois este foi declarado na
// classe A como protected.
this.y = 10;
// Posso manipular o atributo z pois este foi declarado na classe
// A como package e a classe B pertence ao mesmo pacote de A.
this.z = 30;
}
}
32

Exemplo de Visibilidade
package pacoteUm;
public class C {
public A criaObjetoA() {
A ptrA = new A();
Elementos da Linguagem Java - Alessandro Cerqueira - 03/11/2025

// Não posso fazer pois o atributo x na classe A foi declarado


// como private
// ptrA.x = 100;
// Posso fazer pois setX foi declarado na classe A como public
[Link](100);
// Posso fazer pois o atributo y foi declarado na classe A como
// protected e a classe C pertence ao mesmo pacote que a classe A.
ptrA.y = 200;
// Posso fazer pois o atributo z foi declarado na classe A com a
// visibilidade package e a classe C pertence ao mesmo pacote que
// a classe A.
ptrA.z = 300;
return ptrA;
}
}
33

Exemplo de Visibilidade
package pacoteDois;
import pacoteUm.*;
public class D extends A {
public D() {
Elementos da Linguagem Java - Alessandro Cerqueira - 03/11/2025

// Não posso pois x na classe A é private


// this.x = 10;
// Posso pois y na classe A é protected. Como D é especialização
// de A esta manipulação é possível
this.y = 20;
// Não posso pois z na classe A é package e, apesar de ser
// especialização de A, D não pertence ao mesmo pacote que A
// this.z = 30;
}
}
34

Classes Internas
• Classe que é declarada dentro do escopo de outra classe.
• Assim, dentro do escopo de uma classe podemos ter atributos, métodos e/ou
classes internas.
• Geralmente utilizamos uma classe interna quando criar uma pequena classe que
(a princípio) só precisa ser utilizada no código de outra.
Elementos da Linguagem Java - Alessandro Cerqueira - 03/11/2025

public class Pessoa {


private String nome;
private Endereço residência;

class Endereço {
private String rua;
private String número;
private String complemento;
...
}
...
}
A classe Endereço foi declarada dentro do escopo da classe Pessoa.
35

Classe Interna
• Apesar da classe Endereço ter sido declarada
dentro da classe Pessoa, outras classes podem
utilizá-la. Neste caso, as declarações deverão
Elementos da Linguagem Java - Alessandro Cerqueira - 03/11/2025

utilizar a forma “[Link]ço”


Ex:
[Link]ço endereçoNovo;
36

Classe Interna Anônima


• É quando eu instancio um objeto e juntamente faço uma
redefinição de um ou mais métodos da classe.
• Funciona como sendo “uma especialização para um único
Elementos da Linguagem Java - Alessandro Cerqueira - 03/11/2025

objeto onde é feita a redefinição de métodos”


• A vantagem é que não é necessário ter que criar
explicitamente uma classe interna
37

Classe Interna Anônima


...
[Link](
new ActionListener() {
public void actionPerformed(ActionEvent evt) {
Elementos da Linguagem Java - Alessandro Cerqueira - 03/11/2025

[Link](0);
}
}
);
...
• O que é isto????
– Indico quem é o ActionListener do botão cancelar
– Instancio um objeto de ActionListener. Apesar de ser uma interface, isto é
permitido pois juntamente com a instanciação, estamos implementando o
método actionPerformed.
– Na prática, o compilador cria com esta declaração uma classe interna “sem
nome” (o nome é dado automaticamente). A geração do bytecode é semelhante
ao caso da classe Interna com nome.
38

Classe Interna Anônima


• Exemplo 1) Criando explicitamente a Classe Interna
Elementos da Linguagem Java - Alessandro Cerqueira - 03/11/2025
39

Classe Interna Anônima


• Exemplo 2) Usando a estratégia da Classe Interna
Anônima
Elementos da Linguagem Java - Alessandro Cerqueira - 03/11/2025
Classe Interna Anônima
40

• Exemplo 3) Classe Interna Anônima declarada


usando uma Expressão Lambda
Elementos da Linguagem Java - Alessandro Cerqueira - 03/11/2025

• Não precisamos usar o operador new, pois o compilador ao observar o


operador -> sabe que é para gerar um novo objeto.
• O compilador sabe que é para gerar uma classe interna anônima que é
implementação da interface indicada como parâmetro do método.
• O compilador sabe qual é o método a ser implementado pois a interface só
tem um único método (para usarmos a expressão lambda a interface só
pode ter a indicação de um único método a ser codificado).
41

Classe [Link]
• Um objeto da classe Class descreve os metadados de uma
classe
– Metadados: Dados que descrevem aspectos sobre dados
• Ex: Dados que descrevem como os dados estão estruturados.
Dados que descrevem quando e quem manipulou os dados
Elementos da Linguagem Java - Alessandro Cerqueira - 03/11/2025

• Há três formas de obtermos o objeto Class que descreve


uma classe.
– Enviando para um objeto da classe a mensagem getClass()
Pessoa p = new Pessoa(“123456789-01”,”José da Silva”, 28);
Class objClass = [Link]()
– Escrevendo explicitamente o nome da classe seguido de .class
Class objClass = [Link];
– Passando o nome da classe no uso do método estático forName
Class objClass = [Link](“[Link]”);

• OBSERVAÇÃO: O método forName além de retornar o objeto Class,


faz a carga do bytecode da classe, caso a Máquina Virtual Java não
tenha feito isto.
42

Classe [Link]
• A partir de um objeto da classe Class podemos saber quais são os
atributos e métodos presentes em uma classe, recuperando os
objetos Method e Field associados à classe.
Method[] métodos = [Link]();
Elementos da Linguagem Java - Alessandro Cerqueira - 03/11/2025

for(Method m : métodos)
[Link]([Link]());

Field[] atributos = [Link]();


for(Field f : atributos)
[Link]([Link]());

• Estas e outras classes formam o recurso de Reflection


presente em Java. São muito importantes para a
construção de Frameworks e para utilizarmos as
estratégias de injeção de dependência e inversão de
controle (temas futuros).

Você também pode gostar