Beruflich Dokumente
Kultur Dokumente
Ricardo Linden
Classes e Objetos
Voltando ao passado...
Vamos rever os conceitos de orientao a objetos, de forma genrica, mas nos preparando para implement-los em Java. Seria interessante ler o captulo 4 do livro texto Core Java 2 - V.1 - Fundamentos Cornell, Gary; Horstmann, Cay Ed. Makron Books
Classes e Objetos
Classes e Objetos
Abstrao
Abstrao o termos que descreve escolher o que importante sobre nossos objetos quando temos o objetivo de resolver um determinado problema. o processo de descrever as caractersticas essenciais de um objeto no mundo
Classes e Objetos
Definio Formal
Abstrao Uma abstrao descreve as caractersticas essenciais de um objeto; aquelas que o distinguem de todos os outros tipos de objeto e fornece assim para aquele que analisa um sistema fronteiras conceituais bem definidas. --Booch, 1994
Isto : a abstrao descreve o que ns pensamos que importante em um objeto, os aspectos que nos fazem inclu-lo em nossos sistemas.
Classes e Objetos 5
Classes
O que uma classe? Uma classe um conjunto de objetos que possuem uma estrutura e um comportamento em comum. --Booch 1994 Lula, Fernando Henrique, Itamar e Collor so todos membros da mesma classe Todas as TVs Sony XPD-4582 TVs so da mesma classe
Classes e Objetos
Classes
Ser que Lula e Fernando Henrique so da mesma classe?
Se a abstrao em que estamos pensando presidentes da repblica ento sim. Se a abstrao em que estamos pensando diferencia entre presidentes de partidos distintos, ento no.
O processo de abstrao define se o que uma classe e que objetos fazem parte dela.
Classes e Objetos
Classe
A classe de um objeto tambm chamada s vezes de seu tipo. Em Java, assim como em outras linguagens OO, uma classe um modelo que descreve o que os objetos desta classe podem fazer.
Por exemplo, a classe TV informa quais estados um objeto desta classe pode assumir e a que mtodos ele vai responder.
Cada instncia de uma classe (objeto) possui suas prprias cpias das variveis de estado.
Classes e Objetos
O que um objeto?
Um objeto no mundo - seja um carro, um avio ou um computador, normalmente so coisas que associamos a substantivos. No necessariamente associamos objetos a coisas concretas. Outros objetos possveis so conta corrente, mensagem de e-mail, um pedido, uma conexo telefnica, etc.
Classes e Objetos
Objetos
O estado consiste do valor das propriedades de um objeto:
Um avio pode ter seus motores ligados ou desligados, pode estar a uma determinada altura, velocidade e direo, ter assentos ocupados, etc. Uma conexo via internet pode estar ativa ou no, ter mandado e recebido n bytes, estar estabelecida a uma certa velocidade, com um certo protocolo, etc.
Classes e Objetos
10
Classes e Objetos
A classe um molde que podemos usar para criar novas isntncias de objetos (como se fosse uma receita ou uma planta). A partir das receitas, podemos construir novos porta-avies, novas TVs, novos projetores, etc.
Classes e Objetos
11
Classes e Objetos
Receita Classe AircraftCarrier pode possui setVelocidade velocidade setNumAvioes nm. de avies setLeme leme
Vinson
setNumAvioes
setVelocidade
setVelocidade
Classes e Objetos
12
is-a relacionamento do tipo herana. Exemplo : cadeira isa mvel. has-a relacionamento em que um objeto contm outro como parte de seus atributos. Exemplo : pedido has-a item. uses-a relacionamento em que um objeto faz uso de servios providos por outra classe ou objeto. Exemplo: nossos programas at agora uses-a classe JDOptionPane.
Classes e Objetos
13
Mtodos
Mtodos podem ser pensados como sendo os verbos associados aos nossos objetos:
Um mtodo tambm pode ser pensado como uma forma de alterar o estado de um objeto:
Pressionar o boto de liga/desliga muda o estado de uma TV. Move o leme de um navio altera sua direo.The Roosevelt has
Classes e Objetos
14
Mtodos
Mtodos, em uma programao OO bem feita, so a epiderme de um objeto Para acessar ou alterar um estado dentro de um objeto, precisamos usar um mtodo Objeto Projetor setFora Fora Resoluo Brilho setResoluo
setBrilho
Classes e Objetos 15
Encapsulamento
Quando s podemos acessar o estado de um objeto atravs de seus mtodos, dizemos que estamos usando encapsulamento. Por que usar isto?
Impede que outros atribuam valores invlidos para o estado do objeto, como colocar uma resoluo invlida para o projetor ou tentar acelerar o avio para uma velocidade que ele no alcana
Permite que alteremos as estruturas de dados internas de um objeto sem afetar os outros mtodos que o acessam. Por exemplo, imagine que 500 objetos mudassem o valor do canal da TV e ns mudssemos o seu armazenamento de um byte para dois.
Classes e Objetos
16
Encapsulamento
O encapsulamento a base da boa programao orientada a objetos. Fazendo objetos bem encapsulados, ns garantimos sua reusabilidade e a boa manutenibilidade de todos nossos sistemas. Muitos diro que uma boa programao estruturada tambm bem encapsulada e tambm atinge os objetivos de se fazer bons cdigos. Isto verdade, mas a programao imperativa fornece vrios mecanismos para se burlar este tipo de boa prtica, especialmente quando falamos de grandes projetos em que muitos programadores esto envolvidos.
Classes e Objetos
17
Definio Formal
Encapsulamento
Encapsulamento o processo de compartimentalizao dos elementos que constituem a estrutura e o comportamento de um objeto, servindo para separar a interface contratual da sua implementao --Booch 1994
Isto : a forma de garantir que podemos mudar a vontade o funcionamento interno de um objeto sem alterar sua face externa (interface com o mundo)
Classes e Objetos
18
Encapsulamento
Um objeto encapsulado deve ser pensado como uma caixa preta Seus algoritmos internos so escondidos do cliente (aquele que o usa), que apenas pode invocar os mtodos definidos na interface.
Cliente
Mtodos
Dados
Classes e Objetos
19
Encapsulamento
Tendo em vista que nosso objetivo sempre fazer os melhores sistemas possveis, ns vamos sempre procurar criar classes e objetos que respeitem o preceito bsico do encapsulamento.
Classes e Objetos
20
Abstrao e Encapsulamento
A abstrao diz como um objeto deve se relacionar com o mundo.
Uma boa abstao garante que nossas classes fazem aquilo que necessrio para resolver o problema que temos em mos.
O Encapsulamento garante que o mundo no tem nenhuma relao ou conhecimento do que acontece dentro de um objeto.
Um bom encapsulamento garante que nosso cdigo de boa qualidade e pode ser reutilizado.
Classes e Objetos
21
Quais Mtodos?
Como decidir quais mtodos vamos colocar em uma classe? Os mtodo definem o comportamento de um objeto, isto , o que ele capaz de fazer. Os mtodos tambm representam a interface de um objeto com o mundo, ou seja, o que o mundo pode pedir ao objeto. Por exemplo
Uma conta bancria tem uma lista de coisas que podem ser realizadas com ela, como abrir, fechar, depositar, sacar, etc.
Classes e Objetos
22
Identidade
Nem todos os objetos so iguais, mesmo que pertenam a uma mesma classe:
O retroprojetor que estamos usando no o mesmo que est sendo usado em outra turma, mesmo que seja da mesma marca e modelo.
Classes e Objetos
23
Identidade
Nimitz
setVelocidade Velocidade NumAvioes Leme
setLeme setNumAvioes
Roosevelt
setNumAvioes
Vinson
setNumAvioes
setVelocidade
setVelocidade
Classes e Objetos
24
Definio Formal
Identidade Identidade a propriedade de um objeto que o distingue de forma inequvoca de outro objeto --Booch 1994
De forma geral objetos so identificados de forma unvoca pelas suas variveis de referncia, que so usualmente chamadas de seus nomes Entretanto, cuidado ao chamar assim, pois elas s se apontam para um objeto, no sendo iguais a ele.
Classes e Objetos 25
Resumo de objetos
Objetos possuem
estados um conjunto de caractersticas de cada objeto. Mudar o estado de um objeto no altera o estado de outro objeto. comportamento define o que o objeto capaz de fazer
Encapsulamento esconde do mundo como implementamos o estado que alterado pelo comportamento que lhe apresentamos.
Classes e Objetos
26
Escrevendo as classes...
Agora vamos comear a aplicar estes conceitos dentro do Java. Seria interessante ler o captulo 4 do livro texto Core Java 2 - V.1 - Fundamentos
No estou insistindo s por teimosia. Comear a trabalhar com orientao a objetos no fcil! Os conceitos podem ser extremamente confusos primeira vista.
Classes e Objetos 27
Lembrando : Classes
So o elemento bsico da programao orientada a objeto, tanto em Java quanto em qualquer outra LPOO.
A classe define as estruturas (variveis de instncia) de um objeto e sua interface funcional (mtodos).
Uma classe a planta/receita de um objeto
Por exemplo, a classe String usada para definir objetos String Cada objeto String contem caracteres especficos (seu estado). Cada objeto String pode realizar servios (ter comportamentos) tais como toUpperCase,length, concant, etc.
Classes e Objetos
28
Lembrando : Objetos
Um objeto tem:
Por exemplo, seja uma moeda que pode ser jogada para cima de forma que resulte em cara ou coroa
Classes
Algumas classes, como a classe String j existem dentro da biblioteca padro de classes do Java.
Ns podemos querer escrever nossas prprias clases para definir objetos especficos para nossas necessidades. Por exemplo, poderamos querer escrever uma classe que simule uma moeda. A partir desta classe ns poderamos criar muitos objetos diferentes representando vrias moedas (mais ou menos como a casa da moeda, que faz um molde e depois funde vrias cpias).
Classes e Objetos 30
Classes
Uma classe contm declaraes de atributos e declaraes de mtodos.
int x, y; char ch;
Declaraes de Mtodo
Classes e Objetos
31
Classes
Um dos atributos de uma classe pode ser um objeto de outra classe
String s; int a[];
Isto representa um tipo relacionamento especial chamado has-a (possui), que ser discutido com todo o cuidado mais adiante.
Classes e Objetos
32
Escrevendo mtodos
Uma declarao de mtodo especifica o cdigo que ser executado quando o mtodo invocado (chamado) Quando um mtodo invocado, o flxuo de controle vai para dentro dele e executa seu cdigo (exatamente igual a um procedimento ou funo em linguagem imperativa) Quando o mtodo termina, o fluxo retorna para a instruo seguinte quela que chamou-o. A invocao pode retornar um valor ou no, dependendo de como o mtodo foi definido.
Classes e Objetos 33
myMtodo();
Classes e Objetos
34
obj.doIt();
helpMe();
Classes e Objetos
35
Declarao de Mtodo
Toda declarao de um mtodo comea com o cabealho do mtodo
char calc (int num1, int num2, String message)
Lista de parmetros
A lista de parmetros especifica o tipo e o nome de cada parmetro. O nome de cada parmetro na declarao do mtodo chamado de argumento formal Nenhuma diferena para funes em programao imperativa.
Classes e Objetos 36
Declarao de Mtodo
O cabealho do mtodo seguido pelo corpo do mtodo
char calc (int num1, int num2, String message) { int sum = num1 + num2; char result = message.charAt (sum); return result; } sum e result variveis locais so
A expresso retornada deve ser consistente com o tipo de retorno definido no cabealho.
Elas so criadas cada vez que o mtodo chamado, e so destrudas quando ele termina sua execuo.
37
Classes e Objetos
Statement return
O tipo de retorno de um mtodo indica o tipo do valor que o mtodo retorna para a instruo que o chamou. Um mtodo que no retorna valor nenhum tem um tipo de retorno void O statement return especifica o valor que ser retornado. A expresso deve ser conforme com o tipo definido no cabealho.
Classes e Objetos
38
Retornando objetos
Um mtodo pode retornar qualquer tipo de dados, incluindo de classes que sejam criados por ns.
Dado que todos os objetos so alocados dinamicamente usando o new, um objeto continua a existir mesmo quando o mtodo no qual ele foi criado termina.
Quem morre ao fim do escopo a varivel de referncia. O objeto s vai morrer quando ningum mais faz referncia a ele (automatic garbage collection).
Classes e Objetos
39
Parmetros
Cada vez que um mtodo chamado, os argumentos reais na chamada so copiados para os argumentos formais: ch = obj.calc (25, count, "Hello");
char calc (int num1, int num2, String message) { int sum = num1 + num2; char result = message.charAt (sum); return result; }
Classes e Objetos
40
Escrevendo classes
s vezes um objeto deve interagir com outros objetos do mesmo tipo. Por exemplo, quando queremos comparar duas strings, ns fazemos o seguinte:
if s1.equals(s2);
Um objeto (s1) executa o mtodo e o outro (s2) passado como parmetro
Classes e Objetos
41
Exemplo de Classe
public class Moeda { public final int HEADS = 0; public final int TAILS = 1; private int face; public Moeda () public void flip() public int getFace() {flip();} {face = (int) (Math.random() * 2);} {return face; }
Sobrecarga de Mtodos
A sobrecarga de mtodos o processo de usar o mesmo nome de mtodo em vrios mtodos diferentes. A assinatura de cada verso do mtodo sobrecarregado deve ser nica. A assianatura inclui o nmero, o tipo e a ordem dos parmetros, mas no o tipo de retorno. O compilador deve ser capaz de determinar qual verso do mtdo ser chamada apenas analisando os parmetros que lhe so passados
Classes e Objetos 43
Sobrecarga de Mtodos
Verso 1 float tryMe (int x) { return x + .375; } Verso 2
Classes e Objetos
44
Sobrecarga de Mtodos
Um mtodo que usamos sempre, o println sobrecarregado:
println (String s) println (int i) println (double d)
Sobrecarga de Mtodos
Construtores tambm podem ser sobrecarregados. Um construtor sobrecarregado permite que tenhamos vrias maneiras de inicializar um objeto de acordo com o contexto. Como em todos os mtodos, a assinatura de cada construtor deve ser distinta de todos os outros.
Classes e Objetos
46
Lembrando : Construtores
Como vimos na aula 1, um construtor um mtodo especial que chamado para configurar um objeto quando da sua criao. Quando escrever um construtor, lembre-se:
ele te o nome da classe. Ele no retorna valor Ele no tem tipo de retorno, nem mesmo void
Construtor
O construtor chamado quando executamos o operador new. Ele um mtodo que inicializa um objeto imediatamente aps a sua criao. Construtores no tem nenhum tipo de retorno (nem mesmo void). A maioria das classes define seus prprios construtores, mas o Java fornece um construtor padro se um no for definido.
Classes e Objetos
48
O operador new
O operador new cria uma nica instncia de uma classe nomeada e retorna uma referncia para este objeto.
Classvariable objectreference = new classname()
(1)
(2) objectreference = new classname() aloca memria para o objeto e atribui aquele endereo varivel de referncia.
Classes e Objetos
49
Variveis de Instncia
A varivel face na classe Moeda denominada varivel de instncia pois cada instncia (objeto) da classe Moeda ter uma cpia separada dele. Uma declarao da classe simplesmente declara o tipo do dado, mas no reserva espao para ele. Cada vez que um objeto da classe Moeda criado, um anova varivel face tambm criada.
Variveis de Instncia
Os dados so parte da declarao dentro de uma classe se sua declarao estiver dentro das chaves ( { } ) da declarao da classe. As declaraes devariveis de instncia tm a mesma sintaxe da declarao de variveis locais. A diferena que as variveis de instncia so declaradas fora do escopo de todos os mtodos de uma classe.
Classes e Objetos
51
Variveis de Instncia
classe moeda
int face;
moeda1
face 0
moeda2
face 1
Classes e Objetos
52
Lembrando : Encapsulamento
Podemos ter duas vistas de um objeto :
interna - a estrutura de seus dados e os algoritmos de seus mtodos. externa - a interao do objeto com outros objetos do sistema.
Do ponto de vista externo, um objeto deve ser uma entidade encapsulada que prov servios especficos, que definem a interface do objeto. Tudo que no for visvel na interface deve ser escondido do resto do sistema.
Classes e Objetos 53
Lembrando : Encapsulamento
Os mtodos de um objeto deve ser os nicos autorizados a modificar seu estado. Devemos fazer com que seja difcil, se no impossvel, que outro objeto possa alterar o objeto sem passar pelos seus mtodos. O usurio, ou cliente, de um objeto deve poder requisitar seus servios (chamar seus mtodos), mas no deve saber como estes servios so realizados.
Classes e Objetos
54
Modificadores de Visibilidade
No Java, ns fazemos o encapsulamento atravs do uso dos modificadores de visibilidade apropriados. Um modificador uma palavra reservada do Java que especifica uma caracterstica particular de um mtodo ou atributo.
Por exemplo, ns usamos o modificador final para definir uma constante.
Modificadores de Visibilidade
Membros de uma classe que so declarados com visibilidade public podem ser acessados de qualquer ponto. Membros de uma classe que so declarados com visibilidade private s podem acessados de dentro da prpria classe. Membros declarados sem modificadores de visibilidade tm a chamada visibilidade padro (default), que consiste em poder ser acessados por qualquer classe dentro do mesmo pacote.
Classes e Objetos
56
Modificadores de Visibilidade
De forma geral, nenhum atributo deveria ser declarado como pblico. Mtodos que realizam os servios do objeto devem ser declarados como pblicos, para que possam ser invocados pelos clientes. Estes mtodos pblicos so muitas vezes chamados de mtodos de servio.
Um mtodo criado simplesmente para modularizar seu cdigo e ajudar um mtodo de servio chamado de mtodo de suporte e no deve ter visibilidade publica.
Classes e Objetos 57
Decompondo mtodos
Um mtodo deve ser relativamente pequeno, ou pelo menos, o mais compreesvel possvel. Um mtodo potencialmente grande ou de cdigo compelxo pode ser decomposto em vrios mtodos menores para aumentar sua clareza. Logo, um mtodo de servio pode chamar um ou mais mtodos de apoio para obtermos este resultado.
Classes e Objetos
58
Modificadores de Visibilidade
O ltimo destes modificadores o protected, que impede que qualquer outro objeto que no o dono e suas sub-classes acessem aquele elemento. Suas vantagens vo ficar mais claras quando discutirmos herana, mais adiante. Este modificador e o modificador private garantem encapsulamento, no dependendo da boa vontade de ningum. o
Por isto ns o usamos na classe Moeda. Dado que ns o usamos, precisamos de mtodos para pegar os valores dos atributos. Da a existncia do getFace
Classes e Objetos 59
static
Este modificador faz com que um membro de uma classe seja definido como part da classe, sendo independente de todos os objetos da classe. Ns j vimos isto aplicado a variveis, mas pode ser usado tambm em mtodos (vide o mtodo main) Este modificador faz com que se crie um membro de classe (atributo ou mtodo) que pode ser referenciado sem chamar um objeto, mas sim uma classe. Exemplo: Math.abs
Classes e Objetos
60
main()
O mtodo main() a primeira coisa, aps o construtor da classe, que chamado quando iniciamos um aplicativo Java. O seu formato : public static void main(String args[ ]) Public significa que outras classes e objetos podem cham-lo. Static significa que um mtodo de classe. Void significa que o mtodo main() no retorna um valor. O parmetro do mtodo main() consiste nos valores que lhe so passados por linha de comando.
Classes e Objetos
61
main()
O mtodo main recebe um parmetro, que consiste em um array contendo os parmetros digitados aps o nome da classe sendo executada. O parmetro args tem um comportamento idntico a todos os outros arrays de strings em Java. Exemplo: ao executar java classe1 x y 2.3, temos o seguinte:
args.length=3 args[0]=x args[1]=y args[2]=2.3
Classes e Objetos 62
NomeObjetoouClasse.nomedavarivel NomeObjetoouClasse.mtodo(lista-de-parmetros)
Pense nisso como um nome e sobrenome. Dentro da famlia todos so conhecidos pelo nome (dentro da prpria classe um avarivel/mtodo conhecido s pelo seu nome), mas fora da famlia precisamos do nome e do sobrenome (fora da classe/objeto precisamos do dot operator)
Classes e Objetos 63
nome
age
Sobrenome
Classes e Objetos 64
idade
Sobrenome
Alteradores (Mutators)
setnome
setIdade setSobrenome
Classes e Objetos
66
getIdade getSobrenome
Classes e Objetos
67
person1 uma varivel de referncia para um objeto da classe Pessoa, ou para simplificar, um objeto da classe Pessoa.
Classes e Objetos
68
setIdade
setnome
getSobrenome
setSobrenome
Person1
Classes e Objetos 69
Classes e Objetos
70
Classes e Objetos
71
setIdade
getSobrenome
setIdade
getnome
getSobrenome
setSobrenome
String s=person1.getnome; String s2=person1.getSobrenome; int i=person1.getIdade;
Classes e Objetos 73
Exemplo de Classe
public class Ponto {
Propriedades encapsuladas dentro do objeto. S com mtodos protected int x, y; apropriados elas podem ser acessadas de fora do objeto.
public Ponto() {setPonto( 0, 0 );}
public Ponto( int xCoordinate, int yCoordinate ) {setPonto( xCoordinate, yCoordinate );} public void setPonto( int xCoordinate, int yCoordinate ) { x = xCoordinate; y = yCoordinate; } public int getX() public int getY() {return x;} {return y;}
Construtor polimrfico como as assinaturas so diferentes, durante a execuo o construtor apropriado chamado. Mtodos alteradores nica maneira de alterar o valor de x e y de fora do objeto
Mtodos leitores so pblicos e do mesmo tipo de x e y. nica maneira de um objeto externo classe Ponto obter o valor de x e y.
Classes e Objetos
74