Você está na página 1de 99

(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

Linguagem de Programação e Ferramentas


Objetivo

EMENTA
Linguagens de Programação. (PHP, Python e Java). Desenvolvimento de aplicações corporativas.
Desenvolvimento de aplicações para pequenos dispositivos. Desenvolvimento de Aplicações para Web.
Desenvolvimento de Portais. Boas práticas. Ferramentas de desenvolvimento.

OBJETIVOS

Geral
Conhecer e compreender as principais linguagens de programação baseadas em software livre, bem como
os principais conceitos e ferramentas.

Específicos
escrever pequenos programas em PHP, Python e Java;
conhecer e utilizar as principais ferramentas de desenvolvimento livres;
aplicar os principais conceitos na prática.

CONTEXTUALIZAÇÃO
Atualmente, existem várias formas de escrever programas de computadores. Para este curso, escolhemos
três das principais linguagens disponíveis para programação com software livre. Estas linguagens permitem
que se escrevam aplicações para os mais diferentes cenários.

Bom estudo e bom proveito!!

Parte 01 - PHP

Aula 01 – Introdução à Linguagem PHP


No início da Internet, as informações eram totalmente textuais e sem qualquer formatação, até que surgiu a
WWW, ou simplesmente web, com o HTML (Hypertext Markup Language) e sua capacidade de exibir texto
formatado e imagens, o que favoreceu a expansão da Internet. No início, as páginas HTML eram estáticas -
para cada página havia um arquivo correspondente. O visitante requisitava uma página ao servidor web que
retornava o conteúdo do arquivo correspondente à página, conforme mostra a figura abaixo.

1 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

Figura 1.1 – Página HTML – Estática

Tudo ia bem, até que surgiu o CGI (Common Gateway Interface), programa executado no servidor web que
gera dinamicamente uma página HTML, normalmente escrito em C ou PERL. Uma página dinâmica não tem
um arquivo gravado no servidor web, com o exato conteúdo apresentado; o conteúdo é produzido pela
execução de um programa. A figura abaixo apresenta a nova configuração.

Figura 1.2 – Página HTML – Dinâmica.

Na realidade, o CGI fica dentro do servidor web, mas foi colocado fora apenas para facilitar a visualização.
Acompanhando a figura, vemos que o visitante requisita uma página ao servidor web que identifica esta
página como dinâmica e solicita a execução de um programa CGI. O CGI “imprime” uma página HTML no
servidor web, que retorna exatamente o mesmo conteúdo para o visitante. O CGI literalmente imprime a
página através de comandos de saída como printf do C; como sua execução foi solicitada pelo servidor web,
a saída não é impressa na tela, mas entregue ao servidor.

O CGI reinava absoluto até que, no final dos anos de 1990, surgiu a idéia de inserir os comandos da
linguagem de programação dentro da página HTML, deixando a cargo do servidor web a execução dos
comandos, retirando uma peça dessa configuração e, com isso, ganhando em performance. Nasceram então
as linguagens de programação de script do lado do servidor.

1.1 O PHP e sua Motivação


O PHP é uma linguagem de programação orientada a objetos de código aberto e interpretada que, apesar
de muito poderosa, é de fácil aprendizagem. Seu principal uso é na programação de páginas HTML
dinâmicas para Internet, onde é conhecida como uma linguagem de programação de script server-side (do
lado do servidor), ficando embutida dentro do código da página HTML.

Suas principais características são: velocidade, robustez, simplicidade, eficiência, portabilidade


(independência de plataforma) e sintaxe similar a C e PERL.

O PHP é conhecido como a linguagem de programação para Internet mais utilizada. É praticamente a
linguagem de programação mais utilizada na Internet. Contudo, sempre que formos enaltecer o PHP, é
importante destacar que é a linguagem de programação para Internet, do lado do servidor, mais utilizada.
Isso porque, se fôssemos incluir também a linguagem do lado do cliente, a mais utilizada, sem dúvida
alguma, seria o JavaScript.

2 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

Para Saber Mais


Uma curiosa estatística é apresentada pelo site Tiobe sobre a impressão dos usuários. Para fechar o
assunto, recomendamos que você faça sua própria pesquisa, verificando em sua lista de favoritos
quantos sites foram desenvolvidos em PHP.

E por que utilizar PHP e não outra linguagem de programação para web, do lado do servidor? Ao optar por
uma das mais utilizadas linguagens, você estará nadando a favor da correnteza e, com isso, contará com
tutoriais, exemplos, scripts (código/programa livre para ser copiado e utilizado), fóruns de discussão e
outras pessoas com as quais pode trocar experiências e tirar dúvidas. Ainda não está convencido? Então,
saiba que tudo isso é de graça, uma linguagem de programação de código aberto.

Ainda não está completamente convencido? Vamos recorrer a dados técnicos. Veja os suportes da
linguagem PHP:

Bancos de dados – Adabas, dBase, Direct MS-SQL, Empress, FilePro, FrontBase, Hyperwave, IBM
DB2, Informix, Ingres, InterBase, mSQL, MySQL, Oracle, Ovrimos, PostgreSQL, Solid, SQLite,
Sybase, Unix dbm e Velocis, além de suporte a ODBC (Open Database Connection).
Protocolos como – LDAP, IMAP, SNMP, NNTP, POP3, HTTP e COM, além do suporte a sockets.
Processa XML suportando os padrões SAX, DOM e extensão XSL.
Sistemas operacionais – Windows, Linux, FreeBSD, Mac OS, OS/2, AS/400, Novell Netware,
RISC OS, IRIX e Solaris.

Para Saber Mais


Recomendamos que você acesse um site desenvolvido em PHP com MySQL, que demonstra a robustez
da dupla.

1.2 História
A linguagem PHP (Personal Home Page) foi criada por Rasmus Lerdorf, em 1994, para que ele pudesse ter
informações sobre as visitas feitas ao seu currículo em sua página pessoal. Em 1995, foi liberada a
primeira versão ao público, conhecida como PHP Tools, basicamente um conjunto de utilitários simples:
livro de visitas, contador de visitas e alguns outros.

Em 1997, o interpretador foi reescrito e rebatizado como PHP/FI (PHP Form Interpreter). Essa versão
incorpora a interpretação a dados de formulários HTML e suporte a mSQL. Seu uso cresceu e muitos
passaram a contribuir com o projeto; estima-se que esse uso tenha subido de 15 mil para mais de 50 mil
sites nesse ano.

Com a explosão do uso, o projeto deixou de ser executado por Rasmus com contribuições de outras
pessoas para ter uma equipe de desenvolvimento. O interpretador foi novamente reescrito por Zeev Suraski
e utilizado como base para a versão 3 do PHP, que introduzia recursos ainda tímidos de orientação a
objetos. Pouco depois, Zeev e Andi Gutmans escreveram o PHP 4 a partir do zero. Esta versão ampliava a
orientação a objetos.

O nome da linguagem sempre se manteve PHP, mas, com o crescimento da linguagem, seu significado

3 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

passou do modesto Personal Home Page para Hypertext Preprocessor, nome democraticamente escolhido
por votação na comunidade que o mantém.

Em junho de 2004, foi lançada oficialmente a versão 5 do PHP, trazendo tantas modificações em relação à
versão 4 que fez com que muitos programas deixassem de funcionar, o que causou atraso em sua adoção.
Somente em julho de 2007 foi anunciada, oficialmente, no site do PHP, a descontinuidade da versão 4 e a
recomendação de que, até o final do ano, as aplicações fossem adaptadas para a versão 5. Mesmo assim
ainda há muitos programas rodando na versão 4.

Apesar de a versão 4 já ser muito poderosa, infelizmente, criou o mito de que qualquer pessoa poderia
programar em PHP. Mas isso não é verdade! Talvez seja fácil para um leigo escrever um programa, mas,
com certeza, não será fácil programar. Contudo, essa imagem vem mudando e, cada vez mais, o PHP é
visto como uma linguagem de programação para ser explorada em grandes projetos.

Na versão 5, o PHP finalmente chegou à idade adulta. Seu mecanismo interno foi novamente reescrito, por
completo, para operar com o Zend Engine 2.0, o que proporcionou significativo aumento na velocidade de
execução e performance na programação orientada a objeto. O Zend Engine é a junção dos nomes do Zeev
Suraski e Andi Gutmans.

A promessa de que a versão 6 retirará muitas características do PHP, para torná-lo mais prático, já está
gerando muitas discussões em listas de desenvolvedores sobre o problema do legado (programas escritos
na versão 5 que podem deixar de funcionar).

1.3 Instalação

1.3.1 EasyPHP
Temos vários e ótimos servidores web que dão suporte para PHP. De fato, o EasyPHP não é um servidor
web, mas um pacote de instalação que contém o servidor web Apache com: o módulo de interpretação do
PHP; o banco de dados MySQL; o PHPMyAdmin, que é um módulo de administração do MySQL e o SQLite,
uma ferramenta de administração de bancos de dados SQL.

O EasyPHP é muito simples de ser instalado e é compatível com Windows e Linux. Atualmente, está na
versão 2.0 beta1, que, apesar de beta, é a que recomendamos que você instale.

Para instalar o EasyPHP 2.0 beta1 no windows você deve seguir os passos abaixo:

1. Baixe o instalador a partir de um dos sites indicados abaixo ou de qualquer outro:

http://www.easyphp.org;
http://superdownloads.uol.com.br/download/105/easyphp/;
http://baixaki.ig.com.br/download/EasyPHP.htm.

2. Inicie o programa de instalação “EasyPHP-2.0b1-setup.exe”.


3. Será apresentada a janela de seleção da linguagem de instalação. Escolha “Português (Brasil)” e
clique no botão “OK”. Pode ficar à vontade para escolher outro idioma que lhe seja mais agradável.
4. Será apresentada a janela do assistente de instalação; clique no botão “Avançar”.
5. Será apresentado o contrato de termo de uso. Leia o contrato, marque a opção “Eu aceito os
termos do contrato” e clique no botão “Avançar”.
6. Serão apresentados alguns alertas. Leia os alertas e clique no botão “Avançar”.
7. Será solicitada a pasta de destino para a instalação. Informe a pasta (sugerimos aceitar a pasta

4 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

padrão que foi sugerida pelo EasyPHP) e clique em “Avançar”.


8. Será apresentada a pasta de seleção no menu iniciar. Clique em “Avançar”.
9. Finalmente, será apresenta a última janela, informando que está pronto para iniciar a instalação.
Clique no botão “Instalar”.
10. Aguarde o final da instalação até que seja apresentada a janela de finalização do assistente de
instalação e clique no botão “Concluir”.

Para Saber Mais


Você pode ver uma vídeo-aula da instalação do EasyPHP.

Caso ocorra algum erro durante a instalação, é possível que você já tenha um servidor Web ou MySQL
iniciado. Nesse caso, abra o “painel de controle”, acesse “ferramentas administrativas”, clique duas vezes
sobre o ícone “serviços”, localize e pare os serviços conflitantes. Outra possível causa de erro é algum
programa que utiliza a porta 80, como o Skype, por exemplo. Nesse caso, feche o programa para utilizar o
EasyPHP.

Recomendamos o EasyPHP na versão windows, por acreditar que será mais simples para a maioria dos
alunos, mas nada impede que você utilize outro pacote ou servidor web.

1.3.2 PHP Editor


Para editar o código dos programas PHP, recomendamos que você utilize um editor que reconheça a sintaxe
da linguagem e coloque os comandos em cores diferentes; isso pode parecer besteira, mas facilita muito a
programação. Um ótimo editor é o PHP Editor que, além de reconhecer a sintaxe PHP, também reconhece a
sintaxe HTML, permite a edição de vários arquivos simultaneamente e recurso de auto-complemento de
funções.

O PHP Editor é um editor leve, que possui recursos avançados e ainda tem como diferenciais o fato de ter
sido desenvolvido em terras tupiniquins, por Diogo Edegar Mafra; logo, está disponível em português do
Brasil, possuindo licença Freeware. Sua desvantagem é rodar apenas no ambiente windows. A versão 2.22
pode ser baixada de um dos sites abaixo.

http://paginas.terra.com.br/informatica/php_editor/index.html;
http://superdownloads.uol.com.br/download/65/php-editor/;
http://baixaki.ig.com.br/download/PHP-Editor.htm.

Sua instalação é extremamente simples, basicamente um avançar, avançar e concluir.

Nesta aula, discutimos o que é o PHP, com suas principais características, mas sem entrar na programação,
e falamos sobre onde rodar e editar o PHP. Na próxima aula, começaremos a programar em PHP. Até lá!

Aula 02 – Linguagem PHP


Nesta aula, faremos nosso primeiro programa PHP e conheceremos a linguagem PHP. Vamos lá!

2.1 HTML
Vamos dar uma “passada relâmpago” por HTML. O que vemos, abaixo, é uma página HTML bastante
simples, mas que contêm todas as tags que utilizaremos em nosso curso.

5 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

arquivo.html
1. <html>
2. <head>
3. <title>Titulo da pagina</title>
4. </head>
5. <body bgcolor="#FFFFC0">
6. Texto do corpo da pagina.<p>
7. Primeira linha
8. Segunda linha<br>
9. Terceira linha
10. <hr>
11. <b>Quarta linha</b><br>
12. <i>Quinta linha</b>
13. <!- Comentario em HTML >
14. <table border=1>
15. <tr>
16. <td>Elemento 1</td>
17. <td>Elemento 2</td>
18. </tr>
19. <tr>
20. <td>Elemento 3</td>
21. <td>Elemento 4</td>
22. </tr>
23. </table>
24. <a href="http://www.ucb.br">UCB</a>
25. </body>
26. </html>

Para ver o resultado, salve o conteúdo do quadro acima em um arquivo texto com as extensões “.html” ou
“.htm”. Pode utilizar o PHP Editor, que irá reconhecer a sintaxe HTML. Em seguida, abra o arquivo em
qualquer navegador Internet (menu “Arquivo” e opção “Abrir...”).

Algumas considerações:

6 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

As tags (marcações do HTML) consistem no sinal “<” (menor que), seguido pelo nome da tag e
fechada por “>” (maior que).
A página deve ser identificada como HTML (<html></html>) e ter duas seções: cabeçalho
(<head></head>) e corpo (<body></body>). No cabeçalho, temos o título da página
(<title></title>), que aparece na barra de título da janela do navegador e no corpo; temos todas
as tags com o conteúdo da página.
HTML não é case sensitive (faz distinção entre maiúsculas e minúsculas); então, não há diferença
entre escrever <html> ou <HTML> ou <HtMl>.
Geralmente, as tags aparecem em pares, como vemos na linha 11 (<b>Quarta linha</b>), onde
a tag é aberta e fechada. A tag de fechamento é a mesma tag de abertura, com a inclusão de uma
barra “/”. Contudo, algumas tags, como <p>, <br> e <hr>, não necessitam ser fechadas.
O parâmetro “bgcolor”, da tag <body>, define a cor de fundo da página; o valor desse parâmetro
deve ser um número hexadecimal correspondente à cor desejada.
Para formatar estilo no texto, pode-se utilizar a tag <b> para negrito e <i>, para itálico.
A tag <hr> produz uma linha horizontal.
As tags de tabela <table>, <tr> e <td> marcam o início e fim de tabela, linha e coluna,
respectivamente. Observe que são criadas as várias colunas dentro de cada linha.
A tag <a> é utilizada para criar um link, seu parâmetro “href” define o endereço do link.

Pronto, agora sim podemos ver nosso primeiro programa em PHP.

2.2 Primeiro Programa


Tradicionalmente, o primeiro programa em qualquer linguagem parece ser o Hello world!, que, ao executar,
apenas escreve Hello world! (Alô mundo!). Alguns ainda afirmam que, caso isso não ocorra, o programador
terá uma interminável onda de azar na linguagem. Não é bom arriscar!

hello.php
1. <html>
2. <head><title>Hello World!</title></head>
3. <body>
4. <?php
5. echo "Hello world!<p>";
6. ?>
7. </body>
8. </html>

O fato é que o Hello world! nos permite duas coisas bastante interessantes em qualquer linguagem:
verificar se o compilador/interpretador está funcionando e conhecer a estrutura básica da linguagem. Nós
faremos ambas. Primeiramente, vamos visualizar essa página; para isso, siga os passos abaixo:

1. Digite a página acima usando o PHP Editor.


2. Salve o arquivo no diretório (pasta) “www”, criado pelo EasyPHP com o nome “hello.php”.
Provavelmente, o caminho da pasta “www” é “C:\Arquivos de Programa\EasyPHP
2.0b1\www”.
3. Execute o EasyPHP. Se você estiver utilizando a versão Windows do EasyPHP, será apresentado na
barra de tarefas o ícone do EasyPHP, conforme visto na figura a seguir. É o “ezinho” preto, com o
ponto vermelho – primeiro ícone.

7 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

4. Dê um clique duplo sobre o ícone do EasyPHP, a fim de abrir sua janela. Garanta que o Apache
esteja iniciado (com a luz verde do semáforo).

Cuidado: Minimize esta janela, mas não a feche, para que o EasyPHP possa, utilizando o Apache, servir
sua página (ou programa PHP).

5. Abra um navegador Internet e digite o endereço “http://localhost/”. Se tudo der certo, será
apresentada a seguinte página:

6. Esta não é ainda a sua página, mas uma página padrão que o EasyPHP mostra com todas as
páginas que estão no diretório “www”. Clique em “hello.php” e verá sua página. Se houver nesse
diretório um arquivo chamado “index.html”, este será apresentado no lugar da página padrão.

Parabéns! Você acaba de se tornar um programador PHP e agora já faz parte da comunidade de
programadores da linguagem de programação para Internet mais popular do mundo!

Respire fundo e continue. O Hello world! também é muito útil para apresentar a estrutura básica da
linguagem, o que será bastante simples, pois temos apenas 1 linha de código PHP nesse programa
(poderíamos também chamá-lo de página ou script, mas vamos convencionar chamar de programa), que
está na linha 5.

O nosso programa é basicamente uma página HTML; é isso que significa, na prática, uma linguagem de
programação de script embutida no HTML. Veja que, no meio do HTML, há a tag <?php ... ?>, que
delimita o código PHP. A função dessa tag é dizer ao servidor web que seu conteúdo deve ser interpretado
(executado) pelo PHP.

A linha 5 é bastante simples, apenas executa o comando echo, utilizado como um comando de saída pelo
PHP, equivalente ao “System.print” do Java e ao “printf” do C. Como o PHP está sendo executado pelo
servidor web, sua saída será “impressa” em uma página HTML.

Observe que colocamos as tags <head>, <title> e seus fechamentos na mesma linha, embora isso não
seja muito bonito, fizemos para economizar linhas em nossos exemplos.

8 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

Agora veja como a página ficou. Veja as tags HTML dessa página. Independentemente do navegador
(Firefox ou Internet Explorer), vá ao menu “Exibir” e escolha “Código fonte”.

HTML puro! O servidor web executa os comandos PHP e gera uma página HTML apenas com as saídas
produzidas pelo PHP; com isso, seu código está seguro dos copiadores de plantão.

2.3 Sintaxe Básica


Como você já tem conhecimentos de lógica de programação e de alguma linguagem de programação,
vamos apresentar a sintaxe da linguagem PHP muito rapidamente, mas dando atenção àqueles pontos que
a merecerem. Mesmo porque, PHP é baseado na sintaxe C, também utilizada em linguagens de
programação como Java e PERL.

2.3.1 Delimitador PHP


Além do delimitador <?php ... ?>, como utilizamos em nosso primeiro programa, também podemos
utilizar em PHP o delimitador escrito, das seguintes formas:

<script language=”php”> ... <script>


<? ... ?>
<% ... %>

Contudo, vale destacar que o indicado é você utilizar a forma como fizemos no primeiro programa. As
demais formas podem necessitar da configuração do interpretador PHP para serem aceitas.

2.3.2 Separador de Comandos


PHP utiliza o ponto-e-vírgula como separador de comandos, não como terminador; isso significa que o
último comando não necessita de ponto-e-vírgula. Mas não se preocupe com isso, é normal colocarmos
ponto-e-vírgula em todos os comandos.

2.3.3 Comentários
PHP permite comentários de linha e de bloco. Para fazer comentários de linha, você pode utilizar o
tradicional barra-barra, “//” ou o cerquilha “#”. Para comentários de bloco, foi mantido apenas o
tradicional barra-asterisco “/* ... */”.

2.3.4 Atribuição
Em PHP, como na imensa maioria das linguagens de programação, o igual “=” é utilizado para atribuição de
valores. Mesmo que os matemáticos odeiem!

2.3.5 Operadores
Os operadores aritméticos, relacionais e lógicos do PHP estão listados abaixo.

Aritméticos Relacionais Lógicos

+ Adição == Igual && and E

- Subtração != Diferente || or Ou

9 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

* Multiplicação > Maior xor Ou exclusivo

/ Divisão < Menor ! Não

% Módulo – Resto da >= Maior igual


Divisão
<= Menor igual

Além dos operadores acima, PHP ainda possui o operador de concatenação de string, o ponto final “.” e a
possibilidade de escrever operadores abreviados, como em C (+=, -+, *=, /=, %=, .=) e os operadores
de incremento (++) e de decremento (--). O exemplo abaixo mostra o uso desses operadores. No próximo
item, falaremos mais sobre variáveis, mas adiantaremos que, em PHP, toda variável deve iniciar com cifrão
“$”.

Comandos Anteriores Comando Resultado

$a=5; $b=2; $c=$a+$b; $c passará a valer 7

$a=5; $b=2; $c=$a/$b; $c passará a valer 2.5

$a=5; $b=2; $c=$a%$b; $c passará a valer 1

$a=5; $b=2; ($a==$b) Falso

$a=5; $b=2; ($a>=$b) Verdadeiro

$a=5; $b=2; $c=3; (($a>=$b) && ($b==$c)) Falso

$a=5; $b=2; $c=3; (($a>=$b) or ($b==$c)) Verdadeiro

$a=5; $b=2; (!($a==$b)) Verdadeiro

$a=”PH”; $b=”P”; $c=$a.$b; $c passará a valer “PHP”

$a=5; $b=2; $a+=$b; $a passará a valer 7

$a=5; $a++; $a passará a valer 6

$a=5; $a--; $a passará a valer 4

$a=5; $b=2; $c=3; $d=$a+$b*$c; $d passará a valer 11

$a=5; $b=2; $c=3; $d=($a+$b)*$c; $d passará a valer 21

Os parênteses “(...)” são utilizados como operador de precedência, como vimos nos dois últimos exemplos
acima. Em PHP, toda condição deve, obrigatoriamente, estar entre parênteses.

2.4 Variáveis
O PHP utiliza tipagem fraca de variável com checagem dinâmica; isso significa que as variáveis não
precisam ser declaradas e podem conter valores de diferentes tipos ao longo da execução do programa.
Apesar disso, podemos afirmar que PHP suporta os seguintes tipos de dados (veja que utilizamos a palavra
“dados” e não “variáveis”):

inteiro (integer ou longint);


ponto-flutuante (float ou double);

10 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

caracteres (string);
vetor (array);
objeto (object).

O tipo objeto é utilizado para programação orientada a objetos, que não exploraremos por não ser o foco
de nosso estudo do PHP. Vamos nos concentrar então na programação web.

O PHP possui uma particularidade, com relação ao delimitador de valores string, que pode ser aspas
simples ( ' ) ou dupla ( " ). Utilizando aspas simples, o PHP entenderá o valor exatamente como está
(exceto os caracteres especiais); utilizando aspas duplas, o PHP interpretará as variáveis contidas. O
exemplo seguinte deixa claro o que isso significa.

variavel.php
1. <html>
2. <head><title>Variavel</title></head>
3. <body>
4. <?php
5. $a=1;
6. echo "A variavel vale ==> $a<br>";
7. echo 'A variavel vale ==> $a<br>';
8. $a="PHP"; // Note que a mesma variável recebe um valor string.
9. echo "A variavel vale ==> $a<br>";
10. $a=2.3; // E agora ponto-flutuante.
11. echo "A variavel vale ==> $a<p>";
12. echo "A variavel \"a\" esta valendo $a";
13. ?>
14. </body>
15. </html>

Para testá-lo, siga os passos que utilizamos em nosso primeiro programa. Teste o programa observando o
que será impresso pelas linhas 6 e 7, devido ao uso das aspas simples e duplas.

Você notou que a linha 12 possui barras “\” que não são impressas? Isso porque, assim como C, PHP
possui uma série de caracteres especiais que garantem a impressão de caracteres que não poderiam ser
impressos, porque têm função especial dentro da string. O quadro a seguir apresenta os principais
caracteres especiais.

Quadro 2.1 – Caracteres Especiais PHP

Forma de Escrita Será Impresso

\\ \

\$ $

\’ ’

\” ”

O PHP não possui um tipo booleano (verdadeiro ou falso), mas é capaz de avaliar expressões lógicas. A
maneira escolhida foi a mesma que a linguagem C, através de um valor inteiro: 0 (zero), para falso, e
qualquer valor diferente de zero (geralmente 1), para verdadeiro.

11 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

2.4.1 Vetores e Registros


O PHP utiliza um conceito um pouco diferente para trabalhar com vetores, o que permite que a mesma
estrutura seja utilizada também para registros. Se você está acostumado aos tradicionais vetores com
índices numéricos e seqüenciais, vai estranhar um pouco. De fato, em PHP, um vetor é um repositório,
onde os índices são chaves de acesso; estes índices podem ser de qualquer tipo. Mesmo sendo inteiros,
não precisam ser seqüenciais. Veja o exemplo abaixo.

vetor.php
1. <html>
2. <head><title>vetor</title></head>
3. <body>
4. <?php
5. $fruta[1] = "abacaxi";
6. $fruta[2] = "banana";
7. $fruta[3] = "caju";
8. $fruta["qtd"] = 3;
9. echo "Temos ".$fruta["qtd"]." frutas: ";
10. echo "$fruta[1], $fruta[2] e $fruta[3]";
11. ?>
12. </body>
13. </html>

Curioso, não é?! Observe a afirmação acima, onde se diz que “índices podem ser de qualquer tipo”. No
exemplo, temos 3 índices do tipo inteiro (linhas 5, 6 e 7) e um índice do tipo string (linha 8). Veja que o
índice está entre aspas ( “ ). Isso faz sentido quando lembramos que a checagem de tipos em PHP é
dinâmica; com isso, valores de tipos diferentes podem ser usados como índices de vetores, assim como os
valores mapeados (conteúdo do vetor) também podem ser de diversos tipos. Outra forma de fazer a
mesma atribuição das linhas de 5 a 8 seria utilizar a função “array()”. As quatro linhas seriam substituídas
pela linha abaixo:

$fruta = array(1 => "abacaxi", 2 => "banana", 3 => "caju", "qtd" => 3);

2.4.2 Conversão de Tipos


É possível converter valores de um tipo para outro utilizando, assim como na linguagem C, o typecast do
PHP. Para isso, basta escrever antes do valor o tipo desejado entre parênteses. Abaixo são apresentados os
typecasts permitidos.

Typecasts Converte para

(int), (integer) Inteiro

(real), (double), (float) Ponto-flutuante

(string) Caracteres

(array) Vetor

(object) Objeto

Veja alguns exemplos de transformação de tipo:

12 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

$a = 1; // $a é inteiro e vale 1

$a = (double)$a; // $a passa a ser ponto-flutuante e valer 1.0

$b = 1.5; // $b é ponto-flutuante e vale 1.5

$b = (int) $b; // $b passa a ser inteiro e valer 1

Outra maneira de converter variáveis, é utilizando a função “settype()”, onde deve ser informado como
parâmetros o nome da variável, a ser convertida e um valor string com o tipo (typecasts) desejado. Por
exemplo:

$a = 1.5; // $a é ponto-flutuante

settype($a, “int”); // $a é transformada para inteiro e passa a valer 1.

2.4.3 Constantes
Certa vez, um aluno definiu constante da seguinte forma: “constante é uma variável que tem um valor que
não varia”. Pode parecer engraçado, mas é exatamente isso; afinal, uma vez associado um valor, este não
pode mais ser alterado.

Para definir constantes em PHP, deve-se utilizar a função define(). O exemplo abaixo define e utiliza a
constante pi:

define("pi", 3.1415926536);
echo "O valor de pi é ".pi;

Lembre-se de que uma constante nunca poderá conter vetores.

2.4.4 Variáveis de Ambiente


Variável de ambiente, também conhecida por constante de ambiente, é uma variável pré-definida (não
precisa ser declarada), que armazena um valor especial. PHP possui várias variáveis de ambiente. A função
“phpinfo()” apresenta a listagem de todas as variáveis de ambiente e seus valores. Abaixo, mostramos
algumas destas variáveis:

Nome Descrição

$_SERVER["HTTP_USER_AGENT"] Nome e versão do navegador do cliente.

$_SERVER["REMOTE_ADDR"] Endereço IP do cliente.

$_SERVER["SCRIPT_FILENAME"] Caminho e nome do programa sendo executado.

Cuidado: No exemplo acima, a variável de ambiente é um vetor chamado “$_SERVER”, cifrão + underline
+ “SERVER”. Não se esqueça do underline.

13 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

Para Saber Mais


Leia dicas de codificação no texto “Codifique menos e pense mais!”, de Belchior Palma.

Nesta aula, revisamos rapidamente HTML e fizemos nosso primeiro programa em PHP. Em seguida,
começaremos a explorar a estrutura da linguagem, em nossa próxima aula. Até lá!

Aula 03 – Comandos da Linguagem PHP


Nesta aula, continuaremos explorando a linguagem PHP, através dos comandos de seleção, repetição e
funções.

3.1 Comandos de Seleção


A seguir, veremos alguns dos comandos de seleção de PHP.

3.1.1 Bloco de Comandos


PHP também utiliza o conceito de bloco de comandos utilizado em C, Pascal e Java. Nessa idéia, um grupo
de comandos pode ser visto como um único comando, em determinadas circunstâncias. Em PHP, os blocos
são delimitados por chaves “{ ... }”.

3.1.2 IF
Não conhecemos uma linguagem de programação que não tenha o bom comando “if”. Em PHP, o “if”
funciona com o conceito de blocos de comando. Isso significa que, se a condição for válida, será executado
o próximo comando. Se você necessitar que o “if” execute mais de um comando, basta colocá-los dentro
de um bloco. Veja o exemplo:

$a=1;
if ($a == 1)
echo "um";
else {
echo "outro valor que não um";
echo "<br>";
}

Curiosamente, o PHP incorpora, além do já mencionado conceito de bloco, o conceito de marcador de


término, como ocorre na linguagem de programação ASP. O exemplo abaixo faz exatamente o mesmo que
o anterior, utilizando o marcador de término “endif” para informar ao PHP o término de um comando “if”.

$a=1;
if ($a == 1):
echo "um";
else:
echo "outro valor que não um";
echo "<br>";
endif;

14 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

Observe os dois pontos “ : ” colocados após o “if” e o “else”. Outra flexibilização que existe no comando
“if” é o “elseif”, para possibilitar ao comando “if” avaliar várias condições, funcionando de forma similar
ao comando “switch” (que veremos em breve). Veja o exemplo abaixo:

$a=1;
if ($a == 1)
echo "um";
elseif ($a == 2)
echo "dois";
else {
echo "outro valor que não um ou dois";
echo "<br>";
}

O “else” e o “elseif” são opcionais dentro do “if”, podendo não ser utilizados. O “elseif” pode ser
utilizado mais de uma vez dentro do “if”.

3.1.3 SWITCH
Como dissemos, o comando “switch” e “elseif” podem ser utilizados para resolver o mesmo problema,
mas, nesses casos, o “switch” é mais recomendado, por questões de performance e higiene de
programação (código limpo e de fácil leitura). Basicamente, o “switch” avalia vários valores de uma
mesma variável; já o “elseif” pode avaliar qualquer condição. O exemplo seguinte faz o mesmo do
exemplo anterior, porém, utilizando “switch”.

$a=1;
switch ($a) {
case 1:
echo "um";
break;
case 2:
echo "dois";
break;
default:
echo "outro valor que não um ou dois";
echo "<br>";
}

Assim como o “else” do comando “if”, o “default” do “switch” é opcional; caso exista, será executado
nas situações onde nenhum “case” seja avaliado como igual. Outro ponto é o comando “break” (veremos
melhor abaixo), que interrompe a seqüência de execução do “switch”. Isso normalmente é necessário,
porque o comando “switch” foi desenhado para, ao avaliar um “case” como igual, executar todos os
comandos abaixo, até o final do “switch”, mesmo que estes estejam em outro “case”. É como no dito
popular: “Em porteira que passa um boi, passa uma boiada”.

Uma particularidade do comando “switch” do PHP é a possibilidade de avaliar valores do tipo caracter.

3.2 Comandos de Repetição


Agora vamos aos comandos de repetição:

15 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

3.2.1 WHILE
O comando de repetição “while” é o mais simples dos comandos de repetição. Ele avalia a condição e
executa o(s) comando(s) até que a condição retorne falso. Assim como o “if”, também permite a utilização
de blocos de comandos e marcador de término. Abaixo são mostradas as duas maneiras:

$a = 1; $a = 1;
while ($a <= 10) { while ($a <= 10):
echo "$a<br>"; echo "$a<br>";
$a++; $a++;
} endwhile;

O while executa no mínimo zero e no máximo N vezes. Zero porque, ao chegar no “while”, a condição pode
ser avaliada como falsa e não chegará a executar a primeira vez, N porque pode entrar em um “loop
infinito”, repetindo eternamente, caso em que a condição nunca seria avaliada como falsa. Isso ocorreria
no exemplo acima se testássemos ($a > 0).

3.2.2 DO..WHILE
O comando de repetição “do..while” funciona de maneira semelhante ao “while”, a diferença é que a
condição é avaliada após a primeira execução, com isto ele executa no mínimo uma vez e no máximo N
vezes. O exemplo abaixo mostra um uso do “do..while”:

$a = 1;
do {
echo "$a<br>";
$a++;
} while ($a <= 10);

Em C, o comando “do..while” já opera apenas com marcador de término, o PHP manteve apenas essa
forma de escrita do comando. Os comandos “while” e “do..while” são conhecidos como repetição
condicional, onde a repetição depende da satisfação de uma condição.

3.2.3 FOR
O comando de repetição “for” excuta repetição controlada, em que o programador define o número de
vezes que irá repetir, mesmo que esse número seja o valor de uma variável. A sintaxe C, adotada pelo PHP,
coloca uma condição dentro do “for”, o que não altera sua característica de repetição controlada.

O comando for possuir três partes bem definidas:

Inicialização – Executada apenas a primeira vez, antes da execução do(s) comando(s) e serve
para definir o valor da variável de controle.
Condição – Executada todas as vezes, a primeira vez é antes da execução do(s) comando(s) e
serve para interromper a repetição; na realidade, o “for” tem funcionamento bastante similar ao
“while”, executando enquanto essa condição for avaliada como verdadeira.
Incremento – Ou decremento, é executado a partir da segunda vez, antes da segunda execução
do(s) comando(s) e serve para alterar o valor da variável de controle. Normalmente utiliza um

16 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

incremento (++) ou decremento (--).

Abaixo é mostrada a sintaxe do “for”, com blocos de comandos. O “for” também pode ser escrito com
marcador de término.

for (inicialiação; condição; incremento) {


comando(s);
}

Esse exemplo apresenta o for escrito, com marcador de término. A execução do exemplo produzirá o
mesmo resultado dos exemplos de “while” e “do..while”, como segue;

for ($a=1; ($a <= 10); $a++):


echo "$a<br>";
endfor;

Utilizamos o mesmo exemplo apenas para demonstrar a sintaxe dos comandos, mas claro que você sabe a
diferença conceitual entre comandos de repetição condicionais que são executados de 0..N, de 1..N e
comandos de repetição controlado. Caso você não se sinta totalmente confortável nesse assunto,
recomendamos a leitura de livros de lógica de programação e de algoritmo de programação.

3.2.4 Ruptura de Fluxo


Vamos falar sobre o comando “break”, que funciona como um interruptor de fluxo de comandos. Isso
porque ele tem o poder de interromper a seqüência de execução de um bloco de comandos de repetição
(“while”, “do..while” e “for”, além do já visto “switch”), saltando para o próximo comando após o
término do bloco. No exemplo abaixo, seriam impressos os valores de 10 a 100, mas como o “break”
interrompe a repetição ao encontrar um múltiplo de 7, sendo impresso apenas de 10 a 13.

for ($a=10; ($a <= 100); $a++) {


if (($a % 7) == 0)
break;
echo "$a<br>";
}

O comando “continue” é irmão gêmeo bivitelino do comando “break”, que, no lugar de parar a repetição,
como faz seu irmão, desvia o fluxo de execução para a condição do comando de repetição. Veja o exemplo
abaixo, aparentemente muito parecido, mas com comportamento bastante diferente.

for ($a=10; ($a <= 100); $a++) {


if (($a % 7) == 0)
continue;
echo "$a<br>";
}

Ao encontrar um múltiplo de 7, o comando “continue” irá desviar o fluxo de execução para a condição,
fazendo com que o comando “echo” não seja executado; com isso, o resultado final desse programa será a
impressão dos números de 10 a 100, com exceção dos múltiplos de 7.

3.3 Subprogramas

17 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

Para o PHP, todo subprograma (procedimento ou função) é escrito como função. Uma vez que a checagem
de tipos em PHP é dinâmica, o tipo de retorno não necessita ser declarado; com isso, a única diferença na
escrita de um procedimento ou função é a presença do comando de retorno no corpo da função. Devido a
essa ausência de tipos, é recomendável que o programador documente suas funções para facilitar a
compreensão do código. O exemplo abaixo mostra a declaração de uma função e uma forma eficiente de
documentá-la. Você verá que é bastante semelhante à declaração de uma função em Pascal.

function media ($n1, $n2) { // float function media(float, float)


$med = ($n1 + $n2) / 2;
return $med;
}

O comando “return” é utilizado para retornar o valor da função, mas é opcional; se o retirarmos, essa
função passa a ser um procedimento. Você lembra qual é a diferença conceitual entre eles? Função executa
comando(s) e retorna 1 valor. Procedimento executa comando(s) e não retorna valor. Ambos podem
receber parâmetros.

Apesar das particularidades acima, subprogramas em PHP se assemelham às outras linguagens de


programação. Em PHP, as funções também devem ser declaradas antes de serem chamadas, recebendo
parâmetros por valor ou referência. Apesar de não ser possível a uma função retornar mais que um valor é
possível retornar um vetor e, por conseqüência, mais que um valor.

3.3.1 Escopo de Variável


O PHP estabelece o escopo de qualquer variável como global, o que, conceitualmente, significa que pode
ser acessada em qualquer parte do programa. Entretanto, para o PHP essas variáveis globais não podem ser
acessadas em funções definidas pelo programador. Dentro das funções é criado o escopo local e somente
podem ser acessadas as variáveis criadas dentro da função, ou os parâmetros, que também possuem
escopo local. Contudo, é possível tornar uma variável global acessível, por meio de sua declaração dentro
da função. O exemplo abaixo mostra como isso pode ser feito.

$msg = "Bom dia";


function mensagem() {
global $msg;
echo "Gostaria de dizer: $msg";
}
mensagem();

A declaração “global” pode conter diversas variáveis separadas por vírgula.

3.3.2 Parâmetro por Referência


Por definição, a passagem de parâmetro em PHP é por valor. Você lembra qual a diferença entre passagem
de parâmetro por valor e referência? Por valor é feita uma cópia da variável dentro da função e,
alterando-se esta, a original (passada como parâmetro) não se altera. Por referência, qualquer alteração
feita no parâmetro (dentro da função) será refletida na original. Caso não se lembre ou tenha dificuldade
em entender, basta executar os dois exemplos abaixo e observar as diferenças.

18 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

function incrementa($numero) { function incrementa(&$numero) {


$numero++; $numero++;
} }
$a = 5; $a = 5;
incrementa($a); incrementa($a);

O exemplo da esquerda realiza a passagem de parâmetro por valor, onde é passado 5 como parâmetro,
alterado o valor da variável $numero para 6, mas o valor da variável $a permanece 5. O exemplo da
direita realiza a passagem de parâmetro por referência, ao alterar o valor da variável $numero para 6, o
valor da variável $a também é alterado para 6, isso porque, de verdade, a variável $numero não existe,
sendo uma referência (espécie de link) para a variável $a.

Observe que a indicação de que a passagem de valor será por referência é feita através da inclusão do
modificar e comercial (“&”) na declaração da função.

3.3.3 Parâmetro com Valor Padrão


O PHP permite a criação de parâmetros com valor padrão, que serão automaticamente assumidos, caso
nenhum outro valor seja passado. A passagem de valores para esses parâmetros na chamada função é
opcional, como no exemplo:

function mensagem($msg = "Bom dia") {


echo "Gostaria de dizer: $msg";
}
mensagem("Boa tarde"); // Primeiro teste
mensagem(); // Segundo teste

Na seqüência dos parâmetros, o parâmetro com valor padrão deve ser sempre o último.

Para Saber Mais


Leia o texto “Boas práticas para programação em PHP” de Tiago Alexandre Vailati, em que o autor fala
sobre a importância de padrões na boa prática do desenvolvimento de um projeto.

Nesta aula, concluímos a exploração da linguagem PHP. Agora podemos nos dedicar à programação para
Internet, assunto de nossa próxima aula.

Até lá!

Aula 04 – Formulários
Na aula anterior, concluímos nosso passeio pela linguagem PHP. Mas você deve ter sentido falta dos
comandos de entrada para possibilitar ao usuário digitar seu nome, sua idade e outros dados necessários.
Como estamos olhando PHP sob a ótica de uma linguagem de programação web, toda entrada de dados se
dará através de um formulário HTML.

19 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

4.1 Formulário em HTML


Fizemos uma passagem relâmpago por HTML; porém, mesmo para os que estão habituados com o HTML, o
uso de formulários não costuma ser comum. Se você faz parte da minoria acostumada ao formulário,
então, vamos recordar.

Abaixo, apresentamos uma página HTML que contém um formulário com os mais comuns e importantes
campos, sendo eles:

Entrada de texto simples – TEXT.


Entrada de texto senha – PASSWORD.
Entrada por seleção – SELECT.
Entrada por seleção de mais de um item – SELECT SIZE.
Entrada por caixa de seleção sim ou não – CHECKBOX.
Entrada por botões de seleção – RADIO.
Entrada de texto com mais de uma linha – TEXTAREA.
Entrada oculta – HIDDEN.
Botão de limpeza – RESET.
Botão de submissão – SUBMIT.

formulario.html
1. <html>
2. <head>
3. <title>Formulario</title>
4. </head>
5. <body>
6. <form method="post" action="http://localhost/formulario.php">
7. Nome:<br>
8. <input type="text" name="nome"><p>
9. Idade:<br>
10. <input type="text" name="idade"><p>
11. Senha:<br>
12. <input type="password" name="senha"><p>
13. Estado Civil:<br>
14. <select name="estadoCivil">
15. <option value="S">Soltero(a)
16. <option value="C">Casado(a)
17. <option value="O">Outro(a)
18. </select><p>
19. Gênero Musical:<br>
20. <select name="generoMusical[]" multiple size="5">
21. <option>MPB
22. <option>Pop/Rock
23. <option>Outros
24. </select><br>
25. Para selecionar mais que um mantenha o ctrl pressionado.<p>
26. Particularidades:<br>
27. <input type="checkbox" name="fumante" value="s">Fumante.<br>
28. <input type="checkbox" name="doador" value="s">Doador de orgaos
29. <p>Sexo:<br>
30. <input type="radio" name="sexo" value="M" checked>Masculino

20 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

31. <input type="radio" name="sexo" value="F">Feminino<p>


32. Observação:<br>
33. <textarea name="observacao" rows="3" cols="40"></textarea><p>
34. <input type="hidden" name="oculto" VALUE="10">
35. <input type="reset" value="Limpa">
36. <input type="submit" value="Envia">
37. </form>
38. </body>
39. </html>

Teste para ver como vai ficar, observe cuidadosamente cada detalhe. Vamos agora destacar alguns pontos
importantes:

O parâmetro “method” é utilizado na tag “<form>” para indicar como será o envio das
informações do formulário para o servidor. Existem dois métodos: GET e POST. Utilizando o
método “get”, o formulário envia todos os campos ao final da URL, enquanto que, utilizando o
método “post”, o formulário transmite todos os campos via formulário, imediatamente após a URL.
O melhor e mais seguro método é o “post”.
O parâmetro “action” é utilizado na tag “<form>” para indicar o endereço para onde serão
enviados os valores dos campos do formulário. Nós enviaremos estes valores para um programa
PHP; no exemplo acima, foi endereçado o programa “formulario.php” (que veremos mais adiante)
em “http://localhost”.
Os campos do formulário possuem o parâmetro “name” para possibilitar a identificação dos
valores dos campos no programa PHP. Cuidado para garantir que todos os campos possuam nomes
diferentes.
O valor 5 do parâmetro “size” do campo “select size” (size="5") indica que deve ser apresentado
um campo com 5 linhas para escolha. Este valor não tem nenhuma relação com a quantidade
máxima de valores que poderão ser selecionados.
O campo de entrada por botões de seleção “radio” é utilizado para forçar o usuário a escolher
apenas um valor. Para que HTML agrupe os botões “radio” estes devem possuir o mesmo valor
para o parâmetro “name”. No exemplo temos dois botões “radio” pertencentes ao grupo “sexo”.
O campo de entrada oculta “hidden” é utilizado para ocultar (esconder) do usuário informações
passadas pelo formulário. Esse campo não é exibido ao usuário. O parâmetro “value” é obrigatório
e é utilizado para especificar o valor oculto a ser enviado.
O botão de submissão “submit” é utilizando para enviar os valores dos campos para o endereço
definido em “action”, utilizando método definido em “method”.

4.2 Recebendo Valores


Vamos dar um passo de cada vez, para garantirmos o entendimento do mecanismo de recebimento de
valores que o PHP utiliza.

Salve o exemplo abaixo em um arquivo chamado “formulario.php”, conforme definido no “action” do


formulário; carregue a página “formulario.html”, informe valores para os campos e clique no botão
“Envia”.

Se tudo correu bem, você verá uma página com um monte de informações. Essas informações foram
impressas pela função “phpinfo()”, que fornece detalhes sobre o ambiente do cliente e do servidor, mas o
que realmente queremos que você observe é o tópico “PHP Variables”, que contém uma lista de variáveis
do PHP. Localize a variável “$_POST["nome"]” – pelo que já vimos até agora, podemos afirmar que se
trata de um vetor.

21 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

O vetor “$_POST” é uma variável de ambiente que contém todos os campos passados pelo formulário. O
índice “nome” foi definido no parâmetro “name” do campo que enviou esse valor (veja em nosso
formulário). Vamos agora ver se, na prática, conseguimos mesmo pegar um valor. Altere o programa
“formulario.php”, conforme o exemplo abaixo. Lembre-se de que esse programa não deve ser executado
diretamente, devendo ser chamado a partir da página “formulario.html”, para que possa capturar os
valores passados. Veja o exemplo:

formulario.php
1. <html>
2. <head><title>Formulario</title></head>
3. <body>
4. Você digitou os seguintes valores:<p>
5. <table border=1>
6. <?php
7. echo "<tr><td>Nome:</td><td>".$_POST["nome"]."</td></tr>";
8. echo "<tr><td>Idade:</td><td>".$_POST["idade"]."</td></tr>";
9. echo "<tr><td>Senha:</td><td>".$_POST["senha"]."</td></tr>";
10. echo "<tr><td>Estado Civil:</td><td>";
11. switch ($_POST["estadoCivil"]) {
12. case "S": echo "Soltero(a)"; break;
13. case "C": echo "Casado(a)"; break;
14. case "O": echo "Outro(a)"; break;
15. }
16. echo "</td></tr>";
17. echo "<tr><td>Genero Musical:</td><td>";
18. if (!isset($_POST["generoMusical"]))
19. echo "-";
20. else {
21. for ($i=0; $i < count($_POST["generoMusical"]); $i++)
22. echo $_POST["generoMusical"][$i]."<br>";
23. }
24. echo "</td></tr>";
25. echo "<tr><td>Fumante:</td><td>";
26. if (isset($_POST["fumante"]))
27. echo "Sim";
28. else
29. echo "Nao";
30. echo "</td></tr>";
31. echo "<tr><td>Doador de orgaos:</td><td>";
32. if (isset($_POST["doador"]))
33. echo "Sim";
34. else
35. echo "Nao";
36. echo "</td></tr>";
37. echo "<tr><td>Sexo:</td><td>";
38. if ($_POST["sexo"] == "M")
39. echo "Masculino";
40. else
41. echo "Feminino";
42. echo "</td></tr>";
43. echo "<tr><td>Observacao:</td><td>"
44. echo $_POST["observacao"]."</td></tr>";

22 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

45. echo "<tr><td>Campo Oculto:</td><td>"


46. echo $_POST["oculto"]."</td></tr>";
47. ?>
48. </table>
49. </body>
50. </html>

Em uma primeira análise, o código pode parecer assustador, mas não o é; com calma, é bem simples
identificar tudo o que está acontecendo. Incluímos uma tabela onde os campos do formulário ocupam as
linhas e as duas colunas são ocupadas por descrição e valor do campo, mas a principal razão de
colocarmos a tabela é misturar um pouco mais de HTML ao nosso programa, a fim de nos aproximarmos da
realidade dos programas que você vai utilizar no mundo real.

Como prometemos, vamos explorar o exemplo acima com calma, um passo de cada vez:

1. Na linha 5, fora da tag “<?php ... ?>”, é feita a identificação do início da tabela e, na linha 49, o
fechamento.
2. A linha 7 é um bom exemplo de como todos os campos serão apresentados dentro da tabela:
“<tr>” marca o início da linha; “</tr>” marca o final da linha; “<td>Nome:</td><td>” marca
o início da primeira coluna (<td>), informa a descrição do campo (Nome:), marca o final da
primeira coluna (</td>) e início da segunda coluna (<td>). O mais importante é o conteúdo da
segunda coluna “$_POST["nome"]”, que é concatenado utilizando o operador de concatenação
ponto-final “ . ”.
3. Da linha 10 a 16 é apresentado o campo “estado civil”, que segue o modelo do item acima com a
particularidade de um “switch”, para apresentar por extenso o valor escolhido no “select”.
Observe que não foi enviado exatamente o valor escolhido, mas uma letra (S, C ou O) definida no
parâmetro “value” para cada opção (option) do “select”;
4. Da linha 25 a 30, é apresentado o campo “fumante”, que utiliza um “if” para imprimir “sim” ou
“não”. A particularidade é que, quando o “checkbox” não é marcado, ele não passa valor, não
gerando uma variável para o programa PHP. A solução então é testar se a variável foi definida; isso
pode ser feito através da função “isset()”, que retorna verdadeiro se a variável estiver definida,
mesmo que com uma string vazia ou com valor zero.
5. Da linha 37 a 43 é apresentado o campo “sexo”, que também utiliza um “if” para imprimir por
extenso “masculino” ou “feminino”, a partir da letra (M ou F), também definida no parâmetro
“value” de cada “radio”. Se nenhum dos botões de radio for selecionado, também não será
passado valor; para resolver este problema, colocamos o parâmetro “checked” para o sexo
masculino, fazendo com que esse botão já seja apresentado marcado na página HTML;
6. Nas linhas 46 e 47 é feita a captura do valor do campo “oculto” da mesma forma que qualquer
outro comando. O PHP não distingue se o valor vem de um campo “hidden”, “text”, “password”
ou outro, apenas cria um índice para o vetor “$_POST”, com o rótulo definido no parâmetro
“name” do campo e atribui a essa posição do vetor o valor informado pelo usuário (digitado ou
escolhido, dependendo do campo) ou, no caso do campo “hidden”, definido pelo programador.
7. E, por fim, nas linhas 17 a 24, o campo do tipo “select size”, que consideramos o mais
interessante. Observe que, na definição do nome do campo no formulário HTML (parâmetro
“name”), colocamos colchetes “[]” (name="generoMusical[]") que já sabemos indicar que o
campo será um vetor. Então, o índice “generoMusical” do vetor “$_POST”, também é um vetor.
Como esse vetor é criado automaticamente pelo PHP, seus índices seguem a seqüência numérica
iniciando com 0 (zero). Então, se o usuário selecionou “MPB” e “Pop/Rock” no campo, teremos
dois valores que podem ser acessados por “$_POST["generoMusical"][0]” e
“$_POST["generoMusical"][1]”. Para saber quantos valores o usuário selecionou, utilizamos a
função “count()”, que retorna o tamanho (quantidade de elementos) do vetor; daí ficou fácil: foi
só fazer um “for” para percorrer todas as posições do vetor. Uma última observação é que o campo

23 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

“select size” também não passará valor se não houver seleção, nos obrigando novamente a
utilizar a função “isset()”, dessa vez, com o operador de negação “ ! ” para entrar no “if” quando a
variável não existir.

4.3 Passando Valores pelo Endereço


Nem toda entrada de dados em PHP (pensando em programação web) se dará através de um formulário
HTML; podemos também passar valores através do endereço (requisição) da página. Observe o exemplo
abaixo:

get.php
1. <html>
2. <head><title>Valores pelo Endereço</title></head>
3. <body>
4. <?php
5. if (!isset($_GET["nome"]))
6. echo "Variavel \"nome\" nao passada.<p>";
7. else
8. echo "_GET[\"nome\"] = ". $_GET["nome"] ."<p>";
9. if (!isset($_GET["idade"]))
10. echo "Variavel \"idade\" nao passada.<p>";
11. else
12. echo "_GET[\"idade\"] = ". $_GET["idade"] ."<p>";
13. ?>
14. </body>
15. </html>

Teste e veja o resultado. Imagine que o programa tenha informado que as variáveis “nome” e “idade” não
foram passadas. Agora, tente executar novamente digitando o seguinte endereço “http://localhost
/get.php?nome=maria&idade=18”.

Dessa vez, deve ter informado que o nome é maria e a idade é 18. Observe o endereço digitado:

A interrogação “?” após o nome do programa indica o início das variáveis passadas pelo método
GET.
O igual “=” separa o nome da variável do seu valor.
O e comercial “&” separa as variáveis.

Para recuperarmos esses valores em PHP basta utilizar o vetor “$_GET” de forma semelhante ao vetor
“$_POST”, que vimos há pouco.

4.4 Validando Campos


No nosso exemplo, criamos um formulário bem simples de cadastro com algumas informações, sendo uma
delas a idade, que utilizaremos para exemplificar. Imagine que o usuário informe “dezoito”, por extenso, no
campo idade. Nós esperávamos que ele tivesse informado o número 18, então, é sempre necessário validar
o valor de um campo antes de utilizarmos esse valor. Essa validação deve impedir que o usuário informe
valores indesejados por nosso programa. Claro que normalmente não temos como saber se o usuário
informou realmente um valor verdadeiro, mas é possível fazer um filtro com alguns detalhes que sabemos
que devem ou não ocorrer para o valor do campo. Por exemplo:

24 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

Todo e-mail deve ter algum(s) caracter(es), seguido por arroba “@”, seguido por mais algum(s)
caracter(es), seguido por ponto-final “ . ” e seguido por mais algum(s) caracter(es).
Todo nome completo deve ter, no mínimo, 2 caracteres, seguido por espaço e mais 2 caracteres.
Todo CPF deve ter seu dígito verificador válido. Fazendo-se um cálculo sobre os 9 primeiros
números o resultado deve ser os 2 últimos números.

Em nosso caso, para a idade, consideramos três regras:

1. Não pode ser vazia (não ter valor).


2. Pode ser formada somente por caracteres de 0 a 9.
3. Deve ser menor que 120.

O interessante é onde colocar essa validação. Se colocarmos no programa PHP, toda a vez que um valor
inválido for digitado deverá ser feita uma requisição ao servidor, executado o programa e devolvida uma
página de erro. Esse procedimento irá onerar o tráfego de rede e o processamento de nosso servidor, sem
contar que irá demorar um pouco mais, deixando o usuário insatisfeito. Mas como contornar essa situação
se o programa PHP é serve-side (roda no servidor)?

Simples: utilizando programação client-side (roda no navegador do cliente). Mas PHP faz isso? Não!
Teremos de utilizar outra linguagem de programação, como JavaScript, por exemplo, que foi a utilizada no
exemplo abaixo. Veja que isso extrapola o PHP e pode ser utilizado na página HTML para enviar dados para
scripts (programas) PHP, ASP, CGIs (programas) PERL, C etc.

Para testar, substitua a linha 6 (tag de abertura do formulário “<form>”) da nossa página HTML
(formulário.html) pela primeira linha 6 apresentada abaixo. Em seguida, inclua da linha 4 à linha 32, a
partir da linha 4 (depois da definição de título “<title>”) da nossa página, como segue:

formulario.html
6. <form method="post" name="formulario" action="http://localhost/formulario.php"
onsubmit="return validarIdade()">

3. <title>Formulario</title>
4. <script language="javascript">
5. <!--
6. function verificarValor(valor, valoresValidos) {
7. for (var i=0; i<valor.length; i++)
8. if (valoresValidos.indexOf(valor.substr(i,1)) < 0)
9. return false;
10. return true;
11. }
12. function validarIdade() {
13. var idade=document.formulario.idade.value;
14. if (idade=="") {
15. window.alert("Digite a sua idade.");
16. document.formulario.idade.focus();
17. return false;
18. }
19. if (!verificarValor(idade, '0123456789')) {
20. window.alert("A idade deve ser um numero inteiro.");

25 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

21. document.formulario.idade.focus();
22. return false;
23. }
24. if (idade>120) {
25. window.alert("Somente são permitidas idades entre 0 e 120.");
26. document.formulario.idade.focus();
27. return false;
28. }
29. return true;
30. }
31. //-->
32. </script>

Agora, tente informar uma idade inválida. Lembre-se de atualizar a página (F5), a cada alteração.

Nesta aula, fizemos uma revisão de formulário HTML e, em seguida, vimos como receber dados do
formulário em PHP. Também vimos como receber valores passados na string do endereço da página.

Por fim, fugimos um pouco de PHP para discutimos a validação de dados de formulários. Espero que tenha
conseguido perceber a importância de fazer a validação dos campos no lado do cliente, conforme as
melhores práticas de mercado. Na próxima aula, lidaremos com banco de dados.

Bom estudo e até lá!

Aula 05 – Banco de Dados


Nesta aula, veremos como acessar o banco de dados em PHP. Utilizaremos o PhpMyAdmin para criarmos um
banco com uma única tabela, que será utilizada em nosso exemplo.

5.1 PhpMyAdmin
O PhpMyAdmin é um ambiente web para administração do banco de dados MySQL, fornecido com o
EasyPHP. Uma opção ao seu uso seria fazer administração do MySQL, via console, utilizando sentenças SQL
em linhas de comando, mas alguns acham mais simples utilizar um ambiente.

Agora, vamos ver o passo a passo para executar o PhpMyAdmin e criar um banco de dados e uma tabela:

1. Garanta que o EasyPHP esteja em execução.


2. Clique com o botão direito do mouse sobre o ícone do EasyPHP, na barra de tarefas.
3. Escolha no menu aberto a opção “Administração” ou pressione CTRL+A:

26 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

4. Será apresentada a página de administração do EasyPHP. Clique em “MySQL Administrar”:

5. Será apresentada a página com o painel do PhpMyAdmin:

27 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

6. Informe “teste” como nome do novo banco de dados no campo texto “Criar novo Banco de
Dados” e clique no botão “Criar”:

7. Será criado o banco “teste” e apresentada a página de administração desse banco. Informe
“pessoa” como nome da nova tabela no campo texto “Nome:”, “3” no campo texto “Número de
arquivos:” e clique no botão “Executar”. O que foi traduzido como arquivos se refere a campos,
atributos ou colunas da tabela, e chamaremos de campo:

8. Será apresentada a página de definição dos campos. Informe apenas os valores de acordo com o
quadro abaixo e clique no botão “Salvar”.

Campo Tipo Tamanho Atributos Extra

idPessoa INT UNSIGNED auto_increment (x)

nome VARCHAR 50 ( )

idade INT 3 UNSIGNED ( )

28 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

Pronto! Já temos um banco de dados (teste), com uma tabela (pessoa) com 3 campos (idPessoa, nome e
idade). Agora você pode fechar as janelas do navegador.

5.2 Acessando Bancos de Dados


Um dos pontos fortes do PHP é a facilidade para o acesso a bancos de dados. Ele possui suporte para
vários bancos de dados, conforme vimos na nossa primeira aula. Neste curso nos concentraremos apenas
no MySQL, que compõem, ao lado do PHP, a dupla preferida pela maioria dos programadores PHP,
principalmente no ambiente Linux com Apache.

No MySQL, assim como em quaisquer servidores de bancos de dados, há procedimentos e regras para
acessar os dados. Vamos relembrá-los:

Conectar ao servidor.
Abrir banco de dados.
Executar comandos SQL.
Fechar o banco de dados.
Desconectar do servidor.

Geralmente, os dois últimos não precisam ser executados, pois, quando o programa termina, o banco é
fechado e a conexão encerrada automaticamente.

5.2.1 Conectar ao Servidor


A conexão a um servidor de banco MySQL em PHP é feita através da função “mysql_connect()”, que tem
como parâmetros: o endereço do servidor (host), o nome do usuário (login) e a senha para a conexão. A
função retorna o identificador da conexão, que será utilizado em outras operações de banco. No exemplo
abaixo, conectamos um servidor de banco que roda na mesma máquina do servidor de página (localhost),
utilizando um usuário pré-definido (root), sem senha (isso porque, no banco de dados, não foi definida
senha para esse usuário).

$conexao = mysql_connect("localhost", "root", "");

5.2.2 Abrir Banco de Dados


A abertura (ou seleção) do banco de dados é feita através da função “mysql_select_db()”, que tem como
parâmetros: o nome do banco de dados e o identificador da conexão (retornado pela função
“mysql_connect()”). A função retorna 0 (zero) em caso de falha ou 1 em caso de sucesso. No exemplo
abaixo, conectamos ao banco “teste”, que criamos usando o PhpMyAdmin.

$resultado = mysql_select_db("teste", $conexao);


if ($resultado == 0)
echo "ERRO DE CONEXAO AO BANCO DE DADOS.";
else {
...
}

Veja que estamos testando o retorno da função para somente prosseguir quando a conexão e abertura do
banco forem bem sucedidas.

29 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

5.2.3 Executar Comandos SQL


A execução de comandos, ou query, SQL (Structured Query Language) é feita através da função
“mysql_query()”, que tem como único parâmetro o comando SQL a ser executado. A função retorna 0
(zero), em caso de falha, ou 1, em caso de sucesso; ou seja, a consulta está sintaticamente correta e foi
executada pelo servidor. No exemplo abaixo, inserimos um registro (linha) na tabela “pessoa”, com os
valores “Ana” e “18”, lembre-se que definimos o campo “idPessoa” como auto-incremento.

$sql = "INSERT INTO pessoa (nome, idade) VALUES (\"Ana\", 18)";


$resultado = mysql_query($sql, $conexao);
if ($resultado == 0)
echo "ERRO DE EXECUCAO DE COMANDO SQL.";
else {
...
}

Novamente, estamos testando o retorno da função, para somente prosseguir quando a execução do
comando SQL for bem sucedida.

A partir desse ponto, utilizaremos alguns comandos SQL. Caso não se sinta totalmente confortável com o
tema, recomendamos a leitura de livros sobre banco de dados. O assunto será mais bem explorado na
disciplina “Banco de Dados”.

5.2.4 Executar Comandos SQL com Retorno


A execução de comando SQL, que retorna valores (SELECT), também é feita através da função
“mysql_query()”. Para capturarmos os valores retornados, devemos armazenar o retorno da função em uma
variável, que será tratada pela função “mysql_result()”, tendo como parâmetros: o identificador do
comando SQL (retorno da função “mysql_query()”), número do registro desejado e o identificador do
campo desejado. A função retorna o valor do campo especificado na linha especificada.

Um comando SELECT pode retornar vários registros (linhas ou tuplas), no exemplo da tabela “pessoa”
poderia retornar (Ana, Maria etc.), estando cada valor em um registro. Isso significa que, para um
resultado com vários registros, é preciso controlar o número do registro para tratá-lo. Para sabermos
quantos registros foram retornados, podemos utilizar a função “mysql_num_rows()”, que tem como
parâmetro o identificador do comando SQL (retorno da função “mysql_query()”). A numeração dos
registros inicia-se por 0 (zero); assim, se a função “mysql_num_rows()” retornar 2, significa que foram
retornados 2 registros, sendo o primeiro o número 0 e o segundo o número 1. O número do último será
sempre o valor retornado pela função menos 1.

No exemplo abaixo, imprimimos todos os campos (idPessoa, nome e idade) de todos os registros da tabela
“pessoa”, ordenando o resultado pelo campo “idPessoa”. Para percorrer todos os registros retornados
utilizaremos um “for”.

$SQL = "SELECT idPessoa, nome, idade FROM pessoa ORDER BY idPessoa";


$resultado = mysql_query($SQL, $conexao);
for ($i=1; $i<= mysql_num_rows($resultado); $i++) {
echo "Código: ". mysql_result($resultado,$i-1,"idPessoa") ."<br>";
echo "Nome: ". mysql_result($resultado,$i-1,"nome") ."<br>";
echo "Idade: ". mysql_result($resultado,$i-1,"idade")."<p>";

30 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

5.3 Implementando uma Manutenção


Vimos apenas a “ponta do iceberg”. Existe, em PHP, mais uma tonelada de funções dedicadas a banco de
dados, mas, com apenas as que vimos, já é possível programar praticamente qualquer funcionalidade,
utilizando o MySQL graças a flexibilidade conseguida com a execução de comandos SQL.

Criamos um exemplo que apresenta uma manutenção completa para pessoa. Por manutenção, vamos
considerar as operações de inclusão, consulta (listagem), alteração e exclusão. Procurou-se equilibrar a
didática com a prática de mercado, tentando gerar um exemplo que seja fácil de entender e, ao mesmo
tempo, robusto e similar ao que é praticado no mercado. Para tanto, fez-se a divisão em três programas,
que se relacionam para executar as operações citadas. A figura abaixo apresenta a integração entre esses
programas.

Figura 5.1 – Interação entre os Programas.

A entrada é pelo programa "banco.php", que irá consultar e listar todos os registros da tabela "pessoa".
Nessa página, o usuário terá três possibilidades:

1. Clicar no link "Editar" de algum registro. Fazendo isso, será enviado ao programa
"banco_edita.php", que apresenta um formulário com os dados a serem editados, após a edição,
ao clicar no botão "Salvar" e será enviado para o programa "banco_executa.php", que fará a
gravação do registro e apresentará uma mensagem informando que foi editado com sucesso e um
link para voltar ao programa "banco.php".
2. Clicar no link "Excluir" de algum registro. Fazendo isso, será enviado ao programa
"banco_executa.php", que fará a exclusão do registro e apresentará uma mensagem informando
que foi excluído com sucesso e um link para voltar ao programa "banco.php".
3. Digitar valores no formulário de inserção de nova pessoa e clicar no botão "Inserir". Fazendo isso,
será enviado ao programa "banco_executa.php", que fará a inclusão do novo registro e
apresentará uma mensagem informando que foi incluído com sucesso e um link para voltar ao
programa "banco.php".

Agora teste o exemplo.

banco.php

31 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

<html>
<head><title>Banco</title></head>
<body>
Manutencao de Pessoa:<p>
<table border=1>
<tr bgcolor="#909090">
<td>Codigo</td>
<td>Nome</td>
<td>Idade</td>
<td>Editar</td>
<td>Excluir</td>
</tr>
<?php
// Conecta no banco
$conexao = mysql_connect("localhost", "root", "");
$resultado = mysql_select_db("teste", $conexao);
if ($resultado == 0)
echo "ERRO DE CONEXAO AO BANCO DE DADOS.";
else {
$SQL = "SELECT idPessoa, nome, idade FROM pessoa ORDER BY idPessoa";
$resultado = mysql_query($SQL, $conexao);
for ($i=1; $i<= mysql_num_rows($resultado); $i++) {
if (($i%2) == 1)
echo "<tr bgcolor='#FFFFFF'>";
else
echo "<tr bgcolor='#C0FFC0'>";
echo "<td>". mysql_result($resultado,$i-1,"idPessoa") ."</td>";
echo "<td>". mysql_result($resultado,$i-1,"nome") ."</td>";
echo "<td>". mysql_result($resultado,$i-1,"idade") ."</td>";
echo "<td><a href='http://localhost/banco_edita.php?op=ED&idPessoa=". mysql_result($resulta
echo "<td><a href='http://localhost/banco_executa.php?op=EX&idPessoa=". mysql_result($resul
echo "</tr>";
}
}
?>
</table>
<p>
Inserir nova pessoa:<br>
<form method="post" action="http://localhost/banco_executa.php">
<input type="hidden" name="op" value="IN">
Nome:<br>
<input type="text" name="nome"><p>
Idade:<br>
<input type="text" name="idade" value=""><p>
<input type="submit" value="Inserir">
</form>
</body>
</html>

32 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

Aqui, destacamos dois pontos:

1. O uso do índice “op”, nos vetores “$_GET” e “$_POST”, para indicar a operação a ser realizada
(IN=Inclusão, ED=Edição, EX=Exclusão).
2. A passagem do valor de “idPessoa” entre os programas, para identificar o registro a ser operado.

Nesta aula, vimos como criar um banco e uma tabela com o phpMyAdmin e como trabalhar com banco no
PHP. Por fim, colocamos a “mão na massa” com um exemplo simples, mas completo. Agora, você já é
praticamente um programador PHP. Na próxima aula, falaremos sobre sessões e cookies.

Bom proveito!

Aula 06 – Sessão e Coookie


Nesta aula, falaremos sobre sessão e cookies e veremos como o PHP trata essas funcionalidades tão
interessantes e perigosas.

6.1 Sessão
Qual é o correto: sessão ou seção?

Você acertou se respondeu sessão. O termo em inglês é session e o significado encontrado no dicionário
Aurélio é: “Espaço de tempo durante o qual se realiza um trabalho ou parte dele”. No conceito de web, as
sessões são usadas para armazenar dados enquanto o navegador estiver aberto. Normalmente, dados
importantes como nome e tipo de usuário, mas, por questão de segurança, não é recomendável armazenar
senha.

Basicamente são três as operações possíveis em sessões:

Iniciar uma nova sessão – Através da função “session_start()”.


Manipular dados na sessão – Através do vetor “$_SESSION” que permite a definição de chave e
valor.
Encerrar uma sessão – Através da função “session_destroy()”. O encerramento da sessão não é
obrigatório, mas pode ser feito caso a página ofereça ao usuário a possibilidade de logoff, por
exemplo.

No exemplo abaixo, realizamos as três operações em programas diferentes. Teste o exemplo iniciando a
sessão, depois, manipulando várias vezes e, finalmente, encerrando. Depois de encerrar, tente manipular
novamente para ver o que ocorre.

sessao_iniciar.php
1. <html>
2. <head><title>Sessao</title></head>
3. <body>
4. <?php
5. session_start();
6. $_SESSION["nome"] = "Maria";
7. $_SESSION["idade"] = 18;
8. echo "Sessao iniciada.<p>";
9. ?>

33 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

10. <p>
11. <a href="sessao_manipular.php">Manipular Sessao</a><br>
12. <a href="sessao_encerrar.php">Encerrar Sessao</a><br>
13. </body>
14. </html>

Observe que a sessão deve ser iniciada em todos os programas pela função “session_start()”, mesmo
para ser encerrada. Isso porque a função de iniciação também tem o papel de se ligar (recuperar) a uma
sessão criada.

6.2 Cookie
Cookies são variáveis gravadas no navegador do visitante, podendo ser recuperadas apenas pelo site que
gravou. Os cookies foram inicialmente idealizados para permitir que o visitante pudesse acessar várias
vezes uma página sem ter que fornecer as mesmas informações a cada acesso.

Você nunca deve armazenar dados sigilosos em um cookie, por eles não oferecerem segurança. Se for
armazenada em um cookie a identificação de acesso de um usuário e alguém capturar essa informação, por
exemplo, poderá acessar o site como sendo o usuário.

Existem dois tipos de cookies: os gravados e os de sessão. O cookie gravado é armazenado em arquivo
texto no computador do visitante e não é excluído quando o navegador é encerrado, possuindo data e hora
de expiração. O cookie de sessão é armazenado em memória e permanece ativo apenas enquanto o
navegador estiver aberto.

O segundo tipo é responsável pela criação das sessões que vimos há pouco. Muitos consideram que cookie
é apenas o primeiro tipo apresentado, então, quando estiver pesquisando o assunto, deverá encontrá-los,
na maioria das vezes, em partes diferentes: sessão e cookie.

Como já falamos sobre sessão, ou cookie de sessão, só nos falta tratar do segundo tipo; o PHP tem uma
série de funções para tratá-los. No entanto, nos restringiremos ao básico de seu funcionamento.

Assim como em sessão temos três operações básicas que podem ser realizadas sobre um cookie: criação,
manipulação e exclusão.

A criação de cookies é feita através da função “setcookie()”, que tem como parâmetros: nome do cookie,
valor, data de expiração, caminho da página que gravou o cookie, domínio do site e segurança (1 indica
que só pode operar em conexão segura - https). O único parâmetro obrigatório é o nome do cookie.

A manipulação de cookie é dividida entre leitura e gravação. A leitura é feita através do vetor “$_COOKIE”
e a gravação através da função “setcookie()”, assim como na criação.

A exclusão de cookies é também feita através da função “setcookie()”, redefinindo seu valor como uma
string vazia, com o cuidado de que todos os parâmetros (exceto valor e data de expiração) sejam idênticos
a sua criação.

O exemplo abaixo faz exatamente o mesmo que o anterior, mas, agora, utilizando cookie. Para testar
completamente o exemplo, crie um cookie e espere mais que 5 minutos para tentar manipulá-lo; crie
novamente o cookie, feche o navegador e tente manipulá-lo em menos de 5 minutos, como no exemplo:

34 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

cookie_criacao.php
1. <html>
2. <head><title>Cookie</title></head>
3. <body>
4. <?php
5. setcookie("nome", "Maria", time()+30);
6. setcookie("idade", 18, time()+300);
7. //Expiram em 5 minutos
8. echo "Cookies criado.<p>";
9. ?>
10. <a href="cookie_manipulacao.php">Manipular</a><br>
11. <a href="cookie_exclusao.php">Excluir</a><br>
12. </body>
13. </html>

No exemplo, foi utilizada a função “time()” para pegar a data e hora do sistema. Tudo muito comum,
exceto pelo fato de essa função retornar a data e hora no formato “timestamp Unix”, que é o número de
segundos desde a era Unix (00:00:00 GMT de 1º de janeiro de 1970). Por isso que, para que o cookie
expirasse em 5 minutos, utilizamos “time()+300” (300 = 60 (segundos por minuto) * 5 (minutos).

Uma última observação: o cookie só estará disponível para ser lido no acesso seguinte a sua criação.

Para saber mais


Leia o texto “Certificação PHP”, de Paulo Sant’Anna, onde o autor explica o processo de certificação em
PHP.

Nesta aula, falamos sobre seções e cookies. Fizemos um sobrevôo em PHP, vendo e explorando os
principais pontos da linguagem. O PHP é muito popular, então, será fácil você continuar sua jornada por si
só. Vão aqui três sugestões de sites onde pode encontrar diversos programas prontos para estudar:

PHP Mania
Script Brasil
WebMasters On-Line

Parte 02 - Python

Aula 01 – A Linguagem Python


Python começou a ser desenvolvida em 1989, por Guido Van Rossum, na Holanda, tendo sido a primeira
versão pública da linguagem lançada em 1991. A linguagem Python é mantida pela Python Software
Foundation (PSF), que determina os rumos da linguagem. Python possui uma licença Open Source
certificada pela OSI, compatível com a GPL.

A documentação da linguagem pode ser obtida no site oficial da linguagem ou no site da comunidade
brasileira.

Python é uma linguagem multiplataforma, podendo ser instalada em: UNIX, Linux, Windows e MacOS X. Nas

35 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

diversas distribuições Linux, geralmente, o Python já é instalado por padrão. Em Python, tanto podemos
programar orientados a objetos como na forma estrutural.

1.1 Características e Ambientes de Programação


A linguagem Python é interpretada, ou seja, para executar os programas escritos em Python, é necessária a
carga do interpretador (uma máquina virtual), que, por sua vez, carrega o script e executa-o.

Python faz o gerenciamento automático de memória, recuperando automaticamente objetos da memória


que não são mais utilizados (coleta de lixo).

É possível a utilização de um ambiente interativo de desenvolvimento (IDE) executando o comando


python:

$ python

No IDE Python, o prompt apresentado é “>>>”. Na frente desse prompt, pode ser digitado qualquer
comando Python, com a possibilidade até de escrevermos pequenos scripts. Os scripts (programas) em
Python têm a extensão “.py”.

Há vários ambientes de desenvolvimento destinados ao Python, entre eles, podemos destacar o IDLE, um
IDE em que podemos desenvolver e testar scripts python. O Eclipse também possui uma extensão para o
desenvolvimento Python, o PyDev.

Para mantermos a tradição dos cursos de linguagem de programação, faremos nosso primeiro Hello World:

#!/usr/bin/python
#-*- coding: utf-8 -*-
# pequeno script que imprime a mensagem Hello World
print 'Hello World'

A primeira linha desse script, que começa com #!, é útil caso você o torne um arquivo executável. O
Unix/Linux usará esse interpretador /usr/bin/python para executar o script.

A segunda linha é uma definição da codificação do editor do script python, conforme proposto pela
PEP-0263. Essa codificação pode ser utf-8, iso-8859-1, ascii etc., dependendo do editor que você usar.
Essa linha só será necessária se você usar caracteres especiais como, por exemplo, acentuação nas strings.

Na segunda linha, temos um comentário iniciado por '#'. Tudo o que estiver à direita de #, até o final da
linha, é considerado comentário. Outra forma de colocar um comentário é com aspas triplas ( ' ' ' ) ou ( "
" " ); nesse caso, um bloco inteiro será comentado (comentário de uma ou mais linhas); o final do
comentário também é indicado por aspas triplas.

Na terceira linha, temos o script propriamente dito. O comando print mostra a string Hello World na saída
padrão. Aqui, valem dois comentários: Python não faz distinção entre aspas simples ou aspas duplas para
delimitar a string e as linhas do script, ao contrário de muitas linguagens de programação, como C e Java.
Se uma instrução é muito comprida ou se, para fins de clareza, fica melhor em várias linhas, podemos
quebrar uma instrução colocando uma contra-barra no final da linha:

36 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

print \
'Uma string muito longa......'

Em um terminal do sistema operacional (DOS ou shell), podemos executar o script passando o nome do
script para o interpretador:

$ python script.py

1.2 Tipos de Dados em Python


Python, assim como qualquer linguagem de programação, faz uso de diversos tipos de dados simples, que
incluem números e strings. Além desses tipos simples, Python possui uma série de estruturas de dados que
dão flexibilidade no manuseio dos dados. Veremos agora as principais características dos tipos de dados.

1.2.1 Números
Variáveis numéricas, em Python, podem ser inteiros (simples ou longo), pontos flutuantes ou números
complexos. A tabela a seguir mostra a especificação desses tipos:

Tabela 1.1 - Tipos Numéricos

Especificação (exemplos) Significado

2000, -1, 0 Inteiros simples

99999999999999999999999999999999L Inteiro longo (tamanho ILIMITADO)

3.1416, 3.14e-10, 3E100 Ponto Flutuante

0644, 0x00ff, Octal e Hexadecimal

1+2j, 3.0+4J Números Complexos

Não é necessário declarar uma variável em Python; antes de usá-la, ela será criada no momento da
primeira atribuição, assim:

>>> x = 1

Uma particularidade de Python é que duas ou mais variáveis podem ser atribuídas, com uma única
instrução:

>>> x, y, z = 1, 2.0, 3
>>> print x, y, z
1 2.0 3
>>> x, z = z+1, x
>>> print x, y, z
3 2.0 1

No exemplo anterior, a variável x é um número inteiro; se atribuirmos a ela um valor em ponto flutuante,
ou qualquer outro tipo, x passará a ser uma variável em ponto flutuante, ou de outro tipo que tenha sido
atribuído. No exemplo a seguir, usamos a função type( ) para determinar o tipo da variável:

37 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

>>> type ( x )
<type 'int'>
>>> x = x + y
>>> print x
3.0
>>> type ( x )
<type 'float'>

Essa característica do Python ocorre pela forma como essas variáveis são atribuídas. Vamos pegar a
segunda atribuição de x, do exemplo anterior: x = x + y. O Python realizará os seguintes passos:

Um objeto é criado na memória com o valor da atribuição e um tipo associado ao objeto. Nesse
caso, o objeto será 3.0 e o tipo será 'float', pois, quando somamos um 'int' com um 'float', o
resultado necessariamente será 'float'.
Vincular o objeto 3.0 à variável x.

Se criarmos agora uma nova variável com o mesmo valor, não será criado um novo objeto, apenas será
criado um vínculo entre a nova variável com o objeto já existente. Por exemplo:

>>> w = 3.0

Nesse caso, tanto x quanto w farão referências ao mesmo objeto (3.0), como indicado na Figura 1.1:

Figura 1.1 – Referências de Nomes a Objetos.

Os principais operadores lógicos e aritméticos que manipulam números em Python são, de acordo com a
tabela:

Tabela 1.2 - Operadores Lógicos e Aritméticos

Operador Operação Operador Operação

+ Adição << Desloca bits à esquerda

- Subtração >> Desloca bits à direita

* Multiplicação & AND lógico

/ Divisão | OR lógico

% Resto da divisão ^ XOR lógico

** Exponenciação ~ NOT lógico

38 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

Além dessas operações, o Python, assim como outras linguagens, permite também o incremento ou
decremento de um valor a uma variável, de forma direta:

x = x + y equivale a x += y
x = x - y equivale a x -= y

1.2.2 Strings
A variável string é uma seqüência imutável de caracteres, ou seja, o objeto string não pode ser alterado.
Caso uma nova atribuição já iniciada ocorra a uma string, esse novo valor será outro objeto, ao qual a
variável string fará referência, tal como vimos com os números na seção anterior. Veja o código abaixo:

>>> x = ”Python"

A variável x, que referenciava um valor float, agora referencia uma string, conforme a figura:

Figura 1.2 – Alteração de Referência de Nome a Objeto.

Uma string pode ser composta por um bloco de texto, limitando-o com aspas triplas '''...''':

>>> texto = '''


Esse texto será impresso em uma linha
e este em outra linha'''
>>> print texto
Este texto será impresso em uma linha
e este em outra linha

Strings podem ser concatenadas e multiplicadas através dos operadores "+" e "*", respectivamente.

>>> s1 = "Monty "


>>> s2 = "Python"
>>> s3 = s1 + s2
>>> print s3
Monty Python
>>> print 'Os cavaleiros que dizem ' + " Ni!" * 3
Os cavaleiros que dizem Ni! Ni! Ni!

Os caracteres de uma string podem ser acessados individualmente, assim como trechos da string
(substring).

39 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

Os índices da string podem ser positivos, quando especificam a posição do caractere a partir do início da
string, ou negativos, quando especificam o caractere a partir do final da string. Considere a variável
s='Python', temos as seguintes posições de índices dentro da string:

P y t h o n

0 1 2 3 4 5 6

-6 -5 -4 -3 -2 -1

Veja o resultado dos comandos:

>>> print s[5]


n
>>> print s[-4]
t

Também é possível especificar uma substring usando o formato [inicio:fim]:

>>> print s[2:5]


tho
>>> print s[-3:-1]
ho

Os índices [:fim] e [inicio:] especificam, respectivamente, uma substring do início da string até certa
posição, e de certa posição até o final da string:

>>> print s[:3]


Pyt
>>> print s[3:]
hon

Temos, em Python, vários métodos que manipulam strings, sendo os principais:

Tabela 1.3 - Métodos de Strings

Método Significado

s.capitalize() Retorna a string com o primeiro caractere maiúsculo

s.count(subs) Retorna o número de ocorrências da substring em s

s.startwith(subs) Retorna True se s começa com a substring

s.endwith(subs) Retorna True se s termina com a substring

s.isalnum() Retorna True se s é alfanumérico (letras e/ou números)

s.isalpha() Retorna True se s é alfabético (apenas letras)

s.isdigit() Retorna True se s é uma string que contém apenas números

s.islower() Retorna True se s todas as letras da string são minúsculas

40 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

s.isupper() Retorna True se s todas as letras da string são maiúsculas

s.lower() Retorna a string em minúsculo

s.upper() Retorna a string em maiúsculo

s.swapcase() Retorna a string invertida entre maiúsculas/minúsculas

s.title() Retorna a string s com a primeira letra de cada palavra maiúscula

s.split() Retorna uma lista com as palavras da string

s.center(t) Retorna a string s centralizada (em t espaços)

s.ljust(t) Retorna a string s justificada a esquerda (em t espaços)

s.rjust(t) Retorna a string s justificada a direita (em t espaços)

s.strip() Retorna a string s sem os espaços iniciais e finais

s.lstrip() Retorna a string s sem os espaços iniciais

s.rstrip() Retorna a string s sem os espaços finais

s.find(subs) Retorna a posição da primeira ocorrência da substring em s

s.replace(subs,rep) Retorna a string s com a substring no lugar de rep

1.2.3 Listas
A lista é uma das principais estruturas do Python, devido à sua grande flexibilidade. As principais
características de uma lista são:

coleção ordenada de objetos arbitrários;


acesso pelo deslocamento (assim como os caracteres de uma string);
comprimento variável;
conteúdo heterogêneo;
aninhamento arbitrário (você pode ter diferentes tipos de elementos em uma lista, inclusive outras
listas);
mutabilidade (ao contrário da string, uma lista pode ser alterada).

Listas são especificadas entre colchetes e os objetos da lista são separados por vírgula, como no exemplo:

>>> Lista1 = [ '0', 1, "dois", 3.0, [ 4, 'cinco' ] ]


>>> print Lista1 [ -3 ]
dois
>>> print Lista1 [ 4 ]
[ 4, 'cinco' ]
>>> print Lista1 [ 4 ][ 0 ]
4

É possível alterar um objeto de uma lista simplesmente fazendo uma atribuição a um índice da lista. Note
que, diferentemente de strings e números, não é criado um novo objeto para o novo valor; o objeto lista
original é alterado.

41 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

>>> Lista1[0]='zero'
>>> print Lista1
[ 'zero', 1, 'dois', 3.0, [ 4, 'cinco' ] ]

A seguir, listamos alguns métodos de listas:

Tabela 1.4 - Métodos de Listas

Método Significado

L.append(x) Insere o objeto x no final da lista L

L.extend(x) Insere cada item de x no final da lista L

L.sort() Ordena os objetos da lista L em ordem crescente

L.reverse() Ordena os objetos da lista L em ordem decrescente

L.index(x[, i[, j ]]) Retorna o deslocamento da primeira ocorrência de x na lista L. Se i e j forem


passados, retorna a primeira ocorrência entre i e j na lista L

L.insert(i, x) Insere o objeto x na posição i da lista L

L.count(x) Retorna a quantidade de objetos iguais a x na lista L

L.remove(x) Exclui a primeira ocorrência do objeto x na lista L

L.pop([i]) Exclui e retorna o último objeto da lista L. Se i for passado, exclui e retorna o
objeto de índice i da lista L

1.2.4 Dicionários
Dicionários são tabelas mutáveis, assim como as listas, mas não são acessados por índices e sim por
chaves. Os objetos de dicionários são armazenados em uma ordem aleatória e implementados como uma
tabela de hashing. Um dicionário é delimitado por chaves "{}" e as entradas no dicionário são separadas
por vírgula, sendo cada entrada formada pelo par: chave:valor.

>>> aluno = { "nome" : "Zezinho", "nota" : 5.0, "faltas" : 0 }


>>> print aluno
{'nota': 5.0, 'faltas': 0, 'nome': 'Zezinho'}

Note que a ordem em que aparecem as entradas no dicionário não é a mesma que foi digitada. Isso não
importa, pois a recuperação dos dados se dará pela chave e não pelo índice:

>>> print aluno['nome']


'Zezinho'
>>> print aluno['faltas']
0

42 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

Tabela 1.5 - Métodos de Dicionários

Método Significado

d.has_key( k ) Retorna True se o dicionário d tem a chave k

d.keys( ) Retorna uma lista com as chaves do dicionário d

d.values( ) Retorna uma lista com os valores do dicionário d

d.items( ) Retorna uma lista de tuplas (*) com os pares (chave,valor) do dicionário
d

d.get( k ) Retorna o valor associado à chave k no dicionário d. Se não encontrar,


retorna um valor nulo (None).

d1.update( d2 ) Acrescenta os objetos do dicionário d2 no dicionário d1. (CUIDADO:


chaves duplicadas são sobrepostas sem aviso)

43 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

(*) Em seguida, falaremos de tuplas.

1.2.5 Tuplas
Tuplas são seqüências de objetos como as listas, mas que diferem destas por serem imutáveis e de
tamanhos fixos. Tuplas são delimitadas por parênteses e seus objetos são separados por vírgulas:

>>> primos = ( 2 , '3' , 'cinco' , 7 , '...' )


>>> print primos[3:]
( 7, '...' )

Tuplas não têm métodos, mas, assim como as outras estruturas de dados do Python, permitem alguns
comandos e funções de manipulação como, por exemplo:

len() : função que retorna o tamanho do objeto;


in : operação que retorna True se objeto está presente na seqüência (tupla);
+ : concatena objetos;
* : replica objetos.

>>> print len(primos)


5
>>> 5 in primos
False
>>> print primos + ( 79, 83, 89 )
( 2, '3' , 'cinco' , 7 , '...' , 79, 83, 89 )
>>> print primos + ( 79, 83, 89 ) + ( ' . ' , ) * 3
( 2, '3' , 'cinco' , 7 , '...' , 79, 83, 89, ' . ', ' . ', ' . ' )

1.2.6 Conversão entre Tipos


É possível converter tipos entre listas, strings e tuplas usando as funções str(), list() e tuple():

>>> seq = '123' # seq é uma string


>>> print seq
123
>>> seq = tuple ( seq ) # seq agora é uma tupla
print seq
( '1' , '2' , '3' )
>>> seq = list( seq ) # agora seq é uma lista
>>> print seq
[ '1', '2', '3' ]
>>> seq = str( seq ) # seq é novamente uma string
>>> print seq
[ '1', '2', '3' ] # mas note que o valor original foi alterado

O que aconteceria se você convertesse novamente a string seq em uma tupla? Faça o teste e tente entender
o que aconteceu.

Sobre a utilização da "\", para quebrar uma instrução em várias linhas: quando colocamos delimitadores

44 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

de seqüências { }, [ ] e ( ), não precisamos da "\", uma vez que o Python entende que a instrução só
acaba quando encontrar o delimitador apropriado. Veja o exemplo:

lista = [ (0, 1),


(1, 2),
(0, 3) ]

1.3 Palavras Reservadas


Python tem um conjunto de palavras reservadas que não podem ser utilizadas como nomes (variáveis,
funções, classes etc.). São elas:

Tabela 1.6 - Palavras Reservadas do Python

and assert break class continue

def del elif else except

exec finally for from global

if import in is lambda

not or pass print raise

return try while yeld

Além disso, os nomes em Python devem começar, necessariamente, com uma letra ou uma sublinha ( _ ).
Nomes que começam e terminam com duas sublinhas ( _ _ ) são nomes com significados especiais no
Python, por isso, devem ser evitados.

1.4 Entrada e Saída de Dados


Há duas funções do Python que manipulam entradas de dados: input( ) e raw_input( ). A função input(
) permite a entrada de qualquer tipo de dados (string, números, listas etc.), enquanto a função
raw_input( ) permite a entrada apenas de strings. Qualquer valor que for entrado pela função
raw_input( ) será automaticamente transformado em string.

>>> valor = input( ' Valor: ' )


Valor: 10 # entre com um valor inteiro
>>> type ( valor )
< type 'int' >
>>> valor = input( ' Valor: ' )
Valor: [ 1, 2, 3 ] # entre com uma lista
>>> type ( valor )
< type 'list' >
>>> valor = raw_input( ' Valor: ' )
Valor: Curso de Python # entre com uma string
>>> valor = input( ' Valor: ' )
Valor: 'Curso de Python' # entre com outra string (não se esqueça
# agora das aspas!!!

45 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

Já vimos o comando de saída, print, mas ainda temos de falar sobre a formatação da saída. Uma forma de
impressão é através da concatenação de string:

>>> filme = 'A Vida de Brian'


>>> ano = 1979
>>> print 'Filme: ' + filme + ', Ano de Produção: ' + str( ano )
Filme: A Vida de Brian, Ano de Produção: 1979

Uma alternativa para imprimir a mesma mensagem é:

>>> print 'Filme: %s, Ano de Produção: %s' % ( filme, ano )

Nesta aula, estudamos os conceitos iniciais da linguagem, alguns comandos básicos e os tipos de dados
utilizados pelo Python. Esses tipos de dados serão utilizados nas próximas aulas.

Até lá!

Aula 02 – Programação
Python é uma linguagem de programação orientada a objetos e programação estruturada, ou seja, você
pode escrever programas em Python sem, necessariamente, trabalhar com orientação a objetos. Veremos,
nesta aula, alguns conceitos iniciais que permitem à linguagem ser tratada, exclusivamente, como
estruturada.

2.1 Estruturas de Controle


Assim como outras linguagens de programação de alto nível, Python tem estruturas de controle como
laços, repetições e condições. Agora veremos cada uma dessas estruturas: a instrução if.

A instrução (if) testa uma condição e executa um bloco de instruções caso a condição retorne verdadeiro. É
possível fazer vários testes condicionais aninhados (elif), a fim de executar um bloco de instruções
específico, correspondente a certa condição. Por fim, é possível executar um bloco de instruções caso todas
as condições anteriores tenham retornado falso (else). A forma geral da instrução if é:

if <condição 1> : # teste if (obrigatório)


<bloco de instruções associado condição 1> # (obrigatório)
elif <condição 2> : # teste elif (opcional)
<bloco de instruções associado à condição 2> ...
else: # instrução else (opcional)
<bloco de instruções associado à condição 1>

Qualquer script Python pode ser implementado no ambiente de desenvolvimento, mas, para comodidade de
algumas explicações e para exercitarmos o manuseio de scripts, passaremos a usar também scripts a partir
de agora.

Para carregar os scripts a partir do ambiente Python, você deve declarar a variável de ambiente
$PYTHONPATH com o caminho do seu diretório de scripts. Acrescente a seguinte linha no arquivo
/etc/profile:

46 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

PYTHONPATH="seu/caminho/para/os/scripts/python"

Para facilitar o acompanhamento, todos os scripts constarão em uma numeração de linhas à esquerda,
mas esses números não fazem parte do script. Então, vamos ao nosso primeiro script teste2_01.py.

teste2_01.py:
1. #!/usr/bin/python
2. #-*- coding: utf-8 -*-
3. x = 1
4. if x == 1:
5. print 'Igual'

As duas primeiras linhas desse script nós já conhecemos. Na linha 4, temos a instrução if, que testa se x
igual a 1. Note o sinal de ":" - toda estrutura de controle no Python tem esses dois pontos. Note também
que, em Python, não existem delimitadores de blocos de instruções como as chaves "{ }" em Linguagem C
ou Java ou o "Begin/End" no Pascal. Então, como o Python sabe onde começa e onde termina um bloco de
instruções? Resposta: "Aninhamento". Isso mesmo: note que a instrução print, na linha 5, está deslocada
com relação à instrução if. Essa característica vale para todas as delimitações de bloco de instruções,
como funções, repetições, classes etc. Esse deslocamento tanto pode ser de espaços quanto de tabulações.
Mais uma dica: se usar espaços, use sempre espaços; se usar tabulação, use sempre tabulação. Misturar os
dois pode gerar erros difíceis de serem identificados.

Para executar o script, temos duas opções: ou pela linha de comando ou pelo ambiente interativo Python.

Pela linha de comando, fica assim:

$ python teste2_01.py
Igual

Ou, no ambiente interativo Python:

>>> import teste2_01


Igual

Note que, se o script já foi importado uma vez, não surtirá nenhum resultado nas próximas importações.
Se quiser re-executar o script, use a função reload( ), que tem como objetivo recarregar o módulo já
importado:

>>> import teste2_01


Igual
>>> import teste2_01
>>> reload ( teste2_01 )
Igual

Acrescentando a instrução else:

teste2_02.py
4. if x == 1:

47 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

5. print 'Igual'
6. else:
7. print 'Diferente'
8. print 'Fim do script'

O último print, da linha 8, será executado independentemente do resultado da condição. Cuidado, pois, se
você colocar as instruções print, alinhadas assim:

4. if x == 1:
5. print 'Igual'
6. else:
7. print 'Diferente'
8. print 'Fim do script'

O resultado será que a linha 8 só será executada se a condição for falsa.

A tabela a seguir mostra os vários tipos de operadores condicionais que podem ser usados em
comparações.

Tabela 2.1 - Operadores Condicionais

Operador Significado Operador Significado

== Igual a < Menor que

!= Diferente de >= Maior ou igual a

<> Diferente de <= Menor ou igual a

> Maior que

Operações condicionais podem ser combinadas com operadores lógicos do tipo "and", "or", "not". Assim:

>>> i, j, x, y = 1, 1, 1, 1
>>> j != 1 and i == 1 or not x != y
True
>>> j != 1 and (i == 1 or not x != y)
False

Veja que a ordem de avaliação da expressão pode ser diferente, quando se usam parênteses. Na primeira
avaliação, a operação "and" foi feita antes da "or". No segundo caso, a operação "or" foi avaliada antes do
"and", o que produziu um efeito diferente.

2.2 Estruturas de Repetições


Python tem duas estruturas de repetição: o while e o for. Além delas, possui as instruções break,
continue e else, utilizadas com as duas principais.

2.2.1 A Instrução while


A instrução while funciona de forma idêntica a outras linguagens de programação. Sua sintaxe é:

48 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

while <condição>:
<bloco a ser executado repetidamente enquanto a condição for verdadeira>

teste2_03.py
1. #!/usr/bin/python
2. #-*- coding: utf-8 -*-
3. i = -1
4. while i <> 0:
5. i=input ( 'Digite o Expoente ou 0 para sair: ' )
6. print ' 2 ^ %s = %s' % ( i , 2 ** i )
7. print 'Fim'

2.2.2 A Instrução for


A outra estrutura de repetição do Python é a instrução for. A sintaxe dessa instrução difere um pouco de
outras linguagens de alto nível, aproximando-se das linguagens de scripts. Seu formato é:

for destino in seqüência:


<bloco a ser executado para cada destino>

Para cada interação do for, o objeto destino recebe um objeto da seqüência.

Exemplo de uso do for:

teste2_04.py
1. #!/usr/bin/python
2. #-*- coding: utf-8 -*-
3. r = [1, 2, 3, 4, 5]
4. for i in r:
5. print '2^%s = %s' % (i, 2**i)
6. print 'Fim'

Na linha 4, a variável i receberá cada um dos valores da lista r e executará o comando da linha 5. A lista r,
como é formada por uma seqüência crescente de números de 1 a 5, poderia muito bem ser substituída pela
função range( ), ficando assim:

teste2_05.py
1. #!/usr/bin/python
2. #-*- coding: utf-8 -*-
3. for i in range(1,6):
4. print '2^%s = %s' % (i, 2**i) ,
5. print 'Fim'

A função range( ) recebe como parâmetros o início e o final (não inclusive) da seqüência. Outr elemento
que acrescentamos a esse script foi uma vírgula no final da instrução print (linha 4); essa vírgula serve
para manter a impressão do comando print sempre na mesma linha.

49 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

2.2.3 As Instruções break e continue


As estruturas de repetição for e while podem ter a saída forçada através das instruções break e
continue. A instrução break interrompe o bloco interno do laço, desviando a execução para a primeira
instrução após a estrutura de repetição, enquanto a instrução continue interrompe o bloco interno do
laço, desviando para a instrução while ou for, que fazem a verificação de continuidade do laço. Veja os
exemplos:

teste2_06.py
1. #!/usr/bin/python
2. #-*- coding: utf-8 -*-
3. disciplinas=[ { 'nome':'Português' , 'nota':4.0 },
4. { 'nome' : 'Matemática' , 'nota' : 6.0 },
5. { 'nome' : 'Fisica' , 'nota' : 10.0 } ]
6. rep=0
7. estado="Aprovado"
8. for i in disciplinas:
9. if i['nota'] <= 5.0:
10. rep+=1
11. if rep==2:
12. estado='Reprovado'
13. break
14. estado='Recuperação'
15. print estado

teste2_07.py
1. #!/usr/bin/python
2. #-*- coding: utf-8 -*-
3. i=0
4. string="Teste do comando continue"
5. for x in string:
6. if x == ' ':
7. i+=1
8. continue
9. print x,
10. print
11. print str(i+1) + ' Palavra(s)'

Python tem as constantes booleanas True e False, que podem ser tratadas também como 1 ou 0,
respectivamente. Se quisermos um laço infinito, podemos fazer:

while True:
...

Além dessas constantes, Python tem outra constante especial (None) que tem um valor nulo, ou nenhum
valor. Esse valor é útil, por exemplo, quando não queremos associar nenhum valor a uma variável.

2.2.4 A Instrução else

50 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

A instrução else pode ser usada também junto com as instruções for e while. A cláusula else será
executada se, e somente se, um 'break' não for executado para sair do for ou while. Caso o break seja
executado, a cláusula else será ignorada e a execução salta para a primeira instrução depois do escopo do
else. Veja o exemplo:

teste2_08.py
1. #!/usr/bin/python
2. #-*- coding: utf-8 -*-
3. disciplinas=[{'nome':'Portugues','nota':3.0},
4. {'nome':'Matematica','nota':6.0},
5. {'nome':'Fisica','nota':10.0}]
6. rep=0
7. estado="Aprovado"
8. for i in disciplinas:
9. if i['nota'] <= 5.0:
10. rep+=1
11. if rep==2:
12. estado='Reprovado'
13. break
14. estado='Recuperação'
15. else:
16. print 'O aluno continuará conosco!'
17. print '%s' % estado

2.3 A Instrução pass


Python tem uma instrução que não faz absolutamente nada, pois só existe para ocupar um espaço
necessário sintaticamente, mas que, logicamente, não deve ter nenhuma instrução; por exemplo: em um
laço infinito, onde o script não deve fazer nada, apenas aguardar que o usuário interrompa a execução,
teríamos:

while True:
pass

Perceba que a estrutura while, necessariamente, exige, no mínimo, uma instrução no seu escopo.

2.4 Funções
Função é um objeto, assim como praticamente tudo em Python, que tem um nome associado. O formato de
uma função em Python é:

Def nome(arg1, arg2,..., argN): # uma função pode ter 0, 1 ou vários argumentos
<bloco de instruções>
return <valor> # geralmente uma instrução return retorna um valor

Exemplo de uma função:

>>> def swap ( x, y ):

51 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

... x, y = y, x
... return ( x, y )
...
>>> a, b = 0, 1
>>> print a, b
0 1
>>> a, b = swap( a, b )
>>> print a, b
1 0

Como uma função é associada a um objeto, podemos fazer uma atribuição desse objeto a outro nome:

>>> troca = swap


>>> print troca( [ 'a', 'b', 'c' ] , 'O sentido da vida')
( 'O sentido da vida', [ 'a', 'b', 'c' ] )

Note pelo exemplo acima que, como o Python tem tipagem de objetos dinâmica, os argumentos x e y da
função troca podem receber objetos de qualquer tipo.

As variáveis x e y da função swap são variáveis locais, pois só são acessíveis no escopo da função.
Vejamos outra função:

>>> media = 7.0


>>> def aprovado( nota ):
... if nota >= media:
... return True
... return False
...
>>> print aprovado(6.9)
False
>>> print aprovado(10)
True

No exemplo acima o objeto media no escopo da função é um objeto global. Um objeto declarado no
escopo da função pode ser forçosamente declarado como global:

teste2_09.py
1. #!/usr/bin/python
2. #-*- coding: utf-8 -*-
3. i=0
4. def inc(x):
5. global i
6. i+=x
7. inc(3)
8. print i

A instrução global da linha 5 força a utilização da variável i global que foi declarada na linha 3 com o valor
0 inicial. Execute este programa e veja o resultado, depois altere a linha 5 para:

52 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

5. i = 0

Execute-o novamente e compare o resultado com o anterior.

2.5 Módulos
A linguagem Python contém uma série de funções não built-in que podem ser importadas de arquivos
especiais quando forem necessárias; esses arquivos são os módulos. Vários módulos podem ser
estruturados na forma de pacotes (packages). Nesse caso, os nomes dos níveis de módulos são separados
por ".".

A importação é feita pela instrução import. O formato dessa instrução é:

import <módulo> [, <módulo> [, ... ]]


ou
import <pacote.> [<módulo> ]

Exemplo:

>>> import math # importa módulo de funções matemáticas


>>> raio = 5
>>> print 'Área = %s' % ( math.pi * pow( raio, 2 ))
Area = 78.5398163397

Caso não queira importar todo o conteúdo de um módulo, pode importar objetos específicos de um módulo
com a instrução from:

from <modulo> import <nome> [ , <nome> [, ... ]] # importa nomes específicos


ou
from <modulo> import * # importa todos os nomes do módulo

Com a instrução from, os nomes importados podem ser usados sem a necessidade da especificação do
módulo:

>>> from math import * # importa módulo de funções matemáticas


>>> raio = 5
>>> print 'Área = %s' % ( pi * math.pow( raio, 2 ))
Area = 78.5398163397

No exemplo acima, o nome "pi" não precisa do prefixo "math.".

Você pode criar seus próprios módulos, por exemplo, um módulo chamado utils.py:

utils.py
1. #-*- coding: utf-8 -*-
2. ''' módulo utils '''
3. def swap(x, y):
4. ''' retorna os valores

53 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

5. dos objetos x e y trocados '''


6. return (y, x)
7. autor = 'Curso de Python - Católica Virtual'

Declaramos aqui dois objetos: a função "swap( )" e o nome "autor". Este nome poderá ser usado mais
tarde na implementação de algum módulo.

>>> import utils


>>> print utils.autor
Curso de Python - Católica Virtual
>>> x, y = utils.swap(0, 1)
>>> print x, y
1 0

As linhas 2, 4 e 5 contêm comentários de blocos (aspas tríplices), esses comentários servirão como
documentação do módulo e da função e poderão ser averiguados pela função help( ) do Python:

>>> help ( utils )


Help on module utils:
NAME
utils - módulo utils
FILE
/seu/caminho/para/os/scripts/python/utils.py
FUNCTIONS
swap(x, y)
retorna os valores
dos objetos x e y trocados
DATA
autor = 'Curso de Python - Católica Virtual'

2.6 Módulos como Scripts


Um arquivo pode ser encarado como um arquivo de módulo ou como um script que pode ser executado.
Para fazer a diferenciação, usamos um atributo que todos os arquivos importados possuem, o
"__name__". Quando o arquivo é executado diretamente da linha de comando, ou seja, de fora do
ambiente interativo do Python, esse atributo recebe o valor "__main__". Quando o arquivo é importado a
partir de um ambiente Python esse atributo recebe o nome do arquivo. Vejamos um exemplo:

teste2_10.py
1. #!/usr/bin/python
2. #-*- coding: utf-8 -*-
3. def teste(m):
4. print m
5. return
6. print '__name__ = ' + __name__
7. if __name__ == '__main__':
8. teste('Você está executando o script fora do Python')
9. else:

54 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

10. teste('Você está executando o script no ambiente interativo do Python')

Após digitar esse script, teste-o tanto no ambiente Python quanto na linha de comando e veja a diferença.

2.7 Arquivos
Python permite a manipulação de arquivos através de uma série de funções. As principais estão listadas na
tabela abaixo:

Tabela 2.2 - Funções de Manipulação de Arquivos

Função Significado

a = open( arquivo, modo ) Abre o arquivo no modo especificado ('r'=leitura de arquivo texto,
'rb'=leitura de arquivo binário, 'w'=escrita de arquivo texto,
'wb'=escrita de arquivo binário). Se o modo é omitido subentende-se
o modo 'r'.

S = a.read(Â ) Lê o arquivo inteiro para a strig SLê no máximo mais X bytes


S = a.read( X )

S = a.readline( ) Lê a próxima linha do arquivo para a string S

L = a.readlines( ) Lê até o final do arquivo para a lista L

a.write(S) Escreve a string S no arquivo

a.writelines(L) Escreve as linhas da lista L no arquivo

a.close( ) Fecha o arquivo manualmente

a.tell( ) Retorna a posição dentro do arquivo

a.seek( pos [, origem ] ) Posiciona-se em pos no arquivo a partir da origem (origem = 0,


deslocado do início; origem=1, deslocado da posição atual; origem=2,
deslocado do final)

Além destas funções, a instrução for pode usar diretamente o descritor do arquivo para acessar cada linha
do arquivo individualmente assim:

arq = open( arquivo )


for reg in arq:
(...)

A seguir é mostrado um script que captura os usuários Linux que tem seu home no diretório '/home':

teste2_11.py
1. #!/usr/bin/python
2. #-*- coding: utf-8 -*-
3. from sys import platform
4. if platform != 'linux2':
5. print 'Sistema Incompatível...'
6. else:

55 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

7. arq='/etc/passwd'
8. usuarios = open(arq, 'r')
9. for linha in usuarios:
10. if linha.find ( 'home' ) != -1:
11. print 'Usuário: ' + linha [ : linha.find ( ':' ) ]

Na linha 3 é importado o nome 'platform' do módulo sys, para verificar se o sistema operacional em
execução é o Linux (if da linha 4). Nas linhas 7 e 8 o arquivo /etc/passwd, que contém os dados dos
usuários Linux, é aberto para leitura. O for da linha 9 lê uma linha do arquivo a cada interação. Na linha
10, verificamos se a substring 'home' está na linha. Na linha 11, é mostrado apenas o login do usuário,
que vai do começo da linha até o caractere ":".

Nesta aula, vimos os mecanismos de controle de fluxo da linguagem Python, bem como a utilização de
funções e o agregamento de rotinas em um único arquivo para uso posterior em outras aplicações.

Aula 03 – Orientação a Objetos


Até agora, encaramos a linguagem Python unicamente na forma estruturada; agora, veremos como ela pode
ser programada usando uma abordagem orientada a objetos.

Um objeto (ou instância) é criado a partir de uma classe que define as características desse objeto. A rigor,
todos os elementos na linguagem Python são objetos.

3.1 Classes e Objetos


A definição de uma classe em Python é:

class nome_classe:
nome_atributo=valor
(...)
def nome_metodo(self, [arg1 [, arg2 [, ... ] ] ):
corpo do método
(...)

Exemplo da criação de uma classe:

>>> class Pessoa:


... nome=None
... def set_nome(self, nome):
... self.nome = nome
... def get_nome(self):
... return self.nome

Temos que: 'nome' é um atributo da classe Pessoa. A classe tem dois métodos: set_nome e get_nome.

3.2 O Argumento self


Todo método em uma classe deve ter o argumento especial 'self', que representa a instância da classe. A
linha:

56 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

self.nome = nome

Quer dizer que o atributo nome da instância recebe o valor nome local.

>>> ze=Pessoa( ) # instanciação do objeto 'ze'


>>> ze.set_nome( 'José da Silva' ) # chamada do método set_nome
>>> print ze.get_nome( ) # chamada do método get_nome
José da Silva
>>> print ze.nome # um atributo também pode ser recuperado assim
José da Silva

Métodos também podem receber parâmetros com valores default; aliás, esta é uma característica de
qualquer função em Python, por exemplo:

>>> class Conta:


... def cadastra(self, titular, nc, saldo=0.0):
... self.titular = titular
... self.nc = nc
... self.saldo = saldo
...
>>> cliente1 = Conta( )
>>> cliente2 = Conta( )
>>> cliente1.cadastra( 'José Maria' , '00001', 0.0)
>>> cliente2.cadastra( 'Maria José' , '00002' )
>>> print cliente1.saldo
0.0
>>> print cliente2.saldo
0.0

Note que, na chamada do método cadastra do cliente1 foi passado o saldo, enquanto na chamada do
mesmo método do cliente2 foi omitido o saldo.

Outra característica da chamada de um método, que vale também para qualquer função, é a passagem de
parâmetros fora de ordem, especificando o nome do parâmetro na chamada, veja o exemplo:

>>> cliente3 = Conta( )


>>> cliente3.cadastra( titular = 'João da Silva', saldo = 1000000.00, nc = '00003' )

3.3 Construtor
Uma classe pode ter um método construtor, que será chamado no momento da instanciação do objeto. O
construtor é um método especial, seu formato é:

def _ _init_ _( self, [ parâmetros do construtor ] ):

Por exemplo:

>>> class Conta:

57 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

... def __init__(self, titular, nc, saldo=0.0):


... self.titular=titular
... self.nc = nc
... self.saldo=saldo
...

A criação do objeto agora exige a passagem dos parâmetros:

>>> cliente3 = Conta( 'Joaquim José da Silva', '100001' )

É possível, em Python, a atribuição de atributos de objetos com instruções de atribuições simples:

>>> cliente3.saldo = 100.00


>>> print cliente3.saldo
100.00

3.4 Atributos de Classes x Atributos de Instâncias


Uma classe pode ter um atributo assim como instâncias dessa classe. Se um nome dentro da classe tem o
prefixo self, então, o nome (atributo) se refere à instância; se um nome tem o nome da classe como
prefixo, então, o atributo se refere à classe; se o nome não tem prefixo, então, o nome é uma variável
local:

>>> class A:
... q=0
... def __init__( self ):
... self.q = 1
... def inc( self, q ):
... A.q += q
... print A.q
...
>>> a1 = A( )
>>> a2 = A( )
>>> a1.inc(10)
10
>>> a2.inc(15)
25
>>> print a1.q, a2.q, A.q
1 1 25

Atributos de classes são interessantes quando um atributo deve ser compartilhado por todos os objetos de
certa classe.

3.5 Atributos Privados


Um atributo de um objeto em Python é, a rigor, público. Caso você queira tratar um atributo como privado,
basta acrescentar dois sublinhados ( __ ) antes do nome do atributo:

>>> class A:

58 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

... def __init__(self, x, y):


... self.x = x # x é um atributo público
... self.__y = y # y é um atributo privado
... def mostra(self):
... print self.x, self.__y
...
>>> a = A( 10, 20 )
>>> print a.x
10
>>> print a.__y
Traceback (most recent call last):
File "<pyshell#220>", line 1, in <module>
print a.__y
AttributeError: A instance has no attribute '__y'
>>> a.mostra( )
10 20

É possível ainda criar atributos dinamicamente após a instanciação do objeto:

>>> a.z = 30
>>> print a.z
30

Essa característica pode parecer prejudicial à integridade da classe, mas isso dá muita flexibilidade à
linguagem. Caso você queira evitar essa situação, deverá mudar o tipo de classe para o chamado “estilo
novo”. Esse estilo novo é possível desde a versão 2.2 do Python, e seu formato é:

class <nome_da_classe> ( object ) :


... definição da classe

A superclasse 'object', passada como parâmetro para a classe, é a superclasse de todas as outras classes.
Além disso, é necessária a especificação de uma seqüência especial chamada __slots__, cujo conteúdo
são os nomes das variáveis que poderão ser atribuídas na classe. Exemplo:

>>> class B( object ):


... __slots__ = ( 'x', '__y' )
... def __init__( self, x, y ):
... self.x = x
... self.__y = y
... def mostra(self):
... print self.x, self.__y
...
>>> b = B( 0, 1 )
>>> b.x = 0
>>> b.z = 0
Traceback (most recent call last):
File "<pyshell#333>", line 1, in <module>
b.z=0
AttributeError: 'B' object has no attribute 'z'

59 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

3.6 Herança
Uma classe pode herdar as características de outra(s) classe(s), chamamos isso de herança. Para uma
classe herdar de outra(s) classe(s), basta passar o nome da(s) classe(s) herdada(s) (superclasse) como
parâmetro da classe herdeira:

>>> class B(A): # a classe B herda característica da classe A


... q=0
... def __init__(self):
... self.q=-1
... def dec(self,q):
... A.q -= q
... B.q -= q
... print A.q, B.q
...
>>> b = B( ) # instanciação de b
>>> b.dec( 10 ) # b chama um método da classe B
15 -10
>>> b.inc( 15 ) # b chama um método da classe A
30
>>> print A.q, B.q, a1.q, a2.q, b.q
30 -10 1 1 -1

Se a classe B não tivesse o construtor __init__, o construtor da classe A seria chamado na instanciação
do objeto b.

Outro exemplo:

teste03_01.py
1. class Poligono:
2. def __init__(self, area, perimetro):
3. self.area = area
4. self.perimetro = perimetro
5. class Retangulo(Poligono):
6. def __init__(self, altura, largura):
7. self.altura = altura
8. self.largura = largura
9. area = altura * largura
10. perimetro = (altura + largura) * 2
11. Poligono.__init__(self, area, perimetro)
12. def area(self):
13. return self.area
14. def perimetro(self):
15. return self.perimetro
16. class Circulo(Poligono):
17. def __init__(self, raio):
18. self.raio = raio
19. area = raio ** 2 * pi
20. perimetro = 2 * pi * raio

60 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

21. Poligono.__init__(self, area, perimetro)


22. def area(self):
23. return self.area
24. def perimetro(self):
25. return self.perimetro

Uma classe pode herdar de mais de uma classe (heranças múltiplas); para tanto, basta passar os nomes
das classes herdadas como parâmetros para a nova classe. Vejamos um exemplo:

teste3_02.py
1. #!/usr/bin/python
2. #-*- coding: utf-8 -*-
3. class Animal( object ):
4. def __init__( self, tipo ):
5. self.tipo = tipo
6. class Aquatico( Animal ):
7. def __init__( self ):
8. self.ambiente = 'Água'
9. Animal.__init__( self, 'Aquático' )
10. def habilidades(self):
11. return ( 'nadar', "respirar em baixo d'agua" )
12. class Terrestre( Animal ):
13. def __init__( self ):
14. self.ambiente = 'Terra'
15. Animal.__init__( self, 'Terrestre' )
16. def habilidades( self ):
17. return ('mover-se sobre a terra','respirar na atmosfera')
18. class Anfibio( Aquatico, Terrestre ):
19. def __init__( self ):
20. Aquatico.__init__( self )
21. Terrestre.__init__( self )
22. self.ambiente = ( 'Água', 'Terra' )
23. self.tipo = 'Anfíbio'
24. def habilidades(self):
25. return ( Aquatico.habilidades( self ), Terrestre.habilidades( self ) )
26. if __name__ == '__main__':
27. sapo=Anfibio()
28. print 'Ambiente onde vive: ', sapo.ambiente
29. print 'Tipo: ', sapo.tipo
30. print 'Habilidades: ', sapo.habilidades( )

O construtor da classe Anfibio chama os dois construtores das superclasses. Se as linhas 22 e 23 forem
omitidas, os atributos 'ambiente' e tipo ficarão com o valor 'Terra' e 'Terrestre', respectivamente,
atribuídos pelo construtor da superclasse 'Terrestre', chamado por último. Note na linha 25 que o método
'habilidades( )' do objeto Anfibio retorna os dois métodos habilidades das superclasses Aquatico e
Terrestre.

3.7 Polimorfismo

61 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

O Python permite o polimorfismo, não como em outras linguagens como java, por exemplo, onde vários
métodos com o mesmo nome são definidos para uma certa classe, mas através de um recurso próprio.
Antes, analise a seguinte declaração de uma classe:

>>> class A:
... def __init__( self ):
... self.x = 0
... def __init__( self, x ):
... self.x = x

Esse tipo de declaração não gera nenhum erro de sintaxe, mas não surte o efeito de polimorfismo. O que
acontece, nesse caso, é a substituição do método __init__( self ) pelo segundo __init__( self, x );
então, este passa a ser o construtor da classe.

Para implementar o polimorfismo, em Python, usamos argumentos arbitrários através do operador “*”.
Vejamos um exemplo:

>>> class A:
... def __init__(self, *pars): # pars é uma tupla de parâmetros
... if len(pars) == 0: # testa se o tamanho da tupla pars é zero (vazia)
... self.x = 0 # atribui 0 a self.x
... elif len(pars) == 1: # testa se o tamanho da tupla pars é um (um parâmetro)
... self.x = pars[0] # atribui o primeiro parâmetro (pars[0]) a self.x
>>> a=A()
>>> b=A(1)
>>> a.x
0
>>> b.x
1

3.8 Erros e Exceções


Em um script, podem ocorrer erros esperados, mas não desejados, como, por exemplo, a tentativa de
abertura de um arquivo que não existe. Nesse caso, o python tem condições de interceptar e tratar esses
erros de tal forma que o script não seja prejudicado como um todo. A instrução try faz esse controle.

3.8.1 Try/Except
A instrução try/except tem a seguinte sintaxe:

try:
<instruções que podem gerar um erro>
expect <nome1>, [<var1>]:
<instruções que serão executadas se ocorrer o erro nome1>
<var1 contem a mensagem do erro>
except <nome2>, [<var2>]:
<instruções que serão executadas se ocorrer o erro nome1>
<var2 contem a mensagem do erro>
...

62 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

else:
<instruções que serão executadas se não ocorrer nenhum erro>
finally:
<instruções que serão executadas independentemente de ocorrer algum erro>

O número de except pode ser um ou mais e a cláusulas else e finally são opcionais.

Exemplo:

>>> lista=[0,1,2,'tres']
>>> resultado=[ ]
>>> for x in lista:
... y = ' '
... try:
... y = 1.0/x
... except ZeroDivisionError:
... print 'Divisão por Zero'
... except TypeError:
... print 'Erro: Tipo Inválido'
... else:
... print '1/%s = %s' % ( x, y )
... finally:
... resultado.append( y )
...
Divisão por Zero
1/1 = 1.0
1/2 = 0.5
Erro: Tipo Inválido
>>> print resultado
[ ' ', 1.0, 0.5, ' ' ]

3.8.2 Categorias de Exceções


A seguir, são listadas algumas das categorias de exceções do Python:

Tabela 3.1 - Categorias de Exceções de Python

Exceção Significado

Exception Superclasse de todas as exceções

StandardError Subclasse de Exception. É a superclasse de todas as outras classes


com exceção de SystemExit

AritmeticError Erros Aritméticos

LookupError Superclasse de IndexError e KeyError

EnvironmentError Superclasse de exceções que ocorrem fora do Python (IOError,


OSError)

AssertionError Quando a instrução assert retorna falso

63 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

AtributeError Falha na atribuição

EOFError Quando o fim de arquivo é atingido pelas funções input( ) e


raw_input( )

FloatingPointError Erro em operação com ponto flutuante

IOError Erro de e/s ou de arquivo

ImportError Erro de importação de módulo

IndexError Índice de seqüência fora da faixa

KeyError Referência à chave não existente

KeyboardInterrupt Gerada por interrupção pelo teclado (Crtl-C)

MemoryError Memória cheia

NameError Nome não encontrado

OSError Erro no módulo "os"

SyntaxeError Erro de sintaxe

TypeError Erro de tipo inadequado

ZeroDivisionError Erro de divisão por zero

Veja o exemplo abaixo:

>>> class A:
... def __init__(self):
... self.x = 0
...
>>> a=A()
>>> print a.x
0
>>> print a.y
Traceback (most recent call last):
File "<stdin>", line 1, in ?
AttributeError: A instance has no attribute 'y'

Isso quer dizer que houve um erro de AttributeError. Então, podemos usar essa exceção para controlar o
script da seguinte forma:

>>> try:
... print a.y
... except AttributeError, e:
... print 'Ocorreu um erro: ', e
...
Ocorreu um erro: A instance has no attribute 'y'

Quando você não souber o tipo de exceção gerado, poderá fazer um teste como este, forçando a ocorrência

64 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

do erro e, assim, descobrir a categoria da exceção.

Vimos, nesta aula, conceitos de orientação a objetos em Python, bem como a interceptação de eventos que
geram erros na execução dos scripts. Na próxima aula, colocaremos em prática essas características com
outras abordagens da linguagem.

Aula 04 – Banco de Dados


Python permite o manuseio de vários tipos de bancos de dados. Aqui, focaremos o MySQL, mas Python
suporta vários outros bancos de dados como, por exemplo, PostgreSQL, Oracle, SQL Server, DB2 etc. Uma
fonte de escolha de banco de dados pode ser consultada na página do projeto Python.

4.1 Iniciando um Banco de Dados


Como exemplo, vamos usar um banco de dados fictício, de um Banco que contém uma tabela simplificada
de conta-corrente. Para criar e povoar o banco de dados, você pode usar o script (banco.sql). Antes de
trabalharmos com um banco de dados, o serviço do banco deve ser iniciado, caso já não esteja, da
seguinte forma:

$ /etc/init.d/mysql restart

Após esse comando, podemos criar a base de dados. Você precisará ter um usuário válido no mysql,
provavelmente 'root', assim:

$ mysql -u usuário -p < banco.sql


Enter Password:

Após executado o comando acima, o banco de dados exemplo estará criado e povoado. O banco de dados
chama-se 'db_curso_python' e a tabela 'py_conta'. Os campos da tabela são: nc: número da conta;
titular: nome do titular da conta; saldo: saldo corrente na conta.

Para trabalhar com o MySQL, será necessário instalar o pacote “python-mysqldb”, caso já não esteja
instalado.

$ apt-get install python-mysqldb

4.2 O Módulo MySQLdb


Esse pacote oferece uma API para manipulação do banco de dados mysql. O trecho a seguir faz uma
consulta à base de dados:

>>> from MySQLdb import * # (1)


>>> conexao = connect ( 'localhost', 'root', 'senhamysql' ) # (2)
>>> conexao.select_db('db_curso_python') # (3)
>>> cursor = conexao.cursor( ) # (4)
>>> cursor.execute("SELECT * FROM py_conta") # (5)
20L # (6)

Comentando os comentários:

65 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

1. Importa o módulo MySQLdb


2. Cria uma conexão com o servidor mysql. Os parâmetros dependerão de como está instalado o
servidor.
3. Seleciona o banco de dados que será usado
4. Cria um cursor para a conexão do banco. É através deste cursor que serão feitas todas as
solicitações ao banco.
5. Executa uma cláusula SQL no banco selecionado, nesse exemplo selecionamos todos os campos de
todos os registros da tabela.
6. Como resultado da consulta, é retornado a quantidade de registros processados.

Após a execução dos comandos acima, o objeto cursor tem o resultado da operação SQL. Podemos acessar
esse resultado por meio de duas funções:

fetchone( ): que retorna uma tupla com o próximo registro do resultado.


fetchall( ): que retorna uma tupla de tuplas com todos os resultados.

>>> reg = cursor.fetchone( )


>>> print reg
( '12345567', 'Fulano de Tal', 0.0 )
>>> print reg[ 1 ] # acessa apenas o campo nome
Fulano de Tal
>>> regs = cursor.fetchall( )
>>> print regs
( ( '12345567', 'Fulano de Tal', 0.0 ), (.......) )
>>> print regs[ 0 ] [ 1 ]
Fulano de Tal

4.3 Desenvolvendo uma Aplicação com BD


A seguir, implementamos um sistema simples de consulta, depósito e saque, usando o banco de dados que
vimos acima. Usaremos uma classe Conta, que implementa essas operações, e uma classe Menu, para
implementar uma seleção de opções da aplicação.

classes_banco.py
1. #-*- coding: utf-8
2. class Conta(object):
3. __slots__ = [ 'nc', 'titular', 'saldo' ]
4. def __init__(self, registro):
5. self.nc = registro [ 0 ]
6. self.titular = registro [ 1 ]
7. self.saldo = registro [ 2 ]
8. def mostra(self):
9. print 'Conta: ', self.nc
10. print 'Titular: ', self.titular
11. print 'Saldo: R$ ', self.saldo
12. def deposito(self, valor):
13. self.saldo += valor
14. print self.saldo, ' Operação Bem Sucedida'

66 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

15. def saque(self, valor):


16. if self.saldo < valor:
17. print self.saldo, ' Saldo Insuficiente'
18. return False
19. else:
20. self.saldo -= valor
21. print self.saldo, ' Operação Bem Sucedida'
22. return True
23. class Menu(object):
24. def __init__(self, opcoes):
25. i=0
26. for j in opcoes:
27. print '[ %s ] - %s' % (i, j)
28. i += 1
29. while True:
30. opcao=input('> ')
31. if range(0, len(opcoes)).count(opcao) == 0:
32. continue
33. self.escolha=opcoes[opcao]
34. print self.escolha
35. break

Esse módulo possui a definição da classe Conta, da linha 2 a 22, e da classe Menu da linha 23 a 35.

A classe Conta contém três métodos além do construtor – mostra, deposito e saque – sendo que o
método saque verifica a possibilidade de efetuar a operação; se for efetivado, o saque retorna True, do
contrário, retorna False.

A classe Menu recebe como parâmetro uma tupla de opções do menu, da linha 25 a 28 são mostradas as
opções do menu, e da linha 29 a 35 é feita uma escolha.

teste4_01.py
1. #!/usr/bin/python
2. #-*- coding: utf-8 -*-
3. from classes_banco import *
4. from MySQLdb import *
5. try:
6. conexao = connect('localhost', 'root', 'admmysql')
7. conexao.select_db('db_curso_python')
8. cursor=conexao.cursor()
9. except:
10. print 'Erro de Conexão com o Banco de Dados'
11. else:
12. while True:
13. op = Menu( ('Finaliza','Consulta','Deposito','Saque') )
14. if op.escolha == 'Finaliza':
15. break
16. conta = raw_input('>> Numero da Conta: ')
17. sql1 = 'SELECT * FROM py_conta WHERE nc = %s' % conta

67 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

18. if cursor.execute(sql1) == 0L:


19. print 'Conta Inválida'
20. continue
21. reg = cursor.fetchone( )
22. cc = Conta(reg)
23. if op.escolha == 'Consulta':
24. cc.mostra( )
25. continue
26. if op.escolha == 'Deposito':
27. valor = input('>>> Valor do Depósito: R$ ')
28. cc.deposito(valor)
29. elif op.escolha == 'Saque':
30. valor = input('>>> Valor do Saque: R$ ')
31. if not cc.saque(valor):
32. continue
33. sql2 = 'UPDATE py_conta SET saldo = %s WHERE nc = %s' \
34. % (cc.saldo, cc.nc)
35. cursor.execute(sql2)

O script teste4_01.py tenta abrir a conexão com o banco de dados (linhas 5 a 8); se a conexão estiver
OK, o script entra em um laço até que a opção de abandonar o script seja selecionada.

Concluímos, assim, nosso curso de linguagem de programação com a linguagem Python. Há muitas outras
possibilidades para a utilização de Python. Mostramos aqui apenas a base para o desenvolvimento de
quaisquer dessas aplicações.

Parte 03 - JAVA

Aula 01 – Introdução à Linguagem de Programação Java


Neste primeiro contato com a tecnologia da Orientação a Objetos, por meio da linguagem de programação
Java, abordaremos um pouco da história de Java, como ela surgiu e evoluiu, suas principais características e
sua arquitetura básica de funcionamento, esclarecendo os conceitos de Máquina Virtual Java e de “Byte
Code”. No final desta unidade, apresentaremos algumas ferramentas que facilitam o desenvolvimento de
programas e teremos a oportunidade de escrever nosso primeiro programa.

1.2 História da Linguagem Java


A história da tecnologia Java começou em 1991, por meio de um projeto da Sun Microsystem, conhecido
como Green Project. James Gosling, também conhecido como o pai da linguagem Java, coordenou esse
projeto, onde o objetivo principal não era a criação de uma nova linguagem de programação, mas a criação
de novos computadores portáteis capazes de se comunicarem de várias maneiras.

Inicialmente, pensou-se em utilizar a linguagem C++, em função da experiência do grupo. Mas a


linguagem C++ não atendia satisfatoriamente todos os requisitos para o projeto; então, optou-se por
escrever uma nova linguagem de programação, que fosse ao mesmo tempo simples, fácil de utilizar e
interpretada e orientada a objetos. Surge, nesse momento, a linguagem de programação batizada como
“Oak”.

Em 1993, os primeiros dispositivos móveis PDAs (Personal Digital Assitant), produzidos por esse projeto e

68 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

conhecidos como Star 7 ou *7, foram lançados. Por problemas de copyright ©,


o nome da linguagem “Oak” teve que ser mudado, surgindo, em 1994, o novo
nome da linguagem “Java”. Com a popularização da Internet, Jonathan Payne
e Patrick Naugthon, pesquisadores da equipe de James Gosling, desenvolveram
o WebRunner, um navegador para Internet com possibilidade de fazer
download e a execução de aplicativos escritos em Java através da Internet. O
WebRunner foi rebatizado para HotJava e lançado oficialmente, em 1995, pela
Sun no evento SunWorld’9. O interesse pela solução foi muito grande, poucos
messes depois, numa iniciativa inédita para época, a Sun decide disponibilizar
para download gratuito na Internet um kit de desenvolvimento Java (JDK1.0 –
Java Development Kit). Assim, inicia-se a história de sucesso da tecnologia
Figura 1.1 - Star 7
Java.

Uma das marcas registradas de Java é o seu mascote, Duke, criado ainda no projeto Green por Joe
Palrang. O Duke (Figura 1.2) pode ser visto e transformado em um conjunto de fotos que explica que sua
utilização e transformação são livres.

Figura 1.2 - Star 7, o Mascote do Java

Para Saber Mais


Para se aprofundar um pouco mais sobre a história da linguagem Java, leia o artigo da Sun: “Java
Technology: The Early Years”.

1.2 Características da Linguagem Java


Para apresentar as características da linguagem de programação Java é necessário saber primeiro o que é
Java.

Java é mais que uma linguagem de programação, é um ambiente de aplicação e desenvolvimento.


Atualmente, podemos considerar Java uma tecnologia que possui vários recursos como o ambiente de
desenvolvimento, dos quais merecem destaque o Eclipse e o NetBeans.

Java é também:

Uma linguagem de programação simples – Possui sintaxe muito semelhante à linguagem “C”,
porém com algumas responsabilidades controladas pelo compilador, tais como o controle de índice

69 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

dos limites de arrays, além da verificação dos tipos, também chamada de fortemente tipada, em
que todos atributos devem ser de um único tipo (primitivo ou objeto).
Uma linguagem de programação orientada a objetos – Possui embutidas na própria
linguagem suporte as boas práticas da orientação a objetos, tais como: identificador único,
composição, encapsulamento, herança e polimorfismo. Tais conceitos serão abordados com mais
profundidade na Aula 2.
Portável – Portabilidade é a possibilidade de um programa ser escrito para uma plataforma (e.g.,
para o sistema operacional Windows) e poder ser utilizado em outro ambiente (e.g., no Linux)
normalmente, por meio da compilação para cada sistema operacional. Java extrapola o conceito de
portabilidade, pois por meio do “Byte Code” e do conceito da máquina virtual Java, não é
necessário a re-compilação do “byte code” podendo o mesmo ser reutilizado em qualquer ambiente
que possua uma máquina virtual java. O portabilidade de java é observada numa das frases mais
utilizadas para definir as características de java o WORA (Write Once Run Anywhere), ou seja,
“escreva uma única vez e rode em qualquer lugar”.
Uma linguagem de programação robusta – a robustez de Java pode ser observada pelo
controle e tratamento de exceção.
Concorrente – java possui suporte nativo a Threads, RMI (Remote Method Invocation) acrônito e
CORBA (Common Object Requeste Broker Architeture), essas tecnologias dão suporte a aplicações
distribuídas.
Segura – Java possui segurança em diversos níveis: através da verificação do código
originalmente compilado e, ainda, uma API (Aplication Program Interface) própria para criptografia
e segurança.

1.3 Arquitetura da Máquina Virtual Java e do “Byte


Code”
Máquina Virtual Java (JVM), do inglês Java Vitual Machine, é uma máquina imaginária implementada pela
emulação de um software sobre uma máquina real. Ela provê uma especificação de plataforma de hardware
no qual todos os códigos (programas fonte) Java são compilados. Essa especificação torna o programa
Java independente de plataforma, pois que toda compilação é feita para uma máquina imaginária (JVM).

A Figura 1.3 descreve o funcionamento desde o código fonte até a execução em cada máquina
heterogênea.

Figura 1.3 – Funcionamento da Máquina Virtual Java

70 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

1.4 Meu Primeiro Programa


Observe o primeiro programa escrito em Java o “Oi Mundo” abaixo:

public class OiMundo {


public static void main(String args[]){
System.out.println("Oi Mundo !!!");
}
}

A primeira linha “public class OiMundo identifica o nome do programa e da classe com nome “OiMundo”
que também dá origem ao nome do programa OiMundo.java. Assim, temos, na primeira linha:

public é um especificador (modificador de visibilidade). Por enquanto, guarde esta parte da


especificação do primeiro programa (public class) como o início da declaração de uma classe.
Todas as classes serão declaradas assim por enquanto.
class é a palavra reservada que marca o início da declaração de uma classe.
OiMundo é o nome dado a esta classe. O “abre chaves” marca o início das declarações da classe
podem ser divididos em atributos e/ou métodos. Esta classe só possui uma declaração, do método
main, note que um método, ao contrário de outras linguagens, tais como o C++, só pode ser
declarado internamente à classe a qual pertence.

Dica: o nome do arquivo fonte deve ser o mesmo nome da definição do public class com a extenção
.java.

É importante perceber também o bloco que começa com o abre chaves { da primeira linha e termina com }
da última linha do programa. Tudo que está escrito entre esse abre e fecha chaves determina o escopo
desse programa (classe).

71 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

Perceba que a segunda linha “public static void main(String args[])“ define um método muito
importante, o método main(). A assinatura desse método recebe como parâmetros um array de strings,
nesse exemplo nomeado de args. Por meio desse array é que são passados os parâmetros para dentro do
programa Java. Na segunda linha, então:

public: e um qualificador do método que indica que este é acessível externamente à própria
classe. Não se preocupe com essas definições agora, apenas vamos seguir a “receita de bolo”
declarando todos os métodos como public.
static: é outra palavra reservada, que indica que o método deve ser utilizado com um método da
classe e não do objeto. Veremos isso com mais profundidade na próxima aula.
void: é um tipo primitivo do Java; é o valor de retorno do método main(). Quando o método não
retorna nenhum valor, ele retorna void, uma espécie de valor vazio que deve ser especificado.
main: é um nome particular de método que indica para o compilador o início do programa.

(String args[]): É através desse parâmetro que o método main (por conseqüência, o programa
todo) recebe argumentos da linha de comando. Esse parâmetro é um array de Strings que é
inicializado quando os argumentos são passados por meio da invocação do nome do programa na
linha de comando do sistema operacional, por exemplo: java OiMundo arg1 arg2. Nesse caso, o
array args será inicializado com args[0] com valor arg1 e args[1] com valor arg2. Em Java, os
arrays começam na posição 0.

Na terceira linha deste programa “ System.out.println(“Oi Mundo”);”, temos uma instrução para
escrever na saída padrão a String passada como parâmetro para o método println, ou seja, a frase “Oi
Mundo”.

Todo programa fonte em Java é um arquivo texto simples, mas existem diversos editores que podem
facilitar as tarefas de edição e compilação de programas Java.

Para Saber Mais


Para compilar o seu primeiro programa é necessário ter um compilador Java ou um editor com suporte
a Java, assista ás vídeo-aulas sobre download, instalação e configuração do Eclipse e do NetBeans.

1.5 Divisão do Java


O Java cresceu muito e para organizar melhor as suas bibliotecas, foi necessário a divisão por áreas de
aplicação descritas abaixo:

Java SE (Standart Edition) – É o core da linguagem Java. Ou seja, é onde são descritos os
principais componentes da linguagem Java, operadores, tipos primitivos, principais objetos, String,
array, classes utilitárias, dentre outras.

Figura 1.4 – Cenário do Java SE

72 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

Java EE (Enterprise Edition) – É um conjunto de classes específicas para aplicações


corporativas. É utilizado sempre em conjunto com as demais classes definidas na SE para
construção de aplicações mais complexas que envolvem transação, persistência, normalmente
desenvolvidas para Internet. Na Figura 1.5, abaixo, pode-se ter uma idéia da “sopa de letrinhas”
que envolve a tecnologia JEE, que são bibliotecas de componentes para aplicações corporativas em
Java.

Figura 1.5 – Componentes J EE

73 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

Podemos escrever aplicações corporativas em Java utilizando o conjunto de classes APIs disponíveis na
plataforma J EE. Para escrever as aplicações para Web com Java temos disponíveis as seguintes
tecnologias: Servlets, JSPs (JavaServer Pages), JSTL (Java Standart Tal Libs) e diversos frameworks para
aplicações Web, dos quais merecem destaque o Struts, o Spring e o Hibernate.

Java ME (Micro Edition) – É a especificação de componentes para dispositivos pequenos e


dispositivos móveis. Escrever para aplicações celulares, por exemplo, deve-se utilizar as APIs
(bibliotecas) definidas para o ME. A Figura 1.6 abaixo apresenta um emulador que pode ser
baixado gratuitamente no site da Sun para escrever aplicações para celulares.

Figura 1.6 – Emulador J ME

1.6 Ambientes de Desenvolvimento


A linguagem Java possui vários ambientes de desenvolvimento. Na sua maioria, estão disponibilizados
gratuitamente para download na Internet.

As principais ferramentas utilizadas atualmente para codificação dos programas escritos em Java são o
Eclipse, que é um projeto de software livre liderado inicialmente pela IBM, e mantido pela comunidade, e
que tem uma aceitação muito boa pelos programadores, e o NetBeans.

Para Saber Mais


Para facilitar o seu entendimento sobre a instalação e o uso do Eclipse e do NetBeans preparamos uma
vídeo aula.

Finalizamos nossa pimeira aula. Nela tivemos o primeiro contato com a linguagem de programação Java,
conhecemos um pouco da sua história e suas principais características, vimos também o primeiro programa
e alguns ambientes de desenvolvimento. Nas próximas aulas veremos como aplicar os conceitos da
orientação a objetos em nossos programas.

Aula 02 – Classes e Objetos


Essa aula é uma das aulas fundamentais desta disciplina. Na aula anterior, tivemos uma visão geral sobre a
Linguagem Java e as suas ferramentas, e também sobre como escrever e executar um programa. Nesta
segunda aula, vamos estudar os conceitos de orientação a objeto. Veremos o que são classes e objetos e

74 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

como criar as nossas próprias classes e como gerar os nossos objetos a partir dessas classes.

2.2 Classes
Como já vimos em aulas anteriores, a linguagem Java é orientada a objetos, isto é, todos os elementos do
mundo real são modelados como objetos. Os objetos são criados a partir das classes.

Uma classe define a estrutura de um objeto. Uma classe especifica todos os atributos (propriedades) e
métodos (comportamento) que um objeto daquela classe pode ter. Na Figura 2.1, a seguir, tem-se uma
classe automóvel e três objetos que foram gerados a partir dessa classe automóvel.

Figura 2.1 – Classe Automóvel

A classe automóvel tem como atributos: cor, ano, modelo. Os métodos são: desligar, acelerar, e ligar. A
Figura 2.2 apresenta o objeto gerado por essa classe, que tem a cor laranja, ano: 2007, modelo: Punto.

Figura 2.2 – Exemplo de um Objeto

Uma classe é um protótipo que define os atributos e os métodos comuns a todos os objetos de um
determinado tipo e da própria classe, com a finalidade de servir como molde para a criação de objetos.
Dessa forma, uma classe é um template, um modelo para gerar objetos. Em uma classe, os atributos
representam o estado do objeto, os métodos e a sua interação com o mundo externo. Um objeto é gerado
(instanciado) por meio de uma classe.

2.1.1 Criando uma Classe


Para escrever uma classe, usa-se a seguinte sintaxe: a declaração class, e em seguida, chaves para a

75 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

implementação de todos os métodos e atributos necessários na criação dos objetos relacionados com essa
classe.

class MinhaClasse {
// todo o código que envolve a classe, seus atributos e métodos
}

A sintaxe da declaração class é:

QualificadorDeAcesso class nomeDaClasse

Qualificador de Acesso – Determina o acesso a essa classe por outras classes. Iremos falar sobre
os possíveis modificadores mais tarde. Por enquanto, deixaremos sem qualificador de acesso a
nossa classe.
Class – A palavra class informa que essa declaração refere-se a uma classe.
Nome da Classe – Em Java, por padronização, todas as classes começam com letra maiúscula.

Agora, vamos começar a escrever a nossa classe automóvel.

class Automovel {
// código da classe Automóvel
}

2.1.2 Definindo um Atributo de uma Classe


Os atributos definem as propriedades (estado, atributos) que um objeto pode ter. A sintaxe para declaração
de um atributo é:

[visibilidade] [static] [final] tipo nome_da_variavel [= valor];

Os colchetes indicam que as palavras reservadas de visibilidade, static, final e atribuição do valor são
opcionais, ou seja, podem ou não ser utilizadas.

Visibilidade: limita o acesso ao atributo de uma determinada classe. Os níveis de visibilidade são:
private, protected, <default> e public.

private é mais restritivo; o atributo ou método só pode ser visto dentro da própria classe;
protected pode ser visto na classe, na hierarquia (herança) e no pacote;
<default> quando não atribuímos nenhum modificador de visibilidade o valor default
(padrão) é assumido;
public é o mais liberal; o atributo ou método pode ser acessado em por todo mundo
(qualquer classe).

Static – Nesse contexto, a palavra reservada static significa que o atributo pertence à classe e não
ao objeto.
Final – Na declaração de um atributo, final indica que este é uma constante, ou seja, só pode
receber uma única atribuição.
Tipo do Atributo – Os atributos de uma classe podem ser do tipo primitivo (int, double, float,
etc.) ou ser uma outra classe (String, Pessoa etc.).
Nome do atributo – Define o nome do atributo. Por questão de padronização, todos os atributos
em Java começam com letra minúscula. Quando a palavra é composta, as iniciais das próximas

76 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

palavras devem ser em maiúsculo. Exemplo: nomeCompleto e telefoneCelular.

Exemplos de definição de atributos:

private int código;


public String nome;
private String modelo;

Agora vamos escrever os atributos da classe Automóvel. Como pode ser observado a seguir, a classe
Automóvel tem um atributo do tipo primitivo int (ano), dois atributos do tipo da classe String, (cor,
modelo), além do atributo do tipo da classe Pneu (pneu).

class Automovel { class Pneu {


String cor; String tipo;
int ano; String marca;
String modelo; int aro;
Pneu pneu; }
}

2.1.3 Criando Métodos de uma Classe


Como vimos anteriormente, métodos definem o comportamento que um determinado objeto pode ter. Os
métodos assemelham-se às funções de outras linguagens de programação.

A sintaxe de um método é dada a seguir:

ModificadorDeAcesso TipoDeRetorno nomeMetodo(lista de parâmetros) {


// código relacionado com o método
[return valorRetornado;]
}

Modificador de acesso – Define quem pode ter acesso ao método. Até esse momento,
conhecemos os modificadores public e private.
TipoDeRetorno – É o tipo do dado que o método irá retornar. Se o método não retorna nenhum
valor, deve-se utilizar a palavra void. Um retorno de um método pode ser do tipo primitivo ou do
tipo de uma classe.
Lista de parâmetros – Um método pode não receber parâmetros, ou receber um ou mais
parâmetros. Para receber mais de um parâmetro é necessário separá-los por vírgula. Para cada
parâmetro é necessário definir o seu tipo.
Return – É uma palavra reservada no Java que define o retorno de um método. Quando o método
não retorna nada (tipo de retorno void), o return não deve ser utilizado no método.

Agora que sabemos o que são os métodos, vamos escrever alguns métodos da classe Automóvel. Os
métodos implementados são: o ligaMotor que tem como objetivo colocar o motor no estado ligado; o
getModelo que retorna o modelo do automóvel, e o setAno que atribui um ano para o automóvel.

class Automovel {
String cor;

77 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

int ano;
String modelo;
Pneu pneu;

public void ligamotor(){ //Método público que não retorna nenhum valor e não recebe parâmetros
estadoMotor= true;
}
public String getModelo(){ //Método público que retorna uma String e não recebe parâmetros
return modelo;
}
public void setAno (int novoAno){ //Método público que não retorna nenhum valor e recebe um par
ano = novoAno;
}

O método construtor é utilizado para definir o estado inicial de um objeto. Por meio do método construtor
o objeto de uma classe é instanciado (criado). Como sabemos, a classe é utilizada para criar objetos, e o
como deve ser criado esse objeto é definido no método construtor.

O método construtor tem algumas características especiais:

Tem o mesmo nome da classe.


Sempre é um método público.
Não retorna nenhum valor. Não é necessária na definição do método construtor a palavra void.

Uma classe pode ter vários métodos construtores. Quando não é definido um método construtor, o
compilador Java cria um automaticamente sem receber nenhum parâmetro.

A seguir, é apresentada a classe Automóvel com dois métodos construtores, um sem receber nenhum
parâmetro, o outro recebendo os valores iniciais dos atributos da classe Automóvel.

class Automovel {
String cor;
int ano;
boolean estadoMotor;
String modelo;
Pneu pneu;

public Automovel(){
}
public Automovel(String cor, int ano, String modelo){
this.cor = cor;
this.ano = ano;
this.modelo = modelo;
}
public void ligaMotor(){
estadoMotor= true;
}

78 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

public String getModelo(){


return modelo;
}
public void setAno (int novoAno){
ano = novoAno;
}
}

Quando um método construtor for vazio, os objetos criados a partir desse método terão seus valores
iniciais correspondentes aos valores padrões do tipo da variável. Por exemplo, na classe Automóvel, o ano
que é do tipo int terá o valor inicial 0, estadoMotor que é boolean terá o valor false, e as variáveis cor e
Pneu que são do tipo de classes terão seus valores iniciais null.

No exemplo anterior, foi apresentada a palavra this no método construtor do Automóvel. A palavra this é
utilizada para fazer referência ao atributo do objeto. É utilizada para tirar ambigüidade entre os nomes das
variáveis recebida como parâmetro e o atributo da classe. Exemplo: this.ano refere-se ao atributo ano da
classe Automóvel, a variável ano (sem a palavra this) refere-se ao parâmetro passado para o método.

Em uma classe Java podemos ter mais de um método com o mesmo nome, com argumentos diferentes e
talvez tipo de retorno diferente, isso se chama sobrecarga de método.

A sobrecarga é utilizada quando é necessário que o mesmo método tenha comportamento diferente de
acordo com os seus parâmetros de entrada. Suponha uma classe chamada Triângulo que tenha um método
específico para cálculo de área. Existem diferentes formas de se calcular a área de um triângulo: tem-se,
por exemplo, o cálculo do tamanho dos seus lados ou o cálculo de sua base e altura. No exemplo
apresentado a seguir, a classe Triângulo tem dois métodos para o cálculo da área do triângulo. Esse é um
exemplo de sobrecarga, em que um mesmo método (mesmo nome, calculaSalario) recebe diferentes
parâmetros de entrada, retornando à área do triângulo.

public class Triangulo {


// ...

79 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

public float calculaArea(float base, float altura){


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

Resumo de sobrecarga:

dois ou mais métodos na mesma classe (incluindo métodos herdados de uma superclasse) com o
mesmo nome, porém com lista de argumentos diferentes, são ditos sobrecarregados;
métodos com o nome sobrecarregados são métodos independentes;
métodos sobrecarregados são chamados da mesma maneira, e a definição do método a ser
executado será de acordo com a lista de parâmetros utilizados na chamada do método.

2.2 Objetos
Um objeto é uma representação abstrata de uma entidade do mundo real que tem um identificador único,
propriedades embutidas e a habilidade de interagir com outros objetos e consigo mesmo.

As classes são utilizadas para criar objetos. As classes definem os atributos e o comportamento dos
objetos. Depois de aprendermos a criar as nossas classes, vamos aprender a escrever os nossos objetos.

Objetos são criados por meio da palavra reservada new seguida do método construtor da classe referente
ao objeto. Dessa forma, sempre que encontrarmos a palavra new, isso significará que um objeto está
sendo criado e que o método construtor da classe relacionada a esse objeto será executado.

// A variável gol é do tipo Automóvel


Automovel gol;

// A variável gol vai faz referencia a um objeto do tipo Automovel


gol = new Automóvel();

Todo objeto do tipo Automóvel terá os atributos cor, ano, estadoMotor e Pneu. Para acessar algum desses
atributos, a sintaxe será a variável de referência ao objeto “.” (ponto) e nome do atributo.

<variável de referência>.<atributo>

A seguir, é apresentado um exemplo, em que a variável gol referencia um objeto do tipo Automóvel. O
atributo ano do objeto referenciado pela variável gol é 2005 e a cor é Branca.

// A variável gol do tipo Automóvel é declarada e o objeto criado


Automovel gol = new Automóvel();

// Acessando os atributos do objeto gol


gol.ano = 2005;
gol.cor = “Branca”;

80 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

Para acessar os métodos, é necessário utilizar a variável de referência ao objeto “.” (ponto) e o nome do
método.

<variável de referência>.<método>

Lembre-se de que os métodos de um objeto podem retornar ou não algum valor. Dessa forma, os valores
de retorno podem ser recibos em uma variável. No exemplo apresentado a seguir, a variável modelo recebe
o valor do modelo que está no objeto gol.

// A variável gol do tipo Automóvel é declarada e o objeto criado


Automovel gol = new Automóvel();

// Acessando os métodos do objeto gol


String modelo = gol.getModelo();
gol.ligaMotor();

Nessa aula estudamos o que são classes e objetos, como são estruturados e como criá-los e utilizá-los. A
partir da próxima aula estaremos nos aprofundando nas características específicas que essas classes e
objetos podem ter.

Aula 03 – Estrutura da Linguagem


Nesta aula, abordaremos as principais estruturas da linguagem de programação Java. Você terá a
oportunidade de conhecer como fazer comentários e utilizar a documentação da linguagem Java por meio
da ferramenta javadoc. Você conhecerá também os principais tipos primitivos e o uso de arrays, bem como
os operadores, os principais comandos e as estruturas de controle e repetição.

3.1 Comentários
Existem três formas de fazer comentários em Java, descritas a seguir:

// É utilizado para comentar uma linha do ponto


inicial até o final da linha.

/* ... comentários ... */ Comenta um bloco.

/** ... comentários ... */ Comenta um bloco e indica o uso de


documentação em Java (javadoc).

Uma ferramenta importante para documentação de programas Java é o javadoc. Para aprender a utilizar o
javadoc e aprofundar os conhecimentos, veja os descritores no site da Sun.

3.2 Variáveis e Tipos Primitivos

3.2.1 Identificadores e Palavras Reservadas


Para introduzir o assunto de variáveis, tipos primitivos e objetos em Java, é necessário conhecer como é
possível fazer a sua identificação. Os identificadores em Java começam com letra, hífen (caixa baixa) ou o

81 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

sinal de $, sendo que esse último não é recomendado por ser comumente utilizado para questões internas
da linguagem com o sistema operacional seguido por outros dígitos.

Exemplo de identificadores válidos:

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

Exemplo de identificadores inválidos:

2o_nome, 1segredo, !teste, @case etc... (pois não começam com letra, $ ou _ )

Entretanto, algumas palavras não podem ser utilizadas; na verdade, já são ou foram utilizadas pela
linguagem Java e ficaram reservadas. A Figura 3.1, abaixo, mostra exemplos de palavras reservadas:

Figura 3.1 Palavras Reservadas

A Tabela 3.1, abaixo, apresenta os tipos primitivos, o respectivo tamanho em bits, os números mínimos e
máximos, além da classe Wrapper correspondente.

82 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

Tabela 3.1 – Tipos Primitivos

Tipo Bits Mínimo Máximo Wrapper

boolean 1 - - Boolean

byte 8 -27 27 -1 Byte

char 16 Character

short 16 Short

int 32 -231 231 -1 Integer

float * 32 Float

long 64 -264 264 -1 Long

double * 64 Double

void - - - Void

83 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

* Representações em ponto flutuante.

Uma classe Wrapper é a representação de um tipo primitivo na forma de objeto.

3.2.2 Declarando e Inicializando uma Variável (Tipo


Primitivo)
Em Java, é possível fazer somente a declaração de uma variável ou declarar e inicializar uma variável na
mesma instrução, veja os exemplos abaixo:

int x, y; // Declara de x e y do tipo int


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

3.2.3 Declarando e Inicializando uma Variável (array)


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

int [] x; // Declara um array unidimensional x do tipo int


int x [] = new int[10]; // Declara um array com 10 elementos do tipo int
int x[] = {0;1,2,3}; // Declara um array com 4 elementos 0,1,2,3

Existem algumas regras básicas para utilização de arrays:

arrays são sempre de um mesmo tipo.


array tem tamanho fixo e definido.
só podemos acessar um índice do array depois de inicializá-lo.
não faz diferença colocar o símbolo [] antes ou depois do nome da variável.
podemos ter arrays de mais de uma dimensão.

3.3 Operadores
Dividimos os operadores em aritméticos, relacionais e lógicos.

3.3.1 Operadores Aritméticos


Os operadores aritméticos representam operações aritméticas e podem ser utilizados com um ou dois
operandos. Veja a Tabela 3.2 abaixo:

84 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

Tabela 3.2 – Operadores Aritméticos

Operador Operação Exemplo

+ Soma p1 + p2

- Subtração x-y

* Multiplicação a*b

/ Divisão z/x

% Resto da divisão a%b

++ Incremento ++i ou i++

-- Decremento --i ou i--

85 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

Algumas questões merecem destaque nas operações aritméticas:

Existe como na matemática a precedência de operadores ( * / % + - ).


Em uma expressão com tipos diferentes, por exemplo, um inteiro e um double, no resultado,
prevalece o número com maior precisão, por exemplo, na divisão do número 3.2/2, o resultado
será um número double 1,6.
Quando ocorrem operações com dois números do mesmo tipo, o resultado sempre será do mesmo
tipo. Por exemplo, na divisão de um inteiro (int) por outro inteiro (int) o resultado é inteiro: x =
14/3 o resultado final é um inteiro com o valor 4.

Existe ainda uma forma reduzida de uma expressão, por exemplo:

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

3.3.2 Operadores Relacionais


Java possui um conjunto completo de operadores relacionais, onde o resultado é uma expressão lógica –
verdadeiro (true) ou falso (false). Veja na Tabela 3.3, abaixo, a relação dos operadores relacionais e os
seus respectivos significados:

Tabela 3.3 – Operadores Relacionais

Operador Operação Exemplo

== Igualdade (3 == 7) (o resultado é false)

!= Desigualdade (x!= y)

> Maior a>b

< Menor z<x

>= Resto da divisão a >= b

<= Incremento i <= j

3.3.3 Operadores Lógicos


Os operadores lógicos, semelhante aos operadores relacionais, também tem como retorno uma expressão
do tipo verdadeiro (true) ou falso (false); são eles:

86 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

Tabela 3.4 – Operadores Lógicos

Operador Operação

! ou ~ Negação

& E (lógico)

| Ou (lógico)

&& E exclusivo

|| ou ^ Ou exclusivo

3.5 Comando, Expressões e Blocos


Os comandos em Java sempre terminam com um ponto e vírgula “;”.

Um bloco é delimitado por abre e fecha chaves { ... }.

Espaços em branco, tabulação e quebras de linha são considerados espaços em branco e não são
considerados pelo compilador Java. Veja o exemplo abaixo e reflita:

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

Qual é o valor final de x ao final da execução desse trecho de programa?

x é igual a 11, porque, independente do alinhamento (dos espaços em branco), o programa não passa pelo
if, que não tem início e fim de bloco, e executa a próxima instrução, que é x++, atribuindo a x (que
inicialmente estava com 10) o valor final 11.

3.5 Estruturas de Controle e Repetição


Você já deve ter utilizado outra linguagem de programação, ou até mesmo o Visualg na unidade de
Algoritmos e Programação. Logo, você já deve estar familiarizado com as estruturas de controle e
repetição. Nesta seção você perceberá algumas diferenças e semelhanças que a linguagem Java implementa
em suas estruturas de controle e repetição.

3.5.1 Estruturas de Controle


Você já conhece uma estrutura do tipo (se – então) do inglês (if then else)? Ela serve para desviar o fluxo
normal de execução do programa dado uma condição. Veja a sua estrutura e o exemplo abaixo:

Sintaxe:

if (expressão booleana)
comando ou bloco

87 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

else (opcional)
comando ou bloco

Exemplo:

public class TesteIf {


public static void main(String args[]){
int x=10;
int y=15;
if (x>y)
x-=y;
else
x+=y;
}

Qual o valor de x na linha 9?

Acertou quem respondeu x igual a 25, pois, avaliando a expressão x > y na linha 5, o resultado é false,
portanto, não executa a linha 6; e, como existe o else na linha 7, o próximo comando ou bloco é a
execução da linha 8, ou seja: atribui-se ao valor de x (10) + o valor de y (15) armazenando o resultado no
próprio x.

Observação importante: diferente de outras linguagens com C e C++, Java não permite a substituição da
expressão booleana (true ou false) por um inteiro (0 ou 1).

Outra estrutura de controle é o switch que tem a sintaxe e o exemplo descrito abaixo:

switch (expressão)
{
case expressão1:
comando ou bloco
break;
case expressãon:
comando ou bloco
break;
default:
comando ou bloco
}

Exemplo:

public class UsoSwitch {


public static void main(String[] args) {
for(int i=1; i < 5; i++){
switch(i)
{
case 1 : System.out.println("Numero UM");
break;
case 2 : System.out.println("Numero DOIS");

88 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

break;
case 3 : System.out.println("Numero TRES");
break;
default : System.out.println("Numero INVÄLIDO");
}
}
}
}

A saída desse programa é:

Numero UM
Numero DOIS
Numero TRES
Numero INVALIDO

3.5.2 Estruturas de Repetição


As estruturas de repetição em qualquer linguagem de programação servem para repetir um comando ou
bloco várias vezes. As estruturas de repetição indeterminadas, isto é, aquelas que não se sabe, a priori,
quantas vezes deve ser executado o comando ou bloco, podem ser divididas em:

while (expressão) comando ou bloco – nesse caso, o comando ou bloco só será executado se a
expressão for verdadeira (true) e irá executar-se até que a expressão se torne falsa (false).
do comando ou bloco while (expressão) – nesse caso, o comando ou bloco executará pelo menos
uma vez e depois será avaliada a expressão.

Veja os exemplos de uso das estruturas de repetição do tipo: while, do while e for abaixo:

Exemplo while:

Figura 3.4 – Programa UsoWhile.java

public class UsoWhile {


public static void main(String[] args) {
int x=10, y=15;
while(x < y){
x++;
y--;
System.out.println("O valos da soma de y e x = " + (x+y));
}
}
}

Quantas vezes apareceu na tela a frase “O valor da soma de y e x = “ com o resultado de x + y =25?

Acertou quem respondeu três vezes. No primeiro teste while (x < y), o valor de x=10 e y=15, no segundo
x=11 e y=14 e no terceiro e último o x=12 e y=13, a partir daí o x passa a ser maior que y e não entra
mais na estrutura de repetição.

89 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

A estrutura do tipo for é também conhecida como laço (repetição); é uma estrutura bem genérica que
suporta iterações. Sua sintaxe é apresentada a seguir.

for (parâmetros; condição; expressão)


bloco de repetição

Onde:

O parâmetro é executado antes de o loop começar. Sempre sendo utilizado para condições iniciais.
Pode conter declarações.
A condição é verificada no início do loop. O bloco será repetido até que a condição torne-se falsa.
A expressão é executada depois do bloco do loop.

Veja o exemplo abaixo que imprime na tela os números de 1 a 10:

public class UsoFor {


public static void main(String[] args) {
for (int i = 1; i < 10; i++)
System.out.println(i);
}
}

Na primeira parte da instrução for, int i = 1 é feita a definição de i e o seu valor inicial (é possível definir o
tipo de i fora do for e somente utilizá-lo com um valor inicial), a segunda parte é a condição de teste (i <
10), e a terceira e última parte (i++) representa a alteração do contador. Abaixo, temos um exemplo de
uso do for junto com o exemplo do switch.

public class UsoSwitch {


public static void main(String[] args) {
for(int i=1; i<5; i++){
switch(i)
{
case 1 : System.out.println("Numero UM");
break;
case 2 : System.out.println("Numero DOIS");
break;
case 3 : System.out.println("Numero TRES");
break;
default : System.out.println("Numero INVÄLIDO");
}
}
}
}

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

Aula 04 – Java Corporativo e Aplicações para Web


O Java Enterprise Edition (J EE) é uma arquitetura que possui uma série de características importantes para

90 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

o desenvolvimento de aplicações corporativas. Já tivemos o primeiro contato com essa arquitetura; nesta
aula, vamos detalhar e aprofundar um pouco mais esses conhecimentos. Quando falamos de aplicações
corporativas, estamos pensando em aplicações complexas com requisitos de segurança, escalabilidade,
portabilidade, alta disponibilidade e com baixo custo de manutenção, nesse cenário surgiram várias
arquiteturas de software e frameworks que implementam tais funcionalidades e com essas características
desejáveis. Agora, vamos detalhar a arquitetura J EE proposta pela Sun Microsystems (www.java.sun.com)
como solução para aplicações corporativas.

4.1 Java e Aplicações Corporativas


A arquitetura J EE provê uma plataforma de desenvolvimento de componentes do lado do servidor. A Sun
apresentou uma especificação contendo informações sobre o que é necessário para o funcionamento de um
programa. Nesse exemplo, chamaremos esses programas especiais de containers, que implementam a
especificação fornecida pela Sun e se tornam servidores J EE compatíveis.

A figura abaixo, retirada do tutorial da Sun, sobre J EE, exemplifica melhor essa dinâmica.

Figura 4.1 – Arquitetura J EE

Do lado do cliente, podemos ter aplicações Desktop (Swing), ou uma aplicação Web através de um
navegador acessando um servidor J EE; percebam que a comunicação pode ser feita tanto através de um
container Web, no caso de usar as tecnologias Servlet ou JSP, quanto através de um container EJB
(Enterprise JavaBean), para posterior comunicação com o mecanismo de persistência, nesse exemplo um
banco de dados.

Nesta aula, não iremos tratar em detalhes dos componentes EJBs,; partiremos para explorar as aplicações
Java para Web e suas tecnologias.

4.2 Java e Aplicações para Web


Existem várias iniciativas da Sun para a utilização de aplicações Java para Web, a primeira delas foram os
Applets que eram são programas gráficos Java que são disponibilizados na Web para serem baixados
(download) para serem executados em um navegador da máquina cliente. Os Applets tiveram sua época

91 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

áurea no final dos anos de 1990, quando surgiram as primeiras especificações de aplicações para Web e,
atualmente, não estão sendo utilizados na mesma intensidade. Hoje, as tecnolgias mais utilizadas são:
Servlets, JSPs, JSTLs, JSF e Struts. Para entender melhor o cenário que estamos descrevendo, observe a
figura a seguir.

Figura 4.2 – Tecnologias Java para Web

Percebam que os Servlets são a base das aplicações Java para Web, seguidos do JSP (JavaServer Pages) e
das bibliotecas de marcadores (Tag Libs) por fim, temos o JSF (JavaServer Faces) e o Struts, que são
frameworks para o desenvolvimento de aplicações Java para Web.

Os Servlets são programas escritos em Java baseados no protocolo HTTP (HiperText Transfer Protocol).
Para suportar as requisições http, os Servlets enviam suas respostas para os navegadores através de págias
HTML. Na verdade, os servlets estão fundamentados em dois objetos-chave: o HTTPServletRequest eo
HTTPServletResponse; o primeiro encapsula o pedido do cliente e o segundo encapsula a resposta enviada
ao navegador.

Veja abaixo o código do programa FirstServlet.java e perceba algumas classes/bibliotecas necessárias que
fazem parte da API dos Servlets.

92 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

Figura 4.3 – Exemplo de um Servlet

Inúmeros elementos foram introduzidos como novidade nesse exemplo: os objetos HttpServletRequest e
HttpServletResponse, na linha 6, além da exceção ServletException, na linha 7; esse exemplo serve ainda
para mostrar a flexibilidade da tecnologia Java, mas também a sua complexidade. Por exemplo: podemos
perceber que, para que esse código seja compilado, necessitamos de uma API específica (nesse exemplo,
um arquivo Servlet.jar) que vem junto com o servidor (Tomcat). Para aprofundar os conhecimentos sobre
essa tecnologia, indicamos o Tutorial de Servlets da Sun.

Os JSPs surgiram para facilitar a vida de quem já programava usando os Servlets e, também, como
resposta da Sun para simplicidade na construção de aplicações Java dos concorrentes ASP (Active Server
Pages) da Microsoft e PHP (Personal Home Page). Os JSPs, ao contrário dos Servlets, são arquivos-texto
comuns (semelhante a uma página HTML); pode-se inserir código Java dentro dessas páginas. No final das
contas, todos os JSPs se tornarão Servlets, para serem executados no servidor Web, mas grande parte do
“trabalho pesado” fica sob a responsabilidade do container Web. Por exemplo: quem compila e publica o
servlet gerado por uma página JSP é o próprio container. Essas facilidades popularizaram o uso de JSPs nas
organizações.

As páginas JSPs podem conter uma séria de elementos, dos quais merecem destaque:

Elemento Exemplos Descrição


diretivas <%@ page atributo="valor"%> Define propriedades gerais em umarquivo
JSP
scriplets <% ... %> Define trechos de códigos Java, a serem
executados durante uma requisição.
declarações <%! ... %> Declara variável e método.

93 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

expressões <%= ... %> Variáveis ou métodos Java com retorno do


tipo String enviados para uma página de
saída (out)
ações <jsp:... ... /> Novas ações adicionadas à página c/
mecanismo de extensão de tags

Precisamos ter em mente que todas as páginas JSPs, na verdade, serão transformadas em Servlets para
serem executadas; com isso, alguns elementos aparecem nessa página independentemente da vontade do
usuário. Esses elementos são chamados de objetos implícitos, pois constam em todas as páginas JSPs.
Veja as características de cada um no quadro abaixo:

Objeto Tipo Descrição


Implícito
request javax.servlet.http.HttpServletRequest Requisição corrente, como o
1º parâmetro do método
service()
response javax.servlet.http.HttpServletResponse Resposta corrente, como o 2º
parâmetro do método
service()
pageContext javax.servlet.jsp.PageContext page Contexto da página JSP
corrente
session javax.servlet.http.HttpSession Contexto da sessão para o
cliente HTTP (se houver)
application javax.servlet.ServletContext Contexto da servlet ao qual
esta página JSP pertence
out javax.servlet.jsp.JspWriter Fluxo de saída da página de
resposta
config javax.servlet.ServletConfig Parâmetros de configuração da
página corrente.
page java.lang.Object page Instância da classe que
implementa esta página JSP
exception java.lang.Throwable Exceção padrão

No futuro, as aplicações Java (ou não), Web (ou não), serão semelhantes a componentes de prateleira
(Figura 4.4), ou seja, a tendência é que utilizemos softwares e padrões de projetos e desenvolvimento
compatíveis e reutilizáveis.

94 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

Figura 4.4 – Componentes de prateleira

Existem diversas outras tecnologias Java que podem ser estudadas, mas, para aprofundar os
conhecimentos em aplicações corporativas e aplicações para Web, recomendamos as leituras abaixo, sobre
J EE, JSF e Struts.

J EE Tutorial da Sun
JSF (Site da Sun)
Struts2 (Roseindia.net)

Quem arrisca um palpite sobre as tecnologias que estarão presentes no futuro de nossas aplicações? (Web?
Celulares? Pequenos dispositivos (sistemas embarcados)?, dispositivos móveis? TV Digital?...)

Até aqui, tivemos o primeiro contato com a linguagem de programação Java, conhecemos um
pouco da sua história e suas principais características e vimos também o primeiro programa e
alguns ambientes de desenvolvimento.

Bons estudos e sucesso!

Referencias
ACHOUR, Mehdi; BETZ, Friedhelm; DOVGAL, Antony; LOPES, Nuno; OLSON, Philip; RICHTER, Georg;
SEGUY, Damien; VRANA, Jakub. Manual do PHP. PHP Documentation Group, 2007. Disponível em:
<http://www.itmnetworks.com.br/suporte/manuais/php/index.html>. Acesso em: 31 de março de
2008.

BARRETO, Maurício V. de S. Tutorial da linguagem PHP. Sergipe: DCCE, CCET, Universidade Federal de
Sergipe, s.d. Disponível em: <http://br.geocities.com/trabalho_na_rede/tutorial_php.rtf>.
Acesso em: 31 de março de 2008.

JÚNIOR, Fred Cox. Programando para Web com PHP/MySQL. Livro Eletrônico, 2ª edição, 2001.
Disponível em: <http://www.scriptbrasil.com.br/download/apostila/804/>.

LUTZ, Mark & ASCHER, David. Aprendendo Python. 2ª ed. Porto Alegre: Bookman, 2007.

LUTZ, Mark. Python – guia de bolso. Rio de Janeiro: Alta Books, 2006.

ROSSUM, Guido van. Python Tutorial - Release 2.5.2. Disponível em: <http://docs.python.org

95 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

/tut/tut.html>. Acesso em 31 de março de 2008.

RNP – Rede Nacional de Pesquisa, Centro Regional de Brasília CR/DF. Tutorial - Autoria em World Wide
Web. Brasília: RNP, 1995.

SIQUEIRA, Bruno R. Apostila de PHP. Publicação eletrônica. Disponível em:


<http://www.supernetsolutions.com.br/suporte/....>. Acesso em: 31 de março de 2008.

Glossário
/etc/profile – Arquivo de configuração onde são especificadas algumas variáveis de ambiente.

/home – Diretório onde geralmente são criados os subdiretórios dos usuários do sistema Linux.

A
API (Application Program Interface) – É um conjunto de bibliotecas de classes reutilizáveis.

Argumentos – Valores passados para uma função durante uma chamada.

Arquivo Fonte – É o arquivo texto, de alto nível, onde se escrevem os comandos da linguagem Java.

Arrays – Estrutura simples de Java que representa uma coleção de objetos.

B
Bivitelinos – Irmãos gêmeos não idênticos, oriundos de óvulos diferentes.

Built-in – Função ou nome embutidos na própria linguagem que não precisam ser importados de nenhum
módulo (http://docs.python.org/lib/builtin.html).

Byte Code – É o código Java compilado e que pode ser executado em qualquer ambiente que tenha uma
máquina virtual Java.

C
C – Linguagem de programação mais popular, sua sintaxe serviu de inspiração para diversas outras
linguagens de programação, como PHP, Java e PERL.

CGI (Common Gateway Interface) – Conceito de programação em que a execução do programa é


solicitada pelo servidor web. Sua execução imprime, através de comandos de saída, uma página HTML,
entregue ao servidor web e, posteriormente, ao navegador solicitante.

Classe – Em orientação a objetos são modelos que determinam as características e comportamentos dos
objetos (instâncias) criados.

Compilador – Ferramenta utilizada para transformar código fonte em código compilado, no caso de
Java, para transformar em byte code.

Constantes Booleanas – Em computação, são nomes que se associam aos valores Verdadeiro (1) ou

96 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

Falso (0).

CORBA (Common Object Request Broker Archtecture) – É uma arquitetura para objetos distribuída e
suportada pela linguagem Java.

Core – É o núcleo da linguagem, as principais classes e ferramentas.

D
Download – Processo de baixar programas, normalmente da Web.

H
HTML (Hypertext Markup Language) – Linguagem de Marcação de Hipertexto, é um conjunto de tags
utilizadas para formatação de texto e hipertexto (link), para ser visualizado na Internet.

I
Instância – Objeto criado a partir de uma Classe da qual recebe suas características.

J
Java – Linguagem de programação muito popular, orientada a objetos, desenvolvida pela Sun
Microsystems.

JavaScript – Linguagem de programação do lado do cliente. É executada localmente pelo navegador após
a página ser descarregada. Nada tem a ver com a linguagem Java; seu nome foi escolhido apenas para
aproveitar a popularidade do Java.

L
Linguagem C – Linguagem de programação estruturada criada por Dennis Ritchie e Ken Thompson no
AT&T Bell Labs.

M
Máquina Virtual Java – É uma máquina imaginária implementada por software que simula uma máquina
real, tornando possível a portabilidade de programas Java. É responsável pelo tratamento de
heterogeneidade entre plataformas.

Método – Função que define um comportamento de um objeto.

Método Construtor – É um método especial em Java que serve para inicializar os valores de um objeto.
Tem o mesmo nome da classe e não possui tipo de retorno. Toda classe possui um construtor; se não
escrevemos um, o compilador o gera automaticamente.

N
Navegador Internet – Software utilizado para exibir páginas HTML e navegar pela Internet. Exemplo de
navegadores: Netscape Navigator, Internet Explorer e FireFox.

97 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

Número Complexo – Número que pertence a um conjunto que estende o conjunto de números reais (R).
Seu formato é: x + yi, onde x e y são números reais e i é um número imaginário, sendo (i^2 = -1).

O
Oak (carvalho) – Em função de uma árvore que existia em frente ao escritório de James Gosling.
Primeiro nome da linguagem Java.

Objeto Global – Elemento que pode ter seu valor acessado em qualquer ponto de um programa,
independentemente de onde foi declarado.

Orientada a Objeto – Paradigma de programação onde os elementos são construídos a partir da


modelagem do mundo real usando seus atributos e comportamentos.

P
Pascal – Linguagem de programação estruturada criada em 1970 por Klaus Wirth. Era uma linguagem
muito popular para fins acadêmicos.

PEP (Python Enhancement Proposals) – Guia de normalização da linguagem, onde a comunidade de


desenvolvedores da linguagem propõe características que são integradas a futuras versões da linguagem
(http://www.python.org/dev/peps/).

PERL (Pratical Extraction and Report Language) – É a mais utilizada linguagem de programação para
implementação de programas CGI.

Ponto Flutuante – Tipo numérico usado para representar tanto números fracionários quanto números
muito grandes usando a notação científica ( M x B ^ e ).

Programação Estruturada – Paradigma de programação em que os programas são escritos numa forma
estruturada em funções e procedimentos.

R
RMI (Remote Method Invocation) – É uma API de Java que dá suporte à programação distribuída, ou
seja, a invocação de métodos remotos como se fossem locais.

S
Servidor Web – Software utilizado para servir páginas HTML. Para informar o endereço de um site, ao
navegar, é necessário que haja um servidor web instalado nesse endereço, para fornecer as páginas HTML.

SQL (Structured Query Language) – Linguagem de manipulação de banco de dados relacionais.

T
Tags HTML – Marcação utilizada na escrita de páginas HTML.

Threads – API de Java que permite rodar os programas em mais de uma linha de execução.

Tipada – Uma linguagem de programação é tipada quanto existe a verificação dos tipos de dados das

98 de 99 2/8/2011 14:23
(Versão para impressão) Linguagem de Programação e Ferramentas http://www.catolicavirtual.br/conteudos/pos_graduacao/desenv_software...

variáveis.

Tipo Primitivo – É um tipo de variável nativa da linguagem Java. Por exemplo: int, float, double, void,
char e boolean.

V
Variável de Ambiente – Variável usada tanto pelo sistema operacional quanto por algumas aplicações
para obter valores de configuração pré-determinados.

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

WWW (World Wide Web) – Rede de alcance mundial, é serviço oferecido na Internet que apresenta texto
com formatação e hiperlink (páginas HTML).

99 de 99 2/8/2011 14:23

Você também pode gostar