ANÁLISE E PROJETO DE
SISTEMAS ORIENTADO A
OBJETOS – PARTE 2
Prof. MSc. Iury Teixeira
Faculdade de Juazeiro do Norte
Especialização em Desenvolvimento de Aplicativos para
Dispositivos Móveis
Roteiro
•  Conceitos de OO
•  Primitivos, Referências
•  Classes, atributos e métodos
•  Construtores
•  Sobrecarga
•  Herança e Sobrescrita
(Polimorfismo)
•  Leitura de diagramas
•  Refactor
•  Interfaces
•  Coleções (List, Set, Map)
•  Exceptions
•  Classes Internas e Anônimas
•  Apresentação Final de Projeto
Implementado - MVC
Objetivo
Implementar sistemas baseando-se no
projeto arquitetural e lógico,
com foco em aplicativos móveis.
Por que Orientação a Objetos
Representar conceitos do mundo real em
sistemas computacionais
Permite troca de informações entre objetos
da aplicação através de mensagens
Reuso de Operações de forma coesa
O Que temos no nosso mundo??
O Que temos no nosso mundo??
O Que a criança faz?
Anda Brinca Pula Grita
Ações executadas por esses indivíduos…
Resumindo…
Atributos: braços, cor do cabelo,
nome, rg, cpf, idade, sexo
Métodos: andar, correr, chorar, gritar,
cantar
E onde fica a classe? Que parada é essa?
Classe é isso!
Objetos
Classe
•  Uma classe representa um modelo para a construção de
objetos.
•  Uma classe é um tipo de dado.
Resumindo…
•  Objeto: instância de uma classe
•  Classe: tipo de dado que representa a estrutura de um
objeto real ou abstrato, através de atributos e
métodos;
•  Atributo: propriedades de um objeto;
•  Método: Ações de um objeto;
Benefícios da O.O.
Promove a reutilização de código.
Flexibilização da aplicação.
Concentrar esforços no ponto do problema.
Aproximação do desenvolvimento com o mundo real.
Primitivos
Primitivos
•  São tipos de dados
Primitivo x Referência
• Referencias vs Dados Primitivos
•  Uma referência é diferente de um tipo primitivo pelo fato de não
ser capaz de armazenar o valor real do dado, mas apenas referir-
se ao dado.
•  A referência “referencia” a localização de memória onde o dado
encontra-se:
•  String linguagem= “Java”;
•  String plataforma = “Standard Edition”;
String – Estudo de Código
Um pouco mais…
Um pouco mais…
Quiz
( ) Um objeto representa a estrutura em memória de um dado.
( ) O método construtot é utilizado para criar um objeto.
( ) A classe define a estrutura de um objeto.
( ) Uma referência possui o objeto criado
( ) uma variável de tipo primitivo armazena o valor real.
( ) X sendo variável inteira, X++ será incrementado + 1 antes de sua
próxima utilização
Preparar para Mão no código J
•  Calcular área do triângulo
•  A sintaxe (em Java) geral para declarar uma classe é:
<modificador> class <NomeDaClasse>{
<Atributos>;
<construtor>;
<métodos>;
}
O Que seria atributo e o que seria
método nesse cenário?
Quem é o objeto?
Será preciso criar uma classe?
Triangulo
base , altura e area à atributos
Como efetuar o calculo?
calcularArea à método
Testando
Encapsulamento
Encapsulamento na OO refere-se ao pacote de operações
e atributos o qual represente o estado em um tipo de objeto, de tal forma
que o estado é acessível ou modificável
somente pela interface provida pelo encapsulamento.
(Page-Jones, 2000)
Encapsulamento
NOME
CPF
RG
retornaAltura
retornaNome
Atributos
Métodos
Requisição externa
para
o valor do atributo
Nome.
Encapsulando campo… #refactor #oo
•  Ocultar o campo para o mundo externo, liberando apenas
métodos de leitura e escrita;
Isso é encapsulamento??
Mais prática para mais conhecimentos…
Criar a classe Quadrado
Area = base * base
Uma pergunta…!
•  Como faríamos para calcular a área, mas, sem passar os
valores pelos métodos de acesso?
Polimorfismo
Como isso é possível?
Herança
Herança
A herança é uma forma de reutilização de software.
Classes podem herdar de classes.
Novas classes são criadas a parti das classes existentes,
absorvendo seus atributos e comportamentos
Cenário
Herança
Superclasse ou
classe pai
Subclasse ou
classe filha
•  A herança implica em um relacionamento “é-um”.
Precisamos saber que…
• Com a herança, os membros private de uma
superclasse não são diretamente acessíveis em
uma subclasse.
• Os membros public da superclasse tornam-se
membros da subclasse, utilizando o seu
acesso original de membro.
Precisamos saber que…
• Os membros protected da superclasse podem
ser acessados por subclasses, mas são privados
para qualquer classe fora da hierarquia*.
•  Os construtores não são herdados.
Mão no código J
Poderiamos criar uma instância de FormaGeometrica?
FormaGeometrica fg = new FormaGeometrica( );
Como impedir que isso
aconteça?
E o corpo do método calcular,
ficar vazio, está correto?
abstract
#refactor
Mais código J
Colaborador Horista:
- salario * quantHoras
ColaboradorSalario:
- 3 anos: 4 %
- 5 anos: 5%
- 10 anos: 7%
Fornecer também construtor
para criar o objeto sobrecarregando-os
Quiz
( ) A henraça mantém um relacionamento TEM UM
( ) Encapsulamento define esconder a lógica ou processo que será
executado
( ) Membros privados não herdados
( ) Membros estáticos sempre serão herdados a nível de pacote
( ) Quando utilizamos abstract em uma classe, a mesma não pode
ser instanciada
( ) Para acessar um membro da super classe, basta apenas utilizar o
identificador super.
FINAL e Herança
qual o resultado?
FINAL
Quando CLASSE, impede que seja herdada
Se for um método, impede a sobrescrita
Como seria calcular o total do salário de 5
funcionários “mistos” (com array) ?
Cenário
Uma empresa
Colaboradores Vendas
Precisa receber um pagamento.Precisa pagar um colaboradores
calcularPagamento calcularPagamento
Como atribuir polimorfismo?
O QUE FAZER?
Herança vs Interfaces
Quando usar ?
Cenário
Uma empresa
Colaboradores Vendas
Precisa receber um pagamento.Precisa pagar um colaboradores
calcularPagamento calcularPagamento
É possível tratar de forma polimórfica?
Precisamos de um
contrato!
Interface
é um
Objetivo?
Tratar as classes de uma única forma, como um tipo só
Ambas possuem um comportamento em comum:
calcularPagamento
Interface
Importante sobre Interfaces
•  Quando uma classe concreta implementa uma
interface, a classe torna-se obrigada a fornecer uma
implementação para o método da interface
•  Agora, uma Venda “é um” Pagavel
Como ficaria Colaborador?
Importante…
Uma classe abstrata ou não, implementa uma interface
Uma classe abstrata não é obrigada a fornecer uma implementação para
o(s) método(s) de uma interface.
Interfaces podem estender de várias interfaces
Classes implementam interfaces e não as estendem
Classes implementam interfaces e não as estendem
Uma classe podem implementar várias interfaces.
Além de métodos, interfaces podem conter constantes
Interfaces em Repositórios de Dados
classes abstratas vs interfaces ?
java.io.Serializable
java.util.Collection
java.util.List
java.util.Set
Algumas interfaces da API
Collection
Collection
Uma coleção é um objeto que pode manter referências a
outros objetos.
Collection
É a interface raiz da hierarquia.
Representa um grupo de objetos. Alguns tipos de
collection’s permitem objetos duplicados, outros não.
Alguns tipos de collection’s são ordenados outros não.
É uma Collection ordenada e
p e r m i t e e l e m e n t o s
duplicados. Os elementos de
u m a l i s t a p o d e m s e r
acessados via índices.
List
Set É uma collection que não
permite elementos
duplicados
Map
É um objeto que mapeia
chaves para valores. Não
é permitido chaves
duplicadas.
Implementações
Onde declaramos quantas posições terá no ArrayList ?
Leitura de Objetos no ArrayList
Isso é possível?
Isso é bom ?
Outro cenário…
Funciona ?
•  O método add recebe um Object como parâmetro, o
método get retorna um Object.
Casting ?
Casting
Funciona ?
Não !
e agora ? o.O
Wrapper
Wrappers
•  Maneira de empacotar primitivos em objeto
Tipo primitivos Classe equivalente
byte Byte
short Short
char Character
int Integer
long Long
float Float
doube Double
Qdizer que é preciso fazer casting toda
vez com um elemento dentro do ArrayList ?
Generic’s
onde anda a interface List?
Dica: Orientado a Interface
Invés de:
E as outras List
•  LinkedList
•  Representa uma lista onde os elementos são duplamente
encadeados.
•  Vector
•  Representa uma lista segura contra threads (thread-safe).
Outras coleções…
• Set não mantém duplicatas de objetos e utiliza o
hashCode e equals
Map
•  Map Não é uma collection. Representa uma estrutura de
dados, onde se tem uma chave(identificador) mapeada para
um valor.
Equals e hasCode são importantes para as chaves
Map
Há a interface Collection e a classe Collections.
Essa ultima, fornece métodos dentre outras
coisas, para buscar e classificar uma collection.
Pouco mais…..
Mão no código J
•  Uma classe que pergunte a secretária o nome do aluno e as duas
notas de um aluno.
•  Devem ser criados 3 alunos;
•  armazenar os dados digitados em uma List (banco de dados virtual)
Quiz
( ) o ArrayList é um conjuto que acessa objetos através de índices.
( ) o Set é utilizado quando se deseja manter objetos repitidos.
( ) A classe Collection possui métodos que auxiliam trabalhar com
objetos em conjutos.
( ) O Generics possibilita força o tipo de objeto no conjuto.
( ) o Generics sempre são executados em tempo de execução
Exceptions
•  Tratar à exceção, significa desenvolver um software
tolerante aquela exceção. Em outras palavras, caso
aquela exceção ocorra, o software ainda sim continuará
em funcionamento.
Aqui, fica o código que PODE disparar uma
exceção.
Aqui, fica o código que será executado
caso à exceção ocorra.
O tipo da exceção que o código
dentro do bloco try pode disparar.
Exemplo
Executando com tratamento
Não há exceção !
Executando a exception
A exceção foi disparada e tratada.
Sem tratar a exception
Resultado:
Entendendo o erro
Onde à exceção começou.
Onde à exceção terminou.
Quais métodos, em quais classes foram
chamados, entre o começo da exceção
e termino da mesma.
Teste você agora J
•  Uma divisão de um inteiro por zero causa uma
ArithmeticException. Implemente um tratamento para
essa exceção, e caso a mesma ocorra, informe ao
usuário que ele não pode dividir um inteiro por zero.
Podemos criar nossas próprias exceptions?
A classe ContaCorrente, executando a operação de debitar
Caso o método debitar falhe o que acontece?
Uma possibilidade é, alterar o método debitar() para retornar um boolean
indicando se a operação foi executada:
Agora sim, né ?
Exceções – Disparando Exceções.
• Podemos criar uma exceção e dispará-la.
• O primeiro passo é definir uma classe que
represente a exceção.
• Essa classe deverá herdar da classe
RuntimeException.
Agora, qual método pode disparar essa exceção ?
throws – Diz que um método pode lançar uma exceção
Disparando a exceção
throw – Dispara à exceção!
Testando
Executando:
Resultado:
Saldo
Como capturar
nossas exceções?
Capturando/Tratando
Resultado:
Mais um pouco de Exceptions…
SaldoInsuficienteException herda agora de Exception.
Nada impede que o usuário não capture a exceção.
Exceções
verifcadas e não
verificadas?
Quando verificada
Agora o compilador obriga o tratamento da exceção ou a declaração da
mesma.
Finally
•  Sempre será executado independente de ocorrer ou
não uma exceção.
•  A exceção pode disponibilizar informações sobre o erro.
•  Por exemplo, a SaldoInsuficienteException poderia
informar qual o valor do saldo atual da conta.
•  Para fazer isso, defina um construtor na classe
Exception com os devidos parâmetros
Sobrecarregando o construtor
Capturando mensagem
Inner Class
Classes Internas Comuns
Classes Internas de Métodos
Classes Internas
•  Declarada dentro de outra classe;
•  Possue um relacionamento especial com sua externa;
•  Acessando membros privados..
•  Pode ter todos os membros que um classe normal tem;
•  Não pode ter membros estáticos
Exemplo
Criando objetos da Interna na Externa
Criando objetos da interna em outras
classes
Instancia da Externa
Instancia da Interna
Acessando membros da classe interna
Internas de Métodos
•  São apenas acessíveis no método – esse é seu escopo.
•  Apenas final e abstract;
•  Apenas acessa variáveis local FINAL;
•  Acessando também membros privados da externa;
Exemplo de Interna de método
Classes Anônimas
Usadas comumente em padrões de
projetos como Listeners
Botão sair com java Swing
Quantos botões sair uma aplicação tem?
Usando classe anônima
Criando um objeto que implementa ActionListener J
Mais…
•  Apenas acessa variáveis local FINAL;
•  Acessando também membros privados da externa;
•  Sempre será herança ou implementação de interface;
.: M_V_C :.
Padrão de Projeto que influência na
arquitetura
Estrutura
Agora é de verdade!
•  Implementar seguindo o padrão MVC, o modelo de seu
projeto, utilizando os recursos da OO.
•  Três casos de uso devem ser codificados;
•  Tratar possíveis falhas do sistema;
•  Seguir boas práticas discutidas (ex: orientado a interfaces) e
padrões;
•  15 min de apresentação para cada fábrica (após o intervalo).
Lembrar da bricadeira da bola
No domingo:
apresentar no inicio;
a galera corrigir falhas nos diagramas e documentos e apresentar novamente
e código com regra de negocio e validação de falhas;

Orientação a Objetos para Desenvolvedores Android