poo slides01

54
Programação Orientada a Objetos Prof. Julio Tofoli 2008

Upload: jmtofoli

Post on 06-Jun-2015

1.113 views

Category:

Technology


2 download

TRANSCRIPT

Page 1: Poo slides01

Programação Orientada a Objetos

Prof. Julio Tofoli

2008

Page 2: Poo slides01

Orientação a Objeto X Java

OO não se restringe a java. OO é maior que java!

Smaltalk C, C++, C#, Cisso, Caquilo… Análise OO.

Java é uma ferramenta que implementa muito bem o

conceito de orientação a objetos.

Page 3: Poo slides01

Java é uma linguagem fácil de aprender.

Nenhuma linguagem poderosa como o Java é fácil de aprender.

É sempre fácil escrever programas do tipo “Alo Mundo”.

A parte complexa vem da orientação a objetos e das classes presentes na linguagem. Temos mais de 1.500 classes e interfaces diferentes.

Como você imagina o futuro do desenvolvimento de sistemas??

Baseado em eventos(Delphi, VB, FoxPro) ou Orientado a Objetos??

Dedicação!

Erros Comuns Sobre Java

Page 4: Poo slides01

O ambiente Java facilita a programação.

Não é o melhor ambiente do mundo, especialmente se comparado às linguagens visuais que temos hoje, como o Visual Basic e Delphi, etc...

Em um ambiente de alta produtividade, o uso do Java deve ser muito racional, levando em conta as dificuldades da codificação.

Tem melhorado muito... Netbeans, Eclipse.

Erros Comuns Sobre Java

Page 5: Poo slides01

Java será a linguagem universal no futuro.

É possível, em teoria. Java não é recomendado para solucionar todos os problemas.

Java é apenas mais uma linguagem como qualquer outra.

A linguagem Java, apenas pelo fato de permitir que um programa seja executado em qualquer plataforma, já realizou revolução suficiente.

Além disso, a linguagem foi desenhada para se utilizar da internet, e os conceitos de ambiente multitarefa auxiliam o produto a ter poucas comparações no mercado hoje.

Erros Comuns Sobre Java

Page 6: Poo slides01

Todos os programas Java tem que ser executados dentro de um navegador.

Um dos usos do Java é a confecção de applets. Java também serve para programar aplicativos, servlets, JavaBeans, componentes e uma grande gama de produtos.

Javascript é uma versão simplificada do Java. (meu Deus!!)

Javascript é uma linguagem utilizada em navegadores.Ela foi inventada pela Netscape, e sua sintaxe é semelhante à da linguagem Java. Com exceção do nome, as semelhanças terminam ai.

Erros Comuns Sobre Java

Page 7: Poo slides01

Pilares da Orientação a Objeto

Encapsulamento:

Consiste em ou restringir o acesso do usuario a detalhes de

implementação que são inerrentes somente a um objeto.

Herança:

Mecanismo que permite criar uma nova classe baseada em uma ja

existente, herdando suas propriedades e comportamentos.

Polimorfismo:

Muitas formas...

Em resumo, permite que um objeto de uma classes especifica possa

ter comportamentos distintos em diversas situações.

Page 8: Poo slides01

Java Basic's

Classes;Objetos;Atributos;Métodos;Tipos Primitivos;Variáveis Instância/Referência;Modificadores de Acesso;Padrões JavaBeans;Exercicios;

Page 9: Poo slides01

Classes

Em orientação a objetos, dizemos que um (ou mais) objetos

pertencem a uma classe quando eles são muito semelhantes, de

acordo com certos padrões.

Assim, dependendo da situação, alguém pode dizer que sua

bicicleta é um veículo, pois ele anda sobre rodas e carrega uma

pessoa.

Se seguirmos esse padrão, uma motocicleta também é um veículo,

assim como um automóvel ou até um avião.

Na verdade, quando programamos em linguagens orientadas a

objetos, antes de tudo nós construimos as classes - os modelos

-, para depois usá-las na criação de objetos daquele tipo.

Java Basic's

Page 10: Poo slides01

Classes

A POO permite programar atraves de uma estratégia que representa de forma mais verdadeira os aspectos reais do problema.

Assim, quando se "lê" um programa orientado a objeto, podemos ver não apenas a solução, mas também a descrição do problema em termos do próprio problema.

Isso é Abstração!!!

Java Basic's

Page 11: Poo slides01

Classes:

Nada mais são, do que a especificação de algo que um dia poderá

vir a ser um objeto.

Entendido?

Java Basic's

Page 12: Poo slides01

Estrutura básica de uma classe java

[modificador_da_classe] class <nome_da_classe>

[extends] <nome_da_super_classe>

[implements <interface_1>... ]

{// Método[modificadores] <tipoDeRetorno> <nome_do_método> ([parametros])

{

Variáveis internas ao método.

Corpo do Método

}

//Atributos ou variaveis

[modificador] <tipo_da_Variavel> <nome_da_variavel>

}

Page 13: Poo slides01

Java Basic's Convenções JavaBeans:

Identificadores devem começar com uma letra, um cifrão($), um underscore(_), e NÃO podem começar com um numero;

Depois do primeiro caracter, podem conter qualquer combinação de letras, numeros, etc;

Não há limite para numero de caracteres de um identificador;

Não se pode usar uma palavra chave como identificador;

Identificadores em java são case sensitive e devem seguir o

modelo camelCase.

Page 14: Poo slides01

Java Basic's

Palavras reservadas:

Page 15: Poo slides01

Java Basic's Convenções JavaBeans:

Identificadores válidos: int _a; int $b; int ________c_2; int _$; int pode_ter_nome_detalhado_sim; boolean isValido;

Indentificadores inválidos: int :b; int -f; int e#; int .f; String 7g;

Page 16: Poo slides01

Java Basic's

Convenções de Declarações JavaBeans:

Classes e Interfaces: Primeira letra Maiuscula: class Dog; class Conta; interface Calculadora;

Métodos: Primeira letra minuscula: public double getSalario(); void setNome(String nomeDoInfeliz);

Variáveis: Primeira letra minuscula: int valorDaCompra; String nomeDoInfame;

Constantes: Toda MAIUSCULA; public s tatic final VALOR_DO_PI = 3.1416;

Page 17: Poo slides01

Objeto:

Trata-se da instância de uma classe.

Java Basic's

Page 18: Poo slides01

Objetos:

Imagine um molde de carros em miniatura. Pois bem, essa é nossa

classe, ou seja, algo que define o formato, tamanho e diversos outros aspectos dos objetos fabricados, no caso, os modelos em escala dos veiculos.

Percebeu a diferença? A classe é um molde para os objetos. Quando se diz: “Instância de uma classe ou tipo”, nada mais é do que o objeto dessa classe ou tipo.

Java Basic's

Mustang1 Mustang2 Mustang3

Page 19: Poo slides01

Atributos:

Atributos definem o estado do objeto em um determinado instante, por exemplo:

Imagine um objeto do tipo Carro (é a classe), com os seguintes atributos: corPintura, corInterior, motorizacao e combustivel.

Então assuma também que os valores para esses atributos são respectivamente: preto, cinza, v8 e nitrometano.

Java Basic's

Page 20: Poo slides01

Métodos:

Métodos definem o comportamento do objeto em um

determinado instante, por exemplo:

Seguindo o exemplo anterior, todos os Carros: aceleram, abastecem, daoPartida, desligam, etc...

Esses comportamentos são seus métodos.

Java Basic's

Page 21: Poo slides01

Métodos:

Métodos definem o comportamento do objeto em um determinado instante, por exemplo:

Seguindo o exemplo anterior, todos os Carros: aceleram, abastecem, daoPartida, desligam, etc...

Esses comportamentos são seus métodos.

Java Basic's

Page 22: Poo slides01

Atributos e Métodos:

Resumindo:

Os atributos de instância (ou de objeto) definem o estado

desse objeto.

Os métodos de instância (ou de objeto) definem os

comportamentos desse objeto.

Java Basic's

Page 23: Poo slides01

Java Basic's

Page 24: Poo slides01

Tipos Primitivos:

Os tipos primitivos (não são classes) correspondem a

dados mais simples (não são objetos) e independem da

plataforma a qual o sistema “rodará”.

São eles:

Java Basic's

Page 25: Poo slides01

Tipos Primitivos:

Java Basic's

Page 26: Poo slides01

Tipos Primitivos:

Java Basic's

Page 27: Poo slides01

Variáveis:

Relembre o conceito de objetos. Agregue a esse conceito, o fato de que todo objeto criado ficará armazenado em memória principal, ou seja, a sua memória RAM.

Como acessar esses objetos? Como alterar suas propriedades (atributos)? Como alterar seus comportamentos (métodos)?

Java Basic's

Page 28: Poo slides01

Variáveis:

Sim, elas... as variaveis!!!

De Referência: São uma espécie de link (ponteiro) para o objeto na

memória.

Mustang mustang1 = new Mustang();

De Instância: São variaveis definidas dentro da classe, fora de

qualquer método, e são inicializadas no momento em que a classe é instânciada.

class Mustang(){String corPintura;int capacidadeTanque;

}

Java Basic's

Page 29: Poo slides01

Java Basic's Construtores:

O construtor é um tipo método especial que esta presente em todas as classes java.

Pode ser usado para inicializar os atributos de um objeto;

Construtores não possuem valores de retorno.

public class Automovel extends Veiculo {

/** Creates a new instance of Automovel */ public Automovel(String mar, String mod, String c, byte r, byte p, short t) { super(mar, mod, c, r); this.nroPortas = p; this.trocasOleo = 0; }}

Page 30: Poo slides01

Java Basic's

Modificadores de Acesso:

Modificadores de acesso controlam como as classes e seus membros são visíveis por outras classes e instâncias de outras classes.

Page 31: Poo slides01

Java Basic's Modificadores de Acesso:

Java possui 4 níveis de controle de acesso que são aplicados a classes, atributos e métodos.

private;

default (friendly, amigavel ou package);

protected;

public

Page 32: Poo slides01

Java Basic's Modificadores de Acesso:

private:

O modificador de acesso private e o mais restritivo de todos,

variáveis, métodos e construtores com esse modificador são visíveis somente dentro da definição da própria classe,

acessando-o diretamente ou através de uma instância da mesma classe.

O modificador private pode ser usado em variáveis, métodos e construtores.

Em classes, seu uso é restrito a classes internas, ou seja, classes declaradas dentro de outras classes

Page 33: Poo slides01

Java Basic's

Modificadores de Acesso:

default:

O acesso default em Java decorre da não especificação de nenhum dos três modificadores de acesso (private, protected, public)

O acesso default pode ser aplicado a classes, métodos, variáveis e construtores. Outros nomes também usados para designar esse tipo de acesso são: "package" e “amigavel".

O efeito de aplicarmos o acesso default a um elemento (ou seja, não aplicar nenhum dos três modificadores) é que elementos com esse

tipo de acesso podem somente ser acessados por classes do mesmo pacote.

Page 34: Poo slides01

Java Basic's Modificadores de Acesso:

protected:

O modificador de acesso protected define que variáveis, métodos e construtores com esse modificador podem somente ser

acessados por classes no mesmo pacote ou subclasses da classe onde o elemento foi definido, é importante notar

que para os elementos serem acessados na subclasse não é preciso estar no mesmo pacote da classe pai.

O modificador protected pode ser aplicado somente em variáveis, métodos e construtores, o seu uso em classes não é permitido.

Page 35: Poo slides01

Java Basic's

Modificadores de Acesso:

public:

O mais abrangente de todos os tipos de acesso, o modificador

public declara que elementos com esse modificador são acessíveis de qualquer classe Java. Este modificador é

aplicável a variáveis, métodos, construtores e classes.

Page 36: Poo slides01

Java Basic's Modificadores:

final:

O modificador final pode ser aplicado a variáveis, métodos e classes.

O comportamento descrito pelo operador final varia de elemento para elemento, mas tem um conceito em comum, o conceito de

imutabilidade, isto é, elementos final não podem ser mudados.

public final class Imutavel {}

public class Impossivel extends Imutavel {} //erro de compilacao

Page 37: Poo slides01

Java Basic's

Modificadores:

final:

public class Transacao { public final boolean verificarSenha() { ... }}

public class TransacaoPublica extends Transacao { public final boolean verificarSenha() { //erro de compilacao ... }}

Page 38: Poo slides01

Java Basic's Modificadores:

public class Carro { public final int numeroDeRodas = 4; public int numeroDePortas = 4;

public static void main(String args[]) { Carro c1, c2; final Carro c3;

c1 = new Carro(); c1.numeroDeRodas = 5; //erro de compilacao

c2 = c3 = c1; c2.numeroDePortas = 2; c3.numeroDePortas = 2;

c3 = c2; //erro de compilacao }}

Page 39: Poo slides01

Java Basic's

Modificadores:

static:

Este modificador pode ser aplicado a variáveis, métodos e a uma porção de código que não está dentro de nenhum método, geralmente referenciado como bloco estático.

A idéia geral sobre o modificador static é que elementos com esse modificador estão associados com a classe e não com instâncias dessa classe.

Page 40: Poo slides01

Java Basic's

Modificadores:

static:

Uma variável estática é compartilhada por todas as instâncias de uma classe, ou seja, ao invés de cada instância da classe ter uma cópia dessa variável ela é uma única variável compartilhada por todos as instâncias.

Para a existência de uma variável estática não é preciso nem mesmo a criação de uma instância da classe que contenha a variável, é necessário somente que a classe seja carregada na Máquina Virtual Java, já que está é criada e inicializada no momento de carga da classe.

Em relação a métodos as mesmas explicações são verdadeiras, ou seja, métodos podem ser chamados mesmo sem nenhuma instância da classe ter sido construída. Um bom exemplo de métodos estáticos existe em toda aplicação Java, o método main() é invocado sem a existência de nenhuma instância.

Page 41: Poo slides01

Java Basic's

Modificadores:

static:

public class BlocoEstatico { static int i = 4;

static { System.out.println("Carregando BlocoEstatico\r\n valor de i: " + i); }

public static void main(String args[]) { System.out.println("metodo main"); }}

Page 42: Poo slides01

Atributos e Métodos Estáticos

Métodos estáticos:

Não precisam de uma instância para serem acessados.

São declarados através do modificador “static”

public static double RetornaDiferença(double v1, double v2)

Métodos estáticos são utilizados quando o comportamento do método não

depende do estado de um objeto.

Métodos que só necessitem dos dados passados como argumentos

(parâmetros) para efetuar a tarefa requerida.

Utilizado para criação de bibliotecas de métodos

Classes que contém somente métodos estáticos, agrupados por função.

Page 43: Poo slides01

Atributos e Métodos Estáticos

Crie uma classe conversor de unidades.

Implemente métodos estáticos para conversão das seguintes unidades:

KM para Metros;

Toneladas para Kilos;

Real para Dolar; (envie a cotação como parametro).

Crie uma classe para testar os conversores;

Page 44: Poo slides01

Atributos e Métodos Estáticos

Atributos estáticos:

Campos compartilhados por todas as instâncias de uma classe.

Somente um valor será armazenado em um campo estático.

Caso o valor seja alterado por alguma instância, a alteração irá refletir em todas as

outras instâncias da classe.

Declarado através do modificador “static”

Utilizado normalmente em contadores que exigem uma sequencia unica entre as

diversas instâncias da classe.

Page 45: Poo slides01

Atributos e Métodos Estáticos

Crie uma classe Fornecedor com a seguinte estrutura:

Atributos:

Codigo;

Nome;

CNPJ.

Métodos:

Fornecedor;

incrementaCodigo.

exibeCodigo.

Em seguida crie uma classe para testar sua classe Fornecedor.

Page 46: Poo slides01

Atributos e Métodos Estáticos

Modifique sua classe Fornecedor para que o a sequencia dos códigos seja única

entre todas suas instâncias.

Page 47: Poo slides01

Java Basic's

Modificadores:

abstract:

O modificador abstract pode ser aplicado somente a classes e métodos.

Classes abstratas provem um modo de adiar a implementação de métodos para subclasses.

Uma classe abstrata não pode ser instanciada, ou seja, não podemos chamar seus construtores.

Page 48: Poo slides01

Java Basic's

Modificadores:

abstract:

public abstract class Figura { public abstract void desenhar();

public static void main(String args[]) { Figura f; f = new Figura(); //erro de compilacao }}

Page 49: Poo slides01

Java Basic's

Modificadores:

abstract:

Classes devem ser declaradas abstratas quando qualquer uma das três afirmativas abaixo forem verdadeiras:

a) A classe contêm métodos abstratos;

b) A classe herda de classes abstratas e não define todos os seus métodos abstratos;

c) A classe implementa uma interface, mas não declara todos os seus métodos.

Page 50: Poo slides01

Java Basic's Modificadores:

native; Quando desejamos acessar chamadas do Sistema Operacional, interfacear

com dispositivos de hardware, reusar código não Java, implementar código onde o tempo é um parâmetro critico, etc.

transient; É aplicado somente a variáveis. Quando uma variável é declarada transient

ela não é guardada como parte do estado de persistência do objeto.

synchronized; Esse modificador é usado para sincronizar o acesso a código em

ambientes paralelos.

volatile Este modificador indica que variáveis podem ser modificadas

assincronamente e o compilador não deve fazer qualquer assunção sobre ela.

Page 51: Poo slides01

Java Basic's

Modificadores de Acesso - Resumo:

Classes só podem usar 2 dos 4 níveis de acesso: default e public;

Membros (atributos e metodos) podem ser: private; default; protect; public.

A visibilidade das classes gira em torno de se o código pode: Criar um instância de outra classe; Estender (criar subclasses) de outra classe; Acessar métodos e variáveis de outra classe;

Page 52: Poo slides01

Sempre mantenha seus dados como privateSe seus atributos forem todos public, você estará violando o encapsulamento.

Sempre inicialize seus dados.Java não fará a inicialização de variáveis locais para você. Não confie nos valores padrão, sempre prefira fazê-lo você mesmo.Use os Construtores.

Não utilize muitos tipos básicos em uma classe.A idéia aqui é substituir os tipos básicos que são relacionados entre si por outras classes. Como exemplo:

private String rua;private String cidade;private String estado;private String cep;

Dicas para a Construção de Classes

Page 53: Poo slides01

Nem todos os atributos necessitam de métodos.

Imagine uma classe que represente os empregados da sua empresa.

Você provavelmente não necessita ter um método para alterar a data de

contratação de uma pessoa, uma vez que o objeto está construído.

Então isso pode ser resolvido no construtor, sem a necessidade de um método.

Use definições padrão para suas classes.

Sempre use um padrão. Isso torna muito mais fácil a manutenção e entendimento

de código. Normalmente, o padrão usado em Java (javabeans) é:

Constantes

Construtores

Métodos

Métodos Estáticos

Instâncias de variáveis

Variáveis Estáticas

Dicas para a Construção de Classes

Page 54: Poo slides01

Prime Sempre pela Alta Coesão e pelo Baixo Acoplamento

Acoplamento é quanto um elemento (classe, método, função, módulo,

componente) depende e conhece do outro. Elementos muito acoplados geralmente

são muito dependentes, mudou um e você com certeza vai ter que mudar o outro.

Coesão é o quanto as tarefas que um elemento realiza estão relacionadas com um

mesmo conceito. Baixa coesão teria uma classe que, por exemplo, imprime um

documento e exibe um formulário para o usuário, neste caso provavelmente você

deveria dividir esta classe em mais de uma.

Dicas para a Construção de Classes