Orientação a Objetos para Desenvolvedores Android

Preview:

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

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;

Recommended