138
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

Orientação a Objetos para Desenvolvedores Android

Embed Size (px)

DESCRIPTION

Material de Orientação a Objetos com Java objetivando auxiliar no aprendizado do paradigma e da linguagem Java, preparando o aluno para programar para Google Android

Citation preview

Page 1: Orientação a Objetos para Desenvolvedores Android

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

Page 2: Orientação a Objetos para Desenvolvedores Android

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

Page 3: Orientação a Objetos para Desenvolvedores Android
Page 4: Orientação a Objetos para Desenvolvedores Android

Objetivo

Implementar sistemas baseando-se no projeto arquitetural e lógico,

com foco em aplicativos móveis.

Page 5: Orientação a Objetos para Desenvolvedores Android

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

Page 6: Orientação a Objetos para Desenvolvedores Android

O Que temos no nosso mundo??

Page 7: Orientação a Objetos para Desenvolvedores Android

O Que temos no nosso mundo??

Page 8: Orientação a Objetos para Desenvolvedores Android

O Que a criança faz?

Anda Brinca Pula Grita

Ações executadas por esses indivíduos…

Page 9: Orientação a Objetos para Desenvolvedores Android

Resumindo…

Atributos: braços, cor do cabelo, nome, rg, cpf, idade, sexo

Métodos: andar, correr, chorar, gritar, cantar

Page 10: Orientação a Objetos para Desenvolvedores Android

E onde fica a classe? Que parada é essa?

Page 11: Orientação a Objetos para Desenvolvedores Android

Classe é isso!

Objetos

Page 12: Orientação a Objetos para Desenvolvedores Android

Classe

• Uma classe representa um modelo para a construção de objetos.

• Uma classe é um tipo de dado.

Page 13: Orientação a Objetos para Desenvolvedores Android

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;

Page 14: Orientação a Objetos para Desenvolvedores Android

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.

Page 15: Orientação a Objetos para Desenvolvedores Android

Primitivos

Page 16: Orientação a Objetos para Desenvolvedores Android

Primitivos • São tipos de dados

Page 17: Orientação a Objetos para Desenvolvedores Android

Primitivo x Referência

Page 18: Orientação a Objetos para Desenvolvedores Android

• 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”;

Page 19: Orientação a Objetos para Desenvolvedores Android

String – Estudo de Código

Page 20: Orientação a Objetos para Desenvolvedores Android

Um pouco mais…

Page 21: Orientação a Objetos para Desenvolvedores Android

Um pouco mais…

Page 22: Orientação a Objetos para Desenvolvedores Android

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

Page 23: Orientação a Objetos para Desenvolvedores Android

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>;

}

Page 24: Orientação a Objetos para Desenvolvedores Android

O Que seria atributo e o que seria método nesse cenário?

Quem é o objeto?

Será preciso criar uma classe?

Page 25: Orientação a Objetos para Desenvolvedores Android

Triangulo

base , altura e area à atributos

Page 26: Orientação a Objetos para Desenvolvedores Android

Como efetuar o calculo?

calcularArea à método

Page 27: Orientação a Objetos para Desenvolvedores Android

Testando

Page 28: Orientação a Objetos para Desenvolvedores Android

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)

Page 29: Orientação a Objetos para Desenvolvedores Android

Encapsulamento

NOME CPF RG

retornaAltura

retornaNome

Atributos

Métodos

Requisição externa para o valor do atributo Nome.

Page 30: Orientação a Objetos para Desenvolvedores Android

Encapsulando campo… #refactor #oo • Ocultar o campo para o mundo externo, liberando apenas

métodos de leitura e escrita;

Page 31: Orientação a Objetos para Desenvolvedores Android

Isso é encapsulamento??

Page 32: Orientação a Objetos para Desenvolvedores Android

Mais prática para mais conhecimentos…

Criar a classe Quadrado

Area = base * base

Page 33: Orientação a Objetos para Desenvolvedores Android

Uma pergunta…!

• Como faríamos para calcular a área, mas, sem passar os valores pelos métodos de acesso?

Page 34: Orientação a Objetos para Desenvolvedores Android

Polimorfismo

Page 35: Orientação a Objetos para Desenvolvedores Android

Como isso é possível?

Page 36: Orientação a Objetos para Desenvolvedores Android

Herança

Page 37: Orientação a Objetos para Desenvolvedores Android

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

Page 38: Orientação a Objetos para Desenvolvedores Android

Cenário

Page 39: Orientação a Objetos para Desenvolvedores Android

Herança

Superclasse ou classe pai

Subclasse ou classe filha

•  A herança implica em um relacionamento “é-um”.

Page 40: Orientação a Objetos para Desenvolvedores Android

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.

Page 41: Orientação a Objetos para Desenvolvedores Android

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.

Page 42: Orientação a Objetos para Desenvolvedores Android

Mão no código J

Page 43: Orientação a Objetos para Desenvolvedores Android
Page 44: Orientação a Objetos para Desenvolvedores Android

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

Page 45: Orientação a Objetos para Desenvolvedores Android

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

Page 46: Orientação a Objetos para Desenvolvedores Android

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.

Page 47: Orientação a Objetos para Desenvolvedores Android

FINAL e Herança qual o resultado?

Page 48: Orientação a Objetos para Desenvolvedores Android

FINAL Quando CLASSE, impede que seja herdada Se for um método, impede a sobrescrita

Page 49: Orientação a Objetos para Desenvolvedores Android

Como seria calcular o total do salário de 5 funcionários “mistos” (com array) ?

Page 50: Orientação a Objetos para Desenvolvedores Android

Cenário

Uma empresa

Colaboradores Vendas

Precisa receber um pagamento. Precisa pagar um colaboradores

calcularPagamento calcularPagamento

Como atribuir polimorfismo?

Page 51: Orientação a Objetos para Desenvolvedores Android

O QUE FAZER?

Page 52: Orientação a Objetos para Desenvolvedores Android

Herança vs Interfaces

Page 53: Orientação a Objetos para Desenvolvedores Android

Quando usar ?

Page 54: Orientação a Objetos para Desenvolvedores Android

Cenário

Uma empresa

Colaboradores Vendas

Precisa receber um pagamento. Precisa pagar um colaboradores

calcularPagamento calcularPagamento

É possível tratar de forma polimórfica?

Page 55: Orientação a Objetos para Desenvolvedores Android

Precisamos de um contrato!

Page 56: Orientação a Objetos para Desenvolvedores Android

Interface

é um

Page 57: Orientação a Objetos para Desenvolvedores Android

Objetivo?

Tratar as classes de uma única forma, como um tipo só

Page 58: Orientação a Objetos para Desenvolvedores Android

Ambas possuem um comportamento em comum: calcularPagamento

Interface

Page 59: Orientação a Objetos para Desenvolvedores Android
Page 60: Orientação a Objetos para Desenvolvedores Android
Page 61: Orientação a Objetos para Desenvolvedores Android

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

Page 62: Orientação a Objetos para Desenvolvedores Android

Como ficaria Colaborador?

Page 63: Orientação a Objetos para Desenvolvedores Android

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

Page 64: Orientação a Objetos para Desenvolvedores Android

Interfaces em Repositórios de Dados

Page 65: Orientação a Objetos para Desenvolvedores Android

classes abstratas vs interfaces ?

Page 66: Orientação a Objetos para Desenvolvedores Android

java.io.Serializable java.util.Collection java.util.List java.util.Set

Algumas interfaces da API

Page 67: Orientação a Objetos para Desenvolvedores Android

Collection

Page 68: Orientação a Objetos para Desenvolvedores Android

Collection Uma coleção é um objeto que pode manter referências a outros objetos.

Page 69: Orientação a Objetos para Desenvolvedores Android
Page 70: Orientação a Objetos para Desenvolvedores Android

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.

Page 71: Orientação a Objetos para Desenvolvedores Android

É 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.

Page 72: Orientação a Objetos para Desenvolvedores Android

Implementações

Onde declaramos quantas posições terá no ArrayList ?

Page 73: Orientação a Objetos para Desenvolvedores Android

Leitura de Objetos no ArrayList

Page 74: Orientação a Objetos para Desenvolvedores Android

Isso é possível?

Isso é bom ?

Page 75: Orientação a Objetos para Desenvolvedores Android

Outro cenário…

Funciona ?

• O método add recebe um Object como parâmetro, o método get retorna um Object.

Page 76: Orientação a Objetos para Desenvolvedores Android

Casting ?

Page 77: Orientação a Objetos para Desenvolvedores Android

Casting

Funciona ?

Não !

Page 78: Orientação a Objetos para Desenvolvedores Android

e agora ? o.O

Page 79: Orientação a Objetos para Desenvolvedores Android

Wrapper

Page 80: Orientação a Objetos para Desenvolvedores Android

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

Page 81: Orientação a Objetos para Desenvolvedores Android

Qdizer que é preciso fazer casting toda vez com um elemento dentro do ArrayList ?

Page 82: Orientação a Objetos para Desenvolvedores Android

Generic’s

Page 83: Orientação a Objetos para Desenvolvedores Android
Page 84: Orientação a Objetos para Desenvolvedores Android

onde anda a interface List?

Page 85: Orientação a Objetos para Desenvolvedores Android

Dica: Orientado a Interface

Invés de:

Page 86: Orientação a Objetos para Desenvolvedores Android

E as outras List •  LinkedList

•  Representa uma lista onde os elementos são duplamente encadeados.

• Vector •  Representa uma lista segura contra threads (thread-safe).

Page 87: Orientação a Objetos para Desenvolvedores Android

Outras coleções… • Set não mantém duplicatas de objetos e utiliza o

hashCode e equals

Page 88: Orientação a Objetos para Desenvolvedores Android

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

Page 89: Orientação a Objetos para Desenvolvedores Android

Map

Page 90: Orientação a Objetos para Desenvolvedores Android

Há a interface Collection e a classe Collections. Essa ultima, fornece métodos dentre outras coisas, para buscar e classificar uma collection.

Pouco mais…..

Page 91: Orientação a Objetos para Desenvolvedores Android

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)

Page 92: Orientação a Objetos para Desenvolvedores Android

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

Page 93: Orientação a Objetos para Desenvolvedores Android

Exceptions

Page 94: Orientação a Objetos para Desenvolvedores Android

•  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.

Page 95: Orientação a Objetos para Desenvolvedores Android

Aqui, fica o código que PODE disparar uma exceção.

Aqui, fica o código que será executado caso à exceção ocorra.

Page 96: Orientação a Objetos para Desenvolvedores Android

O tipo da exceção que o código dentro do bloco try pode disparar.

Page 97: Orientação a Objetos para Desenvolvedores Android

Exemplo

Page 98: Orientação a Objetos para Desenvolvedores Android

Executando com tratamento

Não há exceção !

Page 99: Orientação a Objetos para Desenvolvedores Android

Executando a exception

A exceção foi disparada e tratada.

Page 100: Orientação a Objetos para Desenvolvedores Android

Sem tratar a exception

Resultado:

Page 101: Orientação a Objetos para Desenvolvedores Android

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.

Page 102: Orientação a Objetos para Desenvolvedores Android

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.

Page 103: Orientação a Objetos para Desenvolvedores Android

Podemos criar nossas próprias exceptions?

Page 104: Orientação a Objetos para Desenvolvedores Android

A classe ContaCorrente, executando a operação de debitar

Caso o método debitar falhe o que acontece?

Page 105: Orientação a Objetos para Desenvolvedores Android

Uma possibilidade é, alterar o método debitar() para retornar um boolean indicando se a operação foi executada:

Agora sim, né ?

Page 106: Orientação a Objetos para Desenvolvedores Android

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.

Page 107: Orientação a Objetos para Desenvolvedores Android

Agora, qual método pode disparar essa exceção ?

throws – Diz que um método pode lançar uma exceção

Page 108: Orientação a Objetos para Desenvolvedores Android

Disparando a exceção

throw – Dispara à exceção!

Page 109: Orientação a Objetos para Desenvolvedores Android

Testando

Executando:

Resultado:

Saldo

Page 110: Orientação a Objetos para Desenvolvedores Android

Como capturar nossas exceções?

Page 111: Orientação a Objetos para Desenvolvedores Android

Capturando/Tratando

Resultado:

Page 112: Orientação a Objetos para Desenvolvedores Android

Mais um pouco de Exceptions…

SaldoInsuficienteException herda agora de Exception.

Nada impede que o usuário não capture a exceção.

Page 113: Orientação a Objetos para Desenvolvedores Android

Exceções verifcadas e não

verificadas?

Page 114: Orientação a Objetos para Desenvolvedores Android

Quando verificada

Agora o compilador obriga o tratamento da exceção ou a declaração da mesma.

Page 115: Orientação a Objetos para Desenvolvedores Android
Page 116: Orientação a Objetos para Desenvolvedores Android

Finally • Sempre será executado independente de ocorrer ou

não uma exceção.

Page 117: Orientação a Objetos para Desenvolvedores Android

•  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

Page 118: Orientação a Objetos para Desenvolvedores Android

Sobrecarregando o construtor

Page 119: Orientação a Objetos para Desenvolvedores Android

Capturando mensagem

Page 120: Orientação a Objetos para Desenvolvedores Android

Inner Class

Page 121: Orientação a Objetos para Desenvolvedores Android

Classes Internas Comuns Classes Internas de Métodos

Page 122: Orientação a Objetos para Desenvolvedores Android

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

Page 123: Orientação a Objetos para Desenvolvedores Android

Exemplo

Page 124: Orientação a Objetos para Desenvolvedores Android

Criando objetos da Interna na Externa

Page 125: Orientação a Objetos para Desenvolvedores Android

Criando objetos da interna em outras classes

Instancia da Externa Instancia da Interna

Page 126: Orientação a Objetos para Desenvolvedores Android

Acessando membros da classe interna

Page 127: Orientação a Objetos para Desenvolvedores Android

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;

Page 128: Orientação a Objetos para Desenvolvedores Android

Exemplo de Interna de método

Page 129: Orientação a Objetos para Desenvolvedores Android

Classes Anônimas

Page 130: Orientação a Objetos para Desenvolvedores Android

Usadas comumente em padrões de projetos como Listeners

Page 131: Orientação a Objetos para Desenvolvedores Android

Botão sair com java Swing

Quantos botões sair uma aplicação tem?

Page 132: Orientação a Objetos para Desenvolvedores Android

Usando classe anônima

Criando um objeto que implementa ActionListener J

Page 133: Orientação a Objetos para Desenvolvedores Android

Mais… • Apenas acessa variáveis local FINAL;

• Acessando também membros privados da externa;

• Sempre será herança ou implementação de interface;

Page 134: Orientação a Objetos para Desenvolvedores Android

.: M_V_C :.

Page 135: Orientação a Objetos para Desenvolvedores Android

Padrão de Projeto que influência na arquitetura

Page 136: Orientação a Objetos para Desenvolvedores Android

Estrutura

Page 137: Orientação a Objetos para Desenvolvedores Android

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).

Page 138: Orientação a Objetos para Desenvolvedores Android

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;