Introdução ao uso de classes Prof. Ricardo Linden Classes e Objetos 1 Voltando ao passado... Vamos rever os conceitos de orientação a objetos, de forma genérica, mas nos preparando para implementá-los em Java. Seria interessante ler o capítulo 4 do livro texto Core Java 2 - V.1 - Fundamentos Cornell, Gary; Horstmann, Cay Ed. Makron Books Classes e Objetos 2 Programação Orientada a Objetos A POO surgiu a partir da idéia de identificar dentro de um problema as suas partes componentes, que seriam os objetos. Cada objeto realiza uma série de atividades e expõe para o mundo somente uma pequena interface. Isto quer dizer que o objeto é uma abstração de um determinado processo/entidade. Classes e Objetos 3 Abstração Abstração é 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 características essenciais de um objeto no mundo A cor de um carro não é importante quando estamos desenvolvendo um modelo de direção Entretanto, a cor é extremamente importante quando estamos determinando um modelo de fabricação. Classes e Objetos 4 Definição Formal Abstração “Uma abstração descreve as características 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 abstração descreve o que nós 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 são todos membros da mesma classe Todas as TVs Sony XPD-4582 TVs são da mesma classe Classes e Objetos 6 Classes Será que Lula e Fernando Henrique são da mesma classe? Se a abstração em que estamos pensando é “presidentes da república” então sim. Se a abstração em que estamos pensando diferencia entre presidentes de partidos distintos, então não. O processo de abstração define se o que é uma classe e que objetos fazem parte dela. Classes e Objetos 7 Classe A classe de um objeto também é 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 métodos ele vai responder. Cada instância de uma classe (objeto) possui suas próprias cópias das variáveis de estado. Exceto no caso das variáveis estáticas (membros de classe) Classes e Objetos 8 O que é um objeto? Um objeto no mundo - seja um carro, um avião ou um computador, normalmente são coisas que associamos a substantivos. Não necessariamente associamos objetos a coisas concretas. Outros objetos possíveis são conta corrente, mensagem de e-mail, um pedido, uma conexão telefônica, etc. Para qualificar um objeto normalmente precisamos de três coisas: Um estado Um comportamento Uma identidade Classes e Objetos 9 Objetos O estado consiste do valor das propriedades de um objeto: Um avião pode ter seus motores ligados ou desligados, pode estar a uma determinada altura, velocidade e direção, ter assentos ocupados, etc. Uma conexão via internet pode estar ativa ou não, 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 isntâncias de objetos (como se fosse uma receita ou uma planta). A partir das receitas, podemos construir novos porta-aviões, novas TVs, novos projetores, etc. Classes e Objetos 11 Classes e Objetos Receita Classe AircraftCarrier •pode •possui setVelocidade velocidade setNumAvioes núm. de aviões setLeme leme Instâncias (Objetos) Nimitz Vinson setNumAvioes setVelocidade Velocidade NumAvioes Leme setVelocidade setLeme setNumAvioes Velocidade NumAvioes Leme setLeme Classes e Objetos 12 Relacionamentos entre objetos Objetos podem ter três tipos de relacionamentos: “is-a” relacionamento do tipo herança. Exemplo : cadeira “isa” móvel. “has-a” relacionamento em que um objeto contém outro como parte de seus atributos. Exemplo : pedido “has-a” item. “uses-a” relacionamento em que um objeto faz uso de serviços providos por outra classe ou objeto. Exemplo: nossos programas até agora “uses-a” classe JDOptionPane. Classes e Objetos 13 Métodos Métodos podem ser pensados como sendo os verbos associados aos nossos objetos: Um pedido pode ser enviado, cancelado, atualizado, etc. Uma conexão pode ser desfeita, desacelerada, etc. Um avião pode decolar, aterrisar, virar à esquerda, etc. Um método também pode ser pensado como uma forma de alterar o estado de um objeto: Pressionar o botão de liga/desliga muda o estado de uma TV. Move o leme de um navio altera sua direção.The Roosevelt has Classes e Objetos 14 Métodos Métodos, em uma programação OO bem feita, são a “epiderme” de um objeto Para acessar ou alterar um estado dentro de um objeto, precisamos usar um método Objeto Projetor setForça setResolução Força Resolução Brilho setBrilho Classes e Objetos 15 Encapsulamento Quando só podemos acessar o estado de um objeto através de seus métodos, dizemos que estamos usando encapsulamento. Por que usar isto? Impede que outros atribuam valores inválidos para o estado do objeto, como colocar uma resolução inválida para o projetor ou tentar acelerar o avião para uma velocidade que ele não alcança Permite que alteremos as estruturas de dados internas de um objeto sem afetar os outros métodos que o acessam. Por exemplo, imagine que 500 objetos mudassem o valor do canal da TV e nós mudássemos o seu armazenamento de um byte para dois. Isto também é chamado de “information hiding” Classes e Objetos 16 Encapsulamento O encapsulamento é a base da boa programação orientada a objetos. Fazendo objetos bem encapsulados, nós garantimos sua reusabilidade e a boa manutenibilidade de todos nossos sistemas. Muitos dirão que uma boa programação estruturada também é bem encapsulada e também atinge os objetivos de se fazer bons códigos. Isto é verdade, mas a programação imperativa fornece vários mecanismos para se burlar este tipo de boa prática, especialmente quando falamos de grandes projetos em que muitos programadores estão envolvidos. Classes e Objetos 17 Definição Formal Encapsulamento “Encapsulamento é o processo de compartimentalização dos elementos que constituem a estrutura e o comportamento de um objeto, servindo para separar a interface contratual da sua implementação --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 são escondidos do cliente (aquele que o usa), que apenas pode invocar os métodos definidos na interface. Métodos Cliente Dados Classes e Objetos 19 Encapsulamento Tendo em vista que nosso objetivo é sempre fazer os melhores sistemas possíveis, nós vamos sempre procurar criar classes e objetos que respeitem o preceito básico do encapsulamento. Todos os slides a seguir partem deste pressuposto! Classes e Objetos 20 Abstração e Encapsulamento A abstração diz como um objeto deve se relacionar com o mundo. Uma boa abstação garante que nossas classes fazem aquilo que é necessário para resolver o problema que temos em mãos. O Encapsulamento garante que o mundo não tem nenhuma relação ou conhecimento do que acontece dentro de um objeto. Um bom encapsulamento garante que nosso código é de boa qualidade e pode ser reutilizado. Classes e Objetos 21 Quais Métodos? Como decidir quais métodos vamos colocar em uma classe? Os método definem o comportamento de um objeto, isto é, o que ele é capaz de fazer. Os métodos também representam a interface de um objeto com o mundo, ou seja, o que o mundo pode pedir ao objeto. Por exemplo Uma conta bancária 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 são iguais, mesmo que pertençam a uma mesma classe: O retroprojetor que estamos usando não é o mesmo que está sendo usado em outra turma, mesmo que seja da mesma marca e modelo. Minha conta bancária não é igual à do Bill Gates Classes e Objetos 23 Identidade setNumAvioes Nimitz setVelocidade Velocidade NumAvioes Leme setLeme Roosevelt Vinson setNumAvioes setNumAvioes setVelocidade Velocidade NumAvioes Leme setVelocidade Velocidade NumAvioes Leme setLeme setLeme Classes e Objetos 24 Definição Formal Identidade “Identidade é a propriedade de um objeto que o distingue de forma inequívoca de outro objeto --Booch 1994 De forma geral objetos são identificados de forma unívoca pelas suas variáveis de referência, que são usualmente chamadas de seus nomes Entretanto, cuidado ao chamar assim, pois elas só se apontam para um objeto, não sendo iguais a ele. Classes e Objetos 25 Resumo de objetos Objetos possuem estados é um conjunto de características de cada objeto. Mudar o estado de um objeto não altera o estado de outro objeto. comportamento define o que o objeto é capaz de fazer identidade é o que permite que nos referenciemos separadamente a cada objeto. Encapsulamento esconde do mundo como implementamos o estado que é alterado pelo comportamento que lhe apresentamos. Classes e Objetos 26 Escrevendo as classes... Agora vamos começar a aplicar estes conceitos dentro do Java. Seria interessante ler o capítulo 4 do livro texto Core Java 2 - V.1 - Fundamentos Cornell, Gary; Horstmann, Cay Ed. Makron Books Não estou insistindo só por teimosia. Começar a trabalhar com orientação a objetos não é fácil! Os conceitos podem ser extremamente confusos à primeira vista. Classes e Objetos 27 Lembrando : Classes São o elemento básico da programação orientada a objeto, tanto em Java quanto em qualquer outra LPOO. A classe define as estruturas (variáveis de instância) de um objeto e sua interface funcional (métodos). Uma classe é a planta/receita de um objeto É o modelo a partir do qual cada objeto é criado. Por exemplo, a classe String é usada para definir objetos String Cada objeto String contem caracteres específicos (seu estado). Cada objeto String pode realizar serviços (ter comportamentos) tais como toUpperCase,length, concant, etc. Classes e Objetos 28 Lembrando : Objetos Um objeto tem: estado - características descritivas (atributos) comportamento - o que ele pode fazer ou o que pode ser feito com ele (métodos) Por exemplo, seja uma moeda que pode ser jogada para cima de forma que resulte em “cara” ou “coroa” O estado é o último resultado O comportamento é o fato de poder ser jogada. Note que apenas o comportamento pode mudar o seu estado! Classes e Objetos 29 Classes Algumas classes, como a classe String já existem dentro da biblioteca padrão de classes do Java. Nós podemos querer escrever nossas próprias clases para definir objetos específicos para nossas necessidades. Por exemplo, poderíamos querer escrever uma classe que simule uma moeda. A partir desta classe nós poderíamos criar muitos objetos diferentes representando várias moedas (mais ou menos como a casa da moeda, que faz um molde e depois funde várias cópias). Classes e Objetos 30 Classes Uma classe contém declarações de atributos e declarações de métodos. int x, y; char ch; Declarações de atributos (dados) Declarações de Método Classes e Objetos 31 Classes Um dos atributos de uma classe pode ser um objeto de outra classe String s; int a[]; Declarações de atributos. Note que ambos são objetos de outras classes Isto representa um tipo relacionamento especial chamado “has-a” (possui), que será discutido com todo o cuidado mais adiante. Classes e Objetos 32 Escrevendo métodos Uma declaração de método especifica o código que será executado quando o método é invocado (chamado) Quando um método é invocado, o flxuo de controle vai para dentro dele e executa seu código (exatamente igual a um procedimento ou função em linguagem imperativa) Quando o método termina, o fluxo retorna para a instrução seguinte àquela que chamou-o. A invocação pode retornar um valor ou não, dependendo de como o método foi definido. Classes e Objetos 33 Fluxo de Controle em um Método O método chamado pode ser dentro da mesma classe. Neste caso, somente o nome do método é necessário. compute myMétodo myMétodo(); Classes e Objetos 34 Fluxo de Controle em um Método O método chamado pode ser parte de outra classe ou objeto. Neste caso temos que qualificar o nome do método chamado usando o nome do objeto que o possui e o ponto (o chamado dot operator). main obj.doIt(); doIt helpMe helpMe(); Classes e Objetos 35 Declaração de Método Toda declaração de um método começa com o cabeçalho do método char calc (int num1, int num2, String message) Nome do Método Tipo de retorno Lista de parâmetros A lista de parâmetros especifica o tipo e o nome de cada parâmetro. O nome de cada parâmetro na declaração do método é chamado de argumento formal Nenhuma diferença para funções em programação imperativa. Classes e Objetos 36 Declaração de Método O cabeçalho do método é seguido pelo corpo do método char calc (int num1, int num2, String message) { int sum = num1 + num2; char result = message.charAt (sum); return result; sum e result variáveis locais } A expressão retornada deve ser consistente com o tipo de retorno definido no cabeçalho. Classes e Objetos são Elas são criadas cada vez que o método é chamado, e são destruídas quando ele termina sua execução. 37 Statement return O tipo de retorno de um método indica o tipo do valor que o método retorna para a instrução que o chamou. Um método que não retorna valor nenhum tem um tipo de retorno void O statement return especifica o valor que será retornado. A expressão deve ser conforme com o tipo definido no cabeçalho. Classes e Objetos 38 Retornando objetos Um método pode retornar qualquer tipo de dados, incluindo de classes que sejam criados por nós. Dado que todos os objetos são alocados dinamicamente usando o new, um objeto continua a existir mesmo quando o método no qual ele foi criado termina. Quem “morre” ao fim do escopo é a variável de referência. O objeto só vai morrer quando ninguém mais faz referência a ele (automatic garbage collection). Classes e Objetos 39 Parâmetros Cada vez que um método é chamado, os argumentos reais na chamada são 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, nós fazemos o seguinte: if s1.equals(s2); Um objeto (s1) executa o método e o outro (s2) é passado como parâmetro 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 () {flip();} public void flip() public int getFace() {face = (int) (Math.random() * 2);} {return face; } public String toString() { String faceName; if (face == HEADS) { faceName = "Heads";} else {faceName = "Tails";} return faceName; } } Classes e Objetos 42 Sobrecarga de Métodos A sobrecarga de métodos é o processo de usar o mesmo nome de método em vários métodos diferentes. A assinatura de cada versão do método sobrecarregado deve ser única. A assianatura inclui o número, o tipo e a ordem dos parâmetros, mas não o tipo de retorno. O compilador deve ser capaz de determinar qual versão do métdo será chamada apenas analisando os parâmetros que lhe são passados Classes e Objetos 43 Sobrecarga de Métodos Versão 1 Versão 2 float tryMe (int x) { return x + .375; } float tryMe (int x, float y) { return x*y; } Chamada result = tryMe (25, 4.32) Classes e Objetos 44 Sobrecarga de Métodos Um método que usamos sempre, o println é sobrecarregado: println (String s) println (int i) println (double d) etc. As linhas a seguir chamam as diferentes versões do método println: System.out.println ("The total is:"); System.out.println (total); Classes e Objetos 45 Sobrecarga de Métodos Construtores também podem ser sobrecarregados. Um construtor sobrecarregado permite que tenhamos várias maneiras de inicializar um objeto de acordo com o contexto. Como em todos os métodos, 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 método especial que é chamado para configurar um objeto quando da sua criação. Quando escrever um construtor, lembre-se: ele te o nome da classe. Ele não retorna valor Ele não tem tipo de retorno, nem mesmo void É nele onde se inicializam as variáveis das instâncias. Não é obrigatório definir um construtor para uma classe. Classes e Objetos 47 Construtor • O construtor é chamado quando executamos o operador new. • Ele é um método que inicializa um objeto imediatamente após a sua criação. • Construtores não tem nenhum tipo de retorno (nem mesmo void). • A maioria das classes define seus próprios construtores, mas o Java fornece um construtor padrão se um não for definido. Classes e Objetos 48 O operador new O operador new cria uma única instância de uma classe nomeada e retorna uma referência para este objeto. Classvariable objectreference = new classname() O statement é composto de dua partes: (1) Classvariable objectreference declara uma variável de referência para um objeto daquela classe (referência esta que tem valor null) (2) objectreference = new classname() aloca memória para o objeto e atribui aquele endereço à variável de referência. Classes e Objetos 49 Variáveis de Instância A variável face na classe Moeda é denominada variável de instância pois cada instância (objeto) da classe Moeda terá uma cópia separada dele. Uma declaração da classe simplesmente declara o tipo do dado, mas não reserva espaço para ele. Cada vez que um objeto da classe Moeda é criado, um anova variável face também é criada. Os objetos da classe têm as mesmas definições de métodos, mas têm espaços de memória próprios. Só assim eles podem ter estados diferentes! Classes e Objetos 50 Variáveis de Instância Os dados são parte da declaração dentro de uma classe se sua declaração estiver dentro das chaves ( { } ) da declaração da classe. As declarações devariáveis de instância têm a mesma sintaxe da declaração de variáveis locais. A diferença é que as variáveis de instância são declaradas fora do escopo de todos os métodos de uma classe. Classes e Objetos 51 Variáveis de Instância moeda1 classe moeda face int face; 0 moeda2 face Classes e Objetos 1 52 Lembrando : Encapsulamento Podemos ter duas vistas de um objeto : interna - a estrutura de seus dados e os algoritmos de seus métodos. externa - a interação do objeto com outros objetos do sistema. Do ponto de vista externo, um objeto deve ser uma entidade encapsulada que provê serviços específicos, que definem a interface do objeto. Tudo que não for visível na interface deve ser escondido do resto do sistema. Classes e Objetos 53 Lembrando : Encapsulamento Os métodos de um objeto deve ser os únicos autorizados a modificar seu estado. Devemos fazer com que seja difícil, se não impossível, que outro objeto possa alterar o objeto sem passar pelos seus métodos. O usuário, ou cliente, de um objeto deve poder requisitar seus serviços (chamar seus métodos), mas não deve saber como estes serviços são realizados. Classes e Objetos 54 Modificadores de Visibilidade No Java, nós fazemos o encapsulamento através do uso dos modificadores de visibilidade apropriados. Um modificador é uma palavra reservada do Java que especifica uma característica particular de um método ou atributo. • Por exemplo, nós usamos o modificador final para definir uma constante. Java tem três modificadores de visibilidade básicos: • public • private • protected Classes e Objetos 55 Modificadores de Visibilidade Membros de uma classe que são declarados com visibilidade public podem ser acessados de qualquer ponto. Membros de uma classe que são declarados com visibilidade private só podem acessados de dentro da própria classe. Membros declarados sem modificadores de visibilidade têm a chamada visibilidade padrão (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 público. Métodos que realizam os serviços do objeto devem ser declarados como públicos, para que possam ser invocados pelos clientes. Estes métodos públicos são muitas vezes chamados de métodos de serviço. Um método criado simplesmente para modularizar seu código e ajudar um método de serviço é chamado de método de suporte e não deve ter visibilidade publica. Classes e Objetos 57 Decompondo métodos Um método deve ser relativamente pequeno, ou pelo menos, o mais compreesível possível. Um método potencialmente grande ou de código compelxo pode ser decomposto em vários métodos menores para aumentar sua clareza. Logo, um método de serviço pode chamar um ou mais métodos 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 não o dono e suas sub-classes acessem aquele elemento. Suas vantagens vão ficar mais claras quando discutirmos herança, mais adiante. Este modificador e o modificador private garantem encapsulamento, não dependendo da boa vontade de ninguém. o Por isto nós o usamos na classe Moeda. Dado que nós o usamos, precisamos de métodos para pegar os valores dos atributos. Daí a existência 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. Nós já vimos isto aplicado a variáveis, mas pode ser usado também em métodos (vide o método main) Este modificador faz com que se crie um membro de classe (atributo ou método) que pode ser referenciado sem chamar um objeto, mas sim uma classe. Exemplo: Math.abs Classes e Objetos 60 main() O método main() é a primeira coisa, após 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 método de classe. Void significa que o método main() não retorna um valor. O parâmetro do método main() consiste nos valores que lhe são passados por linha de comando. Classes e Objetos 61 main() O método main recebe um parâmetro, que consiste em um array contendo os parâmetros digitados após o nome da classe sendo executada. O parâmetro args tem um comportamento idêntico 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 Dot (.) Operator O dot(.) operator é usado para acessar vaiáveis e métodos dentro de um objeto (se forem de instância) ou classe (se forem estáticos) NomeObjetoouClasse.nomedavariável NomeObjetoouClasse.método(lista-de-parâmetros) Pense nisso como um nome e sobrenome. Dentro da família todos são conhecidos pelo nome (dentro da própria classe um avariável/método é conhecido só pelo seu nome), mas fora da família precisamos do nome e do sobrenome (fora da classe/objeto precisamos do dot operator) Classes e Objetos 63 Manipulando uma Pessoa Vamos analisar os conceitos que vimos até agora analisando a classe Pessoa. Em uma abstração possível, um objeto da classe pessoa poderia ser da seguinte forma: nome age Sobrenome Classes e Objetos 64 Manipulando uma Pessoa Barreira de encapsulamento nome idade Sobrenome A barreira do encapsulamento protege os atributos da classe Pessoa de interferência externa indevida Classes e Objetos 65 Manipulando uma Pessoa • Criamos então métodos para que possamos alterar atributos dentro de um objeto encapsulado. Alteradores (Mutators) setnome setIdade setSobrenome Classes e Objetos 66 Manipulando uma Pessoa • Métodos são criados para permitir leitura de fora de um objeto encapsulado. Leitores (Getters) getnome getIdade getSobrenome Classes e Objetos 67 Manipulando uma Pessoa Para criar uma instância da classe Pessoa, nós podemos executar a seguinte instrução dentro de qualquer método, como por exemplo o método main ( ): Person person1 = new Person( ) ; person1 é uma variável de referência para um objeto da classe Pessoa, ou para simplificar, um objeto da classe Pessoa. Classes e Objetos 68 Manipulando uma Pessoa getIdade getnome setnome setIdade getSobrenome setSobrenome Person1 Classes e Objetos 69 Manipulando uma Pessoa Lembre-se : o operador new cria uma única instância de uma classe nomeada e retorna uma referência a este objeto Sua sintaxe é: Classname variable = new Classname( ) A variável de referência criada é de escopo local, mas o objeto para o qual ela aponta não! Classes e Objetos 70 Manipulando uma Pessoa O dot (.) operator é usado para acessar métodos dentro de um objeto (isto é, métodos que pertencem a um objeto e a ele se aplicam) Sua sintaxe é: NomedoObjeto.método (lista-de-parâmetros) Classes e Objetos 71 Exemplo de alteradores:Classe Pessoa getIdade setIdade getSobrenome setnome getnome person1.setnome (“John”); person1.setSobrenome (“Smith”); person1.setIdade (21); setSobrenome Classes e Objetos 72 Exemplo de leitores: Classe Pessoa getIdade setIdade getSobrenome setnome getnome 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 métodos 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() {return x;} public int getY() {return y;} Construtor polimórfico como as assinaturas são diferentes, durante a execução o construtor apropriado é chamado. Métodos alteradores única maneira de alterar o valor de x e y de fora do objeto Métodos leitores são públicos 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