28
Linguagem de Programação IV / J2ME – Introdução Linguagem de Programação IV Introdução Prof. Alessandro Borges

Linguagem de Programação IValessandro.borges/LP_IV/... · Não há herança múltipla em Java, mas é possível simulá-la implementando interfaces

Embed Size (px)

Citation preview

Page 1: Linguagem de Programação IValessandro.borges/LP_IV/... · Não há herança múltipla em Java, mas é possível simulá-la implementando interfaces

Linguagem de Programação IV / J2ME – Introdução

Linguagem de Programação IV

Introdução

Prof. Alessandro Borges

Page 2: Linguagem de Programação IValessandro.borges/LP_IV/... · Não há herança múltipla em Java, mas é possível simulá-la implementando interfaces

Linguagem de Programação IV / J2ME – Introdução

Tópicos

Orientação a objetos

Classe

Objeto

Abstração

Encapsulamento

Herança

Polimorfismo

Plataforma Java

2

Page 3: Linguagem de Programação IValessandro.borges/LP_IV/... · Não há herança múltipla em Java, mas é possível simulá-la implementando interfaces

Linguagem de Programação IV / J2ME – Introdução

Orientação a Objetos3

Page 4: Linguagem de Programação IValessandro.borges/LP_IV/... · Não há herança múltipla em Java, mas é possível simulá-la implementando interfaces

Linguagem de Programação IV / J2ME – Introdução

Orientação a Objetos

“POO é um paradigma de programação de computadores onde se usam classes e objetos, criados a partir de modelos concretos e abstratos do mundo real para representar e processar dados.”

4

Page 5: Linguagem de Programação IValessandro.borges/LP_IV/... · Não há herança múltipla em Java, mas é possível simulá-la implementando interfaces

Linguagem de Programação IV / J2ME – Introdução

Orientação a Objetos

Classe

Trata-se de um molde, uma

estrutura das linguagens de

programação para definir

um modelo do mundo real,

na qual são representadas as

propriedades,

comportamentos e

relacionamentos

Objeto (ou instância)

É a materialização de uma

classe. É quem representa

realmente as propriedades e

executa as operações. São

dependentes das classes,

que definem o seu tipo

modelo Lampada // representa uma lâmpada em usoinício do modelo

dado estadoDaLampada; // indica se ligada ou não

operação acente() // acente a lâmpadainicio

estadoDaLampada = acesa;fim

operação apaga() // apaga a lâmpadainicio

estadoDaLampada = apagado;fim

operação mostraEstado() // mostra estado da lâmpadainicio

se (estadoDaLampada == aceso)imprime “A lâmpada está acesa”;

senãoimprime “A lâmpada está apagada”;

fimFim do modelo

5

Page 6: Linguagem de Programação IValessandro.borges/LP_IV/... · Não há herança múltipla em Java, mas é possível simulá-la implementando interfaces

Linguagem de Programação IV / J2ME – Introdução

Orientação a Objetos

Mesmo em uma linguagem orientada a objetos é possível

programar de forma estruturada. Para evitar este erro é essencial

que se conheça alguns princípios que promovem a orientação a objetos.

ENCAPS

ULAMENTO

A

B

S

T

R

A

Ç

Ã

O

H

E

R

A

N

Ç

A

P

O

L

I

M

O

R

F

I

S

M

O

6

Page 7: Linguagem de Programação IValessandro.borges/LP_IV/... · Não há herança múltipla em Java, mas é possível simulá-la implementando interfaces

Linguagem de Programação IV / J2ME – Introdução

Orientação a ObjetosAbstração

Capacidade de analistas e programadores de compreender o

mundo real e mapeá-lo no mundo computacional.

Fundamental para o raciocínio e a resolução de problemas

Devemos nos importar com os aspectos relevantes do problema em

questão.

Na orientação a objetos, buscar sempre programas bem

modularizados, onde cada módulo é responsável por determinada

tarefa/atividade.

Antes de programar buscar entender o problema, o domínio da

aplicação e definir possíveis classes, atributos e métodos

7

Page 8: Linguagem de Programação IValessandro.borges/LP_IV/... · Não há herança múltipla em Java, mas é possível simulá-la implementando interfaces

Linguagem de Programação IV / J2ME – Introdução

Orientação a ObjetosAbstração

Imagine esse problema• Uma universidade oferece cursos.

• Cada curso possui várias disciplinas.

• Uma disciplina é ofertada em turmas.

• Um aluno é alguém matriculado em

determinado curso.

• Um professor é alguém que leciona

determinada disciplina para

determinadas turmas.

• Por fim, a turma é uma oferta

específica de uma disciplina

compreendendo data, hora e

alunos.

8

Page 9: Linguagem de Programação IValessandro.borges/LP_IV/... · Não há herança múltipla em Java, mas é possível simulá-la implementando interfaces

Linguagem de Programação IV / J2ME – Introdução

Orientação a ObjetosEncapsulamento

Consiste em “esconder” o funcionamento de mecanismos internos possibilitando a utilização de recursos através de uma interface pública

Em um objeto, consiste em impedir o acesso irrestrito aos atributos (dados) e esconder os detalhes internos de funcionamento do objeto.

Sua utilização só é possível através de alguns métodos de acesso ou interface pública

Para isso os atributos são declarados como não visíveis (privados) sendo o acesso a eles feito através de métodos de acesso (getter's e setter's).

9

Page 10: Linguagem de Programação IValessandro.borges/LP_IV/... · Não há herança múltipla em Java, mas é possível simulá-la implementando interfaces

Linguagem de Programação IV / J2ME – Introdução

Orientação a ObjetosEncapsulamento

O encapsulamento básico em Java consiste em declarar todos os

atributos como privados e criar métodos de acesso (getter's e

setter's) para cada um deles.

10

Page 11: Linguagem de Programação IValessandro.borges/LP_IV/... · Não há herança múltipla em Java, mas é possível simulá-la implementando interfaces

Linguagem de Programação IV / J2ME – Introdução

Orientação a ObjetosHerança

Um mecanismo de OO para criar

classes e subclasses que

compartilham atributos e métodos.

Utilizado quando classes apresentam

descrição e comportamentos

similares.

É usada para criar objetos que tem

"tudo que outro objeto tem, mas

também possui alguns detalhes

próprios".

Permite pegar uma classe e utilizar ou

alterar suas propriedades e métodos,

incluindo propriedades e métodos.

11

Page 12: Linguagem de Programação IValessandro.borges/LP_IV/... · Não há herança múltipla em Java, mas é possível simulá-la implementando interfaces

Linguagem de Programação IV / J2ME – Introdução

Orientação a ObjetosHerança

Imagine a classe “FiguraGeometrica”

como a classe base para o desenho

de outras formas geométricas Como a classe “Círculo” e “Poligono”.

Note que em termos de código basta

utilizar o extends

Public abstract class FormaGeometrica {public Ponto centro;public Double raio;public abstract double CalcularArea();public abstract double CalcularPerimetro();public abstract void Redesenhar();public void moverPara(Ponto novoCentro) {

centro = novoCentro;Redesenhar();

}}

Class Circulo extends FormaGeometrica {Circulo(Ponto c, double r) {

centro = c;reio = r;

}public double CalcularArea() {

return (Math.PI * Math.pow(raio, 2));}public double CalcularPerimetro() {

return (2 * Math.PI * raio)}public void Redesenhar() {

// não implementadaSystem.out.println(“Figura redesenhada”);

}}

Class Poligono extends FormaGeometrica {public int numLados;public double tamLado;public double angRotacao = 0;Poligono (int n, double tam, Ponto c, double r) {

numLados = n;tamLado = tam;centro = c;raio – r;

}public double CalculaPerimetro() {

return (numLados * tamLado);}public double CalcularArea() {

return (raio * CalcularPerimetro() / 2);}public double Rotacionar(double incremento) {

angRotacao = Math.IEEEremainder(angRotacao+incremento, 360.0);return angRotacao;

}}

12

Page 13: Linguagem de Programação IValessandro.borges/LP_IV/... · Não há herança múltipla em Java, mas é possível simulá-la implementando interfaces

Linguagem de Programação IV / J2ME – Introdução

Orientação a ObjetosPolimorfismo

Significa que um objeto pode ser tratado como se fosse

um tipo diferente de objeto. (???)

Isso está muito relacionado com o conceito de herança.

Como o mecanismo de herança permite criar classes a

partir de outras pre-existentes, é possível criar relações

“é um tipo de”.

Assim, é possível possuir classes genericas e classes

especializadas

Ex: “funcionário é um tipo de pessoa”, “carro é um tipo de veículo”.

É esta relação (é um tipo de) que permite a existência

do polimorfismo.

13

Page 14: Linguagem de Programação IValessandro.borges/LP_IV/... · Não há herança múltipla em Java, mas é possível simulá-la implementando interfaces

Linguagem de Programação IV / J2ME – Introdução

Orientação a ObjetosPolimorfismo

Em determinadas situações é

necessário trabalhar com uma lista

de mamíferos, sem um tipo definido,

então é possível que uma referência

do tipo "Mamífero" aponte para

objetos do tipo “Homem”, “Cão” ou

“Gato”.

Assim, qualquer tipo de objeto

poderá ser tratado da mesma

forma.

14

Voltando ao nosso esquema da herança, temos as classes

“Homem”, “Cão” e “Gato” herdando da classe “Mamífero”.

Page 15: Linguagem de Programação IValessandro.borges/LP_IV/... · Não há herança múltipla em Java, mas é possível simulá-la implementando interfaces

Linguagem de Programação IV / J2ME – Introdução

Orientação a ObjetosPolimorfismo

Existem 2 tipos de polimorfismo para os

métodos:

Sobrecarga de métodos

Reescrita ou override

15

Page 16: Linguagem de Programação IValessandro.borges/LP_IV/... · Não há herança múltipla em Java, mas é possível simulá-la implementando interfaces

Linguagem de Programação IV / J2ME – Introdução

Orientação a ObjetosPolimorfismo

Sobrecarga de métodos:

São métodos com mesmo nome, mas com assinaturas diferentes

(lista de argumentos diferentes).

A sobrecarga pode ocorrer numa

mesma classe ou entre subclasses

e classe pai.

Em Java, se dois métodos tiverem

mesmo nome e mesmos

argumentos diferindo apenas no

valor de retorno ocorre um erro de

compilação.

public class Somador {public int somar(int a, int b) {

return (a+b);}public int somar(float a, float b) {

return (a+b);}

public class AoQuadrado {public float elevarQuadrado(float a) {

return (a*a).}public double elevarQuadrado(float a) {

return (double)(a*a);}

}

OK!

ERRO!

16

Page 17: Linguagem de Programação IValessandro.borges/LP_IV/... · Não há herança múltipla em Java, mas é possível simulá-la implementando interfaces

Linguagem de Programação IV / J2ME – Introdução

Orientação a ObjetosPolimorfismo

Reescrita ou override.

Quando um método de uma classe base (pai) é

reescrito na classe

derivada.

O método reescrito tem

a mesma assinatura

(mesmo nome, mesma

lista de argumentos e

mesmo valor retornado)

que o método da classe

pai.

public class Cliente {

protected double desconto = 0.1; // 10%

public double calcularDesconto(double valor) {

if (valor > 500)

return (valor * desconto);

else return 0.0;

}

class ClienteEspecial extends Cliente {

ClienteEspecial (double desc) {

desconto = desc;

}

// Sobreposicao do método calcularDesconto da classe base Cliente

public double calcularDesconto (double valor) {

return (valor * desconto);

}

}

public static void main(String args[]) {

Cliente cli[] = (new Cliente(), // cli[0]

new ClienteEspecial[] // cli[1]

for (int i = 0; i < 2; i++)

System.out.println(cli[i].calcularDesconto(100);

}

}

17

Page 18: Linguagem de Programação IValessandro.borges/LP_IV/... · Não há herança múltipla em Java, mas é possível simulá-la implementando interfaces

Linguagem de Programação IV / J2ME – Introdução

Orientação a ObjetosPolimorfismo

Restrições: alguns métodos não podem ser sobreescritos

(override) em função dos modificadores que recebem:

final: um método final nunca muda, todas as classes derivadas

utilizam a mesma implementação. As chamadas aos métodos

finais são resolvidas em tempo de compilação (estática)

static: é implicitamente um método final

private: são implicitamente finais, porque não podem ser sobrescritos nas classes derivadas (embora seja possível escrever

um método com mesma assinatura numa classe derivada).

18

Page 19: Linguagem de Programação IValessandro.borges/LP_IV/... · Não há herança múltipla em Java, mas é possível simulá-la implementando interfaces

Linguagem de Programação IV / J2ME – Introdução

Orientação a ObjetosImportante

Visibilidade de métodos e atributos:

public (+): público, visivel a todas as classes.

private (-): privada, somente membros da classe podem acessá-lo.

protected (#): protegido, membros da classe e das classes

derivadas podem acessá-lo.

default ou package (~): pacote, membros de classes presentes no

mesmo pacote podem acessá-lo.

19

Page 20: Linguagem de Programação IValessandro.borges/LP_IV/... · Não há herança múltipla em Java, mas é possível simulá-la implementando interfaces

Linguagem de Programação IV / J2ME – Introdução

Orientação a ObjetosImportante

Importância dos construtores:

Métodos especiais que servem para criar uma

instância de uma classe, invocados

automaticamente quando se cria um objeto (new).

Pode haver vários métodos construtores variando-se

os argumentos (polimorfismo por sobrecarga).

20

Page 21: Linguagem de Programação IValessandro.borges/LP_IV/... · Não há herança múltipla em Java, mas é possível simulá-la implementando interfaces

Linguagem de Programação IV / J2ME – Introdução

Orientação a ObjetosImportante

Herança múltipla:

Não há herança múltipla em Java, mas é possível simulá-la implementando interfaces.

Interface:

Define um contrato que deve ser seguido pelas classes que a

implementam.

Uma interface é uma classe abstrata onde todos os métodos

são implicitamente abstratos e públicos e todos os atributos são

implicitamente públicos, estáticos e finais.

A classe que a implementar é obrigada a implementar os seus

métodos.

21

Page 22: Linguagem de Programação IValessandro.borges/LP_IV/... · Não há herança múltipla em Java, mas é possível simulá-la implementando interfaces

Linguagem de Programação IV / J2ME – Introdução

Orientação a ObjetosImportante

Tratamento de exceções:

Fundamental para garantir a robustez, confiabilidade e usabilidade da aplicação.

Evita que o usuário seja surpreendido por mensagens indecifravéis.

Java possui um mecanismo completo para o tratamento de exceções, use-o sempre.

22

Page 23: Linguagem de Programação IValessandro.borges/LP_IV/... · Não há herança múltipla em Java, mas é possível simulá-la implementando interfaces

Linguagem de Programação IV / J2ME – Introdução

Plataforma Java23

Page 24: Linguagem de Programação IValessandro.borges/LP_IV/... · Não há herança múltipla em Java, mas é possível simulá-la implementando interfaces

Linguagem de Programação IV / J2ME – Introdução

Plataforma Java

Java não se restringe à linguagem de programação.

Java é uma plataforma que engloba, basicamente, 3

elementos:

A linguagem Java.

A máquina virtual Java (JVM).

Conjunto de API’s (bibliotecas).

Java foi construída para trabalhar em diversos tipos de

hardwares: de smart cards a servidores.

24

Page 25: Linguagem de Programação IValessandro.borges/LP_IV/... · Não há herança múltipla em Java, mas é possível simulá-la implementando interfaces

Linguagem de Programação IV / J2ME – Introdução

Plataforma Java25

Page 26: Linguagem de Programação IValessandro.borges/LP_IV/... · Não há herança múltipla em Java, mas é possível simulá-la implementando interfaces

Linguagem de Programação IV / J2ME – Introdução

Plataforma Java

Java 2 Standard Edition (J2SE)

Uma versão desenvolvida para desktops.

O núcleo básico é este, as demais versões se baseiam nesta.

Java 2 Enterprise Edition (J2EE):

Plataforma para aplicações do tipo multiusuário corporativas.

Baseada em J2SE, com APIs para computação do lado do servidor.

Java 2 Micro Edition (J2ME):

Conjunto de tecnologias desenvolvidas para dispositivos pequenos,

como pagers, celulares, smartphones, etc.

Usa subconjuntos de componentes J2SE, como máquinas virtuais

“menores” (KVM), e APIs mais “enxutas” de componentes.

26

Page 27: Linguagem de Programação IValessandro.borges/LP_IV/... · Não há herança múltipla em Java, mas é possível simulá-la implementando interfaces

Linguagem de Programação IV / J2ME – Introdução

Plataforma Java27

Page 28: Linguagem de Programação IValessandro.borges/LP_IV/... · Não há herança múltipla em Java, mas é possível simulá-la implementando interfaces

Linguagem de Programação IV / J2ME – Introdução

Linguagem de Programação IV

Introdução

Prof. Alessandro Borges