Vous êtes sur la page 1sur 50

UNIVERSIDADE FEDERAL RURAL DE PERNAMBUCO (UFRPE)

COORDENAO GERAL DE EDUCAO A DISTNCIA (EAD/UFRPE)

Programao II

Fernando Antonio Mota Trinta

Volume 1

Recife, 2010

Universidade Federal Rural de Pernambuco Reitor: Prof. Valmar Corra de Andrade Vice-Reitor: Prof. Reginaldo Barros Pr-Reitor de Administrao: Prof. Francisco Fernando Ramos Carvalho Pr-Reitor de Extenso: Prof. Paulo Donizeti Siepierski Pr-Reitor de Pesquisa e Ps-Graduao: Prof. Fernando Jos Freire Pr-Reitor de Planejamento: Prof. Rinaldo Luiz Caraciolo Ferreira Pr-Reitora de Ensino de Graduao: Prof. Maria Jos de Sena Coordenao Geral de Ensino a Distncia: Prof Marizete Silva Santos

Produo Grfica e Editorial Capa e Editorao: Allyson Vila Nova, Rafael Lira, Italo Amorim e Glucia Fagundes Reviso Ortogrfica: Marcelo Melo Ilustraes: Allyson Vila Nova Coordenao de Produo: Marizete Silva Santos

Sumrio
Apresentao................................................................................................................. 4 Conhecendo o Volume 1 ................................................................................................ 5 Captulo 1 Introduo a Orientao a Objetos ............................................................. 7 1. Introduo ...................................................................................................................7 2. Evoluo das Linguagens de Programao ..................................................................8 3. Paradigmas de Programao .....................................................................................10 Captulo 2 Orientao a Objetos: conceitos principais ............................................... 22 1. Introduo .................................................................................................................22 2. Abstrao ...................................................................................................................23 Captulo 3 A Linguagem Java ..................................................................................... 37 1. Introduo .................................................................................................................37 2. Caractersticas da Linguagem ....................................................................................38 3. Mquina Virtual Java: o alcance de portabilidade .....................................................39 4. Codificando um primeiro programa Java ...................................................................40 5. JSDK Java Software Development Kit ......................................................................42 6. JCreator: Ambiente de programao de iniciantes ....................................................44 Conhea o Autor .......................................................................................................... 50

Apresentao
Caro(a) Cursista, Seja bem-vindo(a) ao curso de Programao II. Este curso composto por 4 volumes. Neste primeiro volume, vamos estudar a teoria e os principais conceitos relacionados ao paradigma de programao baseado em objetos. Alm de apresentar suas vantagens em relao a outros paradigmas de programao, ser tambm apresentada a linguagem de programao Java, a ser utilizada no curso para atividades prticas, como exemplos e exerccios. O segundo volume dedicado em sua totalidade sintaxe Java, seu sistema de tipos, operadores lgicos, comandos de deciso e repetio. No terceiro volume voc aprender a utilizar os conceitos de orientao a objetos utilizando a sintaxe apresentada no volume anterior. Por fim, no quarto e ltimo volume sero abordados assuntos ainda mais avanados, como a ideia de herana, polimorfismo e tratamento de excees. Bons estudos! Fernando Trinta Professor Autor

Programao II

Conhecendo o Volume 1
Neste primeiro volume, voc ir encontrar o Mdulo 1 da disciplina Programao II. Para facilitar seus estudos, veja a organizao deste primeiro mdulo.

Mdulo 1 - Uma Introduo ao Paradigma Orientado a Objetos


Carga Horria do Mdulo 1: 15 h Objetivo do Mdulo 1: Introduzir o paradigma de programao orientada a objetos, a partir de um histrico evolutivo dos paradigmas de programao, ressaltando seus benefcios em relao aos demais. Apresentar os principais conceitos do paradigma orientado a objetos. Introduzir a linguagem de programao orientada a objetos Java, que ser utilizada no curso para utilizao prtica da teoria explanada. Contedo Programtico do Mdulo 1 Introduo (Evoluo dos paradigmas computacionais. O problema da complexidade. A ideia da abstrao. Uma nova forma de encarar o problema: Objetos. Vantagens.) Conceitos Fundamentais do Paradigma OO (Objetos. Classes. Mtodos. Atributos. Mensagens. Polimorfismo. Herana.) A linguagem de Programao Java (Histrico. Estrutura do cdigo em Java. Compilao. Execuo. O mtodo main(). Escrevendo na tela. Independncia de Plataforma/Mquina Virtual. Ambientes de programao.

Programao II

Captulo 1
O que vamos estudar neste captulo?
Neste captulo, vamos estudar os seguintes temas: Introduo ao Paradigma Orientado a Objetos. Evoluo dos paradigmas computacionais. O problema da complexidade. A ideia da abstrao. Uma nova forma de encarar o problema: Objetos. Vantagens e Desvantagens do Paradigma Orientado a Objetos.

Metas
Aps o estudo deste captulo, esperamos que voc consiga: Identificar as principais caractersticas do paradigma de programao orientado a objetos. Descrever as vantagens do paradigma orientado a objetos em relao aos demais paradigmas.

Programao II

Captulo 1 Introduo a Orientao a


Objetos
Vamos conversar sobre o assunto?
Caro(a) Cursista, indiscutvel o papel que a tecnologia da informao tem hoje na sociedade moderna. Praticamente toda a economia mundial est fortemente ligada a sistemas computacionais que gerenciam bancos, sistemas comerciais, rgos pblicos, dentre outros. Voc alguma vez parou para pensar em como estes sistemas foram e continuam sendo construdos?! No?! Ento hora de voc comear a refletir sobre como se d o processo de construo dos programas que realizam boa parte dos complexos sistemas computacionais modernos. E para isto, ns vamos abordar neste volume um pouco sobre o modelo de programao mais difundido atualmente, o paradigma baseado em objetos. Vamos l?

1. Introduo
Nas ltimas dcadas, a sociedade moderna vem cada vez mais sendo influenciada por sistemas de informao baseados em computador. Desde sistemas de comrcio eletrnico, passando por jogos de computador e chegando at complexos sistemas militares, o mundo moderno cada vez mais refm da tecnologia e dos sistemas de informao. Voc consegue se imaginar em um mundo hoje sem computadores? Sem Internet? difcil de imaginar. Este parece ser um caminho sem volta que fica ainda mais visvel ao passo que nos ltimos anos tm crescido o uso de aplicaes em dispositivos mveis, como celulares, uso de novas aplicaes baseadas em tecnologias inovadoras, como GPS, dentre outros. inegvel que as possibilidades do uso de novas tecnologias so importantes facilitadores para a vida moderna, como no caso de voc querer utilizar o seu celular para, baseado na sua atual localizao, descobrir qual a farmcia mais prxima ou o melhor caminho para chegar a determinado lugar. Porm, do ponto de vista de quem constri os novos sistemas, isso tem se tornado um pesadelo, uma vez aumenta a complexidade destas aplicaes. Construir as aplicaes atuais requer uma srie de passos que ajudem a tratar a complexidade destes sistemas. Estes passos e as pessoas que so envolvidas no desenvolvimento de sistemas criaram uma disciplina, conhecida hoje como Engenharia de Software. Esta disciplina ou processo de desenvolvimento concentra as atividades de entender o que um sistema deve fazer (anlise), propor uma soluo computacional (projeto) e desenvolver esta soluo (implementar/codificar) (Figura 1). Esta ltima fase est diretamente relacionada ao tema desta disciplina: criar aplicaes a partir de uma linguagem de programao.

Figura 1 Processo Resumido de Desenvolvimento de Aplicaes

Programao II

A ideia de codificar representa uma forma de escrever por meio de uma linguagem de programao, o projeto da soluo proposta nas fases anteriores da engenharia de software. Informalmente, uma linguagem de programao pode ser definida como um conjunto limitado de instrues (vocabulrio), associado a um conjunto de regras (sintaxe) que define como as instrues podem ser associadas. Ou seja, como se pode compor os programas para a resoluo de um determinado problema. Os programas escritos em uma linguagem de programao so ento traduzidos para uma linguagem de mquina, que compreendida pelo computador. O resultado desta converso so programas executveis que realizam uma srie de aes, como solicitar dados, realizar clculos especficos ou apresentar dados para usurios. Ao longo dos anos, foram desenvolvidas (e continuam sendo) uma grande quantidade de linguagens de programao, algumas de uso mais geral e outras concebidas para reas de aplicao especficas. Porm, apesar de suas diferenas, estas linguagens so geralmente agrupadas de acordo com as caractersticas principais que indicam como um programador (quem escreve o programa) enxerga a forma de organizar os programas. As diferentes maneiras como uma linguagem organiza seus conceitos chamada de paradigma de programao. Dentre alguns dos mais conhecidos paradigmas de programao podemse citar: paradigma imperativo, paradigma estruturado e o paradigma orientado a objetos. A tabela a seguir indica o ndice de popularidade dos principais paradigmas de programao existentes:
Tabela 1 Distribuio de Paradigmas segundo ndice de popularidade [Fonte: http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html] Paradigma Orientado a Objetos Procedural Funcional Lgico Indice de Popularidade 54,6% 41,5% 2,8% 1,1%

Neste momento, caro(a) cursista, voc pode se perguntar: para que diferentes paradigmas? Para responder esta questo necessrio voltar no tempo e entender como as linguagens de programao evoluram ao longo dos anos.

2. Evoluo das Linguagens de Programao


2.1. A linguagem de mquina e a linguagem montadora
Um computador organizado em um conjunto de circuitos eletrnicos. Desta forma, seu controle feito ainda atravs de uma forma bem primitiva, baseado em um sistema binrio para representao de dados e operaes. Esta representao chamada de cdigo binrio ou linguagem de mquina, por ser compreendida e executada no hardware do computador. Esta linguagem consiste de uma grande sequncia de nmeros (1s e 0s), que instruem os computadores a realizar suas operaes mais elementares, uma de cada vez. A figura a seguir apresenta um trecho de um possvel programa em linguagem de mquina.

Programao II

Figura 2 Cdigo de Mquina

Criar programas em cdigo binrio impraticvel. Para facilitar a construo dos programas, uma nova linguagem de programao foi proposta, onde eram utilizadas abreviaes para representar as operaes elementares. As linguagens que seguiram esta estratgia foram chamadas linguagens montadoras ou assembly. Em Assembly, em vez de nmeros binrios, utiliza-se palavras abreviadas, chamadas tambm de mnemnicos, indicando a operao a ser realizada. Estas linguagens estavam mais prximas do entendimento dos humanos, e atravs de um programa chamado montador, o cdigo binrio era gerado e podia a ser executado nos computadores da poca. Abaixo so apresentados dois exemplos de instrues Assembly: MOV R1, R2 A instruo MOV (abreviatura do termo em ingls MOVE) recebe como parmetros, dois registradores: R1 e R2. Sua execuo determina a cpia do contedo de R2 para R1 (equivalente R1:=R2, sendo R1 e R2 equivalente a duas variveis); ADD R1, R2 A instruo ADD (abreviatura de ADDITION) recebe como parmetro, dois registradores como parmetros: R1 e R2. Sua execuo adiciona o contedo de R1 ao de R2 e o resultado armazenado em R1 (equivalente instruo Pascal R1:=R1+R2).

Utilizando estes comandos, os programadores utilizaram Assembly para realizar seus programas. Por exemplo, para somar dois inteiros, um programa em Assembly poderia ser escrito atravs da rotina descrita abaixo.
MOV AX,B ; registro AX recebe o valor de memria contida na varivel B ADD AX,C ; AX recebe a soma de AX (valor de B) com o valor de C MOV A,AX ; varivel A recebe valor de AX

D para verificar que o mesmo ainda est bem prximo da linguagem da mquina que do homem. Difcil de entender!? Bastante! Porm, isso na poca permitiu que se facilitasse a forma de se construir os programas de computador.

2.2. Aumentando o nvel de abstrao das linguagens


O uso dos computadores foi se popularizando. Com isso, novas aplicaes foram propostas para os computadores que surgiram. Com isso, tornou-se necessrio facilitar ainda mais a forma como os programas de computadores eram escritos. Surgiram ento as chamadas linguagens de programao de alto nvel, onde uma nica instruo poderia ser utilizada para realizar vrias operaes elementares do computador. Um programa tradutor chamado compilador transformava o cdigo em alto nvel em linguagem de mquina. Programas passaram a ser escritos em uma linguagem mais prxima da linguagem natural e utilizavam notaes matemticas semelhantes ao cotidiano das pessoas. Um programa para calcular o fatorial de um nmero poderia ser escrito como na figura a seguir.

Programao II

int fatorial(int n) { if (n == 0) return 1; else{ fat = 1; for (int i=2:i<=n){ fat = fat * i; } return fat; } } Figura 3 Trecho de um programa para clculo de um fatorial escrito na linguagem C

Se mesmo para voc esta verso em uma linguagem de alto nvel ainda seja incompreensvel, pelo menos se percebe que so utilizados menos construes para se realizar a mesma tarefa que em uma linguagem montadora. Desta forma, os programas ficaram mais fceis de serem compreendidos por ns, humanos. Isto facilitou bastante a programao e, principalmente, a manuteno e correo de erros nos programas. Vrias foram as linguagens de alto nvel propostas. Dentre algumas, pode-se citar Fortran, Pascal, Basic e C. Algumas delas so bem populares ainda hoje. O surgimento das linguagens de alto nvel auxiliou programadores a construir programas mais enxutos, mas fceis de compreender e tambm de corrigir erros... Mas onde est o conceito de paradigma nesta histria?! Vamos l ento...

3. Paradigmas de Programao
3.1. Paradigma Imperativo
Como vimos anteriormente, um paradigma de programao explica como elementos que compem um programa so organizados e interagem entre si. No caso das linguagens montadoras ou das linguagens de alto nvel, a construo dos programas realizada atravs de instrues que indicam o que o computador deve realizar. A diferena que para linguagens montadoras, o programador precisava ser muito mais detalhista que em uma linguagem de alto nvel. Um simples comando na linguagem C era equivalente a dezenas de linhas em uma linguagem de baixo nvel. Porm, a ideia era a mesma: um conjunto de instrues que ilustram uma estratgia de um ser humano em COMO resolver um problema. Esta forma de organizar os programas estabelece um primeiro paradigma de programao conhecido: o paradigma imperativo. Programar um computador neste paradigma significa dar-lhe ordens que so executadas sequencialmente. O paradigma imperativo profundamente influenciado pela arquitetura como os prprios computadores so organizados, a arquitetura de von Neumann. Neste modelo, voc deve pensar em um programa como um computador que tem memria que guarda um estado por meio de

10

Programao II

dados (variveis), e que recebe instrues que modificam e apresentam estes dados, como ilustrado na figura a seguir:

Figura 4 Modelo Imperativo de programao

Como todas as arquiteturas de computadores existentes hoje se baseiam na arquitetura de Von Neumann, os ambientes de execuo das linguagens imperativas so bastante eficientes. Porm, mesmo assim, programas escritos no paradigma imperativo ainda so muito detalhistas, o que requer um grande esforo na construo e, principalmente, na manuteno dos programas. Conforme a complexidade dos programas aumenta, a legibilidade, ou seja, a facilidade com que os programas podem ser lidos e entendidos, torna-se tambm mais difcil. Com isso, a manuteno continuou sendo um problema, e erros acabavam sendo introduzidos sem querer durante o processo de depurao (correo) de programas.

3.2. Paradigma Procedural


Uma evoluo do paradigma imperativo foi a percepo que certas sequencias de instrues que so repetidas em vrios pontos de um mesmo programa. Estes sequncias de passos poderiam ser agrupadas em procedimentos e funes (tambm chamados de subrotinas) definidas pelo programador e serem chamadas de diversos pontos do programa, como no caso de criarmos uma funo que calcule o valor do fatorial de nmero (Figura 5). Por esta caracterstica, o paradigma imperativo tambm conhecido na literatura como o paradigma procedural.

Figura 5 Paradigma Imperativo VS Paradigma Procedural

O paradigma procedural foi durante muitos anos o padro para linguagens de programao. Este paradigma acabou influenciando tambm a forma como a prpria anlise e projeto das aplicaes eram realizados. O paradigma procedural induzia que sistemas mais complexos precisavam ser quebrados em partes menores, mas fceis de lidar. Este princpio de dividir para conquistar a abordagem padro que os desenvolvedores de sistemas utilizam para lidar com sistemas complexos. No caso do paradigma procedural, o sistema era dividido em muitas funes que representavam as diversas funcionalidades que o programa tinha que fazer. Isso era

11

Programao II

repetido at se chegar a um nvel que as funes eram claras o suficiente para entender seu funcionamento, ou mesmo para serem reaproveitadas em diferentes pontos de um programa. Com procedimentos, funes menores eram mais fceis de entender, alm de facilitar eventuais correes de um programa, em caso de erros. De certa forma, esta abordagem de lidar com a complexidade tambm lida com um conceito chave para a construo de sistemas e a programao de aplicaes: a abstrao. A ideia de abstrao faz com que os desenvolvedores concentrem seus esforos no que relevante, deixando detalhes irrelevantes para serem tratados mais tarde. Abstrao dentro de um paradigma de programao indica como os problemas so encarados. Os conceitos utilizados para resolver estes problemas so as abstraes utilizadas por um paradigma. No caso do paradigma procedural, as abstraes utilizadas para decompor um problema complexo so as sub-rotinas (funes e/ou procedimentos). O uso de sub-rotinas separa dados (variveis) e operaes (procedimentos) sobre os dados, onde a ideia de funes e procedimentos manipulando um conjunto de dados surgiu como um modelo natural para representar como as aplicaes. Porm, esta abordagem tambm apresenta seus problemas. Primeiro, o caminho de execuo do programa ficou mais complexo devido chamada de funes e procedimentos em diversas partes do cdigo. A confuso de chamadas e desvios era to grande que se criou um termo especfico para os programas mal-estruturados a partir de vrias chamadas de sub-rotinas, o cdigo espaguete (Figura 6).

Figura 6 O cdigo espaguete [Fonte: http://www.yourdictionary.com/images/computer/SPAGETI.GIF]

No entanto, o maior problema est relacionado com a separao de dados e procedimentos, pois vrias partes de um mesmo programa podiam alterar os valores de variveis compartilhadas. Em muitos casos, a modificao de uma varivel por uma sub-rotina causava a falha na execuo de outra sub-rotina que dependia do valor da mesma varivel.

12

Programao II

Alm disso, como procedimentos utilizavam valores em variveis separadas, uma alterao na representao de uma varivel poderia exigir uma alterao em cascata em todas as subrotinas que dependessem deste valor. Ou seja, um pesadelo para o programador!

Figura 7 Relao entre dados e procedimentos no paradigma procedural

Vejamos isso em exemplo mais claro, como o clculo de uma folha de pagamento de uma empresa. Neste caso, os dados relativos a cada um dos funcionrios ficariam espalhados no programa. Seria necessrio recuperar estes dados para cada funcionrio obter e ento realizar o processamento do clculo da folha de pagamento (Figura 8). Este processamento seria representado por uma funo ou uma sub-rotina.

Figura 8 Clculo de uma folha de pagamento no paradigma procedural

Com o aumento da complexidade das aplicaes, o gerenciamento entre procedimentos e dados dispersos criava um pesadelo para os programadores que precisavam realizar manutenes no sistema. Modificaes em um dado poderiam desencadear um processo de atualizao em vrios procedimentos.

Figura 9 Dificuldade do gerenciamento de dados e procedimentos no paradigma procedural

Alm disso, verificou-se que ao longo dos anos, os procedimentos mudavam muito mais que os dados manipulados. Como exemplo, as regras que podem ser associadas ao clculo do salrio de um funcionrio variam muito mais que os dados do funcionrio, como seu nome ou seu cargo. Desta forma, era necessria uma nova forma de organizar os sistemas.

13

Programao II

3.3 Programao Modular e Estruturada


Para tentar melhorar as deficincias do paradigma procedural, surgiu ento a programao modular. Nesta abordagem, o programa dividido em vrios componentes ou mdulos. Ao contrrio do paradigma procedural, mdulos combinam dados e procedimentos. Um mdulo composto de dados que so manipulados pelos procedimentos deste mdulo. Cada mdulo fornece um conjunto de procedimentos para que outras partes de um programa possam acessar dados internos de um mdulo. Este conjunto de procedimentos ou funes conhecido como interface do mdulo. Desta forma, dados internos de um mdulo so protegidos contra manipulaes indevidas de outros mdulos, em um princpio conhecido como encapsulamento. Estas caractersticas trouxeram vantagens em relao aos seus predecessores. Dentre algumas, pode-se citar: Estrutura do programa fica mais clara ao agrupar funes e variveis relacionadas em um mesmo mdulo; Possibilidade de alterar mdulos separadamente. Uma vez que cada mdulo preserve sua interface visualizada por outros mdulos, modificaes internas e novos procedimentos podem ser includos; O acesso a dados internos de um mdulo feito atravs de sua interface. Com isso, tem-se um maior controle sobre operaes indevidas sobre estes dados. Por exemplo, possvel verificar se um dado pode ou no ser modificado para um determinado valor, antes de se efetivar a mudana.

Este estilo de programao tambm muito referenciada como programao estruturada, devido a uma melhor organizao dos conceitos utilizados nos programas. A programao estruturada tornou-se um sucesso e, a partir de seus conceitos, mtodos de modelagem e anlise foram propostos para facilitar o projeto das novas aplicaes que surgiam na poca em que surgiu a programao estruturada, como a Anlise Estruturada de Tom DeMarco, e a Anlise Estruturada Moderna, de Edward Yourdon. Com as ideias de mdulos, encapsulamento e interfaces, a programao modular permitiu um melhor aproveitamento e distribuio de programas. Os mdulos construdos por um programador poderiam ser reaproveitados por outros programadores, sem a necessidade de se entregar cdigo-fonte. Bastava que os programadores que desejassem utilizar um mdulo soubesse a interface deste mdulo. Imagine um mdulo como uma biblioteca de funes. Poderia haver um mdulo para fazer, por exemplo, a verificao se um CPF vlido ou no. A nica coisa que um programador precisaria saber que este mdulo possui uma funo chamada valida_cpf, que recebe como parmetro um nmero de 11 dgitos e retorna verdadeiro se este nmero representa um CPF vlido. Para os programadores que vo utilizar o mdulo, ele considerado uma caixa-preta, no sentido que no se sabe como ele funciona internamente. O importante que ele fornea o resultado que se espera dele. Porm, a programao modular tambm apresenta seus problemas. O primeiro e principal problema o fato que mdulos no eram naturalmente extensveis. Isso significava que para fazer alteraes em mdulo, era necessrio entrar no cdigo-fonte e diretamente realizar as modificaes. E em muitas situaes, se via a necessidade de criar novas funcionalidades dos programas a partir de mdulos j existentes.

14

Programao II

3.4. O Paradigma Orientado a Objetos


O termo programao orientada a objetos foi criado por Alan Kay (imagem ao lado), autor da linguagem Smalltalk. Sua proposta visa aproximar a maneira como construmos os programas de computador do mundo real. O mundo real composto por entidades que interagem, que trocam servios entre si para realizar suas tarefas. Na proposta de orientao a objetos, estas entidades so chamadas objetos. Objetos podem representar tanto entidades concretas (como uma pessoa ou um livro) quanto entidades abstratas (como uma transao bancria ou uma sesso de um usurio ao acessar um site). Para identificar objetos so empregadas tcnicas que os prprios seres humanos utilizam para organizar seus pensamentos, como classificao de elementos, diferenciao entre parte e todo, troca de mensagens, dentre outros. Alan Kay utilizou uma analogia com um sistema molecular, batizada ento de analogia biolgica. Nesta proposta, ele se questionou: como seria um sistema de computador que se organizasse como um ser vivo?. Sua proposta estabelecia que: O sistema seria organizado em clulas, onde cada clula se comportaria como uma unidade autnoma; Cada clula interagiria com outras clulas atravs do envio de mensagens para realizar um objetivo comum;

Para Kay, objetos do mundo real tambm se comportam como estas clulas. A partir de sua analogia biolgica, ele estabeleceu os princpios bsicos para a orientao a objetos. So estes: 1. Qualquer coisa um objeto; 2. Objetos realizam tarefas atravs da requisio de servios a outros objetos; 3. Cada objeto pertence a uma determinada classe. Uma classe agrupa objetos similares; 4. A classe um repositrio para comportamento associado ao objeto; 5. Classes so organizadas em hierarquias.

3.4.1. Estabelecendo um exemplo


Para melhorar sua compreenso, vamos utilizar um exemplo prtico. Imagine a situao em que um cliente chamado Ian deseja comprar uma pizza via um servio de entrega em domiclio. Ian interage com uma atendente (Maria) e faz sua solicitao. Maria por sua vez interage com Mrio, o pizzaiolo, repassando a solicitao de Ian, uma vez que quem sabe fazer a pizza Mrio, afinal ele o pizzaiolo. Aps a pizza ficar pronta, ela entregue ao Z, o motoboy, que tem por funo entregar a pizza a Ian e receber o pagamento. A Figura 10 ilustra a interao entre estes personagens.

15

Programao II

Figura 10 Um exemplo para a orientao a objetos na vida real

Embora o exemplo acima ainda possa ser refinado e inserir ainda mais participantes, ele suficiente para ilustrar os conceitos propostos pelo paradigma orientado a objetos. Primeiramente, cada elemento que participa do processo considerado um objeto. Cada objeto uma entidade nica no sistema. No caso temos Ian, Maria, Mrio e Z como objetos. No existem duas Marias. Poderiam at existir duas funcionrias com o mesmo nome, mas no seriam a mesma pessoa. Cada objeto tem dados ou propriedades que os identificam. No caso, cada pessoa no processo tem um nome. Cada objeto interage com os demais por meio da solicitao de servios. No caso, Ian solicita seu pedido atravs da atendente Maria, que lhe fornece os produtos que ela pode entregar a Ian. De forma semelhante, Maria solicita a Mrio a pizza escolhida por Ian, passando informaes necessrias para realizao deste servio, como o sabor da pizza e o tipo da borda, como ilustrado na Figura 11.

Figura 11 Solicitao de um servio atravs da troca de mensagem entre objetos

Seguindo sua anlise, cada objeto pertence a uma determinada classe que agrupa objetos similares. No nosso exemplo, a pizzaria no atende apenas ao cliente Ian. Podem existir outras dezenas de clientes que tambm podem fazer seus pedidos Pizzaria. Estes clientes possuem caractersticas comuns, como um cadastro na loja ou um endereo de

16

Programao II entrega. Obviamente, para cada cliente, os valores associados a estas propriedades so, em geral, diferentes. Estes objetos so tratados e agrupados como um tipo nico de objeto, uma classe. Neste caso, poderamos agrupar Ian, Cris e Evandro como objetos da classe Cliente, como ilustrado na Figura 12.

Figura 12 Objetos de uma mesma classe

Por fim, classes so organizadas em hierarquias. No nosso exemplo, Maria, Mrio e Z poderiam ser agrupados em uma classe que representem os funcionrios da Pizzaria (Figura 13). Estes possuem caractersticas comuns como um salrio, um horrio de trabalho. Porm, estes tambm poderiam ser classificados como pessoas, com atributos como nome, sexo, dentre outros. Neste caso, a classe Pessoa englobaria tanto funcionrios quanto clientes, indicando que existem certas propriedades comuns, como o fato de tanto clientes quanto funcionrios possurem um nome.

Figura 13 Hierarquias de classes de objetos

Mas vistos estes conceitos, em que a orientao a objetos pode melhorar a forma como programamos nossas aplicaes? Para isso, vamos pegar o exemplo do clculo de uma folha de pagamento de uma empresa, como ilustrado na Figura 14.

Figura 14 Uma folha de pagamento no modelo estruturado

17

Programao II

Relembrando: como os dados e funes so separados, calcular o custo total da folha requer que saibamos individualmente todos os dados de cada funcionrio, o que acabava por fazer com que a evoluo do sistema ficasse bastante complicada. Agora veja como seria uma possvel verso utilizando a abordagem orientada a objetos (Figura 15).

Figura 15 Uma folha de pagamento no modelo de objetos

Nesta verso, cada funcionrio representado por um objeto. Um objeto atua como um mdulo que engloba dados, e tambm fornece operaes que manipulam tais dados. Os dados internos de cada objeto so chamados atributos, enquanto as operaes que um objeto fornece so chamados de mtodos. No caso, todo objeto que representa um funcionrio possui como atributos seu nome, seu cargo, seu salrio fixo e uma srie de outros atributos que so comuns a qualquer funcionrio da empresa. Para se calcular seu salrio, cada funcionrio oferece um mtodo chamado calculaSalario, que internamente utiliza os dados de cada objeto e fornece o valor de seu salrio individual. Para calcular o custo total da folha de pagamento seria ento somar os valores obtidos pela chamada de cada mtodo calculaSalario, em cada objeto que representa um funcionrio da empresa. A orientao a objetos representa uma nova forma de enxergar e modelar o mundo como um conjunto de objetos inter-relacionados, interagindo por meio da troca de mensagens. A abstrao escolhida (objeto) combina estrutura de dados e comportamento funcional, fazendo com que os dados sejam preservados e procedimentos modificados mais facilmente, sem causar impactos to profundos quanto o paradigma estruturado. A ocorrncia de erros ou alteraes vo estar associadas a um nico mdulo ou a um pequeno grupo deles, onde mais fcil depurar e isolar erros. Esta forma de organizar os programas cria um modelo mais intuitivo e fcil de usar, mas principalmente, aumenta a possibilidade de reuso entre objetos. Objetos podem ser criados a partir de outros objetos. Por exemplo, voc poderia criar um objeto que representasse um funcionrio diferenciado, como aquele cujo salrio fosse baseado em comisses, e no em um salrio fixo. Este objeto poderia ser criado atravs de um mecanismo especial de extenso chamado Herana. Resumidamente, este novo objeto teria as mesmas caractersticas de um funcionrio comum, mas poderia ter dados a mais, assim como seus mtodos poderiam ser modificados, como no caso de seu salrio.

3.5. Programao Orientada a Objetos VS Programao Estruturada


A forma de organizar um programa usando orientao a objetos essencialmente diferente do desenvolvimento tradicional de software. Mesmo assim, alguns conceitos do modelo orientado a objetos podem ser equiparados a conceitos do modelo estruturado,

18

Programao II

como visto na figura a seguir.

Figura 16 Paradigma orientado a objeto VS Paradigma Estruturado

A programao orientada a objetos especialmente til medida que os sistemas tornam-se cada vez mais complexos, e por consequncia, seus programas ficam cada vez maiores. Grandes programas se beneficiam mais com a modularidade oferecida por objetos. Dividindo o programa em vrios mdulos independentes (objetos), aumenta-se a flexibilidade e a facilidade para manuteno do programa como um todo. Na programao estruturada, a reusabilidade limitada a trechos de algoritmos representados por meio de sub-rotinas. Na programao orientada a objeto possvel reutilizar todo um mdulo, no caso o objeto, com seus mtodos e seus atributos. Em geral, a programao orientada a objetos ainda apresenta como vantagens: cdigo mais lgico, e melhor encapsulado, uma maior facilidade de manuteno e extenso do cdigo, um melhor reaproveitamento de cdigo, dentre outros. Como desvantagens, pode-se afirmar que o aprendizado de uma linguagem orientada a objetos mais complexo, principalmente para aqueles j familiarizados com o paradigma estruturado. necessrio mudar a forma de pensar na soluo de um programa, utilizando conceitos no to simples quanto do paradigma estruturado. Por fim, dificilmente uma linguagem orientada a objetos conseguir ter um desempenho em tempo de execuo superior a linguagens no orientadas a objetos.

Exerccios

1. Com suas palavras conceitue: (a) linguagem de programao e (b) paradigma de programao. 2. Utilizando a Internet, verifique quais so os outros paradigmas de programao existentes alm dos apresentados neste captulo. Explique qual o propsito de pelo menos dois outros paradigmas. 3. Em sua opinio, ainda faz sentido hoje se programar em uma linguagem de baixo nvel como Assembly?! Justifique sua resposta. 4. Para muitos pesquisadores, o paradigma orientado a objetos apenas uma extenso do paradigma estruturado. Voc concorda ou discorda desta opinio? Justifique. 5. Utilizando a abordagem de uma programao estruturada, resolva o seguinte problema. necessrio descobrir o atleta que mais marcou gols em um campeonato de futebol. Descreva (em portugus ou em linguagem de programao que voc conhea) como seria soluo deste problema. 6. Utilizando o mesmo problema da questo anterior, como seria a soluo utilizando

19

Programao II

objetos.

Minibiografia

Edsger Wybe Dijkstra (11 de Maio de 1930 6 de Agosto de 2002) foi um pesquisador holands mundialmente conhecido por suas contribuies nas reas de desenvolvimento de algoritmos e programas de linguagens de programao. Foi o precursor da ideia contrria ao uso de comandos GOTO em linguagens de programao, um recurso muito utilizado na sua poca. Em seu artigo A Case against the GO TO Statement, Dijkstra alertou para vrios erros decorrentes do uso da declarao GOTO. Uma transcrio deste artigo pode ser visto na URL: http://www.cs.utexas. edu/~EWD/transcriptions/EWD02xx/EWD215.html. Suas pesquisas impulsionaram o surgimento da programao estruturada.Em 1972, recebeu o Prmio Turing por suas contribuies com o ALGOL e no campo de linguagens de programao.

Vamos Revisar?
Voc estudou, neste captulo, como as linguagens de programao evoluram ao longo dos anos no intuito de facilitar a vida dos programadores das aplicaes modernas. Esta evoluo foi motivada principalmente pela crescente complexidade dos programas. Com isso, as linguagens tm focado principalmente em criar abstraes que melhorem a compreenso e manuteno destes programas. Voc tambm viu que possvel classificar as linguagens em grupos que seguem o mesmo conjunto de ideias sobre a estruturao e execuo de um programa, os chamados paradigmas de programao. Desde o paradigma imperativo at o paradigma estruturado, vrios foram os avanos na estruturao dos programas, como a reutilizao atravs de sub-rotinas at o uso de mdulos autocontidos que protegem seus dados de acesso indevido. Apesar destas evolues, havia muito o que evoluir, principalmente no que diz respeito ao reuso dos programas. Para isso, uma nova abordagem de programar foi proposta: a orientao a objetos. Neste novo paradigma, programas se aproximam mais do mundo, atravs de objetos que interagem para a realizao de uma tarefa. No prximo captulo, voc ver com mais detalhes os principais conceitos deste novo paradigma.

20

Programao II

Captulo 2
O que vamos estudar neste captulo?
Neste captulo, vamos estudar os seguintes temas: Conceitos fundamentais do paradigma orientado a objetos, como: Classes, Objetos, Atributos e Mtodos. Abstrao. Encapsulamento. Polimorfismo. Herana.

Metas
Aps o estudo deste captulo, esperamos que voc consiga: Descrever os principais conceitos utilizados no paradigma orientado a objetos.

21

Programao II

Captulo 2 Orientao a Objetos:


conceitos principais
Vamos conversar sobre o assunto?
No captulo anterior, voc viu que ao longo dos anos a programao buscou uma constante evoluo no intuito de facilitar a vida dos programadores. O progresso na organizao dos programas evoluiu. Porm, os sistemas tambm ficaram cada vez mais complexos. Em particular, os paradigmas de programao at ento falhavam principalmente em relao reutilizao de cdigo. Para enfrentar este problema, um novo paradigma surgiu: a orientao a objetos. Vamos abordar neste captulo os principais conceitos relacionados a esta nova forma de organizar seus programas. Este captulo fundamental para seu bom progresso no curso. Ento, vamos aprender?

1. Introduo
Como vimos no captulo anterior, a programao orientada a objetos surgiu como uma nova abordagem para tratar a inerente complexidade dos novos sistemas. A programao orientada ao objeto (object-oriented programming) pode ser considerada como uma extenso quase natural da programao modular. Apesar de seus conceitos j terem sido estabelecidos desde a dcada de 70, apenas em meados da dcada de 90 que este paradigma comeou a ganhar maior destaque na comunidade de desenvolvimento de sistemas. Seu uso enfatizou uma ideia que at ento passava despercebida: a aproximao com o mundo real. Na programao orientada a objetos temos a necessidade de buscar as entidades de um domnio, onde atravs da qual um indivduo observa a realidade (domnio) e procura capturar sua estrutura (abstrair entidades, aes, relacionamentos) com elementos que forem considerados relevantes para a descrio desse domnio. Com as entidades de domnio identificadas, podemos utilizar as tcnicas de abstrao para a composio das classes abstratas, construindo desta maneira um sistema facilmente reutilizvel nas suas estruturas internas. A abordagem OO (orientada a objetos) enfatiza duas caractersticas: (i) reutilizao de cdigo e (ii) modularidade. Nisto, OO imbatvel quando comparada com as metodologias antigas. Em termos de modelo computacional podemos dizer que enquanto as metodologias tradicionais utilizam o conceito de um processador, uma memria e dispositivos de I/O para processar, armazenar e exibir as informaes. A orientao a objetos emprega um conceito mais real, mais concreto: o de Objeto. Porm, alm de objetos, existe uma srie de outros conceitos que so importantes para a compreenso do paradigma OO, representados na Figura 17. So eles: encapsulamento, polimorfismo, herana, composio e abstrao.

22

Programao II

Figura 17 Os pilares do paradigma orientado a objetos

Vamos dar uma olhada agora como cada um destes conceitos contribui no paradigma OO.

2. Abstrao
Abstrao considerada a habilidade de modelar caractersticas do mundo real do problema que o programador esteja tentando resolver. Ao mesmo tempo, para melhor lidar com a modelagem de problemas complexos, este processo mental indica que se deve ignorar detalhes no relevantes e focar nas caractersticas essenciais dos elementos modelados. Com isso, uma realidade complexa pode ser representada em um modelo simplificado, como os objetos no paradigma OO. A abstrao na descrio de objetos depende do ponto de vista e objetivo de quem faz a descrio. Grady Booch, um atuante e renomado pesquisador na comunidade cientfica, ilustra esta observao na sua frase: Uma abstrao depende mais do observador do que do objeto observado. Por exemplo, a viso de um apartamento por um engenheiro civil tende a ser diferente da de um decorador de ambientes. O primeiro deve se preocupar mais com os aspectos relacionados ao posicionamento de vigas de sustentao, colunas, dentre outros. J um arquiteto se preocuparia mais em como otimizar o espao, maximizar a circulao de ar, do melhor local para colocar mesas e cadeiras. Estas diferentes vises ocorrem pelo diferente interesse que os dois profissionais tem sobre a mesma entidade observada: o apartamento. O mesmo vale para a programao, pois s devemos representar nos sistemas que vamos criar, aquelas caractersticas que nos interessam dos objetos reais. Como exemplo, ao modelarmos um objeto avio no contexto de um sistema de venda de passagens areas, no vai nos interessar a caracterstica do nmero de turbinas do avio, mas sim, seu nmero de assentos disponvel. Existe uma srie de princpios que so utilizados por ns, humanos, para realizar abstraes em nosso cotidiano. Vamos ver como alguns destes princpios e como eles se aplicam no paradigma OO.

2.1. Classificao/Instanciao
Classificao um mecanismo de abstrao atravs do qual o ser humano percebe a existncia de um conjunto de fenmenos da realidade (elementos, interaes) com algumas caractersticas em comum e atribui um nome (conceito) a esse conjunto (classe) de fenmenos. J a instanciao o processo inverso classificao. Na orientao a objetos, este princpio utilizado para a identificao de classes e objetos. As duas aes possveis so: Classificar significa agrupar objetos com base em estruturas e comportamentos semelhantes;

23

Programao II

Instanciar objetos significa gerar novos exemplares a partir de uma descrio abstrata de um objeto genrico.

Vejamos o exemplo na Figura 18, que ilustra estes processos no contexto de dois estudantes, Joo e Maria. Ambos so indivduos, com seus dados particulares, como seus nomes. Porm, ambos podem ser agrupados no conjunto de indivduos que representam os estudantes.

Figura 18 Classificao/Instanciao de objetos

A semntica ou o significado do mecanismo de classificao equivale a um mecanismo de pertinncia. Neste mecanismo, o fato de um objeto pertencer a uma determinada classe pode ser melhor caracterizado se ocorrer uma relao do tipo um / uma. Por exemplo, Maria uma estudante. A partir desta abstrao, pode-se ento melhor entender os conceitos de objetos e classes, atributos e mtodos. Objetos representam entidades do mundo real, quer sejam estas concretas ou abstratas, sobre as quais so armazenados dados e temos operaes para manipul-los. Objetos tambm se caracterizam por ter uma identidade nica, um comportamento e um estado. A identificao de objeto deve ser nica, uniforme e independente do contedo do objeto. Isso implica que podem haver objetos com caractersticas semelhantes (como dois martelos azuis ou dois funcionrios com o mesmo nome), mas que so distintos. Uma classe abstrao das caractersticas mais importantes de um grupo de objetos semelhantes. Cada classe descreve um conjunto (possivelmente infinito) de objetos individuais. A partir de uma classe podem ser gerados diferentes objetos e por isso, cada objeto dito ser uma instncia de uma classe. Assim, cada instncia de uma classe tem seus prprios valores para cada dado que o caracteriza, mas tambm podem compartilhar dados e comportamento com as outras instncias da classe. Implicitamente, cada objeto contm uma referncia para sua prpria classe -- em outras palavras, ele sabe o que ele . Existe hoje uma representao bastante difundida para representar graficamente classes em um modelo orientado a objetos. Esta notao definida por uma linguagem visual chamada UML (do ingls, Unified Modeling Language). UML utilizada para representao de muitas etapas durante a anlise de um sistema. Ela formada por vrios diagramas. Um deles o diagrama de classes, em que classes so representadas graficamente. Para facilitar nossa explicao sobre os conceitos OO, utilizaremos a notao UML para descrever as classes nesta disciplina. Em UML, uma classe representada como descrito na figura a seguir.

24

Programao II

Figura 19 Notao UML para Classes

Nesta notao, h uma caixa retangular composta de trs partes. A primeira parte (localizada no topo do retngulo) define o nome da classe. Esta nica parte que deve existir na notao UML para representar uma classe. A parte intermediria diz qual a estrutura da classe. Enquanto a parte inferior informa qual o seu comportamento, atravs das aes que objetos desta classe podem realizar. Para melhor exemplificar, a classe Estudante tem como estrutura interna o nome do estudante e o curso ao qual ele est vinculado. Como aes, possvel pedir para um objeto imprimir seu nome. Cada objeto possui um conjunto de caractersticas ou informaes que os caracteriza, chamadas ento de atributos. O conjunto de atributos tambm chamado de estrutura da classe. Por exemplo, a classe Estudante pode conter como sua estrutura informaes como o nome, sexo, data de nascimento, colgio ou faculdade, dentre outros. Os atributos possuem valores, funcionando como variveis. Por exemplo, o atributo nome para um dos objetos da Figura 19 deve guardar o valor Joo. O conjunto de valores dos atributos de um determinado objeto chamado de estado. Como visto na Figura 19, atributos (se existirem) so representados na parte intermediria de uma classe em UML. O comportamento de um objeto definido atravs de seus mtodos. Mtodos definem as habilidades dos objetos. Em outras palavras, as aes que um objeto de uma classe pode realizar. comum serem chamados tambm de comportamento de uma classe de objetos. Na maioria das vezes, mtodos utilizam os atributos da classe como matriaprima para realizar suas aes, alm de tambm poderem receber parmetros, como em um procedimento tradicional. Uma classe pode ter qualquer nmero de mtodos, inclusive nenhum. Por exemplo, para uma classe carro, poderiam ser definidas aes como andar, frear, ligar o motor, dentre outras. Como visto na Figura 19, mtodos (se existirem) so representados na parte inferior de uma classe em UML. Mtodos so definidos nas classes, porm sua execuo s ocorre quando o mtodo invocado atravs do objeto. Por exemplo, pode haver uma classe que represente um automvel e dois objetos que representem dois modelos diferentes: um Fusca e uma Ferrari. A classe define um mtodo, que faz com que a velocidade do automvel seja reduzida. A utilizao de um mtodo frear() deve afetar apenas um objeto em particular. Todos os carros podem frear, mas a ao em um objeto afeta apenas o objeto em questo. Apesar da independncia de cada objeto, para que um sistema funcione necessrio que os objetos interajam. A interao entre objetos ocorre atravs da troca de mensagens. Uma mensagem representa o ato de um objeto de uma classe chamar algum mtodo que outro objeto possua, fazendo com que este comportamento seja executado. comum esta ao ser chamada de ativao ou invocao de um mtodo. Em analogia com a programao estruturada, uma mensagem pode ser vista como uma chamada a procedimento, inclusive com o retorno de um resultado a partir da execuo deste mtodo, como ilustrado na Figura 20.

25

Programao II

Figura 20 Ilustrao do envio de uma mensagem para um objeto

Para um objeto invocar um mtodo em outro objeto necessrio que obtenha uma referencia ao objeto-alvo. Como cada objeto precisa ser identificado de forma unvoca (ou seja, de forma exclusiva), faz-se ento necessrio definir um identificador para cada objeto. Tome como exemplo a Figura 21. A classe Estudante define as caractersticas gerais de um aluno. O mtodo imprimirNome() definido para apresentar tanto o nome do aluno, quanto seu curso.

Figura 21 Referncias para objetos

Existem dois objetos que representam dois alunos distintos. Para isso, cada objeto tem um identificador nico. Para o aluno cujo nome Fernando, o identificador do objeto aluno1, enquanto para o outro aluno, aluno2. Para se mandar uma mensagem para um dos objetos utiliza-se a chamada sintaxe do ponto (dot syntax). Esta sintaxe indica que o acesso a um atributo ou mtodo de um objeto deve ser feita utilizando a forma objeto.mtodo ou objeto.atributo. No nosso exemplo, para chamar o mtodo imprimirNome no objeto aluno1, deve ser utilizada a notao aluno1.imprimirNome(). Dessa forma, representa-se a ativao de uma mensagem neste objeto.

2.2. Agregao/Composio
A ideia de agregao ou composio estabelece a criao de novas classes de objetos a partir da juno de classes j existentes. Essa ideia de composio muito comum para se representar relaes do tipo todo-parte, como no caso de uma turma ser composta por instncias de outras classes, como um professor, um conjunto de alunos, dentre outros. Da mesma forma que a classificao/instanciao so processos inversos, para a composio de classes so definidas duas operaes diferentes:

26

Programao II

Operao de Agregao: Quando unimos um conjunto de objetos para formarmos um novo objeto; Operao de Decomposio: Quando, analisando um objeto, isolamos cada um de seus componentes. Veja o seguinte exemplo:

Figura 22 Agregao/Decomposio

Neste exemplo, a classe Automvel pode ser decomposta nas classes Placa e Motor. Este processo, chamado de decomposio, realiza uma anlise sobre a classe Automvel e aplica um refinamento. Refinar significa deixar ainda mais claro a estrutura de um determinado conceito. O processo inverso faz uma sntese de conceitos j existentes para criar um novo conceito. H uma notao especial em UML para representar agregao, como ilustrado e exemplificado na Figura 23. Um losango vazado anexado extremidade de um caminho de associao ao lado do agregado (o todo) para indicar agregao.

Figura 23 Notao UML para agregao; Tipos de Agregao

H uma distino entre dois tipos de agregao: a agregao compartilhada e a composio. No primeiro tipo, representado pela ideia de uma disciplina que contem um

27

Programao II

professor e uma sala vinculada, objetos contidos podem existir sem serem parte do objeto que os contm. Em outras palavras, um professor continuar a existir, mesmo que no haja o conceito Disciplina. No caso da composio, objetos contidos no fazem sentido fora do contexto do objeto que os contm. No exemplo apresentado, um pedido contem itens e um Cliente vinculado. Se voc destruir o pedido, os itens so destrudos junto, pois eles no tem sentido fora do pedido. Neste caso, o losango anexado extremidade da classe agregadora deve ser preenchido, e no vazado.

2.3. Associaes Simples


As entidades envolvidas apresentam existncias independentes, mas existe uma ligao entre elas. A agregao no nica forma de relacionamento entre objetos e classes. Classes e objetos podem formar associaes, que consistem na descrio genrica de uma ou mais ligaes entre as classes, permitindo que objetos de uma classe utilizem recursos de outros objetos. Ao se estabelecer associaes entre classes, em geral se estabelece o significado de uma classe usar ou possuir outra. Para representar associaes entre classes, UML utiliza uma linha unindo as duas classes. Alguns exemplos de associaes so descritas abaixo.

Figura 24 Associaes entre classes

Nos exemplos acima, temos que um cliente est vinculado a um produto, e vice-versa. Uma conta possui um histrico de transaes. Um hspede est vinculado um quarto. Associaes podem ainda ser refinadas inserindo a multiplicidade nos relacionamentos entre classes. Por exemplo, um nico cliente pode estar vinculado a zero ou mais (sem limites) pedidos. Um velocista pode participar de zero ou mais corridas, e uma corrida deve ter no mnimo dois e no mximo seis velocistas.

2.4. Encapsulamento
Um dos aspectos mais positivos da programao modular foi a ideia de encapsulamento de informaes. A programao orientada a objetos preserva este conceito. Encapsular dados em OO consiste em separar os aspectos externos de um objeto, os quais so acessveis a outros objetos, dos detalhes internos de implementao do objeto, os quais permanecem escondidos dos outros objetos. O uso de encapsulamento evita que objetos possuam grandes dependncias entre si, de modo que uma simples mudana em um objeto possa trazer grandes efeitos colaterais e problemas para outros objetos. Como vimos no captulo I, o conceito de encapsulamento no exclusivo da abordagem de orientao a objetos. Entretanto, a habilidade de se combinar estrutura de dados e comportamento em uma nica entidade torna o encapsulamento mais elegante e mais poderoso do que em linguagens convencionais que separam estruturas de dados e comportamento.

28

Programao II

No paradigma OO, o encapsulamento institui conceitos e regras que ajudam a promover a modularidade entre objetos. Para isso, o acesso a componentes de um objeto controlado e, especialmente, os atributos de um objeto s devem ser modificados pelos mtodos do prprio objeto. Veja como isso ajuda a proteger um programa. Imagine a classe Conta que representa uma conta corrente, cujos atributos so seu nmero e seu saldo na Figura 25.

Figura 25 O benefcio do encapsulamento

De acordo com projeto, o saldo de uma conta no pode ser menor que zero. Mas da forma como at agora conhecemos classes, o acesso a atributos e mtodos liberado. Logo, qualquer objeto poderia ter o atributo saldo acessado diretamente, e modificado para um valor invlido, como representado no exemplo. Para sanar este problema, linguagens orientadas a objetos oferecem mecanismo que modificam a visibilidade (escopo) de atributos e mtodos. possvel ento estabelecer que todos os atributos de uma classe s possam ser acessados de mtodos definidos dentro da prpria classe. dito ento que o escopo deste mtodo privado sua classe. No nosso exemplo, a modificao do saldo de uma conta s poder ser feita atravs do mtodo debitar(valor) que internamente estabelece regras que no permitem que o saldo da conta fique negativo. A ideia do encapsulamento faz tambm com que o sistema no dependa das implementaes internas das classes, mas sim de suas interfaces. A interface de um objeto representada pelo conjunto de todos os mtodos que este objeto oferece a outros objetos. A interface de um objeto que externamente visvel, e que protege dados internos, alm de outras operaes que no devem ser disponibilizadas ao mundo externo. Imagine uma classe que represente o conceito de uma coleo de pessoas, e que fornea mtodos para manipular esta coleo, como inserir uma pessoa, consultar uma pessoa pelo nome, etc. Internamente, esta classe poderia utilizar diferentes estruturas para guardar a coleo de pessoas, como um vetor, uma lista dinmica ou mesmo um banco de dados. Porm, para quem vai utilizar algum objeto desta classe, isso no importa. O que importa que exista um mtodo para inserir, outro para consultar, e assim por diante. Desta forma, alteraes dentro da classe no afetaro o restante do sistema. Por exemplo, podese trocar a implementao interna da classe, mudando de um vetor para o banco de dados. Se a interface for mantida, os objetos que usam no sofreram nenhum impacto, o que torna a manuteno mais fcil. Por estes motivos, na orientao a objetos muita utilizada a expresso programar

29

Programao II

para a interface. Esta expresso indica a ideia que a interface de um objeto representa um contrato entre uma classe de objetos. Enquanto o contrato for mantido, objetos que dependam dos mtodos de uma classe no sero prejudicados.

2.5. Generalizao/Especializao (Herana)


Generalizao e especializao so abstraes que permitem o reuso de objetos atravs da criao de classes de objetos a partir de outras classes. No caso, a especializao o mecanismo pelo qual pode-se definir uma nova classe de objetos a partir de uma classe j existente. Esta nova classe poder aproveitar o comportamento e possveis atributos da classe estendida. A classe sendo refinada chamada de superclasse ou classe base, enquanto que a verso refinada da classe chamada uma subclasse ou classe derivada. A generalizao o inverso da especializao. A Figura 26 ilustra esta relao:

Figura 26 Generalizao/Especializao, a base para a Herana entre classes

Neste exemplo, a superclasse Estudante refinada em dois tipos mais especficos, os de graduao e os de ps-graduao. Diz-se que cada classe derivada herda as caractersticas de sua classe base. Por conta disso mais comum essa abstrao serem tratadas em linguagens de programao orientadas a objetos como Herana. No nosso exemplo, a classe Estudante poderia ter como atributos: nome ou instituio vinculada, estes tambm so atributos de estudantes de graduao ou ps-graduao. Cada classe derivada no apenas herda as caractersticas de seu ancestral como tambm pode acrescentar seus atributos e operaes especficos, como o curso para o Estudante de Graduao. Em UML, a notao para generalizao representada por uma associao entre superclasse e subclasses, onde um tringulo posto na extremidade prxima superclasse (Figura 27).

30

Programao II

Figura 27 Representao UML para Herana; Exemplo para uma hierarquia de classes

importante salientar que a herana no vale apenas para dados, mas tambm para mtodos. No mesmo exemplo, a classe Estudante define um mtodo imprimeDados. Portanto, as subclasses da classe Estudante tambm herdam este comportamento. Com isto, embora o mtodo no seja definido na classe EstudanteGraduao ou EstudantePos, qualquer objeto de uma destas duas classes pode ter o mtodo imprimeDados sendo invocado. A correta chamada de mtodos ou o acesso a atributos em classes que possuam uma relao de herana ocorre atravs da busca nas classes que participam da hierarquia. Exemplificando: quando um mtodo chamado em um objeto de uma classe, a especificao deste mtodo procurada na classe deste objeto. Se este mtodo no encontrado, busca-se ento na definio de sua superclasse, e assim por diante, pois uma hierarquia de herana pode ser formada por vrias classes, recursivamente aplicada a um nmero arbitrrio de nveis. A Figura 28 exemplifica uma relao de herana em mais de um nvel.

Figura 28 Mltiplos nveis de herana

31

Programao II

Neste exemplo, o Estudante de Graduao alm do curso, possui tambm como atributos herdados a matricula (da classe Estudante) e o nome (da classe Pessoa). Uma subclasse pode tambm sobrepor uma caracterstica de sua superclasse, o que significa que a nova caracterstica local subclasse ir substituir a caracterstica de sua superclasse. Neste caso, esta ao chamada de sobreposio. Ainda no exemplo anterior, a classe Estudante sobrepe o mtodo imprimeDados da classe Pessoa. Em outras palavras, a execuo deste mtodo em objetos da classe Estudante obedecer a esta nova definio. Note que esta alterao tambm afeta objetos das classes EstudanteGraduao e EstudantePos. Objetos dos tipos Pessoa e Empregado executam a definio original do mtodo. A definio e uso de herana traz consigo tambm um princpio muito importante para a orientao a objetos que o princpio da substituio. Este princpio se baseia no fato que, se uma subclasse herda mtodos e atributos de sua superclasse, em qualquer lugar de um programa que voc possa utilizar uma instncia de superclasse, voc tambm deve poder utilizar uma instncia de qualquer subclasse desta classe. Embora parea complicado, imagine um programa que faz uma chamada ao mtodo imprimeDados de um objeto Pessoa, de acordo com a hierarquia de classes da Figura 27. Pelo princpio da substituio, voc pode substituir este objeto Pessoa por qualquer outro objeto que seja instncia de alguma subclasse de Pessoa, como Estudante, Empregado, EstudantePos ou EstudanteGraduo. Como todos eles vo possuir o mtodo imprimeDados, o programa vai continuar a funcionar sem problemas. Este princpio muito til para facilitar a extenso de programas.

Herana Simples e Herana Mltipla


A herana pode ser de dois tipos: Simples e Mltipla. A herana simples quando uma classe subclasse de somente uma superclasse, enquanto a herana mltipla ocorre quando uma classe subclasse de vrias superclasses e, consequentemente, herda as caractersticas de cada uma delas. Os exemplos que vimos at agora foram todos de herana simples. A Figura 29 apresenta um exemplo de uma herana mltipla.

Figura 29 Exemplo de Herana Mltipla

Neste caso, note que a classe VeiculoAnfibio possui duas superclasses, Carro e Barco. Desta forma, ela herda mtodos e atributos destas duas classes. Herana mltipla no se limita a apenas duas classes, de acordo com o contexto do mundo que se queira modelar. Porm, a herana mltipla traz um problema: o conflito de atributos ou mtodos herdados das superclasses. Em nosso exemplo, note que tanto Carro quanto Barco possuem um mtodo parar. Imagine ento o que aconteceria se fosse feita uma chamada ao mtodo parar em um objeto do tipo VeiculoAnfibio. Qual implementao de parar deveria ser chamada?

32

Programao II

Por conta dessa e de outras questes, a Herana Mltipla no implementada em todas linguagens de programao, como no caso de Java. Porm, pode ser encontrada em outras linguagens como C++ e SmallTalk.

2.6. Polimorfismo
O termo polimorfismo originrio do grego, e etimologicamente quer dizer muitas formas. Na orientao a objetos, isso significa que um mesmo tipo de objeto, sob certas condies, pode realizar aes diferentes ao receber uma mesma mensagem. Ou seja, objetos podem ter reaes diferentes ao mesmo estmulo (Figura 30).

Figura 30 Polimorfismo: Objetos tm diferentes reaes a um mesmo estmulo

Polimorfismo permite o envio de uma mesma mensagem a objetos distintos, onde cada objeto responde da maneira mais apropriada para a classe chamadora. No exemplo da Figura 30, a mesma mensagem desenhar pode ser enviada a trs objetos distintos: o quadrado, o crculo e o tringulo. Os trs sabem como tratar esta mensagem, porm cada um realizar aes diferentes. Existem dois tipos principais de polimorfismo: a sobrecarga e a sobreposio. Na sobrecarga, uma mesma classe de objetos possui mtodos com o mesmo nome, porm quantidade ou tipo de parmetros diferentes. No momento da chamada do mtodo, dependendo do parmetro, um mtodo ou outro ser chamado. Por exemplo, a classe Pessoa (Figura 31) possui dois mtodos imprimir. O primeiro recebe apenas um parmetro, enquanto o segundo recebe dois.

Figura 31 Sobrecarga de mtodos

J a sobreposio ocorre somente associada herana. Quando um mtodo definido na superclasse no serve da forma original para a subclasse, ele tem de ser redefinido. Como na redefinio a assinatura deve ser mantida, o novo mtodo sobrepe o mtodo definido na superclasse. Veja como exemplo a Figura 32. Existem dois tipos de Funcionrio: o que recebe um salrio fixo (Empregado) e outro cujo salrio calculado de acordo com suas vendas

33

Programao II

(EmpregadoComisso). O segundo tipo tem as mesmas caractersticas do primeiro, portanto convm que se utilize herana para reaproveitar seus dados. Porm, o calculo de seu salrio totalmente diferente. Neste caso, a subclasse modifica (sobrepe) o comportamento do mtodo que calcula o salrio para a classe EmpregadoComisso.

Figura 32 Sobreposio de mtodos

Neste caso, quando um objeto for do tipo Empregado, o calculo do salrio obedecer a regra definida na superclasse. Mas quando o objeto for do tipo EmpregadoComisso, a regra utilizada aquela que foi redefinida nesta classe. Em resumo: O mtodo a ser chamado aquele pertencente ao objeto o qual a chamada est relacionada; Caso o objeto no possua este mtodo, a chamada transferida para a superclasse, e assim por diante at que o mtodo seja encontrado;

Porm, ao contrrio da sobreposio, mtodos sobrepostos na subclasse precisam ter a mesma assinatura de seus equivalentes na superclasse. Em outras palavras, precisam ter o mesmo nome; o mesmo nmero de parmetros e o mesmo tipo de parmetros de entrada e sada.

Exerccios

1. No contexto da programao orientada a objetos, o que um objeto? 2. No contexto da programao orientada a objetos, o que uma classe? Diga tambm o que so mtodos e variveis de instncia. 3. Indique qual o principal benefcio obtido quando os atributos de uma classe no so visveis a outras classes? Qual o nome desta tcnica de programao? 4. Explique o que o relacionamento de herana entre classes. 5. Para voc, qual o benefcio do polimorfismo no paradigma orientado a objetos? 6. Utilizando orientao a objetos, indique quais seriam as classes, seus atributos, mtodos e associaes para os seguintes sistemas: a) Uma universidade; b) Um acervo de mdias (CDs e DVDs) c) Um filme.

34

Programao II

Vamos Revisar?
Neste captulo, voc foi apresentado a uma nova forma de organizar os conceitos para criao de programas de computador. A orientao a objetos baseia-se em uma aproximao da forma como os seres humanos organizam e realizam aes no mundo real. Para isso, novas abstraes como classificao, agregao, associao, dentre outras so fundamentais para que os programas sejam organizados de forma a permitir um maior reuso de cdigo e maior flexibilidade de manuteno. Conceitos como classes, objetos, mtodos e atributos so fundamentais em linguagens orientadas a objetos, vo fazer parte do dia a dia deste curso. A partir deles, conceitos mais avanados como herana e polimorfismo so gerados, e sero mais detalhados adiante nesta disciplina. Por enquanto, importante que os conceitos deste captulo seja amadurecidos em sua cabea.

35

Programao II

Captulo 3
O que vamos estudar neste captulo?
Neste captulo, vamos estudar os seguintes temas: Linguagem de Programao Java Java Software Development Kit JSDK O ambiente de programao JCreator

Metas
Aps o estudo deste captulo, esperamos que voc consiga: Identificar as principais caractersticas da Linguagem Java; Instalar e configurar o Kit de desenvolvimento necessrio para compilar e executar seus programas em Java; Instalar o ambiente de programao JCreator;

36

Programao II

Captulo 3 A Linguagem Java


Vamos conversar sobre o assunto?
Nos captulos iniciais deste volume voc aprendeu sobre a necessidade de melhorar a forma como organizamos os conceitos em linguagens de programao e como a orientao a objetos busca melhorar o reuso e a manuteno de programas. Bem, at agora, tudo foi bastante terico. Ento chegou a hora de comearmos a ver como na prtica isso tudo funciona. Para isto, este captulo introduz a linguagem de programao orientada a objetos mais popular no mundo: Java.

1. Introduo
Voc Sabia?
A linguagem de programao Java tem origem no incio da dcada de 90, dentro da Sun Microsystems. Na poca, uma equipe liderada por Patrick Naughton, Mike Sheridan, e James Gosling tinha como objetivo projetar uma nova linguagem de programao capaz de criar softwares capazes de comunicar diferentes dispositivos entre si. Originalmente, batizou-se esta linguagem de Oak (carvalho, em ingls), em homenagem a um espcie de rvore que os integrantes do projeto avistavam de sua sala. Inicialmente a proposta de interoperabilidade de programas no foi muito bem aceita pelo mercado, o que ento fez com os objetivos fossem modificados. Na poca, o uso da Internet estava crescendo vertiginosamente. Foi ento que a Sun viu nesta expanso uma oportunidade de usar Oak. A linguagem passaria ento a ser voltada para construir aplicaes para Web. A linguagem foi rebatizada e passou a se chamar Java, sendo apresentada oficialmente em 1995. Desde ento, Java foi rapidamente adotada pelo mundo, mais rapidamente que qualquer outra linguagem de programao at ento. Grandes fornecedores de tecnologia como IBM, Oracle, Netscape, dentre outros, passaram a apoiar Java. A linguagem evoluiu muito ao longo dos anos. Hoje, mas que uma linguagem, Java pode ser vista como uma plataforma de desenvolvimento e execuo de programas em diversas plataformas. Voc encontra programas Java na Web, dos telefones celulares, mainframes, cartes inteligentes, dentre outros. Com isso, a linguagem dividida em 3 grandes segmentos: 1. JEE (Java Enterprise Edition): indicado para aplicaes coorporativas, com necessidade gerenciamento de transaes, balanceamento de carga, concorrncia, dentre outros; 2. JSE (Java Standar Editon): o ambiente de desenvolvimento mais utilizado. Isso porque seu uso voltado a PCs e servidores, onde h bem mais necessidade de aplicaes; 3. JME (Java Micro Edition): o ambiente de desenvolvimento para dispositivos mveis ou portteis, como telefones celulares e palmtops. Hoje, estima-se que haja uma comunidade de mais de quatro milhes de
Voc sabia que a linguagem Java tem esse nome devido a um caf? Durante o projeto os participantes tomava muito caf, e gostavam principalmente de um proveniente da ilha de Java. No meio do projeto Green, os projetistas foram avisados que j havia uma linguagem com o nome de oak, que inicialmente era o escolhido. Com isso, os projetistas resolveram homenagear a ilha que produzia o caf to apreciado por todos.

37

Programao II

programadores Java no mundo. Existem tambm grupos de usurios Java, chamados JUGs (Java User Groups), que so utilizados para troca de ideias, dvidas e melhores prticas no uso da tecnologia Java. No Brasil, existem vrios, como o DF-JUG (de Braslia) ou CE- JUG(do Cear). Existem diversos livros publicados sobre a linguagem, alm de diversos ambientes de programao e desenvolvimento.

2. Caractersticas da Linguagem
Durante seu projeto, a linguagem Java teve uma srie de requisitos que podem se apontados como fatores de seu sucesso. 1. Java orientada a objetos: Java foi baseada no modelo de outras linguagens de programao OO, no caso, Simula67 e SmallTalk. Com isso, os conceitos de herana, polimorfismo e encapsulamento so implementados pela linguagem. A sintaxe e seu sistema de tipos bem parecido com C e C++, o que facilitou a migrao de programao de programadores j acostumados com estas linguagens; 2. Java portvel: Este conceito indica que um mesmo programa escrito em Java pode ser executado em diferentes plataformas hardware ou sistema, sem grandes ou nenhuma mudanas. Por conta desta caracterstica, comum se associar a Java o seguinte jargo: escreva uma vez, execute em qualquer lugar; 3. Java segura, confivel e robusta: Ao contrrio de suas predecessoras, Java no trabalha com ponteiros. Em outras palavras, um programador Java no tem acesso direto a posies de memria, um dos grandes problemas para quem trabalha com linguagens como C ou C++. Java possui um mecanismo de tratamento de excees em que os erros que possam vir a ocorrer durante operaes efetuadas so tratadas paralelamente em outro trecho de cdigo do sistema. Um erro que durante a execuo do programa poder ser capturado sem imprevistos como, por exemplo, acessos invlidos de memria do sistema operacional, ou do gerenciador de arquivos, que podem acarretar problemas como o travamento, desligamento do computador e perda de arquivos significativos; 4. Java promove reuso e facilita a manutenabilidade: Java possibilita a criao de componentes reutilizveis, ou seja, uma vez criadas funcionalidades para os mesmos, estes podero ser reutilizveis posteriormente. Com isso proporcionado um baixo custo de produo e manuteno de cdigos gerados com os demais sistemas que venham a ser desenvolvidos; 5. Java distribuda: Java possui a capacidade de compartilhamento de informaes possibilitando a distribuio de tal forma que haja processamento em mquinas distintas. Possui integrao com o protocolo TCP/IP que facilita a programao para acessos remotos, utilizando protocolos como: HTTP e FTP; 6. Java permite a carga dinmica de aplicaes: Java oferece o recurso de que aplicaes chamadas applets possam ser carregadas remotamente e executadas no contexto de um browser, ao ler uma pgina na Web. Ao fazer isso, Java introduziu a interatividade na Web, permitindo que aplicaes pudessem ser descarregadas e utilizadas automaticamente por usurios, sem necessidade de instalao, ou atualizaes de verses. Ao mesmo tempo, applets possuem um criterioso modelo de segurana que previne o acesso de aplicaes remotas a possveis aes danosas no computador do usurio que rode um applet; 7. Java livre e gratuita: Voc no paga nada para criar um programa em Java. O software para execuo e construo de programas disponibilizado gratuitamente

38

Programao II

na Internet. Alm disso, existem vrios ambientes gratuitos para facilitar a construo e depurao de programas Java.

3. Mquina Virtual Java: o alcance de portabilidade


Uma das caractersticas mais importantes da linguagem Java a portabilidade. Para isto, Java promove o conceito que nada na linguagem deve ser especfico de uma plataforma especfica. O que na realidade Java faz, criar a ideia de um computador abstrato sobre o qual o programa deve ser executado. Esse computador abstrato chamado de mquina virtual Java (JVM). Na realidade, a mquina virtual Java uma especificao fornecida a incio pela Sun, e seu funcionamento une a ideia de compilao e interpretao de programas. Vamos ver como isso funciona. Para criar um programa Java precisamos criar sua especificao atravs da sintaxe da linguagem. Como em praticamente toda linguagem de programao isso feito atravs da edio de um arquivo texto. A partir de um programa escrito corretamente, a etapa que segue a compilao do programa para gerao de sua verso executvel. Aqui vem uma grande diferena. Em vez de gerar um arquivo executvel que voltado para um computador ou sistema operacional especfico, Java gera uma verso intermediria do programa, o bytecode. O bytecode um arquivo neutro e independente de plataforma. Ele representa o programa executvel e livre de erros, como uma linguagem de mquina destinada a um processador virtual especificado pela mquina virtual Java. Desta forma, qualquer implementao de uma mquina virtual Java deve ser capaz de executar este programa. O que de fato acontece, pois hoje existem implementaes da mquina virtual Java para as mais diversas plataformas, como Windows, Linux, MacOS, dentre outros (Figura 33).

Figura 33 O processo de compilao e execuo de um programa Java

A JVM utiliza o mecanismo de interpretao para executar os bytecodes que correspondem ao programa originalmente escrito pelo programador. O uso de uma mquina virtual acarreta em um tempo a mais na execuo do programa, o que indica que programas escritos em Java tendem a ser mais lentos que programas equivalentes escritos em C ou C++. Porm, a facilidade na migrao de um sistema entre diferentes plataformas um requisito cada vez mais importante na construo das aplicaes modernas. Ou seja, um benefcio que se paga. Alm disso, as atuais implementaes de JVM fazem uma srie de otimizaes que diminuem a diferena em relao execuo de um programa Java e programas compilados diretamente para uma plataforma especfica.

39

Programao II

4. Codificando um primeiro programa Java


Uma forma muito utilizada para promover a familiarizao com uma nova linguagem a criao de um programa simples que apresenta uma mensagem na tela. Vamos aqui tambm utilizar esta estratgia. Para isso, vamos utilizar um editor de textos plano (o bloco de notas, por exemplo) para editar nosso programa. Um programa em Java um arquivo texto, que por padro, possui a extenso .java. A Figura 34 apresenta o programa AloMundo.java, que ser utilizado para nosso primeiro contato com a linguagem.

Figura 34 Programa AloMundo.java

Digite este programa e grave o arquivo em um diretrio de seu computador. No meu caso, eu criei um diretrio c:\Java e utilizarei o mesmo em meus exemplos. Vamos ento analisar este programa. Importante: Java faz diferenciao entre letras minsculas e maisculas. Portanto, ao digitar o programa AloMundo, faa-o mantendo o mesmo padro em relao ao texto apresentado neste captulo, inclusive para o nome do arquivo AloMundo.java. A primeira linha marca o incio da declarao de uma classe em Java. Em Java, tudo uma classe. Como visto no captulo anterior, classes so utilizadas para criar objetos. Ento, a definio de uma classe em Java utiliza a palavra reservada class. Associada definio da classe, temos outra palavra reservada: public. Esta palavra reservada um qualificador, que no caso indica a visibilidade da classe, e que ser detalhada mais adiante no curso. Por enquanto, guarde apenas na cabea que a definio de uma classe segue este padro: public class <NOME_DA_CLASSE>. Seguido a definio da classe, vem a definio do corpo da classe. Java segue um padro em que existem blocos que agrupam trechos de cdigo e limitam o escopo de variveis. Todo bloco em Java limitado por chaves ({ e}). No nosso exemplo, as chaves que limitam o bloco da classe esto nas linhas 1 e 7. O corpo da classe AloMundo extremamente simples. Existe apenas um mtodo:
public static void main(String args[]){ System.out.println(Al mundo!!!); }

Este mtodo representa o ponto de entrada da classe. De forma anloga com C, este mtodo aquele que executado quando pedimos para o interpretador Java executar

40

Programao II

a classe. A partir deste ponto, outros mtodos podem ser chamados, objetos podem ser criados, etc. Vamos analisar um pouco mais a fundo a assinatura deste mtodo.
Assim como para a classe, deve-se declarar a visibilidade do mtodo. Neste caso, a ideia que qualquer classe pode executar este mtodo. um outro qualificador, que indica que o mtodo deve ser compartilhado por todos os objetos que so criados a partir desta classe. Os mtodos static podem ser invocados, mesmo quando no foi criado nenhum objeto para a classe. Detalhes static sobre mtodos estticos sero vistos posteriormente no curso. Por hora, voc precisa saber que particularmente o mtodo main precisa ter essa qualificao porque ele chamado sem que se crie nenhum objeto de sua classe (a classe AloMundo). o valor de retorno da funo, quando a funo no retorna nenhum valor ela void retorna void. Vamos ver no curso que mtodos, assim como funes podem retornar valores como nmeros, palavras, vetores e, claro, objetos. Toda classe em Java deve conter mtodos. Porm, existe um mtodo que torna main uma classe um programa executvel. Este mtodo chamado de mtodo principal (main). Este um nome particular de mtodo que indica para o compilador o incio do programa. (String args[]) o argumento de main e por consequncia do programa todo, ele um vetor (array) de Strings que formado quando so passados ou no argumentos atravs da invocao do nome do programa na linha de comando do sistema operacional.

public

Ento, resumindo: Toda classe que quiser executar aes deve fornecer um mtodo com a assinatura:
public static void main(String args[])

A partir da, como em todo programa, seguem-se as instrues. No nosso caso, temos uma nica instruo:
System.out.println(Alo Mundo!);

Esta instruo representa a maneia mais simples de imprimir mensagens na tela de seu computador. Como dito anteriormente, tudo em Java representado atravs de classes e objetos. Esta instruo acima tambm segue este padro. System o nome de uma classe fornecida pela linguagem Java e que representa o sistema onde o programa est sendo executado. Esta classe possui uma srie de atributos e mtodos. Um destes atributos out. Este atributo representa a sada padro do sistema, no caso, a tela. Na realidade, out um objeto de outra classe (PrintStream), que permite escrever mensagens atravs de seus mtodos. Dentre os vrios mtodos fornecidos, existe o println, que imprime a String passada como parmentro e e posiciona o cursor na linha abaixo. Analogamente, existe tambm o mtodo print que no avana linha. Por hora voc pode guardar esta linha de cdigo como o comando para imprimir mensagens na tela, onde o argumento que vem entre aspas a String a ser impressa. O ; ponto e vrgula separa os comandos, sendo portanto obrigatrio para encerrar cada instruo. Visto isso, vamos ver como este programa deve ser executado.

41

Programao II

5. JSDK Java Software Development Kit


Bem, visto a definio de um programa simples em Java, vamos aos prximos passos, que seriam sua compilao e posterior execuo. Para, precisamos ento ter acesso s ferramentas que permitam a realizao destes passos. Formalmente, a linguagem tem padronizada a sua especificao, mas no a implementao das ferramentas necessrias execuo de seus programas. No entanto, a Sun fornece uma implementao de referncia, assim como uma srie de programas utilitrios para a plataforma Java. Este conjunto chamado de JDSK (Java Software Development Kit) est disponvel gratuitamente no site da Sun (http://java.sun.com). O JSDK ou simplesmente JDK possui verses para diferentes plataformas, como Windows ou Linux. Logo, a primeira coisa que voc precisar fazer baixar a verso correta para a sua plataforma (no caso, sistema operacional). Neste texto, eu utilizo a verso do JDK para Windows 7. Aps instalar, criada uma estrutura de diretrios semelhante descrita na Figura 35, onde o nome do diretrio jdk1.X varia de acordo com a verso a ser instalada. Nesta estrutura destaca-se o diretrio bin, que guarda a principais ferramentas necessrias para execuo e compilao dos programas. Portanto, extremante recomendvel que voc inclua este diretrio no caminho de busca da execuo de programas em seu sistema operacional. Para isto, basta atualizar a varivel PATH, fazendo ela tambm apontar para este diretrio.

Figura 35 Estrutura de diretrios do JSDK

Todas as ferramentas fornecidas no JSDK atravs de linhas de comando. Ou seja, para execut-las, basta abrir um prompt de comando e chamar a ferramenta. Dentre as ferramentas fornecidas, existem aquelas que so indispensveis execuo dos programas, e outras que tem um grau de importncia menor. Dentre estas destacam-se o compilador javac e o interpretador java. O compilador javac o responsvel pela gerao dos bytecodes a partir de um programa fonte em java. Para ser utilizado, a forma mais simples utilizando a sintaxe:
javac <opes> NOME_CLASSE

Para o nosso exemplo, dentro do diretrio onde se encontra a classe, basta digitar este comando, que ser gerada uma verso bytecode do programa AloMundo.java. Os arquivos bytecode tem o mesmo nome da classe, porm com a extenso .class. A Figura 36 mostra o processo de compilao e o arquivo gerado para o programa AloMundo.

42

Programao II

Figura 36 Compilao de um programa Java

importante dizer que se uma classe faz referncia a outra classe, as duas so compiladas. Se no mesmo diretrio houver mais classes e quisermos compilar todas, possvel utilizarmos mascaras. Por exemplo, para compilar todas a classes, utilizaramos a sintaxe:
javac *.java

possvel tambm por uma questo de organizao, separar os arquivos bytecode dos arquivos fonte. Para isto, pode-se utilizar a opo d pode ser utilizado para especificar uma localizao diferente para armazenar o arquivo .class gerado aps a compilao:
javac AloMundo.java d c:\Java\bytecode

Uma vez gerado o bytecode, segue-se a execuo do programa. Para isto deve-se utilizar o interpretador java. Quando o bytecode utilizado pelo interpretador, a extenso .class desconsiderada. Por este motivo, no necessrio especific-la na linha de comando. Sendo assim, , para executar o programa, utiliza-se a sintaxe:
javac <opes> NOME_CLASSE

A execuo do nosso programa apresentado na Figura 37.

Figura 37 Execuo de um programa Java

Alm destas ferramentas, o JSDK ainda fornece outros programas utilitrios, que embora no sejam essenciais como o compilador e o interpretador, oferecem recursos importantes para o bom uso de Java. Por exemplo, a ferramenta javadoc representa um avano no que diz respeito a documentao de seus programas. Atravs de comentrios em um formato padronizado escrito no prprio cdigo, a ferramenta javadoc gera automaticamente um conjunto de pginas HTML, onde as informaes sobre classes, mtodos e atributos so organizadas atravs de ligaes dinmicas, no formato j familiar aos sites da Internet. Vamos ver este

43

Programao II

formato de documentao nos prximos captulos de nosso curso. A ferramenta jar utilizada para empacotar arquivos Java. Em geral, arquivos .jar empacotam arquivos .class somente. O empacotamento de arquivos .class pode ser til quando se deseja disponibilizar um programa para execuo, mas o cdigo no precisa ser fornecido uma vez que nenhuma alterao ser realizada no mesmo. De outra forma, um .jar pode conter tambm arquivos .java. Alguns comandos possveis com o comando jar so:
Para criar um arquivo .jar Para listar o contedo de um arquivo .jar Para extrair o contedo de um arquivo .jar jar cf arquivo.jar *.class jar tf arquivo.jar jar xf arquivo.jar

Outra utilizao de empacotamento jar quando se deseja disponibilizar um conjunto de classes para reutilizao por outras aplicaes. Estes outras aplicaes no iro manipular diretamente esses classes empacotadas e nem vo executar essas classes, mas sim, utiliz-las para o desenvolvimento de alguma aplicao. Neste caso, essas classes empacotadas servem como bibliotecas que podem ser utilizadas por outras aplicaes. Como dito no incio deste captulo, um applet um tipo de programa Java utilizado em browsers web. Esses programas ficam armazenados em servidores web e quando da execuo, so carregados pela rede para serem executados nos browsers web. Java fornece uma ferramenta para testar esse tipo de programa, sem a necessidade de utilizao de um servidor ou browser web. Para tal, basta utilizar o comando appletviewer.
appletviewer pagina.html

Onde, appletviewer a ferramenta de visualizao de Applets e pagina.html, corresponde ao arquivo HTML no qual o applet ser carregado para execuo.

6. JCreator: Ambiente de programao de iniciantes


Como voc percebeu, para compilar e executar programas basta um editor de textos e kit de desenvolvimento fornecido gratuitamente pela Sun. Porm, na prtica, o desenvolvimento de programas se d por meio de ferramentas que facilitem ainda mais este processo, os chamados ambientes integrados de desenvolvimento IDE (do ingls, Integrated Development Environment). Estes ambientes criam uma interface para o programador, permitindo, entre outras coisas: a compilao e execuo de programas atravs de interfaces grficas, ferramentas de depurao, dentre outras. Existem vrios ambientes de programao disponveis para Java. Alguns so gratuitos, outros no. Aqui segue uma pequena lista destas ferramentas: Eclipse: IDE gratuita fornecida pelo projeto Eclipse, de cdigo aberto, que fornece uma srie de extenses para facilitar a construo de programas de computador. URL: http://www.eclipse.org/ Netbeans: IDE gratuita fornecida pela Sun microsystems. O NetBeans IDE um ambiente de desenvolvimento integrado gratuito e de cdigo aberto para desenvolvedores de software. URL: http://netbeans.org/ Jbuilder: IDE paga para desenvolvimento de aplicaes na tecnologia Java criada pela Borland. URL: http://www.borland.com/br/products/jbuilder/

44

Programao II

BlueJ: IDE gratuita para desenvolvimento Java, desenvolvida principalmente para iniciao na programao orientada a objeto. URL: http://www.bluej.org/

Destas ferramentas, destacam-se as 3 primeiras, principalmente para o desenvolvimento profissional. Porm, devido a gama de funcionalidades que estas apresentam, para um programador iniciante, elas podem mais confundir que ajudar. Portanto, vamos utilizar nesta disciplina um ambiente de programao mais simples chamado JCreator. JCreator um IDE bem leve, que possui uma verso especfica e gratuita para o aprendizado de Java. Esta verso gratuita, LE(Learn Edition), for criado pela Xinox Software e possibilita tambm o desenvolvimento em outras linguagens, como JavaScript,XML,HTML. O site de download da ferramenta o http://www.jcreator.com. O tamanho de seu instalador gira em torno de 4Mb, e o processo de instalao bem simples. Seu nico requisito que antes de sua instalao, o JSDK j deve estar instalado. A Figura 38 abaixo mostra um screenshot da tela inicial do JCreator.

Figura 38 Tela Inicial do JCreator

O JCreator trabalha com a ideia de espaos de trabalho (workspaces) e projetos. Um projeto possui um conjunto de classes que juntas constituem uma aplicao. Em geral, uma aplicao Java composta por centenas de arquivos. Um workspace uma pasta no seu computador onde ficam armazenadas as informaes sobre um projeto. Para criar um projeto, utiliza-se o menu File > New > Project. O JCreator abrir um assistente (Figura 39) para que voc possa escolher o tipo de projeto que voc quer. Escolha a opo Basic Java Application (Aplicao Bsica Java) e pressione Next.

45

Programao II

Figura 39 Jcreator Wizard: Criando um novo projeto

Escolha um nome para seu projeto e pressione Finish (Figura 40).

Figura 40 Jcreator Wizard: Nomeando o projeto

Confirme novamente a criao de projeto. Voc dever ter em sua tela agora parecido com o apresentado na Figura 41.

Figura 41 JCreator: Projeto Criado

46

Programao II

Como voc pode notar, o projeto criado e uma classe com o mesmo nome do projeto lhe fornecida. Ela j vem com o esquema de uma classe que faz o mesmo que o nosso exemplo AloMundo.java, contendo trechos de comentrios que ainda sero vistos no curso. Voc pode obtar por trabalhar em cima desta classe ou criar uma nova classe. Para isso, utilize novamente o menu File, na sequncia File > New > Class. Aparece um novo wizard para voc. Digite o nome da classe AloMundo e pressione Finish. apresentada para voc uma classe, de forma semelhante com a Figura 42.

Figura 42 Classe AloMundo criada no JCreator

Modifique a classe AloMundo fornecida pelo JCreator, deixando-o igual ao nosso exemplo do incio deste capitulo. Vamos agora compilar e executar nossa classe. A compilao de uma classe obtida atravs da opo do menu Build. Voc pode optar por compilar uma nica classe (Build) ou ou todas as classes do projeto (Build Project). H tambm botes de atalho para as duas opes . Aps compilar a classe, voc deve obter uma resposta na janela abaixo, chamada Build Output. No nosso caso, voc deve obter uma mensagem semelhante descrita na Figura 43.

Figura 43 Resultado de um compilao sem erros no JCreator

Por fim, a execuo da classe. Para isso, voc utiliza o menu Run. Nele voc pode optar por executar o projeto ou a classe ativa. Todo projeto tem uma classe principal, que seria a responsvel por iniciar da aplicao. Isso pode ser configurado nas propriedades do projeto. Vamos executar a classe AloMundo atravs da opo Run File. Para isso, certifiquese que a classe AloMundo que est sendo apresentada no JCreator. A execuo vai disparar uma nova compilao, e depois, na janela General Output, ser apresentado o resultado da execuo do programa. Voc tambm pode utilizar o boto de atalho para Executar a classe ( ) . Voc ento dever ver algo como na Figura 44.

47

Programao II

Figura 44 Resultado da Execuo da classe AloMundo no JCreator

Como voc percebe, um ambiente como o JCreator uma mo na roda para evitarmos ter que trabalhar com as linhas de comando oferecidas pelo JSDK. O JCreator ainda lhe fornece uma janela File View, onde so apresentados os arquivos de seu projeto e uma janela Properties View, que mostra propriedades de diferentes itens de seu projeto, como do prprio projeto.

Exerccios

1. Baixe e instale o Kit de Desenvolvimento Java adequado para seu computador; 2. Crie o programa AloMundo descrito neste captulo. Compile-o e execute-o utilizando os programas apresentados no captulo; 3. Edite o programa AloMundo e modifique o nome da classe para Alomundo. Para isso, mude a linha public class AloMundo{ para public class Alomundo{. Compile novamente. Qual o resultado da compilao? 4. Baixe e instale o JCreator; 5. Crie um projeto novo, com uma classe. Faa com esta classe imprima na tela seu nome; 6. Compile e execute esta classe no JCreator.

Minibiografia

James Gosling (Calgary, 19 de Maio de 1955) conhecido como o pai da linguagem de programao Java. Ele fez o projeto original do Java e implementou o seu primeiro compilador e sua mquina virtual. Por este feito ele foi eleito para a United States National Academy of Engineering. Gosling est desde 1984 na Sun Microsystems. Gosling trabalha desde 2006 como CTO da Sun do grupo de desenvolvimento do produto.

48

Programao II

Vamos Revisar?
Neste ltimo captulo, voc foi apresentado(a) linguagem de programao mais popular do mundo atualmente. O propsito deste captulo foi principalmente apresentar as caractersticas que fizeram de Java, uma linguagem to bem aceita por programadores no mundo todo. Posso afirmar com certeza que um destes motivos foi sua aderncia ao paradigma orientado a objetos. Alm disso, destaca-se sua proposta de portabilidade atravs de seu conceito de mquina virtual. Voc tambm viu como a estrutura de um programa simples em Java, que tambm serviu de exemplo para uso do compilador e interpretador inclusos no Kit de Desenvolvimento da linguagem. Por fim, voc tambm conheceu o JCreator, uma ambiente de programao leve e simples, porm muito til para programadores iniciantes na linguagem, e que ser utilizado durante o curso para realizao dos exerccios durante a disciplina.

49

Programao II

Conhea o Autor
Fernando Trinta
Sou professor de cincia de computao, formado pela Universidade Federal do Maranho. Tenho Mestrado e Doutorado em Cincia da Computao pelo Centro de Informtica da Universidade Federal de Pernambuco, com nfase na rea de Sistemas Distribudos. Durante minha ps-graduao, estive envolvido com os temas de objetos distribudos e educao a distncia no Mestrado, e jogos digitais, middleware e computao ubqua no Doutorado. Trabalhei no desenvolvimento de sistemas em vrias empresas, privadas e pblicas. Atualmente fao parte do corpo discente do Mestrado em Informtica Aplicada da Universidade de Fortaleza (UNIFOR), no Cear. Alm da informtica, gosto muito de esportes em geral e cinema. Mas nos ltimos anos, duas novas paixes tomaram conta do meu mundo: Ian e Ananda.

50