Linguagem Java - POO
1 Formador João Fragoso
Programação Orientada a Objetos
A POO foi criada para tentar aproximar o mundo real do
mundo virtual: a ideia fundamental é tentar simular o mundo
real na programação recorrendo a objetos. O programador é
responsável por moldar o mundo dos objetos e como devem
interagir entre si.
Permite também um código de mais fácil interpretação e
reutilizável.
2 Formador João Fragoso
Conceitos
Classe: Define um conjunto de
características que são comuns a
uma série de objetos.
Objeto: Concretização de uma
determinada classe. Diz-se que
os objetos são instâncias da
classe.
As classes são, portanto,
representações abstratas de
objetos.
3 Formador João Fragoso
Conceitos
Atributos: Características que distinguem um objeto do
objeto vizinho.
Exemplo de atributos da classe veículo: nº de rodas, nº de série,
cor, marca, etc
Métodos: Comportamento do objeto. Forma pela qual um
objeto atua sobre outros objetos ou sobre si próprio.
Exemplo de métodos da classe veículo: ligar o motor, acelerar,
travar, etc
4 Formador João Fragoso
Conceitos
Classe Atributos Métodos
Pessoa nome, idade, género Falar(), andar()
Carro matrícula, marca Acelerar(), travar()
Cão nome, raça Latir(), correr()
5 Formador João Fragoso
Classes
Criação de Classes:
As classes constituem modelos para os objetos que depois serão
criados no seu seio.
classe Nome_Classe
{
Código
}
6 Formador João Fragoso
Tipos de Variáveis
Variáveis de Classe: Definidas ao nível da classe e são globais a
todos os objetos nela caracterizada, ou seja, a sua alteração é vista
em todos os objetos. (palavra chave static).
Variáveis de Objeto (atributos): Permite armazenar as
características de um determinado objeto. A declaração feita na
zona de definição da classe e são conhecidas de todos os objetos
concretizados na classe.
Variáveis Locais: Existem apenas dentro dos métodos ou dentro
dos blocos {} onde são declarados. Quando o bloco ou método
onde estão definidas termina, elas deixam de ser reconhecidas.
7 Formador João Fragoso
Construtores
Tipo especial de método.
Bloco de código que é executado sempre que utilizamos a
palavra reservada new.
Quando não é explicitamente declarado, o compilador insere o
construtor default.
Tem sempre o mesmo nome da classe em que está definido e
nunca devolve qualquer parâmetro.
Quando se cria um novo objeto a informação que lhe fica
associada é o endereço de memória onde está guardada a
informação do objeto.
8 Formador João Fragoso
Utilização de Métodos e Atributos
Criação de métodos:
Definição dos comportamentos dos objetos da classe.
Tipo_Dados Nome_Método(Tipo1 arg1,…)
{
….
}
Utilização de métodos:
Nome_Objeto.Método(Arg1,…)
Acesso a atributos:
Nome_Objeto.variável;
9 Formador João Fragoso
Palavra Reservada This
Utilização da palavra reservada This
//Construtor que inicializa o objeto com três parâmetros
Em Java podemos ter um parâmetro de um método e um
atributo de uma classe com o mesmo nome.
A palavra reservada this representa o objeto referenciado.
10 Formador João Fragoso
Acesso a Bibliotecas e Classes
Bibliotecas de Classes: classes e métodos predefinidos que
podem ser importados para o programa através da instrução
import.
Exemplo:
Classe Scanner para receber dados e que faz parte do pacote
'java.util'.
import java.util.Scanner;
Criar objeto do tipo Scanner:
Nome_classe objeto = new nome_classe(argumentos);
Scanner entrada = new Scanner(System.in);
11 Formador João Fragoso
Encapsulamento
Refere-se ao isolamento entre as partes do programa. Tem como
objetivo controlar o tipo e acesso às classes, atributos e métodos.
Modificadores de Acesso:
public: Classes, atributos e métodos visível em qualquer ponto do
programa.
private: Atributos e métodos visíveis somente no interior da classe onde
é definido, vedando a sua utilização mesmo às suas subclasses.
protected: Atributos e métodos visíveis à classe em que está definido, mas
também às respetivas subclasses.
12 Formador João Fragoso
Encapsulamento
Outros Modificadores de Acesso:
static: Quando o seu conteúdo é modificado numa instância é
modificado em todas instâncias. Na declaração de um
método, quando apenas queremos que seja possível o acesso a
ele dentro da classe.
final: Indica que a classe, método ou variável assim declarada têm
uma única atribuição que se mantém constante, ou seja, não pode
ser alterada.
13 Formador João Fragoso
Encapsulamento
Modificadores de classe:
public: A classe pode ser publicamente acedida, ou seja, os
elementos públicos da classe são disponibilizados para todo o
programa.
abstract: A classe não pode ser instanciada.
final: A classe não pode ter subclasses.
Nota: Na omissão do qualificador public, uma classe é apenas
acessível no pacote onde está definida.
Nota: Uma classe pode ter mais do que um qualificador. Contudo,
uma classe não pode ser ao mesmo tempo abstract e final.
14 Formador João Fragoso
Encapsulamento
Getters e Setteres
Métodos utilizados para aceder a atributos private a partir de
outras classes.
Convenção de utilização:
Getters: Método que retorna o valor do atributo e tem como
sintaxe get[Nome_atributo]. Quando retorna um boolean a
convenção é is[Nome_atributo].
Setters: Método que atribui/modifica o valor de um atributo e
tem como sintaxe set[Nome_atributo].
15 Formador João Fragoso
Encapsulamento
16 Formador João Fragoso
Herança
Permite reutilizar código. Métodos que estejam definidos numa
classe podem ser utilizados por objetos definidos nas suas
subclasses.
Para fazermos uma classe herdar as características de uma outra,
usamos a palavra reservada extends logo após a definição do
nome da classe.
Dessa forma:
class NomeDaClasseASerCriada extends NomeDaClasseASerHerdada
17 Formador João Fragoso
Exemplo de Herança
18 Formador João Fragoso
Polimorfismo
Polimorfismo significa "muitas formas"
— ou seja, a capacidade de um mesmo
nome representar comportamentos
diferentes.
Método comunica()
19 Formador João Fragoso
Tipos de Polimorfismo
Sobrecarga (Overload):
Consiste em implementar um método com assinaturas
diferentes na mesma classe.
A assinatura de um método consiste na primeira linha, ou seja,
pelo modificador de acesso, pelo tipo de dados de retorno, pelo
nome do método e pelos parâmetros.
Duas assinaturas diferentes do
mesmo método
20 Formador João Fragoso
Tipos de Polimorfismo
Reescrita (Override):
Permite alterar ou complementar as funcionalidades de um
método que se herdou de uma superclasse.
O método que é efetivamente chamado é o que foi definido na
classe a que o objeto que o chame pertence, ignorando o código
do método herdado.
Estamos a reescrever o método.
Nota: A reescrita consiste em implantar um método
com a mesma assinatura em classes diferentes ao contrário
da sobrecarga que é na própria classe.
21 Formador João Fragoso
Reescrita: @Override
A anotação @Override é usada para indicar que um método
está a substituir (sobrescrever) um método da superclasse
(classe pai).
Garante que o método está a realmente a sobrescrever um
método da superclasse.
Se estiver presente e houver um erro no nome ou na
assinatura, o compilador gera um erro.
22 Formador João Fragoso
Reescrita: @Override
Cachorro sobrescreve o método fazerSom() da classe Animal.
A anotação @Override informa ao compilador que a intenção é
substituir o método herdado.
23 Formador João Fragoso
@Override - Riscos
Se não for colocada a anotação e errar o nome ou
parâmetros, não haverá erro de compilação mas o método
da superclasse não será sobrescrito, e o comportamento
pode ser inesperado.
24 Formador João Fragoso
Palavra Reservada Super
Após um método ser reescrito, não podemos chamar
diretamente o método herdado da superclasse.
É possível resolver esse problema?
O Super vai permitir aceder a membros (métodos ou
atributos) da superclasse (classe pai) a partir de uma
subclasse (classe filha).
25 Formador João Fragoso
Acesso à classe Pai
A palavra reservada super em Java é usada para aceder a
membros (métodos ou atributos) da superclasse (classe pai) a
partir de uma subclasse (classe filha).
26 Formador João Fragoso
Utilização do Super()
Chamar o construtor da superclasse:
27 Formador João Fragoso
Utilização do Super()
Chamar um método da superclasse:
28 Formador João Fragoso
Utilização do Super()
Aceder a um atributo da superclasse:
29 Formador João Fragoso
Classes Abstratas
Não podem ser instanciadas de forma direta, uma vez que não
possuem construtor.
Se Carro for abstrata esta linha
dá erro de compilação
O principal objetivo é ser estendida, já que não criam nada em
concreto, podendo ter métodos concretos e abstratos.
Uma classe abstrata pode conter métodos abstratos que terão de ser
implementados obrigatoriamente nas subclasses.
Se estender a outra classe abstrata, esta ultima não precisa de
implementar os métodos abstratos.
30 Formador João Fragoso
Classes Abstratas
31 Formador João Fragoso