![Page 1: Programação Orientada a Objetos - Professor Baesse€¦ · Programação Orientada a Objetos Prof. Bruno Gomes bruno.gomes@ifrn.edu.br. Introdução • Permite o agrupamento de](https://reader033.vdocuments.pub/reader033/viewer/2022060606/605bdd9d1a87e315495e8c5c/html5/thumbnails/1.jpg)
Pacotes e Pacotes e EncapsulamentoEncapsulamento
Programação Orientada a ObjetosProgramação Orientada a Objetos
Prof. Bruno GomesProf. Bruno Gomes
[email protected]@ifrn.edu.br
![Page 2: Programação Orientada a Objetos - Professor Baesse€¦ · Programação Orientada a Objetos Prof. Bruno Gomes bruno.gomes@ifrn.edu.br. Introdução • Permite o agrupamento de](https://reader033.vdocuments.pub/reader033/viewer/2022060606/605bdd9d1a87e315495e8c5c/html5/thumbnails/2.jpg)
IntroduçãoIntrodução
• Permite o agrupamento de classes em uma coleção chamada pacote
• Um pacote é uma coleção de classes e interfaces que provem proteção de acesso e gerenciamento de espaços de nomesde espaços de nomes
• Organiza o trabalho e separa seu trabalho das bibliotecas de código
• A biblioteca Java é distribuída em pacotes (Ex.: java.util, java.lang)
• Todos os pacotes Java estão dentro das hierarquias de pacote java e javax
![Page 3: Programação Orientada a Objetos - Professor Baesse€¦ · Programação Orientada a Objetos Prof. Bruno Gomes bruno.gomes@ifrn.edu.br. Introdução • Permite o agrupamento de](https://reader033.vdocuments.pub/reader033/viewer/2022060606/605bdd9d1a87e315495e8c5c/html5/thumbnails/3.jpg)
IntroduçãoIntrodução
• Objetivos:
– Garantir a singularidade dos nomes de classe (Evita conflito de nomes)
– Facilidade de determinar classes relacionadas– Facilidade de determinar classes relacionadas
– Proteção de acesso
• Sun recomenda que utilize o nome de domínio da Internet da empresa, para garantir um nome de pacote único
![Page 4: Programação Orientada a Objetos - Professor Baesse€¦ · Programação Orientada a Objetos Prof. Bruno Gomes bruno.gomes@ifrn.edu.br. Introdução • Permite o agrupamento de](https://reader033.vdocuments.pub/reader033/viewer/2022060606/605bdd9d1a87e315495e8c5c/html5/thumbnails/4.jpg)
Classes ficam em pacotesClasses ficam em pacotes
• As classes ficam em pacotes– o pacote faz parte do nome da classe
• java.util.Scanner
• java.util.ArrayList
– Alguns pacotes padrão do JAVA– Alguns pacotes padrão do JAVA• java.lang: classes fundamentais – importado
automaticamente
• java.util: classes utilitárias
• java.io: classes para entrada e saída
• java.net: classes para uso em rede (TCP/IP)
• ... e muito mais!
![Page 5: Programação Orientada a Objetos - Professor Baesse€¦ · Programação Orientada a Objetos Prof. Bruno Gomes bruno.gomes@ifrn.edu.br. Introdução • Permite o agrupamento de](https://reader033.vdocuments.pub/reader033/viewer/2022060606/605bdd9d1a87e315495e8c5c/html5/thumbnails/5.jpg)
PacotesPacotes
• Para usar uma classe que pertence a um outro pacote é necessário usar o nome completo:
java.util.Scanner sc = new java.util.Scanner(System.in);
• ou importar a classe:• ou importar a classe:
import java.util.Scanner;
...
Scanner sc = new Scanner();
![Page 6: Programação Orientada a Objetos - Professor Baesse€¦ · Programação Orientada a Objetos Prof. Bruno Gomes bruno.gomes@ifrn.edu.br. Introdução • Permite o agrupamento de](https://reader033.vdocuments.pub/reader033/viewer/2022060606/605bdd9d1a87e315495e8c5c/html5/thumbnails/6.jpg)
PacotesPacotes
• Classes do pacote java.lang são importadas por padrão:
– String, StringBuilder, Integer, Double, System, entre
outras
![Page 7: Programação Orientada a Objetos - Professor Baesse€¦ · Programação Orientada a Objetos Prof. Bruno Gomes bruno.gomes@ifrn.edu.br. Introdução • Permite o agrupamento de](https://reader033.vdocuments.pub/reader033/viewer/2022060606/605bdd9d1a87e315495e8c5c/html5/thumbnails/7.jpg)
Localização de classesLocalização de classes
• A JVM precisa saber onde encontrar uma determinada classe
– Classe está em um arquivo .class
– A máquina virtual não procura no sistema de – A máquina virtual não procura no sistema de arquivos inteiro
– Classes da API padrão estão em um lugar fixo e a JVM sabe onde encontrar (instalação da JVM)
– Precisamos informar onde estão nossas classes
![Page 8: Programação Orientada a Objetos - Professor Baesse€¦ · Programação Orientada a Objetos Prof. Bruno Gomes bruno.gomes@ifrn.edu.br. Introdução • Permite o agrupamento de](https://reader033.vdocuments.pub/reader033/viewer/2022060606/605bdd9d1a87e315495e8c5c/html5/thumbnails/8.jpg)
CLASSPATHCLASSPATH
• A JVM procura no CLASSPATH
– opção -cp da chamada a máquina virual
• java -cp c:\classes Classe (Windows)
• java -cp /home/aluno/classes (Unix)• java -cp /home/aluno/classes (Unix)
– ... ou definição da variável de ambiente CLASSPATH
• set CLASSPATH=c:\classes (Windows)
• export CLASSPATH=/home/aluno/classes (Unix)
– Diretório classes deverá conter os arquivos com as classes (.class)
• pacotes são diretórios
![Page 9: Programação Orientada a Objetos - Professor Baesse€¦ · Programação Orientada a Objetos Prof. Bruno Gomes bruno.gomes@ifrn.edu.br. Introdução • Permite o agrupamento de](https://reader033.vdocuments.pub/reader033/viewer/2022060606/605bdd9d1a87e315495e8c5c/html5/thumbnails/9.jpg)
Classes em pacotesClasses em pacotes
• No arquivo que escrevemos o código fonte:
– É preciso informar em qual pacote a classe esta
• no início do arquivo que define a classe:• no início do arquivo que define a classe:
– package nomePacote;
– Exemplo: package br.ifrn.tads.poo;
• Se não especificado classe pertence ao pacote default (padrão), que não tem nome
– Desaconselhável usar pacote padrão
![Page 10: Programação Orientada a Objetos - Professor Baesse€¦ · Programação Orientada a Objetos Prof. Bruno Gomes bruno.gomes@ifrn.edu.br. Introdução • Permite o agrupamento de](https://reader033.vdocuments.pub/reader033/viewer/2022060606/605bdd9d1a87e315495e8c5c/html5/thumbnails/10.jpg)
Classes em pacotesClasses em pacotes
• Inserir os arquivos fontes em um sub-diretório que corresponde ao nome de pacote completo
• Exemplo:• Exemplo:
– Classe no pacote ifrn.tads.poo, deve estar no subdiretório ifrn/tads/poo
![Page 11: Programação Orientada a Objetos - Professor Baesse€¦ · Programação Orientada a Objetos Prof. Bruno Gomes bruno.gomes@ifrn.edu.br. Introdução • Permite o agrupamento de](https://reader033.vdocuments.pub/reader033/viewer/2022060606/605bdd9d1a87e315495e8c5c/html5/thumbnails/11.jpg)
Classes em pacotesClasses em pacotes
• Considere a classe Racional– pacote ifrn.tads.poo;
package ifrn.tads.poo;
public class Racional{
• Ao ser compilada, o arquivo .class deverá ser colocado no diretório ifrn/tads/poo da raiz do CLASSPATH– C:\classes\ifrn\tads\poo por exemplo
public class Racional{...}
![Page 12: Programação Orientada a Objetos - Professor Baesse€¦ · Programação Orientada a Objetos Prof. Bruno Gomes bruno.gomes@ifrn.edu.br. Introdução • Permite o agrupamento de](https://reader033.vdocuments.pub/reader033/viewer/2022060606/605bdd9d1a87e315495e8c5c/html5/thumbnails/12.jpg)
CompilaçãoCompilação
• Opção -d do compilador informa raiz do diretório onde a classe será colocada– javac -d c:\classes Racional.java
– Este comando compila o arquivo Racional.java e – Este comando compila o arquivo Racional.java e coloca o .class no diretório correspondente ao pacote a partir de c:\classes
• c:\classes\ifrn\tads\poo\Racional.class
• – Se o CLASSPATH estiver definido para c:\classes a JVM saberá onde encontrar a classe Racional
![Page 13: Programação Orientada a Objetos - Professor Baesse€¦ · Programação Orientada a Objetos Prof. Bruno Gomes bruno.gomes@ifrn.edu.br. Introdução • Permite o agrupamento de](https://reader033.vdocuments.pub/reader033/viewer/2022060606/605bdd9d1a87e315495e8c5c/html5/thumbnails/13.jpg)
Usando PacotesUsando Pacotes
import ifrn.tads.poo.Racional;public class Main{...Racional r1 = new Racional();...}
Importando
Nome Completo}
public class Main{...ifrn.tads.poo.Racional r1;r1 = new ifrn.tads.poo.Racional();...}
Nome Completo
![Page 14: Programação Orientada a Objetos - Professor Baesse€¦ · Programação Orientada a Objetos Prof. Bruno Gomes bruno.gomes@ifrn.edu.br. Introdução • Permite o agrupamento de](https://reader033.vdocuments.pub/reader033/viewer/2022060606/605bdd9d1a87e315495e8c5c/html5/thumbnails/14.jpg)
PacotesPacotes
![Page 15: Programação Orientada a Objetos - Professor Baesse€¦ · Programação Orientada a Objetos Prof. Bruno Gomes bruno.gomes@ifrn.edu.br. Introdução • Permite o agrupamento de](https://reader033.vdocuments.pub/reader033/viewer/2022060606/605bdd9d1a87e315495e8c5c/html5/thumbnails/15.jpg)
ENCAPSULAMENTOENCAPSULAMENTO
![Page 16: Programação Orientada a Objetos - Professor Baesse€¦ · Programação Orientada a Objetos Prof. Bruno Gomes bruno.gomes@ifrn.edu.br. Introdução • Permite o agrupamento de](https://reader033.vdocuments.pub/reader033/viewer/2022060606/605bdd9d1a87e315495e8c5c/html5/thumbnails/16.jpg)
Projeto Orientado a ObjetosProjeto Orientado a Objetos
• Objetivos:
– Robustez
• Sistemas confiáveis, tolerante a falhas
– Adaptabilidade
• Capacidade de reagir conforme o contexto• Capacidade de reagir conforme o contexto
– Reutilizabilidade
• Reutilização do software
• Princípios:
– Abstração
– Encapsulamento
– Modularidade
![Page 17: Programação Orientada a Objetos - Professor Baesse€¦ · Programação Orientada a Objetos Prof. Bruno Gomes bruno.gomes@ifrn.edu.br. Introdução • Permite o agrupamento de](https://reader033.vdocuments.pub/reader033/viewer/2022060606/605bdd9d1a87e315495e8c5c/html5/thumbnails/17.jpg)
Elementos do modelo de objetosElementos do modelo de objetos
• Abstração– Decompor um sistema complicado em suas partes
fundamentais
– Descrevê-las em uma linguagem simples e precisa• Atribuir-lhes um nome e descrever suas funcionalidades• Atribuir-lhes um nome e descrever suas funcionalidades
– Abstrair os detalhes desnecessários
• Encapsulamento– É o processo de esconder todos os detalhes de um
objeto que não contribuem para suas características essenciais
![Page 18: Programação Orientada a Objetos - Professor Baesse€¦ · Programação Orientada a Objetos Prof. Bruno Gomes bruno.gomes@ifrn.edu.br. Introdução • Permite o agrupamento de](https://reader033.vdocuments.pub/reader033/viewer/2022060606/605bdd9d1a87e315495e8c5c/html5/thumbnails/18.jpg)
VisibilidadeVisibilidade
• Proteção de acesso– Proteger o interior da classe
• Explicitar o que usuários (da classe) precisam sabersaber
• Pode ser:– private: Apenas membros da classe têm acesso
– protected: Membros da classe e subclasses
– public: Todos têm acesso
– default: Apenas membros do mesmo pacote
![Page 19: Programação Orientada a Objetos - Professor Baesse€¦ · Programação Orientada a Objetos Prof. Bruno Gomes bruno.gomes@ifrn.edu.br. Introdução • Permite o agrupamento de](https://reader033.vdocuments.pub/reader033/viewer/2022060606/605bdd9d1a87e315495e8c5c/html5/thumbnails/19.jpg)
Proteção de AcessoProteção de Acesso
• Atributos que fazem parte da implementação
– Declare-os como private
• Nem todos os métodos fazem parte da interfaceinterface
– Métodos que servem para auxiliar outros métodos
• Declare-os private
• Deixe public apenas o que o cliente deve saber
![Page 20: Programação Orientada a Objetos - Professor Baesse€¦ · Programação Orientada a Objetos Prof. Bruno Gomes bruno.gomes@ifrn.edu.br. Introdução • Permite o agrupamento de](https://reader033.vdocuments.pub/reader033/viewer/2022060606/605bdd9d1a87e315495e8c5c/html5/thumbnails/20.jpg)
Proteção de AcessoProteção de Acesso
• Quando utilizamos atributos privados (private), o acesso a esses membros se dá através dos métodos
acessadores (getters e setters):
• GET• GET
– Verifica um valor em algum campo ou atributo de uma classe
• SET
– Modificar um valor em algum campo ou atributo de uma classe
![Page 21: Programação Orientada a Objetos - Professor Baesse€¦ · Programação Orientada a Objetos Prof. Bruno Gomes bruno.gomes@ifrn.edu.br. Introdução • Permite o agrupamento de](https://reader033.vdocuments.pub/reader033/viewer/2022060606/605bdd9d1a87e315495e8c5c/html5/thumbnails/21.jpg)
Proteção de AcessoProteção de Acesso
• Observação:
Criar os métodos GET ou SET
somente quando for precisar!!!somente quando for precisar!!!
![Page 22: Programação Orientada a Objetos - Professor Baesse€¦ · Programação Orientada a Objetos Prof. Bruno Gomes bruno.gomes@ifrn.edu.br. Introdução • Permite o agrupamento de](https://reader033.vdocuments.pub/reader033/viewer/2022060606/605bdd9d1a87e315495e8c5c/html5/thumbnails/22.jpg)
Proteção de AcessoProteção de Acesso
• Exemplo: public class Pessoa {
private String nome;
private int cpf;
public Pessoa(String nome, int cpf) {
this.nome = nome;
this.cpf = cpf;
}}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public int getCpf() {
return cpf;
}
public void setCpf(int cpf) {
this.cpf = cpf;
}
}
![Page 23: Programação Orientada a Objetos - Professor Baesse€¦ · Programação Orientada a Objetos Prof. Bruno Gomes bruno.gomes@ifrn.edu.br. Introdução • Permite o agrupamento de](https://reader033.vdocuments.pub/reader033/viewer/2022060606/605bdd9d1a87e315495e8c5c/html5/thumbnails/23.jpg)
Método Método toStringtoString()()
• Serve para adicionar um texto que irá representar um objeto
• Se tentar imprimir diretamente um objeto, irá ser impresso as coordenadas do objetoser impresso as coordenadas do objeto
• Sintaxe:
public String toString(){
return "texto";
}
![Page 24: Programação Orientada a Objetos - Professor Baesse€¦ · Programação Orientada a Objetos Prof. Bruno Gomes bruno.gomes@ifrn.edu.br. Introdução • Permite o agrupamento de](https://reader033.vdocuments.pub/reader033/viewer/2022060606/605bdd9d1a87e315495e8c5c/html5/thumbnails/24.jpg)
Método Método toStringtoString()()
• Façam um teste:
– Crie uma Classe Pessoa, com um atributo nome (String).
– Na mesma classe, crie um método main, e crie um – Na mesma classe, crie um método main, e crie um objeto da Classe Pessoa.
– Imprima este objeto, sem acessar nenhum método
Pessoa pessoa = new Pessoa();System.out.println(pessoa);
![Page 25: Programação Orientada a Objetos - Professor Baesse€¦ · Programação Orientada a Objetos Prof. Bruno Gomes bruno.gomes@ifrn.edu.br. Introdução • Permite o agrupamento de](https://reader033.vdocuments.pub/reader033/viewer/2022060606/605bdd9d1a87e315495e8c5c/html5/thumbnails/25.jpg)
Exemplo:Exemplo:public class Pessoa {
private String nome;
private int cpf;
public Pessoa(String nome, int cpf) {
this.nome = nome;
this.cpf = cpf;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;this.nome = nome;
}
public int getCpf() {
return cpf;
}
public void setCpf(int cpf) {
this.cpf = cpf;
}
public String toString(){
return "Nome: "+nome+"\nCPF: "+cpf;
}
}
![Page 26: Programação Orientada a Objetos - Professor Baesse€¦ · Programação Orientada a Objetos Prof. Bruno Gomes bruno.gomes@ifrn.edu.br. Introdução • Permite o agrupamento de](https://reader033.vdocuments.pub/reader033/viewer/2022060606/605bdd9d1a87e315495e8c5c/html5/thumbnails/26.jpg)
ExercícioExercício
• Colocar os atributos como private, criar os métodos acessadores e o método toStringpara as Classes do exercício da aula passada:
– Endereco– Endereco
– Pessoa
– Produto
• Criar os pacotes ifrn.tads.modelo e ifrn.tads.negocio
![Page 27: Programação Orientada a Objetos - Professor Baesse€¦ · Programação Orientada a Objetos Prof. Bruno Gomes bruno.gomes@ifrn.edu.br. Introdução • Permite o agrupamento de](https://reader033.vdocuments.pub/reader033/viewer/2022060606/605bdd9d1a87e315495e8c5c/html5/thumbnails/27.jpg)
ExercícioExercício
• Inserir as Classes nos determinados pacotes:
• ifrn.tads.modelo:
– Endereco
Pessoa– Pessoa
– Produto
• ifrn.tads.negocio:
– Compra
![Page 28: Programação Orientada a Objetos - Professor Baesse€¦ · Programação Orientada a Objetos Prof. Bruno Gomes bruno.gomes@ifrn.edu.br. Introdução • Permite o agrupamento de](https://reader033.vdocuments.pub/reader033/viewer/2022060606/605bdd9d1a87e315495e8c5c/html5/thumbnails/28.jpg)
ExercícioExercício
• Representação: