Sunteți pe pagina 1din 71

Linguagem e Tcnicas de Programao 01(Java Bsico)

UNIVERSIDADE CATLICA DE BRASLIA


Reitor Prof. MSc. Pe. Jos Romualdo Desgaperi Pr-Reitor de Graduao Prof. MSc. Jos Leo Pr-Reitor de Ps-Graduao e Pesquisa Prof. Dr. Pe. Geraldo Caliman Pr Reitor de Extenso Prof. Dr. Luiz Sveres

UNIVERSIDADE CATLICA DE BRASLIA VIRTUAL


Diretor Geral Prof. Dr. Francisco Villa Ulha Botelho Diretoria de Ps-Graduao e Extenso Prof. MSc. Ana Paula Costa e Silva Diretoria de Graduao Prof. MSc. Bernadete Moreira Pessanha Cordeiro Coordenao de Informtica Weslley Rodrigues Seplvida Coordenao de Secretaria Acadmica e Apoio ao Aluno Karlla Vanessa do Lago Arago Coordenao de Plos e Relacionamento Francisco Roberto Ferreira dos Santos Coordenao de Produo Edleide Epaminondas de Freitas Alves

Equipe de Produo Tcnica Anlise didtico-pedaggica Prof. MSc. Jos Eduardo Pires Campos Jnior Profa. Dra Leda Gonalves de Freitas Prof. MSc. Juarez Moreira Profa. Especialista Ana Brigatti Edio Prof. Especialista Cynthia Rosa Mrcia Regina de Oliveira Yara Dias Fortuna Montagem Marcelo Rodrigues Gonzaga Anderson Macedo Silva Bruno Marques Bea da Silva Conteudista Maristela Terto de Holanda

Linguagem e Tcnicas de Programao 01 (Java Bsico) Sumrio

Sumrio
Ementa ..................................................................................................6 Objetivos ...............................................................................................6 Contextualizao .....................................................................................6 Aula 01 - Introduo Linguagem Java ..........................................................7
1.1 Introduo................................................................................................. 7 1.2 Histria da Linguagem Java ............................................................................ 7 1.3 Caractersticas da Linguagem Java ................................................................... 8 1.4 Arquitetura da Mquina Virtual Java e do Byte Code ........................................... 9 1.5 Meu Primeiro Programa ................................................................................10 1.6 Diviso do Java ..........................................................................................11 1.7 Ambientes de Desenvolvimento ......................................................................14 2.1 Introduo................................................................................................15 2.2 Classes ....................................................................................................15
2.2.1 Criando uma Classe...........................................................................................16 2.2.2 Definindo um Atributo de uma Classe .....................................................................17 2.2.3 Criando Mtodos de uma Classe............................................................................18

Aula 02 - Classes e Objetos ....................................................................... 15

Aula 03 - Estrutura da Linguagem ............................................................... 26


3.1 Introduo................................................................................................26 3.2 Comentrios .............................................................................................26 3.3 Variveis e Tipos Primitivos ...........................................................................26

2.3 Objetos ...................................................................................................22 2.4 Atributos e Mtodos Estticos.........................................................................24

3.4 Operadores...............................................................................................29

3.3.1 Identificadores e Palavras Reservadas ....................................................................26 3.3.2 Declarando e Inicializando uma Varivel (Tipo Primitivo) .............................................28 3.3.3 Declarando e Inicializando uma Varivel (array) ........................................................28 3.4.1 Operadores Aritmticos .....................................................................................29 3.4.2 Operadores Relacionais......................................................................................30 3.4.3 Operadores Lgicos...........................................................................................30

3.5 Comando, Expresses e Blocos .......................................................................31 3.6 Estruturas de Controle e Repetio..................................................................31

Aula 04 - Conceitos de Orientao a Objetos ................................................. 36


4.1 Introduo................................................................................................36 4.2 Abstrao.................................................................................................36 4.3 Encapsulamento .........................................................................................37 4.4 Herana...................................................................................................38
4.4.1 A palavra super ...............................................................................................42

3.6.1 Estruturas de Controle .......................................................................................31 3.6.2 Estruturas de Repetio .....................................................................................33

Aula 05 - Principais Classes ....................................................................... 47


5.1 Introduo................................................................................................47 5.2 Nmeros ..................................................................................................47
5.2.1 Classe Number ................................................................................................47 5.2.2 Classe Integer .................................................................................................48 5.2.3 Classe Float....................................................................................................48

4.5 Polimorfismo.............................................................................................44

Linguagem e Tcnicas de Programao 01 (Java Bsico) Sumrio

Aula 06 - Pacotes, Genricos e Anotaes .................................................... 51


6.1 Introduo................................................................................................51 6.2 Pacotes ...................................................................................................51
6.2.1 Criando Nossos Pacotes ......................................................................................51 6.2.2 Pacote e Diretrio ............................................................................................52 6.2.3 Usando Classes que Esto em um Pacote .................................................................53 6.3.1 Limitando os Tipos de um Elemento Genrico ...........................................................54 6.3.2 Classes Genricas.............................................................................................55 6.4.1 Documentao ................................................................................................56 6.4.2 Anotaes Usadas pelo Compilador........................................................................57 6.4.3 Anotaes de Processamento ...............................................................................58

5.3 Strings ....................................................................................................49

6.3 Genricos.................................................................................................53

6.4 Anotaes ................................................................................................56

Aula 07 - Outras Classes Importantes........................................................... 60


7.1 Introduo................................................................................................60 7.2 Classes Abstratas........................................................................................60 7.3 Interfaces ................................................................................................61 7.4 Colees ..................................................................................................62
7.3.1 Implementando Interfaces em Java .......................................................................61 7.4.1 A classe Vector................................................................................................62 7.4.2 O Grupo Collection ...........................................................................................63

Glossrio .............................................................................................. 69

Linguagem e Tcnicas de Programao 01 (Java Bsico) Ementa e Objetivos

Ementa
Conceitos de orientao a objetos. Classes e objetos, mtodos e atributos. Sintaxe bsica de uma linguagem Orientada a Objetos (OO). Abstrao, encapsulamento, herana, polimorfismo. Colees. Tratamento de erros e excees.

Objetivos
Geral Compreender os principais conceitos da orientao a objetos (classe, objeto, abstrao, encapsulamento, herana e polimorfismo), a sintaxe bsica da linguagem de programao Java e as principais bibliotecas do Java SE (Standart Edition). Especficos Escrever pequenos programas em Java. Conhecer e utilizar as principais ferramentas para programao Java. Aplicar os principais conceitos de OO na prtica.

Contextualizao
Atualmente, h vrias formas de escrever programas de computadores. Umas das linguagens mais utilizadas no mercado a linguagem Java. Esta linguagem no s por ser uma linguagem orientada a objetos, mas por ser uma linguagem de programao livre, vem ganhando espao no desenvolvimento de aplicaes atuais. Nesta disciplina, Linguagem de Programao I, sero apresentadas as principais caractersticas da linguagem Java; os conceitos importantes sobre orientao a objetos; e as semelhanas e diferenas com outras linguagens de programao. Voc, aluno, ter a oportunidade de explorar os principais recursos dessa linguagem, ampliando o seu conhecimento, por meio de atividades prticas, e conhecendo melhor a arquitetura e o funcionamento da linguagem de programao Java.

Boa leitura e bons cdigos!

Linguagem e Tcnicas de Programao 01 (Java Bsico) Aula 01

Aula 01 - Introduo Linguagem Java


1.1 Introduo
Neste primeiro contato com a tecnologia da Orientao a Objetos, por meio da linguagem de programao Java, abordaremos um pouco da histria de Java, como ela surgiu e evoluiu, suas principais caractersticas e sua arquitetura bsica de funcionamento, esclarecendo os conceitos de Mquina Virtual Java e de Byte Code. No final desta unidade, apresentaremos algumas ferramentas que facilitam o desenvolvimento de programas e teremos a oportunidade de escrever nosso primeiro programa.

1.2 Histria da Linguagem Java


A histria da tecnologia Java comeou em 1991, por meio de um projeto da Sun Microsystem, conhecido como Green Project. James Gosling, tambm conhecido como o pai da linguagem Java, coordenou esse projeto, onde o objetivo principal no era a criao de uma nova linguagem de programao, mas a criao de novos computadores portteis capazes de se comunicar de vrias maneiras. Inicialmente, pensou-se em utilizar a linguagem C++, em funo da experincia do grupo. Mas a linguagem C++ no atendia satisfatoriamente todos os requisitos para o projeto, ento se optou por escrever uma nova linguagem de programao, que fosse ao mesmo tempo simples, fcil de utilizar e interpretada e orientada a objetos. Surge, nesse momento, a linguagem de programao batizada como Oak. Em 1993, os primeiros dispositivos mveis PDAs (Personal Digital Assitant), produzidos por esse projeto e conhecidos como Star 7 ou *7, foram lanados. Por problemas de copyright , o nome da linguagem Oak teve que ser mudado, surgindo, em 1994, o novo nome da linguagem Java. Com a popularizao da Internet, Jonathan Payne e Patrick Naugthon, pesquisadores da equipe de James Gosling, desenvolveram o
Star 7

WebRunner, um navegador para Internet com possibilidade de fazer download e a execuo de aplicativos escritos em Java atravs da Internet. O WebRunner foi rebatizado para HotJava e lanado oficialmente, em 1995, pela Sun no evento SunWorld9. O interesse pela soluo foi muito grande, poucos messes depois, numa iniciativa indita para poca, a Sun decide disponibilizar para download gratuito na Internet um kit de desenvolvimento Java (JDK1.0 Java Development Kit). Assim, inicia-se a histria de sucesso da tecnologia Java.

Linguagem e Tcnicas de Programao 01 (Java Bsico) Aula 01

Uma das marcas registradas de Java o seu mascote Duke, criado ainda no projeto Green por Joe Palrang. O Duke pode ser visto, transformado e admirado em um conjunto de fotos que explica que sua utilizao transformao livre. Consulte mais informaes em uma de suas pginas de projeto na Web.

Para Saber Mais


Para se aprofundar um pouco mais sobre a histria da linguagem Java, leia o artigo da Sun: Java Technology: The Early Years.

1.3 Caractersticas da Linguagem Java


Para apresentar as caractersticas da linguagem de programao Java necessrio saber primeiro o que Java. Java mais que uma linguagem de programao, um ambiente de aplicao e desenvolvimento. Atualmente, podemos considerar Java uma tecnologia que possui vrios recursos como o ambiente de desenvolvimento, dos quais merecem destaque o Eclipse e o NetBeans. Java tambm: Uma linguagem de programao simples possui sintaxe muito semelhante linguagem C, porm com algumas responsabilidades controladas pelo compilador, tais como o controle de ndice dos limites de arrays, alm da verificao dos tipos, tambm chamada de fortemente tipada, em que todos atributos devem ser de um nico tipo (primitivo ou objeto). Uma linguagem de programao orientada a objetos possui embutidas na prpria linguagem suporte as boas prticas da orientao a objetos, tais como: identificador nico, composio, encapsulamento, herana e polimorfismo. Tais conceitos sero abordados com mais profundidade na aula 2. Portvel portabilidade a possibilidade de um programa ser escrito para uma plataforma, por exemplo para o sistema operacional Windows, e poder ser utilizado em outro ambiente, por exemplo no Linux, normalmente por meio da compilao para cada sistema operacional. Java extrapola o conceito de portabilidade, pois por meio do Byte Code e do conceito da mquina virtual Java, no necessrio a re-compilao do byte code podendo o mesmo ser reutilizado em qualquer ambiente que possua uma mquina virtual java. O portabilidade de java observada numa das frases mais utilizadas para definir as caractersticas de java o WORA (Write Once Run Anywhere), ou seja, escreva uma nica vez e rode em qualquer lugar. Uma linguagem de programao robusta a robustez de Java pode ser observada pelo controle e tratamento de exceo. Concorrente java possui suporte nativo a Threads, RMI (Remote Method Invocation) acrnito e CORBA (Common Object Requeste Broker Architeture), essas tecnologias do suporte a aplicaes distribudas.

Linguagem e Tcnicas de Programao 01 (Java Bsico) Aula 01

Segura Java possui segurana em diversos nveis, possui segurana atravs da verificao do cdigo originalmente compilado, possui ainda um a API (Aplication Program Interface) prpria para criptografia e segurana.

1.4 Arquitetura da Mquina Virtual Java e do Byte Code


Mquina Virtual Java (JVM), do ingls Java Vitual Machine, uma mquina imaginria implementada pela emulao de um software sobre uma mquina real. Ela prov uma especificao de plataforma de hardware no qual todos os cdigos (programas fonte) Java so compilados. Essa especificao torna o programa Java independente de plataforma, pois que toda compilao feita para uma mquina imaginria (JVM). A Figura 1.1 abaixo descreve o funcionamento desde o cdigo fonte at a execuo em cada mquina heterognea. Figura 1.1 Funcionamento da Mquina

Vir Java

tual

Linguagem e Tcnicas de Programao 01 (Java Bsico) Aula 01

1.5 Meu Primeiro Programa


Observe o primeiro programa escrito em Java o Oi Mundo abaixo: public class OiMundo { public static void main(String args[]){ System.out.println("Oi Mundo !!!"); } } A primeira linha public class OiMundo identifica o nome do programa e da classe com nome OiMundo que tambm d origem ao nome do programa OiMundo.java. public um especificador (modificador de visibilidade). Por enquanto, guarde esta parte da especificao do primeiro programa (public class) como o incio da declarao de uma classe. Todas as classes sero declaradas assim por enquanto. class a palavra reservada que marca o incio da declarao de uma classe. OiMundo o nome dado a esta classe. O abre chaves marca o incio das declaraes da classe podem ser divididos em atributos e/ou mtodos. Esta classe s possui uma declarao, do mtodo main, note que um mtodo, ao contrrio de outras linguagens, tais como o C++, s pode ser declarado internamente classe a qual pertence. Dica: o nome do arquivo fonte deve ser o mesmo nome da definio do public class com a exteno. java. importante perceber tambm o bloco que comea com o abre chaves { da primeira linha e termina com } da ltima linha do programa. Tudo que est escrito entre esse abre e fecha chaves determina o escopo desse programa (classe). Perceba que a segunda linha public static void main(String args[]) define um mtodo muito importante, o mtodo main(). A assinatura desse mtodo recebe como parmetros um array de strings, nesse exemplo nomeado de args. Por meio desse array que so passados os parmetros para dentro do programa Java. public: um qualificador do mtodo que indica que este acessvel externamente prpria classe. No se preocupe com essas definies agora, apenas vamos seguir a receita de bolo declarando todos os mtodos como public. static: outra palavra reservada, que indica que o mtodo deve ser utilizado com um mtodo da classe e no do objeto. Veremos isso com mais profundidade na aula 2.

10

Linguagem e Tcnicas de Programao 01 (Java Bsico) Aula 01

void: um tipo primitivo do Java; o valor de retorno do mtodo main(). Quando o mtodo no retorna nenhum valor, ele retorna void, uma espcie de valor vazio que deve ser especificado. main: Este um nome particular de mtodo que indica para o compilador o incio do programa.

(String args[]): atravs desse parmetro que o mtodo main (por conseqncia, o programa todo) recebe argumentos da linha de comando. Esse parmetro um array de Strings que inicializado quando os argumnetos so passados por meio da invocao do nome do programa na linha de comando do sistema operacional, por exemplo: java OiMundo arg1 arg2. Nesse caso, o array args ser inicializado com args[0] com valor arg1 e args[1] com valor arg2. Em Java, os arrays comeam na posio 0. Na terceira linha deste programa System.out.println(Oi Mundo);, temos uma instruo para escrever na sada padro a String passada como parmetro para o mtodo println, ou seja, a frase Oi Mundo. Todo programa fonte em Java um arquivo texto simples, mas existem diversos editores que podem facilitar as tarefas de edio e compilao de programas Java.

Para Saber Mais


Para compilar o seu primeiro programa necessrio ter um compilador Java ou um editor com suporte a Java, assista aos vdeo aulas sobre download, instalao e configurao do Eclipse e do NetBeans.

1.6 Diviso do Java


O Java cresceu muito e para organizar melhor as suas bibliotecas, foi necessrio a diviso por reas de aplicao descritas abaixo: Java SE (Standart Edition) o core da linguagem Java. Ou seja, onde so descritos os principais componentes da linguagem Java, operadores, tipos primitivos, principais objetos, String, array, classes utilitrias, dentre outras.

11

Linguagem e Tcnicas de Programao 01 (Java Bsico) Aula 01

Figura 1.2 Cenrio do Java SE

Java EE (Enterprise Edition) um conjunto de classes especficas para aplicaes corporativas. utilizado sempre em conjunto com as demais classes definidas na SE para construo de aplicaes mais complexas que envolvem transao, persistncia, normalmente desenvolvidas para Internet. Na Figura 1.3 abaixo, pode-se ter uma idia da sopa de letrinhas que envolve a tecnologia JEE, que so bibliotecas de componentes para aplicaes corporativas em Java.

12

Linguagem e Tcnicas de Programao 01 (Java Bsico) Aula 01

Figura 1.3 Componentes J EE

Java ME (Micro Edition) a especificao de componentes para dispositivos pequenos e dispositivos mveis. Escrever para aplicaes celulares, por exemplo, deve-se utilizar as APIs (bibliotecas) definidas para o ME. A Figura 1.4 abaixo apresenta um emulador que pode ser baixado gratuitamente no site da Sun para escrever aplicaes para celulares. Figura 1.4 Emulador J ME

13

Linguagem e Tcnicas de Programao 01 (Java Bsico) Aula 01

1.7 Ambientes de Desenvolvimento


A linguagem Java possui vrios ambientes de desenvolvimento. Na sua maioria, esto disponibilizados gratuitamente para download na Internet. As principais ferramentas utilizadas atualmente para codificao dos programas escritos em Java so o Eclipse, que um projeto de software livre liderado inicialmente pela IBM, e mantido pela comunidade, e que tem uma aceitao muito boa pelos programadores, e o NetBeans.

Para Saber Mais


Para facilitar o seu entendimento sobre a instalao e o uso do Eclipse e do NetBeans preparamos uma vdeo aula.

Finalizamos nossa pimeira aula. Nela tivemos o primeiro contato com a linguagem de programao Java, conhecemos um pouco da sua histria e suas principais caractersticas, vimos tambm o primeiro programa e alguns ambientes de desenvolvimento. Nas prximas aulas veremos como aplicar os conceitos da orientao a objetos em nossos programas.

14

Linguagem e Tcnicas de Programao 01 (Java Bsico) Aula 02

Aula 02 - Classes e Objetos


2.1 Introduo
Essa aula uma das aulas fundamentais desta disciplina. Na aula anterior, tivemos uma viso geral sobre a Linguagem Java e as suas ferramentas, e tambm sobre como escrever e executar um programa. Nesta segunda aula, vamos estudar os conceitos de orientao a objeto. Veremos o que so classes e objetos e como criar as nossas prprias classes e como gerar os nossos objetos a partir dessas classes.

2.2 Classes
Como j vimos em aulas anteriores, a linguagem Java orientada a objetos, isto , todos os elementos do mundo real so modelados como objetos. Os objetos so criados a partir das classes. Uma classe define a estrutura de um objeto. Uma classe especifica todos os atributos (propriedades) e mtodos (comportamento) que um objeto daquela classe pode ter. Na Figura 2.1, a seguir, tem-se uma classe automvel e trs objetos que foram gerados a partir dessa classe automvel. Figura 2.1 Classe Automvel

A classe automvel tem como atributos: cor, ano, modelo. Os mtodos so: desligar, acelerar, e ligar. A Figura 2.2 apresenta o objeto gerado por essa classe, que tem a cor laranja, ano: 2007, modelo: Punto.

15

Linguagem e Tcnicas de Programao 01 (Java Bsico) Aula 02

Figura 2.2 Exemplo de um Objeto

Uma classe um prottipo que define os atributos e os mtodos comuns a todos os objetos de um determinado tipo e da prpria classe, com a finalidade de servir como molde para a criao de objetos. Dessa forma, uma classe um template, um modelo para gerar objetos. Em uma classe, os atributos representam o estado do objeto, os mtodos e a sua interao com o mundo externo. Um objeto gerado (instanciado) por meio de uma classe.

2.2.1 Criando uma Classe


Para escrever uma classe, usa-se a seguinte sintaxe: a declarao class, e em seguida, chaves para a implementao de todos os mtodos e atributos necessrios na criao dos objetos relacionados com essa classe.

class MinhaClasse { // todo o cdigo que envolve a classe, seus atributos e mtodos }

A sintaxe da declarao class : QualificadorDeAcesso class nomeDaClasse

Qualificador de Acesso Determina o acesso a essa classe por outras classes. Iremos falar sobre os possveis modificadores mais tarde. Por enquanto, deixaremos sem qualificador de acesso a nossa classe.

Class A palavra class informa que essa declarao refere-se a uma classe. Nome da Classe Em Java, por padronizao, todas as classes comeam com letra maiscula.

Agora, vamos comear a escrever a nossa classe automvel.

16

Linguagem e Tcnicas de Programao 01 (Java Bsico) Aula 02

class Automovel { // cdigo da classe Automvel }

2.2.2 Definindo um Atributo de uma Classe


Os atributos definem as propriedades (estado, atributos) que um objeto pode ter. A sintaxe para declarao de um atributo : [visibilidade] [static] [final] tipo nome_da_variavel [= valor]; Os colchetes indicam que as palavras reservadas de visibilidade, static, final e atribuio do valor so opcionais, ou seja, podem ou no ser utilizadas. Visibilidade: limita o acesso ao atributo de uma determinada classe. Os nveis de visibilidade so: private, protected, <default> e public. o private mais restritivo; o atributo ou mtodo s pode ser visto dentro da prpria classe; o o protected pode ser visto na classe, na hierarquia (herana) e no pacote; <default> quando no atribumos nenhum modificador de visibilidade o valor default (padro) assumido; o public o mais liberal; o atributo ou mtodo pode ser acessado em por todo mundo (qualquer classe). Static Nesse contexto, a palavra reservada static significa que o atributo pertence classe e no ao objeto. Final Na declarao de um atributo, final indica que este uma constante, ou seja, s pode receber uma nica atribuio. Tipo do Atributo Os atributos de uma classe podem ser do tipo primitivo (int, double, float, etc.) ou ser uma outra classe (String, Pessoa etc.). Nome do atributo Define o nome do atributo. Por questo de padronizao, todos os atributos em Java comeam com letra minscula. Quando a palavra composta, as iniciais das prximas palavras devem ser em maisculo. Exemplo: nomeCompleto e telefoneCelular. Exemplos de definio de atributos: private int cdigo; public String nome; private String modelo;

17

Linguagem e Tcnicas de Programao 01 (Java Bsico) Aula 02

Agora vamos escrever os atributos da classe Automvel. Como pode ser observado a seguir, a classe Automvel tem um atributo do tipo primitivo int (ano), dois atributos do tipo da classe String, (cor, modelo), alm do atributo do tipo da classe Pneu (pneu).

class Automovel { String cor; int ano; String modelo; Pneu pneu; }

class Pneu { String tipo; String marca; int aro; }

2.2.3 Criando Mtodos de uma Classe


Como vimos anteriormente, mtodos definem o comportamento que um determinado objeto pode ter. Os mtodos assemelham-se s funes de outras linguagens de programao. A sintaxe de um mtodo dada a seguir:

ModificadorDeAcesso TipoDeRetorno // cdigo relacionado com o mtodo [return valorRetornado;] }

nomeMetodo(lista de parmetros) {

Modificador de acesso Define quem pode ter acesso ao mtodo. At esse momento, conhecemos os modificadores public e private. TipoDeRetorno o tipo do dado que o mtodo ir retornar. Se o mtodo no retorna nenhum valor, deve-se utilizar a palavra void. Um retorno de um mtodo pode ser do tipo primitivo ou do tipo de uma classe.

Lista de parmetros Um mtodo pode no receber parmetros, ou receber um ou mais parmetros. Para receber mais de um parmetro necessrio separ-los por vrgula. Para cada parmetro necessrio definir o seu tipo.

Return uma palavra reservada no Java que define o retorno de um mtodo. Quando o mtodo no retorna nada (tipo de retorno void), o return no deve ser utilizado no mtodo.

Agora que sabemos o que so os mtodos, vamos escrever alguns mtodos da classe Automvel. Os mtodos implementados so: o ligaMotor que tem como objetivo colocar o motor no estado ligado; o getModelo que retorna o modelo do automvel, e o setAno que atribui um ano para o automvel.

18

Linguagem e Tcnicas de Programao 01 (Java Bsico) Aula 02

class Automovel { String cor; int ano; String modelo; Pneu pneu; public void ligamotor(){ //Mtodo pblico que no retorna nenhum valor e no recebe parmetros estadoMotor= true; } public String getModelo(){ //Mtodo pblico que retorna uma String e no recebe parmetros return modelo; } public void setAno (int novoAno){ //Mtodo pblico que no retorna nenhum valor e recebe um parmetro do tipo int ano = novoAno; } }

Mtodo Construtor
O mtodo construtor utilizado para definir o estado inicial de um objeto. Por meio do mtodo construtor o objeto de uma classe instanciado (criado). Como sabemos, a classe utilizada para criar objetos, e o como deve ser criado esse objeto definido no mtodo construtor. O mtodo construtor tem algumas caractersticas especiais: Tem o mesmo nome da classe. Sempre um mtodo pblico. No retorna nenhum valor. No necessria na definio do mtodo construtor a palavra void.

Uma classe pode ter vrios mtodos construtores. Quando no definido um mtodo construtor, o compilador Java cria um automaticamente sem receber nenhum parmetro. A seguir, apresentada a classe Automvel com dois mtodos construtores, um sem receber nenhum parmetro, o outro recebendo os valores iniciais dos atributos da classe Automvel.

class Automovel { String cor; int ano; boolean estadoMotor;

19

Linguagem e Tcnicas de Programao 01 (Java Bsico) Aula 02

String modelo; Pneu pneu; public Automovel(){ } public Automovel(String cor, int ano, String modelo){ this.cor = cor; this.ano = ano; this.modelo = modelo; } public void ligaMotor(){ estadoMotor= true; } } Quando um mtodo construtor for vazio, os objetos criados a partir desse mtodo tero seus valores iniciais correspondentes aos valores padres do tipo da varivel. Por exemplo, na classe Automvel, o ano que do tipo int ter o valor inicial 0, estadoMotor que boolean ter o valor false, e as variveis cor e Pneu que so do tipo de classes tero seus valores iniciais null.

A palavra this
No exemplo anterior, foi apresentada a palavra this no mtodo construtor do Automvel. A palavra this utilizada para fazer referncia ao atributo do objeto. utilizada para tirar ambigidade entre os nomes das variveis recebida como parmetro e o atributo da classe. Exemplo: this.ano refere-se ao atributo ano da classe Automvel, a varivel ano (sem a palavra this) refere-se ao parmetro passado para o mtodo.

20

Linguagem e Tcnicas de Programao 01 (Java Bsico) Aula 02

Mtodos Sobrecarregados
Em uma classe Java podemos ter mais de um mtodo com o mesmo nome, com argumentos diferentes e talvez tipo de retorno diferente, isso se chama sobrecarga de mtodo. Sobrecarga utilizada quando necessrio que o mesmo mtodo tenha comportamento diferente de acordo com os seus parmetros de entrada. Suponha uma classe chamada Tringulo que tenha um mtodo especfico para clculo de rea. Existem diferentes formas de se calcular a rea de um tringulo: tem-se, por exemplo, o clculo do tamanho dos seus lados ou o clculo de sua base e altura. No exemplo apresentado a seguir, a classe Tringulo tem dois mtodos para o clculo da rea do tringulo. Esse um exemplo de sobrecarga, em que um mesmo mtodo (mesmo nome, calculaSalario) recebe diferentes parmetros de entrada, retornando rea do tringulo.

public class Triangulo { // ... public float calculaArea(float base, float altura){ return (base*altura)/2; } public float calculaArea(float lado1, float lado2, float lado3){ float semiPerimetro = (lado1 + lado2 + lado3)/2; return(semiPerimetro*(semiPerimetro-lado1)*(semiPerimetrolado2)*(semiPerimetro*lado3)); } }

21

Linguagem e Tcnicas de Programao 01 (Java Bsico) Aula 02

Resumo de sobrecarga: Dois ou mais mtodos na mesma classe (incluindo mtodos herdados de uma superclasse) com o mesmo nome, porm com lista de argumentos diferentes, so ditos sobrecarregados. Mtodos com o nome sobrecarregados so mtodos independentes. Mtodos sobrecarregados so chamados da mesma maneira, e a definio do mtodo a ser executado ser de acordo com a lista de parmetros utilizados na chamada do mtodo.

2.3 Objetos
Um objeto uma representao abstrata de uma entidade do mundo real que tem um identificador nico, propriedades embutidas e a habilidade de interagir com outros objetos e consigo mesmo. As classes so utilizadas para criar objetos. As classes definem os atributos e o comportamento dos objetos. Depois de aprendermos a criar as nossas classes, vamos aprender a escrever os nossos objetos. Objetos so criados por meio da palavra reservada new seguida do mtodo construtor da classe referente ao objeto. Dessa forma, sempre que encontrarmos a palavra new, isso significar que um objeto est sendo criado e que o mtodo construtor da classe relacionada a esse objeto ser executado.

// A varivel gol do tipo Automvel Automovel gol; // A varivel gol vai faz referencia a um objeto do tipo Automovel gol = new Automvel(); Todo objeto do tipo Automvel ter os atributos cor, ano, estadoMotor e Pneu. Para acessar algum desses atributos, a sintaxe ser a varivel de referncia ao objeto . (ponto) e nome do atributo.

<varivel de referncia>.<atributo> A seguir, apresentado um exemplo, em que a varivel gol referencia um objeto do tipo Automvel. O atributo ano do objeto referenciado pela varivel gol 2005 e a cor Branca.

// A varivel gol do tipo Automvel declarada e o objeto criado Automovel gol = new Automvel(); // Acessando os atributos do objeto gol gol.ano = 2005; gol.cor = Branca; Para acessar os mtodos, necessrio utilizar a varivel de referncia ao objeto . (ponto) e o nome do mtodo.

22

Linguagem e Tcnicas de Programao 01 (Java Bsico) Aula 02

<varivel de referncia>.<mtodo> Lembre-se de que os mtodos de um objeto podem retornar ou no algum valor. Dessa forma, os valores de retorno podem ser recibos em uma varivel. No exemplo apresentado a seguir, a varivel modelo recebe o valor do modelo que est no objeto gol.

// A varivel gol do tipo Automvel declarada e o objeto criado Automovel gol = new Automvel(); // Acessando os mtodos do objeto gol String modelo = gol.getModelo(); gol.ligaMotor(); Para finalizar esses conceitos, vamos criar um programa de uma Agncia de Automvel que vai gerar alguns objetos do tipo de automvel e vai utilizar esses objetos para apresentar os seus valores.
1. public class AgenciaAutomovel { 2. 3. public static void main(String args[]){ 4. 5. // Criando os objetos gol e punto 6. Automovel gol = new Automovel(); 7. Automovel punto = new Automovel(); 8. 9. //Acessando os mtodos do objeto referenciado por gol 10. gol.ligaMotor(); 11. gol.setModelo("Gol"); 12. gol.setAno (1999); 13. gol.setCor("Preta"); 14. 15. //Acessando os mtodos do objeto referenciado por punto 16. punto.setModelo("Punto"); 17. punto.setCor("Branca"); 18. punto.setAno(2007); 19. 20. System.out.println("Objeto Criado \n Modelo: "+gol.getModelo() + 21. "\n Cor : " + gol.getCor() + 22. "\n Ano : " + gol.getAno() ); 23. 24. System.out.println("\nObjeto Criado\nModelo: "+punto.getModelo()+ 25. "\n Cor : " + punto.getCor() + 26. "\n Ano : " + punto.getAno() ); 27. }

Sada do programa:

Objeto Criado Modelo: Gol Cor : Preta Ano : 1999 Objeto Criado Modelo: Punto Cor : Branca Ano : 2007

23

Linguagem e Tcnicas de Programao 01 (Java Bsico) Aula 02

2.4 Atributos e Mtodos Estticos


Atributos so comuns a todos os objetos de uma classe. Por exemplo, suponha que voc tenha uma classe Cachorro, o nmero de patas de cachorro sempre quatro para todos os objetos do tipo dessa classe. Quando um atributo comum a todos os objetos de uma classe, definimos esse atributo como esttico (static). A seguir, apresentamos a classe Esttico. Nessa classe, o atributo ano esttico. Observe que apenas o objeto e1 define o valor para esse atributo, mas que o objeto e2 tambm ter esse valor, uma vez que todos os objetos desse tipo compartilham o mesmo valor, pois o atributo ano esttico. 1. public class Estatico { 2. 3. public static int ano; 4. public String nome; 5. 6. public static void main(String args[]){ 7. 8. Estatico e1 = new Estatico(); 9. e1.nome = "Maria"; 10. e1.ano = 23; 11. 12. Estatico e2 = new Estatico(); 13. e2.nome = "Joo"; 14. 15. System.out.println("Objeto e1 tem ano igual a " + e1.ano +"\n" + "Objeto e2 tem ano igual a " + e2.ano); 16. System.out.println("Todos os objetos Estaticos tm o valor "+ Es tatico.ano); 17. } 18. } 16. System.o A sada desse programa :

Objeto e1 tem ano igual a 23 Objeto e2 tem ano igual a 23 Todos os objetos Estaticos tm o valor 23 Como se observa, quando um atributo esttico ele pode ser acessado diretamente a partir de sua classe, sem precisar criar um objeto para acessar o atributo. Quando se chama o atributo ano da classe Esttico, chama-se um atributo da classe e no o de um objeto especfico. Um mtodo tambm pode ser esttico. Quando um mtodo esttico ele pode ser acessado diretamente pela classe, mesmo sem ter um objeto relacionado com a classe.

24

Linguagem e Tcnicas de Programao 01 (Java Bsico) Aula 02

1. public class Estatico { 2. 3. public static int ano; 4. public String nome; 5. 6. public static int getAno(){ 7. return ano; 8. } 9. 10. public static void main(String args[]){ 11. Estatico e1 = new Estatico(); 12. e1.nome = "Maria"; 13. e1.ano = 23; 14. 15. Estatico e2 = new Estatico(); 16. e2.nome = "Joo"; 17. 18. System.out.println("Objeto e1 tem ano igual a " + e1.ano + " \n" + "Objeto e2 tem ano igual a " + e2.ano); 19. 20. System.out.println("Todos os objetos Estaticos tem o valor " + Estatico.getAno()); 21. } 22. }
06. public static int getAno(){ 07. return ano; 08. } 20. System.out. Sada do programa:

Objeto e1 tem ano igual a 23 Objeto e2 tem ano igual a 23 Todos os objetos Estaticos tm o valor 23

Nessa aula estudamos o que so classes e objetos, como so estruturados e como cri-los e utiliz-los. A partir da prxima aula estaremos nos aprofundando nas caractersticas especficas que essas classes e objetos podem ter.

25

Linguagem e Tcnicas de Programao 01 (Java Bsico) Aula 03

Aula 03 - Estrutura da Linguagem


3.1 Introduo
Nesta aula, abordaremos as principais estruturas da linguagem de programao Java. Voc ter a oportunidade de conhecer como fazer comentrios e utilizar a documentao da linguagem Java por meio da ferramenta javadoc. Voc conhecer tambm os principais tipos primitivos e o uso de arrays, bem como os operadores, os principais comandos e as estruturas de controle e repetio.

3.2 Comentrios
Existem trs formas de fazer comentrios em Java, descritas a seguir:

// /* ... comentrios ... */ /** ... comentrios ... */

utilizado para comentar uma linha do ponto inicial at o final da linha. Comenta um bloco. Comenta um bloco e indica o uso de documentao em Java (javadoc).

O Documentador (javadoc)
Uma ferramenta importante para documentao de programas Java o javadoc. Para aprender a utilizar o javadoc e aprofundar os conhecimentos, veja os descritores no site da Sun.

3.3 Variveis e Tipos Primitivos


3.3.1 Identificadores e Palavras Reservadas
Para iniciar o assunto de variveis, tipos primitivos e objetos em Java, necessrio conhecer como possvel fazer a sua identificao. Os identificadores em Java comeam com letra, hfen (caixa baixa) ou o sinal de $, sendo que esse ltimo no recomendado por ser comumente utilizado para questes internas da linguagem com o sistema operacional seguido por outros dgitos. Exemplo de identificadores vlidos:

nomeDoUsuario, dataDeNascimento, _sysreg, $userName etc...

26

Linguagem e Tcnicas de Programao 01 (Java Bsico) Aula 03

Exemplo de identificadores invlidos:

2o_nome, 1segredo, !teste, @case etc... (pois no comeam com letra, $ ou _ )


Entretanto, algumas palavras no podem ser utilizadas; na verdade, j so ou foram utilizadas pela linguagem Java e ficaram reservadas. A Figura 3.1, abaixo, mostra exemplos de palavras reservadas: Figura 3.1 Palavras Reservadas

A Tabela 3.1, abaixo, apresenta os tipos primitivos, o respectivo tamanho em bits, os nmeros mnimos e mximos, alm da classe Wrapper correspondente. Tabela 3.1 Tipos Primitivos Tipo boolean byte char short int float * long Bits 1 8 16 16 32 32 64 -264 264 -1 -231 231 -1 Mnimo -27 Mximo 27 -1 Wrapper Boolean Byte Character Short Integer Float Long

27

Linguagem e Tcnicas de Programao 01 (Java Bsico) Aula 03

double * void

64 -

Double Void

* Representaes em ponto flutuante. Uma classe Wrapper a representao de um tipo primitivo na forma de objeto.

3.3.2 Declarando e Inicializando uma Varivel (Tipo Primitivo)


Em Java, possvel fazer somente a declarao de uma varivel ou declarar e inicializar uma varivel na mesma instruo, veja os exemplos abaixo:

int x, y; // Declara de x e y do tipo int x = 10; // Atribui um valor 10 a x int x = 10; // Declara de x do tipo int com valor inicial 10 char c; // Declara c do tipo char char c = A; // Declara c do tipo char com valor inicial A boolean x = true // Declara x do tipo boolean com valor inicial true (verdadeiro)

3.3.3 Declarando e Inicializando uma Varivel (array)


Em Java, podemos utilizar tipos primitivos ou objetos para representar um conjunto de elementos do mesmo tipo. A estrutura mais simples de agrupamentos em Java representada por um array. Nos exemplos abaixo podemos ver a criao e inicializao de arrays em Java:

int [] x; // Declara um array unidimensional x do tipo int int x [] = new int[10]; // Declara um array com 10 elementos do tipo int int x[] = {0;1,2,3}; // Declara um array com 4 elementos 0,1,2,3
Existem algumas regras bsicas para utilizao de arrays: Arrays so sempre de um mesmo tipo. Array tem tamanho fixo e definido. S podemos acessar um ndice do array depois de inicializ-lo. No faz diferena colocar o smbolo [] antes ou depois do nome da varivel. Podemos ter arrays de mais de uma dimenso.

28

Linguagem e Tcnicas de Programao 01 (Java Bsico) Aula 03

3.4 Operadores
Dividimos os operadores em aritmticos, relacionais e lgicos.

3.4.1 Operadores Aritmticos


Os operadores aritmticos representam operaes aritmticas e podem ser utilizados com um ou dois operandos. Veja a Tabela 3.2 abaixo: Tabela 3.2 Operadores Aritmticos Operador + * / % ++ -Soma Subtrao Multiplicao Diviso Resto da diviso Incremento Decremento Operao p1 + p2 x-y a*b z/x a%b ++i ou i++ --i ou i-Exemplo

Algumas questes merecem destaque nas operaes aritmticas: Existe como na matemtica a precedncia de operadores ( * / % + - ). Em uma expresso com tipos diferentes, por exemplo, um inteiro e um double, no resultado, prevalece o nmero com maior preciso, por exemplo, na diviso do nmero 3.2/2, o resultado ser um nmero double 1,6. Quando ocorrem operaes com dois nmeros do mesmo tipo, o resultado sempre ser do mesmo tipo. Por exemplo, na diviso de um inteiro (int) por outro inteiro (int) o resultado inteiro: x = 14/3 o resultado final um inteiro com o valor 4. Existe ainda uma forma reduzida de uma expresso, por exemplo:

X += 4; equivale a x = x + 4;

29

Linguagem e Tcnicas de Programao 01 (Java Bsico) Aula 03

3.4.2 Operadores Relacionais


Java possui um conjunto completo de operadores relacionais, onde o resultado uma expresso lgica verdadeiro (true) ou falso (false). Veja na Tabela 3.3, abaixo, a relao dos operadores relacionais e os seus respectivos significados: Tabela 3.3 Operadores Relacionais Operador == != > < >= <= Operao Igualdade Desigualdade Maior Menor Resto da diviso Incremento Exemplo (3 == 7) (o resultado false) (x!= y) a>b z<x a >= b i <= j

3.4.3 Operadores Lgicos


Os operadores lgicos, semelhante aos operadores relacionais, tambm tem como retorno uma expresso do tipo verdadeiro (true) ou falso (false); so eles: Tabela 3.4 Operadores Lgicos Operador ! ou ~ & | && || ou ^ Operao Negao E (lgico) Ou (lgico) E exclusivo Ou exclusivo

30

Linguagem e Tcnicas de Programao 01 (Java Bsico) Aula 03

3.5 Comando, Expresses e Blocos


Os comandos em Java sempre terminam com um ponto e vrgula ;. Um bloco delimitado por abre e fecha chaves { ... }. Espaos em branco, tabulao e quebras de linha so considerados espaos em branco e no so considerados pelo compilador Java. Veja o exemplo abaixo e reflita:

{ int x = 10; if (x > 20) x = 30; x++; }


Qual o valor final de x ao final da execuo desse trecho de programa? x igual a 11, porque, independente do alinhamento (dos espaos em branco), o programa no passa pelo if, que no tem incio e fim de bloco, e executa a prxima instruo, que x++, atribuindo a x (que inicialmente estava com 10) o valor final 11.

3.6 Estruturas de Controle e Repetio


Voc j deve ter utilizado outra linguagem de programao, ou at mesmo o Visualg na unidade de Algoritmos e Programao. Logo, voc j deve estar familiarizado com as estruturas de controle e repetio. Nesta seo voc perceber algumas diferenas e semelhanas que a linguagem Java implementa em suas estruturas de controle e repetio.

3.6.1 Estruturas de Controle


Voc j conhece uma estrutura do tipo (se ento) do ingls (if then else)? Ela serve para desviar o fluxo normal de execuo do programa dado uma condio. Veja a sua estrutura e o exemplo abaixo:

31

Linguagem e Tcnicas de Programao 01 (Java Bsico) Aula 03

Sintaxe:

if (expresso booleana) comando ou bloco else (opcional) comando ou bloco Exemplo: 1. public class TesteIf { 2. public static void main(String args[]){ 3. int x=10; 4. int y=15; 5. if (x>y) 6. x-=y; 7. else 8. x+=y; 9. } Qual o valor de x na linha 9? Acertou quem respondeu x igual a 25, pois, avaliando a expresso x > y na linha 5, o resultado false, portanto, no executa a linha 6; e, como existe o else na linha 7, o prximo comando ou bloco a execuo da linha 8, ou seja: atribui-se ao valor de x (10) + o valor de y (15) armazenando o resultado no prprio x. Observao importante: diferente de outras linguagens com C e C++, Java no permite a substituio da expresso booleana (true ou false) por um inteiro (0 ou 1). Outra estrutura de controle o switch que tem a sintaxe e o exemplo descrito abaixo:

switch (expresso) { case expresso1: comando ou bloco break; case expresson: comando ou bloco break; default: comando ou bloco }

32

Linguagem e Tcnicas de Programao 01 (Java Bsico) Aula 03

Exemplo: 1. public class UsoSwitch { 2. public static void main(String[] args) { 3. for(int i=1; i < 5; i++){ 4. switch(i) 5. { 6. case 1 : System.out.println("Numero UM"); 7. break; 8. case 2 : System.out.println("Numero DOIS"); 9. break; 10. case 3 : System.out.println("Numero TRES"); 11. break; 12. default : System.out.println("Numero INVLIDO"); 13. } 14. } 15. } 16. } A sada desse programa :

Numero Numero Numero Numero

UM DOIS TRES INVALIDO

3.6.2 Estruturas de Repetio


As estruturas de repetio em qualquer linguagem de programao servem para repetir um comando ou bloco vrias vezes. As estruturas de repetio indeterminadas, isto , aquelas que no se sabe, a priori, quantas vezes deve ser executado o comando ou bloco, podem ser divididas em: while (expresso) comando ou bloco nesse caso, o comando ou bloco s ser executado se a expresso for verdadeira (true) e ir executar-se at que a expresso se torne falsa (false). do comando ou bloco while (expresso) nesse caso, o comando ou bloco executar pelo menos uma vez e depois ser avaliada a expresso. Veja os exemplos de uso das estruturas de repetio do tipo: while, do while e for abaixo:

33

Linguagem e Tcnicas de Programao 01 (Java Bsico) Aula 03

Exemplo while: Figura 3.2 Programa UsoWhile.java 1. public class UsoWhile { 2. public static void main(String[] args) { 3. int x=10, y=15; 4. while(x < y){ 5. x++; 6. y--; 7. System.out.println("O valos da soma de y e x = " + (x+y) ); 8. } 9. } 10. } Quantas vezes apareceu na tela a frase O valor da soma de y e x = com o resultado de x + y =25? Acertou quem respondeu trs vezes. No primeiro teste while (x < y), o valor de x=10 e y=15, no segundo x=11 e y=14 e no terceiro e ltimo o x=12 e y=13, a partir da o x passa a ser maior que y e no entra mais na estrutura de repetio. A estrutura do tipo for tambm conhecida como lao (repetio); uma estrutura bem genrica que suporta iteraes. Sua sintaxe apresentada a seguir.

for (parmetros; condio; expresso) bloco de repetio Onde: O parmetro executado antes de o loop comear. Sempre sendo utilizado para condies iniciais. Pode conter declaraes. A condio verificada no incio do loop. O bloco ser repetido at que a condio torne-se falsa. A expresso executada depois do bloco do loop.

Veja o exemplo abaixo que imprime na tela os nmeros de 1 a 10: 1. public class UsoFor { 2. public static void main(String[] args) { 3. for (int i = 1; i < 10; i++) 4. System.out.println(i); 5. } 6. } Na primeira parte da instruo for, int i = 1 feita a definio de i e o seu valor inicial ( possvel definir o tipo de i fora do for e somente utiliz-lo com um valor inicial), a segunda parte a condio de teste (i

34

Linguagem e Tcnicas de Programao 01 (Java Bsico) Aula 03

< 10), e a terceira e ltima parte (i++) representa a alterao do contador. Abaixo, temos um exemplo de uso do for junto com o exemplo do switch. 1. public class UsoSwitch { 2. public static void main(String[] args) { 3. for(int i=1; i<5; i++){ 4. switch(i) 5. { 6. case 1 : System.out.println("Numero UM"); 7. break; 8. case 2 : System.out.println("Numero DOIS"); 9. break; 10. case 3 : System.out.println("Numero TRES"); 11. break; 12. default : System.out.println("Numero INVLIDO"); 13. } 14. } 15. } 16. }

Nessa aula, conhecemos, com um pouco mais de detalhe, a sintaxe da linguagem Java. Vimos os tipos primitivos e arrays e o como utilizar os operadores, suas estruturas de controle e repetio.

35

Linguagem e Tcnicas de Programao 01 (Java Bsico) Aula 04

Aula 04 - Conceitos de Orientao a Objetos


4.1 Introduo
Ns j sabemos o que significa classes e objetos e tambm como cri-los e us-los. Nesta aula iremos ver, com detalhes, algumas caractersticas importantes de uma linguagem orientada a objetos. So elas: abstrao, herana, polimorfismo e encapsulamento.

4.2 Abstrao
O conceito de abstrao, quando aplicado ao contexto de desenvolvimento de software baseado em objetos, parte do princpio de que devemos considerar a essncia de cada objeto e no pensar em todos os detalhes de sua implementao. Abstrao: Extrair tudo o que for essencial e nada mais. Todos os conceitos de uma linguagem de programao orientada a objetos esto relacionados com fatos do mundo real. Com o conceito de abstrao isso no seria diferente. Ns estamos sempre extraindo dos objetos o que te fato nos interessa. Na Figura 4.1, abaixo, temos um exemplo de uma moto. Para o guarda, as informaes que so importantes, isto , a sua abstrao em relao ao objeto moto, : placa, cor, nmero do chassi e aplicao de multa. Para o dono da moto, as informaes importantes (sua abstrao) so: cilindrada, cor, velocidade mxima e acelerao. Figura 4.1 Exemplo de Abstrao

Da mesma forma que o guarda e o dono da moto no exemplo anterior, temos que definir, nos objetos da nossa aplicao, os dados que realmente so necessrios para a soluo do problema que devemos resolver.

36

Linguagem e Tcnicas de Programao 01 (Java Bsico) Aula 04

4.3 Encapsulamento
A propriedade de encapsulamento de objetos est relacionada com a observao do mundo real, em que os atributos (caractersticas, estado) de um objeto s devem ser visto pelo prprio objeto. Apenas o prprio objeto deve decidir como apresentar os seus atributos para os outros objetos do mundo real. Na Figura 4.2, por exemplo, o Joo tem seu atributo salrio, e a forma como esse atributo ser apresentado para a sua namorada e o seu cunhado s o prprio Joo deve decidir. Para o seu cunhado, que adora pedir dinheiro emprestado, o Joo pode querer diminuir o valor do salrio por 5, por exemplo. Figura 4.2 Exemplo de Encapsulamento

Dessa forma, a propriedade de encapsulamento visa segurana e autonomia dos objetos. S o prprio objeto deve ter acesso aos seus atributos e ter autonomia sobre quais outros objetos iro acessar esses atributos e como esses outros objetos iro v-los. Com a linguagem Java, essa propriedade implementada por meio dos modificadores de acessos. Os atributos devem ter acessos privados, e mtodos pblicos devem ser criados para acessar e modificar os seus valores. Dessa forma, a propriedade de encapsulamento deve seguir os seguintes passos: Todos os atributos do objeto devem ser privados private. Os mtodos acessores para esses atributos, chamados de mtodos gets, devem ser criados e pblicos (public). Os mtodos modificadores (sets), que so utilizados para modificar os valores de um atributo de um objeto, devem ser pblicos (public). Agora, vamos encapsular a nossa classe Automvel. Os atributos devem ser privados, e os mtodos gets e sets para cada atributo devem ser pblicos. Como se pode observar no exemplo a seguir, todo mtodo get deve ter um retorno de acordo com o tipo de atributo que esse mtodo dar acesso e os mtodos set devem receber como parmetro o valor do atributo que deve ser modificado.

37

Linguagem e Tcnicas de Programao 01 (Java Bsico) Aula 04

1. public class Automovel { 2. 3. private String modelo; 4. private int ano; 5. private Pneu pneu; 6. private boolean estadoMotor; 7. 8. public int getAno() { 9. return ano; 10. } 11. public void setAno(int ano) { 12. this.ano = ano; 13. } 14. public boolean isEstadoMotor() { 15. return estadoMotor; 16. } 17. public void setEstadoMotor(boolean estadoMotor) { 18. this.estadoMotor = estadoMotor; 19. } 20. public String getModelo() { 21. return modelo; 22. } 23. public void setModelo(String modelo) { 24. this.modelo = modelo; 25. } 26. public Pneu getPneu() { 27. return pneu; 28. } 29. public void setPneu(Pneu pneu) { 30. this.pneu = pneu; 31. } 32. } A sintaxe do mtodo get sempre:

public TipoDoAtributo getAtributo(){ return atributo; } E a sintaxe do mtodo set sempre:

public void setAtributo(TipoDoAtributo parametro){ atributo = parametro; }

4.4 Herana
Uma das caractersticas bsicas de uma linguagem orientada a objeto a propriedade de reuso. Uma das formas de implementar o reuso em Java por meio da herana. Com herana, uma classe pode herdar todas as caractersticas de uma outra classe. Assim, a propriedade de herana permite a uma classe incorporar os dados e mtodos de uma classe previamente definida.

38

Linguagem e Tcnicas de Programao 01 (Java Bsico) Aula 04

Como pode ser observado na Figura 4.3 a seguir, as classes Gerente, Secretria e Programador herdam as caractersticas de um Empregado. Um Gerente um Empregado. Um Gerente pode at ter alguns atributos especializados e mtodos prprios, mas herda todas as caractersticas de um Empregado. Figura 4.3 Exemplo de Herana

Quando utilizamos herana, as classes podem ser classificadas de duas formas: Subclasses Classes que herdam caractersticas de outras classes. No exemplo anterior, as classes, Gerente, Secretria e Programador so subclasses da classe Empregado. Superclasse a classe mais geral, que tem as caractersticas que sero herdadas pelas subclasses. No exemplo da Figura 4.3, a classe Empregado a superclasse de Gerente, Secretria e Programador. A classe Gerente a superclasse da classe Executivo. Com herana possvel criar uma hierarquia de classes. Nessa hierarquia de classes a mesma classe pode ser uma subclasse e uma superclasse. No exemplo apresentado, a classe Gerente subclasse da classe Empregado, ao mesmo tempo que superclasse em relao classe Executivo. Ao implementar uma subclasse, alm de herdar as caractersticas de uma superclasse, voc pode especializar mtodos da classe ancestral e especificar novas operaes e atributos, para refinar, substituir ou estender as funcionalidades da superclasse. Quando falamos da hierarquia de classes em Java, h uma superclasse chamada Object, em que qualquer classe implementada em Java implicitamente herda as caractersticas dessa classe, pois a classe Object a superclasse de todas as classes implementadas em Java. Todas as classes implementadas em Java so, ento, subclasses da Object. Na Figura 4.4, temos uma classe Sobremesa que herda as caractersticas da classe Object. A classe Floresta Negra herda as caractersticas da classe Bolo, que herda de Sobremesa.

39

Linguagem e Tcnicas de Programao 01 (Java Bsico) Aula 04

Figura 4.4 Hierarquia de Classes

Por isso, toda classe em Java j tem alguns mtodos implcitos, como por exemplo, os mtodos toString() que gera uma String a partir do objeto, e o mtodo equals(), que analisa se um objeto igual a um outro, dentre outros. Em Java, uma classe s pode herdar caractersticas de uma nica classe. Java no d suporte herana mltipla. Como apresentado na Figura 4.5, no possvel em Java ter uma classe Anfbio que herde caractersticas de uma classe Veiculo Aqutico e uma classe Veiculo Terrestre ao mesmo tempo. Figura 4.5 Herana Mltipla

Para implementarmos herana em Java s adicionar na declarao de uma classe a palavra extends. Como apresentado a seguir, a classe Gerente herda as caracterstica da classe Empregado. Isto , Gerente uma subclasse da classe Empregado.

40

Linguagem e Tcnicas de Programao 01 (Java Bsico) Aula 04

1. public class Empregado{ 2. private String nome; 3. 4. public void setNome (String novoNome){ 5. nome = novoNome; 6. } 7. public String getNome ( ){ 8. return nome; 9. } 10. }

1. public class Gerente extends Empregado { 2. 3. private float salario; 4. 5. public void setSalario (float perc){ 6. salario = salario*perc; 7. } 8. } Ao se tratar de herana em Java, voc pode fazer sempre com que um objeto mais geral (isto , um objeto do tipo da superclasse) armazene um objeto mais especializado (subclasse), mas o contrrio no verdadeiro sem uma converso explcita de tipos. A seguir, so apresentados dois exemplos, no primeiro, a varivel mamo do tipo Fruta (mais geral, superclasse) recebe um objeto do tipo Ctrica (subclasse). No segundo exemplo, teremos um erro de compilao, uma vez que a varivel laranja do tipo Ctrica no pode receber diretamente um objeto do tipo Fruta. Isso significa que todas as Ctricas so Frutas, mas nem todas as Frutas so Ctricas. 1. public class Fruta { 2. private int gramas; 3. private int caloriasPorGrama; 4. 5. public int getCaloriasPorGrama() { 6. return caloriasPorGrama; 7. } 8. public void setCaloriasPorGrama(int caloriasPorGrama) { 9. this.caloriasPorGrama = caloriasPorGrama; 10. } 11. public int getGramas() { 12. return gramas; 13. } 14. public void setGramas(int gramas) { 15. this.gramas = gramas; 16. } 17. }

41

Linguagem e Tcnicas de Programao 01 (Java Bsico) Aula 04

1. public class Citro extends Fruta { 2. 3. private int acidoCitrico; 4. 5. public int getAcidoCitrico() { 6. return acidoCitrico; 7. } 8. 9. public void setAcidoCitrico(int acidoCitrico) { 10. this.acidoCitrico = acidoCitrico; 11. } 12. }

4.4.1 A palavra super


A palavra super uma palavra reservada usada numa subclasse como referncia para membros da superclasse, essa palavra tem o significado de: a superclasse da classe corrente.

42

Linguagem e Tcnicas de Programao 01 (Java Bsico) Aula 04

Todo mtodo construtor de uma subclasse deve ter como a sua primeira instruo a chamada ao construtor da superclasse, e isso realizado por meio do comando super(). A idia aqui : como toda subclasse uma superclasse com atributos e/ou mtodos especializados, ento primeiro preciso criar (instanciar) um objeto da superclasse e depois especializ-lo. Por exemplo, todo Citro Fruta, ento primeiro crio uma Fruta, e depois, o Citro, que uma Fruta especializada.

Destaque: Se o construtor da subclasse no chamar um construtor da superclasse, explicitamente, ento o mtodo construtor padro (sem parmetros) da superclasse ser utilizado. Se o construtor da subclasse no chamar um construtor da superclasse, explicitamente, ento a superclasse usa seu construtor padro. Se a superclasse no tiver construtor padro e o construtor da subclasse no chamar nenhum outro construtor da superclasse, explicitamente, ocorrer um erro de compilao. Isso o que acontece no exemplo apresentado a seguir. 1. public class Fruta { 2. private int gramas; 3. private int caloriasPorGrama; 4. 5. public Fruta(int gramas, int caloriasPorGrama) { 6. this.gramas = gramas; 7. this.caloriasPorGrama = caloriasPorGrama; 8. } 9. 10. public int getCaloriasPorGrama() { 11. return caloriasPorGrama; 12. } 13. public void setCaloriasPorGrama(int caloriasPorGrama) { 14. this.caloriasPorGrama = caloriasPorGrama; 15. } 16. public int getGramas() {

43

Linguagem e Tcnicas de Programao 01 (Java Bsico) Aula 04

17. 18. 19. 20. 21. 22. }

return gramas; } public void setGramas(int gramas) { this.gramas = gramas; }

4.5 Polimorfismo
s vezes necessrio que mtodos dentro de uma hierarquia de classes, tenham comportamentos diferentes, apesar de ter o mesmo nome. Por exemplo, suponha que na classe de Empregado tenha o mtodo para calcular salrio. Para a Secretria, o calculo de salrio sempre retornar um valor fixo de acordo com a sua carteira de trabalho. Para o empregado do tipo Gerente, o clculo de salrio estar relacionado com a sua produo, nessa empresa, isto significa que ele ganhar uma comisso sobre cada contrato fechado. Desta forma, o mesmo mtodo (calcularSalario) pode comportar-se de maneira diferente de acordo com o objeto que est sendo manipulado. Essa caracterstica de um mesmo mtodo comportar-se de maneira diferente de acordo com o objeto instanciado chamado de polimorfismo. s vezes, o mtodo que existe na superclasse no define exatamente o comportamento que um mtodo de uma subclasse deve ter. Por exemplo, na classe Empregado, vamos supor que tivesse um mtodo de calculaSalario que retorna o salrio base (assinado na carteira de trabalho) do empregado. Quase todos os empregados tm o salrio igual ao da carteira. Esse o mais comum dentro dessa empresa. Apenas o empregado gerente tem salrio diferenciado. Alm do salrio base, ele ganha uma comisso (5% do salrio base) em cada contrato assinado. Desta forma, para os objetos da classe Gerente (subclasse de Empregado) necessrio implementar (isto , sobre-escrever) o mtodo calculaSalario.

44

Linguagem e Tcnicas de Programao 01 (Java Bsico) Aula 04

1. public class Empregado{ 2. private String nome; 3. private float salarioBase; 4. 5. public void setNome (String novoNome){ 6. nome = novoNome; 7. } 8. public String getNome ( ){ 9. return nome; 10. } 11. 12. public float getSalarioBase() { 13. return salarioBase; 14. } 15. 16. public void setSalarioBase(float salarioBase) { 17. this.salarioBase = salarioBase; 18. } 19. 20. public float calculaSalario(){ 21. return getSalarioBase(); 22. } 23. } 20 public float calculaSalario(){ 21 22 } return getSalarioBase();

1. public class Gerente extends Empregado { 2. 3. private int numContratos; 4. 5. public int getNumContratos() { 6. return numContratos; 7. } 8. 9. public void setNumContratos(int numContratos) { 10. this.numContratos = numContratos; 11. } 12. 13. public float calculaSalario(){ 14. return (super.getSalarioBase() + 15. (float)(0.05*super.getSalarioBase())*getNumContratos()); 16. } 17. } 13 public float calculaSalario(){ 14 15 16 } return (super.getSalarioBase() + (float)(0.05*super.getSalarioBase())*getNumContratos());

45

Linguagem e Tcnicas de Programao 01 (Java Bsico) Aula 04

Resumo de sobreescrever: Sobreescrita est diretamente relacionada com subclasses. Quando voc extends uma classe para produzir uma nova, voc herda e tem acesso a todos os mtodos no privados da classe original. Algumas vezes necessrio modificar o comportamento de um mtodo da subclasse; essa a proposta da sobrescrita do mtodo. Ao ocorrer uma sobreescrita de mtodos, a mquina virtual ir executar o mtodo da classe mais especializada (a subclasse) e no o mtodo da superclasse (sobreposio). Note que esta deciso ocorre em tempo de execuo. Diferenas entre sobrecarga e sobrescrita: Classe pai pode ser sobrescrito por mtodos da subclasse. Mtodos sobrecarregados devem ter lista de argumentos diferentes; mtodos sobrescrito devem ter lista idntica de argumentos. O tipo de retorno de um mtodo sobrecarregado pode ser escolhido livremente; o retorno de um mtodo sobrescrito deve ser idntico ao mtodo original.

Nessa aula foram apresentados conceitos fundamentais da linguagem de programao orientada a objetos e suas caractersticas importantes. Com essas caractersticas, as linguagens orientadas a objetos esto dominando o mundo de desenvolvimento de software.

46

Linguagem e Tcnicas de Programao 01 (Java Bsico) Aula 05

Aula 05 - Principais Classes


5.1 Introduo
Nesta aula voc ter a oportunidade de conhecer algumas classes bsicas e importantes para o uso correto dos componentes da linguagem Java. Primeiro apresentaremos os tipos primitivos relacionados a nmeros e seqncias de caracteres: as Strings.

5.2 Nmeros
Alm dos tipos primitivos, vistos na aula 3, e da definio de Classes e Objetos, vistos na aula 4, veremos agora como representar nmeros por meio da biblioteca de classes do Java.

5.2.1 Classe Number


A classe Number uma classe abstrata que faz parte do core de Java (java.lang.Integer). a classe me que d origem s classes que representam nmeros. Nesta seo, vamos detalhar as classes Integer e Float, lembrando que ainda existem outras que no sero objeto de estudo nesta aula: AtomicInteger, Long, Short, BigDecimal, entre outras. A classe Number possui um conjunto de mtodos que permite transformar os objetos em tipos primitivos numricos. Veja a descrio desses mtodos na Tabela 5.1 abaixo:

Tabela 5.1 Mtodos Transformadores de Number Retorno Byte Int Float Long Short Mtodo .byteValue() .intValue() .floatValue() .longValue() .shortValue() Descrio Retorna o valor do objeto como um byte Retorna o valor do objeto como um int Retorna o valor do objeto como um float Retorna o valor do objeto como um long Retorna o valor do objeto como um short

47

Linguagem e Tcnicas de Programao 01 (Java Bsico) Aula 05

5.2.2 Classe Integer


A classe mapeadora (wrapper)Integer a classe que representa um tipo primitivo int. Vamos utiliz-la como exemplo, mas o procedimento e o raciocnio so semelhantes s demais classes que tambm representam os demais nmeros em Java, tais como Float, Doulbe, BigInteger etc. Para facilitar o entendimento do uso da classe Integer, vejamos os mtodos descritos abaixo:

Tabela 5.2 Mtodos de Integer Retorno Int byte Boolean Integer Mtodo .parseInt(String s) .byteValue() .equals(Object o) .valueOf(String x) Descrio Retorna um int com o valor da String Retorna o int com um byte Compara o objeto com o objeto Integer Retorna um objeto Integer dado uma String

Alm dos mtodos descritos acima, podemos consultar a relao completa dos mtodos e das constantes da classe Integer na pgina da documentao do Java.

5.2.3 Classe Float


A classe Float tambm uma classe mapeadora (wrapper). Nesse caso, a classe Float representa um tipo primitivo float. A Tabela 5.3 abaixo mostra alguns mtodos de Float:

Tabela 5.3 Mtodos de Float Retorno float byte Boolean int Mtodo .parseFloat(String s) .byteValue() .equals(Object o) .intValue() Descrio Retorna um float com o valor da String Retorna o int com um byte Compara o objeto com o objeto Float Retorna um objeto Float como um int

48

Linguagem e Tcnicas de Programao 01 (Java Bsico) Aula 05

5.3 Strings
A classe String representa uma seqncia imutvel de caracteres. A linguagem Java no possui nenhum tipo primitivo do tipo String. Na aula 3, vimos como representamos um tipo primitivo char. Perceba, agora, as diferenas entre o tipo primitivo char e os objetos String. Para criar um objeto do tipo String, podemos utilizar a seguinte notao:

String frase = Minha primeira String;


Podemos ainda fazer a concatenao de Strings:

String censura= Menores de 18+ anos;


Podemos ainda observar parte de uma String com a utilizao do mtodo .substring (int ini, int fim), veja o exemplo abaixo:

String x = Bem Vindo; String y = x.substring(0,3); // Neste exemplo Bem


Outro mtodo muito utilizado .length() indica o tamanho de uma String:

int i = y.length(); // tomando por base o exemplo anterior 3


A relao completa de mtodos de String pode ser consultada na documentao String, inclusive com as possibilidades na hora de criar um objeto String e com as diferentes assinaturas do mtodo construtor. Veja algumas possibilidades na hora de criar o seu objeto String:

String nome = Fernando; String nome = new String(Fernando); char[] letras = { F, e, r, n, a, n, d, o}; String nome = new String (letras);
Enfim, opes no faltam para criarmos nossos objetos String, mas ser que todas as formas citadas acima criam os objetos da mesma maneira? Para responder esta pergunta, vamos aprender a testar a igualdade entre Strings: A primeira idia utilizar o operador = =, que nos indica se os dois objetos String apontam para o mesmo endereo em memria, ou seja, se so os mesmos objetos. Contudo, normalmente no isso

49

Linguagem e Tcnicas de Programao 01 (Java Bsico) Aula 05

que queremos. Na maioria das vezes, queremos saber se o contedo das nossas Strings so iguais, ou seja, se Fernando igual a Fernando. Para essa tarefa utilize o mtodo .equals(String x) no lugar do operador de igualdade = = . Alm da classe String, a linguagem Java possui outras classes irms de String que possuem caractersticas semelhantes, mas implementaes diferentes, so elas: StringBuffer, StringBuilder e StringTokenizer. Para aprofundar o conhecimento dessas classes, acesse a documentao do Java.

As principais classes apresentadas at agora tratam de nmeros (Number, Integer e Float) e de Strings, que uma seqncia de caracteres. Essas classes tambm so conhecidas como classes bases, ou seja, elas sero muito utilizadas por outras classes em Java. Na aula 7, conheceremos outras classes interessantes que utilizam essas classes bases.

50

Linguagem e Tcnicas de Programao 01 (Java Bsico) Aula 05

Aula 06 - Pacotes, Genricos e Anotaes


6.1 Introduo
Nesta aula iremos aprender algumas caractersticas da linguagem Java. Uma delas: pacotes, que j usamos em aulas anteriores, genrico e anotaes, que so recursos novos que foram definidos a partir da verso 1.5.

6.2 Pacotes
Para organizar e facilitar o uso das classes, podemos agrupar as classes relacionadas em pacotes. Alm disso, a utilizao de pacote evita problemas de conflito de nome e ajuda no controle de acesso a classes de determinado pacotes.

6.2.1 Criando Nossos Pacotes


As classes Java desenvolvidas pela Sun so agrupadas em pacotes. Existe um pacote java.lang, onde as classes do core Java so definidas. Tambm j utilizamos a classe JOptionPane do pacote javax.swing. Quando desenvolvemos nossos sistemas, podemos estruturar as nossas classes em pacote. Para especificar que uma classe pertence a um pacote, necessrio apenas colocar no incio do cdigo fonte da classe a declarao package seguida do nome do pacote. A seguir, apresentamos a classe Empregado que pertence ao pacote da aula 6. O pacote denominado aula6 ter todas as classes de exemplo disponvel nessa aula.

package aula6; public class Empregado{ // Cdigo da classe } Para a definio do nome de um determinado pacote, a Sun especificou alguns padres que devem ser obedecidos. So eles: Os nomes dos pacotes devem sempre ser escritos com todas as letras minsculas. Quando desenvolvendo um sistema em uma empresa que tem um domnio na Internet, esse domnio deve ser parte do nome do pacote. Exemplo: ao desenvolver um sistema para Catlica Virtual, que tem o domnio catolicavirutal.br, o nome do pacote deveria ter como incio br.catolicavirtual. Dessa forma, o exemplo da classe Empregado deveria estar no pacote br.catolicavirtual.aula6. Como apresentado a seguir:

51

Linguagem e Tcnicas de Programao 01 (Java Bsico) Aula 05

package br.catolicavirtual.aula6; public class Empregado{ // Cdigo da classe }

6.2.2 Pacote e Diretrio


Os pacotes, fisicamente na mquina, so diretrios onde as classes esto armazenadas. A Figura 6.1 mostra um exemplo em que a classe Empregado est armazenada no diretrio aula6, que o pacote ao qual a classe pertence. Figura 6.1 Classe Empregado no Pacote aula 6

Na Figura 6.2, o arquivo Empregado, que est no pacote br.catolicavirtual.aula6, fica armazenado fisicamente no diretrio br/catolicavirtual/aula6. Figura 6.2 Classe Empregado no pacote br.catolicavirtual.aula6

52

Linguagem e Tcnicas de Programao 01 (Java Bsico) Aula 05

6.2.3 Usando Classes que Esto em um Pacote


Para utilizar classes que esto dentro de pacotes, necessrio importar essas classes. Isto implementado em Java por meio da declarao import. possvel tambm escrever a assinatura completa da classe: <nome do pacote>.<nome da classe>. 1. package br.catolicavirtual.aula6; 2. import javax.swing.JOptionPane; 3. public class TrabalhandoComFiguras { 4. public static void main(String args[]){ 5. aula4.Triangulo t = new aula4.Triangulo(); 6. int lado1 = Integer.parseInt( 7. JOptionPane.showInputDialog("Lado 1 do Triangulo")); 8. int lado2 = Integer.parseInt( 9. JOptionPane.showInputDialog("Lado2 do Triangulo" )); 10. int lado3 = Integer.parseInt( 11. JOptionPane.showInputDialog("Lado3 do Triangulo")); 12. float area = t.calculaArea(lado1, lado2, lado3); 13. JOptionPane.showMessageDialog(null, "rea: " + area,"Area do" + "Triangulo",JOptionPane.INFORMATION_MESSAGE); 14. } 15. }

6.3 Genricos
Algumas vezes, dentro de uma determinada classe, podemos ter mtodos diferentes, com o mesmo comportamento, que apenas manipulam objetos de tipos diferentes. No exemplo apresentado a seguir, tem-se a classe Matemtica com trs mtodos: somaInteger, somaFloat e somaDouble. Como para usar tipos genricos precisamos trabalhar com objetos, utilizamos as classes que representam os tipos primitivos, sendo elas: Integer, Doubl e Float. 1. package aula6; 2. public class Matematica { 3. public static void exibirNumeros(Integer[] numeros){ 4. String saida = "Dados do array : "; 5. for (int i = 0; i < numeros.length; i++) { 6. saida+=numeros[i].toString() + " "; 7. } 8. System.out.println(saida); 9. } 10. public static void exibirNumeros(Double[] numeros){ 11. String saida = "Dados do array : "; 12. for (int i = 0; i < numeros.length; i++) { 13. saida+=numeros[i].toString() + " "; 14. } 15. System.out.println(saida); 16. } 17. public static void exibirNumeros(Float[] numeros){ 18. String saida = "Dados do array : "; 19. for (int i = 0; i < numeros.length; i++) { 20. saida+=numeros[i].toString()+ " "; 21. } 22. System.out.println(saida); 23. }

53

Linguagem e Tcnicas de Programao 01 (Java Bsico) Aula 05

24. 25. 26. 27.

public static void main(String args[]){ //Criar array Integer[] numerosInteger = {new Integer(1),new Integer(2),new Integer(3) , new Inte ger(4),new Integer(5)}; 28. Float[] numerosFloat = {new Float(1.1),new Float(2.2), 29. new Float(3.3) , new Float(4.4),new Float(5.5)}; 30. exibirNumeros(numerosInteger); 31. exibirNumeros(numerosFloat); 32. } 33. } Esses trs mtodos que tem a mesma funcionalidade pode ser substitudo por um nico mtodo genrico. Como apresentado na classe MatematicaGenerico, a seguir: o N entre os sinais de maior e menor <N> , significa que o tipo de dado recebido pelo mtodo Genrico (pode ser de qualquer tipo). 1. package aula6; 2. public class MatematicaGenerico { 3. public static <N> void exibirNumeros(N[] numeros){ 4. String saida = "Dados do array : "; 5. for (int i = 0; i < numeros.length; i++) { 6. saida+=numeros[i].toString() + " "; 7. } 8. System.out.println(saida); 9. } 10. public static void main(String args[]){ 11. //Criar array 12. Integer[] numerosInteger = {new Integer(1),new Integer(2), 13. new Integer(3) , new Integer(4),new Integer(5)}; 14. Float[] numerosFloat = {new Float(1.1),new Float(2.2), 15. new Float(3.3) , new Float(4.4),new Float(5.5)}; 16. exibirNumeros(numerosInteger); 17. exibirNumeros(numerosFloat); 18. } 19. }

6.3.1 Limitando os Tipos de um Elemento Genrico


Com um tipo genrico, podemos determinar quais os valores de objeto so possveis ser atribudos a ele. Isso feito com a palavra extends. No exemplo anterior, se definssemos que <N extends Integer>, N s receberia objetos do tipo Integer, e ao tentar chamar esse mtodo com um outro tipo de dado teramos um erro no momento da compilao como apresentado a seguir.

54

Linguagem e Tcnicas de Programao 01 (Java Bsico) Aula 05

6.3.2 Classes Genricas


Para declarar que uma classe ser genrica, deve-se usar a seguinte sintaxe:

[modificadorDeAcesso] class nomeDaClasse<TipoGenerico>


Uma classe genrica quando um de seus atributos do tipo Genrico. No exemplo a seguir, a classe MatemticaClasseGenerico recebe um atributo do tipo genrico N. No mtodo main, so criados dois objetos: matemtica e matematica1. Como se observa, no momento da criao do objeto determinado qual o tipo de dado que esse valor genrico deve receber. Se for passado um tipo diferente do especificado, acontece um erro no momento da compilao. 1. public class MatematicaClasseGenerica{ 2. N numeros[]; 3. public N[] getNumeros() { 4. return numeros; 5. } 6. public void setNumeros(N[] numeros) { 7. this.numeros = numeros; 8. } 9. public static void main(String args[]){ 10. //Criando objetos 11. MatematicaClasseGenerica matematica = 12. new MatematicaClasseGenerica (); 13. Integer[] numerosInteger = {new Integer(1), 14. new Integer(2),new Integer(3) , 15. new Integer(4),new Integer(5)};

55

Linguagem e Tcnicas de Programao 01 (Java Bsico) Aula 05

16. 17. 18. 19. 20. 21. 22. 23. 24. }

matematica.setNumeros(numerosInteger); MatematicaClasseGenerica matematica1 = new MatematicaClasseGenerica (); Float[] numerosFloat = {new Float(1.1),new Float(2.2), new Float(3.3),new Float(4.4), new Float(5.5)}; matematica1.setNumeros(numerosFloat); }

6.4 Anotaes
Anotaes fornecem dados sobre um programa que no parte do prprio programa. Elas no tm efeito direto na operao do cdigo do programa que elas anotam. Anotaes podem ser utilizadas para: Informaes ao compilador Anotaes podem ser usadas pelo compilador para detectar erro ou suprimir os alertas (warnings). Processamento em tempo de compilao ou de instalao (deployment) Algumas ferramentas utilizam informaes de anotaes para gerar cdigos, arquivos XML etc. Processamento em tempo de execuo Algumas anotaes so disponveis para ser examinadas no momento de execuo. As anotaes podem ser aplicadas na declarao de classes, campos, mtodos e outros elementos do programa.

6.4.1 Documentao
Utilizada para fornecer informaes importantes sobre o programa. Por exemplo, suponha que em cada classe o desenvolver deseja colocar o seu nome, a data que foi disponibilizado o programa e sua verso. Antes de fazer as anotaes na classe necessrio primeiro criar a anotao. A sintaxe de criao de uma anotao :

package br.catolicavirtual.aula6; public @interface Informacaoes { String desenvolvedor(); String data(); String versao() default "1.0"; } Em seguida essa anotao pode ser utilizada.

56

Linguagem e Tcnicas de Programao 01 (Java Bsico) Aula 05

package br.catolicavirtual.aula6; @Informacaoes( desenvolvedor= "Maria", data= "10/05/2007", versao= "1.0" ) public class ExemploAnotacao { // Cdigo da classe } Para que esses dados sejam exibidos no javadoc, devemos utilizar a anotao chamada @Documented no incio da implementao da anotao. Como apresentado a seguir:

package br.catolicavirtual.aula6; import java.lang.annotation.Documented; @Documented public @interface Informacaoes { String desenvolvedor(); String data(); String versao() default "1.0"; } Para utilizar a anotao @Documented, deve-se importar esta anotao do pacote java.lang.annotation, pacote em que esta anotao est definida.

6.4.2 Anotaes Usadas pelo Compilador


Existem trs tipos de anotaes que so pr-definidas pela prpria especificao do Java, so elas: @Deprecated Indica que o elemento marcado est desatualizado (deprecated) e no deve ser mais utilizado. O compilador gera um alerta quando o programa utiliza uma classe, um mtodo ou campo que a anotao @Deprecated. Quando um elemento est desatualizado (deprecated), ele tambm documentado no javadoc. @Override Essa anotao informa ao compilador que o elemento deve sobrepor o elemento declarado na superclasse.

57

Linguagem e Tcnicas de Programao 01 (Java Bsico) Aula 05

@SuppressWarnings Especifica para o compilado que ele deve suprimir os alertas que seriam gerados. No exemplo a seguir, informado ao compilador que ele deve suprimir o alerta que seria gerado pelo fato de o mtodo utilizado estar desatualizado.

Exemplos do uso de anotao pelo compilador:

public class ExemploAnotacao { @SuppressWarnings("deprecation") public void metodoDeprecated(){ } } Todo os alertas do compilador pertencem a uma categoria. Na especificao Java existem duas categorias: deprecation e unchecked. O unchecked deve ser utilizado para cdigos legados escritos antes do advento dos genricos. Quando deseja-se suprimir mais de uma categoria de alerta, utilizado a seguinte sintaxe.

public class ExemploAnotacao { @SuppressWarnings({"deprecation","unchecked"}) public void metodoDeprecated(){ } }

6.4.3 Anotaes de Processamento


Para uso mais avanado de anotaes, possvel escrever um processador de anotaes que leia um programa Java e tome decises baseadas nessas anotaes. A verso JDK 1.5 inclui uma ferramenta de processamento de anotao, chamado apt. Na verso 1.6 do JDK, essa funcionalidade do apt parte padro do compilador Java. Para processar informaes em nvel de execuo, utiliza-se o seguinte tipo de anotao:

58

Linguagem e Tcnicas de Programao 01 (Java Bsico) Aula 05

import java.lang.annotation.*; @Retention(RetentionPolicy.RUNTIME) public @interface Informacaoes { String desenvolvedor(); String data(); String versao() default "1.0"; }

Nessa aula apresentamos algumas caractersticas importantes da linguagem Java: os pacotes, que j uma caracterstica presente na primeira verso da especificao do Java, e os genricos e as anotaes, que so novas caractersticas da verso Java 5.0.

59

Linguagem e Tcnicas de Programao 01 (Java Bsico) Aula 05

Aula 07 - Outras Classes Importantes


7.1 Introduo
Nesta aula voc conhecer alguns recursos interessantes utilizados pela linguagem Java para melhorar a qualidade de cdigo, comearemos apresentando os conceitos de classes abstratas e interfaces, em seguida sero apresentadas algumas classes utilitrias (as mais utilizadas) do pacote java.util e por fim iremos estudar um pouco sobre colees.

7.2 Classes Abstratas


A medida em que utilizamos herana em Java e subimos na hierarquia de classes, as classes vo se tornando mais genricas. Em algum ponto dessa hierarquia uma classe to genrica que passa a ser modelo para outras classes. Mas porque devemos ter classes to genricas que chegam a ser abstratas? A melhor resposta para tornar o nosso projeto mais claro. Veja o exemplo abaixo:

public abstract class VeiculoAquatico { abstract void definirRumo(int n); abstract void definirVelocidade(int n); }

public class Canoa extends VeiculoAquatico { void definirRumo(int n) { // cdigo } void definirVelocidade(int n) { // cdigo } } Podemos observar que a classe que abstrata VeiculoAquatico possui a assinatura de dois mtodos, ambos abstratos, e a classe que herda de VeiculoAquatico implementa obrigatoriamente todos os mtodos definidos anteriormente. As classes abstratas possuem mtodos abstratos que so mtodos que nos preocupamos com a sua assinatura e no com o seu corpo, ou seja, os mtodos abstratos no possuem implementao o objetivo utiliz-los como modelo (respeitando a sua assinatura). Quando uma classe herda de uma

60

Linguagem e Tcnicas de Programao 01 (Java Bsico) Aula 05

classe abstrata ela obrigada a escrever o corpo dos mtodos abstratos ou defini-los novamente como abstratos.

7.3 Interfaces
Voc j aprendeu que os objetos interagem entre si, mas como os objetos se apresentam para o mundo exterior (para outros objetos) percebido pelos mtodos pblicos. A esses mtodos pblicos damos o nome de Interface do objeto. Muitas vezes precisamos interagir com outros objetos e no estamos preocupados com detalhes de implementao, ento basta saber o qu o objeto faz, que est definido na interface e no como esse objeto trabalha internamente, ou seja, como feita a implementao dessa interface. Um exemplo clssico para apresentar os conceitos de Interface demonstrado na figura 7.2 abaixo: Figura 7.2 Exemplo de Interface

O controle remoto um bom exemplo de interface, no controle voc as operaes bsicas (ligar, desligar, mudar de canal) todas essas aes podem ser associadas aos mtodos do objeto que implementa a interface controle remoto, note que a televiso o objeto que implementa as aes e diferentemente das classes abstratas vista na seo anterior, televiso no do tipo controle remoto.

7.3.1 Implementando Interfaces em Java


Semelhante ao que fazemos para definir uma classe (public class NomeDaClasse{ .... } ), definimos as interfaces em java atravs da palavra reservada interface, ento para declaramos uma interface, temos: (public interface NomeDaInterface { ... } ). A seguir apresentada a sintaxe de uma interface.

public interface nomeDaInterface A seguir apresentada a interface AparelhoEletronico que implementa as operaes do controle remoto, que teoricamente podem servir para qualquer aparelho eletrnico:

61

Linguagem e Tcnicas de Programao 01 (Java Bsico) Aula 05

public interface AparelhoEletronico { public void ligar(); public void desligar(); public void aumentarVolume(); public void diminuirVolume(); public void adiantarCanal(); public void retrocederCanal(); } Para finalizar, precisamos saber como usar as interfaces em conjunto com as demais classes java, para isso utilizamos a palavra reservada implements, permitido que uma classe implemente mais de uma interface, o que encarado por alguns autores como uma forma de implementar herana mltipla.

7.4 Colees
Colees uma parte da Linguagem Java utilizada para manipulao de um conjunto de dados relacionados. Nas primeiras verses da linguagem Java, a classe Vector (seo 7.3.1) era utilizada para manipular esses grupos de objetos. Nas verses mais novas do Java, foi implementada uma hierarquia de classes relacionadas com a classe Collection, assim como, uma maneira de manipular grupos de objetos semelhantes (colees) foi especificada (seo 7.3.2). Utilizando essas classes que manipulam as colees conseguimos desenvolver programas de maneira mais elegante e mais fcil.

7.4.1 A classe Vector


A classe Vector foi especificada desde a verso 1.0 do JDK, sendo uma estrutura capaz de armazenar diferentes objetos dentro de uma mesma estrutura. Um Vector assemelha-se a um array, onde o seu tamanho pode mudar dinamicamente. A classe Vector em Java fornece os recursos de estrutura de um array s que com redimensionamento dinmico. Um Vector sempre contm um nmero menor ou igual a sua capacidade. O aumento do Vector pode ser realizado com um tamanho de incremento informado, ou pelo valor padro, que o dobro do tamanho atual.

62

Linguagem e Tcnicas de Programao 01 (Java Bsico) Aula 05

import java.util.Vector; import javax.swing.JOptionPane; import aula4.Empregado; public class EmpregadosVector { public static void main (String args[]) { String resposta = "S"; Vector<Empregado> listaEmpregados = new Ve ctor<Empregado>(); Empregado emp; System.out.println("Quando desejar sair do cadastro "+ "Digite a letra N"); while (!(resposta.equals("N"))){ emp = new Empregado(JOptionPane.showInputDialog("D igite seu nome"), JOptionPane.showInputDialog("Digite seu cpf")); listaEmpregados.addElement(emp); resposta = (JOptionPane.showInputDialog("Deseja Co ntinuar")); } System.exit(0); } }

7.4.2 O Grupo Collection


Uma coleo tem como objetivo agrupar elementos dentro de uma unidade. O uso de colees tem como principais vantagens: Reduz o esforo de programao: as colees j tem diferentes algoritmos implementados. Aumenta a velocidade e qualidade dos programas: toda a framework das colees, foi desenvolvida pensando em diminuir o tempo de processamento de manipulao desses objetos. Nas verses mais novas do Java, foi especificada o que chamada de Framework de colees. Uma framework de colees uma arquitetura para representao e manipulao que contm os seguintes elementos: Interfaces: so tipos abstratos para representao de colees. Implementao: implementaes concretas das interfaces. Algoritmos: mtodos para facilitar recursos computacionais tais como: pesquisa, ordenao, em objetos que implementam as interfaces.

63

Linguagem e Tcnicas de Programao 01 (Java Bsico) Aula 05

7.4.2.1 Interfaces de Colees


As interfaces core das colees encapsulam tipos diferentes de Colees. Essas interfaces permitem colees serem manipuladas independentemente dos detalhes de sua representao. As hierarquias das interfaces de coleo so apresentadas na figura 7.1.
Figura 7.1 Hierarquia de Classes de Colees

Todas as interfaces do core Java a partir da verso 1.5 so genricas. Por exemplo a interface Collection definida assim: public inteface Collection<E>... Com genricos possvel definir o tipo de dados que uma coleo pode receber, com isso, o compilador pode verificar tipos errados no momento da compilao. A seguir descrevemos cada uma das interfaces: Collection: a raiz da hierarquia das colees. Uma coleo representa um grupo de objetos conhecidos como seus elementos. Algumas colees podem ter elementos duplos. Alguns so ordenados outros no. Set: uma coleo que no pode conter elementos duplicados. List: uma coleo ordenada. Lists podem conter elementos duplicados. Queue: uma coleo utilizada para processar elementos com prioridade de processamento. Map: um objeto que mapeia chave para valor. Um Map no contm chaves duplicadas.

Existem duas colees que so as verses ordenadas de um Set e um Map, so elas: SortedSet e SortedMap.

7.4.2.2 Implementaes
Implementao so objetos de dados usados para armazenar colees, no qual implementa as interfaces descritas anteriormente. Existem vrias classes de implementao, aqui estaremos vendo as que so classificadas como de proposta geral, que so as mais utilizadas hoje em dia (Tabela 7.1). E esto resumidas na tabela abaixo.

64

Linguagem e Tcnicas de Programao 01 (Java Bsico) Aula 05

Tabela 7.1 Implementaes de Colees Interface Implementao Tabela Hash + Lista LinkedHashed LinkedList

Tabela de Hash

Array dinmicos

rvores

Listas

Set List Queue Map

HashSet ArrayList

TreeSet

HashMap

TreeMap

LinkedMap

Cada uma dessas implementaes fornecem todas as operaes opcionais contidas em sua interface. Todos permitem elementos null, chave e valores. Nenhuma sincronizada (thread-safe). Todos tm iteradores com deteco de falha rpido, os quais identificam rapidamente uma modificao ilegal durante a iterao. Essas novas colees, diferentemente do Vector no garantem sincronismos entre as threads pois, de uma maneira geral, as coleo so utilizadas onde a sincronizao no importante. Se for necessrio a utilizao de sincronizao com as novas colees posvel utilizar as implementaes wrapper.

7.4.2.3 Algoritmos
Os algoritmos descritos aqui so funcionalidades reutilizadas fornecidas pelas colees do Java. Todos eles vem da classe Collections, e todos tem a forma de mtodos estticos no qual o primeiro argumento a coleo na qual a operao vai ser realizada. A maioria dos algoritmos fornecidos operam com List, mas tem os que operam com qualquer instncia de Collection. Existem vrios algoritmos, aqui mostraremos o de ordenao (sort). Esse algoritmo ordena uma lista de elementos na ordem crescente de acordo com o apresentado a seguir.

65

Linguagem e Tcnicas de Programao 01 (Java Bsico) Aula 05

1. 2. 3. 4. 5. 6. 7. 8. 9.

import java.util.Arrays; import java.util.Collections; import java.util.List; public class OrdemAlfabetica { public static void main(String[] args) { String[] listaNomes = {"Maria","Silvia", "Alexan dre"}; List<String> list = Arrays.asList(listaN Collections.sort(list); System.out.println(list); }

omes); 10. 11. 12. 13. 14. }


Sada: [Alexandre, Maria, Silvia]

A segunda forma de utilizar a sort com um Comparator. Usando o Comparator, um conjunto com a lista dos elementos e a forma como os elementos so comparados, devem ser especificados.

1. import 2. import 3. import 4. 5. public 6. 7. 8. 9. 10. 11. 12. 13. 14. ); 15. 16. 17. 18. 19. 20. 21.

java.util.ArrayList; java.util.Collections; java.util.List; class OrdenandoData { public void ordenarData(){ List<Data> listaDeDatas = new ArrayList<Data>(); listaDeDatas.add(new Data(1976,10,30)); listaDeDatas.add(new Data(1986,4,29)); listaDeDatas.add(new Data(1981,10,20)); Collections.sort(listaDeDatas,new ComparandoData()); System.out.println("Datas Ordenandas" + listaDeDatas } public static void main(String args[]){ OrdenandoData datasOrdenandas = new OrdenandoData(); datasOrdenandas.ordenarData(); }

Sada: Datas Ordenandas[30/10/1976, 20/10/1981, 29/4/1986]

1. public class Data {

66

Linguagem e Tcnicas de Programao 01 (Java Bsico) Aula 05

2. 3. private int ano; 4. private int mes; 5. private int dia; 6. 7. public Data(int ano, int mes, int dia) { 8. this.ano = ano; 9. this.mes = mes; 10. this.dia = dia; 11. } 12. 13. public int getAno() { 14. return ano; 15. } 16. public void setAno(int ano) { 17. this.ano = ano; 18. } 19. public int getDia() { 20. return dia; 21. } 22. public void setDia(int dia) { 23. this.dia = dia; 24. } 25. public int getMes() { 26. return mes; 27. } 28. public void setMes(int mes) { 29. this.mes = mes; 30. } 31. 32. public String toString(){ 33. return this.getDia() + "/" + this.getMes() + "/" + t his.getAno(); 34. } 35. 36. }

1. import java.util.Comparator; 2. 3. public class ComparandoData implements Comparator{ 4. 5. public int compare(Data data1, Data data2) { 6. 7. int comparaAno = data1.getAno() - data2.getAno(); 8. if (comparaAno != 0) 9. return comparaAno; 10. 11. int comparaMes = data1.getMes() - data2.getMes(); 12. if (comparaMes != 0) 13. return comparaMes; 14. 15. int comparaDia = data1.getDia() - data2.getDia(); 16. if (comparaDia != 0) 17. return comparaDia;

67

Linguagem e Tcnicas de Programao 01 (Java Bsico) Aula 05

18. 19. 20.

return 0; } }

Finalizamos essa aula. Nela, apresentamos conceitos importantes para a implementao de programas em Java: como classes abstratas, interfaces e colees.

68

Linguagem e Tcnicas de Programao 01 (Java Bsico) Glossrio

Glossrio

API (Application Program Interface) um conjunto de bibliotecas de classes reutilizveis. Arquivo fonte o arquivo texto, de alto nvel, onde se escrevem os comandos da linguagem Java. Arrays Estrutura simples de Java que representa uma coleo de objetos.

B
Byte Code o cdigo Java compilado e que pode ser executado em qualquer ambiente que tenha uma mquina virtual Java.

C
Classe ancestral a classe que deu origem herana, tambm conhecida como classe me ou progenitora. Compilador Ferramenta utilizada para transformar cdigo fonte em cdigo compilado, no caso de Java, para transformar em byte code. CORBA (Common Object Request Broker Archtecture) uma arquitetura para objetos distribuda e suportada pela linguagem Java. Core o ncleo da linguagem; a parte central, fundamental, o corao da linguagem, as principais classes e ferramentas.

D
Download Processo de baixar programas, normalmente da Web. Duke o mascote de java.

F
Framework Conjunto de aplicativos e ferramentas para uma atividade especfica, por exemplo Framework Java Web (conjunto de ferramentas Java para desenvolvimento Web).

69

Linguagem e Tcnicas de Programao 01 (Java Bsico) Glossrio

H
Herana mltipla quando herdamos de mais de uma classe. Em java, no permitido herana mltipla.

J
Javax.swing API para interfaces grficas em Java. JDK Kit de desenvolvimento Java - do ingls java development kit.

L
Linguagem C Linguagem de programao estruturada muito conhecida e utilizada pela comunidade.

M
Mquina Virtual Java uma mquina imaginria implementada por software que simula uma mquina real, tornando possvel a portabilidade de programas Java. responsvel pelo tratamento de heterogeneidade entre plataformas. Mtodo Construtor um mtodo especial em Java que serve para inicializar os valores de um objeto. Tem o mesmo nome da classe e no possui tipo de retorno. Toda classe possui um construtor, se no escrevermos um, o compilador gera um automaticamente.

O
Oak (carvalho) Em funo de uma rvore que existia em frente ao escritrio de James Gosling. Primeiro nome da linguagem Java.

P
Package Pacote, organizao de diretrios em Java.

R
RMI (Remote Method Invocation) uma API de Java que d suporte programao distribuda, ou seja, a invocao de mtodos remotos como se fossem locais.

T
Threads API de Java que permite rodar os programas em mais de uma linha de execuo.

70

Linguagem e Tcnicas de Programao 01 (Java Bsico) Glossrio

Thread-safe Thread segura, ou processo seguro. Tipada Uma linguagem de programao tipada quanto existe a verificao dos tipos de dados das variveis. Tipo primitivo um tipo de varivel nativa da linguagem Java. Por exemplo: int, float, double, void, char e boolean.

W
Wrapper uma classe mapeadora, ou seja, representa um tipo primitivo como se fosse uma classe.

71

S-ar putea să vă placă și