Escolar Documentos
Profissional Documentos
Cultura Documentos
Programao Orientada a
Objetos
Autores: Prof. Jos Cassiano Grassi Gunji
Prof. Salatiel Luz Marinho
Prof. Luciano Soares de Souza
Professores conteudistas: Jos Cassiano Grassi Gunji / Salatiel Luz Marinho /
Luciano Soares de Souza
mestre em Tecnologia da Informao Aplicada pelo Mestre em Engenharia de Produo pela Universidade
Centro Estadual de Educao Tecnolgica Paula Souza e Paulista (UNIP) e bacharel em Cincia da Computao pela
bacharel em Sistemas de Informao pela Universidade mesma universidade.
Presbiteriana Mackenzie.
coordenador do Curso Superior de Tecnologia em
Atua como docente em cursos de graduao em Anlise e Desenvolvimento de Sistemas da UNIP, nas
Tecnologia da Informao, lecionando em disciplinas como modalidades presencial e EaD, leciona no curso as disciplinas
Programao Orientada a Objetos em Diversas Linguagens, Engenharia de Software, Projeto de Interface com o Usurio,
Anlise de Sistemas, Lgica de Programao entre outras. Princpios de Sistemas de Informao entre outras, e orienta
o Projeto Integrado Multidisciplinar PIM.
Salatiel Luz Marinho
Na Universidade Paulista tambm atua como Gerente
Psgraduado em Gesto de Projetos pelo Instituto de Integrao de Sistemas. Possui mais de 20 anos de
Brasileiro de Tecnologia Avanada (IBTA) e formado em experincia com Tecnologia da Informao, atuando nas
Engenharia da Computao pela Universidade Paulista reas de desenvolvimento de sistemas, engenharia de
(UNIP), trabalha h mais de dez anos no desenvolvimento de software, interao humanocomputador e automao
aplicaes desktop e web, tendo prestado servios a instituies industrial. Como professor e coordenador possui mais de
financeiras, de varejo e de seguros e a instituies acadmicas. oito anos de experincia.
CDU 681.3.062
Todos os direitos reservados. Nenhuma parte desta obra pode ser reproduzida ou transmitida por qualquer forma e/ou
quaisquer meios (eletrnico, incluindo fotocpia e gravao) ou arquivada em qualquer sistema ou banco de dados sem
permisso escrita da Universidade Paulista.
Prof. Dr. Joo Carlos Di Genio
Reitor
Comisso editorial:
Dra. Anglica L. Carlini (UNIP)
Dra. Divane Alves da Silva (UNIP)
Dr. Ivan Dias da Motta (CESUMAR)
Dra. Ktia Mosorov Alonso (UFMT)
Dra. Valria de Carvalho (UNIP)
Apoio:
Profa. Cludia Regina Baptista EaD
Profa. Betisa Malaman Comisso de Qualificao e Avaliao de Cursos
Projeto grfico:
Prof. Alexandre Ponzetto
Reviso:
Marcilia Brito
Rose Castilho
Virgnia Bilatto
Sumrio
Tpicos Especiais de Programao
Orientada a Objetos
APRESENTAO.......................................................................................................................................................9
INTRODUO............................................................................................................................................................9
Unidade I
1 INTRODUO AO JAVA.................................................................................................................................. 11
1.1 Um breve histrico............................................................................................................................... 11
1.2 Arquitetura de um programa em Java......................................................................................... 12
1.3 Caractersticas da linguagem Java................................................................................................. 14
1.3.1 Simplicidade............................................................................................................................................... 14
1.3.2 Orientao a objetos.............................................................................................................................. 14
1.3.3 Multithread................................................................................................................................................ 14
1.3.4 Robustez...................................................................................................................................................... 14
1.3.5 Segurana................................................................................................................................................... 15
1.4 O que necessrio para se programar em Java....................................................................... 15
1.4.1 Instalando o JDK Java SE...................................................................................................................... 17
1.4.2 Instalando o Eclipse................................................................................................................................ 18
2 A LINGUAGEM JAVA....................................................................................................................................... 18
2.1 Entrada e sada de dados usando JOptionPane........................................................................ 25
2.2 Recomendaes de estilo................................................................................................................... 29
2.3 Tipos primitivos...................................................................................................................................... 30
2.4 Converso de tipos............................................................................................................................... 31
2.5 Classes wrapper (invlucro).............................................................................................................. 34
2.6 Introduo a classes e objetos......................................................................................................... 37
2.7 Instrues de controle......................................................................................................................... 40
2.8 Arrays......................................................................................................................................................... 47
2.9 Colees.................................................................................................................................................... 49
2.10 Tratamento de excees................................................................................................................... 50
Unidade II
3 PROGRAMAO ORIENTADA A OBJETOS............................................................................................... 56
3.1 Sobrecarga............................................................................................................................................... 56
3.2 Herana..................................................................................................................................................... 58
3.3 Sobrescrita................................................................................................................................................ 59
3.4 Polimorfismo........................................................................................................................................... 60
3.5 Modificadores de acesso.................................................................................................................... 62
3.6 Escopo........................................................................................................................................................ 63
3.7 Classes abstratas e interfaces........................................................................................................... 65
4 INTERFACES GRFICAS.................................................................................................................................. 70
Unidade III
5 INTRODUO AO ANDROID......................................................................................................................... 79
5.1 Fundamentos e paradigmas de programao para dispositivos mveis........................ 79
5.1.1 Dispositivos mveis................................................................................................................................. 80
5.1.2 Desafios tcnicos para dispositivos mveis.................................................................................. 80
5.1.3 Usabilidade e os dispositivos mveis............................................................................................... 80
5.1.4 Aplicaes mveis................................................................................................................................... 81
5.2 Android...................................................................................................................................................... 82
5.3 Open Handset Alliance........................................................................................................................ 83
5.4 Verses do Android............................................................................................................................... 84
5.5 Arquitetura do Android....................................................................................................................... 85
5.5.1 Linux Kernel................................................................................................................................................ 86
5.5.2 Libraries e Android Runtime................................................................................................................ 87
5.5.3 Application Framework......................................................................................................................... 88
5.5.4 Applications............................................................................................................................................... 89
6 CONCEITOS FUNDAMENTAIS....................................................................................................................... 89
6.1 Construindo o ambiente de desenvolvimento.......................................................................... 89
6.2 Instalando o Android Development Kit (Android SDK).......................................................... 89
6.3 Instalando o Android Development Tools (ADT)....................................................................... 90
Unidade IV
7 PROGRAMAO ANDROID.......................................................................................................................... 94
7.1 Criando um projeto do Android...................................................................................................... 94
7.2 Executar o projeto................................................................................................................................. 95
7.3 O arquivo AndroidManifest.xml...................................................................................................... 98
7.4 Efetuando debug no aplicativo.....................................................................................................100
7.5 Activities.................................................................................................................................................100
7.6 Views........................................................................................................................................................101
7.7 Mtodo setContentView()................................................................................................................101
7.8 Criar uma Activity...............................................................................................................................101
8 INTERFACES GRFICAS................................................................................................................................104
8.1 TextView..................................................................................................................................................106
8.2 EditText....................................................................................................................................................107
8.3 CheckBox................................................................................................................................................108
8.4 RadioButton..........................................................................................................................................110
8.5 ImageView..............................................................................................................................................110
8.6 Button......................................................................................................................................................111
8.7 DatePicker..............................................................................................................................................112
8.8 TimePicker..............................................................................................................................................113
8.9 Layouts....................................................................................................................................................114
8.9.1 Linear layout............................................................................................................................................114
8.9.2 Table layout..............................................................................................................................................115
8.10 Intent.....................................................................................................................................................116
8.11 Broadcast Receivers..........................................................................................................................117
8.12 Services.................................................................................................................................................117
8.13 Persistncia de dados......................................................................................................................119
APRESENTAO
Este livro tem como finalidade apresentar um roteiro de estudos com exemplos prticos, visando
preparar o aluno para desenvolver programas de computador utilizando a tecnologia Java.
Todo o contedo desta obra foi desenvolvido de maneira a permitir que o aluno construa seu
conhecimento a respeito da tecnologia Java de maneira gradativa. Por isso, para se entender as
ltimas partes do livro, o aluno deve ter passado por todas as partes anteriores, de modo a acumular
conhecimento suficiente para compreender os assuntos desenvolvidos.
No necessrio conhecimento anterior de Java para acompanhar essa obra. Entretanto, assumese
que o aluno j esteja familiarizado com os conceitos de Lgica de Programao, assim como de Anlise
de Sistemas Orientados a Objetos.
Abordaremos de maneira prtica a programao usando a linguagem Java. Faremos breves revises
sobre os conceitos da Lgica de Programao e Orientao a Objetos aplicadas ao Java.
Tambm sero apresentados os recursos do Java para o desenvolvimento de interfaces grficas com
o usurio.
Bons estudos!
INTRODUO
9
Uma linguagem de alto nvel um cdigo com o qual se pode expressar algoritmos usando um
vocabulrio e uma sintaxe semelhante ao vocabulrio e sintaxe da linguagem humana (quase sempre
em ingls). Esse cdigo escrito em linguagem de alto nvel pode ser, ento, traduzido (compilado) para
a linguagem de mquina do computador em que ele ser executado.
nesse contexto que surge a linguagem de programao Java. Seus desenvolvedores estipularam
uma meta arrojada: criar uma linguagem de programao multiplataforma. Isso significa que um cdigo
de computador escrito em Java, depois de compilado, poderia ser executado por qualquer computador,
executando qualquer sistema operacional que oferecesse suporte ao Java, sem a necessidade de
recompilar o cdigofonte. Como o Java realiza esta tarefa o que veremos neste livrotexto. Tambm
veremos como desenvolver aplicativos usando Java, tanto para computadores desktop quanto para
dispositivos mveis que executem o sistema operacional Android.
10
TPICOS ESPECIAIS DE PROGRAMAO ORIENTADA A OBJETOS
Unidade I
1 INTRODUO AO JAVA
CD 20 FF 9F 00 9A F0 FE1D F0 4F 03 F0 07 8A 03
F0 07 17 03 F0 07 DF 0701 01 01 00 02 FF FF FF
FF FF FF FF FF FF FF FFFF FF FF FF BD 0D 4C 01
D0 0C 14 00 18 00 3D 0EFF FF FF FF 00 00 00 00
05 00 00 00 00 00 00 0000 00 00 00 00 00 00 00
CD 21 CB 00 00 00 00 0000 00 00 00 00 20 20 20
20 20 20 20 20 20 20 2000 00 00 00 00 20 20 20
20 20 20 20 20 20 20 2000 00 00 00 00 00 00 00
00 0D 76 2E 65 78 65 0D44 4F 57 53 5C 73 79 73
74 65 6D 33 32 5C 64 6F73 78 0D 0D 64 61 20 72
65 64 65 20 28 63 61 7272 65 67 61 72 20 61 6E
74 65 73 20 64 6F 20 646F 73 78 2E 65 78 65 29
Por razes bvias, muito difcil para um programador escrever um programa usando linguagem
de mquina. Para resolver este problema, logo comearam a ser desenvolvidas diversas linguagens de
computador de alto nvel, ou seja, linguagens que permitem que se escreva algoritmos usando palavras
com um vocabulrio e uma sintaxe semelhante ao vocabulrio e sintaxe da linguagem humana, sendo
que quase todas usam a lngua inglesa.
Muitas linguagens nunca atingiram grande aceitao. Outras chegaram a ser usadas com frequncia,
mas acabaram caindo em desuso. Hoje em dia h um punhado de linguagens que permanecem bastante
populares. Alguns exemplos so o COBOL, o C++ e o C# (DEITEL; DEITEL, 2005; 2010). As linguagens de
sucesso sempre apresentam algo que as diferencia das demais, trazendo alguma vantagem com relao
s outras. O Java um desses casos de sucesso. Vejamos a seguir como se deu o desenvolvimento do Java.
A histria da criao do Java descrita por diversos autores, como Horstmann e Cornell (2010),
Deitel e Deitel (2005; 2010), Jorge (2004), entre outros.
11
Unidade I
A Sun Microsystems, em 1991, financiou um projeto de pesquisa corporativa interna com o codinome
Green, que resultou no desenvolvimento de uma linguagem baseada em C++ que seu criador, James
Gosling, chamou de Oak. Descobriuse mais tarde que j havia uma linguagem de programao com
este nome. Uma equipe da Sun, em uma visita a uma cafeteria local, que servia caf cuja origem era da
ilha de Java na Indonsia, sugeriu esse nome e ele acabou pegando.
O projeto passou por dificuldades e quase foi cancelado. Mas em 1993 a World Wide Web explodiu
em popularidade e a equipe da Sun viu um grande potencial para utilizar o Java para adicionar contedo
dinmico, como interatividade e animaes, s pginas da Web, o que deu nova vida ao projeto.
O Java foi anunciado formalmente em 1995, ganhando muito interesse da comunidade do World
Wide Web. Atualmente, o Java popular no desenvolvimento de software para diversos aplicativos,
como aplicativos corporativos de grande porte, aplicativos governamentais, no aprimoramento da
funcionalidade de servidores Web, assim como aplicativos para o consumo popular em microcomputadores
pessoais e dispositivos mveis.
Saiba mais
<http://oracle.com.edgesuite.net/timeline/java/>.
Um dos aspectos mais marcantes do Java e que esteve presente desde sua concepo o fato
de essa linguagem ser multiplataforma. Plataforma o conjunto formado por um computador e o
sistema operacional instalado nesse computador. Podemos, ento, ter as seguintes plataformas:
Dizer que o Java multiplataforma significa dizer que um programa feito em Java e compilado em
uma determinada plataforma poder ser executado nessa plataforma e tambm em todas as demais
plataformas que do suporte ao Java.
12
TPICOS ESPECIAIS DE PROGRAMAO ORIENTADA A OBJETOS
Observao
Como possvel que um programa compilado em Java em uma determinada plataforma possa ser
executado em outras plataformas?
Lembrete
O Java realiza esta faanha porque ele no compilado diretamente para a linguagem de mquina
de uma plataforma especfica. Em vez disso, ele compilado para uma linguagem de mquina de
um computador fictcio, uma mquina virtual. Para que o programa possa ser, ento, executado, um
computador deve utilizar um emulador desse computador fictcio, que interpreta o cdigo compilado
Java. Em outras palavras: um programa em Java semicompilado, o que significa que o cdigofonte
compilado para uma linguagem intermediria, conhecida como bytecode. O bytecode um cdigo de
computador escrito em linguagem de mquina da Mquina Virtual Java (Java Virtual Machine JVM).
A Mquina Virtual Java, ento, interpreta o bytecode e executa o programa.
Com esta estrutura, um programa compilado em Java pode ser executado diretamente em qualquer
sistema que possua uma Mquina Virtual Java.
13
Unidade I
Mendes (2009) sumariza algumas das principais caractersticas do Java, caractersticas estas que
justificam a grande penetrao da tecnologia no mercado. Resumidamente temos:
1.3.1 Simplicidade
A linguagem Java considerada simples porque permite que o programador crie sistemas para
diferentes plataformas sem se preocupar com a arquitetura do hardware particular de cada uma delas.
O Java tambm no tenta reinventar a roda, criando uma nova sintaxe. Ele utiliza a sintaxe j bem
estabelecida da linguagem C. Alm disso, o Java no implementa alguns aspectos menos utilizados da
orientao a objetos, como a herana mltipla, a sobrecarga de operadores, os ponteiros e as operaes
aritmticas sobre os ponteiros.
O paradigma orientado a objetos de anlise de sistemas (e de programao) traz uma nova maneira
de se pensar o desenvolvimento de sistemas. Essa nova maneira de se criar programas utiliza os conceitos
de herana, polimorfismo e encapsulamento. Tais conceitos incentivam boas prticas de programao,
como o reuso de cdigo e a padronizao, o que torna sistemas orientados a objetos mais fceis de
serem desenvolvidos, reutilizados, e faz com que apresentem manuteno mais rpida e barata.
1.3.3 Multithread
1.3.4 Robustez
A linguagem Java e sua arquitetura de compilao para um cdigo intermedirio (bytecode) otimizado
garantem que uma grande quantidade de erros comuns em outras linguagens no ocorra em Java, por
exemplo, cdigo no alcanvel e vazamentos de memria. Esse segundo tipo de erro, muito comum
em programas feitos em C++, ocorre quando o programador reserva um espao de memria de trabalho
para seu programa e esquece de liberlo aps seu uso. Com o tempo, estes espaos no liberados vo
se acumulando, tornando o sistema cada vez menos estvel, at que ele no possa mais ser utilizado.
Em Java, este tipo de erro extremamente improvvel, pois um mecanismo automatizado chamado de
garbage collector (coletor de lixo) garante que espaos de memria reservados pelo programa e que
no esto mais em uso sejam automaticamente liberados.
14
TPICOS ESPECIAIS DE PROGRAMAO ORIENTADA A OBJETOS
1.3.5 Segurana
A linguagem Java est preparada para ser utilizada em aplicaes corporativas de grande porte, com
arquitetura distribuda, situao em que a segurana de extrema importncia.
Saiba mais
O Java disponibilizado por seu atual desenvolvedor, a Oracle, em diversas distribuies. Algumas delas so:
Java Card.
Java TV.
A mais importante distribuio a Java SE (Java Edio Padro). nessa distribuio que esto as
bibliotecas bsicas do Java e as principais ferramentas de desenvolvimento, como o compilador Java.
Tendo o SDK Java SE (tambm conhecido como JDK Java Development Kit) instalado, j possvel
escrever programas usando algum editor de arquivos de texto e usando o compilador Java por meio de
linha de comando.
15
Unidade I
Saiba mais
Voc pode obter uma viso geral a respeito do Java, assim como
adquirilo, na pgina de seu desenvolvedor:
<http://www.oracle.com/technetwork/java/javase/overview/index.html>.
perfeitamente possvel criar sistemas complexos utilizando apenas editores de arquivos texto e o
compilador por linha de comando. Entretanto, essa no a nossa proposta.
Apesar do SDK Java SE ser suficiente para se programar em Java, a maioria dos estudantes e
programadores admitem que o uso de um Ambiente Integrado de Desenvolvimento (IDE Integrated
Development Environment) torna o trabalho do desenvolvedor mais fcil. Um IDE um sistema que
rene em um nico pacote diversas ferramentas como:
Editor de cdigofonte.
Gerenciador de arquivos.
Corretor de sintaxe.
Assim, mesmo sendo opcional, vamos adotar uma IDE para desenvolver os exemplos deste livrotexto.
Existem diversas IDEs disponveis, tanto de cdigo aberto quanto de cdigo proprietrio. Vrias delas podem
ser utilizadas, mas, para no gastarmos tempo discutindo as diferenas entre elas, vamos utilizar o Eclipse.
Observao
16
TPICOS ESPECIAIS DE PROGRAMAO ORIENTADA A OBJETOS
Saiba mais
<http://www.eclipse.org>.
<https://netbeans.org>.
Lembrete
Figura 4 O Eclipse deve ser iniciado a partir do local onde ele foi extrado
2 A LINGUAGEM JAVA
Vamos criar nosso primeiro programa, o famoso Ol mundo! Comece iniciando o Eclipse. Caso nunca
o tenha iniciado antes, ele deve apresentar uma pgina de boasvindas semelhante seguinte figura:
18
TPICOS ESPECIAIS DE PROGRAMAO ORIENTADA A OBJETOS
Esta janela pede para que voc indique qual a pasta que deseja utilizar para guardar os seus
projetos Java. Utilize o local padro ou indique o local que deseja utilizar. Se marcar a check box, o
Eclipse no ir mais fazer esta pergunta ao inicilo.
A seguir, o Eclipse inicia. Novamente, caso seja a primeira vez que o esteja executando, ele deve
apresentar uma tela de boasvindas como na figura a seguir.
19
Unidade I
Vamos criar um projeto. Clique no menu File New Java Project. O seguinte assistente surge:
Na caixa de texto Project name digite o nome do seu projeto, Ola mundo. Certifiquese de que na
rea JRE voc esteja usando alguma mquina virtual Java SE. Se por algum motivo a JRE padro em seu
computador no for um Java SE, selecione o primeiro boto de rdio e escolha uma verso J2SE ou Java
SE (qualquer verso dessas deve ser suficiente).
Observao
As demais opes no precisam ser modificadas. Voc j pode clicar no boto Finish. Nesse momento,
o Eclipse cria uma pasta chamada Ola mundo no local que voc indicou como pasta de trabalho.
Dentro dela sero armazenados seus cdigosfonte, classes compiladas, arquivos de configurao, entre
outros. Note que no Package Explorer (Explorador de Pacotes) agora h o seu projeto Ola mundo.
Clique no sinal esquerda do projeto para expandir sua estrutura interna.
21
Unidade I
Agora vamos criar o arquivo onde ser escrito o cdigofonte do programa. Note que dentro do
projeto Ola mundo h uma pasta chamada src. Ela uma abreviao de source (fonte) e nela que
iremos colocar todos os cdigosfonte de um projeto. Com o boto direito do mouse, clique na pasta src
e selecione new package. Package (pacote) um conceito da orientao a objetos que permite que
o desenvolvedor agrupe suas classes em pacotes.
22
TPICOS ESPECIAIS DE PROGRAMAO ORIENTADA A OBJETOS
Na caixa para definir o nome do pacote, digite primeiroPrograma. Note que, em Java, nomes devem
ser compostos de apenas uma palavra. Clique em Finish.
Em linguagens que derivam do C, como o C++, C# e Java, os nomes de classes, variveis, mtodos,
atributos e demais elementos devem ter como nome um termo composto de uma nica palavra.
Recomendase que os nomes sejam sempre mnemnicos, ou seja, o prprio nome deve indicar
qual a natureza ou finalidade do elemento que ele batiza. Por exemplo, uma varivel no mnemnica
chamada xpto12 no d nenhuma indicao ao programador de sua finalidade. J, se ela for chamada
de contadorDeIteraes, sua finalidade se torna evidente.
Quando se utiliza mais de uma palavra como nome, recomendase que a primeira letra de cada palavra,
a partir da segunda palavra, seja escrita em maiscula. Esta notao conhecida como camel case.
Dentro do pacote primeiroPrograma vamos criar a classe OlaMundo. Clique com o boto direito
no pacote e selecione new Class.
23
Unidade I
Na caixa para definir o nome da classe, digite o nome OlaMundo. Clique em Finish. Neste momento,
o Eclipse cria o arquivo OlaMundo.java e o exibe no editor. J se pode notar um pouco de cdigo escrito
no arquivo, a declarao do pacote e da classe. A seguir, basta escrever o cdigo do mtodo principal
main() como demonstrado a seguir:
A seguir, para compilar e executar seu programa, clique no boto indicado pela primeira seta (ou
selecione o menu run run). O Eclipse ir executar o compilador Java sobre seu cdigo e executar o
programa compilado. A sada do console exibida na aba destacada pela segunda seta.
Observao
Caso a janela para o seu cdigo esteja pequena demais, voc pode dar um
duplo clique na aba da janela, o que faz com que ela seja maximizada. Para
voltar visualizao anterior, basta dar um duplo clique na aba novamente.
24
TPICOS ESPECIAIS DE PROGRAMAO ORIENTADA A OBJETOS
No exemplo anterior, utilizamos um mtodo para criar uma sada de texto no console. Tambm
possvel receber dados do usurio pelo console. No entanto, deixaremos de lado esta forma de interao
homemmquina e priorizaremos, neste material, o uso de interfaces grficas.
Saiba mais
O Java nos oferece uma ferramenta pronta para criar caixas de dilogo que so um tipo especial
de janela em ambiente grfico. Elas servem para apresentar informaes e tambm para receber dados
do usurio. Essas funcionalidades esto disponveis na classe JOptionPane que est definida no pacote
javax.swing, como ilustrado na figura a seguir:
25
Unidade I
Saiba mais
Observao
O mtodo showMessageDialog() permite a exibio de uma caixa de dilogo onde uma informao
exibida para o usurio. A sobrecarga mais simples desse mtodo :
Este mtodo requer dois parmetros: o primeiro, chamado pai, recebe um objeto que representa o
elemento grfico pai da caixa de mensagem. Esse elemento grfico costuma ser uma janela do aplicativo.
Entretanto, ainda no sabemos como criar qualquer elemento grfico, por isso, vamos utilizar a palavra
reservada null para indicar que a caixa de dilogo no ir possuir qualquer componente grfico como
pai. Isso tambm far com que a caixa de dilogo seja apresentada centralizada na tela. A palavra
reservada null indica um objeto que no foi instanciado, um objeto nulo. O segundo parmetro a
mensagem que ser apresentada dentro da caixa de dilogo.
26
TPICOS ESPECIAIS DE PROGRAMAO ORIENTADA A OBJETOS
O mtodo showInputDialog() permite criar uma caixa de dilogo que apresenta uma pergunta e
exibe um espao para que o usurio digite sua resposta. Quando o mtodo encerrado, ele retorna um
String contendo o texto digitado pelo usurio. A declarao de sua sobrecarga mais simples :
No exemplo a seguir, mostraremos um programa inteiro que utiliza a classe JOptionPane para
realizar entrada e sada de dados usando as caixas de dilogo. Note que, para se utilizar esta classe,
necessrio importar a classe para que o programa possa utilizla. Isto feito com a palavra reservada
import, que deve ser inserida logo abaixo da palavra package.
27
Unidade I
Figura 19 Um programa que realiza entrada e sada de dados por meio de caixas de dilogo
Observao
Podemos dar nomes a diversos elementos de nossos programas, como variveis, atributos, mtodos,
parmetros etc.
Lembrete
Para que se criem nomes mnemnicos, muitas vezes, desejamos usar mais de uma palavra. Mas um
nome deve ser uma nica palavra, sem espaos. A recomendao, neste caso, escrever todas as palavras
juntas, sem espao. Para se marcar a separao entre as palavras, a partir da segunda palavra, a primeira
letra deve ser grafada com letra maiscula. Esta notao conhecida como camel case. Exemplo:
contadorDeIteracoes.
respostaDoUsuario.
mediaFinal.
O Java recomenda que a primeira letra do nome seja maiscula caso o nome seja de uma classe ou
de uma interface. Exemplos:
OlaMundo.
ProgramaPrincipal.
String.
Observao
29
Unidade I
NOTA_MINIMA.
TAMANHO_PADRAO.
PI.
CONSTANTE_GRAVITACIONAL.
Tipos so a natureza dos dados que podem ser armazenados em uma varivel, um atributo, que
podem ser transferidos por um parmetro ou retorno de mtodo. Tipo primitivo o tipo de dado que
est definido na prpria linguagem Java. Por isso, esses tipos tm um excelente desempenho tanto em
economia de memria quanto em desempenho de processamento. Estes tipos so:
Na figura a seguir, criamos algumas variveis e atribumos a elas valores definidos por literais, ou
seja, valores definidos no prprio cdigofonte:
30
TPICOS ESPECIAIS DE PROGRAMAO ORIENTADA A OBJETOS
Quando se define um literal numrico inteiro, ele tratado como sendo um inteiro. J quando se
define um literal numrico com um ponto decimal, ele tratado como um double. Para se definir um
literal caractere, ele deve ser circundado por aspas simples. Um literal booleano s pode assumir os
valores representados pelas palavras reservadas true ou false.
Quando se deseja definir um literal inteiro maior do que a capacidade de representao do int,
devese indicar que o literal um long, adicionandose o sufixo L ou l. Analogamente, ao se representar
um literal como um float, devese adicionar o sufixo F ou f:
Quando se trabalha com mais de um tipo primitivo, podemos atribuir o valor armazenado em uma
varivel de tipo de menor capacidade em uma varivel de maior capacidade. De certa forma, podemos
entender que um tipo menor cabe dentro de um tipo maior.
Desta forma, o seguinte mtodo, se executado, ir gerar a mensagem representada na figura 25.
31
Unidade I
Observao
32
TPICOS ESPECIAIS DE PROGRAMAO ORIENTADA A OBJETOS
Na figura anterior est representado o mesmo programa Atribuicoes. Repare que na linha 11 h um
sinal + e a prxima linha a 24. Este sinal indica que a implementao do mtodo atribuicoesSemCast()
foi ocultada. Este recurso est disponvel no Eclipse (e em praticamente qualquer IDE moderna). Para
se exibir novamente o cdigo oculto, basta clicar no sinal +. Para se ocultar um trecho de cdigo,
clicase no sinal . A outra modificao est no mtodo main(), que agora chama tambm o mtodo
atribuicoesComCast().
33
Unidade I
Na linha 26 declarada uma varivel double com um valor em ponto flutuante. Nas linhas 27 a 31,
este valor convertido sucessivamente em tipos cada vez de menor capacidade. O resultado pode ser
visto na figura a seguir.
Note como os valores, ao serem convertidos para tipos de menor capacidade, foram perdendo
preciso, como se estivessem sendo corrompidos. Isto ocorre porque o cast no faz arredondamento,
ele faz truncamento em binrio. Isso significa que, quando um nmero convertido para um tipo de
capacidade menor em bits, apenas os bits menos significativos so mantidos. Os bits excedentes do
nmero so desprezados, o que causa a perda de informao.
Observao
Cada tipo primitivo possui uma classe wrapper associada. Uma classe wrapper pode ser utilizada para
instanciar um objeto que armazena um valor do tipo primitivo associado a ela. Alm disso, estas classes
apresentam diversos mtodos para fazer a converso de e para diversos tipos. As classes wrapper so:
34
TPICOS ESPECIAIS DE PROGRAMAO ORIENTADA A OBJETOS
short Short
int Integer
long Long
float Float
double Double
Essas classes podem ser utilizadas para se instanciar objetos com um valor do tipo primitivo associado
a elas:
A partir do Java 5 (Java verso 1.5), o valor de uma varivel de tipo primitivo pode ser atribudo
diretamente a um objeto de sua classe wrapper associada e viceversa. Este recurso chamado de
autoboxing:
As classes wrapper oferecem mtodos parse que so teis para se converter um String em um valor
de tipo primitivo associado. Cada classe wrapper possui um mtodo parse:
As classes wrapper numricas (todas exceto boolean e character) possuem mtodos value para
converter o valor armazenado no objeto para outros tipos primitivos numricos. Dessa vez, a converso
feita com arredondamento, no mais com truncamento, como o que ocorre quando se utiliza um
cast. O exemplo a seguir utiliza os mtodos value para converter de um objeto Integer para diversos
outros tipos, mas o mesmo pode ser feito com qualquer outro wrapper numrico.
35
Unidade I
Figura 31 Exemplo de uso de um objeto wrapper para se converter um inteiro para diversos outros tipos
Repare que na primeira linha foi usado um construtor da classe Integer que recebe um String e no
um int. Todas as classes wrapper possuem um construtor que recebe um String. Este construtor faz a
converso apropriada (usando um mtodo parse adequado) antes de terminar a instanciao do objeto.
Saiba mais
<https://docs.oracle.com/javase/tutorial/java/data/index.html>.
Veja o programa a seguir que utiliza uma classe wrapper para receber dois nmeros do usurio e, a
seguir, realizar um clculo matemtico:
Figura 32 Um programa que recebe nmeros do usurio e realiza um clculo matemtico com eles
36
TPICOS ESPECIAIS DE PROGRAMAO ORIENTADA A OBJETOS
Figura 33
Uma das diferenas mais bvias entre uma linguagem estruturada e uma linguagem orientada a
objetos so justamente as classes e objetos. Podese entender, de maneira bastante simplificada, que
uma classe um trecho de cdigo de computador que modela algum conceito til para o sistema que se
est desenvolvendo. Este conceito pode ser algo tangvel, como um cliente, um funcionrio, um produto,
uma venda, mas tambm pode ser um conceito mais abstrato, como um conjunto de ferramentas de
clculo ou um conjunto de funcionalidades de acesso a banco de dados.
Quando se faz a anlise de um sistema, devese modelar classes que encapsulem, isolem, coloquem
uma cpsula em torno deste conceito. Para tanto, preciso ter em mente as seguintes regras para um
bom projeto de classe:
No deve haver em nenhuma outra parte do sistema qualquer aspecto do conceito modelado pela classe.
37
Unidade I
Saiba mais
A figura registra uma classe em UML. Esta classe tem o nome Pessoa e possui dois atributos: nome
e telefone. O primeiro atributo armazena dados do tipo String, enquanto que o segundo armazena
dados do tipo int. A classe tambm apresenta o mtodo apresente(), que ser usado para exibir as
informaes armazenadas nos atributos. Este mtodo no recebe parmetros, pois no h nenhum
parmetro representado entre os parnteses. Ele tambm no devolve nenhum valor, pois seu tipo de
retorno void. Esta classe pode ser codificada em Java da seguinte maneira:
38
TPICOS ESPECIAIS DE PROGRAMAO ORIENTADA A OBJETOS
Nas linhas 7 e 8 esto declarados os atributos nome e telefone. Eles so declarados como se
fossem variveis, mas so atributos por no estarem dentro de qualquer mtodo. Suas declaraes so
precedidas pela palavra reservada public, representada pelo sinal + no diagrama UML da figura 34. Esta
palavra reservada indica que esses atributos podem ser acessados por qualquer parte do sistema que
tenha acesso classe Pessoa. Na linha 10 declarado o mtodo apresente(), que imprime em uma caixa
de dilogo os dados armazenados nos atributos.
Observao
Uma classe uma definio de um conceito, como o simples cadastro de uma pessoa apresentado
no exemplo mencionado anteriormente. No entanto, um programa no pode utilizar esta definio
diretamente, ele precisa instanciar esta classe em um objeto. Imagine que uma classe seja uma receita
de bolo. Com esta receita, podese preparar vrios bolos e todos acabaro sendo mais ou menos parecidos.
Da mesma forma, uma classe usada para se instanciar vrios objetos. o objeto que realmente possui
os dados e os comportamentos modelados. O programa a seguir instancia um objeto da classe Pessoa,
atribui valores aos seus atributos e chama o mtodo apresente(). O resultado de sua execuo tambm
apresentado:
39
Unidade I
Na linha 7 criada uma varivel chamada p, cujo tipo Pessoa. Nesta varivel armazenado um
objeto da classe Pessoa. O objeto instanciado com o uso da palavra reservada new seguida do nome
da classe. Na verdade, o termo Pessoa() que segue a palavra new no o nome da classe, mas um
mtodo construtor. Mtodos construtores sero apresentados logo a seguir.
Nas linhas 9 e 10 os atributos nome e telefone de p tm seus valores atribudos. Note que o objeto
p tm seus prprios atributos nome e telefone. Caso um outro objeto fosse instanciado, ele poderia ter
valores diferentes em seus atributos nome e telefone.
Na linha 12 chamado o mtodo apresente() de p, que faz ser exibida a caixa de mensagem com as
informaes armazenadas no objeto p.
Note que, da maneira que a classe Pessoa no item anterior foi escrita, qualquer valor pode ser
atribudo aos atributos da classe, mesmo que eles sejam invlidos. H uma maneira de se evitar que isso
acontea: ns podemos encapsular os atributos, ou seja, tornalos privados, e oferecer acesso a eles por
mtodos acessores (getters, em ingls), que fazem a validao dos dados de forma que apenas dados
vlidos sejam armazenados. A seguir, modificamos a classe Pessoa para que s possam ser armazenados
telefones com pelo menos oito dgitos. Vamos tambm encapsular o atributo nome, mesmo que
nenhuma validao seja feita:
40
TPICOS ESPECIAIS DE PROGRAMAO ORIENTADA A OBJETOS
Nas linhas 7 e 8, os atributos nome e telefone foram alterados para privados, o que significa que
agora eles s podem ser acessados de dentro da prpria classe Pessoa. Para permitir que eles tenham seus
valores lidos, foram criados os mtodos getters, nas linhas 10 e 18. Estes mtodos, quando executados,
retornam o valor armazenado no atributo correspondente.
Na linha 14 criado o mtodo setNome(), que recebe como parmetro um nome e o atribui ao
atributo nome. Como tanto o parmetro quanto o atributo possuem o mesmo nome, o programa
no teria como saber qual o atributo e qual o parmetro. Para resolver este problema, utilizase a
referncia this na linha 15. Desta forma, podese ler a linha 15 como sendo o nome deste objeto recebe
o valor de nome. Assim, this.nome o atributo do objeto enquanto que nome o parmetro.
J no mtodo setTelefone() na linha 22, s feita a atribuio se o valor do parmetro telefone tiver
ao menos oito dgitos. Esta verificao feita com o desvio condicional if. Sua sintaxe completa :
41
Unidade I
A condio pode ser qualquer expresso que tenha como valor final um booleano. Isso significa que
a condio pode ser uma simples varivel booleana ou uma expresso booleana, que o resultado de
alguma operao lgica. As operaes lgicas so:
== Igual a
!= Diferente de
< Menor que
> Maior que
<= Menor ou igual a
>= Maior ou igual a
! No (inverte o resultado de uma expresso booleana)
Quando se deseja realizar vrios testes, podese encadear outro if dentro do conjunto de instrues
da clusula else. Mas tambm podese utilizar a estrutura switchcase, que tem a sintaxe a seguir:
42
TPICOS ESPECIAIS DE PROGRAMAO ORIENTADA A OBJETOS
A estrutura switchcase usa como clusula de teste uma varivel que pode ser dos tipos primitivos
char, int, short ou byte. Cada clusula case define um conjunto de instrues que ser executado caso
seu valor corresponda ao valor da varivel de teste. A clusula default, que opcional, executada se
nenhuma outra clusula case foi executada.
Saiba mais
A classe Pessoa ainda no teve um mtodo construtor definido explicitamente. Mtodo construtor
um mtodo que executado sempre que um objeto instanciado. Esse mtodo deve possuir exatamente
o mesmo nome da classe e no deve apresentar nenhum tipo de retorno, nem mesmo void. Quando no
criamos um construtor em uma classe, o prprio compilador cria um para ns, o construtor padro.
O mtodo construtor padro um construtor sem parmetros e que no executa nenhuma ao em
sua implementao. Quando escrevemos Pessoa p = new Pessoa();, o termo Pessoa(), na verdade, o
construtor padro da classe. Ns podemos criar os nossos prprios construtores. Uma vez que a classe
tenha um construtor qualquer, o compilador no ir criar o construtor padro. Caso queiramos um
construtor sem parmetros, devemos declarlo explicitamente, como do exemplo a seguir:
43
Unidade I
Na linha 28 declarado o mtodo construtor sem parmetros. Note que o mtodo deve ter
exatamente o mesmo nome da classe e no deve apresentar nenhum tipo de retorno. Na linha 32
criado um segundo mtodo construtor, desta vez ele recebe como parmetros o nome e o telefone da
pessoa. Em sua implementao, ele faz a atribuio dos valores utilizando a validao de dados por meio
dos mtodos acessores que j foram criados na classe.
A classe TestaPessoa pode ser modificada da seguinte maneira para refletir as mudanas feitas na
classe Pessoa:
44
TPICOS ESPECIAIS DE PROGRAMAO ORIENTADA A OBJETOS
Na linha 12, um outro objeto, p2, instanciado, desta vez utilizando o construtor que recebe como
parmetros os valores do nome e do telefone. Durante a instanciao, os valores so armazenados nos
atributos e o objeto j est pronto para exibir suas informaes.
Agora, digamos que queiramos que o programa leia e exiba os dados de dez pessoas. Ns poderamos
simplesmente repetir a lgica do programa anterior dez vezes, mas esta no a melhor escolha.
Observao
45
Unidade I
A seguir, vamos modificar o programa TestePessoa para repetir dez vezes a rotina de receber e exibir
os dados de dez pessoas:
O mtodo recebePessoa() entre as linhas 7 e 19 recebe do usurio os dados de uma pessoa, instancia
um objeto da classe Pessoa com estes dados e o retorna.
O mtodo main() entre as linhas 21 e 30 utiliza o mtodo recebePessoa() para receber os dados de
dez pessoas. Na linha 25 iniciado um lao de repetio for para repetir dez vezes a rotina definida nas
linhas 26 e 27. O lao for tem trs parmetros: o primeiro uma definio de uma varivel contadora;
o segundo a condio que, se verdadeira, permitir que o lao seja repetido mais uma vez; o terceiro
a lgica de incremento (ou decremento) da varivel contadora.
46
TPICOS ESPECIAIS DE PROGRAMAO ORIENTADA A OBJETOS
O Java ainda define os laos while e dowhile, que possuem a seguinte sintaxe:
O lao while inicia testando a condio de parada. Se ela for verdadeira, ele ir executar o conjunto
de instrues de repetio. Em algum momento durante a execuo, a condio de parada deve ser
alterada para falsa, de modo a fazer com que o lao encerre.
O lao dowhile inicia executando uma vez o conjunto de instrues de repetio. A seguir ele
verifica a condio de parada. Se ela estiver verdadeira, o loop reinicia. Novamente, em algum momento
a condio de parada deve ser alterada para falsa para que o lao termine.
Saiba mais
ORACLE. The while and dowhile statements. The Java Tutorials. 2015e.
Disponvel em: <https://docs.oracle.com/javase/tutorial/java/nutsandbolts/
while.html>. Acesso em: 15 out. 2015.
2.8 Arrays
O programa do exemplo anterior conseguia ler e exibir os dados de dez pessoas, mas no era capaz
de armazenlos. Para tanto, deveramos ter criado dez variveis. Entretanto, criando dez variveis, seria
muito difcil continuar utilizando o lao for para automatizar o processo. Para resolver este problema,
podemos utilizar um array (vetor). Um array um conjunto de variveis de mesmo tipo. Vejamos como
o programa pode ser modificado para utilizar um array de Pessoa:
47
Unidade I
Na linha 22 declarada a varivel p, que desta vez um array de objetos da classe Pessoa. Isso
indicado pelo smbolo []. Um array deve ser instanciado como se fosse um objeto, o que feito na linha
23 com o operador new, seguido do tipo de dado de cada elemento do vetor (Pessoa) e da quantidade
de elementos do vetor ([10]).
Na linha 25 declarada a varivel contadora que ser usada nos dois laos for a seguir.
Na linha 27 iniciado o lao de leitura das dez pessoas. Na linha 28, cada pessoa lida pelo mtodo
recebePessoa() e armazenada no elemento de ordem i do vetor p (p[i]). Note que os ndices de vetores
em Java iniciam com o valor 0.
Na linha 31 iniciado o lao de apresentao das dez pessoas. Cada elemento do vetor p um objeto
da classe Pessoa e, por isso, possui o mtodo apresente(). Assim, na linha 32, cada elemento do vetor tem
o seu mtodo apresente() chamado.
48
TPICOS ESPECIAIS DE PROGRAMAO ORIENTADA A OBJETOS
Saiba mais
2.9 Colees
O uso de arrays foi til para armazenar uma quantidade definida de objetos da classe Pessoa.
Entretanto, para utilizar arrays, devese saber de antemo quantos elementos sero necessrios para
se criar o vetor. Quando no se sabe quantos elementos sero necessrios, podemos utilizar estruturas
dinmicas de armazenamento de dados. O Java nos oferece um conjunto de estruturas deste tipo, as
colees. Uma coleo um conjunto de variveis semelhante a um array, mas que pode ter o seu
tamanho modificado conforme a necessidade.
Vamos modificar o programa TestaPessoa para receber uma quantidade indefinida de pessoas. Este
programa ir armazenar objetos da classe Pessoa enquanto o usurio desejar:
49
Unidade I
Nas linhas 35 a 37 um novo lao feito, desta vez para exibir os dados de todas as pessoas cadastradas.
A linha 35 utiliza uma forma alternativa do lao for. Esta forma recebe dois parmetros separados por dois
pontos (em vez de ponto e vrgula): o primeiro uma definio de cada elemento da estrutura definida
pelo segundo parmetro. Essa linha pode ser lida como para cada Pessoa p em pessoas. O segundo
parmetro pode ser uma coleo ou um vetor. Esse lao, ento, ir percorrer todos os elementos dentro de
pessoas, ir chamar cada um de p e ir executar a linha 36, em que chamado o mtodo apresenta() de p.
Saiba mais
<https://docs.oracle.com/javase/tutorial/collections/index.html>.
Se voc esteve testando os programas discutidos at aqui, deve ter encontrando algumas situaes
em que o programa parou abruptamente devido a alguma situao inesperada. Por exemplo, em qualquer
um dos programas que cadastra o telefone de uma pessoa, se o usurio digitar uma letra (ou nada) no
50
TPICOS ESPECIAIS DE PROGRAMAO ORIENTADA A OBJETOS
lugar de um nmero inteiro quando lhe pedido para digitar o nmero de um telefone, o programa
encerrado informando uma mensagem de erro. Experimente fazer isso agora e observe a mensagem de
erro que apresentada na janela do Console. Na primeira linha da mensagem de erro dito que ocorreu
uma exceo do tipo NumberFormatException (em ingls). Isso indica que foi tentada a converso para
inteiro de um String que no representava um nmero inteiro.
Ns podemos modificar o programa para que ele perceba esta exceo e pea ao usurio para
inserir novamente o nmero de telefone at que um nmero vlido seja inserido. Isso feito com o
tratamento de excees, que composto de blocos trycatch ou trycatchfinally.
No bloco try implementado o cdigo que pode provocar uma exceo. No bloco catch implementado
o cdigo que ser executado caso uma exceo ocorra. No bloco opcional finally implementado o cdigo
que deve ser executado tendo ocorrido uma exceo ou no. Ele til para fechar recursos que estavam
sendo usados no bloco try, como arquivos, conexes com bancos de dados, conexes de rede etc.
Vamos modificar o mtodo recebePessoa() da classe TestaPessoa para que ele se recupere de uma
entrada de dados errada no nmero do telefone.
51
Unidade I
O trecho que recebe o nmero de telefone de uma pessoa agora est entre as linhas 19 e 29. Na
linha 19 definida uma varivel booleana que verdadeira quando o usurio precisa inserir um nmero
de telefone vlido. Na linha 20 iniciado o lao que ser repetido quando o usurio insere caracteres
invlidos para um nmero de telefone. Na linha 21 iniciado o bloco try, que o trecho de cdigo
que pode causar uma exceo. A exceo de formatao numrica pode ocorrer na linha 22, quando
o mtodo parseInt() tenta converter um String invlido para um nmero inteiro. Se a converso for
bemsucedida, a linha 24 executada e armazena o valor false na varivel repete. Caso uma exceo
de formatao numrica tenha sido lanada no bloco try, ela ser capturada pelo bloco catch na linha
25. Na linha 26 exibida uma mensagem informativa ao usurio e a varivel repete no ter seu
valor alterado. Na linha 29 o lao dowhile decide se ele deve reiterar ou no, dependendo do valor
armazenado pela varivel repete. Ela contm o valor true se ocorreu uma exceo, false caso contrrio.
Tambm possvel fazer o tratamento de mais de uma exceo em um mesmo bloco try:
52
TPICOS ESPECIAIS DE PROGRAMAO ORIENTADA A OBJETOS
Nas linhas 16 e 18 feita a converso da entrada de dados do usurio para int, o que pode causar
uma exceo NumberFormatException, que tratada pela clusula catch da linha 23.
Na linha 20 feita a diviso de dois nmeros inteiros, o que pode causar uma exceo
ArithmeticException, a qual tratada pela clusula catch da linha 26.
Saiba mais
<https://docs.oracle.com/javase/tutorial/essential/exceptions/index.html>.
Resumo
53
Unidade I
54
TPICOS ESPECIAIS DE PROGRAMAO ORIENTADA A OBJETOS
55
Unidade II
Unidade II
3 PROGRAMAO ORIENTADA A OBJETOS
At este ponto ns conhecemos a tecnologia Java e vimos, de maneira superficial, que esta tecnologia
orientada a objetos. Agora, vamos abordar mais detalhadamente como o Java implementa os recursos
que tornam o paradigma orientado a objetos o principal paradigma de desenvolvimento de sistemas.
3.1 Sobrecarga
A sobrecarga pode ser feita com qualquer mtodo, ou seja, podemos criar quantos mtodos quisermos
em uma classe com o mesmo nome, desde que eles tenham uma lista de parmetros que seja diferente
em quantidade, em tipo ou em quantidade e tipo.
56
TPICOS ESPECIAIS DE PROGRAMAO ORIENTADA A OBJETOS
Note que a classe demonstrada na figura define quatro verses do mtodo soma(), cada uma com
uma lista de parmetros diferentes. A primeira sobrecarga recebe dois int; a segunda trs int; a terceira
dois double e a quarta trs float. Note que os nomes dos parmetros no fazem a menor diferena,
apenas os seus tipos. Se, na classe em questo, for criada uma nova sobrecarga, como mostrado a seguir,
o cdigo apresenta erros e no pode ser compilado.
O prprio editor de cdigo indica que h um erro na declarao dos mtodos nas linhas 5 e 21.
Ao se flutuar o mouse por cima do erro (flutuar significa mover o cursor sobre o erro e no clicar), o
editor indica que o mtodo soma(int, int) est duplicado, mesmo que os nomes dos parmetros sejam
diferentes.
Observao
57
Unidade II
3.2 Herana
Um dos recursos mais importantes da orientao a objetos a herana. Ela um mecanismo que
permite que uma classe herde os atributos e mtodos de outra classe. No jargo de programao,
chamamos a classe que herda de classe filha, enquanto que chamamos a classe da qual a filha herda
de classe pai. Outros nomes para classe pai so superclasse e classe geral. A classe filha tambm pode
ser chamada de subclasse e classe especializada.
Considere a classe Pessoa vista anteriormente. Ela til para armazenar os dados de uma pessoa
genrica. Agora considere que desejamos armazenar os dados de um aluno. Muitos dos elementos da
classe Aluno sero os mesmos da classe Pessoa.
Lembrete
Sempre que passar pela sua cabea a sensao de que algo que voc
est programando igual a algo que j programou, tenha certeza de que h
uma maneira melhor de realizar a mesma tarefa. Em orientao a objetos,
sempre que um programador repete um cdigo, ele est errando! No se
repete cdigo em orientao a objetos!
Ao se criar a classe Aluno, podese aproveitar o que j foi feito na classe Pessoa, herdando da classe
Pessoa. A partir da, a classe Aluno j possui todos os atributos e mtodos da classe Pessoa. Ela s precisa
declarar atributos e mtodos que so especficos de um aluno.
Na linha 3, a classe Aluno declarada com a palavra reservada extends, que indica que a classe herda
da classe Pessoa. A partir daqui, a classe j possui todos os atributos e mtodos da classe Pessoa. Note
que s foram declarados os atributos e mtodos que pertencem apenas a um aluno.
58
TPICOS ESPECIAIS DE PROGRAMAO ORIENTADA A OBJETOS
Na linha 12, o mtodo setRa() agora faz consistncia do seu parmetro, para ter certeza de que ele no
um String vazio. Entretanto, no se pode escrever a comparao ra != , pois os operadores lgicos no
funcionam como se espera quando os operandos so objetos, apenas quando eles so de tipos primitivos.
Quando a comparao feita com objetos, como o caso de Strings, utilize o mtodo equals(), que retorna
verdadeiro se o objeto que executa o mtodo tem o mesmo contedo que o objeto no parmetro do
mtodo. Na linha 15, caso o parmetro recebido pelo mtodo no seja vlido, o mtodo ir lanar uma
exceo do tipo IllegalArgumentException com a mensagem de erro RA invlido. Desta forma, o mtodo
que tentou atribuir o RA invlido pode tratar a exceo e tentar obter um valor vlido para o RA.
Observao
A partir de agora, podese instanciar um objeto da classe Aluno, atribuir valores ao seu nome,
telefone e RA e executar o mtodo apresente().
3.3 Sobrescrita
Note que o mtodo apresente() apenas informa o nome e o telefone do aluno. Desta forma, ele deve
ser modificado. Ns podemos sobrescrever, ou seja, modificar o mtodo na classe filha para que ele se
comporte da maneira desejada. Esta mais uma modalidade de polimorfismo.
59
Unidade II
Nas linhas 27 a 30 definido o construtor da classe que recebe trs parmetros, o nome, o telefone e
o RA. Na linha 28 poderamos ter feito a atribuio dos valores do nome e telefone diretamente usando
os mtodos acessores dos atributos. Mas a classe Pessoa j realiza esta tarefa em um de seus construtores.
Ns podemos invocar diretamente tal construtor de dentro de nosso construtor, na primeira linha,
usando a palavra reservada super, que referencia a superclasse. Esta referncia funciona de maneira
anloga referncia this, mas enquanto this referencia o prprio objeto, super referencia a superclasse.
3.4 Polimorfismo
O polimorfismo de classes o aspecto mais importante da orientao a objetos. Com este recurso,
quando bem utilizado, podemos criar solues simples e eficientes para problemas que teriam solues
grandes, trabalhosas e ineficientes se fosse utilizado apenas o paradigma estruturado de programao.
O polimorfismo de classes um recurso que permite que um objeto de uma classe seja tratado como
se fosse de outra classe. Para que isso seja possvel, ambas as classes devem estar na mesma estrutura
hierrquica e, alm disso, uma delas deve ser um ancestral da outra.
Considere o seguinte exemplo: uma loja de rua permite a entrada de qualquer pessoa por sua porta
principal. A loja no faz distino se a pessoa que entra um aluno, um professor, um funcionrio, um
motorista ou qualquer outra especializao de pessoa. Por outro lado, uma escola possui catracas que
s permitem a entrada de alunos. Outros tipos de pessoas no tm a sua entrada permitida. Em termos
60
TPICOS ESPECIAIS DE PROGRAMAO ORIENTADA A OBJETOS
de orientao a objetos, a catraca da escola pode ser considerada como um mtodo que recebe apenas
objetos da classe Aluno como parmetro. J a entrada da loja um mtodo que recebe como parmetro
objetos da classe Pessoa. Como Aluno uma subclasse de Pessoa, uma especializao, um tipo de
Pessoa, o Aluno tambm pode ser enviado como parmetro para a loja por polimorfismo.
Nas linhas 7 a 10 definido o mtodo catracaDaEscola(), que recebe como parmetro um objeto da
classe Aluno.
Nas linhas de 12 a 15 definido o mtodo entradaDaLoja(), que recebe como parmetros um objeto
da classe Pessoa. Por polimorfismo, como Aluno um tipo de Pessoa, ele tambm pode ser passado
como parmetro para esse mtodo.
61
Unidade II
Nas linhas de 17 a 25 feito o cdigo de teste. Nas linhas 18 e 19 so instanciados objetos das classes
Aluno e Pessoa, respectivamente. Na linha 21, o aluno passado para o mtodo catracaDaEscola(). Na
linha 22, a pessoa passada para o mtodo entradaDaLoja(). J na linha 24 que ocorre o polimorfismo:
o aluno passado para o mtodo entradaDaLoja(). Mesmo que esse mtodo receba como parmetro um
objeto da classe Pessoa, ele aceita o objeto aluno, pois ele um tipo de Pessoa. Repare que na terceira
sada do programa, o aluno Joaquim tratado como uma pessoa, no como um aluno.
Saiba mais
Agora que j abordamos os principais aspectos da orientao a objetos, podemos dar mais ateno
aos modificadores de acesso.
Lembrete
A orientao a objetos define quatro modificadores de acesso para os membros (atributos e mtodos)
da classe, os quais so adotados pela linguagem Java. Eles so:
public (pblico): qualquer classe que tenha acesso classe onde o membro est declarado ter
acesso ao membro;
padro (ou pacote): membros definidos sem nenhuma palavra reservada so de acesso padro ou
pacote, ou seja, a prpria classe e qualquer classe do mesmo pacote tm acesso ao membro;
private (privado): apenas a prpria classe onde o membro declarado tem acesso a ele.
62
TPICOS ESPECIAIS DE PROGRAMAO ORIENTADA A OBJETOS
uma boa prtica de programao definir todos os membros inicialmente com o modificador mais
restritivo (privado). Conforme a necessidade de acesso ao membro vai surgindo, o modificador de acesso
deve ser alterado gradativamente na direo do modificador pblico.
3.6 Escopo
Os membros de uma classe normalmente pertencem aos seus objetos. Por exemplo, o atributo nome
da classe Pessoa pertence aos objetos da classe Pessoa. Cada um dos objetos pode ter um valor diferente
para o atributo nome. Da mesma maneira, o mtodo apresente() s pode ser chamado de um objeto. Isto
chamado de escopo de objeto.
Um membro pode, por outro lado, pertencer classe, no aos seus objetos, caracterizando o escopo
de classe. O escopo de classe definido pela palavra reservada static. Um mtodo de classe pode
ser chamado diretamente da sua classe, no sendo necessrio instanciar nenhum objeto da classe.
Os mtodos showMessageDialog(), showInputDialog() e showConfirmDialog() puderam ser chamados
diretamente da classe JOptionPane, sem a necessidade de instanciar um objeto da classe para executar
estes mtodos.
63
Unidade II
Da mesma forma o mtodo main() tambm de classe, porque, para executar um programa, a
mquina virtual no ir instanciar qualquer objeto, ela ir simplesmente executar o mtodo da classe
onde ele foi declarado.
Um atributo de escopo de classe ter o mesmo valor para a classe e para todos os seus objetos. Se o
seu valor for modificado em qualquer um deles, o valor ser modificado em todos.
Observao
O exemplo a seguir utiliza um atributo de classe para contar quantas vezes ele foi instanciado.
Nas linhas 7 a 9 definido o construtor da classe. O construtor executado toda vez que um objeto
da classe instanciado, e quando isso acontece, o atributo contador incrementado.
64
TPICOS ESPECIAIS DE PROGRAMAO ORIENTADA A OBJETOS
Nas linhas 9 a 11 a classe Contador instanciada 100 vezes. Nas linhas seguintes ela instanciada
mais duas vezes. O contedo do atributo contador apresentado nas linhas 15 a 17.
Considere que estamos desenvolvendo um programa de desenho por computador. Esse programa
usa figuras geomtricas como o retngulo, o tringulo e o crculo. Uma de suas funcionalidades
calcular a rea de todas as figuras no desenho.
Para aproveitar o polimorfismo, vamos criar uma estrutura hierrquica de classes para modelar as
figuras geomtricas do sistema. Assim, as classes Retangulo, Triangulo e Circulo sero todas subclasses
da classe FiguraGeometrica. A classe FiguraGeometrica ir definir o mtodo calculaArea() que ser
sobrescrito por todas as subclasses. As sobrescritas do mtodo, ento, iro realizar o clculo correto da
rea de cada figura. Para que o cdigo no fique muito extenso, no vamos encapsular os atributos.
65
Unidade II
Nas linhas 6 a 8 definido o mtodo calculaArea(), o qual existe apenas para permitir o polimorfismo.
Como no possvel calcular a rea de uma figura geomtrica genrica, o mtodo retorna um valor
negativo para indicar que ele no deve ser usado.
O mesmo ocorre com o mtodo getNome() entre as linhas 7 e 9, que ir retornar o nome da figura
geomtrica.
66
TPICOS ESPECIAIS DE PROGRAMAO ORIENTADA A OBJETOS
67
Unidade II
As trs subclasses sobrescrevem o mtodo calculaArea() entre as linhas 7 e 9, cada uma com a
equao apropriada. Note que na classe Circulo, o clculo feito com a ajuda da classe Math, que define
uma constante com o valor de (Pi) e o mtodo pow(), o qual realiza a potncia de raio elevado a 2.
As subclasses tambm definem seus construtores, que j fazem a atribuio de valores aos seus
atributos.
68
TPICOS ESPECIAIS DE PROGRAMAO ORIENTADA A OBJETOS
Entre as linhas 7 e 11, o mtodo formataFigura() recebe como parmetro um objeto da classe
FiguraGeometrica e de qualquer uma de suas especializaes. Na linha 9 feita a formatao de um
String com o nome da figura e sua rea.
No mtodo main(), entre as linhas 13 e 27, feita a rotina de teste. Na linha 14 declarado e
instanciado um vetor de trs posies de FiguraGeometrica. Nas linhas 16 a 18, cada uma das posies
recebe um objeto de uma de cada das classes de figuras geomtricas especializadas. Neste ponto j
ocorre polimorfismo. Entre as linhas 22 e 24 feito um lao for aprimorado para percorrer o vetor
e obter a sua representao em texto. Cada representao anexada varivel mensagem, com o
caractere de escape \n, que representa uma quebra de linha. Na linha 26 exibida a caixa de dilogo.
O programa realiza a sua tarefa, mas no muito bem. O problema est na classe FiguraGeometrica,
que define mtodos que no pode implementar e, por isso, faz uma implementao propositalmente
errada. A orientao a objetos oferece uma alternativa: ns podemos declarar mtodos abstratos, ou
seja, mtodos sem implementao. Quando se criam mtodos abstratos em uma classe, esta classe
tambm deve ser abstrata. Assim, podemos modificar a classe FiguraGeometrica da seguinte forma e o
restante do programa pode permanecer inalterado.
Nas linhas 5 e 7, as declaraes dos mtodos so agora de mtodos abstratos. Por isso, eles agora
no possuem implementao e so terminados com ponto e vrgula. A classe agora tambm deve ser
abstrata.
Uma classe abstrata pode definir mtodos e atributos concretos (no abstratos). No entanto, por
conter mtodos sem implementao, uma classe abstrata no pode ser instanciada. Ela s pode ser
usada com polimorfismo, como foi feito nesse exemplo. Alm disso, as classes que herdam de uma classe
abstrata devem implementar todos os seus mtodos abstratos se quiserem ser classes concretas, caso
contrrio, elas tambm sero abstratas. Isto til para garantir que as subclasses implementaram todos
os mtodos que deveriam ser sobrescritos, caso eles fossem concretos, como na primeira verso desse
exemplo.
Considere agora uma classe abstrata que s declara mtodos abstratos (como no exemplo anterior).
Uma classe desse tipo pode ser melhor modelada como uma interface. Uma interface uma classe
abstrata que s define mtodos abstratos. Uma classe que realize uma interface (no se usa o termo
herdar de uma interface) deve implementar todos os seus mtodos. Assim, poderamos ter:
69
Unidade II
Como no se pode herdar de uma interface, apenas realizla, as classes Retangulo, Triangulo e
Circulo devem ser alteradas, trocando a palavra reservada extends por implements:
4 INTERFACES GRFICAS
H duas maneiras de se criar interfaces grficas usando Java. A primeira escrevendo o cdigo ns
mesmos. A segunda usando um editor de interfaces grficas. A abordagem manual costuma dar ao
programador muito mais controle sobre a interface que ele est criando. Tambm costuma gerar um
cdigo mais enxuto e eficiente. J a abordagem com auxlio de um editor de interfaces costuma permitir
um processo mais rpido de criao da interface.
Existem vrios plugins que do a funcionalidade de edio de interface grfica ao Eclipse. A partir
da verso Mars do Eclipse (a mais recente na data de elaborao deste livrotexto), j est includo o
Window Builder, que tambm pode ser instalado em verses mais antigas.
Observao
70
TPICOS ESPECIAIS DE PROGRAMAO ORIENTADA A OBJETOS
Para criar uma interface grfica, vamos usar o Window Builder. Clique com o boto direito em um
pacote, selecione New... e ento Other.
Expanda o grupo WindowBuilder, Swing Designer e escolha JFrame. Clique em Next. D o nome
TelaPessoa sua classe e clique em Finish.
Neste ponto apresentado o editor de cdigo com a classe TelaPessoa, mas dessa vez h duas abas
novas, Source e Design.
71
Unidade II
Selecione a aba Design e maximize a janela de edio dando um duplo clique na aba TelaPessoa. A
sua IDE deve se parecer com a figura a seguir:
Clique na rea da janela para fazer com que suas propriedades sejam exibidas. A seguir, modifique
seu gerenciador de layout para absolute layout.
72
TPICOS ESPECIAIS DE PROGRAMAO ORIENTADA A OBJETOS
Saiba mais
73
Unidade II
Selecione agora um JTextField e posicioneo na janela. Modifique seu tamanho para que fique
semelhante ao da figura a seguir. Mude tambm seu nome para textFieldNome.
74
TPICOS ESPECIAIS DE PROGRAMAO ORIENTADA A OBJETOS
Insira agora um JLabel com o texto Telefone: e um JTextField chamado textFieldTelefone como
mostra a prxima figura:
Agora insira um JButton. Mude seu nome para btnApresenta e seu texto para Apresente.
75
Unidade II
Agora vamos associar uma ao ao boto btnApresente. D um duplo clique no boto. O editor ir
criar o cdigo associado ao de clique e o levar ao cdigo, como mostra a figura a seguir:
Este o cdigo que cria e configura o boto btnApresente. Entre as linhas 65 e 68 criada uma
instncia de uma classe annima que realiza a interface ActionListener. Esta interface define o mtodo
actionPerformed(), que o mtodo executado quando o boto for clicado. nesse mtodo que vamos
criar a nossa ao, como mostrado na figura a seguir:
Na linha 68 chamado o mtodo showMessageDialog(), desta vez com a janela representada pelo
objeto instanciado da classe TelaPessoa (TelaPessoa.this). Quando a caixa de mensagem for exibida,
ela ser centralizada na janela do aplicativo. Alm disso, o usurio no ser capaz de retornar janela
sem que tenha fechado antes a caixa de dilogo. A seguir a mensagem formatada, buscando as
informaes digitadas pelo usurio nos objetos textFieldNome e textiFieldTelefone. O texto recuperado
com o mtodo getText().
76
TPICOS ESPECIAIS DE PROGRAMAO ORIENTADA A OBJETOS
Resumo
77
Unidade II
78
TPICOS ESPECIAIS DE PROGRAMAO ORIENTADA A OBJETOS
Unidade III
5 INTRODUO AO ANDROID
Nesta unidade, iremos nos familiarizar com alguns conceitos interessantes que envolvem programao
e estruturao do trabalho utilizando Android. Sero abordados temas como inicializao de ambiente e
desenvolvimento inicial com a linguagem Java para aplicativos Android.
A computao mvel, termo usado para descrever as tecnologias que permitem que as pessoas
tenham acesso a servios e informaes em qualquer lugar e a qualquer hora, independentemente da
sua localizao, sem a necessidade de conexo fsica, est adquirindo maior popularidade medida que
dispositivos mveis se tornam disponveis e oferecem facilidades de uso.
Mobilidade: quando em movimento, o dispositivo mvel pode alterar sua localizao e seu
ponto de conexo com a rede. Na computao mvel, mobilidade se refere ao uso de dispositivos
mveis portteis funcionalmente poderosos que ofeream a capacidade de realizar facilmente um
conjunto de funes de aplicao, sendo tambm capazes de se conectar, obter dados e forneclos
a outros usurios e sistemas.
79
Unidade III
Observao
Atualmente existe uma variedade de dispositivos mveis que oferecem uma gama enorme de
servios aos seus usurios, sendo atualmente os mais conhecidos o smartphone, o tablet e o notebook.
Segurana e opes de conectividade sem fio so fatores que tambm devem ser levados em
considerao no desenvolvimento de aplicaes mveis. No entanto, a entrada de dados um fator
problemtico na interao dos usurios com os dispositivos mveis.
Os dispositivos mveis possuem telas e, muitas vezes, teclados, pequenos e limitados. Dos diferentes
mtodos para entrada de dados (de texto) em dispositivos mveis, todos requerem aprendizagem e
alguns deles tm uma curva maior de aprendizagem que outros.
Desse modo, as opes de entrada de dados, que no so apropriadas para entradas rpidas e extensas,
devem ser levadas em considerao para o desenvolvimento de uma aplicao para dispositivos mveis.
80
TPICOS ESPECIAIS DE PROGRAMAO ORIENTADA A OBJETOS
Saiba mais
Embora o desenvolvimento de software para dispositivos mveis apresente desafios diferentes das
tpicas aplicaes convencionais, as caractersticas dos projetos de TI tradicionais, como presses por
prazos cada vez menores e a contnua busca na reduo de custos, esto mantidas.
Segundo Souza, Costa e Spinola (2006), as aplicaes para dispositivos mveis tambm precisam passar
por um processo de desenvolvimento de software, que incluem especificao, projeto, implementao e
validao de software, atendendo aos atributos essenciais dos produtos de software, como a facilidade
de manuteno, a confiana, a eficincia e a facilidade de uso.
Camada desktop
Camada desktop
81
Unidade III
Observao
5.2 Android
Atualmente o Android vem ganhando fora no cenrio tecnolgico, muito devido ao elevado
crescimento da distribuio mundial dos smartphones e tablets. O Android uma plataforma que
foi construda baseada no Linux, concentrado em dispositivos mveis, desenvolvido pela Google em
parceria com algumas empresas da Open Handset Alliance (OHA). No incio do desenvolvimento do
projeto, o Android era um projeto da Android Inc., uma empresa que tinha como principal vertente o
desenvolvimento de softwares embarcados e que, em meados do ano de 2005, foi adquirida pela Google,
com a inteno de ingressar no mercado de desenvolvimento de aplicativos para telefonia mvel.
Saiba mais
A utilizao da linguagem Java para o desenvolvimento de aplicativos foi um dos pontos que
tornaram o Android um dos lderes no mercado de dispositivos mveis. Pensar na utilizao do Java
para desenvolvimento foi uma das maiores ideias da Google, considerando que atualmente uma das
82
TPICOS ESPECIAIS DE PROGRAMAO ORIENTADA A OBJETOS
linguagens mais utilizadas no mundo, sendo muito madura e robusta, colocando tambm em pauta a
linguagem orientada a objetos, um fator de extrema importncia.
Para desenvolver aplicativos para o Android, programadores Java necessitam buscar o aprendizado
em caractersticas particulares da plataforma (conhecer as APIs disponveis, o ciclo de vida das aplicaes
etc.), absorvendo todo seu conhecimento da linguagem, sem ter a preocupao de aprender novas
sintaxes ou novos paradigmas de programao, exercendo a aplicao de lgica de programao para o
estudo da linguagem Java.
Outro ponto de destaque da Google para o trabalho com a plataforma Android foi de lanla de
maneira gratuita. Isto foi um grande atrativo para os fabricantes, que voltaram os olhos para o Android
e viram uma enorme vantagem em embarclo em seus dispositivos mveis. Alm de reduzir o custo de
manter um Sistema Operacional para seus dispositivos, os fabricantes poderiam adquirir uma vantagem
da padronizao da plataforma, permitindo que um usurio final pudesse comprar dispositivos de
diferentes fabricantes sem ter grandes dificuldades no seu uso, uma vez que j estar familiarizado com
a plataforma.
Vale ressaltar mais um ponto importante na aquisio da plataforma Android pela Google: a
concepo de trabalho com o cdigofonte aberto, sendo este aspecto colocado como carrochefe,
um dos itens mais relevantes na plataforma Android. Disponibilizar em sua plataforma o cdigofonte
aberto fez com que fabricantes pudessem embarclo em smartphones, tablets, smart TVs, aparelhos
multimdia, controleremoto, dispositivos de leitura de livros digitais etc. O cdigofonte aberto traz
tambm como benefcio a possibilidade do fabricante customizar o Android, deixandoo ainda mais
atraente para seus usurios finais.
Por fim, a plataforma Android tornase flexvel com sua grande facilidade de personalizao,
possibilitando que aplicaes nativas sejam alteradas por aplicaes segmentadas de terceiros que
possam atrair ainda mais os olhos de usurios mais exigentes. Ainda pode ser possvel, por exemplo,
modificar uma aplicao nativa de realizao de chamadas, a aplicao de contatos, a aplicao de
mensagens SMS, e assim por diante.
A Open Handset Alliance (OHA) uma aliana formada em 2007 que agrega diversas empresas que
tm como misso definir padres abertos para telefonia mvel. Algumas das empresas que compem
essa aliana so:
LG;
Samsung;
HTC;
Motorola;
83
Unidade III
Google;
Intel.
Em meados de 2007, atuando no mesmo ano de sua formao, a OHA fez um pronunciamento
sobre a sua plataforma open source Android, baseada no sistema operacional Linux. Desde ento, vrios
fabricantes iniciaram a comercializao de dispositivos com o Android, como a HTC, que, por sua vez,
acabando lanando o seu primeiro celular com Android, o TMobile G1 (tambm conhecido no cenrio
de telefonia mvel como HTC Dream).
O Android, por definio, tem uma estrutura de versionamento com base em dois pilares:
API Level: nmero inteiro, iniciado com 1 (um) e efetuado um autoincremento a cada verso
disponibilizada do Android. Identificao utilizada somente para fins de desenvolvimento de
aplicativos Android.
84
TPICOS ESPECIAIS DE PROGRAMAO ORIENTADA A OBJETOS
Saiba mais
A API Level pode ser utilizada apenas por desenvolvedores de aplicativos para Android. Fabricantes
que embarcam o Android em seu hardware devem agregar de maneira completa essa API.
Linux Kernel
Driver de visualizao Driver de cmera Carto de memria Driver de compilao
Driver para teclado Driver para rede sem fio Driver de udio Gerenciador de memria
Bibliotecas Libraries
Gerenciador Surface Media Framework SQLite
OpenGL ES FreeType WebKit
SGL SSL Libc
85
Unidade III
Android Runtime
Biblioteca de Cdigos Nativos
DVM
Framework de aplicaes
Gerenciador de atividades Gerenciador Windows Chave de conexo Sistema de visualizao de soluo
Gerenciador de dados de Gerenciador de recursos do Gerenciador de localizao do
Gerenciador de pacotes telefone telefone telefone (GPS)
Gerenciador de notificaes do
telefone
Camada de aplicaes
Home Agenda Aplicativos Navegador
Efetuando um estudo particionado da arquitetura Android, o primeiro nvel apresentado o Linux kernel:
Quadro 6 Primeiro nvel que compe a Arquitetura do Android, denominada Linux Kernel
Linux Kernel
Driver de visualizao Driver de cmera Carto de memria Driver de compilao
Driver para teclado Driver para rede sem fio Driver de udio Gerenciador de memria
O Android roda em uma verso alterada do kernel 2.6 do Linux, customizada para obter melhor
desempenho em dispositivos de baixo recurso, provendo assim melhores performances da bateria, na
troca de arquivos pela rede etc. Isso ratifica ainda mais o fato de que o Android roda em Linux.
Sendo assim, justamente esse nvel o responsvel pela inicializao do sistema, gerenciamento da
memria do dispositivo, gerenciamento dos processos do dispositivo, gerenciamento das threads em
execuo e gerenciamento da energia. Basicamente, todos os drivers responsveis pela comunicao
com os recursos de hardware do dispositivo encontramse neste nvel, como mdulos do kernel do Linux.
Como o Android roda em Linux, ele acaba se beneficiando de vrios recursos desse Sistema
Operacional, como:
Suporte multitarefa: possibilita ao Android realizar diversas tarefas ao mesmo tempo. Esse
trabalho permite a execuo de linhas de cdigo de maneira simultnea, proporcionando a
execuo em paralelo de atividades solicitadas.
O kernel do Android pode ser definido como monoltico, ou seja, ele efetua o incremento das
principais funes do sistema operacional em um bloco grande e nico de cdigos, executados, assim,
em um mesmo espao de endereamento para obter melhor performance e diminuir a complexidade do
sistema, bem como a alocao de informaes para o ncleo do Linux.
O Android Runtime garante a excelncia na execuo de itens como a biblioteca de cdigos nativos e a
DVM, que proporcionam ao desenvolvedor o trabalho eficaz e a execuo do cdigo para compilao Android.
Bibliotecas Libraries
Gerenciador Surface Media Framework SQLite
OpenGL ES FreeType WebKit
SGL SSL Libc
Android Runtime
Biblioteca de Cdigos Nativos
DVM
5.5.2.1Libraries
As Libraries podem ser definidas com bibliotecas nativas do Android, que so basicamente bibliotecas
escritas em linguagem C e C++ e que rodam diretamente dentro do Linux. O acesso a essas bibliotecas
pode ser efetuado pela camada superior, a Application Framework, que abstrai todo o acesso a essas
bibliotecas quando se desenvolvido um aplicativo para o Android, ou seja, no se efetua acesso direto
a essa camada.
87
Unidade III
O Android Runtime tambm pode ser dividido em um segundo nvel da prpria arquitetura Android, como:
Core Libraries
So as bibliotecas do Java e conseguem abstrair praticamente todas as bibliotecas do Java SE. Pode
possibilitar o desenvolvimento de aplicativos usando as APIs padres do Java, programando praticamente
da mesma forma, como se fosse efetuar um desenvolvimento de um aplicativo para desktop.
a mquina virtual do Android, onde todos os aplicativos sero executados. Todos os aplicativos
desenvolvidos para Android so construdos em Java e toda aplicao desenvolvida em Java necessita,
de maneira obrigatria, de uma mquina virtual para ser executada. No Android, essa mquina virtual
a Dalvik VM. Ela no pode ser considerada a mesma mquina virtual padro do Java (JVM) e foi
desenvolvida justamente para que se possa obter um melhor desempenho em dispositivos com recursos
limitados de memria e processamento.
No Android, cada aplicativo roda em sua prpria instncia da Dalvik VM e cada instncia gerenciada
pelo seu prprio processo no Linux, ou seja, os aplicativos no compartilham a mesma instncia da
Dalvik VM. Isso muito importante para que se possa garantir maior segurana, pois um aplicativo no
poder interferir na execuo de outro.
Incio da compilao Compilador em execuo Gerar arquivo Traduo para Fim do ciclo de
.java para bytecodes do Java .class bytecodes .dex compilao .java
O terceiro nvel para visualizao da Arquitetura do Android definido por Application Framework,
ou Framework de Aplicaes.
Framework de Aplicaes
Gerenciador de atividades Gerenciador Windows Chave de conexo Sistema de visualizao de soluo
Gerenciador de dados Gerenciador de recursos Gerenciador de localizao do
Gerenciador de pacotes de telefone do telefone telefone (GPS)
Gerenciador de notificaes
do telefone
88
TPICOS ESPECIAIS DE PROGRAMAO ORIENTADA A OBJETOS
5.5.4 Applications
Camada de aplicaes
Home Agenda Aplicativos Navegador
A camada de aplicaes engloba todos os aplicativos escritos em Java para o Android. Nesta
camada se concentram tanto os aplicativos nativos do Android quanto os aplicativos concebidos pelos
desenvolvedores. No Android, aplicativos nativos e desenvolvidos por terceiros esto no mesmo nvel,
na camada Applications, o que possibilita desenvolver aplicativos que substituam os nativos, sendo
possvel, por exemplo, criar um aplicativo de contatos que subscreva o que j vem nativo no Android.
Este um recurso muito til e prov grande flexibilidade na plataforma Android.
6 CONCEITOS FUNDAMENTAIS
IDE Eclipse (tambm possvel utilizar outros IDEs, como a IntelliJ Idea ou NetBeans).
Android Development Tools (ADT): plugin do Eclipse para desenvolvimento de aplicativos para
o Android.
Com o Java SE Development Kit (JDK) j instalado, conforme apresentado anteriormente neste
livrotexto, necessrio instalar o Android SDK, que detm as ferramentas necessrias para o
desenvolvimento de aplicativos para o Android, assim como as bibliotecas, o debugger, o emulador etc.
89
Unidade III
Para efetuar a instalao, inicialmente ser necessrio baixlo no site do Android: <http://developer.
android.com/sdk/index.html>.
Lembrete
O Android Development Tools (ADT) um plugin que tem por finalidade integrar o Android SDK ao
Eclipse. O ADT auxilia, principalmente, no desenvolvimento de um aplicativo Android, colocando como
destaques:
90
TPICOS ESPECIAIS DE PROGRAMAO ORIENTADA A OBJETOS
Para efetuar a instalao do Android Development Tools (ADT) necessrio abrir o Eclipse, acionar
o menu Help e em seguida clicar na opo Install New Software. Em seguida, acionar o boto Add e
efetuar o preenchimento dos campos conforme sequncia a seguir:
91
Unidade III
Lembrete
Resumo
93
Unidade IV
Unidade IV
7 PROGRAMAO ANDROID
Na tela Project dever acessar a opo Android > Android Application Project:
O campo Application Name delimita o nome que ser apresentado na Play Store. Iremos
preencher o campo com o valor: HelloWorld.
O campo Project Name utilizado apenas pelo Eclipse para identificao do projeto e dever
ser nico por workspace. Ser preenchido este campo com o valor: HelloWorld.
O campo Package Name delimitado pelo nome do pacote padro para o aplicativo Android.
Ser preenchido com o valor: br.com.unip.helloworld.
O campo Minimum Required SDK utilizado para especificar a verso mnima do Android
que a aplicao ir suportar. Ser selecionada a opo API 8: Android 2.2 (Froyo).
O campo Target SDK serve para documentar a verso do Android que ser utilizada para
testar/homologar o aplicativo.
O campo Compile With serve para documentar a verso da API que ser usada para compilar
o projeto. Ser selecionada a opo API 23: Android 5.1
O campo Theme serve para documentar o tema (padro de estilo/cor) para as telas do
aplicativo. Ser alocado nesse campo o valor padro.
Ao criar o projeto, dever ser criado tambm uma Activity. Para a execuo de uma Activity ser
marcada a opo Create Activity, ser tambm selecionada a opo Create Project in Workspace.
O assistente ser apresentado na prxima etapa questionando qual ser o estilo da nova Activity que
dever ser criada. Ser selecionado o item BlankActivity para desenvolver uma nova Activity padro:
94
TPICOS ESPECIAIS DE PROGRAMAO ORIENTADA A OBJETOS
O campo Activity Name serve para documentar o nome da Activity padro que ser gerada de
maneira automtica. Informamos o valor: HelloWorldActivity.
O campo Layout Name serve para documentar o nome do arquivo de layout da Activity. Ser
informado o valor: Activity_hello_world.
O campo Navigation Type serve para documentar o tipo de navegao da Activity. Ser
selecionada a opo: None.
Para que o projeto HelloWorld possa ser executado, devem ser realizados os seguintes passos:
Na prxima ao, definir a opo Android Application e acionar o boto New Android
Configuration:
Logo a diante, na tela de configurao, o campo Name ser preenchido com o valor de
HelloWorld.
95
Unidade IV
Na aba Android, na opo Project, ser acionado o boto Browse, selecionado o projeto
HelloWorld e, na sequncia, o boto OK.
Ainda situado na aba Android, ser selecionada a opo Launch e a Activity HelloWorldActivity.
Aps a execuo dos passos solicitados, ser criado e executado o emulador do Android, rodando
com o aplicativo HelloWorld.
Descrevendo um pouco da estrutura do Android, preciso saber que ela composta pelos seguintes
componentes:
Activities.
Services.
Content Providers.
Broadcast Receivers.
96
TPICOS ESPECIAIS DE PROGRAMAO ORIENTADA A OBJETOS
Activities Services
Android
Broadcast Content
receivers providers
O diretrio src da estrutura do projeto onde se localizam todas as classes em Java. Neste diretrio
podem ser localizados arquivos de cdigofonte .java e todos os pacotes que o contemplam.
Na concepo do projeto foi necessria a configurao da propriedade package name, que pode ser
representada como o pacote padro das classes .java.
Observao
No diretrio gen estaro concentradas todas as classes geradas de maneira automtica pelo SDK
do Android, ou seja, aqui encontramse todas as classes que o Android utilizar de maneira interna
para execuo do projeto, como a classe R.java, que determinada como classe onde esto alocadas as
constantes de acesso aos recursos de aplicativos, e a classe BuildConfig.java, que determinada como
classe que aloca configuraes do projeto.
Observao
Neste momento, tenha em mente que este diretrio no deve ter seu
contedo alterado, ou seja, no altere o contedo de nenhuma classe deste
diretrio.
O diretrio assets utilizado para alocar recursos extras de aplicativos, como arquivos de texto,
pginas HTML, arquivos de udio etc.
O diretrio bin onde esto alocados todos os arquivos gerados no momento da construo (build)
do aplicativo, como o pacote .apk (pacote para efetuar a instalao do aplicativo no Android).
97
Unidade IV
O diretrio res onde se localizam todos os recursos da aplicao e tambm existem subdiretrios
para cada parte do recurso, como:
Diretrio drawable: onde ficam alocados recursos de imagem do aplicativo (por exemplo,
arquivos com extenso .jpg, .png etc).
Diretrio layout: onde ficam alocados arquivos XML com o layout de todas as telas do aplicativo.
Diretrio values: onde ficam alocados recursos do aplicativo executado, como String Resources
e layout de Preferncias.
98
TPICOS ESPECIAIS DE PROGRAMAO ORIENTADA A OBJETOS
Lembrete
application: dentro desta tag ser efetuado o registro dos componentes que o aplicativo ir
utilizar, como as Activities.
99
Unidade IV
Lembrete
7.5 Activities
Uma classe Activity precisa obrigatoriamente ser herdada da classe android.app.Activity encapsulada
na API do Android.
100
TPICOS ESPECIAIS DE PROGRAMAO ORIENTADA A OBJETOS
7.6 Views
So componentes grficos utilizados para desenvolvimento de telas dentro do aplicativo Android e esto
obrigatoriamente interligadas pelas Activities, que, por sua vez, controlam todo o seu comportamento.
Gerenciador de layout: View que concentra outras Views, ou pode ser definido tambm como
um agregador de Views.
As Activities concentram um mtodo chamado setContentView(), que serve para definir a View que
ser renderizada na tela do aplicativo Android. A Activity HelloWorldActivity do projeto HelloWorld, por
exemplo, faz uma chamada para este mtodo, referenciando como parmetro a View a ser demonstrada
na tela, nesse caso, o arquivo de layout Activity_hello_world.xml.
Para que seja efetuada a criao de uma Activity, devese acessar a IDE Eclipse, clicar com o boto
direito no projeto criado e seguir a rota: New > Other. Quando a prxima janela for apresentada, efetuar
a seleo da opo Android > Android Activity.
101
Unidade IV
102
TPICOS ESPECIAIS DE PROGRAMAO ORIENTADA A OBJETOS
Aps esse passo, definir qual template ser utilizado para a tela nova de Activity.
103
Unidade IV
Observao
8 INTERFACES GRFICAS
A tela de um aplicativo Android pode ser composta por um componente denominado como
View. A herana desse componente est localizada na classe android.view.View, e pode ter uma
variedade de tipos.
ImageView
TextView
View group View
EditText
Button
RelativeLayout LinearLayout GridLayout
Para a criao de um layout, ele dever ser baseado em um arquivo XML de layout do Eclipse, onde a
ao a ser executada ser o acionamento do boto direito do mouse sobre o projeto do Android e aps
essa ao dever ser direcionado at a opo New > Other, assim selecionando a opo Android>Android
XML layout File e acionar o boto Next.
104
TPICOS ESPECIAIS DE PROGRAMAO ORIENTADA A OBJETOS
105
Unidade IV
Na descrio do campo File, ser definido o nome do arquivo de definio de layout e na opo Root
Element ser atribudo o tipo de layout que ser utilizado.
8.1 TextView
Uma TextView , sem dvidas, a View mais utilizada na concepo de um aplicativo Android, e tem
por funcionalidade apresentar texto no display do dispositivo mvel:
Observao
Ainda atuando com o trabalho sobre o componente android:text, podese alterar algumas definies
de texto, como:
Estilo Implementao
Negrito <b>Texto em negrito</b>
Itlico <i>Texto em Itlico</i>
Sublinhado <u>Texto sublinhado</u>
106
TPICOS ESPECIAIS DE PROGRAMAO ORIENTADA A OBJETOS
No arquivo String Resources podem estar contidas as alteraes para negrito, itlico e sublinhado:
8.2 EditText
Uma View EditText pode ser compreendida pela ao de efetuar carga em um campo prdeterminado
por meio de recursos como teclado e/ou dispositivo mvel.
Ainda possvel trabalhar com a definio de tipo de dado que ser alocado pelo cliente em um
EditText, para isso fazemos referncia ao atributo android:inputType.
107
Unidade IV
Number Nmeros
Date Data
textMultiline Texto com quebra de linhas
textEmailAddress Endereo de email
Observao
Para que um dado possa ser trafegado e inserido em um objeto String dentro da Activity, ser
desenvolvida a seguinte linha de cdigo:
8.3 CheckBox
O trabalho com a View CheckBox se resume atuao de uma caixa de seleo, que visa efetuar a
marcao ou desmarcao de informaes no aplicativo Android.
108
TPICOS ESPECIAIS DE PROGRAMAO ORIENTADA A OBJETOS
Dentro da Activity, podese definir se a View CheckBox est selecionada ou no por meio do cdigo
a seguir:
Observao
@Override
public void OnCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanteState);
setContentView(R.layout.activity_cadastro_aluno_id);
TextView estudanteUnipInterativa = (TextView)findViewById(R.
id.estudanteUnipInterativa);
Texto.setText(Seja bem vindo Unip Interativa);
}
}
109
Unidade IV
8.4 RadioButton
A View RadioButton tem por finalidade agregar um grupo de botes onde apenas uma linha de
informao possa ser selecionada. Para garantir o sucesso da codificao da View RadioButton, dever
ser acoplada ao desenvolvimento do cdigo uma outra View chamada de RadioGrup, nela somente um
RadioButton poder ser selecionado.
8.5 ImageView
A View ImageView pode ser utilizada para apresentar uma imagem no aplicativo Android.
110
TPICOS ESPECIAIS DE PROGRAMAO ORIENTADA A OBJETOS
8.6 Button
A View Button pode ser conceituada como um boto que apresentado na tela do aplicativo Android.
Funcionalidades so derivadas para o evento de cada boto alocado em tela.
Na definio do boto, podese utilizar uma Activity, usando o mtodo setOnClickListener(). Para
que esse mtodo seja utilizado de maneira efetiva no desenvolvimento do aplicativo Android, fazse
necessria a implementao da interface android.view.View.OnclickListener, assim subscrevendo o
mtodo OnClick(), que ser executado aps o boto Sair ser acionado.
111
Unidade IV
8.7 DatePicker
A View DatePicker possibilita ao desenvolvedor definir qualquer parmetro de data a ser utilizado
no aplicativo Android.
Na alocao da classe Activity, fazse necessria a recuperao da View DatePicker para utilizao
no desenvolvimento do aplicativo.
112
TPICOS ESPECIAIS DE PROGRAMAO ORIENTADA A OBJETOS
Observao
8.8 TimePicker
113
Unidade IV
8.9 Layouts
Layouts so basicamente Views que, agrupadas, trabalham a fim de garantir a facilidade na disposio
dos componentes de tela.
O LinearLayout pode ser utilizado para efetuar o alinhamento de todos os componentes alocados no
aplicativo Android de maneira horizontal e vertical, de forma que as Views possam atuar no cenrio lado
a lado ou uma em cima da outra. Para executar o cenrio de Views uma embaixo da outra, trabalhase
utilizando a propriedade android:orientation=vertical:
114
TPICOS ESPECIAIS DE PROGRAMAO ORIENTADA A OBJETOS
TableLayout utilizada para efetuar a ordenao de componentes em forma de tabela, toda tabela
definida por linhas e colunas, sendo suas linhas definidas como TableRow, e as colunas strechColumns,
responsvel pela alocao de todas as colunas na tabela de layout.
115
Unidade IV
8.10 Intent
Uma Intent tem como finalidade distribuir mensagens enviadas por um componente de um aplicativo
ao ncleo do Android, indicando a inteno de realizar uma ao, ou seja, fazer algo no sistema. Intent
possibilita a solicitao para o Android instanciar um determinado componente do aplicativo ou um
componente de um outro aplicativo instalado no dispositivo.
As Intents possibilitam que os aplicativos possam, eventualmente, comunicaremse uns com os outros,
possibilitando que um aplicativo reutilize as funcionalidades disponibilizadas por outros aplicativos:
Efetuar uma ligao para um nmero de telefone por meio do aplicativo do Android.
A classe Intent do Android consegue definir algumas constantes com as Actions que so
nativas da plataforma:
116
TPICOS ESPECIAIS DE PROGRAMAO ORIENTADA A OBJETOS
Um BroadCast tambm pode ser trabalhado com o envio tanto de aplicativos nativos do Android,
como podem ser trafegados por aplicativos desenvolvidos de maneira aleatria.
O BroadCast tambm sinaliza um trabalho em conjunto com a Activity, apresentando cada instncia
efetuada na execuo do aplicativo Android.
BroadCast Descrio
ACTION_BATTERY_LOW Enviado quando a bateria do dispositivo est com a carga baixa.
ACTION_HEADSET_PLUG Enviado quando um fone de ouvido conectado ou desconectado do dispositivo.
ACTION_SCREEN_ON Enviado quando a tela do dispositivo ligada.
NEW_OUTGOING_CALL Enviado quando uma nova chamada telefnica efetuada.
BOOT_COMPLETED Enviado quando o sistema completa o boot inicial.
ACTION_POWER_CONNECTED Enviado quando o dispositivo conectado energia.
ACTION_POWER_DISCONNECTED Enviado quando o dispositivo desconectado da energia.
CAMERA_BUTTON Enviado quando o boto da cmera disparado.
8.12 Services
Services um componente nativo do Android que tem por finalidade executar diversas tarefas em
segundo plano. Efetuando um contraponto com o componente BroadCast Receivers, os Services podem,
em tempo de execuo de aplicativos, executar tarefas encapsuladas no sistema de maneira demorada,
como, por exemplo, o envio de um email.
Um Service pode ser inicializado por qualquer componente do Android, ou at mesmo por um
BroadCast Receiver ou uma Activity, ou ser inicializado de maneira automatizada.
117
Unidade IV
O mtodo onCreate() executado apenas uma vez, quando o Service inicializado na execuo
da aplicao.
O mtodo onStartCommand() executado toda vez que o Service inicializado, por meio
do mtodo startService(), e recebe como parmetro a Intent utilizada em sua chamada de
inicializao.
O mtodo onDestroy() executado apenas uma vez, quando o Service finalizado. Essa ao
possibilita que todo o contedo do mtodo seja destrudo em tempo de execuo.
118
TPICOS ESPECIAIS DE PROGRAMAO ORIENTADA A OBJETOS
Saiba mais
O Android se utiliza do banco de dados SQLite, que um banco de dados open source embarcado,
que possibilita a manipulao de todos os dados do aplicativo Android por meio de instrues SQL que
podem ser efetuadas na base, como insert, update, delete e select.
Um dos pontos de destaque para o SQLite a preocupao com a segurana, trabalhando com
conceitos exclusivos que possibilitam somente aos usurios Android terem acesso ao banco de dados,
ou seja, h aplicao de conceitos de segurana, como validao de chave de acesso e senhas confiveis.
O Android disponibiliza tambm uma classe chamada SQLiteOpenHelper, que tem por finalidade
prover recursos para que o aplicativo Android defina e construa uma estrutura de dados. Esta classe
pode ser estendida para os seguintes mtodos:
onUpgrade(): mtodo responsvel por atualizar a estrutura do banco de dados, caso ela necessite
de alguma modificao.
119
Unidade IV
Saiba mais
120
TPICOS ESPECIAIS DE PROGRAMAO ORIENTADA A OBJETOS
Resumo
121
REFERNCIAS
Textuais
CHAVES, J. Trabalhando com o banco de dados SQLite. Linha de cdigo, Rio de Janeiro, 13 fev. 2009.
Disponvel em: <http://www.linhadecodigo.com.br/artigo/2215/trabalhandocombancodedados
sqlite.aspx>. Acesso em: 20 out. 2015.
DEITEL, H. M.; DEITEL, P. J. Java: como programar. 6. ed. So Paulo: Pearson Prentice Hall, 2005.
DEITEL, H. M.; DEITEL, P. J. Java: como programar. 8. ed. So Paulo: Pearson Prentice Hall, 2010.
HORSTMANN, C. S.; CORNELL, G. Core Java. 8. ed. So Paulo: Pearson Prentice Hall, 2010.
LECHETA, R. R. Google Android: aprenda a criar aplicaes para dispositivos mveis com o Android
SDK. 3. ed. So Paulo: Novatec, 2013.
MEDEIROS, E. S. de. Desenvolvendo software com UML 2.0: definitivo. So Paulo: Pearson Makron
Books, 2004.
MENDES, D. R. Programao Java com nfase em orientao a objetos. So Paulo: Novatec, 2009.
ORACLE. The ifthen and ifthenelse statements. The Java Tutorials. 2015b. Disponvel em: <https://
docs.oracle.com/javase/tutorial/java/nutsandbolts/if.html>. Acesso em: 15 out. 2015.
ORACLE. The for statement. The Java Tutorials. 2015c. Disponvel em <https://docs.oracle.com/javase/
tutorial/java/nutsandbolts/for.html>. Acesso em: 15 out. 2015.
ORACLE. The switch statement. The Java Tutorials. 2015d. Disponvel em: <https://docs.oracle.com/
javase/tutorial/java/nutsandbolts/switch.html>. Acesso em: 15 out. 2015.
122
ORACLE. The while and dowhile statements. The Java Tutorials. 2015e. Disponvel em: <https://docs.
oracle.com/javase/tutorial/java/nutsandbolts/while.html>. Acesso em: 15 out. 2015.
PAGEJONES, M. Fundamentos do desenho orientado a objeto com UML. So Paulo: Makron Books, 2001.
RINALDI, C. Android 6.0 Marshmallow: review e todas as funes. AndroidPIT, 7 out. 2015. Disponvel
em: <http://www.androidpit.com.br/androidmdispositivosdatalancamentofuncoes>. Acesso em:
14 out. 2015.
ROGERS, Y.; SHARP, H.; PREECE, J. Design de interao: alm da interao humanocomputador. 3. ed.
Porto Alegre: Bookman, 2013.
SILVA, F. M. C. da. Entendendo o ciclo de vida de uma aplicao Android. Devmedia, Rio de Janeiro,
[s.d.]. Disponvel em: <http://www.devmedia.com.br/entendendoociclodevidadeumaaplicacao
android/22922>. Acesso em: 18 out. 2015.
SOUZA, L. S.; COSTA, I.; SPINOLA, M. M. Projetos de interface com o usurio de software de dispositivos
mveis: requisitos de usabilidade e fatores impactantes. In: SIMPSIO DE ENGENHARIA DE PRODUO
(SIMPEP), 13., 2006, Bauru. Anais Bauru: Unesp, 2006. Disponvel em: <http://www.simpep.feb.unesp.
br/anais/anais_13/artigos/851.pdf>. Acesso em: 13 out. 2015.
Sites
<http://www.androidpit.com.br>.
<http://developer.android.com/sdk/index.html>.
<https://docs.oracle.com/javase/tutorial/collections/index.html>.
<https://docs.oracle.com/javase/tutorial/essential/exceptions/index.html>.
<https://docs.oracle.com/javase/tutorial/java/data/index.html>.
<https://docs.oracle.com/javase/tutorial/java/index.html>.
<http://www.eclipse.org>.
123
<http://www.eclipse.org/downloads/>.
<https://netbeans.org>.
<http://oracle.com.edgesuite.net/timeline/java/>.
<http://www.oracle.com/technetwork/java/javase/downloads/index.html>.
<http://www.oracle.com/technetwork/java/javase/overview/index.html>.
<https://www.sqlite.org/>.
<http://staruml.io/>.
124
125
126
127
128
Informaes:
www.sepi.unip.br ou 0800 010 9000