Baixe o app para aproveitar ainda mais
Prévia do material em texto
Universidade Presbiteriana Mackenzie Utilizando Objetos Profa. Ana Cristina dos Santos Faculdade de Computação e Informática Linguagem de Programação I 1 Objetivos • Formalizar o conceito de objeto em sob o pontos de vista de programação • Aprender o processo de construção de objetos em Java • Aprender o mecanismo de referência a objetos e o processo de garbage collection em Java • Aprender o conceito de estado de um objeto e sua alteração através da invocação de métodos Utilizando Objetos 2 3 Referência Bibliográfia • A referência para esta aula é o Capítulo 2 (Utilizando Objetos) do nosso livro-texto: • Horstmann, C. Conceitos de Computação com Java. 5.ed. Porto Alegre: Bookman, 2009. Utilizando Objetos Objeto • Entidade que você pode manipular no seu programa. • Manipulamos objetos por meio da invocação de seus métodos. • Pensamos o objeto como uma caixa-preta com uma interface pública (os métodos que podemos chamar) e uma implementação oculta (o código e seus dados) • Ele tem um comportamento bem-definido. 4Utilizando Objetos Exemplo de Objeto • Um objeto “velho conhecido”. – System.out – Construído a partir da classe PrintStream. 5Utilizando Objetos Objetos e Métodos • A manipulação de objetos é feita através da invocação de seus métodos. • Um método é uma sequência de instruções que pode acessar os dados internos de um objeto. • Já utilizamos dois métodos de System.out: println e print. 6Utilizando Objetos Objetos e Classes • Objetos são construídos a partir de classes. • System.out é um objeto da classe PrintStream. 7Vetores e ArrayList Métodos e Classes • Uma classe define os métodos que você pode aplicar aos objetos dela. • A classe PrintStream define, entre outros métodos, os métodos println e print a todos os seus objetos. 8Utilizando Objetos Exemplo - String String greeting = “Hello, World!”; int n = greeting.length(); String river= “Mississippi”; String bigRiver = river.toUpperCase(); 9Utilizando Objetos Exemplo - String • Podemos invocar os métodos length() e toUpperCase() porque eles pertencem à interface pública da classe String. • A interface pública de uma classe especifica o que você pode fazer com os objetos dela. 10Utilizando Objetos Métodos – Parâmetros e retornos • Os métodos podem ter parâmetros e retornos. • Parâmetros compõem a entrada para um método. • O retorno é a saída do método. • Somente os métodos que estão na interface pública de uma classe podem ser invocados nos objetos dela. 11Utilizando Objetos Métodos – Parâmetros e retornos • Parâmetro explícito é toda informação que o método precisa para executar uma tarefa ou sua informação de entrada. • O parâmetro implícito de uma chamada de método é o objeto em que o método é invocado. 12Utilizando Objetos System.out.println(“Hello, World”); • Temos a string “Hello World” funcionando com um parâmetro explícito para o método println do objeto System.out. • Parâmetro implícito é o objeto System.out. 13Utilizando Objetos int n=greeting.length(); • Não temos parâmetro na invocação • Temos um valor de retorno ( do tipo int). 14Utilizando Objetos System.out.println(greeting.length()) • O retorno de invocação de um método pode ser utilizado como parâmetro para invocação de um outro método. 15Utilizando Objetos Métodos – Definição • Podemos saber quais são os parâmetros e os retornos de um método e sua visibilidade observando a sua definição dentro da classe. • Exemplo: Método length() da classe String. public int length() • O método é publico, não possui nenhum parâmetro e tem um retorno do tipo int. 16Utilizando Objetos Criando Objetos • O processo de criação de um objeto a partir de sua classe é chamado instanciação. • Um objeto é uma instância de uma classe. • Para instanciar um objeto – Alocamos espaço em memória ou criamos um objeto com o operador new – Inicializamos este espaço de memória com os parâmetros passados no construtor – Atribuímos a referência a uma variável, ou seja, retornamos o objeto 17Utilizando Objetos Criando Objetos • A sintaxe do processo de instanciação em Java é mostrada abaixo: NomeDaClasse objeto = new NomeDaClasse(parâmetros); • Exemplo: String s = new String (“Maria”); 18Utilizando Objetos new e Método Construtor • Observe que pode haver mais de uma maneira de se construir um objeto. • O operador new não aparece sozinho. Ele necessita de um método especial especificado pela classe chamado construtor. – O construtor, em Java e em várias outras linguagens orientadas a objetos, deve sempre ter o mesmo nome da classe. 19Utilizando Objetos Construtor • Uma mesma classe pode definir vários construtores diferentes: 20Utilizando Objetos String() Constrói uma string vazia, isto é, sem caracteres. String(byte[] bytes) Constrói uma string a partir de um vetor de bytes. String(char[] value) Constrói uma string a partir de um vetor de caracteres. String(String original) Constrói uma string a partir outra string. String(StringBuffer buffer) Constrói uma string a partir de um StringBuffer. String(StringBuilder builder) Constrói uma string a partir de um StringBuilder. Exercício • As classes e métodos da biblioteca de classes da linguagem Java estão definidos na documentação da API (Application Programming Interface) Java. • A documentação da API da versão 8 da linguagem Java pode ser encontrada em: http://docs.oracle.com/javase/8/docs/api/ • Desta documentação, vamos considerar a classe Rectangle mostrada parcialmente a seguir: 21Utilizando Objetos Exercício 22Utilizando Objetos Exercício 23Utilizando Objetos Exercício • A partir desta documentação, construa um retângulo chamado box que tenha canto superior esquerdo na coordenada (5,10), comprimento 20 e altura 30. 24Utilizando Objetos Exercício com Discussão em Duplas • Com base na documentação do método translate da classe Rectangle, faça uma translação do retângulo criado no exercício anterior de 15 pixels para a direita no eixo X e 25 pixels para baixo no eixo Y. 25Utilizando Objetos Instanciação • Processo através do qual se realiza a criação de um objeto a partir de uma classe • Um objeto (tipo de dado) deve ser instanciado para que possamos utilizá-lo Referência e Garbage Collection 26 Variável de Referência • As variáveis de Referência apontam para instâncias de classes. • O fato de declarar uma variável não significa que o objeto foi instanciado • Quando se declara uma variável, ela aponta para NULL, até que um objeto seja instanciado. Referência e Garbage Collection 27 Ponto p1; … p1 = new Ponto(); Variável de Referência • No nosso último Exercício, criamos um objeto da classe Retângulo com o seguinte código: Rectangle box; box = new Rectangle(5,10,20,30); • Podemos ler o nosso código da seguinte forma: – Declaramos uma variável de referência chamada box para objetos da classe Rectangle. – Criamos uma instância de Rectangle em memória com o canto superior esquerdo em (5,10) com largura 20 e altura 30 e referenciamos este objeto com a nossa variável de referência box. 28Referência e Garbage Collection Variável de Referência • O operador new retorna o endereço de memória, chamado referência, dentro da JVM (Java Virtual Machine) onde foi alocado o objeto. Este endereço é armazenado dentro da variável que nomeamos o objeto. No exemplo acima, box. 29Referência e Garbage Collection Alocação de Memória • O acesso ao objeto criado é feito de formaindireta via o endereço (referência). • A variável armazena esta referência (endereço) ao objeto. • Em outras linguagens chamamos esta forma de referência de ponteiro (ou pointer). • Ponteiros são alocados em uma região especial de memória chamada HEAP e o processo de alocação de memória nesta região é chamada alocação dinâmica. 30Referência e Garbage Collection Variável de Referência Rectangle box; box = new Rectangle(5,10,20,30); box2 = box; • Logo que a variável de referência box é declarada, ela não faz referência a nenhum objeto em memória. O valor dela é null. • Em seguida, a variável de referência box passa a referenciar um retangulo. • Note que a variável de referência box2 referencia o mesmo retangulo que box. 31Referência e Garbage Collection Referência e Métodos Rectangle box; box = new Rectangle(5,10,20,30); box.translate(10,10); • Chamamos o método translate do objeto da classe Rectangle, referenciado pela variável box. • Não há como chamar métodos do objeto se não tivermos uma variável o referenciando. 32Referência e Garbage Collection Variáveis e Instâncias • Mesmo que duas instâncias de uma classe contenham os mesmos dados, elas NÃO SÃO iguais. • Referências são independentes: se duas referências apontam para uma instância e a primeira instância é modificada para apontar para outra instância, a segunda instância continua apontando para a primeira instância. Referência e Garbage Collection 33 Garbage Collection • Note que se não tivermos nenhuma variável de referência apontando para um objeto em memória, nunca mais conseguiremos utilizar este objeto. • Não conseguiremos encontra-lo na memória heap. • O objeto fica “perdido”. • Muitos objetos “perdidos” poderiam esgotar a memória heap. 34Referência e Garbage Collection Memory Leak? Rectangle box; while(true){ box = new Rectangle(5,10,20,30); } 35Referência e Garbage Collection Memory Leak? 36Referência e Garbage Collection MEMORIA ESGOTADA?! Lixo (Garbage) 37Referência e Garbage Collection Lixo (Garbage) 38Referência e Garbage Collection • Os objetos “perdidos”, sem nenhuma variável que o referencie são candidatos a coleta pelo Garbage Collector. • O Garbage Collector identifica objetos sem referência (e que portanto não são mais utilizados) e o retira da memória (coleta e apaga). • A coleta de lixo ocorre de tempos em tempos de forma automática. Garbage Collection 39Referência e Garbage Collection • Tem como função vasculhar a memória atrás de blocos alocados que não tenham mais como ser referenciados pela aplicação. • Quando o garbage collector se depara com uma situação desse tipo, ele desaloca a memória, tornando-a disponível para ser usada novamente pela aplicação. Obrigada Profa. Ana Cristina dos Santos anacristina.santos@mackenzie.br 40Utilizando Objetos
Compartilhar