Programação
Orientada a Objetos
AULA 3
Profa. Dra. Flávia Monteiro.
Tópicos a serem estudados
● Princípios da orientação a objetos;
● Objetos;
● Classes e abstrações;
● Métodos Gets e Sets;
● Encapsulamento;
● Construtores;
● Classes e métodos genéricos;
Plataformas Java
● Java SE (Java Platform Standard Edition)
○ Desenvolvimento e execução de applets,
aplicações standalone ou aplicações cliente
● Java EE (Java Platform Enterprise Edition)
○ Reúne um conjunto de tecnologias em uma
arquitetura voltada para o desenvolvimento de
aplicações servidoras
● Java ME (Java Platform Micro Edition)
○ Fornece um ambiente de execução otimizado e
permite escrever programas cliente que são
executados em pequenos dispositivos móveis
(smart cards, telefones celulares, ...)
Paradigmas de programação
● O relacionamento entre paradigmas de programação e
linguagens de programação pode ser complexo pelo fato
de linguagens de programação poderem suportar mais de
um paradigma;
Introdução de POO com Java
● Estudamos anteriormente como programar de forma
estruturada, iniciamos a execução do código e
finalizando todos os processos na mesma classe. Porém
sem saber estávamos usando algumas regras de POO
(Programação Orientada a Objetos) como, por exemplo,
usando a classe “System” ou “JOptionPane”.
● Essas classes não foram criadas por nós, porém elas
foram reaproveitadas em nosso código com objetivo de
resolver os nossos algoritmos.
Introdução de POO com Java
● A Programação orientada a objeto é uma metodologia
que os programadores utilizam com objetivo de
● atingir alguns requisitos importantes na construção de
um bom programa como:
○ Organizar o código: Com o nosso código dividido,
podemos facilmente dar manutenção ou encontrar
algum erro mais facilidade.
○ Reutilização do código: Não precisamos reescrever
todo o código, quando necessitamos dele
novamente.
○ Manter Padrões: Utilização de um mesmo padrão
conceitual durante todo o processo de criação do
código.
Orientação a Objetos
● É baseada na modelagem de objetos do mundo real.
● O que é um objeto?
○ Uma entidade que você pode reconhecer;
○ Uma abstração de um objeto do mundo real;
○ Uma estrutura composta de dados e operações sobre
esses dados
● Cada objeto possui características (atributos),
comportamento (operações) e Unicidade (endereço de
memória);
Características: ligada (SIM/NÃO),
potência, voltagem;
Comportamento: ligar, desligar, queimar
O que são Classes?
● Podemos entender uma classe como um modelo ou
como uma especificação para um conjunto de objetos,
ou seja, a descrição genérica dos objetos individuais
pertencentes a um dado conjunto.
● A partir de uma classe é possível criar quantos objetos
forem desejados.
● Uma classe define as características e o comportamento
de um conjunto de objetos. Assim, a criação de uma
classe implica definir um tipo de objeto em termos de
seus atributos (variáveis que conterão os dados) e seus
métodos (funções que manipulam tais dados).
Construindo Classes em Java
● Com base na descrição de um problema, identifiquem
as principais entidades envolvidas e definam as
classes correspondentes, juntamente com seus
atributos e métodos para representar o estado e o
comportamento de cada entidade no sistema.
Construindo Classes em Java
● Em uma competição de pesca esportiva, diversos
pescadores se reúnem em um local específico, cada um
com seu próprio barco e equipamento de pesca. O
objetivo da competição é capturar o maior número de
peixes possível dentro de um determinado período de
tempo. Os pescadores competem entre si para ver quem
consegue capturar os peixes mais pesados e/ou em
maior quantidade.
Construindo Classes em Java
● Os pescadores têm diferentes níveis de experiência e
preferências quanto ao tipo de peixe que desejam
capturar. Alguns podem ser mais experientes e
habilidosos, enquanto outros podem ser novatos em
competições desse tipo. Cada pescador possui seu
próprio barco, que pode variar em capacidade e tipo,
como barcos pequenos para pesca individual ou barcos
maiores para pesca em grupo.
Construindo Classes em Java
● Durante a competição, os pescadores navegam em seus
barcos até os locais de pesca e lançam suas linhas na
água, aguardando pacientemente as mordidas dos
peixes. Quando um peixe é capturado, o pescador o
registra e continua pescando em busca de mais
capturas.
● Ao final da competição, os peixes capturados por cada
pescador são pesados e medidos para determinar o
vencedor. O pescador com o maior peso total de peixes
capturados ou o maior peixe individual é declarado o
vencedor da competição.
Construindo Classes em Java
● O modificador modif é opcional; se presente, pode ser
uma combinação de public e abstract ou final.
● A definição da classe propriamente dita está entre as
chaves { e }, que delimitam blocos na linguagem Java.
Construindo Classes em Java
● Este corpo da classe usualmente obedece à seguinte
seqüência de definição:
○ 1. As variáveis de classe (definidas como static),
ordenadas segundo sua visibilidade: iniciando pelas
public, seguidos pelas protected, pelas com visibilidade
padrão (sem modificador) e finalmente pelas private.
○ 2. Os atributos (ou variáveis de instância) dos objetos
dessa classe, seguindo a mesma ordenação segundo a
visibilidade definida para as variáveis de classe.
○ 3. Os construtores de objetos dessa classe.
○ 4. Os métodos da classe, geralmente agrupados por
funcionalidade.
Construtores
● Quando usamos a palavra-chave new , estamos construindo
um objeto. Sempre quando o new é chamado, ele executa o
construtor da classe.
● O construtor da classe é um bloco declarado com o mesmo
nome que a classe:
Sistema de Biblioteca
Desenvolva um sistema de biblioteca que permita o
gerenciamento de livros, autores, usuários e empréstimos.
Considere as seguintes especificações:
Sistema de Biblioteca
● Atributos:
○ título, Autor, ano de publicação,
número de páginas, quantidade
disponível.
● Métodos:
○ listarDetalhes()
○ verificarStatus()
Sistema de Biblioteca
● Atributos:
○ nome, data de nascimento,
país de origem, estilo
● Métodos:
○ publicarLivro(Livro livro,
String dataNascimento)
Sistema de Biblioteca
● Atributos:
○ nome, sobrenome, cpf, data de
nascimento, e-mail, login, senha.
● Métodos:
○ criarLogin(String login, String senha)
○ logar(String login, String senha)
Sistema de Biblioteca
● Atributos:
○ nome, cpf, Livro[] livros_disponiveis, Livros[] livros_emprestados
● Métodos:
○ emprestarLivro(Usuario usuario, Livro livro, Date dataEmprestimo,)
○ devolverLivro(Usuario usuario, Livro livro, Date dataDevolucao)
Sistema de Biblioteca
Sistema de Biblioteca
Sistema de Biblioteca
Sistema de Streaming
Pacotes
● Quando desenvolvemos um sistema orientado a objetos,
definimos um conjunto de classes.
● Para organizar essas classes surge o conceito de pacote.
● Pacote é um envoltório de classes, ou seja, guarda
classes e outros pacotes logicamente semelhantes ao
pacote que os contém.
● Podemos visualizar os pacotes como diretórios ou
pastas, nos quais podemos guardar arquivos (classes) e
outros diretórios (pacotes) que tenham conteúdo
relacionado com o pacote que os contém.
Sistema de Gestão de Transportadora
Encapsulamento
● Encapsular é esconder como as coisas funcionam por
trás de uma interface externa;
○ Interface são as operações que o objeto fornece para
os demais objetos;
○ É um dos conceitos básicos da Orientação a Objeto;s
● A ideia é de uma “caixa preta”:
○ Não é necessário saber os detalhes de
funcionamento interno do objeto, mas sim como
utilizá-lo;
● • Ex.: caixa automático
○ Como ele é implementado internamente?
○ Utilizamos através de operações bem conhecidas
Encapsulamento
public - ou publico, qualquer classe pode ter acesso;
private - ou privado, apenas os métodos da própria classe pode manipular o
atributo;
protected - ou protegido, pode ser acessado apenas pela própria classe ou pelas
suas subclasses.
Encapsulamento
● Alguns benefícios:
○ A implementação interna de um objeto pode mudar
e o resto do sistema não é afetado (desde que a
interface de acesso não mude);
○ Maior segurança ao proteger os atributos de um
objeto de alterações indevidas por outros objetos;
○ Maior independência entre os objetos, pois eles só
precisam conhecer a interface externa definida.
Métodos Set e Get
● O modificador private faz com que ninguém consiga
modificar e tampouco ler o atributo em questão. Com
isso, temos um problema:
○ como fazer para mostrar o saldo de uma Conta, uma
vez que nem mesmo podemos acessá-lo para
leitura?
● Os métodos nomeados como “set” e “get” são
responsáveis respectivamente por alterar um atributo e
mostrar um atributo da minha classe;
É necessário utilizarmos métodos Get e Set?
Variáveis Estáticas
● Variáveis estáticas são valores que se for alterado em um objeto de
uma determinada classe todos os objetos da estanciados da mesma
classe, automaticamente terá o mesmo valor;
● A Classe “Pessoa” terá um atributo chamado:
○ ondeVivo = “Planeta Terra”.
n Pessoas 1 Planeta Terra
Variáveis Estáticas
● As variáveis estáticas não pertencem especificamente a nenhuma instância
de objeto e sim uma referencia da classe.
● Para acessarmos um atributo estático, não usamos a palavra chave “this”, e
sim o nome da classe, no exemplo alteramos o termo “this” no método
setOndeVivo pelo nome da classe que contém a variável estática (Pessoa).
Métodos Estáticos
● Caracteriza-se por ser uma referencia de método da Classe, sem
a necessidade de instanciarmos um objeto para utilizá -lo.
● Métodos estáticos aceitam apenas variáveis estáticas;
● Para que possamos utilizar os métodos estáticos precisamos
inserir o nome da classe com o método estático criado.
E quando eu não quero
que qualquer um
modifique?
Principais conceitos orientados a objetos:
● Objetos: Representam uma entidade e um componente básico
essencial.
● Classe: Modelo de um objeto.
● Abstração: Comportamento de uma entidade do mundo real.
● Encapsulamento: Mecanismo de vincular os dados e
escondê-los do mundo exterior.
● Herança: Mecanismo de criar novas classes a partir de uma
existente.
● Polimorfismo: Define o mecanismo em diferentes formas.
Onde mais podemos utilizar o pensamento orientado a objetos?
Diagramas UML
● A diagramação em Linguagem de modelagem unificada
(UML) foi criada para estabelecer uma linguagem visual
comum no complexo mundo do desenvolvimento de software;
● É semanticamente e sintaticamente rica, para arquitetura,
design e implementação de sistemas de software complexos,
tanto estruturalmente quanto para comportamentos;
Diagramas UML
● O desenvolvimento de sistemas centra-se em três modelos gerais e
diferentes do sistema:
○ Funcional: são diagramas de caso de uso, e descrevem a
funcionalidade do sistema a partir do ponto de vista do usuário.
○ Objeto: são diagramas de classes, e descrevem a estrutura do
sistema em termos de objetos, atributos, associações e
operações.
○ Dinâmico: diagramas de interação, diagramas de máquinas de
estados e diagramas de atividade, e são usados para descrever
o comportamento interno do sistema.
● Estes modelos de sistemas são visualizados por meio de dois tipos
diferentes de diagramas: estrutural e comportamental.
Diagrama de Classes
Diagrama de Classes
Diagrama de
Atividades
Diagrama de Caso de Uso
Sistema de Gestão de Transportadora
1º passo: entender o problema
2º passo: diagrama de caso de uso
3º passo: diagrama de classe (1ª versão)
4º passo: desenvolvimento em Java (1º versão)