1 / 74

Introdução ao uso de classes Prof. Ricardo Linden

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

chill
Download Presentation

Introdução ao uso de classes Prof. Ricardo Linden

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Introdução ao uso de classes Prof. Ricardo Linden Classes e Objetos

  2. 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

  3. 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

  4. 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

  5. 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

  6. 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

  7. 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

  8. 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

  9. 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

  10. 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

  11. 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

  12. 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

  13. 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

  14. 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

  15. 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

  16. 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

  17. 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

  18. 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

  19. 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

  20. 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

  21. 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

  22. 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

  23. 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

  24. 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

  25. 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

  26. 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

  27. 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

  28. 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

  29. 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

  30. 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

  31. 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

  32. 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

  33. 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

  34. 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

  35. 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

  36. 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

  37. 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

  38. 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

  39. 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

  40. 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

  41. 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

  42. 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

  43. 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

  44. 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

  45. 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

  46. 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

  47. 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

  48. 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

  49. 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

  50. 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

More Related