740 likes | 845 Views
Introdução ao uso de classes Prof. Ricardo Linden. 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
E N D
Introdução ao uso de classes Prof. Ricardo Linden Classes e Objetos
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
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
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
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
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
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
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
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
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
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
setNumAvioes setNumAvioes Velocidade NumAvioes Leme Velocidade NumAvioes Leme setVelocidade setVelocidade setLeme setLeme Classes e Objetos Receita • Classe AircraftCarrier • possui • velocidade • núm. de aviões • leme • pode • setVelocidade • setNumAvioes • setLeme Instâncias (Objetos) Nimitz Vinson Classes e Objetos
Relacionamentos entre objetos • Objetos podem ter três tipos de relacionamentos: • “is-a” relacionamento do tipo herança. Exemplo : cadeira “is-a” 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
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
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 setResolução Força Resolução Brilho setForça setBrilho Classes e Objetos
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
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
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
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
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
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
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
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
setNumAvioes setNumAvioes setNumAvioes Velocidade NumAvioes Leme Velocidade NumAvioes Leme Velocidade NumAvioes Leme setVelocidade setVelocidade setVelocidade setLeme setLeme setLeme Identidade Nimitz Roosevelt Vinson Classes e Objetos
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
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
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
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
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
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
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
Classes • Um dos atributos de uma classe pode ser um objeto de outra classe Declarações de atributos. Note que ambos são objetos de outras classes 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
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
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
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 doIt helpMe helpMe(); obj.doIt(); Classes e Objetos
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 Lista de parâmetros Tipo de retorno • 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
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 são variáveis locais • Elas são criadas cada vez que o método é chamado, e são destruídas quando ele termina sua execução. A expressão retornada deve ser consistente com o tipo de retorno definido no cabeçalho. Classes e Objetos
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
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
char calc (int num1, int num2, String message) { int sum = num1 + num2; char result = message.charAt (sum); return result; } 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"); Classes e Objetos
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
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() {face = (int) (Math.random() * 2);} public int getFace() {return face; } public String toString() { String faceName; if (face == HEADS) { faceName = "Heads";} else {faceName = "Tails";} return faceName; } } Classes e Objetos
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
Versão 1 Versão 2 float tryMe (int x, float y) { return x*y; } float tryMe (int x) { return x + .375; } Chamada result = tryMe (25, 4.32) Sobrecarga de Métodos Classes e Objetos
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
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
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
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
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
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