Post on 01-Dec-2018
1
ProgramaProgramaççãoão OrientadaOrientadaa a ObjetosObjetos
Alexandre CésarMuniz de Oliveira
2
Orientação a objetos
w Linguagens orientadas a procedimentos e linguagens orientadas a objetos– Unidade de programação: funções e classes– Objetos: dados + funções
w Apresenta um nível de abstração mais próximo ao mundo realw Encapsula dados (atributos) e métodos
(comportamentos) em objetos
3
Orientação a objetos
w Em uma L00 pura– Uma variável é um objeto– Um programa é um objeto– Um procedimento é um objeto– Um objeto é composto de objetos
w Exemplo do telefone celular– É composto de outros objetos, entre eles bateria e
botões– A bateria é um objeto também, que possui pelo menos
um outro objeto: carga, que representa seu estado– Os botões implementam comportamentos
4
Orientação a objetos
w Abstração é mais facilmente aplicada através de classes de objetos– Definição de novos tipos de dados de forma mais
completa – Inclui um repertório de funções que representam
operações realizáveis com os objetos daquele tipo
w Classes contêm dados bem como um conjunto de métodos que manipulam os dadosw Uma instância de um tipo básico é chamada
variável; w Uma instância de um tipo definido pelo usuário
(como uma classe) é chamada objeto
5
Abstração e encapsulamentow Abstração:
– Denota as características essenciais de um objeto que o distinguem de outros tipos de objetos e assim provê uma fronteira conceitual firmemente definida, de acordo com a perspectiva do observador.” [GradyBooch]
– Foca o lado externo de um objeto. – Destaca o comportamento (ou serviços) nativo do
objeto. – O comportamento essencial dos objetos é
caracterizado por meio das operações que ele é capaz de realizar sobre ele mesmo ou sobre outros objetos
– A abstração de um objeto deve preceder à sua implementação.
6
Abstração e encapsulamento
2
7
Abstração e encapsulamento
w Encapsulamento:– “Nenhuma parte de um sistema complexo
deve depender dos detalhes internos de outras partes” [Booch]
– Encapsulamento é o processo de ocultar todos os detalhes de um objeto que não contribuem para suas características essenciais.
– Abstração e encapsulamento são conceitos complementares:
• Abstração foca o lado externo do objeto. • O Encapsulamento impede os clientes de verem
seu lado interno (onde o comportamento da abstração é implementado). 8
Classes e Objetos
w Classes:– Definem lógica estática– Relacionamentos entre classes são definidos
na programação e não mudam durante a execução
– Classes não existem no contexto da execução– Uma classe representa vários objetos que
ocupam espaço na memória, mas ela não existe nesse domínio
– A classe tem papel na criação dos objetos, mas não existe quando os objetos trocam mensagens entre si.
9
Classes e Objetos
wObjetos:– São conceitos que têm estado (atributos),
comportamento (métodos) e identidade (referência)
– Relacionamentos entre objetos são dinâmicos e podem mudar.
– O funcionamento da aplicação reflete a lógica de relacionamento entre os objetos, e não entre as classes.
10
Classes e Objetos
Vaca
Mú Mimosa Pintada
11
Classes e Objetos
Atributos:CorPesoSexoetc...
Métodos:MugirPastarAndaretc...
12
Classes e Objetos
3
13
Classes e Objetos
14
Classes e Objetos
w Uma classe pode ser usada para– conter a rotina de execução principal de uma aplicação
iniciada pelo sistema operacional (método main)– conter funções globais (métodos estáticos)– conter constantes e variáveis globais (campos de
dados estáticos)– especificar e criar objetos (contém construtores,
métodos e atributos de dados)
w Visibilidade (escopo) da classe:• public – indica que o conteúdo p úblico da classe pode ser
usado livremente por outras classes do pacote ou de outro pacote
• private – só é permitido seu uso para aninhar classes, fazendo com que uma classe seja interna a outra
15
Classes e Objetos
w Um único arquivo pode conter diversas classes, porém apenas uma delas pode ser definida como pública– O nome do arquivo Java deve ter o mesmo nome da
classe pública
w Obs: A Sun recomenda que nomes de classes sejam iniciados com uma letra maiúscula, para diferenciar nomes de objetos
16
Métodos e atributos
w [mod] tipo nome ([tipo arg]) [throws exc]{– [mod]: zero ou mais modificadores separados
por espaços– Tipo: tipo de dados retornado pelo método– Identificador: nome do método– [arg]: zero ou mais argumentos, com tipo
declarado, separados por vírgula– [throws exceção]: declaração de exceções
17
Métodos e atributos
w Controlando acesso aos atributos e métodos– O acesso a atributos e métodos é controlado
através de modificadores public, private e protected (posteriormente)
– Membros public permitem o acesso ao membro a partir de outras classes
– Membros private não permite à classes clientes ter acesso ao membro; somente a própria classe que contêm este membro pode acessá- lo.
– Restringir o acesso a membros através da cláusula private é chamado encapsulamento
18
Métodos e atributos
4
19
Métodos e atributos
w Cada objeto tem valores específicos para seus membrosw O qualificador static em um atributo
permite que o valor dele seja único para todas as instâncias de uma classew Funciona como se o membro fosse global
para todos os objetos criados
20
Métodos e atributos
21
Métodos e atributosw Atributos/métodos estáticos são também
chamados de atributos/métodos de classe; class Pendulum {
... static float gravAccel = 9.80; ...
class Pendulum { ... static final float EARTH_G = 9.80; ...
Pendulum.gravAccel = 8.76;
22
Métodos e atributos
wMétodos estáticos, da mesma forma, podem ser acessados diretamente através da classe;w Um método estático pode ser acessado
somente por outro membro estático da classewMétodos estáticos não podem acessar
diretamente variáveis de instância ou métodos de instância– A qual instância está se referindo?
23
Métodos e atributosw Exemplos
– Math.sqrt(), – System.out.println ()
w class Bird { ... static String [] getBirdTypes( ) { String [] types; // Create list...
return types; } ...
}String [] names = Bird.getBirdTypes( );
24
Métodos e atributos
5
25
Exercícios
26
Exercícios
2. Crie, e compile as seguintes classes– Uma Pessoa tem um nome (String)– Uma Porta tem um estado aberto, que pode ser true
ou false, e pode ser aberta ou fechada– Uma Construcao tem uma finalidade– Uma Casa é uma Construcao com finalidade
residencial que tem um proprietário Pessoa, um número e um conjunto (vetor) de Portas
3. Crie as seguintes classes– Um Ponto tem coordenadas x e y inteiras– Um Circulo tem um Ponto e um raio inteiro– Um Pixel é um tipo de Ponto que possui uma cor
27
Referência this e super
w This:– Pode ser necessário que um objeto precise em
algum momento referenciar a si mesmo– Fica implícito caso seja acessado um método
ou um atributo da própria classe– Porém, para evitar o acesso errôneo a um
parâmetro, por exemplo, e facilitar a leitura do código, é indicado o uso do identificador this
– Não pode ser utilizado em métodos static– Utilizado também para invocar um
determinado construtor de classe
28
Referência this e super
w Superé usada para referenciar:– os valores originais de variáveis ou – as implementações originais de métodos sobrepostos
29
Sobrecarga de métodos
w Sobrecarga é um tipo de polimorfismow Um operador pode assumir mais de uma
forma, dependendo do número e tipos de seus operandos (assinatura)
30
Sobrecarga de métodos
public class Sobrecarga {public static void main (String args[]) {
System.out.println (“área de um quadrado... ” + area(3));System.out.println (“área de um retângulo... ” + area(3,2));System.out.println (“área de um cubo... ” + area(3,2,5));
}public static double area (int x) {
return x * x;}public static double area (int x, int y) {
return x * y;}public static double area (int x, int y, int z) {
return x * y * z;}}
6
31
Construtores
w Quando um objeto é instanciado, seus atributos podem ser inicializados por um método construtor;w Construtor é um método com o mesmo nome da
classe e sem tipo de retorno definidow São chamados apenas uma vez: na instanciação
do objetow Nem sempre aparecem explícitos em uma classe: podem
ser omitidos (o sistema oferece uma implementação default)– Objeto obj = new Objeto(); – Objeto obj = new Objeto (35, “Nome”);
32
Construtores
w Pode haver vários em uma mesma classe, recebendo diferentes parâmetrosw São identificados pelo número e tipo
de argumentos (assinatura)wConstrutor padrão não recebe
argumentoswConstrutor cópia recebe os atributos
de outro objeto da mesma classe
33
Construtores
w Atributos e inicialização estáticos:
34
Construtores
35
Construtores
36
Construtores
w super() e this():– Todo construtor chama algum construtor de
sua superclasse– Por default, chama-se o construtor sem
argumentos, através do comando superO(implícito)
– Pode-se chamar outro construtor, identificando-o através dos seus argumentos (número e tipo) na instrução superO
– superO, se presente, deve sempre ser a primeira instrução do construtor (substitui o superO implícito)
7
37
Construtores
– Se a classe tiver um construtor explícito, com argumentos, subclasses precisam chamá-lo diretamente
– Não existe mais construtor default na classe
38
Exercícios4. Escreva uma classe Ponto
– contém x e y que podem ser definidos em construtor– métodos getX() e getY() que retornam x e y– métodos setX(int) e setY(int) que mudam x e y
5. Escreva uma classe Circulo, que contenha– raio inteiro e origem Ponto– construtor que define origem e raio – método que retorna a área– método que retorna a circunferência– use java.Iang.Math.PI (Math.PI)
6. Crie um segundo construtor para Circulo que aceite um raio do tipo int e coordenadas x e y
39
Exercícios
40
Exercícios
41
Destrutoresw Construtores alocam recursos durante a inicialização dos
objetosw Para efetuar a liberação destes recursos podem ser
utilizados destrutores de classew Destrutores são invocados quando um objeto é removido
da memória– Problema: em Java não é possível saber quando isto ocorrerá, por
conta da coleta de lixo (garbage collection)w Um destrutor deve ser implementado através do método:
– void finalize ();w A coleta de lixo pode ser “forçada” através da chamada
ao método System.gc()
42
Pacotes
wDefine grupos de classesw Permite a existência de classes com o
mesmo nome, pois seus pacotes as diferenciamw Pacotes determinam uma estrutura de
diretórios nos quais as classes devem estar inseridas
8
43
Pacotes
w Criando um pacote:– Definir pelo menos uma classe como pública
(senão ela somente poderá ser usada por classes pertencentes ao mesmo pacote)
– Adicionar o comando package <nome-do-pacote> no início da classe
– Compilar a classe, inserindo-a em sua correta estrutura de diretórios. Exemplo:
• Em um pacote chamado teste, os bytecodes devem estar dentro de um diretório chamado teste
• Programas que utilizam a classe devem importar seu pacote. Ex: import teste.*; 44
Pacotes
45
Exercícios7. Desenvolva três classes:
– Uma classe pneu que tenha características como a marca, tipo de pneu, etc.
– Uma classe motor que tenha características de velocidade em RPM, fabricante, status do motor (ligado / desligado) e funcionalidades para ligar e desligar o motor, verificar velocidade do motor, etc.
– Uma classe carro que tenha 1 motor e quatro pneus e que sejam definidas características para o carro (como o ano, modelo, fabricante, etc.) e funcionalidades (acelerar, mudar a marcha, freiar, etc.)
8. Escrever um TAD (Tipo Abstrato de Dados) de uma pilha genérica