Escolar Documentos
Profissional Documentos
Cultura Documentos
2
Objetos
• “Um objeto é uma entidade que incorpora uma abstração
relevante no contexto de uma aplicação”;
• Características:
– Estado (estrutura): Conjunto de suas propriedades e seus valores
correntes;
– Comportamento: conjunto de serviços (operações) que o objetivo
provê;
– Identidade: identificador único que diferencia cada objeto, mesmo
que tenham o mesmo estado de comportamento.
3
Classes e instâncias
• Objeto = Instância de classe;
4
Classes e objetos
• O mundo real é formado de coisas (pessoa, quadro, computador,
fornecedor, animal ...).
– Toda coisa do mundo real é chamada de objeto na modelagem orientada
a objetos.
5
Contextualizando
• Vem a mente um objeto (animal):
– 4 patas
– Crina
– Cauda
– ...
6
Declarando uma Classe em Java
public class Cavalo {
//atributos
//construtores
//encapsulamento
//comportamento
}
7
ATRIBUTOS
8
Atributos
• Cor
• Altura
• Peso
• Número de dentes
• Quantidade de patas
9
Atributos de uma Classe em Java
public class Cavalo {
//atributos
//construtores
//encapsulamento
//comportamento
}
10
Atributos de uma Classe em Java
public class Cavalo {
//construtores
//encapsulamento
//comportamento
}
11
Modificadores de acesso
• public acesso global em todas as classes de todos os
pacotes;
12
static
• static indica que um elemento (atributo, método, classe),
pertence à própria classe (grupo) e não à uma instância específica.
• Porque usar?
– Quando o valor da variável
independe da existência de
objetos;
– Quando é necessário que a
variável seja compartilhada
por vários objetos.
13
static
• Algumas características:
– Elementos static, podem ser acessados diretamente;
• Utilizando o nome da classe (não precisando de uma instância);
– Elementos static, podem ser acessados sem a ocorrência de uma
instância da classe à qual foram declaradas;
– Elementos static podem ser declaradas apenas dentro do escopo de
uma classe (class level);
14
CONSTRUTORES
15
Construtores
• São os responsáveis por duas funções essenciais dentro da
programação orientada a objetos:
– Constroem (instanciam) os objetos, que são instâncias das classes.
– Inicializam todos os atributos.
• Temos aqui um cuidado especial com atributos que também possam ter a
necessidade de serem inicializados através de outro construtor...
16
Construtores código
public class Cavalo {
private String cor;
private int idade;
private double peso; Peso
private String numPatas;
h
private String raca;
public Cavalo() { }
17
Objetos
• “Um objeto é a instância de uma classe”.
Classe Objeto
18
Criação de objetos
19
Métodos
20
21
Análise do estudo de caso...
(Métodos/ações)
• Os pedais ocultam as complexidades do funcionamento do
motorista:
– O pedal do acelerador oculta toda a complexidade
para aumentar a velocidade do carro.
22
Mensagens e métodos
• As operações (serviços) que um objeto oferece são chamadas
de métodos;
24
Objetos - Mensagens
• Objetos não executam as suas ações
por conta própria.
// ...
// faça algo...
// ...
}
}
26
“Chamando - usando” as habilidades de
cada Objeto
public static void main (String [] args) {
c1.correr();
c2.correr();
}
27
ENCAPSULAMENTO
28
Encapsulamento
• Complemento da abstração:
– Abstração enfoca o comportamento observável de um objeto;
– Encapsulamento enfoca a implementação que origina este
comportamento.
29
Encapsulamento
• Separar os aspectos externos (o que faz) dos aspectos
internos (como faz):
– Aspectos externos = interface, contrato;
– Aspectos internos = implementação.
30
Encapsulamento
• O objetivo aqui é isolar a classe, e controlar acessos à mesma.
– Boa prática de programação em deixar os atributos de uma classe restritos a
ela.
– Dizemos que ocultamos os tributos da classe.
– Para acessar os atributos de uma classe utiliza-se os métodos get e set.
Classe
var1
Set’s var2
Get’s
var3
31
Métodos Set’s – Get’s
public class Cavalo {
private String cor;
private int idade;
33
Objetos – encapsulamento (vantagens)
• A única coisa que um objeto precisa saber para pedir colaboração
de outro é conhecer a interface (métodos).
34
Packages (Pacotes)
• packages conjunto de classes
localizadas na mesma estrutura
hierárquica de diretórios.
– São colocadas em um package classes relacionadas, construídas com
um propósito comum para promover a reutilização de código;
– Reduz conflitos de nomes
– Facilita a busca pelo uso ou definição das classes no projeto;
– Permite um controle adequado pelos modificadores de acesso.
35
HIERARQUIA
36
Classes internas (inner class / nested class)
• Agrupar logicamente classes que são usadas apenas em um lugar:
– Se uma classe é útil para apenas uma outra classe, então é lógico
incorporá-la nessa classe e manter as duas juntas.
– Aninhar essas "classes auxiliares" torna seu pacote mais simplificado.
• Aumenta o encapsulamento:
– Considere duas classes de nível superior, A e B, onde B precisa de acesso
aos membros de A que, de outra forma, seriam declarados privados.
– Ao ocultar a classe B dentro da classe A, os membros de A podem ser
declarados privados e B pode acessá-los.
– Além disso, o próprio B pode ser escondido do mundo exterior.
37
Classes internas (inner class / nested class)
38
Modularidade
• Decomposição do sistema em módulos
– Coesos (baixo acoplamento);
– Autônomos;
– De interface simples e coerente
39
Hierarquia
• É uma forma de “organizar” as
abstrações e simplificar o
entendimento do problema;
40
Mecanismo de estruturação
• Objetos relacionam-se uns com os outros;
• Mecanismo propostos:
– Associação;
– Composição;
– Herança.
41
Ligações e associações
• Ligação: conexão entre objetos;
42
Composição e agregação
• Formas especiais de ligação que modelam relacionamentos todo-
parte;
• Composição:
– A parte só pode pertencer a um todo (por vez). Ex: uma aula de uma
disciplina, um motor de um carro;
– Parte pode não pertencer a um todo (ex: motor)
• Agregação:
– A parte pode ser compartilhada com vários todos.
– Ex: uma disciplina de um (ou mais) cursos de graduação.
43
Generalização e especialização
• Generalização: quando classes têm
semelhanças podemos definir uma
classe mais geral;
44
HERANÇA
45
Herança
• Herança é uma forma de reutilização de software em que uma nova
classe é criada absorvendo membros de uma classe.
46
Herança
• Generalização e Especialização são úteis para estruturação do
sistema;
• A herança possibilita:
– Reutilização;
– Captura explícita de características comuns;
– Definição incremental de classes.
47
Cuidados com o uso de herança
• Semântica da herança:
– “é um tipo de”;
– “é uma instância indireta de”;
– Ex: Universitário é um tipo de Estudante.
48
Herança múltipla
Classe A
• Cuidado!!!!!!!
X
y
Classe C Classe A
R R
49
Herança - código
public class Animal {
private String nome;
private double altura;
public Animal ( ){ }
52
Relação entre os conceitos discutidos
53
POLIMORFISMO
54
Polimorfismo
• O polimorfismo permite escrever programas que processam objetos que
compartilham uma mesma classe.
1m 3m 10 m 55
Objetos - Polimorfismo
• Indica a capacidade de abstrair várias implementações
diferentes de uma única interface.
56
Polimorfismo - código
• Implementamos o método mover na super classe Animal.
58
CLASSES ENUMERATES (ENUM)
59
Classes Enumerates
• É um tipo especial de classe que é introduzida pela palavra-chave ENUM.
60
Exemplo Classes Enumerates
public enum DiaSemana {
private valorDia;
62
Classes abstratas (interfaces)
• Fornecer uma superclasse apropriada a partir da qual outras
classes podem herdar e assim podem compartilhar um
design comum.
63
Classes abstratas
• Classes abstratas não podem ser instanciadas;
– Usadas para organizar características comuns a diversas subclasses;
– Desenvolvida para ser herdada.
64
Operações abstratas
• Classes abstratas podem definir métodos sem
implementação, chamados abstratos;
– Subclasses concretas são obrigadas a implementá-lo;
– Classes concretas não podem ter métodos abstratos;
– Classes abstratas podem ter métodos concretos.
65
Sobrecarga e sobrescrita
• Sobrecarga: operações distintas com o mesmo nome;
66
Classes abstratas - código
public abstract class Tv {
public abstract void aumentarVolume ( );
68
Generics
• Evitar o uso de casts excessivos e erros que são encontrados as vezes
apenas em tempo de compilação.
public Teste(T t, S x) {
this.t = t;
this.x = x;
}
}
-------------------------------------------------------------------------------------------------------
public static void main(String [ ] args) {
Teste<String, Integer> gt = new Teste<>("Hello", 3);
Teste<Integer, Integer> gt2 = new Teste<>(10, 3);
gt.showType();
gt2.showType();
}
70