Академический Документы
Профессиональный Документы
Культура Документы
Introduo Programao I
Lio 9
Trabalhando com Bibliotecas de Classe
JEDITM
Autor Florence Tiu Balagtas Equipe Joyce Avestro Florence Balagtas Rommel Feria Reginald Hutcherson Rebecca Ong John Paul Petines Sang Shin Raghavan Srinivas Matthew Thompson
Sistemas Operacionais Suportados NetBeans IDE 5.5 para os seguintes sistemas operacionais: Microsoft Windows XP Profissional SP2 ou superior Mac OS X 10.4.5 ou superior Red Hat Fedora Core 3 Solaris 10 Operating System (SPARC e x86/x64 Platform Edition) NetBeans Enterprise Pack, poder ser executado nas seguintes plataformas: Microsoft Windows 2000 Profissional SP4 Solaris 8 OS (SPARC e x86/x64 Platform Edition) e Solaris 9 OS (SPARC e x86/x64 Platform Edition) Vrias outras distribuies Linux Configurao Mnima de Hardware Nota: IDE NetBeans com resoluo de tela em 1024x768 pixel Sistema Operacional Microsoft Windows Linux Solaris OS (SPARC) Solaris OS (x86/x64 Platform Edition) Mac OS X Processador 500 MHz Intel Pentium III workstation ou equivalente 500 MHz Intel Pentium III workstation ou equivalente UltraSPARC II 450 MHz AMD Opteron 100 Srie 1.8 GHz PowerPC G4 Memria 512 MB 512 MB 512 MB 512 MB 512 MB HD Livre 850 MB 450 MB 450 MB 450 MB 450 MB
Configurao Recomendada de Hardware Sistema Operacional Microsoft Windows Linux Solaris OS (SPARC) Solaris OS (x86/x64 Platform Edition) Mac OS X Processador 1.4 GHz Intel Pentium III workstation ou equivalente 1.4 GHz Intel Pentium III workstation ou equivalente UltraSPARC IIIi 1 GHz AMD Opteron 100 Series 1.8 GHz PowerPC G5 Memria 1 GB 1 GB 1 GB 1 GB 1 GB HD Livre 1 GB 850 MB 850 MB 850 MB 850 MB
Requerimentos de Software NetBeans Enterprise Pack 5.5 executando sobre Java 2 Platform Standard Edition Development Kit 5.0 ou superior (JDK 5.0, verso 1.5.0_01 ou superior), contemplando a Java Runtime Environment, ferramentas de desenvolvimento para compilar, depurar, e executar aplicaes escritas em linguagem Java. Sun Java System Application Server Platform Edition 9. Para Solaris, Windows, e Linux, os arquivos da JDK podem ser obtidos para sua plataforma em http://java.sun.com/j2se/1.5.0/download.html Para Mac OS X, Java 2 Plataform Standard Edition (J2SE) 5.0 Release 4, pode ser obtida diretamente da Apple's Developer Connection, no endereo: http://developer.apple.com/java ( necessrio registrar o download da JDK). Para mais informaes: http://www.netbeans.org/community/releases/55/relnotes.html
Introduo Programao I
JEDITM
Auxiliadores especiais
Reviso Geral do texto para os seguintes Pases:
Brasil Tiago Flach Guin Bissau Alfredo C, Bunene Sisse e Buon Olossato Quebi ONG Asas de Socorro
Coordenao do DFJUG
Daniel deOliveira JUGLeader responsvel pelos acordos de parcerias Luci Campos - Idealizadora do DFJUG responsvel pelo apoio social Fernando Anselmo - Coordenador responsvel pelo processo de traduo e reviso, disponibilizao dos materiais e insero de novos mdulos Regina Mariani - Coordenadora responsvel pela parte jurdica Rodrigo Nunes - Coordenador responsvel pela parte multimdia Srgio Gomes Veloso - Coordenador responsvel pelo ambiente JEDITM (Moodle)
Agradecimento Especial
John Paul Petines Criador da Iniciativa JEDITM Rommel Feria Criador da Iniciativa JEDITM
Introduo Programao I
JEDITM
1. Objetivos
Nesta lio, abordaremos alguns conceitos bsicos da Programao Orientada a Objetos ou POO. Mais adiante, discutiremos o conceito de classes e objetos e como usar as classes e seus membros. Comparao, converso e casting de objetos, tambm sero vistos. Por enquanto, o foco ser o uso das classes j definidas nas bibliotecas Java e, posteriormente, discutiremos como criar nossas prprias classes. Ao final desta lio, o estudante ser capaz de:
Explicar o que Programao Orientada a Objetos e alguns dos seus conceitos Diferenciar entre classes e objetos Diferenciar atributos e mtodos de objeto de atributos e mtodos de classe Explicar o que so mtodos, como invoc-los e como enviar argumentos Identificar o escopo de um atributo Realizar converses entre tipos de dados primitivos e entre objetos Comparar objetos e determinar suas classes
Introduo Programao I
JEDITM
leo
peso rugir cor dormir apetite (faminto ou saciado) caar temperamento (dcil ou selvagem)
Tabela 1: Exemplos de objetos do mundo real
Com tais descries, os objetos do mundo fsico podem ser facilmente modelados como objetos de software usando as propriedades como atributos e os comportamentos como mtodos. Estes atributos e mtodos podem ser usados em softwares de jogos ou interativos para simular objetos do mundo real! Por exemplo, poderia ser um objeto de 'carro' numa competio de corrida ou um objeto de 'leo' num aplicativo educacional de zoologia para crianas.
Introduo Programao I
JEDITM
3. Classes e Objetos
3.1. Diferenas entre Classes e Objetos
No mundo do computador, um objeto um componente de software cuja estrutura similar a um objeto no mundo real. Cada objeto composto por um conjunto de atributos (propriedades) que so as variveis que descrevem as caractersticas essenciais do objeto e, consiste tambm, num conjunto de mtodos (comportamentos) que descrevem como o objeto se comporta. Assim, um objeto uma coleo de atributos e mtodos relacionados. Os atributos e mtodos de um objeto Java so formalmente conhecidos como atributos e mtodos de objeto, para distinguir dos atributos e mtodos de classes, que sero discutidos mais adiante. A classe a estrutura fundamental na Programao Orientada a Objetos. Ela pode ser pensada como um gabarito, um prottipo ou, ainda, uma planta para a construo de um objeto. Ela consiste em dois tipos de elementos que so chamados atributos (ou propriedades) e mtodos. Atributos especificam os tipos de dados definidos pela classe, enquanto que os mtodos especificam as operaes. Um objeto uma instncia de uma classe. Para diferenciar entre classes e objetos, vamos examinar um exemplo. O que temos aqui uma classe Carro que pode ser usada pra definir diversos objetos do tipo carro. Na tabela mostrada abaixo, Carro A e Carro B so objetos da classe Carro. A classe tem os campos nmero da placa, cor, fabricante e velocidade que so preenchidos com os valores correspondentes do carro A e B. O carro tambm tem alguns mtodos: acelerar, virar e frear. Classe Carro Cor Fabricante Velocidade Mtodos de Objeto Objeto Carro A Azul Mitsubishi 50 km/h Mtodo Acelerar Mtodo Girar Mtodo Frear
Tabela 2: Exemplos da classe Carro e seus objetos
Quando construdos, cada objeto adquire um conjunto novo de estado. Entretanto, as implementaes dos mtodos so compartilhadas entre todos os objetos da mesma classe. As classes fornecem o benefcio do Reutilizao de Classes (ou seja, utilizar a mesma classe em vrios projetos). Os programadores de software podem reutilizar as classes vrias vezes para criar os objetos.
3.2. Encapsulamento
Encapsulamento um princpio que prope ocultar determinados elementos de uma classe das demais classes. Ao colocar uma proteo ao redor dos atributos e criar mtodos para prover o acesso a estes, desta forma estaremos prevenindo contra os efeitos colaterais indesejados que podem afet-los ao ter essas propriedades modificadas de forma inesperada.
Introduo Programao I
JEDITM
Podemos prevenir o acesso aos dados dos nossos objetos declarando que temos controle desse acesso. Aprenderemos mais sobre como Java implementa o encapsulamento quando discutirmos mais detalhadamente sobre as classes.
O operador new aloca a memria para o objeto e retorna uma referncia para essa alocao. Ao criar um objeto, invoca-se, na realidade, o construtor da classe. O construtor um mtodo onde todas as inicializaes do objeto so declaradas e possui o mesmo nome da classe.
Introduo Programao I
JEDITM
4. Mtodos
4.1. O que so mtodos e porque usar mtodos?
Nos exemplos apresentados anteriormente, temos apenas um mtodo, o mtodo main(). Em Java, ns podemos definir vrios mtodos e podemos cham-los a partir de outros mtodos. Um mtodo um trecho de cdigo distinto que pode ser chamado por qualquer outro mtodo para realizar alguma funo especfica. Mtodos possuem as seguintes caractersticas:
Podem ou no retornar um valor Podem aceitar ou no argumentos Aps o mtodo encerrar sua execuo, o fluxo de controle retornado a quem o chamou
O que necessrio para se criar mtodos? Porque no colocamos todas as instrues dentro de um grande mtodo? O foco destas questes chamado de decomposio. Conhecido o problema, ns o separamos em partes menores, que torna menos crtico o trabalho de escrever grandes classes.
public boolean equalsIgnoreCase Compara o contedo de duas Strings, ignorando (String anotherString) maisculas e minsculas. Duas strings so consideradas iguais quando elas tm o mesmo tamanho e os caracteres das duas strings so iguais, sem considerar caixa alta ou baixa.
Tabela 4: Exemplos de Mtodos da classe String
Usando os mtodos: String str1 = "Hello"; char x = str1.charAt(0); // retornar o caracter H // e o armazenar no atributo x
Introduo Programao I
JEDITM
String
str2 = "hello";
Quando ocorre um envio por valor, a chamada do mtodo faz uma cpia do valor do atributo e o reenvia como argumento. O mtodo chamado no modifica o valor original do argumento mesmo que estes valores sejam modificados durante operaes de clculo implementadas pelo mtodo. Por exemplo: public class TestPassByValue { public static void main( String[] args ){ int i = 10; //exibe o valor de i System.out.println( i ); //chama o mtodo test //envia i para o mtodo test test( i ); //exibe o valor de i no modificado System.out.println( i );
No exemplo dado, o mtodo test foi chamado e o valor de i foi enviado como argumento. O valor de i copiado para o atributo do mtodo j. J que j o atributo modificado no mtodo test, no afetar o valor do atributo i, o que significa uma cpia diferente do atributo. Como padro, todo tipo primitivo, quando enviado para um mtodo, utiliza a forma de envio por valor. 4.3.2. Envio por referncia
Quando ocorre um envio por referncia, a referncia de um objeto enviada para o mtodo chamado. Isto significa que o mtodo faz uma cpia da referncia do objeto enviado. Entretanto, diferentemente do que ocorre no envio por valor, o mtodo pode modificar o objeto para o qual a referncia est apontando. Mesmo que diferentes referncias sejam usadas nos mtodos, a localizao do dado para o qual ela aponta a mesma. Por exemplo:
Introduo Programao I
JEDITM
class TestPassByReference { public static void main(String[] args) { // criar um array de inteiros int []ages = {10, 11, 12}; // exibir os valores do array for (int i=0; i < ages.length; i++) { System.out.println( ages[i] ); } // chamar o mtodo test e enviar a // referncia para o array test( ages ); // exibir os valores do array for (int i=0; i < ages.length; i++) { System.out.println(ages[i]); }
} public static void test( int[] arr ){ // mudar os valores do array for (int i=0; i < arr.length; i++) { arr[i] = i + 50; } } }
Dicas de programao: 1. Um erro comum sobre envio por referncia acontece quando criamos um mtodo para fazer trocas (swap) usando referncia. Note que Java manipula objetos 'por referncia', entretanto envia-se a referncia para um mtodo 'por valor'. Como conseqncia, no se escreve um mtodo padro para fazer troca de valores (swap) entre objetos.
Introduo Programao I
10
JEDITM
B C
O cdigo acima representa cinco escopos indicado pelas letras. Dados os atributos i, j, k, m e n, e os cinco escopos A, B, C, D e E, temos os seguintes escopos para cada atributo: O escopo do atributo i A. Introduo Programao I 11
JEDITM
O O O O
do do do do
j k m n
B. C. D. E.
Dado dois mtodos: main e test teremos o seguinte exemplo: class TestPassByReference { public static void main(String[] args) { // criar um array de inteiros int []ages = {10, 11, 12}; //exibir os valores do array for (int i=0; i < ages.length; i++){ System.out.println( ages[i] ); } // chamar o mtodo test e enviar a referncia para o array test(ages); //exibe novamente os valores do array for (int i = 0; i < ages.length; i++) { System.out.println( ages[i] ); }
B A
E }
} public static void test(int[] arr) { // modificar os valores do array for (int i = 0; i < arr.length; i++) { arr[i] = i + 50; } }
Para o mtodo main, os escopos dos atributos so: ages[] - escopo A i em B - escopo B i em C escopo C E, no mtodo test, os escopos dos atributos so: arr[] - escopo D i em E - escopo E Quando atributos so declarados, o identificador deve ser nico no escopo. Isto significa que se voc tiver a seguinte declarao: { } int test = 10; int test = 20;
o compilador ir gerar um erro pois deve-se ter um nome nico para o atributos dentro do bloco. Entretanto, possvel ter atributos definidos com o mesmo nome, se no estiverem declarados no mesmo bloco. Por exemplo: public class TestBlock { int test = 10; Introduo Programao I 12
JEDITM
public void test() { System.out.print(test); int test = 20; System.out.print(test); } public static void main(String[] args) { TestBlock testBlock = new TestBlock(); testBlock.test(); } } Quando a primeira instruo System.out.print for invocada, exibir o valor 10 contido na primeira declarao do atributo test. Na segunda instruo System.out.print, o valor 20 exibido, pois o valor do atributos test neste escopo. Dicas de programao: 1. Evite ter atributos declarados com o mesmo nome dentro de um mtodo para no causar confuso.
Introduo Programao I
13
JEDITM
Por exemplo: double valDouble = 10.12; int valInt = (int)valDouble; //converte valDouble para o tipo int double x = 10.2; int y = 2; int result = (int)(x/y); //converte o resultado da operao para int Outro exemplo quando desejamos fazer um casting de um valor do tipo int para char. Um caractere pode ser usado como int porque para cada caractere existe um correspondente numrico que representa sua posio no conjunto de caracteres. O casting (char)65 ir produzir a sada 'A'. O cdigo numrico associado letra maiscula A 65, segundo o conjunto de caracteres ASCII. Por exemplo: char valChar = 'A'; System.out.print((int)valChar); //casting explcito produzir 65
Introduo Programao I
14
JEDITM
Analogamente converso de valores primitivos para um tipo maior, alguns objetos no necessitam ser convertidos explicitamente. Em conseqncia de uma subclasse conter todas as informaes da sua superclasse, pode-se usar um objeto da subclasse em qualquer lugar onde a superclasse esperada. Por exemplo, um mtodo que recebe dois argumentos, um deles do tipo Object e outro do tipo Window. Pode-se enviar um objeto de qualquer classe como argumento Object porque todas as classes Java so subclasses de Object. Para o argumento Window, possvel enviar apenas suas subclasses, tais como Dialog, FileDialog, Frame (ou quaisquer de subclasses de suas subclasses, indefinidamente). Isso vale para qualquer parte da classe, no apenas dentro da chamadas do mtodo. Para um objeto definido como uma classe Window, possvel atribuir objetos dessa classe ou qualquer uma de suas subclasses para esse objeto sem o casting.
O contrrio tambm verdadeiro. Uma superclasse pode usada quando uma subclasse esperada. Entretanto, nesse caso, o casting necessrio porque as subclasses contm mais mtodos que suas superclasses, e isso acarreta em perda de preciso. Os objetos das superclasses podem no dispor de todo o comportamento necessrio para agir como um objeto da subclasse. Por exemplo, se uma operao faz a chamada a um mtodo de um objeto da classe Integer, usando um objeto da classe Number, ele no ter muitos dos mtodos que foram especificados na classe Integer. Erros ocorrero se voc tentar chamar mtodos que no existem no objeto de destino. Para usar objetos da superclasse onde uma subclasse esperada, necessrio fazer o casting explcito. Nenhuma informao ser perdida no casting, entretanto, ganhar todos os atributos e mtodos que a subclasse define. Para fazer o casting de um objeto para outro, utiliza-se a mesma operao utilizada com os tipos primitivos: Para fazer o casting: (nomeClasse)objeto onde: nomeClasse o nome da classe destino objeto a referncia para o objeto origem que se quer converter
Uma vez que casting cria uma referncia para o antigo objeto de nomeClasse; ele continua a existir depois do casting.
Introduo Programao I
15
JEDITM
O exemplo a seguir realiza um casting de um objeto da classe VicePresident para um objeto da classe Employee. VicePresident uma subclasse de Employee com mais informaes, supondo que tenha sido definido que a classe VicePresident tem mais privilgios que um Employee. Employee emp = new Employee(); VicePresident veep = new VicePresident(); emp = veep; // casting no necessrio de baixo para cima veep = (VicePresident)emp; // necessita do casting explcito
Introduo Programao I
16
JEDITM
Dicas de programao: 1. A classe Void representa vazio em Java. Deste modo, no existem motivos para ela ser usada na converso de valores primitivos e objetos. Ela um tratador para a palavra-chave void, que utilizada na assinatura de mtodos indicando que estes no retornam valor.
} }
Introduo Programao I
17
JEDITM
A sada dessa classe a seguinte: String1: Free the bound String2: Free the bound Same object? true String1: Free the bound String2: Free the bound Same object? false Same value? true Vamos entender o processo envolvido. String str1, str2; str1 = "Free the bound periodicals."; str2 = str1; periodicals. periodicals. periodicals. periodicals.
A primeira parte dessa classe declara dois atributos (str1 e str2) e atribui a literal "Free the bound periodicals." a str1, e depois atribui esse valor a str2. Como visto anteriormente, str1 e str2 agora apontam para o mesmo objeto, e o teste de igualdade prova isso. Em seguida, temos a seguinte instruo: str2 = new String(str1); Na segunda parte da classe, cria-se um novo objeto String com o mesmo valor de str1 e faz-se a atribuio de str2 para esse novo objeto String. Agora temos dois diferentes tipos de objetos na str1 e str2, ambos com o mesmo contedo. Testando para ver se eles so o mesmo objeto usando o operador de igualdade obtemos a resposta esperada: false eles no so o mesmo objeto na memria. Utilizando o mtodo equals() recebemos a resposta esperada: true eles tem o mesmo contedo.
Dicas de programao: 1. Porque no se pode ter a mesma literal quando mudamos str2, a no ser quando utilizamos o new? Literais String so otimizadas em Java; se uma String criada utilizando uma literal e cria-se outra String com os mesmos caracteres,
Introduo Programao I
18
JEDITM
Java tem inteligncia suficiente para retornar apenas a posio em memria do primeiro objeto String criado. Ou seja, ambas strings se referem ao mesmo objeto como se fosse um apelido. Para obrigar ao Java criar um novo objeto String, deve-se utilizar o operador new.
Introduo Programao I
19
JEDITM
6. Exerccios
6.1. Definindo termos
Em suas palavras, defina os seguintes termos: 1. 2. 3. 4. 5. 6. 7. 8. Classe Objeto Instanciao Atributo de objeto Mtodo de objeto Atributo de classe ou atributos estticas Construtor Mtodo de classe ou mtodos estticos
Introduo Programao I
20
JEDITM
Instituto CTS Patrocinador do DFJUG. Sun Microsystems Fornecimento de servidor de dados para o armazenamento dos vdeo-aulas. Java Research and Development Center da Universidade das Filipinas Criador da Iniciativa JEDITM. DFJUG Detentor dos direitos do JEDITM nos pases de lngua portuguesa. Banco do Brasil Disponibilizao de seus telecentros para abrigar e difundir a Iniciativa JEDITM. Politec Suporte e apoio financeiro e logstico a todo o processo. Borland Apoio internacional para que possamos alcanar os outros pases de lngua portuguesa. Instituto Gaudium/CNBB Fornecimento da sua infra-estrutura de hardware de seus servidores para que os milhares de alunos possam acessar o material do curso simultaneamente.
Introduo Programao I
21