Você está na página 1de 27

UNIVERSIDADE FEDERAL DO MARANHO CENTRO DE CINCIAS EXATAS E TECNOLOGIA - CCET CURSO DE CINCIA DA COMPUTAO DISCIPLINA DE COMPILADORES I

A Linguagem

JAVA
Henry Franklin Duailibe da Costa (CP 99106-22) Igor de Jesus Mesquita (CP 98204-19)

So Lus/MA jan. de 2001

SUMRIO
1. Histrico da Linguagem.............................................................................................4 1.1. O Projeto Green.......................................................................................................5 1.2. WebRunner e HotJava............................................................................................5 1.3. Garbage Collection (Libera uma coleo).............................................................6 2. Adquirindo o software necessrio e plataformas suportadas.................................6 3. Caractersticas da linguagem ....................................................................................7 3.1. Parecida com C, C++...............................................................................................7 3.2. Compilada ................................................................................................................7 3.3. Portvel.....................................................................................................................7 3.4. Orientada a Objetos ................................................................................................8 3.5. Segura .......................................................................................................................8 3.6. Suporta concorrncia ..............................................................................................9 3.7. Eficiente ....................................................................................................................9 3.8. Suporte para programao de sistemas distribudos ...........................................9 4. Tipos de Dados ..........................................................................................................10 4.1. Comentrios ...........................................................................................................10 4.2. Ponto e vrgula, Blocos e o espao em branco....................................................10 4.3. Identificadores .......................................................................................................10 4.4. Tipos Bsicos no Java............................................................................................10 4.4.1. Tipo Lgico..........................................................................................................10 4.4.2. Tipo Textual ........................................................................................................10 4.5. Tipo Ponto Flutuante ............................................................................................11 5. Tipos de dados avanados: ......................................................................................11 5.1. Declarao de Arrays ............................................................................................11 5.1.1. Criando um Array ..............................................................................................11 5.1.2. Arrays Multi-dimencionais................................................................................12 6. Variveis e Tempo de vida.......................................................................................12 6.1. Inicializao de variveis ......................................................................................12 7. Operadores ................................................................................................................13 7.1. Concatenao .........................................................................................................14 7.2. Casting ( Converso de tipos )..............................................................................14 8. Instrues de controle: .............................................................................................14 9. Palavras Reservadas.................................................................................................15 10. Estruturao terica da linguagem: .....................................................................16 10.1. Classes e objetos: .................................................................................................16 10.10. Subclasses (Relacionadas).................................................................................18 10.11. Subclasses (Extenses).......................................................................................18

10.12. Herana Simples ................................................................................................19 10.13. Polimorfismo ......................................................................................................19 10.14. Argumentos de Mtodos e Colees Heterogneas.........................................19 10.15. O Operador instanceof......................................................................................20 10.16. Objetos Lanados ..............................................................................................20 10.17. Sobre-escrevendo Mtodos ...............................................................................20 10.2. Abstrao de Tipos de Dados .............................................................................16 10.3. Definio de Mtodos ..........................................................................................16 10.4. Passagem de Valores ...........................................................................................17 10.5. A Referncia This ................................................................................................17 10.6. Ocultando Dados .................................................................................................17 10.7. Encapsulamento...................................................................................................17 10.8. Sobrescrevendo Mtodos ....................................................................................18 10.9. Construtores.........................................................................................................18 11. Comparando Java com outras Linguagens..........................................................21 11.1. Classes se agrupando - Pacotes ..........................................................................21 11.2. A declarao import ............................................................................................22 12. O que um Applet?................................................................................................22 12.1. Carregando um Applet .......................................................................................22 12.2. Segurana e Restries nos Applet ....................................................................22 12.3. Mtodos de Applet chaves...................................................................................22 12.4. Applet Display......................................................................................................23 13. Ponteiros, Pointers, Referncias e Objetos.......................................................23 13.1. Passagem por referncia .....................................................................................23 13.2. Vetores e matrizes................................................................................................23 14. Alocao Dinmica .................................................................................................25 14.1. Representao linear de uma matriz .................................................................25 14.2. Matrizes definidas na linguagem: ......................................................................26 15. Concluso (Viso geral da linguagem): ................................................................26

1. Histrico da Linguagem Java uma linguagem de programao ideal para aplicativos para a Internet. Mostraremos a seguir as origens da linguagem, e porque ela to apropriada para ser usada na Internet, particularmente na WorldWide Web. Embora as papplets Java sejam escritas na linguagem Java, no necessrio saber programar em Java para us-las. Se voc est interessado em usar applets sem realmente programar em Java, pode pular esta parte, que introduz a linguagem. Voc pode ler a definio da linguagem Java (em ingls), no site Java/HotJava da Web. http://www.javasoft.com/hooked/language-ref.html A Histria da Linguagem Java A histria de uma linguagem de programao pode contar muita coisa sobre a linguagem em si. Durante a fase de projeto, importante usar a linguagem em aplicativos reais. Do contrrio, a linguagem no ser to til quando for lanada, e no ser to divertido programar nela. A linguagem de programao Java foi usada no desenvolvimento de diversos aplicativos enquanto estava sendo projetada. Originalmente, pretendia-se que a Java fosse usada na programao de produtos eletrnicos de consumo (eletrodomsticos, eletroeletrnicos). Entretanto, ela se transformou em uma grande linguagem para programao para a WorldWide Web. As Origens da Java A linguagem de programao Java foi projetada e implementada por uma pequena equipe de pessoas coordenada por James Gosling na Sun Microsystems em Mountain View, Califrina. Alm de seu trabalho com a Java, James Gosling o autor do emacs do Unix e do sistema de janelas neWs. http://ww.javasoft.com/people/jag/index.html. A equipe Java original trabalhava no projeto de software para produtos eletrnicos de consumo. Rapidamente, eles descobriram que as linguagens de programao existentes, como C e C++, no eram adequadas. Programas escritos em C e C++ tm de ser compilados para cada tipo especfico de processador (chip de CPU). Quando um novo processador lanado, a maior parte do software tem de ser recompilada, para aproveitar os novos recursos do processador. Depois de compilados, os programas em C e C++ no so facilmente adaptveis ao uso de novas bibliotecas de software. Os programas tm de ser totalmente recompilados quando a biblioteca muda. Entretanto, softwares para produtos de eletrnica de consumo devem funcionar em novos processadores, porque os fabricantes tm como restrio o custo dos componentes. Se o preo de um processador fica muito alto, eles o substituiro imediatamente por um mais novo, de custo-benefcio mais atraente. Mesmo pequenas variaes de preo podem fazer diferena, quando se pensa em termos de vendas de milhes de unidades. Outro problema no uso de linguagens de programao tradicionais para o software de produtos eletrnicos de consumo est em que o consumidor quer uma vida til longa para seu produto. H torradeiras funcionando que tm 50 anos de idade. O plugue ainda se encaixa na tomada e as fatias de po ainda se encaixam nas aberturas. Os Software normalmente tem uma vida til bem mais curta, o que tornaria difcil construir uma torradeira com um computador embutido. Sempre que novos programas para torradeiras fossem escritos, eles teriam de apresentar compatibilidade retroativa, pois o software das torradeiras antigas teria de ser substitudo.

O software usado em produtos eletrnicos de consumo tambm precisa ser muito confivel, muito mais do que o software para computadores. Se um eletrodomstico ou eletroeletrnico falha, o fabricante geralmente tem de substituir todo o aparelho. Em 1990, James Gosling comeou a projetar uma linguagem de programao nova, que seria mais apropriada para produtos eletrnicos de consumo, sem os problemas de linguagens tradicionais como C e C++. O resultado Java, uma linguagem muito rpida, pequena e confivel, que rodar em todos os tipos de processadores.

1.1. O Projeto Green O primeiro projeto a usar a linguagem Java foi o projeto Green. Seu propsito era testar um novo tipo de interface do usurio para controlar um ambiente domstico (videocassete, televisor, luzes, telefone, e assim por diante). As pessoas que trabalhavam no projeto Green construram um computador experimental de mo, que recebeu o nome-cdigo de *7 (pronuncia-se "star seven"). A interface do usurio consistia em uma representao animada em cores da casa, na qual os aparelhos eletrodomsticos podiam ser manipulados tocando-se na tela. Ela era, claro, completamente escrita em Java. Oito prottipos operacionais do *7 foram construdos. A interface do usurio *7 usava figuras animadas na tela para controlar os eletrodomsticos. A equipe de desenvolvimento Java ainda usa algumas das figuras do projeto *7. Duke, que agora o mascote da Java, foi uma figura animada neste projeto. O projeto que deu continuidade ao *7 foi uma demonstrao de vdeo-por-demanda (VPD). Este projeto demonstrou que a interface do usurio com figuras de desenho animado do *7 poderia ser usada para TV interativa da mesma forma que para controlar eletrodomsticos. Os projetos *7 e VPD resultaram em software experimental, mas no se transformaram em produtos reais. Ambos os projetos foram implementados inteiramente em Java e ajudaram a amadurecer a linguagem Java.

1.2. WebRunner e HotJava Na poca em que Arthur e Sami entraram no projeto Java, em 1993, a WorldWide Web estava passando de uma interface baseada em texto para uma mais grfica, gerando assim, enorme interesse. Ocorreu ento equipe de desenvolvimento Java que uma linguagem independente de plataforma como a Java seria ideal para a programao de aplicativos Web, uma vez que um programa em Java poderia rodar nos diversos tipos de computadores ligdos `Internet, de PCs a Macs e sistemas Unix. O resultado foi um browser da Web chamado WebRunner inteiramente escrito em Java. Mais tarde, por razes comerciais, este browser foi rebatizado de HotJava, e foi o primeiro suporte a applets Java. O HotJava foi um passo importante para a linguagem Java. Ele no apenas amadureceu a linguagem, mas tambm apresentou-a ao mundo. Quando outros programadores viram o que a equipe de desenvolvimento Java estava fazendo com o HotJava, muitos deles quiseram usar esta nova tecnologia em seus produtos de software, tambm.

O anncio oficial da tecnologia Java foi feito em maio de 1995 na conferncia SunWorld em San Francisco (EUA). Nela, Marc Andreessen, um dos fundadores e vicepresidente de tecnologia da Netscape Communications, anunciou que o Netscape Navigator daria suporte a applets Java. O Netscape Navigator 2.0, lanado no fim de 1995, d suporte Java e aumentou ainda mais o interesse j existente pela tecnologia Java. A equipe de desenvolvimento Java, localizada em Palo Alto, Califrnia, continua a refinar e a desenvolver a linguagem e o browser HotJava para corresponder a este interesse . http: / / www.javasoft.com/hooked/people.html

1.3. Garbage Collection (Libera uma coleo) O Java no segura reas de memria que no esto sendo utilizadas, isto porque ele tem uma alocao dinmica de memria em tempo de execuo. No C e C++ (e em outras linguagens) o programa desenvolvido responsvel pela alocao e desalocao da memria. Durante o ciclo de execuo do programa o Java verifica se as variveis de memria esto sendo utilizadas, caso no estejam o Java libera automaticamente esta rea que no esta sendo utilizada.

2. Adquirindo o software necessrio e plataformas suportadas Um ambiente de programao Java normalmente composto de um kit de desenvolvimento de aplicaes Java e um browser compatvel com esta linguagem (recomendvel). Se voc no tem acesso a esse ambiente de programao, tente estes endereos:

DOWNLOAD JAVA

http://Java.sun.com Raiz do hipertexto montado pelos criadores da linguagem. Sob este endereo voc pode obter o compilador e outras ferramentas de desenvolvimento de aplicaes Java para a sua plataforma de programao. Fique atento! Outros desenvolvedores esto criando ambientes de programao Java.

DOWNLOAD BROWSERS

http://www.netscape.com Raiz do hipertexto montado pelos criadores do Netscape Navigator. Sob este endereo voc pode obter o browser Java compatible da Netscape Comunications INC.. Outros desenvolvedores esto lanando browsers compatveis com Java.

DOWNLOAD BROWSERS

http://www.microsoft.com A microsoft licenciou a tecnologia Java e a incorporou em seu novo browser: Internet Explorer verso 3.0 ou superior.

BROWSERS: So uma categoria de programas que permitem voc visualizar um documento criado em um certo padro, no caso html (hipertext markup language). Atualmente os browsers tem se tornado complexos devido a quantidade de padres existentes (ex. imagens .gif .jpg, etc). A linguagem Java pode contribuir para minimizar esta complexidade.

3. Caractersticas da linguagem 3.1. Parecida com C, C++ Java tem a aparncia de C ou de C++, embora a filosofia da linguagem seja diferente. Por este motivo estaremos frequentemente fazendo comparaes alguma destas linguagens. O leitor que programa em qualquer uma delas, ou em uma linguagem orientada a objetos, se sentir mais a vontade e se tornar um bom programador Java em menos tempo. Java tambm possui caractersticas herdadas de muitas outras linguagens de programao: Objective-C, Smalltalk, Eiffel, Modula-3, etc. Muitas das caractersticas desta linguagem no so totalmente novas. Java uma feliz unio de tecnologias testadas por vrios centros de pesquisa e desenvolvimento de software.

3.2. Compilada Um programa em Java compilado para o chamado byte-code, que prximo as instrues de mquina, mas no de uma mquina real. O byte-code um cdigo de uma mquina virtual idealizada pelos criadores da linguagem. Por isso Java pode ser mais rpida do que se fosse simplesmente interpretada.

3.3. Portvel Java foi criada para ser portvel. O byte-code gerado pelo compilador para a sua aplicao especfica pode ser transportado entre plataformas distintas que suportam Java (Solaris 2.3, Windows-NT, Windows-95, Mac/Os etc). No necessrio recompilar um programa para que ele rode numa mquina e sistema diferente, ao contrrio do que acontece por exemplo com programas escritos em C e outras linguagens. Esta portabilidade importante para a criao de aplicaes para a heterognea internet. Muitos d os programas exemplo deste tutorial foram escritos e compilados numa plataforma Windows-95 e rodaram perfeitamente quando simplesmente copiados para uma plataforma Solaris 2.3. Em Java um inteiro por exemplo, tem sempre 32 bits, independentemente da arquitetura. O prprio compilador Java escrito em Java, de modo que ele portvel para qualquer sistema que possua o interpretador de byte-codes. Um exemplo de programa escrito em Java o browser hotjava.

3.4. Orientada a Objetos A portabilidade uma das caractersticas que se inclui nos objetivos almejados por uma linguagem orientada a objetos. Em Java ela foi obtida de maneira inovadora com relao ao grupo atual de linguagens orientadas a objetos. Java suporta herana, mas no herana mltipla. A ausncia de herana mltipla pode ser compensada pelo uso de herana e interfaces, onde uma classe herda o comportamento de sua superclasse alm de oferecer uma implementao para uma ou mais interfaces. Java permite a criao de classes abstratas. Outra caracterstica importante em linguagens orientadas a objetos a segurana. Dada a sua importncia o tpico foi escrito a parte.

3.5. Segura A presena de coleta automtica de lixo, evita erros comuns que os programadores cometem quando so obrigados a gerenciar diretamente a memria (C , C++, Pascal ). A eliminao do uso de ponteiros, em favor do uso de vetores, objetos e outras estruturas substitutivas traz benefcios em termos de segurana. O programador proibido de obter acesso a memria que no pertence ao seu programa, alm de no ter chances de cometer erros comuns tais como reference aliasing e uso indevido de aritmtica de ponteiros. Estas medidas so particularmente teis quando pensarmos em aplicaes comerciais desenvolvidas para a internet. Ser strongly typed tambm uma vantagem em termos de segurana, que est aliada a eliminao de converses implcitas de tipos de C++. A presena de mecanismos de tratamento de excees torna as aplicaes mais robustas, no permitindo que elas abortem, mesmo quando rodando sob condies anormais. O tratamento de excees ser til na segunda parte para modelar situaes tais como falhas de transmisso e formatos incompatveis de arquivos. Os arquivos do Java so compilados e so convertidos de arquivos texto para um formato que contm blocos independentes de bytes codes (Cdigo Intermedirio). Em tempo de execuo estes bytes codes so carregados, so verificados atravs do Byte Code Verifier (uma espcie de segurana), passam asseguir para o interpretador e so executados. Caso este cdigo seja acionado diversas vezes, existe um passo chamado JIT Code Generator, que elimina o utilizao por demasia do trfego da rede.

Javac T1.java

Class Loader

Byte Code
T1.class Runtime

hardware

Abra o Notepad e crie o seguinte programa. Salve-o como Prog0101.java class Prog0101 { public static void main (String arg []) { int a = 5, b = 10; a = a + 5; System.out.println("Meu Primeiro Progama"); System.out.println(" O valor da variavel a = " + a); } } Aps terminar o programa compile-o e execute-o: C:\.....\Javac Progr0101.java C:\.....\ Java Prog0101

3.6. Suporta concorrncia A linguagem permite a criao de maneira fcil, de vrios threads de execuo. Este tpico ser til quando voc estudar animaes, e particularmente poderoso nos ambientes em que aplicaes Java so suportadas, ambientes estes que geralmente podem mapear os threads da linguagem em processamento paralelo real.

3.7. Eficiente Como Java foi criada para ser usada em computadores pequenos, ela exige pouco espao, pouca memria. Java muito mais eficiente que grande parte das linguagens de scripting existentes, embora seja cerca de 20 vezes mais lenta que C, o que no um marco definitivo. Com a evoluo da linguagem, sero criados geradores de byte-codes cada vez mais otimizados que traro as marcas de performance da linguagem mais prximas das de C++ e C. Alm disso um dia Java permitir a possibilidade de gerar cdigo executvel de uma particular arquitetura on the fly, tudo a partir do byte-code.

3.8. Suporte para programao de sistemas distribudos Java fornece facilidades para programao com sockets, remote method call, tcpip, etc. Estes tpicos no sero abordados neste texto.

4. Tipos de Dados 4.1. Comentrios Estes so os trs tipos permitidos de comentrios nos programas feitos em Java: // comentrio de uma linha /* comentrio de uma ou mais linhas */ /** comentrio de documentao */ (Arquivos de documentao)

4.2. Ponto e vrgula, Blocos e o espao em branco No java, os comandos so terminados com o sinal de ponto e vrgula (;) Um bloco tem incio e tem o seu fim representados pelo uso das chaves {}; O uso do espao em branco permite uma melhor visualizao dos comandos e em conseqncia facilita a sua manuteno.

4.3. Identificadores Na linguagem Java um identificador startado com uma letra, undersco ( _ ), ou sinal de dlar ($), e existe uma diferenciao entre letras maisculas e minsculas: Identificadores vlidos: identifier userName User_name _sys_var1 $change

4.4. Tipos Bsicos no Java No Java existem oitos tipos bsicos e um tipo especial.

4.4.1. Tipo Lgico - boolean: on e off; true e false ou yes e no.

4.4.2. Tipo Textual - char e String Um caracter simples usa a representao do tipo char. O tipo char representa na forma Unicode um caracter de 16-bit. O literal do tipo char pode ser representado com o uso do ( ).

\n nova linha \r enter \u???? especifica um caracter Unicode o qual representado na forma Hexadecimal. \t tabulao \\ - \ \ - O tipo String, como no primitivo, usado para representar uma seqncia de caracteres.

4.5. Tipo Ponto Flutuante Uma varivel do tipo ponto flutante pode ser declarada usando a palavar float ou double. 3.14 6.02E23 2.718F 123.4E+306D Um ponto flutuante simples; Um valor de ponto flutuante largo; Um valor de ponto flutuante simples; Um valor de ponto flutuante usando o tipo double.

5. Tipos de dados avanados 5.1. Declarao de Arrays char s [ ]; Point p [ ]; Em Java um Array uma classe.

5.1.1. Criando um Array Voc pode criar arrays, ligando-o a todos os objetos, usando a palavra new, da seguinte forma: s = new char[20]; p = new Point[100]; String names[ ]; names = new String[4]; names[0]= Georgina; names[1]=Jen; names[2]=Simon; names[3]= Tom;

ou String names[ ]; names = new String[4]; String names [ ] = { Georgina, Jean, Simon, Tom};

5.1.2. Arrays Multi-dimencionais Java no possui arrays multi-dimencionais, mas ele permite declarar um array que baseado em um outro array. int twoDim [ ] [ ] = new int [4] [ ] ; twoDim[0] = new int [5] ; twoDim[1] = new int [5] ;

6. Variveis e Tempo de vida Voc tem dois meios para descrever variveis: usando o tipo simples de ligao int e float ou usando tipos de classes definidas pelo programa. Voc pode declarar variveis de duas formas, uma dentro de um mtodo e a outra dentro da classe a qual este mtodo est includo.

6.1. Inicializao de variveis No Java no permitido o uso de variveis indefinidas. Variveis definidas dentro do mtodo so chamadas de variveis automticas, locais, temporrias ou estticas e devem ser inicializadas antes do uso. Quando um objeto criado, as variveis membro so inicializadas com os seguintes valores em tempo de alocao:

Tipo de varivel byte short Int long float Double Char Boolean

Valor inicial 0 0 0 0L 0.0f 0.0d \u0000 (Null) false

Tamanho 8 bits 16 bits 32 bits 64 bits 32 bits 64 bits 64 bits

7. Operadores No Java os operadores so muito similares ao estilo e funcionalidade de outras linguagens como por exemplo o C e o C++. Pr-incremento: x = 10; x = x + 1; O valor da varivel x 11 ou x = 10; ++x O valor da varivel x 11. Ps-Incremto: x = 10; x = x + 1; O valor da varivel x 11 ou x = 10; x++ O valor da varivel x 11. Diferena entre o Pr-Incremento e o Ps-Incremento: x = 10 ++x => neste exato momento a varivel a vale 11 x =10 x++ => neste exato momento a varivel x vale 10 Separadores: . Operadores: Operadores == != +-*/ && || Igualdade Negao Aritmticos e ou Descrio [] () ; ,

7.1. Concatenao O operador + utilizado para concatenar objetos do tipo String, produzindo uma nova String: String PrimeiroNome = Antonio; String SegundoNome = Carlos; String Nome = PrimeiroNome + SegundoNome;

7.2. Casting ( Converso de tipos ) A linguagem Java no suporta converses arbitrrias de tipos de variveis. Voc deve explicitar a converso entre tipos de variveis. Exemplo: long bigval = 6; int smallval = 99L; float z = 12.414F; float zp = 12.414; Convertendo Long bigValue = 99L; Int squashed = (int)(bigValue); // Operao vlida // Operao invlida porque so de tipos diferentes // Operao vlida // Invlido, porque est tentando atribuir um valor double.

8. Instrues de controle: Declaraes de Fluxos If, else if (expresso) // expresso cujo retorno um valor do tipo boolean { Declaraes ou blocos } else // caso a condio anterior no seja satisfeita { Declaraes ou blocos }

switch switch (expresso) // Esta expresso deve ser do tipo int ou char { case cond01: declaraes; break; // usado para sair do case.

case cond02: declaraes; break; case cond03: declaraes; break; }

for Loops for (expr_inicial; condio_boolean; incremento) { Declaraes ou blocos; }

while Loops while(condio_boolean) { Declaraes ou blocos; }

do Loops do { Declaraes ou blocos; } while(condio_boolean);

9. Palavras Reservadas abstract boolean breaak transient case catch char class continue if do double else byte false final finally float for package implements import instanceof extends interface long native new null this private protected public int short static super switch synchronized throw throws true return try void volatile while default

10. Estruturao terica da linguagem: 10.1. Classes e objetos: Veculos

1 Nvel

2 Nvel

Veculos de Passeio

Veculos de Transporte

3 Nvel

Fabricante

n Nveis

10.2. Abstrao de Tipos de Dados Quando itens de dados so compostos para tipos de dados, semelhante a uma data, voc pode definir um nmero de bits de programas que especifica a operao do tipo de dados. Em Java voc pode criar uma associao entre o tipo data e a operao tomorrow a seguir: public class Date { private int day, month, year; public void tomorrow( ) { // cdigo que incrementa o dia } }

10.3. Definio de Mtodos Em Java, mtodos so definidoss usando uma aproximao que muito similar usada em outras linguagens, como por exemplo C e C++. A declarao feita da seguinte forma: < modifiers > <tipo de retorno> < nome > ( < lista de argumentos > ) < bloco >

< modifiers > -> segmento que possue os diferentes tipos de modificaes inclundo public, protected e private. < tipo de retorno > -> indica o tipo de retorno do mtodo. < nome > -> nome que identifica o mtodo. < lista de argumentos > -> todos os valores que sero passados como argumentos. public void addDays (int days)

10.4. Passagem de Valores Em Java o nico argumento passado by-value; este um argumento may not be changed do mtodo chamado. Quando um objeto criado, passado um argumento para o mtodo e o valor deste argumento uma referncia do objeto. O contedo do objeto passvel de alterao chamado do mtodo, mas o objeto referenciado jamais alterado.

10.5. A Referncia This aplicado a mtodos no estticos. O Java associa automaticamente a todas as variveis e mtodos referenciados com a palavara this. Por isso, na maioria dos casos torna-se redundante o uso em todas as variveis da palavra this. Existem casos em se faz necessrio o uso da palavar this. Por exemplo, voc pode necessitar chamar apenas uma parte do mtodo passando uma instncia do argumento do objeto. (Chamar um classe de forma localizada); Birthday bDay = new Birthday(this);

10.6. Ocultando Dados Usando a palavra private na declarao de day, month e year na classe Date, voc impossibilitar o acesso a estes membros de um cdigo fora desta classe. Voc no ter permisso para atribuir valores, mas poder comparar valores.

10.7. Encapsulamento uma proteo adicional dos dados do objeto de possveis modificaes imprprias, forando o acesso a um nvel mais baixo para tratamento do dados.

10.8. Sobrescrevendo Mtodos O Java permite que voc tenha mtodos com o mesmo nome, mas com assinaturas diferentes. Isto permite a reusabilidade dos nomes dos mtodos. public void print( int i ) public void print( float f ) public void print( String s) Quando voc escreve um cdigo para chamar um desses mtodo, o mtodo a ser chamado ser o que coincidir com tipos de dados da lista de parmetros.

10.9. Construtores O mecanismo de inicializao do Java automtico, ou seja se no incializarmos um construtor, o Java o inicializar automaticamente. Mas existem casos que se faz necessrio a declarao explicita dos construtores. Para escrever um mtodo que chama um construtor, voc deve seguir duas regras: 1 O nome do mtodo precisa ser igual ao nome da classe. 2 No deve retornar um tipo declarado para o mtodo.

10.10. Subclasses (Relacionadas) Na classe Pai voc deve declarar os objetos comun a todos, e nos sub-nveis (Subclasses), voc declara as particulariedades: public class Employee { private String name; private Date hireDate; private Date dateOfBirth; private String jobTitle; private int grade; ....... }

10.11. Subclasses (Extenses) Em linguagens de orientao a objetos, um mecanismo especial fornecido para que permita ao programa defina classes e termos previstas na definio de outras classes. Esta arquitetura em Java usa a palavra extends.

public class Employee { private String name; private Date hireDate; private Date dateOfBirth; private String jobTitle; private int grade; }

public class Manager extends Employee { private String departament; private Employee [ ] subordinates; ........... }

10.12. Herana Simples Em Java no existe herana mltipla. Em Java os Construtores no so herdados. Java permite que uma classe extenda uma outra classe, com isso esta classe herda as caractersticas da outra classe.

10.13. Polimorfismo A idia de polimorfismo a de muitas formas, onde eu posso utilizar uma classe de diversas maneiras e formas possveis. public class Employee extends Object and public class Manager extends Employee

10.14. Argumentos de Mtodos e Colees Heterogneas Usando esta aproximao voc pode escrever mtodos que aceitam um objeto genrico. O uso do polimorfismo fornece uma srie de facilidades. public TaxRate findTaxRate( Employee e) { Manager m = new Manager( ); .......

TaxRate t = findTaxRate(m); Isto possvel porque um Gerente um empregado. Uma coleo heterognea uma coleo de coisas diferentes. Em linguagem orientada a objetos, voc pode criar uma coleo de coisas que tem uma classe de antepassados comuns. Assim ns poderemos fazer isso. Employee [ ] staff = new Employeee [ 1024 ]; staff[ 0 ] = new Manager ( ); staff[ 1 ] = new Employee ( ); E assim sucessivamente nos podemos escrever um mtodo de tipos que pe empregados ordenados por idade ou em ordem salarial sem ter que se preocupar com a ordem de insero.

10.15. O Operador instanceof Fornece o dado que voc adquiriu atravs da passagem de parmetros. Caso voc receba um object por referncia do tipo Employee, esta referncia poderia no ser mostrado para Manager. Se voc quiser testar isso use instanceof. public void method(Employee e) { if (e instanceof Manager) { } else if ( e instanceof Contractor) { } else } }

10.16. Objetos Lanados Em circunstncias onde voc recebeu uma referncia para uma classe pai, e voc determinou que o objeto de fato uma subdiviso de classe particular usando o operador de instanceof, voc pode restabelecer a funcionalidade completa do objeto lanado.

10.17. Sobre-escrevendo Mtodos O Java permite que voc declare mtodos na classe pai e no desenvolva nenhuma lgica dentro desses mtodos, permitindo com isso que o desenvolvimento desses mtodos venha a ser trabalhados dentro das sub-classes posteriores.

Class Funcionario( ) ler( ) Class Motorista( ) ler ( ) Super.ler( ) -> Referencia o mtodo da classe pai

11. Comparando Java com outras Linguagens Em C++ voc pode adquirir este comportamento, desde que voc marque o mtodo como virtual na fonte.

11.1. Classes se agrupando - Pacotes Java prov o mecanismo de pacotes como um modo de se agrupar classes relacionadas. To longe, todos nossos exemplos pertencem falta ou pacotes no mencionados.

A @

a B B @B

b c B.e

onde: @ - Pacote letra (a, b ...) - classe

11.2. A declarao import Em Java, quando voc quer usar instalaes de pacotes, voc usa a declarao de importao para contar para o compilador onde achar as classe que voc vai usar. A declarao de importao (import) deve preceder a declarao de todas as classes.

12. O que um Applet? Um applet um pedao de cdigo de Java que corre em um ambiente de browser. Difere de uma aplicao do modo que executado. Uma aplicao comeada quando seu mtodo main() chamado. Atravs de contraste, o ciclo de vida de um applet um pouco mais complexo. Este mdulo examina como um applet corrido, como carregar isto no browser, e como escrever o cdigo para um applet.

12.1. Carregando um Applet Voc tem que criar um arquivo de HTML que conta para o browser o que carregar e como correr isto. Voc ento "aponta" o browser ao URL que especifica aquele arquivo de HTML. 12.2. Segurana e Restries nos Applet Existem Seguranas e Restries nos Applets porque applets so pedaos de cdigo que so carregados em cima de arames, eles representam um prospecto perigoso; imagine se algum escrever um programa malicioso que l seu arquivo de contra-senha e envia isto em cima da Internet? O modo que Java previne isto est contido na classe de SecurityManager que controla acesso para quase toda chamada de sistema-nvel no Java Mquina Virtual (JDK). Portanto Applets no faz chamadas ao seu sistema operacional.

12.3. Mtodos de Applet chaves Em uma aplicao, no programa entrado ao mtodo main(). Em um applet, porm, este no o caso. O primeiro cdigo que um applet executa o cdigo definido para sua inicializao, e seu construtor. Depois que o construtor completado, o browser chama um mtodo no applet chamado init (). O mtodo init () executar inicializao bsica do applet . Depois de init () completado, o browser chama outro mtodo chamado start ().

12.4. Applet Display Voc pode puxar sobre a exibio de um applet criando um mtodo paint(). O mtodo paint() chamado pelo ambiente de browser sempre que a exibio do applet precise ser refrescado. Por exemplo, isto acontece quando a janela de browser aparecida depois de ser minimizado.

13. Ponteiros, Pointers, Referncias e Objetos Algum pode ter achado estranho que no foram discutidos ponteiros em Java, ocorre que eles no existem nessa linguagem. Existem estudos que afirmam que erros com ponteiros so um dos principais geradores de bugs em programas, alm disso com todos os recursos que temos no precisaremos deles. Os programadores acostumados ao uso de ponteiros (e aos erros decorrentes desse uso), acharo muito natural e segura a transio para Java onde passaro a usar principalmente vetores e classes. A estruturao de seu cdigo dever agora ser feita em um modelo que se baseia no uso de objetos (vetores e Strings tambm so objetos). Objetos superam a representatividade obtida com records, funes isoladas e ponteiros. De certo modo voc estar usando referncias, mas de forma implcita. Por exemplo: objetos so alocados dinamicamente com new, eles so referncias ou ponteiros para posies na memria, mas a linguagem mascara este fato por razes de segurana. Como objetos so ponteiros (s que transparentes para voc), nos depararemos com o problema de reference aliasing quando discutirmos cpia de objetos com outros objetos como atributos. 13.1. Passagem por referncia Linguagens como Pascal ou C criam meios de passar parmetros por valor ou por referncia. Como Java no possui ponteiros, a passagem por referncia deve ser feita atravs de objetos. Se o parmetro j um objeto, ento a passagem dele obrigatoriamente por referncia. No caso de tipos simples, podemos pass-los dentro de vetores que so objetos, ou ento criar classes para embalar, empacotar estes tipos. Dada a necessidade destas classes, elas j foram definidas na linguagem. So classes definidas para conter cada tipo bsicos e permitir certas converses entre eles, falaremos destas classes conforme necessitarmos de seu uso. As vezes estas classes so chamadas de wrappers. 13.2. Vetores e matrizes Vetores so objetos, eles possuem papel importante no estilo de programao desta linguagem que exclui ponteiros. Por serem objetos, vetores so obrigatoriamente alocados de maneira dinmica. O exemplo a seguir aloca um vetor de inteiros com trs posies, seguindo uma sintaxe semelhante a de alocao de objetos:

class VetorTest { public static void main (String args[]) { int vetor[]=new int[3]; vetor[0]=0; semelhante a C , C++ vetor[1]=10; vetor[2]=20; System.out.println(vetor[0]+" "+vetor[1]+" "+vetor[2]+" "); } } 0 10 20

//indexao

Resumo da sintaxe de vetores: int a[]; //declara vetor de inteiros a a=new int[10]; //aloca vetor a com dez posicoes //as duas linhas anteriores podem ser abreviadas por: int a[]=new int[10]; //alem disso se voce quiser inicializar o vetor a, ja na declaracao: int a[3]={0,10,20}; O anlogo para matrizes : int a[][]; //declara matriz de inteiros a a=new int[3][3]; //aloca matriz 3x3, 9 celulas //as duas linhas anteriores podem ser abreviadas por: int a[]=new int[3][3]; //alem disso se voce quiser inicializar a matriz a ja na declaracao: int a[3][3]={{0,10,20},{30,40,50},{60,70,80}};

Em mtodos, argumentos e valores de retorno que so vetores, so escritos da seguinte forma: int[] , ou tipo[] nomedavariavel //no caso de argumentos. Diagrama do vetor:

Perceba que a faixa til do vetor vai de 0 at (n-1) onde n o valor dado como tamanho do vetor no momento de sua criao, no nosso caso 3. O mesmo ocorre com matrizes. Esta conveno pode confundir programadores Pascal onde a indexao vai de 1 at n.

14. Alocao Dinmica Este exemplo cria um tipo abstrato de dados matriz bidimensional de inteiros (int). O leitor pode achar estranho que para representar esta matriz usamos um vetor, mas que isto traz algumas vantagens:

14.1. Representao linear de uma matriz Pode-se representar uma matriz de qualquer dimenso em um vetor. Veja o exemplo de uma matriz bidimensional de inteiros mostrada no formato indiceLinear:valorArmazenado. Os ndices lineares vo de 1 at n2.

Matriz: 1:3 2:32 4:23 5:90 7:21 8:08

3:1 6:12 9:32

Vetor equivalente: 1:3 2:32 3:1 4:23

5:90

6:12

7:21

8:08

9:32

Vantagem da representao linear (vetor): para referenciar uma posio gasta-se somente um inteiro contra dois da representao matriz. Pode-se considerar posies que apontam para outras posies, basta interpretar o contedo do vetor como um ndice linear. Este tipo de construo pode ser til em Java, pois a linguagem no possui ponteiros este um dos motivos de estarmos ensinando esta tcnica. Desvantagem da representao linear (vetor): necessrio criar funes de converso de ndice na forma (linha,coluna) para (ndice linear) e de (ndice linear) para (coluna) ou (linha). So as funes lin e col e linear deste exemplo. Em uma primeira leitura, no preciso entender os clculos com ndices, apenas o uso dos mtodos que oferecem estes clculos. Para ns, clientes da classe Matriz2DInt, os elementos sero indexados de 1 at m (arbitrrio) em termos de ndice linear. Em termos de linhas e colunas, eles sero indexados de (1,lmax) e de (1,cmax). O fato da linguagem adotar ndices de 0 at m-1 para matrizes e vetores no importa, ns construmos em volta dessa representao para que nosso objeto fornea, trabalhe na conveno mais natural de indexao para humanos: 1 at m. Quanto as operaes de ndices, apenas verifique a veracidade para valores arbitrrios de uma matriz como a desenhada anteriormente tentar entend-las leva tempo e eu sei que voc capaz de programa-las. Dentre os objetivos de um programador de uma linguagem orientada a objetos podemos citar: escrever pouco cdigo, escrever cdigo correto, tornar o seu cdigo reutilizvel. A criao de componentes de software reutilizveis, enormemente facilitada pela portabilidade da linguagem Java. Programas exemplo posteriores (segunda parte) mostraro como reutilizar esta classe matriz para a criao de um jogo de quebra cabea de quadradinhos deslizantes. Os quadradinhos devem ser movidos na moldura de modo a formar uma imagem onde um dos quadrados vazio.

14.2. Matrizes definidas na linguagem: As matrizes definidas pela linguagem seguem uma sintaxe de declarao e uso semelhante a sintaxe de vetores:
int custos[][]=new int [20,30]; //vinte por trinta, no importa qual e linha qual e coluna custos[0][0]=145; int a=custos[0][0];

15. Concluso (Viso geral da linguagem): O Java baseou-se no C++, mas foi especificamente projetado para ser menor mais simples e mais confivel. O Java tem tantos tipos como classes. Tipos primitivos no so objetos baseados em classes. Esses incluem todos os seus tipos escalares, inclusive para dados inteiros, de ponto-flutuante, booleanos e de caracteres. Os objetos so acessados por variveis de referncias, mas os valores de tipos primitivos so acessados exatamente como os valores escalares em linguagens puramente imperativas como o C e a Ada. Os arrays Java so intncias de uma classe predefinida, enquanto que no C++ eles no so. O Java no tem ponteiros, mas seus tipos de referncias oferecem alguns tipos de capacidades dos ponteiros. Essas referncias so usadas para apontar instncias de classes, sendo esta a nica maneira delas serem referenciadas. Embora os ponteiros e as referncias possam ser bastante semelhantes, existem algumas importantes diferenas semnticas. Aqueles indicam localizao da memria, mas essas apontam para objetos. Isso torna sem sentido qualquer tipo de operao aritmtica sobre as referncias, eliminando essa prtica propensa a erros. A distino entre o valor de um ponteiro e o valor para onde ele aponta cabe ao programador determinar. As referncias so implicitamente desreferenciadas, quando necessrio. Assim elas se comportam como variveis escalares comuns. O Java tem um tipo booleano primitivo, usado principalmente para expresses de controle de suas instrues de controle , por exemplo if e while. Diferentemente do C e do C++, expresses aritmticas podem ser usadas para expresses de controle. O Java no tem nenhum tipo de registro, unio ou enumerao. Uma diferena entre o Java e muitas de suas contemporneas que suportam a programao orientada a objeto que no possvel escrever subprogramas independentes em Java. Todos os subprogramas Java so mtodos e definidos em classes. No h nenhuma construo de chamada de funo ou de um subprograma. Alm disso, mtodos somente podem ser chamados por intermdio de uma classe ou objeto. Outr importante diferena entre o C++ e o Java que o C++ suporta herana mltipla diretamente em suas definies de classe. Alguns acham que herana mltipla acarretam mais complexidade e confuso do que deve. O Java suporta somente herana nica, embora alguns benefcios daquela poderem ser ganhos , usando-se sua construo de interface. O Java inclui uma forma relativamente simples de controle de concorrncia por meio de seu modificador synchronize, que pode aparecer em mtodos ou em blocos. Em qualquer um dos casos ele faz que um bloqueio seja anexado. O bloqueio garante o acesso ou execuo mutuamente exclusivos. Em Java, relativamente fcil de criar

processos concorrentes chamados threads que podem ser iniciados, suspensos, retomados e interrompidos , tudo com os mtodos herdados da classe principal deles. O Java usa desalocao de armazenagem implcita para seus objetos alocados da pilha, muitas vezes chamada de coleta de lixo. Isso libera o programador de preocuparse em devolver o espao de armazenagem pilha quando ele no for mais necessrio. Programas escritos em linguagens que exigem desalocao implcita freqentemente padecem daquilo que, as vezes, chamado de vazamento de memria, o que significa que um espao alocado, mas nunca desalocado. Isso pode levar evidentemente ao total esgotamento de memria disponvel. Diferentemente do C e do C++, o Java inclui coeres de tipo somente se eles tiverem ampliando-se . Assim coeres (converses do tipo implcitas) somente se eles tiverem ampliando-se ( de um tipo menor para um maior). Assim , coeres de int para float so feitas mas coeres de float para int no.

Você também pode gostar