Você está na página 1de 200

CONHECIMENTOS DE

INFORMÁTICA
vezes o pró prio có digo fonte é desenvolvido visando uma
ú nica plataforma!
Linguagens de Esse có digo executá vel (biná rio) resultante será
executado pelo sistema operacional e, por esse motivo, ele
programação: Java (SE 8 e EE deve saber conversar com o sistema operacional em questã o.
7), Phyton 3.6,
JavaScript/EcmaScript 6, Scala
2.12 e Pig 0.16;

Uma breve história do Java1


A Sun criou um time (conhecido como Green Team) para
desenvolver inovaçõ es tecnoló gicas em 1992. Esse time foi
liderado por James Gosling, considerado o pai do Java. O time
voltou com a ideia de criar um interpretador (já era uma
má quina virtual, veremos o que é isso mais a frente) para
pequenos dispositivos, facilitando a reescrita de software
para aparelhos eletrô nicos, como vídeo cassete, televisã o e
aparelhos de TV a cabo. Isto é, temos um có digo executá vel para cada sistema
A ideia nã o deu certo. Tentaram fechar diversos operacional. É necessá rio compilar uma vez para Windows,
contratos com grandes fabricantes de eletrô nicos, como outra para o Linux, e assim por diante, caso a gente queira
Panasonic, mas nã o houve êxito devido ao conflito de que esse nosso software possa ser utilizado em vá rias
interesses e custos. Hoje, sabemos que o Java domina o plataformas. Esse é o caso de aplicativos como o OpenOffice,
mercado de aplicaçõ es para celulares com mais de 2.5 Firefox e outros.
bilhõ es de dispositivos compatíveis, porém em 1994 ainda Como foi dito anteriormente, na maioria das vezes, a sua
era muito cedo para isso. aplicaçã o se utiliza das bibliotecas do sistema operacional,
Com o advento da web, a Sun percebeu que poderia como, por exemplo, a de interface grá fica para desenhar as
utilizar a ideia criada em 1992 para rodar pequenas "telas". A biblioteca de interface grá fica do Windows é bem
aplicaçõ es dentro do browser. A semelhança era que na diferente das do Linux: como criar entã o uma aplicaçã o que
internet havia uma grande quantidade de sistemas rode de forma parecida nos dois sistemas operacionais?
operacionais e browsers, e com isso seria grande vantagem Precisamos reescrever um mesmo pedaço da aplicaçã o
poder programar numa ú nica linguagem, independente da para diferentes sistemas operacionais, já que eles nã o sã o
plataforma. Foi aí que o Java 1.0 foi lançado: focado em compatíveis.
transformar o browser de apenas um cliente magro (thin Já o Java utiliza do conceito de má quina virtual, onde
client ou terminal burro) em uma aplicaçã o que possa existe, entre o sistema operacional e a aplicaçã o, uma
também realizar operaçõ es avançadas, e nã o apenas camada extra responsá vel por "traduzir" - mas nã o apenas
renderizar html. isso - o que sua aplicaçã o deseja fazer para as respectivas
Os applets deixaram de ser o foco da Sun, e nem a Oracle chamadas do sistema operacional onde ela está rodando no
nunca teve interesse. É curioso notar que a tecnologia Java momento:
nasceu com um objetivo em mente, foi lançado com outro,
mas, no final, decolou mesmo no desenvolvimento de
aplicaçõ es do lado do servidor. Sorte? Há hoje o Java FX,
tentando dar força para o Java nã o só no desktop mas como
aplicaçõ es ricas na web, mas muitos nã o acreditam que haja
espaço para tal, considerando o destino de tecnologias como
Adobe Flex e Microsoft Silverlight.
Você pode ler a histó ria da linguagem Java em:
http://www.java.com/en/javahistory/
E um vídeo interessante: http://tinyurl.com/histjava
Em 2009 a Oracle comprou a Sun, fortalecendo a marca.
A Oracle sempre foi, junto com a IBM, uma das empresas que Dessa forma, a maneira com a qual você abre uma janela
mais investiram e fizeram negó cios através do uso da no Linux ou no Windows é a mesma: você ganha
plataforma Java. Em 2014 surge a versã o Java 8 com independência de sistema operacional. Ou, melhor ainda,
mudanças interessantes na linguagem. independência de plataforma em geral: nã o é preciso se
preocupar em qual sistema operacional sua aplicação está
Máquina Virtual rodando, nem em que tipo de má quina, configuraçõ es, etc.
Em uma linguagem de programaçã o como C e Pascal, Repare que uma má quina virtual é um conceito bem mais
temos a seguinte situaçã o quando vamos compilar um amplo que o de um interpretador. Como o pró prio nome diz,
programa: uma má quina virtual é como um "computador de mentira":
tem tudo que um computador tem. Em outras palavras, ela é
responsá vel por gerenciar memó ria, threads, a pilha de
execuçã o, etc.
Sua aplicaçã o roda sem nenhum envolvimento com o
O có digo fonte é compilado para có digo de má quina sistema operacional! Sempre conversando apenas com a Java
específico de uma plataforma e sistema operacional. Muitas Virtual Machine (JVM).
Essa característica é interessante: como tudo passa pela
1 Fonte: https://www.caelum.com.br/apostila-java-orientacao-objetos/
JVM, ela pode tirar métricas, decidir onde é melhor alocar a
memó ria, entre outros. Uma JVM isola totalmente a aplicaçã o para executar uma aplicaçã o Java. Mas nó s precisamos de
do sistema operacional. Se uma JVM termina abruptamente, só mais.
as aplicaçõ es que estavam rodando nela irã o terminar: isso JDK = Java Development Kit: Nó s, desenvolvedores,
nã o afetará outras JVMs que estejam rodando no mesmo faremos o download do JDK do Java SE (Standard Edition).
computador, nem afetará o sistema operacional. Ele é formado pela JRE somado a ferramentas, como o
Essa camada de isolamento também é interessante quando compilador.
pensamos em um servidor que nã o pode se sujeitar a rodar Tanto o JRE e o JDK podem ser baixados do site
có digo que possa interferir na boa execução de outras http://www.oracle.com/technetwork/java/. Para
aplicaçõ es. encontrá los, acesse o link Java SE dentro dos top downloads.
Essa camada, a má quina virtual, nã o entende có digo java, Consulte o apêndice de instalaçã o do JDK para maiores
ela entende um có digo de má quina específico. Esse có digo de detalhes.
má quina é gerado por um compilador java, como o javac, e é
conhecido por "bytecode", pois existem menos de 256 có digos Onde usar e os objetivos do Java
de operaçã o dessa linguagem, e cada "opcode" gasta um byte. É preciso ficar claro que a premissa do Java nã o é a de
O compilador Java gera esse bytecode que, diferente das criar sistemas pequenos, onde temos um ou dois
linguagens sem má quina virtual, vai servir para diferentes desenvolvedores, mais rapidamente que linguagens como
sistemas operacionais, já que ele vai ser "traduzido" pela JVM. php, perl, e outras.
Write once, run anywhere O foco da plataforma é outro: aplicaçõ es de médio a
Esse era um slogan que a Sun usava para o Java, já que grande porte, onde o time de desenvolvedores tem vá rias
você nã o precisa reescrever partes da sua aplicaçã o toda vez pessoas e sempre pode vir a mudare crescer. Nã o tenha
que quiser mudar de sistema operacional. dú vidas que criar a primeira versão de uma aplicaçã o usando
Java, mesmo utilizando IDEs e ferramentas poderosas, será
Java lento? Hotspot e JIT mais trabalhoso que muitas linguagens script ou de alta
Hotspot é a tecnologia que a JVM utiliza para detectar produtividade. Porém, com uma linguagem orientada a
pontos quentes da sua aplicaçã o: có digo que é executado objetos e madura como o Java, será extremamente mais fá cil
muito, provavelmente dentro de um ou mais loops. Quando a e rá pido fazer alteraçõ es no sistema, desde que você siga as
JVM julgar necessá rio, ela vai compilar estes có digos para boas prá ticas e recomendaçõ es sobre design orientado a
instruçõ es realmente nativas da plataforma, tendo em vista objetos.
que isso vai provavelmente melhorar a performance da sua Além disso, a quantidade enorme de bibliotecas gratuitas
aplicaçã o. Esse compilador é o JIT: Just inTime Compiler, o para realizar os mais diversos trabalhos (tais como
compilador que aparece "bem na hora" que você precisa. relató rios, grá ficos, sistemas de busca, geraçã o de có digo de
Você pode pensar entã o: porque a JVM nã o compila tudo barra, manipulaçã o de XML, tocadores de vídeo,
antes de executar a aplicaçã o? É que teoricamente compilar manipuladores de texto, persistência transparente,
dinamicamente, a medida do necessá rio, pode gerar uma impressã o, etc) é um ponto fortíssimo para adoçã o do Java:
performance melhor. O motivo é simples: imagine um .exe você pode criar uma aplicação sofisticada, usando diversos
gerado pelo VisualBasic, pelo gcc ou pelo Delphi; ele é está tico. recursos, sem precisar comprar um componente específico,
Ele já foi otimizado baseado em heurísticas, o compilador que costuma ser caro. O ecossistema do Java é enorme.
pode ter tomado uma decisã o nã o tã o boa. Cada linguagem tem seu espaço e seu melhor uso. O uso
Já a JVM, por estar compilando dinamicamente durante a do Java é interessante em aplicaçõ es que virã o a crescer, em
execução, pode perceber que um determinado có digo nã o está que a legibilidade do có digo é importante, onde temos muita
com performance adequada e otimizar mais um pouco aquele conectividade e se há muitas plataformas (ambientes e
trecho, ou ainda mudar a estratégia de otimizaçã o. É por esse sistemas operacionais) heterogêneas (Linux, Unix, OSX e
motivo que as JVMs mais recentes em alguns casos chegam a Windows misturados).
ganhar de có digos C compilados com o GCC 3.x. Você pode ver isso pela quantidade enorme de ofertas de
emprego procurando desenvolvedores Java para trabalhar
Versões do Java e a confusão do Java2 com sistemas web e aplicaçõ es de integraçã o no servidor.
Java 1.0 e 1.1 sã o as versõ es muito antigas do Java, mas já Apesar disto, a Sun empenhou-se em tentar popularizar o
traziam bibliotecas importantes como o JDBC e o java.io. uso do Java em aplicaçõ es desktop, mesmo com o fraco
Com o Java 1.2 houve um aumento grande no tamanho da marketshare do Swing/AWT/SWT em relaçã o às tecnologias
API, e foi nesse momento em que trocaram a nomenclatura de concorrentes (em especial Microsoft .NET). A atual tentativa
Java para Java2, com o objetivo de diminuir a confusã o que é o Java FX, onde a Oracle tem investido bastante.
havia entre Java e Javascript. Mas lembre-se, nã o há versã o
"Java 2.0", o 2 foi incorporado ao nome, tornando-se Java2 1.2. Especificação versus implementação
Depois vieram o Java2 1.3 e 1.4, e o Java 1.5 passou a se Outro ponto importante: quando falamos de Java Virtual
chamar Java 5, tanto por uma questã o de marketing e porque Machine, estamos falando de uma especificaçã o. Ela diz como
mudanças significativas na linguagem foram incluídas. É nesse o bytecode deve ser interpretado pela JVM. Quando fazemos
momento que o "2" do nome Java desaparece. Repare que o download no site da Oracle, o que vem junto é a Oracle
para fins de desenvolvimento, o Java 5 ainda é referido como JVM. Em outras palavras, existem outras JVMs disponíveis,
Java como a JRockit da BEA (também adquirida pela Oracle), a J9
1.5. da IBM, entre outras.
Hoje a ú ltima versã o disponível do Java é a 8. Esse é outro ponto interessante para as empresas. Caso
nã o estejam gostando de algum detalhe da JVM da Oracle ou
JVM? JRE? JDK? O que devo baixar? prefiram trabalhar com outra empresa, pagando por suporte,
O que gostaríamos de baixar no site da Oracle? elas podem trocar de JVM com a garantia absoluta de que
JVM = apenas a virtual machine, esse download nã o existe, todo o sistema continuará funcionando. Isso porque toda
ela sempre vem acompanhada. JVM deve ser certificada pela Oracle, provando a sua
JRE = Java Runtime Environment, ambiente de execução compatibilidade. Nã o há nem necessidade de recompilar
Java, formado pela JVM e bibliotecas, tudo que você precisa nenhuma de suas classes.
Além de independência de hardware e sistema O que aconteceu
operacional, você tem a independência de vendor (fabricante): class
graças a ideia da JVM ser uma especificaçã o e nã o um MeuPrograma {
software. public static void main(String[] args) {

Compilando o primeiro programa // miolo do programa começa aqui!


Para mostrar uma linha, podemos fazer: System.out.println("Minha primeira aplicaçã o Java!!");
System.out.println("Minha primeira aplicação Java!"); // fim do miolo do programa
Mas esse có digo nã o será aceito pelo compilador java.
O Java é uma linguagem bastante burocrá tica, e precisa de }
mais do que isso para iniciar uma execução. Veremos os }
detalhes e os porquês durante os pró ximos capítulos. O O miolo do programa é o que será executado quando
mínimo que precisaríamos escrever é algo como: chamamos a má quina virtual. Por enquanto, todas as linhas
class MeuPrograma { anteriores, onde há a declaraçã o de uma classe e a de um
public static void main(String[] args) método, nã o importam para nó s nesse momento. Mas
{ System.out.println("Minha primeira aplicaçã o Java!"); devemos saber que toda aplicaçã o Java começa por um ponto
} de entrada, e este ponto de entrada é o método main.
} Ainda nã o sabemos o que é método, mas veremos no
capítulo 4. Até lá , nã o se preocupe com essas declaraçõ es.
A numeraçã o das linhas nã o faz parte do có digo e nã o Sempre que um exercício for feito, o có digo que nos importa
deve ser digitada; é apenas um recurso didá tico. O Java é sempre estará nesse miolo.
case sensitive: tome cuidado com maiú sculas e No caso do nosso có digo, a linha do System.out.println faz
minú sculas. com que o conteú do entre aspas seja colocado na tela.
Apó s digitar o có digo acima, grave-o como
MeuPrograma.java em algum diretó rio. Para compilar, Para saber mais: como é o bytecode?
você deve pedir para que o compilador de Java da Oracle, O MeuPrograma.class gerado nã o é legível por seres
chamado javac, gere o bytecode correspondente ao seu humanos (nã o que seja impossível). Ele está escrito no
có digo Java. formato que a virtual machine sabe entender e que foi
especificado que ela entendesse.
É como um assembly, escrito para esta má quina em
específico. Podemos ler os mnemô nicos utilizando a
ferramenta javap que acompanha o JDK:
javap -c MeuPrograma
E a saída:
Depois de compilar, o bytecode foi gerado. Quando o MeuPrograma();
sistema operacional listar os arquivos contidos no Code:
diretó rio atual, você poderá ver que um arquivo .class foi 0: aload_0
gerado, com o mesmo nome da sua classe Java.
1: invokespecial
#1; //Method java/lang/Object."<init>":()V
Preciso sempre programar usando o Notepad ou similar? 4: return
Nã o é necessá rio digitar sempre seu programa em um
simples aplicativo como o Notepad. Você pode usar um
public static void main(java.lang.String[]);
editor que tenha syntax highlighting e outros benefícios.
Code:
Mas, no começo, é interessante você usar algo que nã o
0: getstatic #2; //Field
possua ferramentas, para que você possa se acostumar
java/lang/System.out:Ljava/io/PrintStream;
com os erros de compilaçã o, sintaxe e outros. É sugerida a
3: ldc #3; //String Minha primeira aplicaçã o Java!!
utilizaçã o do Eclipse (http://www.eclipse.org), a IDE líder
5: invokevirtual
no mercado, e gratuita.
#4; //Method java/io/PrintStream.println:
No Linux, recomendamos o uso do gedit, kate e vi. No
(Ljava/lang/String;)V
Windows, você pode usar o Notepad++ ou o TextPad. No
8: return
Mac, TextMate, Sublime ou mesmo o vi.
}
Executando seu primeiro programa
É o có digo acima, que a JVM sabe ler. É o "có digo de
Os procedimentos para executar seu programa sã o
má quina", da má quina virtual.
muito simples. O javac é o compilador Java, e o java é o
Um bytecode pode ser revertido para o .java original
responsá vel por invocar a má quina virtual para
(com perda de comentá rios e nomes de variá veis locais).
interpretar o seu programa.
Caso seu software vá virar um produto de prateleira, é
fundamental usar um ofuscador no seu có digo, que vai
embaralhar classes, métodos e um monte de outros recursos.

O que pode dar errado?


Muitos erros podem ocorrer no momento que você rodar
Ao executar, pode ser que a acentuaçã o resultante saia seu primeiro có digo. Vamos ver alguns deles: Có digo:
errada devido a algumas configuraçõ es que deixamos de fazer. class X { public static void main (String[]
Sem problemas. args) { System.out.println("Falta ponto e
vírgula")
}
} ate aqui */

Erro: // uma linha de comentá rio sobre a idade


X.java:4: ';' expected int idade;
} Além de atribuir, você pode utilizar esse valor. O có digo a
^ seguir declara novamente a variá vel idade com valor 15 e
1 error imprime seu valor na saída padrã o através da chamada a
Esse é o erro de compilaçã o mais comum: aquele onde System.out.println. // declara a idade int idade; idade = 15;
um ponto e vírgula fora esquecido. Repare que o compilador
é explícito em dizer que a linha 4 é a com problemas. Outros // imprime a idade
erros de compilaçã o podem ocorrer se você escreveu System.out.println(idade);
palavras chaves (as que colocamos em negrito) em Por fim, podemos utilizar o valor de uma variá vel para
maiú sculas, esqueceu de abrir e fechar as {}, etc. algum outro propó sito, como alterar ou definir uma segunda
Durante a execução, outros erros podem aparecer: variá vel. O có digo a seguir cria uma variá vel chamada
- Se você declarar a classe como X, compilá -la e depois idadeNoAnoQueVem com valor de idade mais um.
tentar usá-la como x minú sculo (java x), o Java te avisa: // calcula a idade no ano seguinte
Exception in thread "main" int idadeNoAnoQueVem;
java.lang.NoClassDefFoundError: idadeNoAnoQueVem = idade + 1;
X (wrong name: x) No mesmo momento que você declara uma variá vel,
- Se tentar acessar uma classe no diretó rio ou também é possível inicializá -la por praticidade: int idade =
classpath errado, ou se o nome estiver errado, ocorrerá o 15;
seguinte erro: Você pode usar os operadores +, -, / e * para operar com
Exception in thread "main" nú meros, sendo eles responsá veis pela adiçã o, subtraçã o,
java.lang.NoClassDefFoundError: X divisão e multiplicaçã o, respectivamente. Além desses
- Se esquecer de colocar static ou o argumento String[] operadores básicos, há o operador % (mó dulo) que nada
args no método main: mais é que o resto de uma divisã o inteira. Veja alguns
Exception in thread "main" java.lang.NoSuchMethodError: exemplos: int quatro = 2 + 2;
main Por exemplo: class X { int tres = 5 - 2;
public void main (String[] args) {
System.out.println("Faltou o static, tente executar!"); int oito = 4 * 2;
} int dezesseis = 64 / 4;
}
- Se nã o colocar o método main como public: int um = 5 % 2; // 5 dividido por 2 dá 2 e tem resto 1;
Main method not public. // o operador % pega o resto da divisão inteira
Por exemplo: class X { static void main
(String[] args) Como rodar esses códigos?
{ System.out.println("Faltou o Você deve colocar esses trechos de có digo dentro do
public"); bloco main que vimos no capítulo anterior. Isto é, isso deve
} ficar no miolo do programa. Use bastante System.out.println,
} dessa forma você pode ver algum resultado, caso contrá rio,
ao executar a aplicação, nada aparecerá .
Variáveis primitivas e Controle de fluxo Por exemplo, para imprimir a idade e a
Veremos agora os seguintes recursos da linguagem Java: idadeNoAnoQueVem podemos escrever o seguinte programa
- declaraçã o, atribuiçã o de valores, casting e de exemplo:
comparaçã o de variá veis; class TestaIdade {
- controle de fluxo através de if e else;
- instruçõ es de laço for e while, controle de fluxo com public static void main(String[] args) {
break e continue. // imprime a idade int
idade = 20;
Declarando e usando variáveis System.out.println(idade);
Dentro de um bloco, podemos declarar variá veis e usá -las.
Em Java, toda variá vel tem um tipo que nã o pode ser mudado, // gera uma idade no ano seguinte
uma vez que declarado: int idadeNoAnoQueVem;
tipoDaVariavel nomeDaVariavel; idadeNoAnoQueVem = idade + 1;
Por exemplo, é possível ter uma idade que guarda um
nú mero inteiro: int idade; // imprime a idade
Com isso, você declara a variá vel idade, que passa a existir System.out.println(idadeNoAnoQueVem);
a partir daquela linha. Ela é do tipo int, que guarda um nú mero }
inteiro. A partir daí, você pode usá -la, primeiramente }
atribuindo valores. Representar nú meros inteiros é fá cil, mas como guardar
A linha a seguir é a tradução de: "idade deve valer quinze". valores reais, tais como fraçõ es de nú meros inteiros e
idade = 15; outros? Outro tipo de variá vel muito utilizado é o double,
que armazena um nú mero com ponto flutuante (e que
Comentários em Java também pode armazenar um nú mero inteiro).
Para fazer um comentá rio em java, você pode usar o // double pi = 3.14;
para comentar até o final da linha, ou entã o usar o /* */ para double x = 5 * 10;
comentar o que estiver entre eles. /* comentá rio daqui,
O tipo boolean armazena um valor verdadeiro ou falso, e À s vezes, precisamos que um nú mero quebrado seja
só : nada de nú meros, palavras ou endereços, como em arredondado e armazenado num nú mero inteiro. Para fazer
algumas outras linguagens. boolean verdade = true; isso sem que haja o erro de compilaçã o, é preciso ordenar que
true e false sã o palavras reservadas do Java. É comum o nú mero quebrado seja moldado (casted) como um nú mero
que um booleanseja determinado através de uma expressão inteiro. Esse processo recebe o nome decasting. double d3 =
booleana, isto é, um trecho de có digo que retorna um 3.14; int i = (int) d3;
booleano, como o exemplo: O casting foi feito para moldar a variá vel d3 como um int.
int idade = 30; O valor de iagora é 3.
boolean menorDeIdade = idade < 18; O mesmo ocorre entre valores int e long. long
O tipo char guarda um, e apenas um, caractere. Esse x = 10000;
caractere deve estar entre aspas simples. Não se esqueça int i = x; // nã o compila, pois pode estar perdendo
dessas duas características de uma variá vel do tipo char! Por informação
exemplo, ela nã o pode guardar um có digo como '' pois o E, se quisermos realmente fazer isso, fazemos o
vazio nã o é um caractere! casting: long x = 10000; int i = (int) x;
char letra = 'a';
System.out.println(letra); Casos não tão comuns de casting e atribuição
Variá veis do tipo char sã o pouco usadas no dia a dia. Alguns castings aparecem também:
Veremos mais a frente o uso das Strings, que usamos float x = 0.0;
constantemente, porém estas nã o são definidas por um tipo O có digo acima nã o compila pois todos os literais com
primitivo. ponto flutuante sã o considerados double pelo Java. E float
nã o pode receber um double sem perda de informaçã o, para
Tipos primitivos e valores fazer isso funcionar podemos escrever o seguinte: float x =
Esses tipos de variá veis sã o tipos primitivos do Java: o 0.0f;
valor que elas guardam são o real conteú do da variá vel. A letra f, que pode ser maiú scula ou minú scula, indica que
Quando você utilizar o operador de atribuiçã o = o valor será aquele literal deve ser tratado como float.
copiado. int i = 5; // i recebe uma có pia do valor 5 int j = i; // j Outro caso, que é mais comum:
recebe uma có pia do valor de i double d = 5;
i = i + 1; // i vira 6, j continua 5 float f = 3;
Aqui, i fica com o valor de 6. Mas e j? Na segunda linha, j
está valendo 5. Quando i passa a valer 6, será que j também float x = f + (float) d;
muda de valor? Nã o, pois o valor de um tipo primitivo sempre Você precisa do casting porque o Java faz as contas e vai
é copiado. armazenando sempre no maior tipo que apareceu durante as
Apesar da linha 2 fazer j = i, a partir desse momento essas operaçõ es, no caso o double.
variá veis nã o tem relaçã o nenhuma: o que acontece com uma, E, uma observaçã o: no mínimo, o Java armazena o
nã o reflete em nada com a outra. resultado em um int, na hora de fazer as contas.
Até casting com variá veis do tipo char podem ocorrer. O
Outros tipos primitivos ú nico tipo primitivo que nã o pode ser atribuído a nenhum
Vimos aqui os tipos primitivos que mais aparecem. O Java outro tipo é oboolean.
tem outros, que sã o o byte, short, long e float.
Cada tipo possui características especiais que, para um Castings possíveis
programador avançado, podem fazer muita diferença. Abaixo estã o relacionados todos os casts possíveis na
linguagem Java, mostrando a conversã o de um valor para
Casting e promoção outro. A indicaçã oImpl. quer dizer que aquele cast é implícito
Alguns valores sã o incompatíveis se você tentar fazer uma e automá tico, ou seja, você nã o precisa indicar o cast
atribuiçã o direta. Enquanto um nú mero real costuma ser explicitamente (lembrando que o tipo boolean nã o pode ser
representado em uma variá vel do tipo double, tentar atribuir convertido para nenhum outro tipo).
ele a uma variá vel int nã o funciona porque é um có digo que
diz: "i deve valer d", mas nã o se sabe se d realmente é um
nú mero inteiro ou não. double d = 3.1415; int i = d; // não
compila O mesmo ocorre no seguinte trecho: int i = 3.14;
O mais interessante, é que nem mesmo o seguinte có digo
compila:
double d = 5; // ok, o double pode conter um nú mero
inteiro
int i = d; // nã o compila
Apesar de 5 ser um bom valor para um int, o compilador
nã o tem como saber que valor estará dentro desse double no Tamanho dos tipos
momento da execuçã o. Esse valor pode ter sido digitado pelo Na tabela abaixo, estã o os tamanhos de cada tipo primitivo
usuá rio, e ninguém vai garantir que essa conversã o ocorra do Java.
sem perda de valores.
Já no caso a seguir, é o contrá rio:
int i = 5;
double d2 = i;
O có digo acima compila sem problemas, já que um double
pode guardar um nú mero com ou sem ponto flutuante. Todos
os inteiros representados por uma variá vel do tipo int podem
ser guardados em uma variá vel double, entã o nã o existem
problemas no có digo acima.
enquanto uma determinada condiçã o
permanecer verdadeira.
int idade = 15; while (idade
< 18)
{ System.out.println(idade
);
idade = idade + 1;
}
O trecho dentro do bloco do while será executado até o
momento em que a condiçã o idade < 18 passe a ser falsa. E
isso ocorrerá exatamente no momento em que idade == 18, o
O if e o else que nã o o fará imprimir 18. int i = 0; while (i < 10)
A sintaxe do if no Java é a seguinte: { System.out.println(i); i = i + 1;
if (condicaoBooleana) }
{ codigo; Já o while acima imprime de 0 a 9.
}
Uma condiçã o booleana é qualquer expressã o que O For
retorne true oufalse. Para isso, você pode usar os operadores Outro comando de loop extremamente utilizado é o for. A
<, >, <=, >= e outros. Um exemplo: ideia é a mesma do while: fazer um trecho de có digo ser
int idade = 15; if repetido enquanto uma condiçã o continuar verdadeira. Mas
(idade < 18) { além disso, o for isola também um espaço para inicializaçã o
System.out.println("Nã o pode entrar"); de variá veis e o modificador dessas variá veis. Isso faz com
} que fiquem mais legíveis, as variá veis que sã o relacionadas
Além disso, você pode usar a cláusula else para indicar o ao loop: for (inicializacao; condicao; incremento) {
comportamento que deve ser executado no caso da expressã o codigo;
booleana ser falsa: int idade = 15; if (idade < 18) { }
System.out.println("Nã o pode entrar"); Um exemplo é o a seguir:
} else { for (int i = 0; i < 10; i = i + 1) {
System.out.println("Pode entrar"); System.out.println("olá !");
} }
Você pode concatenar expressõ es booleanas através dos Repare que esse for poderia ser trocado por:
operadores ló gicos "E" e "OU". O "E" é representado pelo && e int i = 0; while (i < 10)
o "OU" é representado pelo ||. { System.out.println("olá !
Um exemplo seria verificar se ele tem menos de 18 anos e ");
se ele nã o é amigo do dono: int idade = 15; boolean i = i + 1;
amigoDoDono = true; if (idade < 18 && amigoDoDono == }
false) { Porém, o có digo do for indica claramente que a variá vel i
System.out.println("Nã o pode entrar"); serve, em especial, para controlar a quantidade de laços
} executados. Quando usar ofor? Quando usar o while?
else { Depende do gosto e da ocasiã o.
System.out.println("Pode entrar");
} Pós incremento ++
Esse có digo poderia ficar ainda mais legível, utilizando-se i = i + 1 pode realmente ser substituído por i++ quando
o operador de negaçã o, o !. Esse operador transforma o isolado, porém, em alguns casos, temos essa instruçã o
resultado de uma expressã o booleana de false para true e vice envolvida em, por exemplo, uma atribuição: int i = 5; int x =
versa. int idade = 15; boolean amigoDoDono = true; if (idade i++;
< 18 && !amigoDoDono) { System.out.println("Nã o pode Qual é o valor de x? O de i, apó s essa linha, é 6.
entrar"); O operador ++, quando vem apó s a variá vel, retorna o
} valor antigo, e incrementa (pó s incremento), fazendo x valer 5.
else { Se você tivesse usado o ++ antes da variá vel (pré
System.out.println("Pode entrar"); incremento), o resultado seria 6: int i = 5;
} int x = ++i; // aqui x valera 6
Repare na linha 3 que o trecho amigoDoDono == false
virou!amigoDoDono. Eles têm o mesmo valor. Controlando loops
Para comparar se uma variá vel tem o mesmo valor que Apesar de termos condiçõ es booleanas nos nossos laços,
outra variá vel ou valor, utilizamos o operador ==. Repare que em algum momento, podemos decidir parar o loop por
utilizar o operador =dentro de um if vai retornar um erro de algum motivo especial sem que o resto do laço seja
compilação, já que o operador = é o de atribuiçã o. executado. for (int i = x; i < y; i++) {
int mes = 1; if if (i % 19 == 0) {
(mes == 1) { System.out.println("Achei um nú mero divisível por 19
System.out.println("Você deveria estar de férias"); entre x e y"); break;
} }
}
O While O có digo acima vai percorrer os nú meros de x a y e parar
O while é um comando usado para fazer um laço (loop), quando encontrar um nú mero divisível por 19, uma vez que
isto é, repetir um trecho de có digo algumas vezes. A ideia é foi utilizada a palavra chave break.
que esse trecho de có digo seja repetido Da mesma maneira, é possível obrigar o loop a executar o
pró ximo laço. Para isso usamos a palavra chave continue.
for (int i = 0; i < 100; i++) { for (i = 0; i < 10; i++)
if (i > 50 && i < 60) { { System.out.println("olá !");
continue; }
} System.out.println(i);
System.out.println(i);
} Um bloco dentro do outro
O có digo acima nã o vai imprimir alguns nú meros. (Quais Um bloco também pode ser declarado dentro de outro. Isto
exatamente?) é, um ifdentro de um for, ou um for dentro de um for, algo
como:
Escopo das variáveis while (condicao) {
No Java, podemos declarar variá veis a qualquer momento. for (int i = 0; i < 10; i++) {
Porém, dependendo de onde você as declarou, ela vai valer de // có digo
um determinado ponto a outro. }
// aqui a variá vel i nã o existe }
int i = 5;
// a partir daqui ela existe
O escopo da variá vel é o nome dado ao trecho de có digo Métodos2
em que aquela variá vel existe e onde é possível acessá -la. Em contraste com a está tica dos dados, os métodos
Quando abrimos um novo bloco com as chaves, as definem as açõ es a serem tomadas em diversos momentos
variá veis declaradas ali dentro só valem até o fim daquele da execução de um programa. Como em outras linguagens,
bloco. como C, C++, Pascal, Fortran, etc, os métodos correspondem
// aqui a variá vel i nã o existe int aos conceitos comuns de funçõ es, procedimentos ou
i = 5; subrotinas. Estes são apenas conjuntos ordenados de
// a partir daqui ela existe declaraçõ es de dados, comandos e expressõ es. Em termos
while (condicao) { // o i simples, sã o os métodos que realizam todas as tarefas para
ainda vale aqui int j = 7; as quais o programa foi escrito, por exemplo, realizar
// o j passa a existir cá lculos, resumir informaçõ es de um arquivo, produzir um
} relató rio, criar um grá fico, gerar um filme de animaçã o, etc.
// aqui o j nã o existe mais, mas o i continua dentro do
escopo Classes
No bloco acima, a variá vel j pá ra de existir quando termina Os métodos, assim como os dados, têm um local de
o bloco onde ela foi declarada. Se você tentar acessar uma residência, as classes. Mais adiante, vamos estudar as classes
variá vel fora de seu escopo, ocorrerá um erro de compilaçã o. em detalhes. Por hora, precisamos apenas de alguns poucos
conceitos para poder entender os métodos. Pensemos uma
classe como sendo um conjunto de dados (variá veis) e
métodos (funçõ es) da forma:
class [nome] {

[dados e métodos]
}
O mesmo vale para um if: if onde [nome] é um identificador que define o nome da
(algumBooleano) { classe, e o par de chaves delimita uma regiã o para declaraçã o
int i = 5; de variá veis e métodos. A declaraçã o de variá veis já foi vista
} anteriormente no capítulo sobre tipos de dados. Uma classe
else { int i pode ser privativa ou pú blica. Uma classe privativa é
= 10; declarada como no exemplo acima e é conhecida apenas no
} escopo delimitado pelo arquivo que a contém. Como um
System.out.println(i); // cuidado! programa Java pode ser quebrado em mú ltiplos arquivos de
Aqui a variá vel i nã o existe fora do if e do else! Se você có digo fonte distintos, pode ser necessá rio que as diversas
declarar a variá vel antes do if, vai haver outro erro de partes integrantes do programa interajam, trocando dados
compilação: dentro do if e do else a variá vel está sendo entre si e chamando métodos umas das outras. Isso torna-se
redeclarada! Entã o o có digo para compilar e fazer sentido fica: possível através das classes pú blicas, as quais são conhecidas
int i; por qualquer arquivo fonte que componha o programa. Para
if (algumBooleano) { tornar uma classe pú blica, basta preceder sua declaraçã o
i = 5; pela palavra-chave public como no seguinte exemplo:
} public class [nome da classe] {
else { i [dados e métodos]
= 10; }
} Há uma convençã o em Java que estabelece que deve
System.out.println(i); haver exatamente uma classe pú blica para cada arquivo-
Uma situação parecida pode ocorrer com o for: for fonte de que consiste um programa Java, e seu nome deve
(int i = 0; i < 10; i++) { System.out.println("olá !"); ser precisamente o nome do arquivo, sem o sufixo .java.
} Desse modo, existe uma correspondência biunívoca entre as
System.out.println(i); // cuidado! classes pú blicas e os arquivos-fonte que as contém.
Neste for, a variá vel i morre ao seu término, não podendo Podemos declarar uma classe a partir do chã o, com todos
ser acessada de fora do for, gerando um erro de compilaçã o. os seus dados e métodos, ou podemos declarar uma classe
Se você realmente quer acessar o contador depois do loop
terminar, precisa de algo como: int i; 2 Fonte: http://www.dm.ufscar.br/
derivando-a a partir de uma outra já existente. Este é um Em certo sentido as classes complementam os tipos de
recurso muito ú til, pois permite aproveitar um esforço de dados nativos da linguagem Java, com tipos de dados
elaboraçã o anterior, aumentando significativamente a complexos criados pelo programador. Esse fato, aliado à
produtividade da programaçã o, e diminuindo o tamanho do possibilidade de derivar classes, tornam as linguagens
có digo objeto. Suponhamos por exemplo, que tenhamos orientadas a objetos extremamente producentes.
declarado previamente a seguinte classe: class Polígono {
int cx, cy; // Coordenadas do centro do polígono Chamando métodos
} Um método entra em açã o no momento em que é
Esta classe define em linhas gerais o que é um polígono, chamado. Isto pode ocorrer explicitamente ou implicitamente.
guardando uma ú nica característica comum a qualquer A chamada explícita se dá por ordem do programador através
polígono, isto é, as coordenadas de seu centro. Agora, da execuçã o de um comando ou expressão contendo o nome
suponhamos que desejamos criar uma classe para guardar do método. Em nosso programa AloPessoal fizemos uma
informaçõ es sobre um quadrado. Neste caso, nã o precisamos chamada explícita do método System.out.println para mostrar
criar uma classe que dê as coordenadas do centro do um texto na tela do computador. As chamadas implícitas
quadrado assim como as suas dimensõ es. Basta fazer ocorrem quando o interpretador Java chama um método por
simplesmente: class Quadrado extends Polígono { sua pró pria deliberaçã o. A chamada do método main é um
int lado; // Comprimento de um lado do quadrado exemplo de chamada impícita. O interpretador Java chama
} esse método para dar início à execução do programa.
A classe quadrado declarada desse modo se diz uma classe Declarando métodos
derivada da classe Poligono, da qual herda os dados (e os A declaraçã o mais simples que podemos fazer de um
métodos) nela contidos. Esta declaraçã o é equivalente a class método (lembrando que isso deve ser feito dentro de uma
Quadrado { int cx, cy; // Coordenadas do centro do classe) é a seguinte: void [nome do método] () {
polígono [corpo do método]
int lado; // Comprimento de um lado do quadrado }
} onde o [nome do método] é um identificador que define o
Desejando fazer uma classe para representar um nome pelo qual o método é conhecido, e [corpo do método]
retâ ngulo, bastaria fazer entã o consiste de uma lista ordenada de eclaraçã o de variá veis, de
class Retâ ngulo extends Polígono { expressõ es e de comandos. A primeira palavrachave, void,
int base, alt; // Base e altura do retâ ngulo define o valor retornado pelo método, neste caso, nenhum.
} Podemos usar qualquer tipo de dado vá lido como valor de
retorno de um método. Nesse caso, ao terminar, o método
Objetos seria obrigado a devolver um dado do tipo
Uma particular instâ ncia de uma classe é chamada objeto. especificado. Por exemplo,
Para entender a diferença entre classes e objetos, fazemos class Numero {
alusã o à metá fora da fá brica de torradeiras. A fá brica de
torradeiras nã o é uma torradeira, mas define o tipo de double x = 1;
produto que sai dela, isto é, as torradeiras. Do mesmo modo a void print() {
torradeira nã o é a fá brica, mas o produto feito por ela. System.out.println("O valor e " + x);
Comparamos as classes à s fabricas e os objetos aos produtos }
feitos por elas. Grosso modo, podemos dizer que as classes
nã o ocupam espaço na memó ria, por serem abstraçõ es, }
enquanto que, os objetos ocupam espaço de memó ria por define uma classe chamada Numero, a qual contém uma
serem concretizaçõ es dessas abstraçõ es. variá vel x, inicializada com 1, e um método sem valor de
Nas declaraçõ es acima, introduzimos algumas classes que retorno, print, que apenas escreve um texto e o valor de x,
permitem representar polígonos. Porém, nã o instanciamos através da chamada do métodoSystem.out.println.
nenhuma das classes criando particulares objetos a partir O par de parênteses adiante do nome do método
dessas classes. Por exemplo, a partir da classe quadrado, introduz uma lista (vazia, neste caso) de argumentos. A
podemos fazer objetos representando quadrados de diversos chamada de um método pode ser acrescida de parâ metros,
comprimentos laterais, ou retâ ngulos de diferentes os quais sã o associados aos seus respectivos argumentos.
dimensõ es: Um exemplo de métodos que retornam valores é o
Quadrado A, B, C; seguinte:
Retâ ngulo D; class Calculador { int
A.lado = 1; // O quadrado A terá os lados de Soma(int a, int b) {
comprimento 1 return a + b;
B.lado = 2; // O quadrado B terá os lados de }
comprimento 2 double Produto(double a, double b)
C.lado = 7; // O quadrado C terá os lados de { return a * b;
comprimento }
7 }
D.base = 3; // O retangulo D terá base 3 e ... O primeiro método, Soma, realiza a adição de de dois
D.alt = 4; // altura 4, e centrado na origem nú meros inteiros fornecidos pelos argumentos a e b, devolve a
D.cx = 0; soma valor de retorno. O segundo método realiza a
D.cy = 0; multiplicaçã o de dois nú meros de
As declaraçõ es acima são semelhantes às que vimos no pontoflutuante a e b devolvendo seu produto.
capítulo anterior, com excessã o de que no lugar do nome que A sintaxe completa para a declaraçã o de um método é a
identifica o tipo de dado estamos usando o nome de uma seguinte:
classe. Neste exemplo, as classesQuadrado e Retâ ngulo foram [moderadores de acesso] [modificador] [tipo do valor de
empregadas para declarar os objetos (ou variá veis) A, B, C e D. retorno] [nome] ([argumentos])
throws [lista de excessõ es] Modificador do Método
{ [corpo] O modificador do método permite especificar algumas
} propriedades de um método, determinando como classes
onde os termos em itá lico são opcionais (ou acessó rios). derivadas podem ou nã o redefinir ou alterar o método, e de
Neste capítulo, vamos analisar detalhadamente cada um dos que forma esse método será visível. static: o método é
termos [moderadores de acesso], [modificador], [tipo do compartilhado por todos os objetos instanciados a partir da
valor de retorno], e [argumentos]. Vamos, porém, adiar um mesma classe. Um método static nã o pode acessar qualquer
pouco as explicaçõ es sobre [lista de excessõ es] até o capítulo variá vel declarada dentro de uma classe (salvo se a variá vel
sobre excessõ es. Uma excessão à esta sintaxe é a que se estiver declarada também como static, o que veremos mais
aplica aos métodos especiais, chamados construtores, que adiante), pois nã o é capaz de dicernir entre os diferentes
serã o vistos adiante no capítulo sobre classes. objetos que compartilham esse método.
Moderadores de Acesso abstract: Podemos declarar um método sem contudo
Os moderadores de acesso sã o empregados para especificar seu corpo, dizendo-o abstrato. Isto funciona como
restringir o acesso a um método. Entretanto, uma espécie de lembrete para que alguma classe derivada
independentemente do moderador escolhido, um método é complete a declaraçã o fornecendo um corpo. Assim sendo,
sempre acessível, isto é, pode ser chamado, a partir de uma classe que contenha um método abstrato, ou que seja
qualquer outro método contido na mesma classe. Os derivada de alguma classe que contenha um método abstrato
moderadores de acesso existentes em Java são os seguintes: mas nã o complete sua declaraçã o, nã o pode ser instanciada. O
public: O método declarado com este moderador é pú blico e uso da palavra-chave abstract é opcional, isto é, as duas
pode ser chamado a partir de métodos contidos em qualquer declaraçõ es seguintes sã o equivalentes: abstract void print();
outra classe. Esta é a condiçã o de menor restriçã o possível. void print();
protected: O método é protegido pode ser chamado por final: Especifica que nenhuma classe derivada pode
todas as classes que compõ e um conjunto maior chamado alterar ou redefinir este método. Um método declarado
package. Veremos adiante que as packages sã o um modo como final deve ser obrigatoriamente seguido de um corpo.
conveniente de organizar diversas classes que estã o em native: Declara apenas o cabeçalho sem corpo, como no
estreito relacionamento. caso deabstract. Porém, esta especificaçã o designa um
Obs: é importante avisar que você pode ter problemas em método que implementado em outra linguagem como C++,
identificar violaçõ es com respeito à chamada de métodos por exemplo. synchronized: Esta declaraçã o é usado para
protegidos. Isso se deve ao fato do compilador nã o sinalizar desenvolver o programa de processamento concorrente. Seu
esse fato precisamente, isto é, a tentativa de chamar um propó sito é impedir que dois métodos executando
método protegido a partir de uma classe que nã o faz parte do concorrentemente acessem os dados de uma classe ao
package. Ao invés disso a mensagem poderá se parecer com a mesmo tempo. synchromized especifica que se um método
seguinte: estiver acessando o dado, outros que também desejem
No method matching funcao() found in class Matematica acessá-lo têm que esperar.
friendly: Uso do método é permitido dentro da classe que o Tipo de Valor de Retorno:
contém, assim como dentro de qualquer classe que tenha sido O tipo de valor de retorno é especificado por uma palavra
derivada dessa classe, ainda que esteja fora do package. Este é chave ou nome de classe na declaraçã o do método,
o moderador default, isto é, aquele que é assumido se nenhum estabelecendo o valor que ele pode devolver. // Classe de
moderador for explicitamente especificado. nú meros complexos class Complexo {
private: O método é privativo da classe que o contém e seu double x, y; // parte real e complexo, respectivamnte
uso é vedado a qualquer outra classe. public double Re() { // retorna a parte real
private protected: o método é acessível pela classe que o return x;
contém, assim como por qualquer classe que tenha sido }
derivada dessa classe. Porém, isso somente é permitido public double Im() { /retorna a parte imaginaria
apenas dentro de um mesmo arquivo-fonte. return y;
Exemplo: // classe de numero class }
numero { double x=1; public void public Complexo Vezes(Complexo c)
print1() { System.out.println("O { Complexo resultado;
valor e "+x); resultado.x = x * c.x - y * c.y;
} resultado.y = x * c.y + y * c.x;
void print2() { return resultado;
System.out.println("O valor e "+x); }
} public void print() {
} System.out.println("(" + x + " + " + y + "i)");
// classe principal public class }
PrintNum { public static void }
main(String args[]) { numero num = public class Teste {
new numero(); num.print1(); // public static void main(String args[])
correto { Complexo z, w; z.x = 1; z.y = 2;
num.print2(); // ilegal
} System.out.print( "O valor de z é ");
} z.print();
O exemplo acima dará um erro, pois nã o pode acessar o System.out.println( "A parte real de z é = " + z.Re() );
print2. O métodoprint1 é definido como public e portanto, System.out.println( "A parte imaginá ria de z é = ",
está disponível a qualquer classe, mas o print2 nã o tem z.Im() );
especificaçã o (logo, é assumido como friendly) e portanto, a System.out.print("O valor de z ao quadrado é
classe principal PrintNum não pode acessa-lo. "); w = z.Vezes( z ); w.print();
}
} }
Ao executar esse programa teríamos a resposta: // main() do TestPar public static
O valor de z é (1 + 2i) void main(String args[]) {
A parte real de z é = 1 int i;
A parte imaginá ria de z é = 2 inteiro n = new inteiro();
O valor de z ao quardado é (-3 + 4i) i = 2;
Um método que retorna valor, isto é, nã o declarado como n.i = 3;
void, deve conter a linha return ...; a qual especifica o valor a System.out.println("Valores originais:");
ser retornado. Por exemplo, return x; especifica que o valor System.out.println("Valor de i e "+i);
da variá vel x será retornado. Lista de Argumentos: System.out.println("Valor de n e "+n.i);
A lista de argumentos é a lista de valores que o método vai MudaInt(i);
precisar, obdecendo a sintaxe [tipo 1] [nome 1], [tipo 2] MudaInteiro(n);
[nome 2], ... onde [tipo ?] é a especificaçã o do tipo de dado e System.out.println("Valores apos a chamada dos
[nome ?] é metodos:"):
um identificador pelo qual o parâ metro é conhecido. System.out.println("Valor de i e "+i);
Exemplo: System.out.println("Valor de n e "+n.i);
// Classe de numeros complexos class Complexo { double }
x=1, y=1; /* parte real e complexo, respectivamnte public }
double Re() { // retorna a parte real A especificaçã o public de uma variá vel dentro da classe,
return x; faz com que este variá vel seja acessado de qualquer lugar.
} Para especificar a variá vel i do objeto k, basta escrever k.i.
public double Im() { /retorna a parte imaginaria Em geral, a variá vel [var] dentro do objeto[obj] do tipo classe
return y; e referenciado por [obj].[var]. Note o uso de especificaçã o
} static para os métodos MudaInt() e MudaInteiro(). Esta
public set(double a, b){ especificaçã o é necessaria, pois o método principal é static, e
x = a; métodostatic nã o pode chamar outros métodos da mesma
y = b; classe que não sejastatic.
} O exemplo acima fornece a saída:
Valores originais:
} Valor de i e 2
public class Teste { Valor de n e 3
Valores apos a chamada dos métodos:
public static void main(String args[]) Valor de i e 2
{ Complexo c = new Complexo(); Valor de n e 5
c.set(3,2);
System.out.println("z = (" + c.Re() + " + " + c.Im() + "i)"); Classes3
} Usamos as classes para construir objetos, o que é
} chamado deinstanciaçã o. E os objetos consistem a essência
uma observaçã o importante é que Java trata o objeto por da programaçã o orientada a objetos (ou OOP, do inglês
referência e por isso, se o método modificar o objeto recebido ObjectOriented Programming). Falando intuitivamente, as
como parâ metro, o objeto será modificado externamente. No classes consistem de uma maneira de organizar um conjunto
entanto, se o parâ metro recebido for tipo simples (int, double, de dados, e designar todos os métodos necessá rios para usar
char, float, etc), visto no tipo de dados, o método pode alterar ou alterar esses dados.
o parâ metro a vontade que nã o influencia no valor externo. O conjunto de todos os dados contidos em uma classe
Para ilustrar, veja o exemplo a seguir: definem o estado de um objeto. Por exemplo, se tivéssemos
// classe de inteiro uma classe Semá foro contendo uma ú nica variá vel chamada
class inteiro VermelhoVerdeAmarelo, entã o o estado de Semaforo é
{ public int i; determinado pelo valor da de VermelhoVerdeAmarelo.
} public class Semaforo {
// classe principal public int VermelhoVerdeAmarelo = 0; //
class TestPar { 0=vermelho,1=verde,2=amarelo
// método que altera o valor do parametro int void Alternar() {
// este metodo deve ser static, pois sera chamado VermelhoVerdeAmarelo = ++VermelhoVerdeAmarelo
// pelo metodo main() que e static static void % 3;
MudaInt(int k) { }
System.out.println("MudaInt: valor de k e " + k); }
k += 2; Os métodos de uma classse, por sua vez, determinam a
System.out.println("MudaInt: valor de k utilidade que uma classe terá . No caso da classe Semaforo,
e apos incremento e " + k); seu ú nico método Alternar tem como função provocar a
} mudança da luz de vermelho a verde, de verde a amarelo e
// método que altera o valor do parametro inteiro de amarelo a vermelho, respectivamente, em cada nova
// este metodo deve ser static, pois sera chamado chamada. Assim, se o método Alternar for chamado em
// pelo metodo main() que e static static void intervalos de tempo regulares, poderemos utilizar o estado
MudaInteiro(inteiro k) { da classe Semaforo para controlar um semá foro com luzes
System.out.println("MudaInteiro: valor de k e " + k.i); reais.
k.i += 2;
System.out.println("MudaInteiro: valor de k e apos
incremento e " + k.i); 3 Fonte: http://www.dm.ufscar.br/
Para distinguir entre variá veis declaradas em classes }
daquelas declaradas localmente dentro de }
métodos,comumente nos referimos à quelas como campos.
Assim, dizemos que VermelhoVerdeAmareloé um campo da class Retâ ngulo extends Polígono {
classe Semaforo. Retâ ngulo(Vértice v[]) { this.v =
new Vértice[4]; numVértices =
Herança 4; for(int i=0; i<4; i++)
Contudo, uma das maiores vantagens da OOP reside na this.v[i] = v[i];
possiblidade de haver herança entre classes. Esta consiste na }
capacidade de construir novas classes a partir de outras }
existentes. Nesse processo, os dados e métodos de uma class Triâ ngulo extends Polígono
classe existente, chamada parente (ou superclass), são { Triâ ngulo(Vértice v[])
herdados pela nova classe, chamada subclasse, ou classe { this.v = new Vértice[3];
derivada. numVértices=3; for(int i=0;
i<3; i++) this.v[i] = v[i];
Encapsulamento }
Outro benefício importante da OOP reside no chamado }
encapsulamento. Este consiste na habilidade de efetivamente
isolar informaçõ es do restante do programa. Isto traz uma public class polimorfismo {
série de vantagens. Uma vez concluída uma classe intricada, // Coordenadas dos vértices de um
por exemplo, é virtualmente possível esquecermos suas retâ ngulo static Vértice v[] = { new
complicaçõ es internas, passando a tratá -la através de seus Vértice(0.0,0.0), new Vértice(2.0,0.0),
métodos. Ainda que mais tarde seja preciso realizar mudanças new Vértice(2.0,1.0), new Vértice(0.0,1.0)
significativas no interior de uma classe, nã o será necessá rio };
modificar o restante do programa. Outro benefício desta // Coordenadas dos vértices de um triâ ngulo
prá tica é garantir que a informaçã o nã o será corrompida static Vértice w[] = {
acidentalmente pelo resto do programa. Criamos, assim,
programas mais robustos e confiá veis. new Vértice(-1.0,0.0), new Vértice(1.0,0.0),
new Vértice(0.0,1.0)
Polimorfismo };
Finalmente, uma característica importante das classes
reside no fato de que as subclasses de uma dada classe são public static void main(String args[]) {
consideradas do mesmo tipo de seu parente. Isto é chamado Polígono r, t; Grá fico
polimorfismo. Este permite a realizaçã o de uma mesma g = new Grá fico();
operaçã o sobre diferentes tipos de classes, desde que r = new Retâ ngulo(v); // Isto é vá lido, pois Retâ ngulo
mantenham algo em comum. Por exemplo, considere a classe é um Polígono t = new Triâ ngulo(w); // Isto é vá lido,
Polígono e suas derivadas Retâ ngulo e Triâ ngulo declaradas pois Triâ ngulo
abaixo. Apesar de retâ ngulos e triâ ngulos serem diferentes, é um Polígono
eles ainda sã o considerados polígonos. Assim, qualquer coisa // Desenha o
que fosse permitido fazer com uma instâ ncia (i.é, um objeto) retâ ngulo g.Desenhar(
da classe Polígono, seria também permitida para a instâ ncias r ); // Desenha o
das classes Retâ ngulo e Triâ ngulo. O seguinte exemplo ilustra triâ ngulo
o polimorfismo entre essas classes permitindo que se desenhe g.Desenhar( t );
um polígono, independentemente do prévio conhecimento de }
que se trata de um retâ ngulo ou de um triâ ngulo. }
class Vértice { public double x, Algumas partes deste có digo são novidade, como por
y; Vértice( double x, double exemplo os métodos declarados nas classes Vértice,
y){ this.x = x; this.y = y; Retâ ngulo e Polígono, que parecem não obedecer às regras
} estabelecidas no capítulo sobre métodos.
}
Declarando uma classe
class Polígono { int numVértices; // Quantidade de A forma geral da declaração de uma classe é a seguinte
vértices do polígono [modificadores] class [nome classe] extends [nome super]
Vértice v[]; // Coordenadas de seus vértices implements [nome interface] onde as partes que aparecem
} em itá lico sã o opcionais. Como podemos notar, há quatro
class Grá fico { diferentes propriedades de uma classe definidas por essa
// Desenha o polígono no dispositivo grá fico declaraçã o:
void Desenhar(Polígono p) { Modificadores
SaídaGrá fica g; // saída grá fica com método Nome de classe
DesenhaLinha. Super classes
Vértice anterior; Interfaces
anterior = p.v[0]; Vamos ver em detalhes cada uma destas propriedades a
// Une os vértices do polígono desenhando uma linha seguir.
entre eles
for(int i=1; i<numVértices; i++) { Modificadores
g.DesenhaLinha( anterior, p.v[i] ); Os modificadores de uma classe determinam como uma
anterior = p.v[i]; classe será manipulada mais tarde no
} decorrer do desenvolvimento do programa.
Estes sã o muito parecidos com os moderadores de acesso objeto um estado inicial, apropriado ao processamento
introduzidos anteriormente no capítulo sobre métodos. subseqü ente.
Ao declarar uma nova classe, é possível especificar um Os contrutores são métodos facilmente identificá veis pois
dos seguintes modificadores: public, final, abstract. public: têm o mesmo nome da classe. Além disso, os construtores nã o
permite definir classes pú blicas. Estas classes sã o acessíveis especificam nenhum valor de retorno, mesmo que este seja
a partir de qualquer objeto, independentemente do package. void, uma vez que nã o sã o chamados como os outros métodos.
Uma classe pú blica deve ser a ú nica classe desse tipo no Os construtores somente podem ser chamados no momento
arquivo em que está declarada e o nome do arquivo deve ser da instanciaçã o. Por exemplo:
igual ao da classe. friendly: se nenhum modificador de classe Vértice v = new Vértice(1.0, 2.0);
for especificado, entã o a classe será considerada friendly. Temos neste trecho de có digo a instanciaçã o da classe
Apenas os objetos integrantes do mesmo package podem Vértice, que ocorre no momento em que reservamos espaço
utilizar uma classe friendly. para conter um novo objeto dessa classe. Nesse momento o
final: Uma classe final pode ser instanciada, mas nã o pode construtor Vértice é chamado com os argumentos 1.0 e 2.0.
ser derivada, isto é, nã o pode ser superclasse de nenhuma É usual declarar os construtores como pú blicos. Isto
subclasse. Algumas classes predefinidas no ambiente Java têm porque, se eles tiverem um nível de acesso inferior ao da
esta propriedade. Outras nã o, como as classes no java.awt, por classe propriamente dita, outra classe será capaz de declarar
exemplo. abstract: Classes abstratas são aquelas que contém uma instâ ncia dessa classe, mas nã o será capaz de realizar
ao menos um método incompleto. Desse modo uma classe ela mesma a instanciaçã o, isto é, nã o poderá usar o operador
abstrata nã o pode ser instanciada, mas pode ser derivada. new para essa classe. Há situaçõ es, porém, em que essa
Neste caso, a subclasse deve prover o corpo do método para característica é desejá vel. Deixando seus construtores como
que possa ser instanciada. Isto é muito ú til quando desejamos privativos, permite a outras classes usar métodos está ticos,
definir em uma classe regras gerais para o comportamento de sem permitir que elas criem instâ ncias dessa classe.
uma parte do programa, para que, mais tarde, as regras mais Uma classe pode mú ltiplos construtores declarados,
específicas sejam introduzidas por subclasses. desde que cada um tenha lista de argumentos distinta dos
Nome de Classe demais. Isto é muito ú til, pois em determinados contextos do
Como qualquer identificador em Java, o nome de uma programa um objeto deve ser inicializado de uma maneira
classe deve obedecer às seguintes regras: particular em relaçã o a outros contextos possíveis.
Iniciar com uma letra, ou um dos caracteres: '$', '_'. Quando nenhum construtor é declarado explicitamente,
Conter somente caracteres Unicode considerados letras, um construtor vazio é provido implicitamente. Por exemplo,
dígitos ou um dos dois caracteres acima. se nã o tivéssemos especificado um construtor na classe
Nã o pode ser igual a uma palavra-chave reservada pela Vértice, este sería o construtor default:
linguagem Java, tal como void, int, for, while, etc. Vértice() {
Lembre-se: as letras maiú sculas e as minú sculas são }
consideradas diferentes. Os construtores nã o podem ser declarados com os
modificadores: native,abstract, static, synchronized ou final.
Super Classes
Um dos aspectos mais importantes da OOP é a capacidade Sobreposição
de usar campos e métodos de uma classe previamente Nã o é permitido declarar em uma mesma classe dois
construída. Por meio da extensão de classes simples podemos métodos com o mesmo nome e mesma lista de argumentos.
construir classes maiores, acrescentando à quelas mais De fato, isto parece nã o fazer nenhum sentido, pois os
campos e métodos, obtendo com isto mais funcionalidades. métodos são unicamente identificados pelo nome e pela lista
Neste processo, há uma grande economia no esforço de de argumentos que os acompanha. Se isso fosse permitido
codificaçã o. Sem esse recurso, freqü entemente seria haveria uma grande confusão, pois como é que se poderia
necessá rio recodificar grande parte dos programas para determinar precisamente qual método chamar?
acrescentar-lhes funcionalidade ou fazer modificaçõ es Entretanto, uma das finalidades de permitir a derivaçã o
significativas. de classes é atribuir a elas novas funcionalidades. Isto é
Ao derivar uma classe, estamos primeiramente fazendo possível acrescentando-se novos métodos à s subclasses. Mas
uma có pia da classe parente. É exatamente isto que obtemos também é possível sobrepor qualquer dos métodos
se deixarmos vazio o corpo da subclasse. Tal classe se existentes na superclasse, declarando o novo método na
comportaria exatamente como sua superclasse. Entretanto, subclasse exatamente com o mesmo nome e lista de
podemos acrescentar novos campos e métodos à subclasse, argumentos, como consta na superclasse. Por exemplo,
além de sobrepor métodos existentes na superclasse, considere a classe Computador abaixo: class Computador
declarando-os exatamente como na superclasse, exceto por { private boolean ligado = true; public void Desligar() {
dar um corpo diferente. ligado = false;
Nã o existe herança mú ltipla em Java. E contraste com a }
linguagem C++, em Java somente é possível derivar uma classe }
a partir de uma outra, e nã o de vá rias. Esta classe permite que o computador seja desligado,
através da chamada do método Desligar. Porém, isto pode
Construtores nã o ser muito seguro, pois poderíamos desligar o
Os contrutores sã o métodos muito especiais, a começar computador mesmo quando ele estiver executando algum
pela sua sintaxe declarativa, e também por suas propriedades programa. Nesse caso, podemos evitar uma catá strofe
e finalidade ú nicas. Por exemplo, o construtor da classe derivando a classe computador do seguinte modo: class
Vértice vista acima é o seguinte: Vértice( double x, double y ) { ComputadorSeguro extends Computador { private boolean
this.x = x; this.y = y; executando = true; public void Desligar() {
} if ( executando )
Sua ú nica finalidade é inicializar o objeto com um par de System.out.println("Há programas rodando. Nã o
coordenadas fornecidas no momento da instanciaçã o. Aliá s, desligue!"); else ligado = false;
esta é a principal finalidade dos construtores: atribuir a um }
} Desligar. Para indicar a qual objeto o método se refere,
Agora, um objeto da classe ComputadorSeguro somente devemos precedê-lo do nome do objeto seguido de um
será desligado quando nã o tiver programas rodando (exceto operador ponto '.'. A notação geral é
quando alguém acidentalmente chutar o fio da tomada!). [nome da instâ ncia].[nome do método ou variá vel]
A sobreposiçã o somente acontece quando o novo método é Uma exceçã o a essa regra aplica-se à referência de
declarado com exatamente o mesmo nome e lista de campos ou métodos declarados como static. Tais declaraçõ es
argumentos que o método existente na superclasse. Além sã o compartilhadas por todas as instâ ncias de uma classe,
disso, a sobreposiçã o nã o permite que o novo método tenha desse modo nã o fornecemos o nome de uma particular
mais proteçõ es do que o método original. No exemplo acima, instâ ncia, mas o nome da pró pria classe ao referenciá -los.
como o método Desligar foi declarado como public na
superclasse, este nã o pode ser declarado private na subclasse. A especificação this
Vimos acima como fazer referências a partes de classes.
Instanciando uma classe Mas, e se desejá ssemos fazer referência a partes da pró pria
Uma classe define um tipo de dado. Ela nã o pode ser usada classe? Isso parece evidente, porém, à s vezes, o nome de um
a não ser que seja instanciada. A exemplo dos tipos de dados argumento ou variá vel declarada por um método pode
primitivos os quais somente podem ser usados quando uma coincidir com o nome de um campo da classe. Veja o exemplo
variá vel de um determinado tipo é declarada, devemos criar da classe Vértice. Nessa classe o método construtor declara
uma instâ ncia. Uma instâ ncia é um objeto do tipo definido pela dois argumentos x e y, os quais têm o mesmo nome dos
classe. Qualquer classe (desde que nã o seja abstract) pode ser campos x e y da classe. Esse método distingue os argumentos
instanciada como qualquer outro tipo de dado da linguagem dos campos pelo uso da especificaçã o this.
Java. O trecho de có digo abaixo exibe uma classe chamada Assim this.x e this.y referem-se aos campos x e ydeclarados
Geometria criando um a instâ ncia da classe Vértice: public na classe, enquando x e y propriamente ditos referem-se aos
class Geometria { Vértice v = new Vértice(1.2, 3.5); argumentos do construtor. A palavra this substitui uma
... referência à propria classe.
} Há basicamente duas situaçõ es em que devemos empregar
A diferença mais evidente entre a declaraçã o de um objeto a palavra this:
de uma classe e a declaraçã o de um dado primitivo reside na Quando houver duas variá veis com mesmo nome numa
necessidade de reservar memó ria para o objeto através do uso mesma classe - uma pertencendo à classe e outra
do operador new. Na verdade, esse operador realiza uma série pertencendo a algum dos métodos da classe. Nesse caso,
de tarefas: apenas esse método específico requer o uso do this se quiser
Reserva espaço para a instâ ncia da classe Vértice, o qual fazer referência ao campo da classe.
deve ser suficiente para conter seu estado, isto é, os valores Quando uma classe precisa passar uma referência de si
dos seus campos. propria a um método. Vamos ter a oportunidade de explorar
Realiza a chamada do método construtor. este aspecto quando estivermos estudando os applets.
Retorna uma referência para o novo objeto (o qual é A especificaçã o super
atribuído à variá vel v). A palavra super provê acesso a partes de uma
Outra importante diferença entre objetos e dados de tipo superclasse a partir de uma subclasse. Isto é muito ú til
primitvo é que estes sã o sempre referenciados por valor, quando estamos sobrepondo um método. Poderíamos
enquanto aqueles são sempre referenciados por meio de sua reescrever o método Desligar da classe ComputadorSeguro
referência. Isto tem impacto significativo na maneira como os do seguinte modo: class ComputadorSeguro extends
objetos sã o passados como parâ metros na chamada de Computador { private boolean executando = true; public
métodos. Se o método realizar internamente alguma void Desligar() {
modificaçã o no objeto que foi passado, essa modificaçã o if ( executando )
refletirá no objeto original. Isto nã o ocorre com a passagem de System.out.println("Há programas rodando. Nã o
dados de tipo primitivo. desligue!"); else super.Desligar();
Referindo-se à s partes de uma classe }
Apó s instanciar uma classe é desejá vel podermos acessar }
algum de seus campos ou entã o algum de seus métodos. Note a chamada super.Desligar(). Esta corresponde a
Dentro de uma classe os campos e métodos sã o acessíveis chamada do método Desligar declarado na superclasse
imediatamente pelo nome. Repare como na classeComputador Compudador, o qual vai efetivamente ajustar o campo ligado
acima o método Desligar acessa diretamente o campoligado, para o valor false. Imaginando que o método Desligar fosse
simplesmente por meio do seu nome. muito mais complicado, nã o precisaríamos recodificá -lo
Entretanto, considere a seguinte classe chamada CPD a completamente na subclasse para acrescentar a
qual contém vá rias instâ ncias da classe Computador: public funcionalidade que permite o desligamento apenas quando o
class CPD { computador estiver desocupado. Basta chamá -lo da maneira
Computador Gauss = new Computador(), prescrita.
Davinci = new Computador(), E se o método que desejamos chamar é um construtor?
Fermat = new Computador(); Bem, nesse caso a chamada usando a palavra super bem
... particular. Examinemos o seguinte exemplo de uma classe
public void Fechar() chamada VérticeNumerado que estende a classeVértice,
{ Gauss.Desligar(); acrescentando às coordenadas do vértice um ró tulo
Davinci.Desligar(); numérico que o identifica visualmente: class
Fermat.Desligar(); VérticeNumerado extends Vértice { int numero;
} VérticeNumerado( int numero, int x, int y )
... { this.numero = numero;
O método Fechar realiza o desligamento de cada particular super(x, y);
instâ ncia da classe Computador chamando seu método }
}
Note que a chamada super(x, y) se traduz na chamada do seguramente as mais importantes são as classes Object, Class
construtorVértice(x,y) da superclasse. Com isto, evitamos de e String.
ter que recodificar no novo construtor as tarefas contidas no
construtor da superclasse: basta chamá -lo. Vale observar que
esse tipo de chamada também só é permitida de dentro de A classe Object
um construtor. A classe Object é uma classe que serve de superclasse
para todas as classes existentes em Java. Isso significa que ao
Campos e Variáveis Locais criar uma classe, se nã o for especificada nenhuma
Chegou o momento de discutirmos sobre a forma como as superclasse apó s a palavra extends, entã o a classe Object
variá veis são declaradas dentro de um programa. Podemos será assumida automaticamente como superclasse. Portanto
declarar variá veis de classe, chamadas campos, e variá veis de toda classe é subclasse de Object, e com isso herda alguns
métodos, ditas locais. métodos automaticamente. Um método muito interessante
A esta altura, já devemos ter feito a seguinte indagaçã o: se presente na classe Objecté o equals. Suponha que haja duas
os campos sã o acessíveis por qualquer dos métodos instâ ncias de uma mesma classe e desejamos testar se elas
declarados em uma classe e eventualmente por métodos de contém a mesma informaçã o. O operador == nos daria o
classes derivadas, por que nã o declararmos todos os dados valor true apenas se seus operandos forem precisamente o
empregados por uma classe como campos? Uma resposta mesmo objeto. Porém, o operador equals nos diria quando os
imediata a essa pergunta seria: isso provocaria um objetos contém o mesmo estado, através da comparaçã o
significativo desperdício de memó ria, pois os campos existem campo-a-campo. Por exemplo, eu e você podemos ter carro
durante todo período de existência de um objeto. Entretanto, do mesmo modelo. Nesse caso meuCarro == seuCarro seria
os dados declarados localmente por um método existem false pois embora nossos carros sejam do mesmo modelo,
somente enquanto esse método estiver sendo executado, de sã o carros diferentes. Entretanto,
modo que o espaço de memó ria previamente ocupado por eles meuCarro.equals(seuCarro) poderia sertrue se os atributos
é reaproveitado quando o método termina sua execuçã o. de ambos os carros fossem idênticos, por exemplo, mesmo
A capacidade de acessar uma variá vel de uma classe ano, mesma cor, etc.
depende fundamentalmente de duas coisas: moderadores de Um outro método interessante da classe Object é o
acesso e localizaçã o da variá vel dentro da classe. As variá veis método getClass, que retorna uma referência a um objeto
locais somente sã o acessíveis pelo método que as declara, contendo informaçõ es sobre a classe a que é aplicado. Isto
enquanto que os campos dependem dos moderadores. Apesar será visto logo abaixo.
de ser possível deixar todos os campos de uma classe
publicamente acessíveis, isto nã o é recomendá vel. Do A classe Class
contrá rio estaríamos desperdiçando o sofisticado mecanismo A classe Class contém informaçõ es que descrevem uma
de proteçã o de dados fornecido pela OOP, o qual permite classe em Java. Toda classe em Java tem uma correspondente
escrever programas mais robustos e livres de erros instâ ncia da classe Class. É possível obter informaçõ es
(vulgarmente chamados bugs). contidas nessas instâ ncias por um dos seguintes meios:
Os possíveis moderadores empregados na declaraçã o de Usar o método getClass de um objeto para obter uma
campos são os seguintes: friendly: todos os campos sã o referência à respectiva instâ ncia da classe Class. Exemplo:
friendly por default. Isto significa que sã o acessíveis por Vértice v = new Vértice(1.0, 2.0);
outras classes integrantes do mesmo package e nã o sã o Class cv = v.getClass();
acessíveis por nenhuma classe ou subclasse exterior ao Usar o método está tico forName de Class para obter uma
package. public: idêntico ao moderador de acesso dos instâ ncia de Class usando o nome da classe. Por exemplo:
métodos. O campo é acessível a partir de qualquer outra Class cv = Class.forName("Vértice");
classe, independentemente do package. protected: os campos De posse de uma instâ ncia da classe Class, podemos
protected podem ser acessados a partir de qualquer classe obter informaçõ es interesantes sobre a classe da qual ela
derivada da classe atual, mas nã o sã o acessíveis de fora do provém. Por exemplo:
package. Obter o nome da classe. Isto é muito ú til quando lidamos
private: é o maior grau de proteçã o. Um campo private é com polimorfismo. Polígono p;
acessível unicamente pela classe atual. ...
private protected: a combinaçã o dos moderadores private p = new Retâ ngulo( ... );
eprotected estabelece que o campo seja acessível pela classe ...
atual e por suas subclasses. System.out.println("O polígono é um " +
static: Um campo static é compartilhado por todas as p.getClass().getName() );
instâ ncias de uma classe, isto é, há um ú nico valor para esse deverá exibir na tela a mensagem:
campo, independentemente da quantidade de instâ ncias O poligono é um Retâ ngulo
existentes, mesmo que nã o haja nenhuma. final: um Obter o nome da superclasse imediatamente adjacente.
modificador final precedendo um campo declara esse campo Retâ ngulo r;
como uma constante. Seu valor nã o pode mudar durante a ...
execução do programa. Por isso, é necessá rio que haja uma
System.out.println("A classe parente do objeto é "
inicializaçã o de campo. Por exemplo: final int MaxDimen = 10; + r.getClass().getSuperClass().getName() );
O uso de constantes dentro de um programa torna-o mais deverá exibir na tela a mensagem: A classe
facilmente legível e fá cil de seguir. Para economizar memó ria, parente do objeto é Polígono
é recomendá vel também declarar constantes como static. Outra possibilididade interessante do uso da classe Class
está na instanciaçã o dinâ mica de objetos:
Classes Especiais Polígono p;
A linguagem Java provê algumas classes bá sicas para String nome;
formar uma base só lida para todas as demais classes, inclusive System.out.print("Qual o poligono que deseja criar?");
aquelas criadas pelo programador. Dentre essas classes, System.out.flush();
nome = System.in.read();
p = (Polígono) Class.forName(nome).newInstance(); Podemos criar a mesma sensaçã o confortá vel para o cliente
em uma aplicaçã o web, também usando componentes ricos e
Java EE e frameworks4 reaproveitá veis.

A linguagem Java apresenta uma série de conhecidos Desenvolvimento desktop ou web?


frameworks, que auxiliam no desenvolvimento de sistemas. Existem algumas desvantagens no desenvolvimento
Dentre os mais conhecidos, estã o o Struts, Hibernate, JUnit, desktop. Como cada usuá rio tem uma có pia integral da
entre outros. aplicaçã o, qualquer alteraçã o precisaria ser propagada para
Há inú meras definiçõ es a respeito de framework. Podemos todas as outras má quinas. Estamos usando um cliente gordo,
considerar um framework como uma soluçã o para um isto é, com muita responsabilidade no lado do cliente.
conjunto de problemas em comum, com uso de classes e Note que, aqui, estamos chamando de cliente a aplicaçã o
interfaces, que disponibilizam objetos com capacidade de que está rodando na má quina do usuá rio.
capturar funcionalidades comuns a vá rias aplicaçõ es. Assim Para piorar, as regras de negó cio rodam no computador
sendo, um framework pode ser considerado sob certo ponto do usuá rio. Isso faz com que seja muito mais difícil depurar a
de vista como uma soluçã o quase completa. aplicaçã o, já que nã o costumamos ter acesso tã o fá cil à
É muito comum haver uma certa confusão entre o que é má quina onde a aplicaçã o está instalada. Em geral,
um framework e uma "simples" biblioteca de classes. Vale enfrentamos problemas de manutenção e gerenciabilidade.
ressaltar que em uma biblioteca de classes, cada classe é ú nica
e independente de outras classes. Já em um framework, existe O desenvolvimento Web e o protocolo HTTP
uma certa dependência entre as classes, conhecido como Para resolver problemas como esse, surgiram as
modelo de colaboraçã o. aplicaçõ es baseadas na web. Nessa abordagem há um
Também pode haver confusã o junto a definiçã o de Design servidor central onde a aplicaçã o é executada e processada e
Patterns. Apenas lembrando que em um framework todos os usuá rios podem acessá -la através de um cliente
possuímos có digo em si, enquanto nos design patterns temos simples e do protocolo HTTP.
apenas um "modelo" ou "exemplo" de uma soluçã o para um Um navegador web, como Firefox ou Chrome, que fará o
conhecido problema. papel da aplicaçã o cliente, interpretando HTML, CSS e
Assim sendo, um framework deve ser extensível, bem JavaScript -- que sã o as tecnologias que ele entende.
documentado e, principalmente, reusá vel. Vale lembrar que o Enquanto o usuá rio usa o sistema, o navegador envia
uso de frameworks tem benefícios claros quando tratamos de requisiçõ es (requests) para o lado do servidor (server side),
redução de custos. que responde para o computador do cliente (client side). Em
Também pode haver confusã o junto a definiçã o de Design nenhum momento a aplicaçã o está salva no cliente: todas as
Patterns. Apenas lembrando que em um framework regras da aplicaçã o estã o no lado do servidor. Por isso, essa
possuímos có digo em si, enquanto nos design patterns temos abordagem também foi chamada de cliente magro (thin
apenas um "modelo" ou "exemplo" de uma soluçã o para um client).
conhecido problema. Isso facilita bastante a manutençã o e a gerenciabilidade,
Assim sendo, um framework deve ser extensível, bem pois temos um lugar central e acessível onde a aplicaçã o é
documentado e, principalmente, reusá vel. Vale lembrar que o executada. Contudo, note que será preciso conhecer HTML,
uso de frameworks tem benefícios claros quando tratamos de CSS e JavaScript, para fazer a interface com o usuá rio, e o
redução de custos. protocolo HTTP para entender a comunicaçã o pela web. E,
mais importante ainda, nã o há mais eventos, mas sim um
Introdução ao JSF modelo bem diferente orientado a requisiçõ es e respostas.
Toda essa base precisará ser conhecida pelo desenvolvedor.
Durante muitos anos, os usuá rios se habituaram com Comparando as duas abordagens, podemos ver
aplicaçõ es Desktop. Este tipo de aplicaçã o é instalada no vantagens e desvantagens em ambas. No lado da aplicação
computador local e acessa diretamente um banco de dados ou puramente Desktop, temos um estilo de desenvolvimento
gerenciador de arquivos. As tecnologias típicas para criar uma orientado a eventos, usando componentes ricos, porém com
aplicaçã o Desktop sã o Delphi, VB (Visual Basic) ou, no mundo problemas de manutençã o e gerenciamento. Do outro lado,
Java, Swing. as aplicaçõ es web sã o mais fá ceis de gerenciar e manter, mas
Para o desenvolvedor, a aplicaçã o Desktop é construída precisamos lidar com HTML, conhecer o protocolo HTTP e
com uma série de componentes que a plataforma de seguir o modelo requisiçã o/resposta.
desenvolvimento oferece para cada sistema operacional. Esses
componentes ricos e muitas vezes sofisticados estã o Mesclando desenvolvimento Desktop e Web
associados a eventos ou procedimentos que executam ló gicas Em vez de desenvolver puramente para desktop, é uma
de negó cio. tendência mesclar os dois estilos, aproveitando as vantagens
Problemas de validaçã o de dados sã o indicados na pró pria de cada um. Seria um desenvolvimento Desktop para a web,
tela sem que qualquer informaçã o do formulá rio seja perdida. tanto central quanto com componentes ricos, aproveitando o
De uma forma natural, esses componentes lembram-se dos melhor dos dois mundos e abstraindo o protocolo de
dados do usuá rio, inclusive entre telas e açõ es diferentes. comunicaçã o. Essa é justamente a ideia dos frameworks web
Nesse tipo de desenvolvimento sã o utilizados diversos baseados em componentes.
componentes ricos, como por exemplo, calendá rios, menus No mundo Java há algumas opçõ es como JavaServer Faces
diversos ou componentes drag and drop (arrastar e soltar). (JSF), Apache Wicket, Vaadin, Tapestry ou GWT da Google.
Eles ficam associados a eventos, ou açõ es, e guardam Todos eles sã o frameworks web baseados em componentes.
automaticamente seu estado, já que mantêm os valores
digitados pelo usuá rio. Características do JSF
Esses componentes nã o estã o, contudo, associados JSF é uma tecnologia que nos permite criar aplicaçõ es Java
exclusivamente ao desenvolvimento de aplicaçõ es Desktop. para Web utilizando componentes visuais pré-prontos, de
forma que o desenvolvedor nã o se preocupe com Javascript e
4 Fonte: http://www.linhadecodigo.com.br/artigo/758/o-universo-
dosframeworks-java.aspx HTML. Basta adicionarmos os componentes (calendá rios,
tabelas, formulá rios) e eles serã o renderizados e exibidos em 30x no nú mero de requisiçõ es por segundo em uma pá gina
formato html. complexa.

Guarda o estado dos componentes Melhorias na Especificação


Além disso o estado dos componentes é sempre guardado Sã o muitos os pontos de melhoria, mas gostaremos de
automaticamente (como veremos mais à frente), criando a ressaltar alguns, principalmente no que concerne à
característica Stateful. Isso nos permite, por exemplo, criar evoluçã o/futuro da plataforma. Ficamos muito tempo
formulá rios de vá rias pá ginas e navegar nos vá rios passos parados no JSF1.2 e nã o vimos progresso na especificaçã o.
dele com o estado das telas sendo mantidos. Contudo, parece que o jogo mudou. Alguns itens que ficaram
em aberto no JSF2.0, como a falta de integraçã o do
Separa as camadas @ViewScope com a combinaçã o JSF + CDI, já estã o previstos
Outra característica marcante na arquitetura do JSF é a para serem resolvidos no JSF2.2, assim como melhorias no
separação que fazemos entre as camadas de apresentaçã o e de suporte ao HTML5, AJAX e navegaçã o com o Faces Flow e
aplicaçã o. Pensando no modelo MVC, o JSF possui uma camada outros itens resolvidos já no JSF2.1.
de visualizaçã o bem separada do conjunto de classes de
modelo. Mais componentes!
O nú mero de componentes tem crescido a cada dia
Especificação: várias implementações devido a facilidade de se implementar componentes no JSF2.
O JSF ainda tem a vantagem de ser uma especificaçã o do Os principais conjuntos de componentes (Primefaces,
Java EE, isto é, todo servidor de aplicaçõ es Java tem que vir Richfaces, Trinidad e Icefaces) já possuem um excelente
com uma implementaçã o dela e há diversas outras suporte a nova especificaçã o e cada um deles possui
disponíveis. diferentes sabores de componentes ricos para praticamente
A implementaçã o mais famosa do JSF e também a todos os tipos de aplicaçã o. Devido a features como Ajax
implementaçã o de referência, é a Oracle Mojarra disponível Nativo e Resource Loading estes mesmos conjuntos de
em http://javaserverfaces.java.net/. Outra implementaçã o componentes tornaramse compatíveis, o que tem
famosa é a MyFaces da Apache Software Foundation em possibilitado integrá -los sem muitas dificuldades em um
http://myfaces.apache.org/. mesmo projeto – o que era quase impossível com JSF1.2.
Outro ponto interessante é que com o sucesso do JSF2 as
empresas mantenedoras tem diminuído o suporte e a
implementaçã o de novos componentes JSF1.2, e,
provavelmente, em médio prazo será ainda mais raro obter
correçõ es e melhorias para esses componentes de forma
gratuita.
Adoção do Primefaces 2.x e 3.x
No tó pico anterior ressaltamos sobre a variedade de
componentes, nesse ousamos afirmar que o Primefaces
(2.x/3.x) está tã o interessante que seu uso por si só já é um
JSF 1.x e 2.x motivo para migrar. Eles sairam na frente do RichFaces
5 como implementaçã o de componentes compatível com JSF 2.
Desempenho Só esse aspecto já seria o suficiente para ter uma adoção
JSF sempre foi considerado um framework com problemas maior. Entretanto, o principal motivo foi a qualidade dos
graves de desempenho desde suas primeiras versõ es (RI componentes. Comparando as demos de ambos constate-se
1.0/1.1). No entanto, apó s o lançamento do JSF1.2 muitos dos que o primeiro possui uma variedade muito maior de
problemas de performance foram resolvidos graças ao elementos, além de suporte com componentes mobile. Ainda
talentoso time de desenvolvedores da Mojarra (RI). Mas ainda mais, ele usa o ThemeRoller, facilitando a customizaçã o de
assim, devido a limitaçõ es de design na especificaçã o do acordo com sua necessidade.
JSF1.2, o time de desenvolvedores sempre teve dificuldades Outro ponto que podemos citar é a evoluçã o. Enquanto o
para escrever có digo performá tico. Somente com a Primefaces já está na 3.X (segunda geraçã o compatível com
especificaçã o do JSF2 é que tornou-se possível escrever có digo JSF 2), o RichFaces ainda está na 4.X (primeira geraçã o
desde o ínicio com performance em mente. compatível com a tecnologia). Você pode conferir diversas
A extensibilidade e as novas features (como Partial State comparaçõ es que o pessoal no mercado fez, inclusive
Saving, Tree Visiting e Project Stage) do JSF2 tem permitido destacando alguns pontos de desempenho, para ajudar em
melhorias significantes de desempenho a cada release. suas conclusõ es.
Melhorias como o menor consumo de memó ria (até 4x menos)
e cpu, menor latência, melhor gerenciamento do estado de Maturidade
cada componente, otimizaçã o no algoritmo de busca de A adoçã o do JavaEE 6 pode ser considerada um sucesso,
fato esse pois discussõ es antigas sobre JavaEE vs Spring
voltaram, e antigamente a especificaçã o perdia fá cil (quem
5
Fonte: http://blog.caelum.com.br/10-razoes-para-migrar-sua-aplicacao-parajsf- nã o se lembra daquela MundoJ – EJB X Spring). Atualmente o
2/
Java EE tem uma boa relaçã o com outros frameworks, como
componentes e de serializaçã o da á rvore de componentes,
o
cache de EL expressions e outros.Indo mais além, é possível
Spring.
que o JSF2.2 (ou um futuro release) adote uma configuraçã o
Adoção do CDI
que vá em direçã o contrá ria à natureza Stateful do
CDI é a especificação para Injeçã o de Dependência
framework, o Stateless Mode. Com este modo stateless nã o
(JSR299). Surgiu também com o JavaEE 6 e foi prontamente
haverá a necessidade de criar a á rvore de componentes a
adotada pela comunidade, inclusive integrando com
cada request (teremos um cache de cada view), o que
linguagens como Ruby (projeto TorqueBox). Já teve inclusive
diminuirá o uso de memoria e cpu e trará um ganho de até
alguns estudos para identificar o desempenho de aplicaçõ es
que usam a API e concluem como a implementaçã o de Existem dois tipos de beans, são eles: os Session beans e
referência Weld evoluiu e ainda tem a evoluir. Com a Message-driven beans. Eles formam o coraçã o do EJB e serã o
especificaçã o conseguimos algumas manipulaçõ es bem mais detalhados no restante do artigo, assim como diversas
avançadas como, por exemplo, injeçã o de dependência para outras funcionalidade providas pelo EJB 3.2.
objetos genéricos. Entity beans foram marcados como “anulados” na versã o
anterior (EJB 3.1) da especificaçã o do EJB e agora está como
Envolvimento da comunidade opcional no EJB 3.2. Isso ocorre porque a Java Persistence
Há muito movimento ao redor do JSF2 e do CDI. API ganhou a sua pró pria especificação e pode ser executada
Recentemente foi lançada pelo Bauke Scholtz (talvez o fora de um container.
developer mais proeminente na plataforma) o OmniFaces, que
é uma biblioteca utilitá ria para consertar vá rios problemas Beans com Estado de Sessão (Stateful Session Beans)
que ainda nã o foram melhorados na especificaçã o. Temos Um bean com estado de sessã o (stateful session bean)
também outros projetos mainstream como o Seam3, tem como característica manter o estado conversacional
CDISource e Apache CODI. Há um claro sombreamento de para um cliente específico. O estado é armazenado nos
funcionalidades entre os projetos, porém a cooperaçã o dos valores das variá veis de instâ ncia do bean e nos
times está tã o grande que todos resolveram juntar forças em interceptadores associados.
um só projeto, o DeltaSpike. O projeto agora é o foco da Podemos definir um simples bean com estado de sessã o
comunidade, e para comprovar isso, Pete Muir recentemente usando a anotaçã o @Stateful. Segue na imagem abaixo um
enviou um email na lista do seam-dev explicando que o exemplo de como podemos definir um bean com estado de
projeto está a pleno vapor. sessão.

Suporte ao HTML5
Há muitas funcionalidades interessantes na especificaçã o e
ver o JSF tentar se alinhar mostra cada vez mais a
preocupaçã o da tecnologia em melhorar a User Experience.

Fim do suporte à versão antiga


Aqui entra uma questã o mais enterprise. Algumas
empresas contratam Oracle, JBoss, IBM, justamente pelo
suporte que elas oferecem aos seus produtos. Portanto, é
importante identificar a data de expiraçã o desses serviços.
Uma outra preocupaçã o é com relação a variedade de
implementaçõ es para a especificaçã o JavaEE. Alguns vendors
demoraram a soltar os seus releases compatíveis, mas temos
até alguns menos conhecidos que estã o certificados, como
Apache Geronimo e Caucho Resign. Há também melhorias
considerá veis de desempenho no JBoss 7 e GlassFish 3.1.

Enterprise Java Beans (EJB 3.x)


6

Enterprise JavaBeans são usados para o desenvolvimento


e implantaçã o de aplicaçõ es distribuídas baseadas em
componentes que sã o escalá veis, transacionais, e seguros. Um
EJB normalmente contém a ló gica de negó cio que atua sobre
os dados de negó cio. Essa afirmaçã o não era verdadeira até a
introduçã o dos POJOs que também estã o disponíveis nessa
nova versã o do EJB.
O EJB 3.2 também permite que toda parte envolvendo Exemplo de um bean com estado de sessã o utilizando
segurança e transação possa ser especificados na forma de anotaçõ es.
anotaçõ es de metadados, ou entã o separadamente no
Deployment Descriptor que é o arquivo web.xml. Acima temos um POJO marcado com a anotação
Uma instâ ncia de um bean é gerenciado em tempo de @Stateful. Apenas anotando o nosso POJO já é o suficiente
execução por um container. O bean é acessado no cliente e é para convertermos um POJO para um bean com estado de
intermediado pelo container que ele está implantado. O sessão. Lembrando que os POJOs (Plain Old Java Objects ou
cliente deste bean também pode estar no servidor na forma de Os Singelos Clá ssicos Objetos Java) sã o objetos Java que
um Manage Bean, bean CDI, ou um Servlet. Em qualquer um seguem um projeto simplificado, sem definiçõ es rígidas de
dos casos, o container EJB fornece toda infra-estrutura estrutura como, por exemplo, obrigar o programador a
necessá ria para essas aplicaçõ es empresariais. O container implementar construtores com ou sem argumentos, definir
permite que o desenvolvedor de aplicaçõ es foque na ló gica de métodos getters e setters para cada atributo, convençõ es
negó cio e nã o se preocupe com transaçõ es de baixo nível, para nomear métodos, etc.
detalhes de gerenciamento de status, comunicaçã o remota, Todos os métodos pú blicos do bean exemplificados acima
concorrência, podem ser invocados por um cliente.
No có digo acima também verificamos que o método
6
"remover" é anotado com a anotaçã o @Remove. Um cliente
Fonte: http://www.devmedia.com.br/ejb-introducao-ao-novo-
enterprisejavabeans-3-2/30807
pode remover um bean com estado de sessã o apenas
multithreading, pools de conexã o ou outras APIs complexas de invocando o método "remover". Chamando este método temos
baixo nível. como resultado uma chamado do container ao método com a
anotação @PreDestroy. Remover um bean com estado de
sessã o significa que o estado da instâ ncia específica para Neste có digo, se CarrinhoDeCompras e Pagamento nã o
aquele cliente nã o existe mais. possuem anotaçõ es explicitas indicando se é local ou remota,
Este estilo de declaração de bean é chamado de entã o eles estã o expostos como visualizaçã o local do bean.
visualização sem interface. Esse bean é apenas localmente Porém, os beans também podem ser explicitamente
acessível aos clientes empacotados no mesmo arquivo de marcados com @Local, conforme mostra o exemplo da
deploy (como um war). Se um bean precisa ser remotamente imagem abaixo.
acessível, ele deve definir uma interface de negó cio separada
anotada com @Remote. Segue na imagem abaixo um exemplo
de definiçã o de uma interface remota.

Definindo de forma explicita o bean como local.

Os dois fragmentos de có digo sã o semanticamente


equivalentes.
Também podemos marcar o bean como remoto através da
Criando uma interface remota para o bean com estado de anotação @Remote, conforme o exemplo a imagem abaixo.
sessão criado anteriormente.

Agora o bean pode ser injetado através da sua interface,


conforme mostra a imagem abaixo.

Definindo o bean como remoto através da anotaçã o


Injetando o bean através da interface. @Remote.

Um cliente deste bean com estado de sessã o pode acessar Dessa forma, CarrinhoDeCompras e Pagamento sã o
este bean da mesma forma que aparece na imagem abaixo visualizaçõ es remotas.
Se uma das interfaces é marcada como @Local ou
@Remote, entã o cada interface que precisar ser exposta
deve ser marcada explicitamente; caso contrá rio, ele será
ignorado. Segue na imagem abaixo um exemplo onde
definimos a anotaçã o em apenas uma das implementaçõ es.

Exemplo de como o cliente pode acessar o bean.

Podemos notar o quanto a injeção de dependência facilita


a vida dos programadores que utilizam o EJB 3.2. A injeção de
dependência é um padrã o de projeto que visa desacoplar os
componentes da aplicaçã o. Dessa forma, os componentes sã o
instanciados externamente à classe com um gerenciador
controlando essas instâ ncias. Esse gerenciador, através de
uma configuraçã o, liga os componentes de forma a montar a Exemplo definindo uma interface anotada.
aplicaçã o. Isso facilita muito a vida dos desenvolvedores que
nã o precisam instanciar e nem configurar esses beans, basta Neste có digo o Bean apenas expõ e uma interface remota
injetá -lo na classe. que é "CarrinhoDeCompras".
O EJB 3.2 tornou menos rígida as regras default para Os beans com estado de sessão também possuem acesso
designar a implementaçã o de interfaces como local ou remota. aos métodos de callback do ciclo de vida, são eles:
A classe do bean deve implementar a interface ou a interface "PostConstruct" e "PreDestroy". Além disso, um container
deve ser designada como uma interface de negó cio local ou EJB pode decidir por passivar um bean com estado de sessã o
remota por meio da anotaçã o @Local ou @Remote ou ainda para alguma forma de armazenamento secundá rio e entã o
podemos utilizar o deployment descriptor. ativa-lo novamente. O container se encarrega de salvar e
Se o bean está implementando duas interfaces que nã o restaurar o estado do bean. No entanto, se há objetos que
possuem anotaçõ es, entã o eles estarã o expostos como nã o são serializá veis como soquetes abertos ou conexõ es
visualização local do bean. Segue na imagem abaixo um JDBC, eles precisam ser explicitamente fechados e
exemplo. restaurados como parte desse processo. Assim,
@PrePassivate é invocado para limpar os recursos antes do
bean ser passivado, e @PostActivate que é invocado para
restaurar os recursos.
Porém, uma das novidades do EJB 3.2 é a capacidade de
optar por nã o passivaçã o o que pode evitar exceçõ es em
tempo de execução e a degradaçã o de desempenho do
Bean implementando duas interfaces sem anotaçõ es, aplicativo. Segue na Listagem 9 um exemplo de como
tornando-as assim como de acesso local. desabilitar essa funcionalidade.
Desabilitando a passivação num determinado bean.

Stateless Session Beans


Um bean sem estado de sessã o nã o contém qualquer
estado conversacional para um cliente específico.
Todas as instâ ncias de um bean sem estado de sessão sã o Criando uma interface remota para o bean sem estado de
equivalentes, portanto o container pode escolher delegar um sessão.
método invocado por um cliente para qualquer instâ ncia
disponível no pool do container. Visto que os beans sem
Por fim, o cliente injeta o bean através da interface,
estado de sessã o nã o possuem qualquer estado, eles nã o
conforme exemplificado na imagem abaixo.
precisam ser passivados.
Podemos definir um simples bean sem estado de sessã o
utilizando a anotaçã o @Stateless, conforme exemplificado no
có digo da imagem abaixo.
Injetando o bean Conta através da anotaçã o @EJB.

Os beans sem estado de sessão suportam dois métodos


de callback do ciclo de vida, sã o eles: "PostConstruct" e
"PreDestroy".
O método "PostConstruct" é invocado depois que o
construtor sem argumentos é invocado e todas as
dependências foram injetadas, e antes que o primeiro
método de negó cio é invocado no bean. Este método é
geralmente onde todos os recursos necessá rios para o bean
sã o inicializados.
O método de callback "PreDestroy" é chamado antes da
instâ ncia ser removida pelo container. Este método é
Exemplo de um bean sem estado de sessã o. geralmente onde todos os recursos adquiridos durante o
PostConstruct sã o liberados.
O có digo acima mostra um POJO anotado com @Stateless. Como os beans sem estado de sessã o nã o armazenam
Isto é tudo que precisamos para converter um POJO para um qualquer estado, o container pode fazer um pool de
bean sem estado de sessão. Todos os métodos pú blicos do instâ ncias, e todos eles sã o tratados da mesma forma a partir
bean podem ser invocados por um cliente. de uma perspectiva do cliente. Qualquer instâ ncia do bean
Podemos acessar este bean sem estado de sessã o usando a pode ser usada para atender a solicitaçã o do cliente. Com
anotaçã o @EJB, conforme podemos verificar no exemplo da essa simples afirmaçã o podemos verificar que os beans sem
imagem abaixo. estado de sessão sã o muito mais rá pidos que os beans com
estado de sessão.

Singleton Session Beans


Um bean de sessã o Singleton é um componente que é
instanciado uma ú nica vez por aplicação e fornece um acesso
Acessando um bean sem estado de sessã o utilizando bastante facilitado ao estado compartilhado. Se o container
@EJB. for distribuído em mú ltiplas JVM, cada aplicaçã o terá uma
instâ ncia do Singleton para cada JVM. Um bean de sessã o
Este estilo de declaração de bean também é chamado de Singleton é explicitamente projetado para ser compartilhado
uma visualizaçã o sem interface, conforme verificamos e suportar concorrência.
anteriormente também. Este bean é acessível apenas Podemos definir um simples bean de sessão Singleton
localmente para os clientes empacotados no mesmo arquivo usando a anotaçã o @Singleton, conforme podemos verificar
de deploy. Se o bean precisa ser acessível remotamente, no exemplo da Listagem imagem abaixo.
devemos definir uma interface de negó cio separado com a
anotaçã o @Remote, conforme verificamos na imagem abaixo.
@Lock(LockType.WRITE) sã o utilizadas para especificar o
Exemplo de um bean de sessã o Singleton utilizando a tipo de bloqueio. Mas, por padrã o, um bloqueio Write é
anotaçã o @Singleton associado com cada método do bean.
O Container é responsá vel por quando inicializar uma Essas anotaçõ es podem ser especificadas na classe, um
instâ ncia de um bean de sessã o Singleton. Contudo, podemos método de negó cio da classe, ou ambos. Um valor especificado
opcionalmente marcar o bean para inicializar antes através da no método sobrescreve um valor especificado na classe. A
anotaçã o @Startup, conforme exemplificado na imagem concorrência gerenciada por bean requer que o
abaixo. desenvolvedor gerencie a concorrência utilizando primitivas
de sincronização da linguagem Java como “synchronized” e
“volatile”.
Eventos do Ciclo de Vida
Métodos interceptadores do ciclo de vida podem ser
definidos tanto para beans de sessã o quanto para beans de
mensagens.
As anotaçõ es @AroundConstruct, @PostConstruct,
@PreDestroy, @PostActivate, e @PrePassivate sã o utilizados
para definir métodos interceptadores para eventos do ciclo
de vida dos beans.
Exemplo de como inicializar um Singleton antes da
A anotação @AroundConstruct pode ser definida apenas
aplicaçã o estar disponível.
numa classe interceptadora, enquanto que todas as outras
anotaçõ es podem ser definidos em uma classe
O Container agora inicializará todos esses Singletons em interceptadora e/ou diretamente numa classe bean.
tempo de inicialização, executando o có digo que estiver
Nas pró ximas seçõ es veremos melhor cada uma dessas
anotado com @PostConstruct, antes da aplicaçã o tornar-se
anotaçõ es.
disponível e antes que qualquer solicitaçã o do cliente seja
atendida.
Interceptador @AroundConstruct
Podemos especificar uma inicializaçã o explicita de beans
A anotação @AroundConstruct designa um método
de sessã o Singleton usando @DependsOn. O exemplo da
interceptor que recebe uma chamada de retorno quando o
imagem abaixo ilustra melhor como podemos utilizar essa
construtor da classe de destino é invocado.
funcionalidade:
Este método interceptor pode ser definido apenas em
classes de interceptoras e/ou superclasses de classes de
interceptores e nã o pode ser definido na classe alvo.
Um interceptador pode ser definido como o da figura
abaixo.

Definindo um AroundConstructor.
Exemplo de como utilizar a anotação @DependsOn para
criar dependências entre os beans. Um interceptador vinculado (Interceptor binding) pode
ser definido como a imagem abaixo.
O container assegura que o bean DesligaAlarme é
inicializado antes do bean AbrePortaoGaragem.
Um bean Singleton suporta os métodos de callback do ciclo
de vida "PostConstruct" e "PreDestroy". Além disso, o
Singleton também suporta acesso concorrente.
Por padrã o, um bean Singleton é marcado para ter
concorrência gerenciada pelo container, mas opcionalmente
pode ser marcado para ter concorrência gerenciada por bean.
Concorrência gerenciada por Container é baseada em
metadados com bloqueio a nível de método onde cada método Exemplo de como definir um interceptor vinculado.
é associado com um bloqueio do tipo Read (compartilhado) ou
Write (exclusivo). E finalmente, o interceptador pode ser especificado no
Um bloqueio de leitura (Read) permite chamadas bean como a imagem abaixo.
simultâ neas do método. Um bloqueio de leitura (Write)
aguarda o processamento de uma invocaçã o completar antes
de permitir que a pró xima invocaçã o prossiga.
As anotaçõ es @Lock(LockType.READ) e
Definindo um interceptor no bean.

O método validateConstructor é chamado toda vez que o


construtor do bean MeuBean é chamado.
Interceptador @PostConstruct
A anotação @PostConstruct é utilizada em um método que Anotando um método do bean com @PreDestroy.
precisa ser executado apó s a injeçã o de dependência ser
realizada. Assim podemos executar qualquer inicialização, Neste có digo, o método liberaRecursos() é chamado antes
visto que utilizando o PostConstruct temos certeza que o que a instâ ncia seja removida pelo container.
método será executado antes da primeira invocaçã o do Este método interceptador é utilizado em diferentes tipos
método de negó cio na instâ ncia do bean. de beans de sessã o e ocorre nos seguintes contextos de
O método anotado com PostConstruct é invocado mesmo transaçã o:
se a classe não solicitar quaisquer recursos a serem injetados. Para um bean sem estado de sessão, ele executa em um
Apenas um método pode ser anotado com @PostConstruct. contexto de transaçã o não especificado.
Segue na Listagem 20 um exemplo. Para um bean com estado de sessã o, ele executa em um
contexto de transaçã o determinado pelo atributo de
transaçã o do método de retorno de chamada.
Para um bean Singleton, ele executa em um contexto de
transaçã o determinado pelo tipo de gerenciamento de
transaçã o do bean e qualquer atributo de transaçã o
aplicá vel.

Interceptador @PrePassivate
A anotaçã o @PrePassivate pode ser usada apenas em um
bean com estado de sessã o. Esta anotaçã o designa um
método para receber uma chamada de retorno antes de um
bean com estado de sessã o ser passivado. Segue na imagem
abaixo um exemplo.
Anotando um método do bean com @PostConstruct.

Neste có digo o construtor default do bean é chamado


primeiro e apó s isso o método configuraRecursos() é chamado
antes que qualquer método de negó cio possa ser chamado.
Este método interceptador do ciclo de vida serve para
diferentes tipos de beans de sessã o e ocorre nos seguintes
contextos de transaçã o:
Para um bean sem estado de sessã o, ele executa em um
contexto de transaçã o nã o especificado.
Para um bean com estado de sessã o, ele executa em um Anotando um método do bean com @PrePassivate.
contexto de transaçã o determinado pelo atributo de transação
do método de retorno de chamada. Esses métodos sã o ignorados por beans sem estado de
Para um bean Singleton, ele executa em um contexto de sessão ou Singleton.
transaçã o determinado pelo tipo de gerenciamento de Este método interceptador executa em um contexto de
transaçã o do bean e qualquer atributo de transação aplicá vel. transaçã o determinado pelo atributo de transação do
método de retorno de chamada.
Interceptador @PreDestroy
A anotaçã o @PreDestroy é utilizada como uma forma de Interceptador @PostActivate
notificaçã o para sinalizar que a instâ ncia está no processo de A anotação @PostActivate pode apenas ser usada em um
ser removida do container. O método anotado com bean com estado de sessã o. Esta anotaçã o designa um
“PreDestroy” é normalmente utilizado para liberar recursos método para receber um retorno de chamada apó s um bean
que tem sido utilizados na aplicaçã o. Segue na imagem abaixo com estado de sessã o ser ativado. Segue na imagem abaixo
um exemplo de como utilizá -la. um exemplo.
Apesar de um Message-Driven Bean nã o poder ser
invocado diretamente por um bean de sessã o, ele ainda pode
Anotando um método do bean com @PostActivate. invocar outros beans de sessã o. Um Message-Driven Bean
também pode enviar mensagens JMS.
Esses métodos são ignorados por beans sem estado de A anotaçã o @MessageDriven também pode ter atributos
sessã o e Singleton. adicionais para configurar o bean. Por exemplo, a propriedade
Este método interceptador executa em um contexto de “activationConfig” pode ter um array de
transaçã o determinado pelo atributo de transação do ActivationConfigProperty que fornece informaçõ es para o
método de retorno de chamada do ciclo de vida. publicador sobre as configuraçõ es do bean neste ambiente
Métodos interceptadores do ciclo de vida podem lançar operacional.
exceçõ es em tempo de execução, mas nã o exceçõ es de A Tabela abaixo define o conjunto padrão de propriedades
aplicaçã o. de configuraçã o que sã o suportados pelo @MessageDriven.

Message-Driven Beans Nome da Propriedade Descrição


Um Message-Driven Bean (MDB) é um bean gerenciado acknowledgeMode Especifica o modo de
por container que é usado para processar mensagens de confirmaçã o do JMS para a
forma assíncrona. Um MDB pode implementar qualquer tipo mensagem entregue quando
de mensagem, mas é mais comum usá -lo para processar a demarcaçã o de transaçã o
mensagens Java Message Service (JMS). Esses beans são do bean gerenciado é usada.
caracterizados por serem sem estado de sessã o e sã o
invocados pelo container quando uma mensagem JMS chega 7
Fonte: http://www.devmedia.com.br/introducao-a-jpa-java-
ao destino. persistenceapi/28173
Um bean de sessã o pode receber uma mensagem JMS de Os valores suportados são
forma síncrona, mas um Message-Driven Bean pode receber Auto_acknowledge (default)
uma mensagem de forma assíncrona. ou Dups_ok_acknowledge.
Podemos converter um POJO para um Message-Driven
messageSelector Especifica o seletor de
Bean usando a anotaçã o @MessageDriven. Segue na imagem
mensagem JMS para ser
abaixo um exemplo.
usado na determinaçã o de
quais mensagens um MDB
recebe.
destinationType Especifica se o MDB é
para ser usado com um
Queue ou Topic. Os valores
suportados sã o
javax.jms.Queue ou
javax.jms.Topic.
subscriptionDurability Se MDB é usado com um
Topic, especifica se uma
inscriçã o durá vel ou nã o
durá vel é utilizada. Os
valores suportados sã o
Criando um MDB utilizando a anotaçã o @MessageDriven. Durable ou NonDurable.

Neste có digo, @MessageDriven define o bean como sendo Propriedades suportadas pelo @MessageDriven.
um Message-Driven Bean. O atributo mappedName especifica
o nome do JNDI do JMS de destino para o qual o bean Um Message-Driven Bean é capaz de processar mensagens
consumirá a mensagem. O bean deve implementar a interface de mú ltiplos clientes simultaneamente.
MessageListener, na qual fornece apenas um método, Assim como beans sem estado de sessã o, o container
"onMessage". Este método é chamado pelo Container sempre pode fazer um pool de instâ ncias e alocar instâ ncias de bean
que a mensagem é recebida pelo Message-Driven Bean. Este suficiente para lidar com o nú mero de mensagens em um
método conterá a ló gica de negó cio específica de aplicaçã o. determinado momento. Todas as instâ ncias do bean são
O có digo a imagem abaixo mostra como uma mensagem de tratadas igualmente.
texto é recebida pelo método onMessage e como o corpo da Como uma mensagem é entregue para um Message-
mensagem pode ser recuperada e exibida. Driven Bean dentro de um contexto transacional, todas as
operaçõ es do método "onMessage" fazem parte de uma ú nica
transaçã o. O contexto de transação é propagado para os
outros métodos invocados dentro do onMessage.
O MessageDrivenContext pode ser injetado em um
Message-Driven Bean. Esta funcionalidade fornece acesso ao
contexto do Message-Driven Bean em tempo de execuçã o
que está associado com a sua instâ ncia. Segue na imagem
abaixo um exemplo de como fazer uma reversã o (rollback)
na transaçã o usando o MessageDrivenContext.

Recebendo e recuperando uma mensagem de texto.


Persistence Query Language (JPQL), a API Criteria para
criaçã o de consultas dinâ micas, entre outras características.

Entre as principais inclusõ es na JPA destacam-se:


- POJOS Persistentes: Talvez o aspecto mais
importante da JPA seja o fato que os objetos sã o POJOs (Plain
Old Java Object ou Velho e Simples Objeto Java), significando
que os objetos possuem design simples que nã o dependem da
herança de interfaces ou classes de frameworks externos.
Qualquer objeto com um construtor default pode ser feito
Revertendo uma transação com MessageDrivenContext. persistente sem nenhuma alteraçã o numa linha de có digo.
Mapeamento Objeto-Relacional com JPA é inteiramente
Java Persistence API (JPA 2.x) dirigido a metadados. Isto pode ser feito através de anotaçõ es
7 no có digo ou através de um XML definido externamente.
JPA é um framework leve, baseado em POJOS (Plain Old - Consultas em Objetos: As consultas podem ser
Java Objects) para persistir objetos Java. A Java Persistence realizadas através da Java Persistence Query Language (JPQL),
API, diferente do que muitos imaginam, nã o é apenas um uma linguagem de consulta que é derivada do EJB QL e
framework para Mapeamento Objeto-Relacional (ORM - transformada depois para SQL. As consultas usam um
Object-Relational Mapping), ela também oferece diversas esquema abstraído que é baseado no modelo de entidade
funcionalidades essenciais em qualquer aplicação como oposto à s colunas na qual a entidade é armazenada.
corporativa. - Configurações simples: Existe um grande nú mero
Atualmente temos que praticamente todas as aplicaçõ es de características de persistência que a especificaçã o oferece,
de grande porte utilizam JPA para persistir objetos Java. JPA todas sã o configurá veis através de anotaçõ es, XML ou uma
provê diversas funcionalidades para os programadores, combinaçã o das duas. Anotaçõ es sã o simples de usar,
como será mais detalhadamente visto nas pró ximas seçõ es. convenientes para escrever e fá cil de ler. Além disso, JPA
Inicialmente será visto a histó ria por trá s da JPA, a qual
passou por algumas versõ es até chegar na sua versã o atual. 8
Fonte: http://www.infoq.com/br/news/2013/07/novidade-jax-rs-2.0
oferece diversos valores defaults, portanto para já sair usando
História da Especificação JPA é simples, bastando algumas anotaçõ es.
Apó s diversos anos de reclamaçõ es sobre a complexidade - Integração e Teste: Atualmente as aplicaçõ es
na construção de aplicaçõ es com Java, a especificaçã o Java EE normalmente rodam num Servidor de aplicaçã o, sendo um
5 teve como principal objetivo a facilidade para desenvolver padrã o do mercado hoje. Testes em servidores de aplicaçã o
aplicaçõ es JEE 5. O EJB 3 foi o grande percursor para essa sã o um grande desafio e normalmente impraticá veis. Efetuar
mudança fazendo os Enterprise JavaBeans mais fá ceis e mais teste de unidade e teste caixa branca em servidores de
produtivos de usar. aplicaçã o nã o é uma tarefa tã o trivial. Porém, isto é resolvido
No caso dos Session Beans e Message-Driven Beans, a com uma API que trabalha fora do servidor de aplicaçã o. Isto
soluçã o para questõ es de usabilidade foram alcançadas permite que a JPA possa ser utilizada sem a existência de um
simplesmente removendo alguns dos mais onerosos servidor de aplicaçã o. Dessa forma, testes unitá rios podem
requisitos de implementaçã o e permitindo que os ser executados mais facilmente.
componentes sejam como Plain Java Objects ou POJOS.
Já os Entity Beans eram um problema muito mais sério. A JAX-RS (2.x)
soluçã o foi começar do zero. Deixou-se os Entity Beans 8
sozinhos e introduziu-se um novo modelo de persistência. A Quando foi lançado em 2008 pelo JSR-311, o JAX-RS 1.0
versã o atual da JPA nasceu através das necessidades dos se tornou um dos primeiros frameworks Java baseados em
profissionais da á rea e das soluçõ es proprietá rias que já classes POJO e anotaçõ es, para criaçã o de aplicaçõ es web
existiam para resolver os problemas com persistência. Com a robustas.
ajuda dos desenvolvedores e de profissionais experientes que Agora, cinco anos depois da primeira versã o, o JAX-RS 2.0
criaram outras ferramentas de persistência, chegou a uma é lançado no Java EE 7. A nova versã o é baseada na JSR-339.
versã o muito melhor que é a que os desenvolvedores Java Apresentaremos aqui algumas das novas funcionalidades
conhecem atualmente. que fazem com que a mudança para a versão 2.0 valha a
Dessa forma os líderes das soluçõ es de mapeamento pena. Mas antes disso, relembramos um pouco a JAX-RS 1.0,
objetos-relacionais deram um passo adiante e padronizaram através de um exemplo:
também os seus produtos. Hibernate e TopLink foram os
primeiros a firmar com os fornecedores EJB.
O resultado final da especificação EJB finalizou com três
documentos separados, sendo que o terceiro era o Java
Persistence API. Essa especificaçã o descrevia o modelo de
persistência em ambos os ambientes Java SE e Java EE.

JPA 2.0
No momento em que a primeira versã o do JPA foi iniciada,
outros modelos de persistência ORM já haviam evoluído.
Mesmo assim muitas características foram adicionadas nesta
versã o e outras foram deixadas para uma pró xima versã o.
A versã o JPA 2.0 incluiu um grande nú mero de
características que nã o estavam na primeira versã o,
especialmente as mais requisitadas pelos usuá rios, entre elas
a capacidade adicional de mapeamento, expansõ es para a Java
No exemplo a seguir é realizada uma chamada POST fictícia
para venda de 100 açõ es da IBM:

Chamadas assíncronas
No JAX-RS 1.0 o cliente tinha que esperar o servidor
responder suas chamadas, pois a API suportava apenas
requisiçõ es síncronas. A versã o 2.0 introduz o suporte
assíncrono. Isso permite que um cliente faça uma chamada
RESTfull e, opcionalmente, obtenha uma referência de Future
ou um InvocationCallback, para ser notificada quando a
resposta estiver completa.
Nessa listagem, a linha 1 mapeia um recurso (portfó lios)
para o caminho relativo /portfolios. Na linha 4 é especificado
que uma requisição GET deve retornar todos os portfó lios HATEOAS (Hipermídia)
existentes. As linhas 9 e 10 indicam que, em uma requisiçã o De acordo com a ortodoxia do REST, se a aplicaçã o nã o
GET a uma URI como /portfolios/123, o valor que sucede a estiver usando HATEOAS, entã o ela nã o é REST! O HATEOAS
URI do recurso deve ser extraído como um parâ metro (no (Hypermedia as the Engine of Application State, ou
caso, 123) e atribuído à variá vel "id", para que o portfó lio Hipermídia como Motor de Estado da Aplicaçã o) requer que
associado a esse identificador seja entã o retornado pelo os produtores e consumidores RESTful concordem com um
serviço. conjunto de links a serem retornados em cada chamada e
A sintaxe usada no exemplo permanece idêntica no JAX-RS usados pelo cliente para navegaçã o. Se o REST for pensado
2.0. como a versã o "aplicaçã o" de uma pá gina web, entã o o
HATEOAS pode ser visto como os links contidos dentro dessa
De forma consistente com o tema principal do Java EE 7,
pá gina web.
o JAX-RS 2.0 adiciona algumas funcionalidades há muito
aguardadas, a maioria delas focada no que a Oracle chama de O JAX-RS 2.0 fornece as classes Link e Target para
"API simplificada". Essas novas funcionalidades podem ser introduzir hiperlinks dentro da resposta fornecida pelo
categorizadas como: servidor e reagir a elas no lado cliente.
- API cliente
- Suporte a chamadas assíncronas Anotações
- HATEOAS (hipermídia) Novas anotaçõ es foram introduzidas, como para fornecer
- Anotaçõ es suporte de novos tipos de injeção.
- Validaçã o
- Filtros e manipuladores Bean Validation
- Negociaçã o de conteú do O framework Bean Validation está integrado ao novo
JAXRS, agindo como facilitador para especificar metadados de
validaçã o de parâ metros. Por exemplo, a anotação @NotNull
Falaremos a seguir um pouco sobre cada uma dessas
indica que o parâ metro anotado nã o pode ser nulo. É possível
categorias:
também utilizar anotaçõ es customizadas para garantir
API Cliente
formatos de dados (CEP, telefone, etc).
A API do JAX-RS 1.0 era voltada estritamente para o lado
servidor. Algumas implementaçõ es forneceram vá rios graus
Filtros e Manipuladores (handlers)
de suporte para clientes, mas geralmente o desenvolvedor
teve que escolher entre algumas soluçõ es ad hoc, como o A API de filtros fornece a habilidade de encadear filtros
HttpClient do projeto Jakarta Commons da Apache, ou o REST de Servlets, de acordo ao padrã o Chain of Responsibility. Isso
Client da WizTools. é ú til para implementar funcionalidades ortogonais, como o
clássico exemplo de logging. Qualquer filtro pode decidir se
O JAX-RS 2.0 adiciona construtores ("builders") para
deve continuar ou terminar a cadeia ao invocar
invocar um web service REST a partir do cliente. Veja um
exemplo: FilterAction.NEXT ou FilterAction.STOP, respectivamente.
Os handlers (manipuladores) sã o similares aos filtros,
exceto pela capacidade de "embrulhar" (wrap) uma
invocaçã o de método em um ponto de extensã o especificado,
para manipular e enriquecer os dados do corpo da
mensagem.

Negociação de conteúdo
Anotaçõ es mais ricas agora aceitam construçõ es que
Note que esse método primeiramente obtém um cliente e
permitem priorizar os formatos de request/response.
entã o utiliza o pattern Builder para construir todos os
O JAX-RS ainda carece de um bom modelo de segurança, o
parâ metros da URL, permitindo que o desenvolvedor formule
que o torna difícil utilizar em aplicaçõ es empresariais, que sã o
a URL sem lidar com as particularidades de construçã o de
expostas a clientes externos. Esperamos que a pró xima versã o
URL. forneça suporte para autenticaçã o ponto-a-ponto.
Essa abordagem é especialmente ú til para invocaçõ es que O JAX-RS 2.0 ainda estã o em vias de ser suportado pelos
contenham um corpo HTTP, como em um POST ou PUT HTTP. principais servidores Java EE. Enquanto isso nã o acontece, é
possível aproveitá -lo imediatamente em sua aplicação,
utilizando a ú ltima versã o do Jersey. A Oracle publicou os feita nele. Por isso faremos nossa configuraçã o no XML. O
passos para fazer isso no WebLogic 12c. arquivo XML que o Hibernate procurará será o
hibernate.cfg.xml e ele deve estar no classpath.
Hibernate Para nosso caso, vamos seguir a convençã o e criar o
O Hibernate é um framework ORM - Object Relational arquivo hibernate.cfg.xml na pasta src, dentro do nosso
Mapping. É uma ferramenta que nos ajuda a persistir objetos projeto. O conteú do do arquivo será esse:
Java em um banco de dados relacional. O trabalho do
desenvolvedor é definir como os objetos sã o mapeados nas
tabelas do banco e o Hibernate faz todo o acesso ao banco,
gerando inclusive os comandos SQL necessá rios.
O Hibernate é um projeto opensource do grupo JBoss
com muitos anos de histó ria e liderança no mercado Java.
Recentemente, boa parte das idéias do Hibernate e outros
frameworks ORM foram padronizadas em uma especifiçã o
oficial do Java, a JPA - Java Persistence API. A JPA é uma
especificaçã o do JCP e possui vá rias implementaçõ es (o
Hibernate, o Oracle Toplink, EclipseLink, OpenJPA etc).

Preparando o Hibernate5
Para preparar o Hibernate, será necessá rio baixar dois
ZIPs do site do Hibernate. Cada ZIP representa um projeto
diferente.
O primeiro será o Hibernate Core, que se chama
hibernatedistribution-XXX.zip. O segundo ZIP será do projeto
Hibernate Annotations, já que queremos configurar nosso
projeto com as anotaçõ es da JPA. Esse ZIP chama-se
hibernate-annotationsXXX.zip. Faça os downloads As configuraçõ es que passamos nesse arquivo sã o
diretamente em: parecidas quando queremos nos conectar a um banco de
dados. Para conectar em um banco de dados, precisamos
http://www.hibernate.org informar qual é o usuá rio, a senha, algumas informaçõ es do
banco, como host, porta, etc.
Depois de fazer o download desses dois zips, basta Um detalhe importante da nossa configuraçã o é o banco de
descompactá -los e utilizar os JAR's que estã o dentro de cada dados que foi passado. Na configuraçã o
projeto. No exercício abaixo veremos quais JARs vamos hibernate.connection.url foi passado o nome do database que
precisar. A partir do Hibernate 3.5, esses jars todos vem utilizaremos. Para esse caso escolhemos o database fj28.
numa ú nica distribuiçã o, a core. Abaixo segue a descriçã o de todas as configuraçõ es que
usamos:
Configurando o mecanismo de logging - hibernate.connection.username - usuá rio do banco
O Hibernate utiliza o SL4J - Simple Logging Facade for de dados
Java - para o mecanismo de logging. Ele serve apenas como - hibernate.connection.password - senha do usuá rio
uma fachada para vá rios frameworks de logging, por - hibernate.connection.url - chamada de URL ou string
exemplo o Log4J e o java.util.logging. de conexã o, deve ser configurada de acordo com
No nosso projeto utilizaremos o Log4J, entã o precisamos documentaçã o do banco de dados
baixar mais dois zips. O primeiro é o Log4J, do grupo Apache. - hibernate.connection.driver_class - driver que deve
O segundo é o pró prio SL4J, que contêm o jar que faz o ser utilizado
binding do SL4J com o Log4J. - hibernate.hbm2ddl.auto - como o hibernate vai se
Configurando o driver do MySQL comportar em relaçã o à s tabelas do banco. Com o valor update
Apesar de toda facilidade que o Hibernate nos trará , por ele vai criar ou modificar tabelas sempre que necessá rio.
baixo dos panos ele faz chamadas ao JDBC. Portanto, para que - hibernate.dialect - dialeto a ser utilizado para a
nossa aplicaçã o se conecte no banco de dados, precisamos do comunicaçã o com o banco de dados
driver do MySQL no classpath. O driver é a implementaçã o - show_sql - flag que indica se os SQLs gerados devem
JDBC que será utilizada. Cada banco de dados possui a sua ser impressos
implementaçã o, e ela deve ser baixada do site do pró prio - format_sql - flag que indica se os SQLs devem ser
banco de dados. Faça o download do mysql jdbc driver. formatados

Configurando o Hibernate Existem muitas outras configuraçõ es possíveis. Para


Para configurar o Hibernate, podemos utilizar ou um maiores detalhes, acesse a documentaçã o do Hibernate.
arquivo .properties ou um arquivo XML.
O arquivo de properties é mais simples, mais fá cil de se Spring Framework (4.x) e Spring Security.6
criar, mas uma das desvantagens é que ele nã o consegue O Spring é uma tecnologia que surgiu para resolver o
configurar tudo que queremos, por exemplo as entidades. As problema da complexidade encontrada nos Enterprise Java
entidades têm que ser configuradas no có digo, e as outras Beans (EJBs), sendo um framework que implementa os
informaçõ es no arquivo de properties. padrõ es de Inversã o de Controle e Injeçã o de Dependência,
Já o XML, por mais que seja um pouco mais difícil em juntamente os Patterns de Setter Injection e Constructor
relaçã o ao properties, permite que toda a configuraçã o seja Injection, além de prover técnicas de boa programaçã o
fornecendo um modelo unificado e simples de programaçã o,
5 Fonte/; http://www.caelum.com.br/apostila-vraptor-hibernate/persistindo- 6 Fonte: http://www.matera.com/br/2015/04/08/trabalhando-com-jse-
osdados-com-o-hibernate/#4-3-preparando-o-hibernate espring-framework/
isto o tornou um sucesso em meio à comunidade de “commonslogging-1.1.1.jar” para nosso projeto, ver figura a
programadores, sucesso este, foi tã o grande que na versão seguir.
mais nova do JEE, diversas melhorias foram criadas baseadas
no Spring Framework. X-X trata-se da versão do framework que foi baixada.
O Spring Framework implementa dois padrõ es de grande
sucesso na comunidade de programadores que são de
Inversã o de Controle e Injeçã o de Dependência, provendo
sempre das boas técnicas de programaçã o, sendo estas,
baixo acoplamento e alta coesão. Com sua arquitetura
baseada em Plain Old Java Object (POJOs), o principal
objetivo do Spring Framework é tornar as tecnologias
existentes atualmente no mercado fá ceis de serem utilizadas.
Como visto, devido ao sucesso do Spring, hoje é possível
ter aplicaçõ es JEE com arquiteturas bastante simplificadas,
uma vez que a partir da mudança do J2EE para o JEE a
complexidade em se criar aplicaçõ es Java Web foi muito
reduzida fazendo com que muitas empresas que tinham suas
aplicaçõ es baseadas na plataforma J2SE migrassem para o
JEE. Essa mudança fez o mercado de software ser o que é
hoje, onde encontramos aplicaçõ es cada vez mais inovadoras
e altamente conectadas. Monstrando JAR’s do prejeto
O Spring foi criado com o intuito simplificar a Com posse da biblioteca do framework, agora vamos
programaçã o em Java, possibilitando construir aplicaçõ es criar uma pasta chamada “spring” dentro do diretó rio WEB-
que antes só era possível utilizando EJB’s. INF, e dentro da pasta criaremos um arquivo xml chamado
O Spring atualmente possui diversos mó dulos como “application-context.xml”, lembrando que o Spring é um
Spring Data (trata da persistência), Spring Security (trata da framework “container-based”, ou seja, ele vai conter e
segurança da aplicaçã o) entre outros mó dulos. Mas o carregar o que você informá -lo. A raiz do nosso xml é tag
principal (core) pode ser utilizado em qualquer aplicaçã o <beans></beans> e dentro conterá toda a configuraçã o do
Java, as principais funcionalidades sã o a injeçã o de Spring
dependência (CDI) e a programaçã o orientada a aspectos Observaçã o: nã o é obrigató ria a configuraçã o do Spring
(AOP), cabe ao desenvolvedor dizer ao Spring o que quer em apenas um “.xml”, é possível separar vá rios arquivos de
usar. O que faz dele uma poderosa ferramenta, pois nã o configuraçã o, exemplo: persistence-context.xml
existe a necessidade de se arrastar todas as ferramentas do mvccontext.xml etc... , porém nesse artigo isso nã o será
framework para criar uma aplicaçã o simples. abordado.
Arquivo de configuraçã o bem simples nã o? Claro, é uma
Configurando o Spring7 aplicaçã o simples, e a medida que sua aplicaçã o cresce, basta
Para esse artigo vamos utilizar o Eclipse e o Tomcat 7, ir acrescentando mó dulos de acordo com sua necessidade,
certifique-se de tê-los instalados antes de continuar. evitando assim um consumo gigantesco de memó ria com
Primeiramente criaremos um “Dynamic Web Project” com coisas que você nunca vai utilizar na sua aplicaçã o.
o nome de “hello-spring”, como mostra a figura a seguir. Agora vamos dizer a nossa aplicaçã o Web para carregar o
Spring, mas como? O bom e velho arquivo “web.xml”, será
necessá ria apenas a configuraçã o do Servlet do Spring, nada
sobrenatural.
Criando o projeto
Exibindo uma pagina
Agora vem a parte mais “complicada”, configura o Spring, a Entã o é só isso? Podemos rodar a aplicação? Calma, ainda
princípio algo bastante complexo para aqueles que ainda nã o nã o existe nenhuma pá gina, entã o criaremos uma dentro da
possuem muita pratica, lembrando que todo framework é um pasta “WEB-INF/view” com o nome de "helloworld.jsp”. Veja
bicho de sete cabeças a primeira vista. que é o mesmo nome o qual configuramos como pá gina
Para o Spring funcionar, vamos precisar de suas libs, inicial no “application-context.xml”.
acessando os links abaixo, vamos encontrar tudo o que
precisamos.

http://www.springsource.org/spring-framework Definindo a pá gina inicial


http://commons.apache.org/logging/download_logging.c
gi Nossa pá gina ficará assim.

No canto direito da tela teremos as ú ltimas versõ es


lançadas, usaremos a mais atual. Apó s baixar o zip do
framework, vamos descomprimi-lo, e acessar a pasta libs do
framework, nã o se assuste, nã o usaremos todos esses jar’s ,
vamos copiar “spring-webmvc-X-X.jar” , “spring-web- X-X.jar”,
“spring-expression-X-X.jar”, “spring-core- X-X.jar”,
“springcontext- X-X.jar”, “spring-beans- X-X.jar” e colar na
pasta “WEB-INF/lib”. Também é necessá ria a biblioteca

Pá gina helloword.jsp
7 Fonte: http://www.devmedia.com.br/introducao-ao-spring-framework/26212
Agora sim, você já pode rodar o projeto no tomcat, veja o
resultado na figura abaixo. Mapeamento do diretó rio das views

Agora que temos o @Controller que vai tratar uma


requisiçã o, precisamos também da pá gina que vai ser exibida,
no caso a “bemvindo.jsp”. Criaremos ela dentro de
“WEBINF/views”, e nessa pá gina exibiremos o atributo
passado pelo nosso @Controller, veja o có digo da JSP.

Controllers

Exibir uma pá gina é muito simples, mas qual a diferença


do Spring? Vamos falar sobre o controle de navegaçã o da
aplicaçã o. O Spring utiliza os chamados Controllers, que sã o
classes mapeadas através de annotations que servem para
dizer à aplicaçã o o que exibir quando for requisitada uma
pá gina, ou envio de informaçõ es, uma espécie de Servlet do
12
JSP, mas bem mais fá cil de se trabalhar.
http://www.telecom.uff.br/pet/petws/downloads/tutoriais/python/tut_python_
Vamos a um exemplo, criaremos uma classe chamada 2k100127.pdf
“HelloController” no pacote “br.com.devmedia.controllers”,
se o pacote nã o existir, crie-o. Vamos anotar essa classe com
o @Controller, que diz ao Spring que essa classe vai Có digo da pá gina jsp
funcionar como uma espécie de Servlet para a aplicaçã o, ou
seja, vai receber requisiçõ es tratá -las e responder ao usuá rio. Rode novamente a aplicaçã o e veja o resultado, como na
figura abaixo.

Anotaçã o @Controller

Espera ai, mas como minha aplicaçã o vai saber qual Apresentando pagina com atributo do @Controller
requisição deve ser tratada pelo meu @Controller? Simples,
através da anotaçã o @RequestMapping, ela vai verificar qual
PYTHON12.
url está sendo solicitada e enviar para o @Controller que
Python é uma linguagem de programaçã o poderosa e de
contém a anotação com a url específica, veja.
fá cil aprendizado. Possui estruturas de dados de alto nível
eficientes, bem como adota uma abordagem simples e efetiva
para a programação orientada a objetos. Sua sintaxe elegante
e tipagem dinâ mica, além de sua natureza interpretada,
tornam Python ideal para scripting e para o
desenvolvimento rá pido de aplicaçõ es em diversas á reas e
na maioria das plataformas.
O interpretador Python e sua extensa biblioteca padrã o
estã o disponíveis na forma de có digo fonte ou biná rio para a
maioria das plataformas a partir do site,
Método bemVindo http://www.python.org/, e podem ser distribuídos
livremente. No mesmo sítio estã o disponíveis distribuiçõ es e
Explicando o có digo, o @RequestMapping diz que quando referências para diversos mó dulos, programas, ferramentas
for requisitada a url /bemvindo, será executado o método e documentaçã o adicional, contribuídos por terceiros.
“bemVindo()” da classe “HelloController”. Mas o que é esse O interpretador Python é facilmente extensível
“Model” e de onde ele vem? Por que ele está ali? O Model nã o é incorporando novas funçõ es e tipos de dados
um parâ metro obrigató rio, e com um pouco mais de implementados em C ou C++ (ou qualquer outra linguagem
experiência verá que muita coisa nã o é. O “Model” vai servir acessível a partir de C). Python também se adequa como
para adicionar atributos para serem usados na tela, nã o se linguagem de extensã o para customizar aplicaçõ es.
preocupe com detalhes, o Spring vai fazer isso por você. Python é uma linguagem de programaçã o interpretada,
Devem ter notado também o “ModelAndView” que está sendo de có digo-fonte aberto e disponível para vá rios sistemas
retornado, ele na verdade vai dizer ao Spring que pá gina ele operacionais. Ser uma linguagem interpretada significa dizer
vai exibir, no caso a “bemvindo.jsp”, mas poderia ser qualquer que ao se escrever um programa, este nã o será compilado
pá gina que você tiver dentro da pasta “WEB-INF/views” que é (traduzido para uma linguagem de má quina), mas sim “lido”
o diretó rio que foi mapeado para conter nossas “views”. por um outro programa (chamado de interpretador) que
traduzirá para a má quina o que seu programa quer dizer. O
interpretador para Python é interativo, ou seja, é possível
executá -lo sem fornecer um script (programa) para ele. Ao Python é extremamente legível. Isso significa que é muito
invés disso, o interpretador disponibilizará uma interface fá cil compreender programas escritos há algum tempo. É
interativa onde é possível inserir os comandos desejados um muito comum que os programas em atividades científicas
por um e ver o efeito de cada um deles. sejam criados a partir da evoluçã o de algoritmos anteriores.
Os objetivos do projeto da linguagem eram: Portanto, é extremamente importante ser capaz de entender o
produtividade e legibilidade. Em outras palavras, Python é que foi feito antes. Uma vez que as palavras-chave da
uma linguagem que foi criada para produzir có digo bom e linguagem Python são voltadas para a estruturaçã o dos
fá cil de manter de maneira rá pida. Entre as características da programas (e nã o para indicar ao computador como compilar
linguagem que ressaltam esses objetivos estã o: ou interpretar trechos de có digo), nã o existem trechos de
- Baixo uso de caracteres especiais, o que torna a có digo que sã o inú teis para o raciocínio.
linguagem muito parecida com pseudo-có digo executá vel; Python tem uma comunidade ativa e vibrante, espalhada
- O uso de identaçã o para marcar blocos; por todo o mundo. E, sendo uma linguagem livre, todos os
- Quase nenhum uso de palavras-chave voltadas para a seus usuá rios estã o dispostos a contribuir. Isso faz com que a
compilação; documentaçã o seja abundante e existam mó dulos para
- Coletor de lixo para gerenciar automaticamente o executar virtualmente qualquer tarefa necessá ria. Isso é
uso da memó ria; importante: nã o há tempo para reinventar a roda, entã o poder
contar com mó dulos prontos é ó timo. Mas, mais que isso, uma
Além disso, Python suporta mú ltiplos paradigmas de vez que os programas em Python sã o distribuídos na forma de
programaçã o. A programaçã o procedimental pode ser usada có digo-fonte, qualquer pessoa pode alterar, corrigir e
para programas simples e rá pidos, mas estruturas de dados melhorar os algoritmos. Isso faz com que os mó dulos sejam
complexas, como tuplas, listas e dicioná rios, estã o disponíveis maduros e seguros, testados contra diversas situaçõ es e
para facilitar o desenvolvimento de algoritmos complexos. diversas vezes. A robustez alcançada é um fator importante.
Grandes projetos podem ser feitos usando técnicas de Python é, além disso, uma linguagem de propó sito geral.
orientaçã o a objetos, que é completamente suportada em Muitas vezes, é necessá rio lidar com tarefas laterais: buscar
Python (inclusive sobrecarga de operadores e herança dados em um banco de dados remoto, ler uma pá gina na
mú ltipla). Um suporte modesto para programação funcional internet, exibir graficamente os resultados, criar uma
existe, o que torna a linguagem extremamente expressiva: é planilha, etc. Linguagens de cunho especificamente científico
fá cil fazer muita coisa com poucas linhas de comando. E têm um sério problema aí, mas, uma vez que Python é
também possui inú meras capacidades de meta-programaçã o: utilizada em praticamente todo tipo de tarefa, encontram-se
técnicas simples para alterar o comportamento de mó dulos prontos para realizar essas tarefas que podem ser
comportamentos da linguagem, permitindo a criaçã o de tornar complicadas. Novamente, é uma preocupaçã o a
linguagens de domínio específico. menos para quem está desenvolvendo aplicaçõ es científicas.
Python tem uma biblioteca padrã o imensa, que contém Por esses e ainda outros motivos, Python tem
classes, métodos e funçõ es para realizar essencialmente conquistado uma grande popularidade entre a comunidade
qualquer tarefa, desde acesso a bancos de dados a interfaces científica. É uma linguagem simples que dá conta do recado e
grá ficas com o usuá rio. E, logicamente, já que esse é o objetivo nã o fica entre o cientista e a resolução do seu problema. Essa
deste grupo, existem muitas ferramentas para lidar com dados frase provavelmente resume todos os motivos necessá rios
científicos. Essa característica da linguagem é comumente para sua utilizaçã o.
chamado baterias inclusas, significando que tudo que você
precisa para rodar um programa está — na maior parte das Obtenção e instalação.
vezes — presente na instalaçã o bá sica. Caso o usuá rio esteja utilizando um sistema Linux ou OS
Por fim, e nã o menos importante, Python é uma linguagem X (Apple), o interpretador para Python já vem instalado por
livre e multiplataforma. Isso significa que os programas padrã o, sendo apenas necessá rio escrever o comando
escritos em uma plataforma serã o executados sem nenhum “python” 2 no seu programa de terminal favorito. Para
problema na maioria das plataformas existentes sem usuá rios do sistema operacional Windows, o interpretador
nenhuma modificaçã o. E, caso a plataforma objetivo nã o tenha para Python deve ser baixado através do site
uma versã o de Python, desenvolvedores têm a liberdade de http://www.python.org e instalado. Neste ú ltimo sistema o
estudar e modificar o có digo da linguagem para fazer com que usuá rio encontra um utilitá rio para fazer o papel de terminal
ela rode onde quer que seja. (e editor de python) no Windows, denominado IDLE.

Por que Python? Variá veis são formas de se armazenar dados para uso
posterior. Estas podem ser classificadas em 3 tipos bá sicos
É fá cil ver que a linguagem tem facilidades incríveis para (existem outros, que serã o abordados mais a frente):
uso geral. A pergunta é: por que Python é a linguagem ideal
para aplicaçõ es científicas? As respostas são muitas, mas - int - Um nú mero inteiro;
podemos resumir algumas aqui. A primeira razão, e - foat - Um ponto futuante; - string - Uma
provavelmente a principal, é: Python é uma linguagem sequência de caracteres.
expressiva, em que é fá cil traduzir o raciocínio em um
algoritmo. Em aplicaçõ es científicas, o raciocínio é Ao contrá rio da maioria das outras linguagens, em
essencialmente complicado — essa é a natureza das ciências. Python, nã o é necessá rio declarar as variá veis que serã o
É um problema adicional para o cientista ter que se preocupar usadas, tampouco definir seu tipo. A pró pria sintaxe do dado
com, além do assunto básico de sua pesquisa, a correçã o do a ser armazenado identifica o tipo da variá vel para
programa em detalhes pouco relevantes: alocação de armazená -lo. Por exemplo, caso desejasse atribuir o valor 3 à
memó ria, gerenciamento de recursos, etc. Python faz isso tudo variá vel A, basta digitar A=3. Python saberá que A é um
automaticamente de maneira muito eficiente, permitindo ao inteiro(tipo “int"). Por outro lado, se o valor a ser
cientista se concentrar exclusivamente no problema sendo armazenado fosse 3,2 que é um dado do tipo “ponto
estudado. flutuante”, este deveria ser expresso como A=3.2. Observe
que, para Python, A=3 e B=3.0 sã o variá veis de tipos
diferentes e isto deve ser levado em conta ao se realizar
certos tipos de manipulaçõ es de dados. Isso nos mostra que uma string segue uma determinada
indexaçã o onde cada caractere assume um endereço que, pode
Strings. ser acessado colocando o nome da variá vel, que contém a
string, e apó s, entre os colchetes, o endereço da célula que
String é um tipo de objeto formado por uma sequência contém o caractere desejado.
imutá vel de caracteres que nos permite trabalhar com textos. Existe também um recurso conhecido como operador %,
Exemplo: que serve para formatar as strings, basicamente são três os
tipos de formataçã o que temos:
>>> a = “Bom Dia”
>>> print a - %s - Serve para substituir string;
Bom Dia - %d - Serve para substituir nú meros inteiros em uma
frase destinada a um print;
Percebemos que elas sã o delimitadas por aspas, podemos - %f - Serve substituir floats (nú meros em aritmética
utilizar tanto aspas duplas como as simples. Se utilizarmos de ponto flutuante).
aspas duplas, como o mostrado no exemplo acima, podemos
usar as simples para aplicaçõ es dentro do texto que estamos
escrevendo, o contrá rio também é verdadeiro.
Exemplo:
Observaçã o:
>>> b = 'O lema do governo JK era:\n “Cinquenta anos em
cinco.” As três formataçõ es acima relacionadas sã o normalmente
>>> print b para aplicaçõ es em uma frase destinada a um print.
Exemplo:
O lema do governo JK era:
“Cinquenta anos em cinco.” >>> compra= 'maçã '
>>> tipo='verde'
No exemplo acima utilizamos um outro artifício para >>> quilos = 1,5
trabalharmos com strings, o \n. Este por sua vez, tem a funçã o >>> print 'Maria comprou %f quilos de %s %s .'
de pular uma linhae escrever o texto, que está depois do \n, %(quilos,compra,tipo)
nessa nova linha. Tanto isso é verdade que no mesmo
exemplo, quando usamos o comando print é mostrada a parte Maria comprou 1,5 quilos de maça verde.
do texto que diz: “Cinquenta anos em cinco.”, impresso na
linha seguinte. Observaçã o:
Outro artifício parecido com \n, é o \t que tem o objetivo
de acrescentar ao texto que vem apó s, um espaço de Com vimos acima o operador % pode ser utilizado para
tabulaçã o. formataçã o de nú meros também.
Há também outra aplicaçã o para as aspas, que consiste na Com ele é possível também determinar a quantidade de
delimitaçã o do texto por três aspas (duplas ou simples). nú meros, apó s a vírgula de um float.
Exemplo: Exemplo:

>>> a = “Quatro times do Rio de Janeiro: >>> num=245.47876749


Botafogo >>> print '%.2f' %(num)
Vasco
Fluminense 245.48
Flamengo”
>>> print a Percebemos que Python fez uma aproximaçã o do nú mero
real, possibilitando que o resultado de uma futura operaçã o
Quatro times do Rio de Janeiro: seja o mais preciso possível.
Botafogo
Vasco Operações matemáticas.
Fluminense Além de ser uma poderosa linguagem de programaçã o,
Flamengo Python sabe lidar bem com matemá tica. Suas capacidades
matemá ticas se extendem desde operaçõ es bá sicas até
Nessa aplicaçã o para as aspas, quando usamos o comando operaçõ es com nú meros complexos.
print, tudo o que estiver entre as três aspas será impresso Abaixo, vamos começar aprendendo as 4 operaçõ es
exatamente da mesma forma como foi escrito. matemá ticas bá sicas. Lembre-se que “>>>” significa a
digitaçã o de um comando no interpretador.
Manipulando Strings.

Pelo fato de uma string ser uma sequência imutá vel, isso Soma:
nos dá a possibilidade de manipularmos essa sequência,
consideremos o exemplo abaixo: >>>2+3
5
>>> a = 'matemà ¡tica'
>>> a[2]+a[-5]+a[-4:] Subtraçã o:
'tá tica'
>>>2-3 6- Utiliza uma linha em branco como definiçã o
-1 de blocos;
7- Fá cil entendimento quanto a projeçã o de:
Multiplicaçã o: construtores, loops, estruturas condicionais e arrays,
dentre outros recursos;
>>>2*3 8- Implementada em C e extensível as suas
6 bibliotecas.

Divisã o: JAVASCRIPT8

>>>2/3 É uma linguagem utilizada principalmente para auxílio de


0 desenvolvimento de pá ginas para a Internet.
JavaScript é a mesma coisa que Java?
Na divisã o, pode-se optar por resultados como nú meros Nã o, JavaScript é mais simples que Java. Aprender
inteiros (ou o inteiro mais pró ximo) ou resultado exato (um JavaScript é o melhor começo se você quer aprender Java, C,
ponto flutuante). Para isso, deve-se fornecer um inteiro C++, PHP, pois a sintaxe (forma de escrever a linguagem) é
(para se obter um inteiro como resultado) ou um ponto semelhante.
flutuante (para se obter o resultado exato). Divisã o: O que posso fazer com o JavaScript?
>>>2.0/3.0 Você pode tornar suas pá ginas mais "inteligentes", com
0.66666666666666663 recursos adicionais como: botõ es que mudam ao passar o
mouse em cima, exibir o horá rio atual, verificar se o
A operação aritmética de potenciaçã o também pode ser preenchimento de um formulá rio está correto, e muito mais! O
feita, assim como a sua inversa, a radiciaçã o. JavaScript pode lhe salvar nas horas em que você menos
Potenciaçã o: espera, pois as possibilidades de utilizaçã o sã o infinitas.

>>> 2**3 Código javascript


Nã o existe um comando específico para a radiciaçã o em Mostrar onde se digita o có digo JavaScript dentro de uma
Python (exceto para a raiz quadrada). Entretanto, para obter a pá gina HTML.
raiz n-ésima de um nú mero basta elevá -lo por 1/n onde “n” é O Có digo JavaScript fica Entre o <script> e o </script>.
o índice da raiz. As regras para a obtençã o de nú meros Ficaremos com a seguinte estrutura:
inteiros ou pontos flututante também se aplicam a este caso. <html>
Radiciação: <body>

>>>8**(1.0/3.0) <script>
2.0
8 alert("Minha primeira mensagem!")

Questã o: </script>

(TRE-CE - Técnico Judiciário - Programação de </body>


Sistemas – FCC). Sobre Python é correto afirmar: </html>
Eis nosso primeiro có digo. Vamos analisá -lo?
(A) É uma linguagem compilada, ou seja, o có digo-fonte Entendendo o có digo:
de um programa é lido pelo compilador, que cria um arquivo
biná rio, executá vel diretamente pelo hardware. alert("Minha primeira mensagem!")
(B) É uma linguagem fortemente tipada, ou seja, é Exibe uma janela com a frase Minha primeira mensagem!
preciso declarar variá veis e seus tipos. com apenas um botã o de OK. Teste você mesmo, crie um
(C) Suporta funcionalidades comuns na orientaçã o a arquivo com extensã o .htm e execute.
objetos: herança, herança mú ltipla, polimorfismo, reflexã o e
introspecçã o. Há mais três diferentes maneiras de colocar o có digo
(D) Uma lista em Python é um conjunto de valores JavaScript na pá gina, mas iremos utilizar o método acima em
acessados por um índice numérico, inteiro, começando em 1. nosso tutorial.
Assim como em outras linguagens, a lista pode armazenar
apenas valores de um mesmo tipo Exemplo básico, manipulação de variável
(E) Uma String Python á uma sequência imutá vel, Fazer aparecer na tela o resultado de um cá lculo.
alocada estaticamente, com restriçã o de tamanho.
<html>
Resposta: C. <body>

Quanto ao Phyton: <script>

1- Suporta manipulação de exceçõ es; a=2b


2 - Eficiente gerenciamento de memó ria; =9
3 - É uma linguagem interpretada; c=a+
4- Free; b
5- Traz consigo inú meras bibliotecas, além de
possibilitar integraçã o com outras; 8 Fonte: http://www.javascript-tutorial.com.br/
alert(c) Abre o bloco de có digo. Este é conjunto de operaçõ es que
se deseja realizar. Reforçando, só estaremos executando esta
</script> parte se a condicional for verdadeira.

</body> if (bananas == 6)
</html> {
Temos aqui manipulaçã o de variá veis, assim como na alert("É verdade. Temos meia dú zia de bananas")
matemá tica tradicional. Entendendo o có digo: }
a=2 Nos mostra uma janelinha de aviso o seguinte texto: É
Faz com que a variá vel a receba o nú mero 2. verdade. Temos meia dú zia de bananas

b=9 if (bananas == 6)
Faz com que a variá vel b receba o nú mero 9. {
c =a+b alert("É verdade. Temos meia dú zia de bananas")
Faz com que a variá vel c receba o resultado de a + b. }
Fecha o conjunto de operaçõ es.
alert(c) Você pode fazer experimentos, trocando o "bananas = 6"
Faz com que uma janela exiba o conteú do da variá vel c. por "bananas = 10" ou qualquer outro valor que nã o seja 6. Já
Note que nã o usamos aspas na frente e atrá s do c porque que a condicional nã o vai
estamos consultando o valor de uma variá vel. Se ser verdadeira, ele simplesmente nã o
colocá ssemos aspas, ele iria mostrar apenas a letra c, entra no bloco do có digo que faz o alert("É verdade. Temos
literalmente. meia dú zia de bananas").

Expressões condicionais if Expressões condicionais if else


Implementar o uso de expressõ es condicionais Utilizar o else, quando o if nã o for verdadeiro

<html> <html>
<body> <body>

<script> <script>
bananas = 22
bananas = 6
if (bananas == 6)
if (bananas == 6) {
{ alert("É verdade. Temos meia dú zia de bananas")
alert("É verdade. Temos meia dú zia de bananas") }
} else
{
</script> alert("Nã o é verdade. Temos outra quantidade de
bananas")
</body> }
</html>
O if é a mais bá sica das expressõ es condicionais no </script>
JavaScript. Com ele, você pode decidir se quer executar uma
açã o ou nã o. Entendendo o có digo: </body>
bananas = 6 </html>
Faz com que a variá vel "bananas" receba o nú mero 6. Neste exemplo estamos utilizando o if else.
Leia-se: Se (if) o nú mero de bananas for igual a 6, faça
if (bananas == 6) alert("É verdade. Temos meia dú zia de bananas"). Senã o
{ (else), faça alert("Nã o é verdade. Temos outra quantidade de
alert("É verdade. Temos meia dú zia de bananas") bananas").
}
O trecho acima é uma expressã o condicional if. Expressões condicionais if else encadeadas
Demonstrar o uso encadeado do if else
Vamos analisar: if
(bananas == 6) <html>
{ <body>
alert("É verdade. Temos meia dú zia de bananas")
} <script>
Esta é a expressã o condicional. Se ela for verdadeira (no
caso, se bananas for igual a seis), entraremos no bloco de bananas = 22
có digo. A seguir, temos a estrutura de um bloco de có digo.
if (bananas == 6)
if (bananas == 6) {
{ alert("Temos seis de bananas")
alert("É verdade. Temos meia dú zia de bananas") }
} else if (bananas == 10)
{ alert("Vogal")
alert("Temos dez bananas") break
} default:
else alert("Outro caracter")
{ }
alert("Temos outra quantidade de bananas")
}

</script> </script>

</body> </body>
</html> </html>
No exemplo acima, cairemos em "Temos outra Ilustramos acima o porquê do uso (ou desuso) do break.
quantidade de bananas". Experimente trocar o valor de
bananas (para seis ou para dez) para cair nas outras Expressões de loops for
condiçõ es. Usa-se o for quando se quer que um trecho de có digo se
repita n vezes.
Expressões seletoras switch
Usar o switch para condiçõ es de comparaçõ es simples, ao <html>
invés de utilizar o if <body>

<html> <script>
<body>
a=2
<script>
for (i = 0; i < 2; i++)
farol = "amarelo" {
a=i
switch (farol) { }
case
"vermelho": alert(a)
alert("Pare")
break </script>
case "amarelo":
alert("Atencao") </body>
break </html>
case "verde": A novidade é a linha de có digo acima mostrada em
alert("Prossiga") vermelho. Vamos analizá -la.
break
default: for (i = 0; i < 2; i++)
alert("Cor ilegal") Utilizamos uma variá vel temporá ria chamada i.
} Inicializamos ela com valor igual a zero.

</script> for (i = 0; i < 2; i++)


O bloco do meio funciona como um if. Se o valor de i for
</body> menor que 2, ele entra no loop.
</html>
Atençã o, nã o esqueça do break! for (i = 0; i < 2; i++)
Sempre inclua um default. Se todas as condiçõ es anteriores A ú ltima parte diz o que fazer com a variá vel i. Neste caso
forem falsas, o switch entrará nodefault. Ele é muito a cada repetiçã o, estamos incrementando o valor de i. Se nã o
importante. O sistema de telefonia dos Estados Unidos já foi fizéssemos isto, a condiçã o anterior (i < 2) sempre seria
uma vez paralisada por vá rias horas por causa da falta de um verdadeira, e entraríamos em um loop infinito, pois o valor
default! de i sempre seria menor que dois.
Agrupando condiçõ es:
<html> Expressões de loops while
<body> Usa-se o while quando se quer que um trecho de có digo se
repita n vezes, com condicional bem simples.
<script>
<html>
letra = "e" <body>

switch (letra) { <script>


case "a":
case "e": numero = 0
case "i":
case "o": while (numero < 10)
case "u":
{ ECMAScript 69.
numero++
} - O que é?

alert(numero) ES6, ECMAScript 6 ou ES2015, é simplesmente a mais nova


versã o do JavaScript.
</script> O nome mais utilizado atualmente é ES2015. A ideia do
comitê responsá vel (conhecido como TC39) pelas atualizaçõ es
</body> da linguagem é justamente fazer um release anual.
</html> O ECMAScript (ES) é a especificaçã o da linguagem de
Enquanto a condiçã o for verdadeira, o bloco será script que o JavaScript implementa, ou seja, é a descrição
executado. Note que dentro do bloco estamos executando formal e estruturada de uma linguagem de script, sendo
um có digo que fará a condiçã o ser falsa depois de algumas padronizada pela Ecma International – associaçã o criada em
repetiçõ es. Se não fizéssemos a condiçã o ficar falsa, ele 1961 dedicada à padronizaçã o de sistemas de informaçã o e
entraria no que chamamos de loop infinito, o que nã o é nada comunicaçã o – na especificaçã o ECMA-262. No dia 17 de junho
bom. de 2015, foi definida a sexta ediçã o da especificaçã o, a ES6
(também chamada de ECMAScript 2015).
Expressões de loops do while Diferentemente das ediçõ es anteriores, o ES6 trouxe a
Usa-se o do while quando se quer que um trecho de maior mudança para a linguagem JavaScript desde a sua
có digo se repita n vezes, mas executa o bloco de có digo antes criaçã o, há 20 anos.
da verificaçã o da condiçã o.
ECMAScript x JavaScript x ES.
<html>
<body> Uma dú vida bem comum é o porquê dessa mudança do
nome.
<script> Na verdade nã o houve nenhuma mudança: JavaScript é
como nó s chamamos a linguagem, só que esse nome é um
numero = 0 trademark da Oracle (que veio apó s a compra da Sun). O nome
oficial da linguagem é ECMAScript. E ES é simplesmente uma
do abreviaçã o do mesmo.
{
numero++ OBJETIVOS DO ES6.
}
while (numero < 10) O principal objetivo da nova versã o especificaçã o foi
tornar a linguagem mais flexível, enxuta e fá cil de se aprender
alert(numero) e trabalhar, tornando-a mais pró xima a outras linguagens
orientadas a objeto, como Java e Python.
</script> O TC39 focou em alguns objetivos no desenvolvimento do
ES6:
</body>
- Ser uma linguagem melhor para construir aplicaçõ es
</html>
complexas.
A diferença de ter um do na frente é que o có digo será
- Resolver problemas antigos do JavaScript.
executado antes da condição ser verificada. Execute exemplo e
verifique se o resultado é diferente do while normal. - Facilidade no desenvolvimento de libraries.
Esses objetivos ficarã o mais claros quando olharmos na
prá tica as features do ES6.

PRINCIPAIS MUDANÇAS10.

Dentre as principais mudanças, temos:

- Criaçã o de novos tipos de dados (Map, WeakMap,


Set, WeakSet).
- Novas maneiras de iterar objetos e coleçõ es.
- Declaraçã o de variá veis com let e const.
- Modularização e estrutura de classes.
- Geradores e símbolos.
- Operadores rest e spread.

A grande maioria dos browsers ainda nã o dã o suporte ao


ES6, entã o o que pode-se fazer para contornar essa limitaçã o é
usar um transpiler, como exemplo, o Babel.
O Babel transforma o có digo de ES6 para ES5 (versã o que
a maioria dos browsers dá suporte hoje).
9 Fonte: https://medium.com/@matheusml/o-guia-do-es6-tudo-quevoc
%C3%AA-precisa-saber-8c287876325f
10 Fonte: https://imasters.com.br/front-end/javascript/o-ecmascript-6-e-o-
futurodo-javascript/?trace=1519021197&source=single
aplicaçõ es reais, mas apenas uma forma rá pida de se
TRANSPILANDO ES6 PARA ES5. demonstrar a utilidade de transpilers.
- default parameters.
Vamos começar um projeto simples para demonstrar o uso
do Babel: Os parâ metros de funçõ es tem undefined como valor
default. Porém, em alguns casos, pode ser necessá rio utilizar
um outro valor. Com a versã o atual do JavaScript (ES5) nó s já
podemos fazer isso dessa forma:
bloco:

Inicie o npm com:

Aceite todas as opçõ es e agora entre com o comando: O ES6 introduziu uma nova forma, bem mais simples, de se
fazer isso. Basta adicionar o valor default na definiçã o do
parâ metro desejado:

Abra o index.js para escrever có digo em ES6:

Ou entã o, com apenas uma linha:

O Babel por si só nã o sabe como transpilar o có digo. Por


isso ele precisa de alguns plugins.
Alterando o .babelrc para informar ao Babel qual plugin
estamos utilizando para fazer a conversã o de que precisamos.
Como iremos usar o ES2015, o .babelrc deverá ficar assim:

- rest parameters.

Na versã o atual do JavaScript podemos utilizar o objeto


arguments para pegar todos os parâ metros de uma funçã o:
Insira o comando abaixo para que o transpile seja
concluído.

O comando pode ser traduzido da seguinte forma: Babel,


pegue o arquivo index.js e gere um output com o nome
script.js. Abrindo o novo arquivo (script.js) que foi gerado, O arguments, porém, apresenta alguns problemas:
ficará assim:
- O objeto parece com um array, mas nã o é exatamente
um.
- Todos os parâ metros da função sã o automaticamente
atribuídos ao arguments. Nã o temos uma forma clara de
diferenciar os parâ metros.

Portanto, foi gerado um arquivo ES5 a partir de um ES6. Com esses problemas em mente, os Rest Parameters foram
Obviamente o que foi feito acima nã o é recomendado para adicionados no ES6. O mesmo exemplo da soma poderia ser
reescrito dessa forma:

NOVIDADES DO ES6.

1. Declaração de Variáveis.
- var x let.
A diferença principal entre
o var e o let é que enquanto o
primeiro tem escopo de função, o segundo possui escopo de
Dessa
Um outro exemplo de coisas inesperadas que acontecem e um me
quando usamos o var: ainda ma
Ou dessa forma mais funcional:

Com f
Em resumo, let conserta o antigo problema causado pelo Imaginando o mesmo problema da soma, só que o primeiro return e a
hoisting fazendo com que
a declaração de variáveis funcione parâmetro seria de onde a soma começaria e os próximos Mas o
da forma esperada pela maioria dos desenvolvedores. parâmetros seriam os números a serem somados: na expres
da lingua
No ex
- let x const. utilizado

Const funciona de forma semelhante. A única diferença é


que as variáveis criadas não podem ser reatribuídas:

Uma
usando o
Com a
É comum achar que const deixa avel
variá
imutável, assim funcionar
como algumas libs como ImmutableJS. Isso não é verdade. As
propriedades de um objeto, por exemplo, podem ser alteradas: Ou então:

- dest

PROGRAMAÇÃO FUNCIONAL. Uma


objetos e
Deve-se declarar todas as variáveis com const e quando a
- arrow functions. forma:
variável precisa ser reatribuída, somente nessearcaso,
o let.us
Não usar o var (praticamente) nunca.
As arrow functions são excelentes syntax sugar na criação
2. Parâmetro de Funções. de funções. Uma função que seria escrita dessa forma em ES5:

Algumas pequenas alterações foram adicionadas em


relação a parametrização de funções. Apesar dessas mudanças
serem pequenas, elas trazem enormes benefícios.
E com

Pode ser escrita dessa forma em ES6 com o uso das arrow
functions:
Com objetos ela Vamos pensar em um
funciona desse jeito: caso em que além de
um nome, um
Animal também terá um
novo comportamento:
emitir um som.
Podemos utilizar o E para importar esse
conceito de herança com o mó dulo em outro arquivo
extends e implementar também é simples:
dessa forma:

Provavelmente, o uso
mais comum vai ser no
import de libs. Termos o
poder de transformar
Com mú ltiplas funçõ es
isso:
é bem semelhante:

O método constructor
tem como tarefa fazer a
inicializaçã o da instâ ncia.
Ele é chamado
automaticamente na
criaçã o da mesma e
Nisso:
garante que ela esteja em
um estado vá lido.

- getters/setters.
Como getters e setters
sã o muito comuns na E para importar:
utilização de classes, o ES6
veio com um syntax sugar
para lidar com os mesmos.
A funçã o destructuring Entã o podemos
é muito semelhante ao reescrever o exemplo MÓDULOS.
pattern matching, que é anterior dessa forma
uma das bases das melhorada: Um dos grandes
linguagens funcionais.
problemas do JavaScript Podemos também
era nã o ter um sistema importar o mó dulo
ORIENTAÇÃO A
built-in de mó dulos assim completo:
OBJETOS.
como a maioria das
Vamos falar agora
linguagens possui.
sobre a feature mais
Dessa ausência
polêmica do ES6: classes.
surgiram algumas
possíveis soluçõ es como
- Classes. CommonJS e AMD.
Classes nos dã o uma
- classes.
sintaxe amigá vel que
- ES6 Modules. Para importar e
definem o estado e o
exportar classes também
comportamento de
A importâ ncia dos nã o há muitas mudanças,
objetos que representam
mó dulos está em basta criar uma classe
as abstraçõ es que usamos
organizar o sistema, com o export na frente:
diariamente.
aumentar o reuso e
diminuir a complexidade
- constructor.
A principal funçã o dos de cada pequeno trecho
Por exemplo, se do seu code base.
getters/setters é proteger
necessitarmos de uma
os dados internos das
abstraçã o para animais
instâ ncias de um objeto. - export/import.
em que cada animal
O underscore aparece Exportar mó dulos é
possui um nome,
antes da propriedade bem simples. Apó s
poderíamos implementar
name porque isso é uma criarmos uma funçã o
dessa forma:
convençã o a qual indica podemos simplesmente
que essa variá vel deve ser adicionar a palavra export
mantida privada. antes da definiçã o da
- herança. mesma:
Agora podemos
importá -la assim:
Q verdadeiro caso os I
u operandos sejam n
e iguais e do mesmo c
st tipo. o
õ 4.Introduzido em r
e ECMAScript 6, objetos r
- default.
s Proxy permitem que e
se interceptem t
É comum termos a a
1. (ITAIPU determinadas
necessidade de exportar .
BINACIONAL - operaçõ es e
apenas uma funçã o/classe
Profissional de Nível personalize o
por arquivo. Nesse -
Superior Jr - comportamento da
cená rio podemos utilizar a
UFPR/2017). A respeito funçã o.
exportação default: V
do JavaScript, considere as 5.O uso da sintaxe
seguintes afirmativas: ${expressão} em a
literais string é r
1.As palavras denominada Template .
reservadas var, let, Strings. A interpolaçã o
const e globals sã o ocorre em textos
utilizadas para delimitados por aspas Até a versã o anterior
declaraçã o de duplas (“). do JavaScript, a ES5,
Uma das vantagens é
variá veis. declará vamos variá veis
que o cliente (quem faz o
2.É uma linguagem Assinale a alternativa através da palavra-chave
import) é que vai setar o
de script correta. var, que eram chamadas
nome do mó dulo como
multiparadigma, de variá veis de escopo de
bem quiser:
baseada em protó tipo, (A) Somente a funçõ es. O escopo do
e suporta estilos de afirmativa 1 é JavaScript é dado por
programaçã o verdadeira. funçõ es e não por blocos e
orientada a objetos, (B) Somente as a palavra-chave var
imperativo e afirmativas 1, 4 e 5 garantia a variá vel dentro
funcional. sã o verdadeiras. (C) de todo o escopo de onde
3.O operador === Somente as ela foi declarada, ou seja,
(três símbolos de afirmativas 2, 3 e 4 poderia ser acessada de
igual) retorna sã o verdadeiras. qualquer ponto dentro do
(D) Somente as nosso có digo. Agora que já
afirmativas 2, 3 e 5 sabemos como funciona a
sã o verdadeiras. declaraçã o de variá veis
(E) As afirmativas 1, 2, com var, vamos ver em
3, 4 e 5 são có digo:
verdadeiras. foi declarada dentro da
função e é acessada de
2. (UNIPAMPA - dentro do bloco if, mas
Programador Visual – tenha cuidado, isso só é
CESPE). Com referência a possível se o bloco estiver
Executando o código acima a saída undefined
é: ! O escopo
JavaScript, julgue os itens dentro da mesma função
de varnão é de função? Sim! Isso mesmo.
Undefinednão quer
seguintes. da qual foi a variá vel foi
dizer que a variável não existe,asmsim que ela não possui
declarada.
nenhum valor e como a atribuição de valor depende do
resultado de uma condição e esta, por sua vez, é falsa, a ECMAScript é
atribuição não chega a acontecer, mas a engine JavaScript sabe considerada uma - Const.
que em algum ponto do código foi definida uma variável
x. versã o anterior do
Vejamos um outro exemplo: JavaScript. Além de let a ES6
( ) Certo trouxe também a palavra-
( ) Errado chave const. Esta é usada
para declarar variá veis
R read-only, isto é, a
e variá vel nã o pode ter seu
s valor reatribuido, ou seja,
p seu estado é imutá vel.
o Assim como let variá veis
st do tipo const também são
a variá veis de escopo de
s: bloco. A const veio para
prover uma proteção
1. Resposta: C. nativa para constantes,
pois, antes disso era
utilizada a seguinte
1
convençã o var const_var =
.
123., mas isso nã o era

No código acima, podemos ver que a variável


c é acessível
a, declarada fora da função foi acessada dentro
bar().de

- Let.

Quando a ES6 foi lançada, trouxe consigo diversas features


e dentre elas a palavra -chavelet, que é usada para declarar
garantia
variáveisde
com que esse de
escopo valor
bloco. Seu comportamento é idêntico SCALA11. inclusive os tipos bá sicos,
nã o quando
a var seria mudado
declarada fora no de uma função, ou seja, ela fica como Integers e Floats, e
decorrer
acessível nodoescopo
programa.
global. Mas quando declarada
dentro de A Linguagem Scala até funçõ es.
Apó s a introduçã
qualquer bloco seja ele o umade função,if ou
umumloop, ela fica (Scalabel Language) é uma
const, podemos
acessível declarar
apenas dentro do bloco (e-blocos)
sub do qual foi linguagem de A linguagem Scala está
constantes const reescrever
declarada. Vamos variavel o mesmo exemplo anterior, só programaçã o de propó sito sendo usada em diversas
=que
“valor”;
agoraeusando
assimkeyatemos
let: a geral baseado em dois empresas, como por
certeza de que esse será paradigmas: o orientado a exemplo, o Twitter, o
seu ú nico e imutá vel valor. objetos e funcional. Ela é GitHub e o FourSquare, e
2. Resposta: Errado. fortemente baseada no em diversos projetos
2. Correta. Java, mas inclui uma série OpenSource famosos,
3. Correta. ECMAScript é uma de requisitos, como por exemplo, o
especificaçã o formal de principalmente retirados Apache Spark.
4. Correta. uma linguagem de script. de linguagens funcionais,
Javascript é a para deixar o Instalando e Rodando
5. Incorreta. implementaçã o mais desenvolvimento de o Scala.
popular do ECMAScript. aplicaçõ es mais simples
Template strings com Outro exemplos sã o do que em Java. Scala roda Para utilizar a
marcaçõ es (ou
No código tags)
acima, são a e b ActionScript
as variáveis e JScript.
tem seus valores na má quina virtual Java, e linguagem Scala, é
escritos
funçõ es naque
consolerecebem
corretamente,cmas não. Isso se dá pois isso traz a vantagem de necessá rio ter instalado a
estamos tentando
argumentos acessar uma váriavel fora do bloco do qual
de maneira permitir o uso de classes e JDK, se você utilizar uma
ela pertence.
especial. NasMesmo ifosendo
funçõ es declarado dentro da função métodos Java em um IDE Scala, nada precisa ser
bar()a variávelc só é estamos
normais acessível dentro dele mesmo. ntrário
O co programa Scala, e vice e feito, caso deseje
é permitido,aconforme
habituados uma sintaxe podemos observar com abvariável
que versa. desenvolver diretamente
minhaFn(a, b, c); e depois, Outras características em um editor de texto e
dentro da funçã o, da linguagem Scala compilar os programas
recebemos os argumentos sã o: em console, é necessá rio
que essas variá veis instalar e configurar
tinham no momento de - Inferência de corretamente o
invocar a funçã o. Ou seja: Tipos: Em Scala nã o compilador Scala, que
precisamos declarar pode ser baixado no site
explicitamente o tipo das oficial.
variá veis, pois o pró prio Exemplos da
compilador infere os tipos utilização de Scala.
no momento do uso delas,
o que traz grande Para mostrar as
flexibilidade na principais características
programaçã o; da linguagem Scala serã o
- Pattern exibidos diversos
Matching: Funciona mais exemplos de có digo. A
ou menos como um Listagem 1 mostra o Hello
Com tagged template Switch/Case, mas é muito World em Scala, onde é
string os argumentos são mais poderoso, possível perceber que o
distribuidos desta forma: permitindo a comparaçã o có digo é bastante
utilizando expressõ es parecido com o Java. Veja
O primeiro argumento regulares; que primeiro é definido
é uma array, com o texto - Traits: É um um object, e dentro deste
da template string, e o conceito de vá rias existe o método main, que
segundo argumento e linguagens de apenas chama a funçã o
seguintes sã o as programaçã o OO, que foi print, passando como
interpolaçõ es que a string adicionado em Scala parâ metro a String “Hello
recebeu. também, e é mais ou World!”. Uma diferença do
menos como uma Scala para o Java é que no
O que são interface Java, mas que Scala o ponto e vírgula ao
interpolaçõ es? permite que os métodos final da linha nã o é
sejam implementados, e obrigató rio.
No caso desta nã o apenas declarados;
template string `Olá $ - Funções de Alta Listagem 1.
{nome}! Como está s?`, a Ordem: Em Scala funçõ es HelloWorld em Scala.
variá vel nome faz uma sã o objetos, por isso
interpolaçã o à string, e podemos utilizá -las de package main
será passada ao muitas formas, como por
argumento 1 da funçã o, e exemplo, passá -las como
o resto do texto será object Main {
parâ metros para outras
passado em pedaços ao funçõ es.
argumento 0 da funçã o. def
- Objetos: Em main(args:Array[Strin
Scala tudo é um objeto, g]) {
Exemplo:
11 https://www.devmedia.com.br/
print("Hello { ( as variá veis declaradas
World!") n como final em Java.
} v u Sempre que possível, é
} a m melhor utilizar objetos
r 1 imutá veis, pois eles
A Listagem 2 mostra permitem utilizar ao
um exemplo de declaraçã o n + má ximo as capacidades de
de variá veis em Scala. u execução paralela do
Como podemos observar, m n Scala. A Listagem 3 mostra
é utilizada a palavra 1 u um exemplo da utilização
reservada “var” para isso, m dessas variá veis.
e nã o colocamos o tipo nas = 2
variá veis, pois os tipos ) Listagem 3. Declaraçã o
serã o definidos pelo 5 ) de objetos imutá veis.
compilador. Qualquer tipo
de variá vel é declarado v v package main
com o var, mesmo a a
r r
variá veis em que os object Main6 {
valores sã o passados
n s
diretamente, como por
u
exemplo, as variá veis d
m =
num1 e num2, que são do e
2
tipo inteiro, e a variá vel f
n
texto, que é do tipo String.
= e
Para as instâ ncias que são m
w
criadas com o construtor, 1 a
como por exemplo, a 0 S i
variá vel texto que é do t n
tipo StringBuffer também v r (
usamos o “var”. a i a
r n r
Listagem 2. Declaraçã o g g
de variá veis em Scala. t B s
e u :
package main x f A
t f r
object Main { o e r
r a
= y
s [
d
" . S
e
A a t
f
p r
s p i
m
o e n
a
m n g
i
a d ]
n
( )
(
a é "
: O {
r
g l
" á v
s
! a
:
p " l
A
r r )
i ; n
r
n u
a
t s.append("Vamos m
y
l aprender Scala?") 1
[
S n println(s);
( =
t
r t }
e 5
i }
n x
t v
g Em Scala existe
o a
] também a declaraçã o de l
) valores fixos, ou objetos
+ imutá veis, que sã o como n
u O que o método faz é def
m simplesmente executar a multiplicacao(x:Int, def
2 funçã o recebida como y:Int) : Int = { main(args:
parâ metro para os outros Array[String]
= dois parâ metros passados x )
para a funçã o. { println("
1 * Realiza as
0 Listagem 4. Passando operaçõ es
funçõ es como y matemá ticas:
v parâ metros. ")
a }
l package main fazConta(so
ma, 5, 3);
t fazConta(mu
object Main {
e d ltiplicacao,
x e 5,3);
def
t f fazConta(div
o fazConta(callback:
(Int,Int) => Int, x:Int, isao, 5,3);
y:Int) d fazConta(subtracao
= i , 5,3);
{ println(callback(
x, y)) v }
" i }
A }
s
a Note que a declaraçã o
s o
d de uma funçã o em Scala
o (
e tem algumas diferenças
m x
f relevantes em relaçã o ao
a : Java. Primeiro é utilizada a
I palavra reservada def e
é s
n depois é definido o nome
: o t da função, os parâ metros
m ,
" a e, por fim, o tipo do
( retorno da funçã o. Note
y também que em Scala,
println(texto + x :
(num1 + num2)) : apesar de permitido, não é
I preciso colocar o return,
} n
} I pois é assumido que o
t valor do ú ltimo comando
Veja que o uso é n )
parecido com o exemplo t da funçã o é utilizado para
anterior, mas a diferença é , retorno. Caso seja
:
que, ao invés de var, a desejado que a funçã o nã o
palavra reservada usada y retorne nada, é utilizado o
I
para essa declaraçã o é o : tipo Unit na declaraçã o do
n
val. Se o programador retorno da funçã o.
t
tentar alterar o valor de I O exemplo da
um objeto declarado como n Listagem 4 demonstrou
=
val, dará um erro de t uma grande vantagem da
compilação. { linguagem Scala, que é a
Uma das maiores ) passagem de funçõ es
diferenças do Scala em : x como parâ metro, mas a
relaçã o ao Java, é na forma quantidade de có digo
em que funçõ es podem ser I * necessá rio para escrever o
usadas, pois em Scala n programa nã o foi muito
funçõ es sã o objetos e, por t y diferente do que seria
isso, elas podem ser necessá rio em Java.
utilizadas de muitas = } Porém, em Scala, é
formas, como por possível utilizar as
exemplo, serem passadas { def subtracao(x:Int, funçõ es Anô nimas
como parâ metros em y:Int) : Int = { (atualmente o Java
outras funçõ es, x também permite isso com
permitindo uma grande x as expressõ es Lambda). A
flexibilidade no có digo. Na + Listagem 5 mostra o
Listagem 4 é mostrado um * mesmo exemplo, mas
exemplo onde é criada y agora as funçõ es soma e
uma funçã o chamada y mult, ao invés de serem
fazConta, que recebe como } funçõ es normais, sã o
parâ metro uma função e } funçõ es definidas
dois parâ metros inteiros. diretamente na chamada
do método fazConta e, depois o símbolo => são n }
com isso, nã o é necessá rio utilizados para as funçõ es i }
declarar as funçõ es. anô nimas. Caso a função t
tenha apenas uma linha, Depois, apenas para
Listagem 5. Funçõ es basta escrever o có digo = mostrar que existem já
Anô nimas. diretamente, caso alguns métodos
contrá rio, podem ser { implementados pela
package main utilizadas chaves para a pró pria API da linguagem
criação de um bloco de f Scala, foi utilizado o
object Main2 { có digo. Note que mesmo o método filter, que já existe
def utilizando funçõ es r no tipo list. Esse método
fazConta(callback: anô nimas, a declaraçã o do espera como parâ metro
(Int, Int) => Int, x: Int, parâ metro na funçã o ( uma funçã o (pode ser
y: Int) fazConta e a funçã o x anô nima ou nã o), e ele vai
{ println(callback(x passada como parâ metro retornar uma lista com
, y)) na chamada do método < apenas os valores que
} tem a mesma estrutura, - respeitem a condiçã o
nú mero de parâ metros e passada na funçã o como
d tipo de retorno. a parâ metro. Apenas como
ef Funçõ es anô nimas sã o L exemplo, nesse mesmo
con muito utilizadas para i có digo é utilizado o
taU trabalhar com coleçõ es de s método finterNot, que faz
mD dados e para realizar t exatamente o contrá rio do
ez(f diferentes operaçõ es ) método filter, pois ele
: nessas coleçõ es, como por filtra apenas os elementos
(Int exemplo, filtragem e { que nã o respeitam a
) => mapeamento dos dados. A condiçã o passada na
Unit Listagem 6 mostra funçõ es printFunction(x) funçã o.
) { anô nimas utilizadas com } Vejam que a funçã o
for coleçõ es de dados, onde } passada como parâ metro,
(i <- primeiro é definida a def main(args: tanto para o método filter
1 to funçã o printList, que Array[String]) { como para o método
10) recebe como parâ metro filterNot, deve ser na
f(i) uma funçã o e uma lista de val listaIdade = forma Int => Boolean.
} inteiros. No main, a List(5, 22, 15, 27, 7) O Scala também é uma
def main(args: primeira coisa é a println("Escreve as linguagem orientada a
Array[String]) { definiçã o da lista com idades") objetos, por isso, ela
algumas idades, depois há printList(x => permite a criaçã o de
duas chamadas para o println(x), listaIdade) classes, com todos os
println("Re método printList: uma que conceitos de orientaçã o a
aliza as apenas imprime as idades, println("Escreve o objetos, como herança,
operaçõ es e outra que imprime as dobro das idades") polimorfismo e associaçã o
matemá tica idades multiplicadas por printList(x => entre classes. Para
s") dois. println(x * 2), exemplificar o uso de
fazConta((x, listaIdade) classes em Scala, a
y) => x + y, Listagem 6. Funçõ es Listagem 7 apresenta a
5, 6) anô nimas com println("Fi classe Conta criada com os
fazConta((x, coleçõ es de dados ltra Idades atributos numAgencia,
y) => x * y, maiores que numConta e saldo, e os
5, 3); package main 10") val métodos saque, deposito e
fazConta((x, y) => x listaFiltrada = toString.
/ y, 5, 3); object Main8 { listaIdade.filt
fazConta((x, y) => x er(x => x > Listagem 7. Definindo
- y, 5, 3); def 10) uma classe em Scala
printList(printFunction: printList(x =>
println("Conta até (Int) => println(x), package classes
10") Unit, aList: listaFiltrada)
contaUmDez(i => List class
println(i)) [ println("Filtra Conta(nAgencia:String
} I Idades nã o sejam , nConta:String,
} n menores que 10") s:Float) {
A sintaxe para a t val listaFiltrada2 =
utilizaçã o de funçõ es ] listaIdade.filterNot (x va
anô nimas é bastante ) => x < 10) r
simples: inicialmente são printList(x => num
colocados os parâ metros : println(x), Agen
da função. Como no listaFiltrada2) cia:S
exemplo, o val1 e val2, e U tring
= = é equivalente ao void do [
nAge 0 Java, isto é, a funçã o que S
ncia ) retorna Unit nã o retorna t
var { nada. r
num s Utilizar uma classe i
Cont a para criar objetos é n
a:Str l bastante fá cil em Scala, g
ing = d nã o há nenhuma grande ]
nCo o diferença em relaçã o ao )
nta = Java. A Listagem 8 mostra
var saldo:Float = s s um exemplo da utilizaçã o {
a da classe Conta criada no
def l exemplo anterior. Nesse
depos d có digo apenas sã o criados val conta = new
ito(va o dois objetos do tipo Conta: Conta("12343",
lor:Fl - um na variá vel conta e o "234543", 1000)
oat): v outro na variá vel conta2. println("Saque de 500
Unit = a Verifique que conta e reais")
l conta2 sã o declaradas println(conta.saque(5
{ s
o como val, o que impede 00)) println("Deposito
aldo =
r que sejam instanciadas de 1000 reais")
saldo
return true novas contas nessas conta.deposito(100
+
valor variá veis. 0)
} println(conta)
}
Listagem 8. Criando
f val conta2 = new
objetos de uma Classe
a Conta("4567",
d Scala
l "1234432", 1000)
e
s
f package main
e println("Saque
s
a import classes.Conta de 1500 reais")
q } println(conta2.
u saque(1500))
e override def println("Depos
o
( toString(): String = ito de 1000
b
v "(Agencia:" + reais")
j
a numAgencia + ", conta2.deposit
e
l Conta: " + numConta + o(1000)
c
o ", println(conta2)
t
r: Saldo: " + saldo + ")";
F M
l } }
a
o }
i
a A definiçã o da classe n
t nã o é muito diferente da O conceito de Pattern
3
): forma que é feita em Java, Matching é uma forma de
B pois a principal diferença fazer comparaçõ es e
{
o é que a classe aceita decisõ es em Scala de
o parâ metros, como é forma muito mais
d
l possível verificar logo na poderosa e simples do que
e
e linha da declaração. Esses utilizando os comandos
a f
parâ metros devem ser Switch/Case. A Listagem 9
n passados no momento da apresenta um primeiro
= m
criação das instâ ncias da a exemplo de Pattern
{ classe, substituindo o i Matching ainda bastante
if construtor. Outra n simples. Nesse exemplo é
( diferença interessante ( passado um nú mero
s entre Java e Scala nesse a inteiro como parâ metro
a có digo é o método saque, r para a funçã o, e com a
l que retorna um tipo g palavra reservada case,
d Boolean, entã o no ú ltimo s sã o definidas as
o comando dele basta : possibilidades para o
-
colocar false como ú ltima nú mero passado como
v
instruçã o de um bloco, e A parâ metro. A ú ltima opçã o
a
isso automaticamente r utiliza um underline, que
l
será o retorno da funçã o. r seria o equivalente ao
o
A funçã o deposito retorna a default de um comando
r
um valor do tipo Unit, que y switch/case.
>
No exemplo anterior é " inclusive frameworks e
Listagem 9. Pattern possível observar que o jars de terceiros. Para
Matching com apenas có digo é mais simples que c demonstrar isso, a
um tipo o de um Switch/Case a Listagem 11 mostra alguns
tradicional, mas ainda nã o s exemplos do uso de
package main há nenhuma grande e classes Java em um
diferença, por isso a programa em Scala:
object Main4 { Listagem 10 mostra um " primeiro é criado um
exemplo de Pattern d ArrayList de Strings e sã o
def Matching mais o adicionados três valores
match interessante. O parâ metro i nesse ArrayList; depois é
Test(x: e o retorno do método sã o s criado uma instâ ncia da
Int): do tipo Any, o que quer " classe Date, e uma da
String dizer que pode ser classe SimpleDateFormat,
=x passado qualquer coisa = e ao utilizar esses dois
match como parâ metro para o > objetos é mostrada a data
{ ca método, e que ele pode atual no console. Por
se 1 => retornar qualquer coisa 2 ú ltimo é criado um objeto
"um" também. Nos cases é da classe ServcerSocket
case 2 possível observar que case "três" => 3 do Java.
=> existem condiçõ es que case "quatro" =>
"dois" comparam valores new Conta("12345", Listagem 11.
case 3 inteiros, Strings, e até "12345", 1000) Utilizando classes Java
=> verificam o tipo da case y: Int => "É um em um programa Scala
"três" variá vel passada como nú mero inteiro"
case 4 parâ metro, já como case x: Conta => "É package main
=> retorno também existem uma conta"
"quatr inteiros, String e até um case z: String => "É
o" objeto da classe conta que uma String" i
case 5 foi criada anteriormente } m
=> nesse artigo. def p
"cinco" main(args: o
case 6 Listagem 10. Pattern Array[String r
=> Matching como padrõ es ]) t
"seis" de diversos tipos { println( j
case 7 => "sete" matchTest(" a
case _ => "nú mero package main dois")) v
passado pode ser println(matc a
qualquer nú mero" import classes.Conta hTest(1)) .
} println(matc u
hTest(5)) t
obje
def println(matc i
ct
main(args: hTest("três") l
Main
Array[String] ) .
5
) println(matc A
{ d
{ println( hTest("quatr r
ef o"))
matchTest(3) r
matc }
) a
hTest
println(matc } y
(x:
hTest(2)) Uma consideraçã o L
Any):
println(matc importante sobre o i
Any
hTest(5)) Pattern Matching é que, se s
= x
println(matchTest( nenhum padrã o for t
matc
23)) encontrado para o i
h{
} parâ metro passado para o m
} método, será lançada uma p
c o
exceçã o. Por isso é
a r
Vejam que na importante ou ter um case
s t
definiçã o do método com o underline, ou fazer
e j
matchTest, já foi o tratamento de exceçã o
declarado que ele é uma sempre que for chamada a
1 v
funçã o match e que o uma funçã o desse tipo.
retorno dessa funçã o é do Uma grande vantagem a
= .
tipo String. Logo, os da linguagem Scala é que
> u
valores literais dos ela é executada também
nú meros ou o “qualquer na JVM, o que permite ao t
" i
nú mero” será também o programador usar
u l
retorno da funçã o. qualquer coisa que tenha
m .
sido criado em Java,
D j val dateFormatter divididos em diversos
a e = new fluxos, a fim de serem
t c SimpleDateFormat("dd processados por
e t /MM/yyyy") operadores diferentes.
println(dateFormatt Um programa de Pig
i M er format agora) Latin consiste de uma
m a série de operaçõ es ou
p i val socket = new transformaçõ es que é
o n ServerSocket(5000) aplicada aos dados de
r 7 socket.accept(); entrada a fim de produzir
t socket.close(); a saída. Consideradas
j { como um todo, as
a operaçõ es descrevem um
}
v d fluxo de dados que o
}
a e ambiente de execução Pig
Esse có digo nã o faz
. f traduz em uma
nada importante, mas com
t representaçã o que,
ele fica bem claro que é
e m depois, é executada. Em
possível utilizar qualquer
x a segundo plano, o Pig
t classe do Java em um
i programa Scala, para isso configura as
. n transformaçõ es em uma
S basta importar as classes.
( Isso é uma grande série de tarefas do
i a vantagem, pois grande MapReduce.
m
r parte do que é criado em Com o Pig, as
p
g Java, é possível de usar em estruturas de dados são
l
s Scala também. muito mais ricas,
e
: geralmente têm diversos
D
PIG12. valores e aninhamentos;
a
A além disso, o conjunto de
t
r O projeto Apache Pig é transformaçõ es que pode
e
r desenvolvido como um ser aplicado aos dados é
F
a mecanismo para executar muito mais eficiente. Em
o
r y os fluxos de dados de particular, o modelo de
m [ modo paralelo ao Hadoop. dados Pig Latin consiste
a S Ele usa uma linguagem dos quatro tipos a seguir:
t t chamada Pig Latin para
i r expressar esses fluxos de - Á tomo é um
m i dados. Com a Pig Latin, é valor atô mico simples,
p n possível descrever como como uma sequência ou
o g os dados de uma ou mais um nú mero; por exemplo,
r ] entradas devem ser lidos, “John”;
t ) processados e, depois, - Tupla é uma
j armazenados em uma ou sequência de campos;
a { mais saídas de modo cada um deles pode ser
v paralelo. A linguagem qualquer tipo de dado, por
a toma uma posiçã o exemplo (“John”,
. intermediá ria entre a “Melbourne”); - Pacote é
n val expressão de tarefas uma coleçã o de tuplas
e lista usando um modelo de com possíveis duplicados.
t = consultas declarativo de O esquema de tuplas
. new alto nível similar à SQL e a constituintes é flexível, no
S Arra qual nem todas as tuplas
programaçã o
e yList de um pacote precisam ter
procedural/de baixo nível
r [Stri o mesmo nú mero e tipo de
que usa o MapReduce. Os
v ng] campos. O Pacote da
fluxos de dados de Pig
e lista. Figura 1 lista duas tuplas:
Latin podem ser fluxos
r add( (“John”,”Melbourne”) e
lineares simples, mas
S "Edu “Alice”,(“UNSW”
também podem ser fluxos
o ardo “Sydney”);
de trabalho complexos
c ") - Mapear é uma
que incluem pontos nos
k lista. coleção de itens de dados,
add( quais há a junção de
e na qual cada um item tem
"Luiz diversas entradas e nos
t uma chave associada por
") quais os dados sã o
meio da qual ela pode ser
lista.add("Bruna") 12 procurada. Como ocorre
https://imasters.com.br/artigo/24
486/software-livre/utilize-
com os pacotes, o
o val agora = new esquema de itens de
linguagensparecidas-com-a-sql-
b Date para-a-estrutura-domapreduce/? dados constituintes é
trace=1519021197&source=single
flexível; no entanto, as ou verificar o có digo dos 100000; sortedList = no warehouse, muitas
chaves sã o necessá rias usuá rios. Por outro lado, o ORDER highSalary BY vezes, preferem o Pig. Os
para serem á tomos de Pig pode analisar um salary DESC; pesquisadores que
dados> O Mapa da Figura script de Pig Latin e STORE sortedList trabalham com grandes
2) lista os itens de dados: entender o fluxo de dados INTO ' highSalary conjuntos de dados,
K1–>(“John”,”Melbourne”) descrito pelo usuá rio. O _Emp'; muitas vezes, usam
e K2–>30. MapReduce nã o tem um DUMP sortedList; linguagens de script como
sistema de tipos. Isso é Perl ou Python para fazer
A Pig Latin inclui intencional e oferece aos Neste exemplo, em seu processamento. Os
operadores para muitas usuá rios a flexibilidade primeiro lugar, carregue o usuá rios com esses planos
operaçõ es de dados para usar seus pró prios arquivo de entrada em um de fundo preferem o
tradicionais (join, sort, tipos de dados e pacote chamado paradigma de fluxo de
filter, group by, union, estruturas de serializaçã o. employees. Depois, crie dados do Pig do que o
etc.), bem como a A desvantagem é que isso um novo pacote chamado paradigma de consulta
capacidade para que os limita ainda mais a highSalary, que contém declarativa da SQL.
usuá rios desenvolvam capacidade do sistema de apenas os registros cujo
suas pró prias funçõ es verificar o có digo do campo salary é superior a
para ler, processar e usuá rio em busca de erros 100000. O pacote
escrever dados. antes e durante o tempo sortedList classifica os
O MapReduce fornece de execuçã o. Todos esses registros filtrados com
diretamente a operaçã o pontos significam que a base no valor do salá rio,
group by (cujas fases de Pig Latin tem um custo em ordem descendente.
ordenaçã o aleató ria e muito menor para Finalmente, escreva o
redução sã o essenciais) e escrever e manter em conteú do do pacote
fornece a operaçã o order relaçã o ao có digo Java do sortedList no HDFS e
by indiretamente por MapReduce. imprima o seu conteú do
meio da maneira como na tela.
implementa o O exemplo a sguir
agrupamento. A filtragem mostra como descrever
e a projeçã o podem ser junçã o as operaçõ es
implementadas de modo facilmente usando a Pig
trivial na fase de Latin.
mapeamento. No entanto,
os outros operadores, As operações join
principalmente join, nã o podem ser descritas
sã o fornecidos e, em vez facilmente usando a Pig
disso, devem ser escritos Latin.
pelo usuá rio. O Pig employees = LOAD
fornece implementaçõ es 'employee.txt' AS (id,
complexas e nã o triviais name, salary,
dessas operaçõ es de dept);
dados padrã o. Por departments = LOAD
exemplo, devido ao fato de 'dept.txt' AS (deptID,
o nú mero de registros por deptName); joinList =
chave de um conjunto de JOIN employees BY dept,
dados ser raramente departments BY deptID;
distribuído de modo STORE joinList INTO '
uniforme, muitas vezes os Os principais joinFile';
dados enviados aos operadores da
Tradicionalmente, as
redutores sã o defasados. linguagem Pig
consultas ad hoc são
Ou seja, um redutor Latin
realizadas em idiomas
obterá 10 ou mais vezes a como SQL, que facilitam a
quantidade de dados que O exemplo a seguir rá pida formaçã o de uma
os outros. O Pig possui mostra um programa questã o a ser respondida
operadores join e order by simples de Pig Latin para pelos dados. Para a
que manipularã o este caso encontrar todos os pesquisa de dados brutos,
e (em alguns casos) funcioná rios com um alguns usuá rios preferem
rebalanceará os redutores. salá rio alto. a Pig Latin. O Pig pode
Tablela 1 descreve os operar em situaçõ es cujo
principais operadores da Encontrar todos os esquema é conhecido,
linguagem Pig Latin. funcionários com incompleto ou
No MapReduce, o salário alto. inconsistente e, já que ele
processamento de dados pode gerenciar facilmente
das fases de mapeamento employees = LOAD os dados aninhados, os
e reduçã o é opaco para o 'employee.txt' AS (id, pesquisadores que
sistema. Isso significa que name, salary); desejam trabalhar nos
o MapReduce nã o tem highSalary = FILTER dados antes de sua
oportunidade de otimizar employees BY salary > limpeza e carregamento
Estrutur as expressõ es humanas do ao receptor um
conhecimento. A ló gica foi Os algoritmos devem entendimento do assunto
as de criada por Aristó teles no seguir algumas mesmo nã o conhecendo
dados e século IV a.C. para estudar características bá sicas que algoritmos.
algoritm o pensamento humano e seguem abaixo: Vejamos alguns
distinguir interferências e • Um algoritmos exemplos:
os: busca argumentos deve ter inicio e fim;
sequenci certos e errados.13” • Resolver
al e qualquer problema Fluxograma ou
Entã o o que podemos proposto; diagrama de bloco
busca entender por Ló gica de • Nuca um
binária Programaçã o? algoritmos deve ser Sã o utilizados
sobre ambíguo (ter dupla símbolos grá ficos
Ló gica de interpretaçã o); universais que auxiliam
arrays,
programaçã o é necessá ria • Todo algoritmos para a compreensã o dos
ordenaç para que se possa deve ter fim; passos que os algoritmos
ão trabalhar com seguem para que o
desenvolvimentos de problema seja resolvido,
(método Em ló gica de
programas de programaçã o, os por se tratar de uma
s da computador, para estes algoritmos sã o simbologia mundial, sua
bolha, serem desenvolvidos sã o representados por vá rias interpretaçã o é simples,
ordenaç utilizados dois passos formas diferentes, mas as porém, se faz necessá rio
bá sicos, sequencias ló gica principais representaçõ es um conhecimento prévio.
ão por (os passos executados sã o:
seleção, desde para a resoluçã o de
ordenaç um problema) e Programas
instruçõ es (conjunto de Os programas de
ão por regras e açõ es para computadores ou
inserção, execução de instruçõ es software são algoritmos
lista ló gicas), tais passos sã o escritos com o suporte de Os símbolos mais
denominados algoritmos. uma linguagem de
encadea utilizados sã o:
progrmaçã o como Cobol,
da, pilha, Algoritmos Fortran, Visual Basic,
“Um conjunto finito de Símbolo
fila, Pascal, etc. entã o sã o
regras que provê uma transformados e
noções sequência de operaçõ es linguagem de má quina e
sobre para resolver um tipo de executados no Início/Fim
árvore problema específico.” computador.
Ao analisar a frase Terminal
binária), acima, podemos notar que Descrição Narrativa
noções fazemos o uso constante Calculo
de de algoritmos para a A descriçã o narrativa é
resolução de qualquer uma das formas mais
algoritm problema em nosso dia-a-
Processamento
simples de representar
os de dia, desde o simples fato um algoritmo, com essa
aprendiz de calçar um par de forma, o narrador
sapatos ou até os descreve o passo-a-passo Entrada
ado procedimentos utilizados da resoluçã o de um
supervis para enviar um e-mail. problema proporcionado
Entrada de Dados
ionados Problema 1: Problema 3:
e não Chupar uma bala. Somar dois nú meros. Saída
supervis
Algoritmo: Algoritmo:
ionados; Exibiçã o
Pegue a bala, Atribua o
Retire-a do papel, primeiro numero,
Coloque a bala na boca. Atribua o Decisão
segundo numero,
Programação de Obtenha a soma dos
Software nú meros. Estrutura de Decisã o
Lógica de
programação Problema 2: Problema 4: Exemplo:
Introduçã o à Ló gica de Enviar um e-mail Para resolução deste
Programaçã o exemplo será utilizado o
Ló gica Algoritmo: Algoritmo: Problema 3, do tó pico
“Ló gica é uma á rea da Abra o editor de e-mail, Descriçã o Narrativa:
filosofia que estuda o 13 Gabriela
CliqueCabral -
em redigir e-mail,
fundamento, a estrutura e http://www.brasilescola.com/filos
Selecione o
ofia/o-que-logica.htm
destinatá rio,
Escreva o e-mail
desejado,
Clique em Enviar.
(memó ria física) do nú meros, nã o poderá ser OR e
computador a fim de utilizada para operaçõ es NOT:
armazenar valores ou matemá ticas.
expressõ es e seus valores Valor 1 Operador Va
podem variar durante a
Verdadeiro AND Verd
execução do programa.
Verdadeiro AND F
Exemplo:
Variáveis Falso AND Verd
Operadores
Falso AND F
Lucro = Utilizados para a Verdadeiro OR Verd
Linguagem ValorVenda - resoluçã o de cá lculos Verdadeiro OR F
Algorítmica ValorVenda aritméticos, comparaçõ es Falso OR Verd
de valores (chamados de Falso OR F
Linguagem operadores relacionais) e
Algorítmica consiste em Verdadeiro NOT
testes ló gicos, estes sã o
uma pseudolinguagem de descritos da seguinte Falso NOT
Constantes – O valor
programaçã o, que tem forma:
sempre é fixo, nã o é
como funçã o facilitar o Imagine a seguinte
modificado durante a
entendimento de uma situaçã o, A = 6, B = 9, C
execução do programa.
linguagem de =2
Exemplo: Operadores
programaçã o qualquer,
Operadores Aritméticos
nesse caso os comandos Expressõe
de programaçã o sã o Relacionais
s
escritos na linguagem
nacional, em nosso caso, Sinal Sinal Função A=B AND B>C
Constante
em português: < + Adiçã o
Como A = 6, B = 9
Tipos de Variáveis > - Subtraçã o
e C = 2 a expressã o
Exemplo: <> * Multiplicaçã o assume os seguintes
Para resolução deste
As variá veis possuem <= / Divisã o valores e verificaçõ es:
exemplo será utilizado o
quatro tipos bá sicos: >= ** Exponenciaçã o 6 = 9 e 9 > 2
Problema 3, do tó pico
numérico, caractere, = Feita a
Descriçã o Narrativa:
alfanumérico e ló gico. verificação, o
Numérico – especial E resultado só será
para armazenar nú meros verdadeiro se
inteiros e reais, também OU ambas as
sã o utilizadas para condiçõ es forem
cá lculos matemá ticos; Not
verdadeiras, logo
Caracteres – 6 é diferente de 2,
Armazena um conjunto de Exemplos de portanto, o
caracteres nã o literais, operadores resultado é falso.
nã o é possível realizar aritméticos:
nenhum tipo de calculo A <> B AND B<C
com esse tipo de variá vel, subTotal := valoUn *
sua utilizaçã o ideal é Qtde
Nessa
voltada ao situaçã o, a
armazenamento de textos, 2+3*8
primeira
exemplo um nome, um expressão é
endereço, etc. Total := 4 *( 2 / valor )
verdadeira, pois, 6
Ló gico – utilizada para +3
é diferente de 9, já
testes e armazenamentos a segunda é falsa
Variáveis, constantes, ló gicos, assumem valores Exemplos de utilização porque, 9
operadores lógicos e verdadeiro e falso. de operadores
nã o é menor
tipos de dados Alfanumérico – relacionais:
que 2, portanto a
Voltada ao resposta é Falsa.
Variá vel – Em armazenamento de letras Se ( num1 < num2)
programaçã o de e/ou nú meros. Em entao
A>B NOT
computadores, variá veis determinados momentos
sã o espaços que ficam conter somente dados
numéricos ou somente
literais. Se enquan A primeira
utilizada to ( i vista a expressão
reservados normalmente para o armazenamento de <= 10) é falsa, pois, 6 é
na memó ria RAM faca menor que 9, mas
Variável Conteúdo Utilizaç
ã o dos A<B OR B>A Verdadeiro
Nome “Luis Boaygo dos operad como existe o
Alexandre ores operador de
Santos” AND, negaçã o NOT que
Idade 32

Peso 80,00
faz a inversã o da Linguagem de utilizadas para resolução realizar controle de fluxo
resposta, por tal Programaçã o de problemas de execuçã o.
motivo a resposta computacionais, ou seja,
é verdadeira. Em ambos os casos sã o utilizadas para a Quarta Geração:
acima, primeiro é criaçã o de programas de Linguagens Orientadas
calculada a média, a seguir computador (software). à Aplicações
Para essa é verificada se a média é Ao longo do tempo essas Seu objetivo é facilitar
expressão maior que 6, caso seja, linguagem estã o passando a programação de
retornar valor entã o caso seja é por transformaçõ es, computadores
verdadeiro, retornada a mensagem portanto, foram proporcionando a
apenas uma das afirmando que o aluno foi classificadas em 5 usuá rios finais a
expressõ es deve aprovado, caso nã o seja, a geraçõ es, sendo: resolvendo problemas que
ser verdadeira mensagem retornada é de antes só eram possíveis a
nesse caso 6 é reprova do aluno. Primeira Geração: programadores de
menor que 8, As estruturas de Linguagem de computador.
portanto repetiçã o servem para Máquina Exemplo: Geradores
retornou repetir comandos até que Esta é uma linguagem de relató rios,
verdadeiro. a condição proposta seja de Instruçã o, isso quer preenchimento de
satisfeita, as principais sã o dizer que, utiliza como formulá rios, Excel,
Estruturas de Decisão Enquanto (While) e Para suporte programaçã o Linguagens SQL.
e Repetiçã o (For), vejamos alguns biná ria operando
exemplos: diretamente endereço de Quinta Geração:
Sã o estruturas O algoritmo abaixo foi registradores ou memó ria, Linguagens de
utilizadas para tomadas desenvolvido em entã o existe comunicação Conhecimento
de decisã o de acordo com Linguagem de direta com o hardware. Sã o utilizadas
uma comparação feita na Programaçã o Pascal a fim principalmente na á rea de
estrutura do algoritmo, de exibir uma tabuada Segunda Geração: inteligência artificial, a
assumindo respostas escolhida pelo usuá rio, Linguagens Simbólicas partir desse geraçã o é
diferentes. A principal note que assim que o (Assembly) possível que os softwares
estruturas de comparação programa é executado a Desenvolvida com a autocriem bases de
das linguagens é a variá vel M recebe o valor finalidade de minimizar as conhecimento obtidas a
estrutura Se-Senã o (If – 1, essa é chamada de dificuldades encontradas partir de especialistas.
Else), vejamos um variá vel de controle, entã o na programaçã o em
exemplo em linguagem ao usuá rio digitar o valor notação biná ria. Compilação de
algorítmica e em da variá vel T solicitado A partir dessa geraçã o Programas
linguagem de pelo programa, é feita é possível que os usuá rios
programaçã o. uma verificaçã o através da operem utilizando Tradutores
estrutura While até que a mnemô nicos (palavras Sã o programas que
variá vel tenha o valor reservadas da linguagem traduzem o có digo fonte
igual a 10, esse valor é de programaçã o), criado em uma linguagem
alterado toda vez que a sistemas de grupos de de programaçã o para um
estrutura passa pelo có digos operacionais programa objeto
comando “M := M + 1”, ou semelhantes recebem equivalente escrito em
seja, inicialmente M nomes que lembram suas outra linguagem
possui valor 1, somando funçõ es. (denominada linguagem
mais 1 fica 2 e assim por objeto).
diante, até que ele tenha Terceira Geração: Compiladores –
valor 10. Linguagens Orientadas Convertem programas
ao Usuário (LOU) escritos em linguagem de
Sã o linguagens alto nível (linguagens de
procedimentais (utilizam programaçã o) para
Linguagem sequencias de comandos), programas equivalentes
Algorítmica tiveram início década de em linguagem simbó lica
60 como FORTRAN, ou de má quina,
ALGOL, COBOL, PL/I, ADA normalmente este é um
e algumas perduram até arquivo executá vel.
os dias de hoje, como é o Interpretadores – São
caso da Linguagem Pascal. programas de computador
Essas linguagens que fazem a leitura de um
revolucionaram o có digo fonte de uma
Linguagens de universo do linguagem de
Programação desenvolvimento de programaçã o interpretada
software, pois, através e o converte em có digo
As Linguagens de delas os softwares são executá vel. Em certos
programaçã o (LP) são os capazes de utilizar casos, o interpretador lê
meio de comunicaçã o instruçõ es de entrada e linha-por-linha e converte
entre usuá rio e saída efetuar cá lculos em có digo objeto (ou
computador e sã o aritméticos e/ou ló gicos e bytecode) à medida que
vai executando o Classe é algo (métodos) e variá veis Do ponto de vista
programa e, em outros generalizado, ou seja, uma possíveis (atributos). Um desta obra, problema é
casos, converte o có digo classe define o exemplo de herança: uma questã o que foge a
fonte por inteiro e depois comportamento dos Mamífero é super-classe uma determinada regra,
o executa. Uma objetos através de seus de Humano. Ou seja, um ou melhor, é o desvio de
particularidade do métodos (açõ es de uma Humano é um mamífero. um percurso, o qual
interpretador é que ele classe), Exemplo de classe: Há herança mú ltipla impede de atingir um
trabalha utilizando uma Cliente. quando uma sub-classe determinado objetivo com
má quina virtual(MV). Uma classe é dividida possui mais de uma super- eficiência e eficá cia.
um três partes, nome, classe. Essa relaçã o é Diferentes das
Estrutura de Dados atributos e métodos. normalmente chamada de diagramaçõ es clá ssicas,
Sã o utilizados para relaçã o "é um". que nã o fornecem grandes
manipulaçã o e Vejamos um exemplo Polimorfismo consiste subsídios para aná lise, os
organizaçã o de dados. A de ilustraçã o de uma em quatro propriedades diagramas de blocos são
organizaçã o e os métodos classe na UML: que a linguagem pode ter realmente o melhor
para manipular essa (atente para o fato de que instrumento para
estrutura possibilitam a nem toda linguagem avaliaçã o do problema do
diminuição do espaço orientada a objeto tem fluxo de informaçõ es de
ocupado pela memó ria implementado todos os um dado sistema. Por esse
RAM, além de tornar o tipos de polimorfismo): motivo deve- -se resolver
có digo-fonte do programa Universal:Inclusã o: um um problema de ló gica
mais simplificado. ponteiro para classe mã e (principalmente se for da
Uma pilha é uma das pode apontar para uma á rea de processamento
vá rias estruturas de dados instâ ncia de uma classe eletrô nico de dados)
que admitem remoçã o de filha (exemplo em Java: usando um procedimento
elementos e inserção de Subclasse é uma nova "List lista = new de desenvolvimento.
novos elementos estas classe que herda LinkedList();" (tipo de Para desenvolver um
organizaçõ es são feitas características (atributos polimorfismo mais bá sico diagrama correto, deve-se
através de pilhas e filas. e/ou métodos) de sua que existe) considerar como
As filas e pilhas sã o classe pai. Paramétrico: se procedimentos
estruturas usualmente Objeto – É algo do restringe ao uso de prioritá rios os itens
implementadas através de mundo real, que templates (C++, por seguintes:
listas, restringindo a proporciona vida a classe, exemplo) e generics - Os diagramas
política de manipulaçã o enquanto Aluno é uma (Java/C♯) devem ser feitos e
dos elementos da lista. Classe Luís Alexandre é Ad-Hoc: Sobrecarga: quebrados em vá rios
Uma fila estabelece um Objeto dessa classe. duas funçõ es/métodos níveis. Os primeiros
uma política chamada Método definem as com o mesmo nome mas devem conter apenas as
FIFO -- first in, first out habilidades dos objetos. assinaturas diferentes idéias gerais, deixando
(primeiro a entrar e Bidu é uma instâ ncia da Coerçã o: a linguagem para as etapas posteriores
primeiro a sair). Em classe Cachorro, portanto que faz as conversõ es os detalhamentos
outras palavras, a ordem tem habilidade para latir, implicitamente (como por necessá rios;
estabelecida na lista é a implementada através do exemplo atribuir um int a - Para o
ordem de inserçã o. No método de um latido. Um um float em C++, isto é desenvolvimento correto
momento de retirar um nó método em uma classe é aceito mesmo sendo tipos de um fluxograma, sempre
da lista, o nó mais antigo apenas uma definiçã o. A diferentes pois a que possível, deve ser
(o primeiro que entrou) é açã o só ocorre quando o conversã o é feita desenvolvido de cima para
o primeiro a ser retirado. método é invocado implicitamente) baixo e da esquerda para
através do objeto, no caso direita;
Orientação a Objetos Bidu. Dentro do programa, Princípios de - É incorreto e
a utilizaçã o de um método Resolução de "proibido" ocorrer
A orientaçã o a objetos deve afetar apenas um Problemas14 cruzamento das linhas de
(O.O.) é um padrã o de objeto em particular; Primeiramente, é fluxo de dados.
desenvolvimento de Todos os cachorros importante entender e Tome como exemplo
software utilizado em podem latir, mas você compreender a palavra uma escola qualquer, cujo
varias linguagens de quer que apenas Bidu dê o "problema". Pode-se dizer cá lculo da média é
programaçã o como por latido. Normalmente, uma que problema é uma realizado com as quatro
exemplo C, Java, PHP, etc. classe possui diversos proposta duvidosa, que notas bimestrais que
voltada a utiliza estes métodos, que no caso da pode ter numerosas determinam a aprovaçã o
métodos para diminuir a classe Cachorro poderiam soluçõ es, ou questã o nã o ou reprovaçã o dos seus
diferença semâ ntica entre ser sente, coma e morda. solvida e que é objeto de alunos. Considere ainda
a realidade e o modelo Herança (ou discussã o, segundo que o valor da média deve
Para entendermos o generalizaçã o) é o definição encontrada no ser maior ou igual a 7 para
funcionamento da O.O. é mecanismo pelo qual uma dicioná rio Aurélio. que haja aprovaçã o.
necessá rio conhecermos classe (sub-classe) pode
as bases que sustentam estender outra classe 14 Fonte: MANZANO, JA OLIVEIRA,
essas técnicas, a seguir (super-classe), and J. F. Algoritmos. "Lógica para
vejamos algumas aproveitando seus Desenvolvimento de Programação
característica: de Computadores." São Paulo:
comportamentos Érica (2000).
Estruturada sistemas, um sistema em
A técnica da ló gica programas e um
estruturada é a mais programa em mó dulos. A
usada pelos profissionais figura abaixo apresenta
de processamento um exemplo do tipo de
eletrô nico de dados. ló gica modular.
Possui características e
padrõ es particulares, os
quais diferem dos
modelos das linguagens
Diagrama de bloco para o cálculo da média escolar elaboradas por seus
fabricantes. Tem como
A segunda etapa apresenta um detalhamento no equse pontos fortes para
refere à entrada e saída, ou seja, deve
-se entrar com as quatro elaboraçã o futura de um
notas bimestrais para se obter, como resultado, o cálculo da programa, produzi-lo
média e assim definir a aprovação ou reprovação do aluno. A com alta qualidade e
figura abaixo apresenta o diagrama de blocos com mais baixo custo.
detalhes. A sequência, a
Exemplo
seleçãdaoutilização
e a iteraçãde ovariáveis
são
as três estruturas bá sicas
Particularidadespara
entreaLógicas
construçã o do
As representações gráficas de
diagrama de um diagrama
blocos. A de blocos
podem ser feitas defigura
várias maneiras e possuírem
abaixo seguinte estruturas
diferenciadas, porém isto não impede
apresenta um exemplo que a maneira de
solucionar o problema
do seja eficiente.
tipo de Segundo
ló gica Verzello nos diz
em uma de suas obras, assim como um arquiteto desenha e
estruturada. Português
escreve especificações para descrever como uma tarefa (por
Estruturado
exemplo, construção de um edifício) deverá ser efetuada e o
engenheiro do projeto senvolve
de um esquema detalhado das Como foi visto até
atividades de construção, um especialista em informaçãoagora, o diagrama de
desenvolve um plano, que será comunicado a outros, de blocos como é a primeira
o problema de processamento de dados deve ser resolvido. forma de notaçã o grá fica,
Para auxiliarmos na sua compreensão, mostraremos omocmas existe outra, que é
estes conceitos de estruturas, bem como as particularidades uma técnica narrativa
de conexões e dos procedimentos entre o método lógico,denominada
encaixam-se ou não para resolução dos problemas de pseudocó digo, também
Modular
processamento de dados. A seguir, são apresentados alguns conhecida como
A terceira etapa consiste em trabalhar o termo A técnica da ló gica
tipos de procedimentos indiv idualmente. português estruturado
"determinar a aprovação". Para ser possível determinar algo, modular deve ser ou chamada por alguns
é necessário estabelecer uma condição. Assim sendo, uma elaborada como uma
Linear de portugol.
condição envolve uma decisão a ser tomada segundo um estrutura de partes
A técnica lógica linear é conhecida como um modelo Esta técnica de
determinado resultado. No caso, a média. Desta forma, a independentes,
tradicional de desenvolvimento e resolução de um problema.algoritmizaçã o é baseada
condição de aprovação: média maior ou igual a 7 (sete), deve denominada
Não está ligada a regras de móou
de hierarquia dulos,
de estruturas de
em uma PDL - Program
ser considerada no algoritmo. Com isso, inclui
-se este bloco de cujode programação
linguagens específicas procedimento é
de computadores. Design Language
decisão, como mostra a figura abaixo. Devemos ente controlado
nder que este tipo depor um
procedimento está voltado
(Linguagem de Projeto
conjunto
à técnica matemática, de determinar
a qual permite regras. a atribuição
de Programaçã o). Nesta
Segundo
de recursos limitados, utilizandoJames
uma Martin,
coleção de elementosobra, estamos
suas metas
organizados ou ordenados por uma só sã opropriedade,
as de tal
apresentando-a em
forma que cada umseguintes:
deles seja cutado
exe passo a passo de cima português. A forma
para baixo, em que tenha - umDecompor
só "predecessor" um e um só original de escrita é
"sucessor". A figuradiagrama
abaixo apresenta em umpartesexemplo deste conhecida
tipo como inglês
de lógica. independentes; estruturado, muito
- Dividir um parecida com a notaçã o
problema complexo em da linguagem PASCAL. A
problemas menores e PDL (neste caso, o
mais simples; português estruturado) é
- Verificar a usada como referência
correçã o de um mó dulo de genérica para uma
blocos, linguagem de projeto de
independentemente de programaçã o, tendo
Muitas vezes é preferível construir o diagrama de blocos sua utilizaçã o como uma como finalidade mostrar
trabalhando ocm variáveis.
unidade em um processo uma notaçã o para
maior. elaboraçã o de
A modularizaçã o algoritmos, os quais
deve ser desenvolvida, se serã o utilizados na
possível, em diferentes definição, criação e
níveis. Poderá ser desenvolvimento de uma
utilizada para separar linguagem
um problema em computacional (Clipper,
C, Pascal, Delphi, Visual- D :
Objects) e sua O "
documentaçã o. Abaixo, é < , "
apresentado um exemplo — ,
deste tipo de algoritmo. " N
A 1 N
p p 4
r r e
o o s e
g v c s
r a r c
a d e r
m o v e
a " a v
s a
M e "
É n N "
D ã o S
I o t o
a m
A
a
2 :
v
a R
E : “
r
S ,
U "
RESULTADO :
, S
caractere L
O
N1, N2, N3, N4 : real T
N M
S A
2 A
O D
M O
e e
A <
s s
, -
c c
"
r r
M R e e
É e v v
D p a a
I r
A o " "
v N M
: a o é
d t d
r o a i
e " a
a fi 3
l m :
_ :
i s "
n e " ,
í ,
c M
i N É
o e 3 D
s I
leia N1, N2, N3, N4 c e A
SOMA <- N1 + N2 + r s
N3 + N4 e c e
v r s
MÉ DIA <- SOMA /
a e c
4
se (MÉ DIA >= 7) v r
" a e
entã o
N v
R
o " a
E
t N
S a o "
U
t R
L 1 a e
T
s
A : 4 u
l Este conjunto de fica preocupado quando A Figura a seguir é
t nú meros é usado quando sabe que sua conta uma representaçã o das
a queremos falar sobre o corrente no banco está relaçõ es de pertinência
d nú mero de amigos que com saldo de -300 reais. entre os conjuntos de
o temos ou quantos CDs Rapidamente iremos nú meros que analisamos
: musicais temos na nossa tentar transformar este até aqui.
coleçã o. Embora seja fácil nú mero negativo em
" imaginar que um pastor nú mero positivo, e o que
, de ovelhas há 3000 anos mais importante sabemos
atrá s pudesse usar este que precisamos de pelo
R conjunto com facilidade, é menos 300 reais para sair
E bom lembrar que o do vermelho.
S conceito do nú mero zero é O pró ximo conjunto na
U difícil de ser entendido. O nossa curta viagem pelos
L conjunto dos nú meros domínios dos nú meros é o
T naturais usado pelos conjunto dos nú meros
A primeiros seres humanos fracioná rios, que é
D nã o incluía o zero. Os representado por Q. Este
O pastores sabiam que se 20 conjunto é composto por
ovelhas tinham ido para todos os nú meros que Os dados numéricos
fim os campos, eles tinha de podem ser escritos como que os algoritmos que
esperar pelas mesma 20 uma fraçã o da forma p/q iremos criar e que a
A diferença entre uma ovelhas na volta à noite. onde p e q pertencem ao maioria dos
linguagem de Agora se não havia conjunto dos nú meros computadores manipulam
programaçã o de alto nível ovelhas para que inteiros. sã o de dois tipos:
utilizada em computaçã o e precisaríamos contar, Este conjunto pode ser
uma PDL é que esta (seja somar ou subtrair? A definido como: - Dados inteiros
escrita em português, natureza tem horror ao Q = {p/q | p, q - Dados reais
inglês ou qualquer outro vá cuo e o nada é um pertencem a Z} Neste ponto é
idioma) nã o pode ser conceito complicado para Continuando nesta importante assinalar dois
compilada em um os seres humanos. O excursã o vamos para o fatos importantes.
computador (por nú mero zero é uma conjunto dos nú meros Primeiro computadores
enquanto). Porém, invençã o dos matemá ticos reais (R) que é a uniã o do trabalham com uma base
existem "Processadores hindus e é recente, sendo conjunto dos nú meros diferente da base que
de PDL" que possibilitam introduzido em XXXX fracioná rios e o dos usamos todos dias que é a
traduzir essa linguagem aproximadamente. nú meros irracionais. base 10. Computadores
numa representaçã o O conjunto dos Nú meros irracionais não usam a base 2, e no
grá fica de projeto, nú meros naturais é sã o os nú meros que nã o processo de conversã o
fornecendo uma subconjunto dos conseguem pensar, mas entre bases podem
variedade de informaçõ es, conjunto dos nú meros sim aqueles que nã o ocorrer problemas de
como: tabelas de inteiros que é definido podem ser expressos por perda de dígitos
referência cruzada, mapas como uma fraçã o p/q. Um significativos. Por
de aninhamento, índice Z = {...,-3,-2,- exemplo muito conhecido exemplo, o nú mero real
operacional do projeto, 1,0,+1,+2,+3,...} de nú mero irracional é o 0.6 ao ser convertido para
entre tantas outras. Aqui estamos falando PI que é igual a 3.14159... a base dois gera uma
de conceitos mais O ú ltimo conjunto é o dízima perió dica.
Tipos de dados15 complicados que hoje em dos nú meros complexos. Outro fato importante
Existem três tipos dia já fazem parte do Neste conjunto os é que a largura das
bá sicos de dados que nosso dia a dia. Estamos nú meros são palavras de memó ria do
iremos manipular nos no domínio dos nú meros representados da seguinte computador é limitada e
algoritmos que iremos relativos, que incluem os maneira n = a + ib portanto o nú mero de
criar: nú meros positivos, o zero Os nú meros a e b são dígitos biná rios que
- Dados numéricos e os nú meros negativos. A nú meros reais e i podem ser armazenados é
- Dados literais ou mente humana teve de representa a raiz função deste tamanho.
alfanuméricos atingir graus de abstraçã o quadrada do nú mero Isto é similar ao que
- Dados ló gicos maiores para imaginar inteiro -1. Quando b é aconteceria se tivéssemos
operaçõ es que incluiam igual a 0 o nú mero é um que limitar o nú mero o
Dados Numéricos nú meros negativos. Hoje nú mero pertencente ao dígitos decimais que
O conjunto de dados em dia nã o é necessá rio conjunto dos reais. Como usamos para representar
mais comuns é o de ser um matemá tico pó s- podese ver, a medida que os nú meros de nossas
nú meros naturais, que é graduado para trabalhar fomos passando de um contas no banco. Por
representado por N. Este facilmente com este tipo conjunto para outro, exemplo, assuma que só
conjunto é definido como de nú meros. Todos nó s aumentou o nível de podemos armazenar
somos capazes de abstraçã o das quantidades quantias com 6 dígitos
N = {0,1,2,3,...} perceber que uma que os nú meros inteiros e dois decimais,
temperatura de -3 graus pertencentes aos deste modo se
15 Fonte: centígrados e mais fria do conjuntos representam. ganhá ssemos na loteria R$
http://equipe.nce.ufrj.br/adriano/ que +3 graus. Quem nã o 1.000.000,00 nã o seria
algoritmos/apostila/tipos.htm
possível representar este exemplos de nú meros a b) 0.333... Nã o é
valor no extrato do banco. inteiros: : possível usar
Portanto no processo de a) +3 representaçã o de
conversã o e desconversã o b) 3 [+,-]algarismo{algaris dízimas
entre bases pode haver c) -324 mo}.algarismo{algaris
perda de informaçã o. Como exemplos de mo}. Dados Literais
formas erradas de Ou seja um nú mero Dados literais servem
- Dados Numéricos representaçã o de real pode ou nã o ter sinal, para tratamento de textos.
Inteiros nú meros inteiros, temos: em seguida um conjunto Por exemplo, um
O conjunto dos dados a) +3.0 Nã o é de pelo menos um algoritmo pode necessitar
inteiros pode ser possível usar algarismo, um ponto imprimir um aviso para os
definido como ponto decimal decimal e depois um usuá rios, ou um
Z={...,-3,-2,0,1,2,...}. b) + 123 Espaços conjunto de pelo menos comentá rio junto com um
As linguagens usadas em branco nã o um algarismo. É resultado numérico. Outra
para programar sã o permitidos importante notar que o possibilidade é a
computadores são muito separador entre a parte necessidade de ler dados
exigentes com a maneira - inteira e a fracioná rio é o tais como nomes, letras,
com que os dados sã o D ponto e nã o a vírgula. etc.
representados. Por esta a S Este tipo de dados
razã o vamos passar a d ã pode ser composto por
definir como deveremos o o um ú nico caractere ou por
representar os dados nos s um conjunto de pelo
algoritmos. Os dados N e menos um destes
inteiros tem a seguinte u x elementos. Conjuntos sã o
forma: m e conhecidos como cadeias
Nú meroInteiro = é m de caracteres, traduçã o da
[+,-]algarismo{algaris r p expressão em inglês,
mo} i l "character string".
Neste texto iremos c o Um ponto importante
usar uma notaçã o especial o s que deve ser abordado
para definir como iremos s agora é o que se entende
representar os elementos R d por caractere. Caracteres
da linguagem. A medida e e sã o basicamente as letras
que formos apresentando a minú sculas, maiú sculas,
os elementos a notaçã o i n algarismos, sinais de
será também explicada. s ú pontuaçã o, etc. Em
No caso da definiçã o dos O m computaçã o caracteres
dados inteiros temos os s e sã o representados por
seguintes elementos. O d r có digos biná rios e o mais
elemento bá sico é o a o disseminado de todos é o
algarismo que é um dos d s có digo ASCII. Este padrã o
seguintes caracteres: o foi definido nos Estados
algarismo = 0 | 1 | 2 | 3 s r Unidos e é empregado
|4|5|6|7|8|9 r e pela quase totalidade dos
Os elementos entre e a fabricantes de
colchetes sã o opcionais. a i computadores e
Portanto, o sinal de + e - i s programas. O apêndice
entre colchetes significa s : mostra a tabela ASCII com
que um nú mero inteiro t estes có digos.
pode ou nã o ter sinal. Em e a Os caracteres que
seguida temos um m ) normalmente são
algarismo que é empregados nos
obrigató rio. Isto é dados a 0 algoritmos sã o os
inteiros tem de ter pelo . seguintes:
menos um algarismo. A s 5 Letras maiú sculas:
seguir temos a palavra e A|B|C|D|E|F|G|
algarismo entre chaves, o g a) +0.5 H|I|J|K|L|M|N|
que significa que um u a) -3.1415 O|P|Q|R|S
nú mero inteiro deve ter i Abaixo mostramos |T|
pelo menos um algarismo n exemplos de formas U
e pode ser seguido por t erradas de representaçã o
uma sequência de e de nú meros reais, temos: |
algarismos. Deste modo a) +3,0 Vírgula
elementos que aparecem f nã o pode ser V
entre chaves sã o o separador entre
elementos que podem ser r as |
repetidos. São portanto m partes real e inteira
W
- float: Nú mero específica do vetor pode
| Dados Lógicos em ponto flutuante de ser acessada diretamente
Este tipo de dados é precisã o simples. através do seu índice.
X intensamente aplicado Sã o conhecidos Matriz: Uma matriz é
durante o processo de normalmente como uma coleçã o de variá veis
| tomada de decisõ es que o nú meros reais. de um mesmo tipo que é
computador - double: Nú mero referenciada por um nome
Y frequentemente é em ponto flutuante de comum;
obrigado a fazer. Em precisã o dupla Vetores sã o matrizes
| muitos textos este tipo de - void: Este tipo unidimensionais;
dados também é chamado serve para indicar que um Matrizes
Z de dados booleanos, resultado nã o tem um tipo bidimensionais: Uma
devido a George Boole, definido. Uma das matriz bidimensional é
L matemá tico que deu ao aplicaçõ es deste tipo em C uma matriz de matrizes
e nome à á lgebra (á lgebra é criar um tipo vazio que unidimensionais;
t booleana) que manipula pode posteriormente ser
r este tipo de dados. Os modificado para um dos Matrizes de uma
a dados deste tipo somente tipos anteriores. Dimensão ou
s podem assumir dois Vetores17
valores: verdadeiro e ESTRUTURAS DE Este tipo de estrutura
m falso. DADOS: VETORES E em particular é também
i Computadores tomam MATRIZES16 denominado por alguns
n decisõ es, durante o Os tipos bá sicos profissionais de como
ú processamento de um (inteiros, reais, matrizes unidimensionais.
s algoritmo, baseados caracteres) nã o sã o Sua utilizaçã o mais
c nestes dois valores. Por suficientes para exprimir comum está vinculada à
u exemplo, considere a estruturas de dados criaçã o de tabelas.
l sentença a seguir que é complexas em algoritmos. Caracteriza-se por ser
a um caso típico de decisão Um Vetor é uma das defini da uma ú nica
s que o computador é capaz mais simples variá vel dimensionada
: de tomar sem intervençã o estruturas de dados. com um determinado
humana. Se está chovendo Vetores sã o, tamanho. A dimensã o de
a|b|c|d|e|f|g|h| entã o procurar guarda- essencialmente, listas de uma matriz é constituída
i|j|k|l|m|n|o|p| chuva. informaçõ es de um por
q|r|s|t| Nesta sentença temos mesmo tipo, armazenadas constantes inteiras e
u|v|w|x|y|z a questã o ló gica "Se está em posiçã o contígua da positivas. Os nomes dados
Algarismos: chovendo". Esta expressã o memó ria, em ordem às matrizes seguem as
0|1|2|3|4|5|6|7 somente pode ter como indexada. mesmas regras de nomes
|8|9 resultado um de dois Vetores sã o usados utilizados para indicar as
Caracteres de valores: verdade ou falso. nos casos em que um variá veis simples.
pontuaçã o: Nos nossos algoritmos conjunto de dados do Para ter uma idéia de
;|:|!|?|*|(|)|\|/ estes valores serã o mesmo tipo precisa ser como utilizar matrizes em
|+|-|=|<|> representados por armazenado em uma uma determinada
verdade e falso. mesma estrutura. situaçã o, considere o
- Constantes Caracter Um vetor é uma seguinte problema:
Caracteres podem Tomando como estrutura de dados "Calcular e apresentar a
aparecer sozinhos, e neste exemplo a linguagem C, os homogênea, isto é, agrupa média geral de uma turma
caso sã o chamados de dados podem assumir valores de um mesmo de 8 alunos. A média a ser
constante caracter e são cinco tipos bá sicos que tipo; obtida deve ser a média
representados entre o sã o: O tipo do vetor é o geral das médias de cada
caracter '. Abaixo mesmo tipo dos dados que aluno obtida durante o
mostramos exemplos de ele armazena. ano letivo". Desta forma
constantes caracter: Um vetor é uma será necessá rio somar
'a' estrutura de dados todas as médias e dividi-
- char: Caracter: O las por 8. A tabela
'A' indexada, ou seja:
valor armazenado é um seguintes apresenta o
';' - cada valor pode
caractere. Caracateres nú mero de alunos, suas
'+' ser acessado através de
geralmente são notas bimestrais e
um índice, o qual
armazenados em có digos respectivas médias anuais.
- Cadeias de Caracter corresponde a uma
(usualmente o có digo É da média década aluno
Cadeias de caracteres posiçã o no vetor;
ASCII). que será efetuado o
sã o conjuntos de um ou - os índices sã o
- int: Nú mero cá lculo da média da
mais caracteres e sã o valores ínteiros e
inteiro é o tipo padrão e o turma.
cercados pelo caracter ". positivos (0, 1, 2, 3,...);
tamanho do conjunto que
Por exemplo: - em outras
pode ser representado
"Linguagem de palavras, uma posiçã o 17 Fonte: MANZANO, JA OLIVEIRA,
normalmente depende da
programaçã o" má quina em que o and J. F. Algoritmos. "Lógica para
"Qual é o seu nome?" 16 Fonte: Desenvolvimento de Programação
programa está rodando. http://www.deinf.ufma.br/~vidal/ de Computadores." São Paulo:
"12345" algoritmos1/vetoresmatrizes Érica (2000).
8 elementos do conjunto ao diagrama de blocos e
Agora basta escrever mesmo tempo. codificação em português
um programa para efetuar e No caso do exemplo do estruturado da leitura das
o cá lculo das 8 médias de s cá lculo da média dos 8 notas dos 8 alunos, cá lculo
cada aluno. Para c alunos, terse-ia entã o uma da média e a sua
representar a média do r ú nica variá vel indexada (a apresentação.
primeiro aluno será e matriz) contendo todos os
utilizada a variá vel MD1, v valores das 8 notas. Isto Diagrama de Blocos
para o segundo MD2 e a seria representado da
assim por diante. Entã o seguinte forma:
tem-se: M MD[1] = 4.5 MD[2] =
MD1 =4.5 É 6.5 MD[3] = 8.0 MD [4]
MD2 =6.5 D =3.5 MD[5] = 6.0 MD[6] =
MD3 =8.0 I 7.0 MD[7] = 6.5 MD[8] =
MD 4 = 3.5 A 6.0
MD 5 = 6.0 Observe que o nome é
fim um só . O que muda é a
MD 6 = 7.0
MD 7 = 6.5 informação indicada
Perceba que para dentro dos colchetes. A
MD 8 = 6.0
receber a média foram esta informaçã o dá -se o
utilizadas oito variá veis. nome de índice, sendo
Com o conhecimento
Com a técnica de matrizes este o endereço em que o
adquirido até este
poderia ter sido utilizada elemento está
momento, seria entã o
apenas uma variá vel com armazenado. E necessá rio
elaborado um programa
a capacidade de que fique bem claro que
que efetuaria a leitura de
armazenar oito valores. elemento é o conteú do da
cada nota, a soma delas e
a divisã o do valor da soma matriz, neste caso os
Operações Básicas com valores das notas. No caso
por 8, obtendose desta
Matrizes do Tipo Vetor de MD[1 ] = 4.5, o nú mero
forma a média, conforme
Uma matriz de uma 1 é o índice; o endereço
exemplo abaixo em
dimensã o ou vetor será , cujo elemento é 4.5 está
português estruturado:
neste trabalho, armazenado.
representada por seu
programa
nome e seu tamanho Atribuição de uma
MÉ DIA_TURMA
(dimensão) entre Matriz
var
colchetes. Desta forma Anteriormente, foram Diagrama de blocos
MD1, MD2, MD3,
seria uma matriz utilizadas vá rias para leitura dos elementos
MD4, MD5, MD6,
MD[1 ..8], sendo seu nome instruçõ es em português de uma matriz tipo vetor.
MD7, MD8 : real
MD, possuindo um estruturado para poder
SOMA, MÉ DIA : real
tamanho de 1 a 8. Isto definir e montar um programa
início significa que poderã o ser programa. No caso da MÉ DIA_TURMA
SOMA <- 0 armazenados em MD até utilização de matrizes, var
leia <- MD1, MD2, oito elementos. Perceba será definida a instruçã o MD : conjunto[1..8]
MD3, MD4, MD5, que na utilizaçã o de conjunto que indicará em de real
MD6, MD7, MD8 variá veis simples existe português estruturado a SOMA, MÉ DIA : real
SOMA <- MD1 + MD2 um regra: uma variá vel utilização de uma matriz, I
+ MD3 + MD4 + MD5 somente pode conter um
+ MD6 + MD7 tendo como sintaxe:
valor por vez. No caso das VARIÁ VEL : :
+ matrizes, poderã o
M conjunto[<dimensã o>] de
armazenar mais de um ctipo de dado>, sendo que i
D valor por vez, pois são
8 <dimensã o> será a n
dimensionadas indicaçã o dos valores t
exatamente para este fim. inicial e final do tamanho e
M
Desta forma poder-se-á do vetor e <tipo de dado> i
É
manipular uma se o vetor em questã o irá r
D
quantidade maior de utilizar valores reais, o
I
informação com pouco inteiros, ló gicos ou
A
trabalho de caracteres. i
processamento. Deve-se n
<
apenas considerar que Leitura dos Dados de í
-
com relaçã o à uma Matriz c
S manipulação dos A leitura de uma i
O elementos de uma matriz, matriz é processada passo o
M eles ocorrerã o de forma a passo, um elemento por
A individualizada, pois nã o é vez. A instruçã o de leitura S
possível efetuar a é leia seguida da variá vel O
/ manipulação de todos os mais o índice. A seguir, M
sã o apresentados A
< M
r É
- D
I
0 A

p <
a r
r -
a
S
I O
M
A Tenha cuidado para
d nã o confundir o índice
e
/ com o elemento. índice é o
endereço de alocaçã o de
1
8 uma unidade da matriz,
enquanto elemento é o
a
e conteú do armaze¬nado
t em um determinado
é s
c endereço.
r Diagrama de bloco
8
e Escrita dos Dados de para escrita dos
v uma Matriz elementos de uma matriz
p
a O processo de escrita tipo vetor.
a
de uma matriz é bastante
s
M parecido com o processo programa
s
E de leitura de seus MÉ DIA_TURMA
o
D elementos. Para esta var
I ocorrência deverá ser MD : conjunto[1..8]
1 A utilizada a instruçã o de real
escreva seguida da SOMA, MÉ DIA : real
f fim indicaçã o da variá vel e seu I
a
índice. Supondo que apó s
ç
Veja que o programa a leitura das 8 notas, :
a
ficou mais compacto, além houvesse a necessidade de
de possibilitar uma apresentá -las antes da i
leia MD[I]
mobilidade maior, pois se apresentação do valor da n
S houver a necessidade de média. Abaixo são t
O
efetuar o cá lculo para um apresentados o diagrama e
M
nú mero maior de alunos, de blocos e a codificaçã o i
A
basta dimensionar a em português estruturado r
matriz e mudar o valor da escrita das notas dos 8 o
<
final da instruçã o para. alunos antes de ser
r
Observe que no exemplo apresentado o cá lculo da i
-
anterior, a leitura é média. n
processada uma por vez. í
S
O Desta forma, a matriz é Diagrama de Blocos c
M controlada pelo nú mero i
A do índice que faz com que o
cada entrada aconteça em
+ uma posiçã o diferente da S
outra. Assim sendo, a O
M matriz passa a ter todas as M
D notas. A tabela seguinte, A
[ mostra como ficarã o os
I valores armazenados na <
] matriz: -

f 0
i
m p
_ a
p r
a a
r
a I
A fim deste processo de
d trabalho. O método mais
e < AS SUB-ROTINAS adequado para a
- No geral, problemas programaçã o estruturada
1 complexos exigem é o Top-Down (De cima
S algoritmos complexos. para baixo) o qual se
a O Mas sempre é possível caracteriza basicamente
t M dividir um problema por:
é A grande em problemas Antes de iniciar a
menores. Desta forma, construçã o do programa,
8 / cada parte menor tem um o programador deverá ter
algoritmo mais simples, e em mente as tarefas
p 8 é esse trecho menor que é principais que este deverá
a chamado de sub-rotina. executar. Nã o é necessá rio
s p Uma sub-rotina é na saber como funcionarã o,
s a verdade um programa, e somente saber quantas
o r sendo um programa sã o.
a poderá efetuar diversas Conhecidas todas as
1 tarefas a serem
operaçõ es computacionais
I executadas, tem-se em
(entrada, processamento e
f
saída) e deverá ser tratada mente como deverá ser o
a d
como foram os programas programa principal, o qual
ç e
projetados até este vai controlar todas as
a
momento. As sub-rotinas outras tarefas distribuídas
1
sã o utilizadas na divisã o em suas subrotinas.
l
de algoritmos complexos, Tendo definido o
e a
permitindo assim possuir programa principal, é
i t
a modularizaçã o de um iniciado o processo de
a é
determinado problema, detalhamento para cada
M 8 considerado grande e de sub-rotina. Desta forma
D difícil soluçã o. sã o definidos vá rios
[ p Ao trabalhar com esta algoritmos, um para cada
I a técnica, pode-se deparar rotina em separado, para
] s com a necessidade de que se tenha uma visã o do
s dividir uma sub-rotina em que deverá ser executado
S o outras tantas quantas em cada mó dulo de
O forem necessá rias, programa. Existem
M 1 buscando uma soluçã o programadores que
A mais simples de uma estabelecem o nú mero
f parte do problema maior. máximo de linhas de
< a O processo de dividir sub- programa que uma rotina
- ç rotinas em outras é deverá possuir. Se o
a denominado Método de nú mero de linhas
S Refinamento Sucessivo. ultrapassa o limite
O escreva MD[I] preestabelecido, a rotina
M f O Método Top-Down em desenvolvimento é
A i O processo de dividida em outra sub-
m programar um rotina (é neste ponto que
+ _ computador torna-se se aplica o método de
p bastante simples quando refinamento sucessivo).
M a aplicado o método de O método Top-Down
D r utilização de sub-rotinas faz com que o programa
[ a (mó dulos de programas). tenha uma estrutura
I Porém, a utilização dessas semelhante a um
] e sub-rotinas deverá ser organograma. A figura
s feita com aplicaçã o do abaixo apresenta um
f c método top down. exemplo desta estrutura.
i r Um método bastante A utilizaçã o do método
m e adequado para a "de cima para baixo"
_ v programaçã o de um permite que seja efetuado
p a computador é trabalhar cada mó dulo de programa
a com o conceito de em separado. Desta forma,
r M programaçã o estruturada, cada um pode ser testado
a É pois a maior parte das separadamente
D linguagens de garantindo que o
M programa completo esteja
I programaçã o utilizadas
É sem erro ao seu término.
A atualmente também sã o, o
D
que facilita a aplicação
I
Outro detalhe a ser efetuou a chamada da sub- de preferência na mesma
considerado é que muitas rotina. A melhor maneira de ordem em que estã o
vezes existem em um Com relaçã o à criaçã o entender como trabalhar mencionadas no
programa trechos de da rotina, será idêntica a com uma sub-rotina é organograma.
có digos que são repetidos tudo o que já foi estudado fazer a sua aplicaçã o em Programa Principal
vá rias vezes. Esses sobre programaçã o. Na um programa mais 1- Aprese
trechos poderã o ser representaçã o do complexo. Para tanto, ntar um menu de
utilizados como diagrama de blocos, nã o imagine o seguinte seleçã o com cinco
subrotinas, há quase nenhuma problema: opçõ es:
proporcionando um mudança, a nã o ser pela 1-Adiçã o
programa menor e mais troca das identificaçõ es Criar um programa 2-Subtraçã o
fá cil de ser alterado num Início e Fim nos símbolos calculadora que apresente 3-Multiplicaçã o
futuro pró ximo. de Terminal e o novo um menu de seleçõ es no 4- Divisã o
símbolo Sub-rotina, que é programa principal. Esse 5-Fim de
idêntico ao símbolo de menu deverá dar ao Programa
processamento, porém se usuá rio a possibilidade de
caracteriza pelas linhas escolher uma entre quatro 2- Ao ser
paralelas às bordas operaçõ es aritméticas. selecionado um valor,
esquerda e direita, Escolhida a opção a rotina
devendo ser utilizado no desejada, deverá ser correspondente
programa chamador. A solicitada a entrada de deverá ser executada;
sintaxe em português dois nú meros, e 3- Ao
estruturado será também processada a operação escolher o valor 5, o
idêntica ao estudo deverá ser exibido o programa deverá ser
anterior. Observe em resultado. encerrado.
seguida, o có digo em
português estruturado. Algoritmo Rotina 1 - Adiçã o
A utilizaçã o de sub- Português Estruturado Note que esse 1- Ler dois
rotinas e o uso do método procedimento <nome do programa deverá ser um valores, no caso
Top-Down na procedimento> conjunto de cinco rotinas, variá veis A e B;
programaçã o permitem ao var sendo uma principal e 2- Efetuar
programador elaborar < quatro secundá rias. A a soma das variá veis A
rotinas exclusivas. Por v rotina principal efetuará o e B, implicando o seu
exemplo, uma rotina a controle das quatro resultado na variá vel
somente para entrada, r rotinas secundá rias que, R;
outra para a parte de i por sua vez, pedirã o a 3- Aprese
processamento e outra á leitura de dois valores, ntar o valor da
para a saída dos dados. Se v farã o a operaçã o e variá vel R.
o leitor comparar esta e apresentarã o o resultado
proposta com o que foi i obtido. Afigura 11.2 Rotina 2 - Subtraçã o
estudado anteriormente, s apresenta um 1- Ler dois
verá suas vantagens. > organograma com a ideia valores, no caso
Lembre-se dos programas
de hierarquizaçã o das variá veis A e B;
anteriores todos os seus i rotinas do programa. A 2- Efetuar
algoritmos de saída n quinta opçã o nã o se a subtraçã o das
obrigavam de certa forma i caracteriza por ser uma variá veis Ae B,
efetuar primeiro a entrada c rotina, apenas a opçã o que implicando o seu
dos dados. i vai encerrar o looping de resultado na variá vel
o controle do menu.
Procedimentos R;
Um procedimento é 3- Aprese
<
um bloco de programa ntar o valor da
i
contendo início e fim e variá vel R.
n
será identificado por um s
nome, por meio do qual Rotina 3 -
t
será referenciado em Multiplicaçã o
r
qualquer parte do 1- Ler dois
u
programa principal ou do valores, no caso
ç
programa chamador da variá veis A e B;
õ
rotina. Quando uma sub- 2- Efetuar
e
rotina é chamada por um Tendo uma ideia da a multiplicaçã o das
s
programa, ela é executada estrutura geral do variá veis A e B,
>
e ao seu término o programa, será escrito em implicando o seu
controle de separado cada algoritmo resultado na variá vel
f
processamento retorna com os seus detalhes de R;
i
automaticamente para a operaçã o. Primeiro o 3- Aprese
m
primeira linha de programa principal e ntar o valor da
instruçã o apó s a linha que depois as outras rotinas, variá vel R.
Rotina 4 - Divisã o Diagramas de blocos e
1- Ler dois para o programa a
valores, no caso calculadora com sua sub- l
variá veis A e B; rotina
2- Efetuar i
a divisã o das variá veis Português Estruturado n
A e B, implicando o Em có digo português i
seu resultado na estruturado, serã o c
variá vel R; mencionadas em primeiro i
3- Aprese lugar as sub- -rotinase por o
ntar o valor da ú ltimo o programa
variá vel R. principal. Quando no e
programa principal ou s
Observe que em cada rotina chamadora for c
rotina serã o utilizadas as referenciada uma sub- r
rotina, ela será sublinhada e
mesmas variá veis, mas
para facilitar sua v
elas não serã o executadas
visualizaçã o. Observe no a
ao mesmo tempo para
todas as operaçõ es. Serã o programa a variá vel
"
utilizadas em separado e OPÇÃ O para controlar a
R
somente para a rotina opçã o do operador que é
o
escolhida. do tipo caractere. Outro
t
detalhe a ser observado é
i
Diagramas de Blocos o nome de cada rotina
n
Perceba que na mencionado junto da
a
diagramaçã o cada rotina é verificação da instruçã o se
definida em separado no mó dulo de programa d
como um programa principal. programa e
independente. O que CALCULADORA
muda é a forma de v A
identificaçã o do símbolo a d
Terminal. Em vez de se r i
utilizarem os termos ç
Início e Fim, utilizam-se o O ã
nome da subrotina para P o
iniciar e a palavra Ç "
Retomar para encerrar. Ã
Com relaçã o ao mó dulo O e
principal, ele faz uso do s
símbolo Sub-rotina que : c
indica a chamada de uma r
sub-rotina. c e
a v
r a
a
c "
t E
e n
r t
e r
e

{Sub-rotinas de u
cá lculos} m
procedimento
ROTSOMA v
var a
R l
, o
r
A
, p
a
B r
a
:
A
r :
“ escreva "Rotina de es escreva "A
Subtraçã o" escreva "Entre cr multiplicaçã
l um valor para A: " e o de A com
e leia A v B é = ", R
i e a fim
a s "
c R procedimento
A r ot ROTDIVISÃ O var
e in R, A, B: real
esc v a i
rev a d n
a e i
"En " M c
tre E ul i
um n ti o
val t pl
or r ic e
par e a s
a ç c
B: " u ã r
leia m o e
BR " v
<- v e a
A+ a sc
B l r "
esc o e R
rev r v o
a a t
"A p " i
so a E n
ma r n a
de a tr
A e d
co B u e
m : m
Bé v D
= ", “ al i
R o v
fim l r i
e p s
procedimento i a ã
ROTSUBTRAÇÃ O a r o
v a ”
a B A:
r “ escreva "Entre um
R le v
R ia a
, < A l
- escreva "Entre um o
A valor para B: " r
, A l
e p
B - i a
: a r
B a
r B
e escreva A
a "A R :
l subtraçã
o de A < "
i com B é r
n = ", R - l
i fim e
c A i
i procedimento a
o ROTMULTIPLICAÇÃ O *
var A
R, A, B : real B
inicio
escreva "Entre um rotdivisã o m c
valor para B: " fim_se i
l fim_enquanto A sua principal o
e fim diferença está no fato de
i uma funçã o retornar um Z
a Funções determinado valor, que é
Função também é um retornado no pró prio <
B bloco de programa, como nome da funçã o. Quando -
sã o os procedimentos, se diz valor, devem ser
R contendo início e fim e levados em consideraçã o A
sendo identificada por um os valores numéricos,
< nome, por meio do qual ló gicos ou literais +
- também será referenciada (caracteres).
em qualquer parte do B
A programa principal. Uma PARÃMETROS
sub-rotina de funçã o é na Os parâ metros têm e
/ verdade muito parecida por finalidade servir como s
com uma sub-rotina de c
um ponto de comunicaçã o
B r
procedimento. A sintaxe bidirecional entre uma
e
em português estruturado sub-rotina e o programa
v
escre é também idêntica ao principal ou uma outra
a
va "A estudo anterior. Observe sub-rotina
divisã em seguida, o có digo em hierarquicamente de nível
Z
o de A português estruturado de mais alto. Desta forma, é
com B uma funçã o. Português possível passar valores de
f
é = ", Estruturado uma sub-rotina ou rotina i
R fim funçã o <nome da chamadora à outra sub- m
funçã o> rotina e vice-versa,
(Programa (parâ metros) : <tipo utilizando parâ metros que
Principal} da função> podem ser formais ou Observe que a variá vel
início v reais. Z é local e está sendo
OPÇÃ O <- a usada para armazenar a
"0" r Parâmetros Formais e soma das variá veis A e B
enquanto Reais que representam os
(OPÇÃ O <> < Serã o considerados parâ metros formais da
"5") faça v parâ metros Formais sub-rotina CALCSOMA.
escreva "1 - a quando forem declarados
Adiçã o" Serã o considerados
r por meio de variá veis
escreva "2 - parâ metros Reais quando
i juntamente com a
Subtraçã o" substituírem os
á identificação do nome da
escreva "3 - v parâ metros formais,
sub-rotina, os quais serã o quando da utilizaçã o da
Multiplicaç e tratados exatamente da
ã o" i sub-rotina por um
mesma forma que são programa principal ou por
escreva "4 - s tratadas as variá veis
Divisã o" > uma rotina chamadora.
globais ou locais. Considere como exemplo
escreva "5 - Considere como exemplo
Fim de i de parâ metros reais o
de parâ metros formais o có digo em português
Programa" n có digo em português estruturado do programa
escreva í estruturado da sub-rotina que faz uso da sub-rotina
"Escolha c apresentado abaixo: CALCSOMA apresentado
uma opçã o: i
procedimento em seguida: inicio leia X
" leia o
CALCSOMA(A, B : inteiro) leia V calcsoma (X. Y) leia
OPÇÃ O se
var W leia T calcsoma (W, T)
(OPÇÃ O = <
"1") entã o Z calcsoma(8, 2)
i
rotsoma n fim
fim_se se :
s
(OPÇÃ O = t No trecho acima, toda
"2") entã o i
r vez que a sub-rotina
rotsubtracã n
u CALCSOMA é chamada,
o fim_se se t
ç faz-se uso de parâ metros
(OPÇÃ O = e
õ reais. Desta forma, são
"3") entã o i
e parâ metros reais as
rotmultioli r
s variá veis X, Y, W e T, pois
cacã o o
> seus valores sã o
fim_se se fornecidos pela instruçã o
(OPÇÃ O = i
f n leia e também os valores 8
"4") entã o i e 2.
í
Pesquisa Sequencial e partir do primeiro - caso médio: C(n) mostra que a função
Binária18. registro, pesquise = (n + 1) / 2 Pesquisa buscaSequencial está
sequencialmente até sem sucesso: correta.
Estudo de como encontrar a chave Quantas iteraçõ es a
recuperar informaçã o a procurada; entã o pare. - C (n) = n + 1. função faz? Ou melhor,
partir de uma grande Armazenamento de quantas vezes a funçã o
massa de informaçã o um conjunto de registros O algoritmo de compara x com elementos
previamente armazenada. por meio de um array. pesquisa sequencial é a de v? No pior caso, x é
A Busca (find): melhor escolha para o comparado com cada
- A informaçã o é problema de pesquisa elemento do vetor, e
dividida em registros. - Pesquisa retorna com n < 25. portanto o nú mero de
- Cada registro o índice do registro comparaçõ es é n .
possui uma chave para ser que contém a chave x; Veremos um algoritmo O consumo de tempo
usada na pesquisa. - Caso nã o esteja ó bvio, que examina um a da função é proporcional
- Objetivo da presente, o valor um todos os elementos do ao nú mero de
pesquisa: Encontrar uma retornado é -1. vetor. Segue uma comparaçõ es que
ou mais ocorrências de - A implementaçã o implementaçã o do envolvem x, e portanto
registros com chaves nã o suporta mais de algoritmo: proporcional a n no pior
iguais à chave de um registro com uma caso. Assim, se uma busca
pesquisa. mesma chave, pois consome T
retorna o primeiro microssegundos quando o
É importante encontrado. vetor tem N elementos,
considerar os algoritmos consumirá 10T
de pesquisa como tipos microssegundos quando o
abstratos de dados vetor tem 10N elementos.
(TADs), de tal forma que
haja uma independência É possível resolver o
de implementaçã o para as problema com menos
operaçõ es. comparaçõ es? É possível
Operaçõ es mais resolver o problema sem
comuns: comparar x com cada
elemento do vetor? A
O valor de m muda a resposta é afirmativa,
1. Inicializar a cada iteraçã o, mas as
estrutura de dados. como veremos a seguir.
relaçõ es m ≤ n e v[m-1]
2. Pesquisar um ou < x sã o invariantes: elas
mais registros com Busca binária.
valem no início de cada
determinada chave. iteraçã o. Mais
3. Inserir um novo Pesquisa em tabela
precisamente, essas
registro. pode ser mais eficiente se
relaçõ es invariantes
4. Retirar um registro registros forem mantidos
valem imediatamente
específico. em ordem
antes de cada comparaçã o
Para saber se uma
de m com n (ponto A do
Dicioná rio é um TAD chave está presente na
có digo). No começo da
com as operaçõ es: tabela:
primeira iteraçã o, a
- Compare a chave
relaçã o vale se estivermos
1. Inicializa com o registro que está na
dispostos a imaginar que
2. Pesquisa posiçã o do meio da tabela.
v[-1] é −∞.
3. Insere - Se a chave é
A relaçã o invariante
4. Retira menor entã o o registro
vale, em particular, no
procurado está na
início da ú ltima iteração,
Analogia com um primeira metade da tabela
quando m ≥ n ou v[m] ≥
dicioná rio da língua x. Se m ≥ n, temos m == n - Se a chave é
portuguesa: maior entã o o registro
e v[n-1] < x e a funçã o
devolve -1. Se m < n mas procurado está na
segunda metade da tabela.
- Chaves v[m] > x, a funçã o devolve
palavras -1. Se m < n e v[m] == x, a - Repita até que a
função devolve m. Nos chave seja encontrada ou
- Registros
Aná lise: três casos, a funçã o que se constate que a
entradas associadas com
devolve a resposta chave nã o existe na tabela.
*pronú ncia, definiçã o,
sinô nimos, outras Pesquisa com sucesso: correta. Essa discussão
informaçõ es.
- melhor caso :
Busca sequencial . 19 C(n) = 1
- pior caso : C(n) =
n
É o método de
pesquisa mais simples: a 19
https://www.ime.usp.br/~pf/algor
18 http://www.decom.ufop.br/ itmos/aulas/bubi2.html
Para entender a funçã o buscaBinaria, basta verificar que
no início de cada repetiçã o do while, imediatamente antes da
comparaçã o de e com d, vale a relaçã o
v[e-1] < x < v[d+1]

Essa relação é, portanto, invariante. Para que o invariante


valha no início da primeira iteração basta imaginar que v[-1]
vale −∞ e que v[n] vale +∞. Esse jogo de imaginar faz sentido
porque o vetor é crescente.
Se a execuçã o da funçã o termina na linha 5, o índice m é
obviamente uma solução do problema. Suponha agora que a
execuçã o termina na linha 9. Entã o a ú ltima iteraçã o começou
(na linha 3) com e > d. Em virtude do invariante, temos v[e-1]
< v[d+1] e portanto e-1 < d+1, uma vez que o vetor é
crescente. Logo, e == d+1. A relaçã o v[e-1] < x < v[d+1]
garante agora que x está estritamente entre dois elementos
consecutivos do vetor. Como o vetor é crescente, concluímos
que x é diferente de todos os elementos do vetor. Portanto, ao
devolver -1 a função está se comportando como prometeu.
Resta verificar que a execução da função termina.
Suponha que a execuçã o nã o é interrompida na linha 5. Como
o valor da diferença d - e diminui a cada iteraçã o, a diferença
fica estritamente negativa depois de algumas iteraçõ es e entã o
o
proce

Quanto tempo a funçã o buscaBinaria consome? No início


da primeira iteração, d - e vale aproximadamente n. No início
Análise: da segunda, vale aproximadamente n/2. No início da terceira,
aproximadamente n/4. No início da (k+1)-ésima,
- A cada iteração do algoritmo, o tamanho da tabela é aproximadamente n/2k. Quando k passar de log n , o valor da
dividido ao meio. expressão n/2k fica menor que 1 e a execuçã o do algoritmo
- Logo: o número de vezes que o tamanho da tabela é termina. Logo, o nú mero de iteraçõ es é aproximadamente
dividido ao meio é cerca de log n. lg (n)
- Ressalva: o custo par
a manter a tabela ordenada é alto: a
cada inserção na posição p da tabela implica no deslocamento no pior caso, sendo lg (n) o piso de log n . Isso é muito
dos registros a partir da posição p para as posições seguintes.
menos que o nú mero de iteraçõ es da busca sequencial, pois
- Consequentemente, a pesquisa binária não deve ser
log transforma multiplicaçõ es em somas. Por exemplo, se uma
usada em aplicações muito dinâmicas.
busca em um vetor de tamanho N exige T iteraçõ es, entã o uma
Existe um algoritmo muito mais rápido que a busca
sequencial. Ele é análogo ao método que se usa para encontrar
um nome em uma lista telefônica. É claro que essa ideia só
funciona porque o vetor está ordenado.

Os nomes das variá veis nã o foram escolhidos por acaso: e


lembra esquerda, m lembra meio e d lembra direita. O
resultado da divisão por 2 na expressão (e+d)/2 é
automaticamente truncado, pois as variá veis são do tipo int.
Por exemplo, se e vale 3 e d vale 6, entã o (e+d)/2 vale 4.

A ideia da busca biná ria (= binary search) é o ponto de


partida de algoritmos eficientes para muitos problemas.
A função buscaBinaria está correta?
busca em um vetor de método ou na forma de - Uma estante de livros
tamanho 2N fará apenas 1 Qual a profundidade implementaçã o de um com seu títulos bem
+ T iteraçõ es, uma busca da recursã o na função bb? dado método. visíveis.
em um vetor de tamanho Ou seja, quantas vezes bb A estrutura de dados
8N fará apenas 3 + T chama a si mesma? registro é a indicada para A possibilidade de
iteraçõ es, e uma busca em Resposta: cerca de log n representar os elementos acesso direto é a
um vetor de tamanho 16N vezes. a serem ordenados. capacidade ou
fará apenas 4 + T Um algoritmo que impossibilidade de
iteraçõ es. Métodos de ordena uma conjunto, acessar um elemento
O consumo de tempo ordenação. geralmente representada diretamente na estrutura.
da função buscaBinaria é num vetor, é chamado de
proporcional ao nú mero Ordenar corresponde algoritmo de ordenaçã o. - Uma pilha de livros
de iteraçõ es e portanto ao processo de rearranjar Algoritmo de ordenaçã o dentro de uma caixa, onde
proporcional a log n no um conjunto de objetos em ciência da precisamos tirar um a um
pior caso. em uma ordem específica. computaçã o é um para saber qual a sua
O principal objetivo da algoritmo que coloca os natureza.
elementos de uma dada
sequência em uma certa Para classificarmos
ordem — em outras estes dois ambientes de
palavras, efetua sua atuaçã o, costumamos
ordenaçã o completa ou utilizar o meio em que
parcial. As ordens mais está armazenado os
usadas sã o a numérica e dados. Em termos
a léxico-grá fica. Existem computacionais utiliza-se
vá rias razõ es para se a designaçã o Ordenaçã o
ordenar uma sequência. Interna, quando
Uma delas é a queremos ordenar
possibilidade se acessar informaçõ es em
seus dados de modo mais memó ria. E Ordenaçã o
eficiente. Externa, quando
queremos ordenar
Entre os mais informaçõ es em arquivo.
importantes, podemos
citar bubble sort (ou Selection Sort
ordenaçã o por flutuaçã o), (Ordenação por
heap sort (ou ordenaçã o Seleção).
por heap), insertion sort
(ou ordenaçã o por O Selection Sort
Versão recursiva da ordenaçã o é facilitar a inserçã o), merge sort (ou utiliza um o conceito de
busca binária. recuperação posterior de ordenaçã o por mistura) e "selecionar o elemento
elementos do conjunto o quicksort. Existem mais apto". Ele seleciona
Para formular uma ordenado. diversos outros. o menor ou maior valor
versã o recursiva da busca Exemplos: do vetor, por exemplo, e
biná ria é preciso Natureza dos Dados20. passa para a primeira (ou
generalizar ligeiramente o – Listas telefô nicas. ú ltima posiçã o
problema, trocando – Dicioná rios. Para melhor escolha dependendo da ordem
v[0..n1] por v[e..d]. Para – Índices de livros. de um método de requerida), depois o
estabelecer uma ponte – Tabelas e arquivos. ordenaçã o é preciso segundo menor para a
entre a formulaçã o saber sobre a natureza segunda posiçã o e assim
original e a generalizada, Os algoritmos dos dados que serã o sucessivamente com (n-
vamos usar uma funçã o- trabalham sobre os processados. Entre elas 1) elementos restantes
embalagem (= wrapper- registros de um destacam-se duas: até os dois ú ltimos.
function) buscaBinaria2, arquivo. Tempo de acesso a um
que repassa o serviço para Apenas uma parte do elemento e a Vetor inicial:
a funçã o recursiva bb. registro, chamada chave, é possibilidade de acesso
utilizada para controlar a direto a um elemento.
ordenaçã o. O tempo de acesso a
Além da chave podem um elemento é a
existir outros complexidade necessá ria
componentes em um para acessar um Primeira passagem:
registro, que nã o têm elemento em uma Posiçã o 0- compara 4
influência no processo de estrutura, exemplos: com 3.Como 3 é menor
ordenar, a não ser pelo que 4 este é fixado como
fato de que permanecem mínimo, compara 3 com
com a mesma chave. 20 1. Como este é menor do
O tamanho dos outros https://pt.wikibooks.org/wiki/Alg que 3 é fixado como
oritmos_e_Estruturas_de_Dados/Al
componentes pode mínimo. Compara 1 com
goritmos_de
influenciar na escolha do _Ordena%C3%A7%C3%A3o
2. Como continua sendo
menor, é fixado. Ao 1 míni
chegar ao final do vetor, mo]
como 1 é o menor m vetor
elemento em comparaçã o í [míni Quarta passagem:
com o 4, eles trocam de n mo]= compara 2 com 4. 2 menor
posiçã o. i auxili que 4.Permanece.
m ar
o
= Bubble Sort
i (Ordenação Bolha). Quinta passagem:
compara 4 com 1. 1 menor
Segunda Passagem: p O bubble sort, ou que 4.Mudam de posição.
Posiçã o 1- como já temos a ordenaçã o por flutuaçã o
1 como o menor elemento r (literalmente "por bolha"),
do vetor, passamos para a a é um algoritmo de
posiçã o 1. Comparamos 3 ordenaçã o dos mais Sexta passagem:
com 4.Como é menor, 3 j simples. A ideia é compara 4 com 5. 4 menor
continua como mínimo. = comparar dois elementos que 5.Permanece.
Compara com 2. Como 2 é i e trocá -los de posiçã o, até
menor este é fixado como + que os elementos de
mínimo. Ao chegar ao final 1 maior valor sejam levados
Sétima passagem:
do vetor, como 2 é o para o final do vetor. O
a compara 2 com 1. 1 menor
menor elemento em processo continua até a
t que 2.Trocam de posição.
comparaçã o com o 3, eles ordenaçã o total do vetor
trocam de posiçã o. é
lembrando a forma como
as bolhas em um tanque
N
de á gua procuram seu
pró prio nível, e disso vem Oitava passagem:
s compara 2 com 4. 2 menor
o nome do algoritmo.
e do que 4.Permanece.
A complexidade desse
Terceira Passagem:
v algoritmo é de ordem
Posiçã o 2- pegamos o
e quadrá tica (O(n²)). Por
elemento da posiçã o 2 (4)
t isso, ele nã o é
e comparamos com o 3. Nona passagem:
o recomendado para
Como 3 é o ú ltimo compara 4 com 5. 4 menor
r programas que precisem
elemento do vetor e é do que 5. Permanece.
[ de velocidade e operem
menor do que 4, trocamos
j com quantidade elevada
as posiçõ es. Como os dois
] de dados. Também é
elementos sã o os ú ltimos
< necessá ria uma condiçã o
do vetor, o Selection Sort Décima passagem: nã o
v de parada, geralmente
encerra-se. há mudanças. Sai do
e uma flag ou variá vel que
t armazena se houve troca laço.
o ou não na passagem. Se
r uma passagem chega ao
[ seu final sem troca a
m ordenaçã o cessa. O algoritmo pode ser
O algoritmo
í descrito em pseudo-
normalmente é
n Vetor inicial: có digo como segue
implementado por duas
i abaixo. V é um VETOR de
repetiçõ es iterando sobre
m elementos que podem ser
a estrutura em questã o.
o comparados e n é o
Um exemplo de algoritmo
] Primeira Passagem: tamanho desse vetor.
é:
compara 4 com 2. 4 maior BUBBLESORT (V[], n)
m que 2.Mudam de posiçã o. 1 houveTroca <- verdade
p
í # uma variá vel de
a
n controle
r
i 2 enquanto
a
m houveTroca for
Segunda Passagem:
o verdade faça
i compara 4 com 5. 4 menor
= 3 houveTroca <- falso
= que 5.Permanece.
j 4 para i de 1 até n-1
0
faça
auxili 5 se V[i] vem depois
a
ar=v de V[i + 1]
t Terceira passagem:
etor[ 6 entã o troque V[i] e
é compara 5 com 1. 1
i] V[i + 1] de lugar e 7
vetor menor que
n houveTroca <-
[i]=v 5.Mudam de posiçã o.
-
etor[
verdade Ordenaçã o espalhadas pela memó ria
por Inserçã o. de maneira imprevisível).
Este algoritmo é
bastante eficiente Endereço de uma lista
quando aplicado a um encadeada.
pequeno nú mero de
elementos. Em termos O endereço de uma
gerais, ele percorre um lista encadeada é o
vetor de elementos da endereço de sua primeira
É conveniente tratar
esquerda para a direita e célula. Se le é o endereço
as células como um novo
à medida que avança vai de uma lista, convém dizer
tipo-dedados e atribuir
deixando os elementos simplesmente
um nome a esse novo tipo:
mais à esquerda le é uma lista
ordenados. encad
typedef struct reg Eis uma versã o
celula; // célula eada. recursiva da mesma
função:
Uma célula c e um (Nã o confunda le com
ponteiro p para uma 1e). A lista está vazia (ou
célula podem ser seja, nã o tem célula
declarados assim: alguma) se e somente se le
== NULL.
Listas sã o animais
c eminentemente
e recursivos. Para tornar
l isso evidente, basta fazer a Árvore binária26.
u seguinte observaçã o: se le
l é uma lista nã o vazia Á rvore biná ria é uma
a entã o le->prox também é estrutura de dados
uma lista. Muitos caracterizada por:
algoritmos sobre listas
Listas encadeadas21. c
; encadeadas ficam mais - Ou nã o tem
Uma lista encadeada é
simples quando escritos elemento algum (á rvore
uma representaçã o de
c de maneira recursiva. vazia).
uma sequência de objetos,
e Exemplo. A seguinte - Ou tem um
todos do mesmo tipo, na
l função recursiva imprime elemento distinto,
memó ria RAM (= random
u o conteú do de uma lista denominado raiz, com
access memory) do
l encadeada le: dois apontamentos para
computador. Cada
elemento da sequência é a duas estruturas
armazenado em uma diferentes,
célula da lista: o primeiro * denominadas sub-
elemento na primeira p á rvore esquerda e sub-
célula, o segundo na ; á rvore direita.
segunda e assim por
diante. Perceba que a
Se c é uma célula entã o definiçã o é recursiva e,
Estrutura de uma lista c.conteudo é o conteú do E aqui está a versã o devido a isso, muitas
encadeada. da célula e c.prox é o iterativa da mesma operaçõ es sobre á rvores
Uma lista encadeada endereço da pró xima funçã o: biná rias utilizam
(= linked list = lista ligada) célula. Se p é o endereço recursão. É o tipo de
é uma sequência de de uma célula, entã o p- á rvore mais utilizado na
células; cada célula >conteudo é o conteú do computaçã o. A principal
contém um objeto de da célula e p>prox é o utilizaçã o de á rvores
algum tipo e o endereço endereço da pró xima biná rias sã o as á rvores
da célula seguinte. célula. Se p é o endereço de busca.
Suporemos neste capítulo da ú ltima célula da lista
que os objetos entã o p->prox vale Busca em uma lista Implementação de um
armazenados nas células NULL . encadeada. Nó de uma árvore
sã o do tipo int. Cada binária.
célula é um registro que Veja como é fá cil
pode ser definido assim: verificar se um objeto x Um nó de uma á rvore
A figura pode dar a pertence a uma lista biná ria é composto por,
falsa impressão de que as encadeada, ou seja, se é pelo menos, três
células da lista ocupam igual ao conteú do de elementos, a sua chave e
posiçõ es consecutivas na alguma célula da lista: mais dois ponteiros que
memó ria. Na realidade, as apontarã o um para a sub-
células estã o tipicamente á rvore esquerda e outro
para a subá rvore direita.
21 https://www.ime.usp.br/
26
PosOrdem.
https://pt.wikibooks.org/wiki/Algo
ritmos_e_Estruturas_de_Dados/ InOrdem.
%C3%81rvor es_Bin%C3%A1rias

Para a á rvore acima, o percurso seria: 2, 7, 5, 6, 11, 2, 5, 4 e


9.
PreOrdem.
O algoritmo desse percurso é:
filhos terã o índices 2i + 1
e 2i + 2 e o seu pai terá
índice piso((i - 1)/2). Essa
implementaçã o é utilizada
para representar á rvores
completas ou quase
completas. Heaps, que sã o
á rvores biná rias quase
completas sã o
implementadas na forma
Para a á rvore acima, o de um vetor de uma
percurso seria: 2, 7, 2, maneira bastante
6, 5, 11, 5, 9 e eficiente.
4.
PosOrdem. Apesar da
O algoritmo desse simplicidade, essa
percurso é: representaçã o requer uma
grande quantidade de
memó ria contígua para o
armazenamento de
á rvores grandes, o
crescimento desta é difícil
Definições para árvores binárias. de implementar e manter
e pode haver grande
Os nó s de uma á rvore biná ria possuem graus zero, um ou quantidade de desperdício
dois. Um nó de grau zero é denominado folha. de memó ria.
Uma á rvore biná ria é considerada estritamente biná ria se
cada nó da á rvore possui grau zero ou dois. Para a á rvore acima, o
A profundidade de um nó é a distâ ncia deste nó até a raiz. percurso seria: 2, 5,
Um conjunto de nó s com a mesma profundidade é 11, 6, 7, 4, 9, 5 e
denominado nível da á rvore. A maior profundidade de um nó , Em uma linguagem
2.
é a altura da á rvore. que possua suporte a
Uma á rvore é dita completa se todas as folhas da á rvore estruturas e referências
Transformação de uma
estã o no mesmo nível da á rvore. (por exemplo Pascal e C),
árvore n-ária.
Uma á rvore n-á ria as á rvores sã o
Definições em teoria dos grafos. implementadas a partir de
qualquer (á rvore cujos
nó s possuem graus nó s, com um, ou mais,
Em teoria dos grafos, uma á rvore biná ria é definida como menores ou iguais a n) campos para a(s)
um grafo acíclico, conexo, dirigido e que cada nó nã o tem podem ser representados informaçã o(õ es)
grau maior que por uma á rvore biná ria. principal(is) e dois
3. Assim sendo, só existe um caminho entre dois nó s distintos. Métodos para campos apontadores
E cada ramo da á rvore é um vértice dirigido, sem peso, que representação de especiais, denominados
parte do pai e vai o filho. árvores binárias. esquerda e direita, que
Uma das maneiras fazem referência à s sub-
mais simples de á rvores esquerda e
Percursos em árvore. representar á rvores direita, respectivamente.
Existem três tipos biná rias em linguagens de Algumas vezes, há um
de percursos: programaçã o é por meio apontador para o pai. Em
Percurso em de arranjos um nó do tipo folha, os
InOrdem, unidimensionais campos apontadores
PreOrdem e (vetores). Dado um nó de possuem valores especiais
índice i qualquer, os seus
(nil em Pascal e NULL em variá veis de entrada em de dados através de um Ban
C). categorias distintas. modelo de menor
Exemplo: dimensã o desse conjunto co de
Algoritmos de de dados. Um exemplo dados:
aprendizado (A) Regressã o —  interessante desse tipo de conceit
supervisionado e Dada uma imagem de aplicaçã o é fornecido pela
nãosupervisionados22. homem/mulher, temos de Aná lise dos Componentes os de
prever sua idade com base Principais. banco
Supõ em a existência em dados da imagem. Ainda é possível de
de um "Professor" que te (B) Classificaçã o —  utilizar aprendizagem não
Dada um exemplo de supervisionada para
dados
ensina que tipo de
comportamento você deve tumor cancerígeno, temos representar um conjunto e
exibir em cada situaçã o. de prever se ele é benigno de dados através de sistem
Na prá tica, imagine que ou maligno através do seu características
tamanho e idade do interessantes do conjunto
as
você deseja classificar
empresas saudá veis de paciente. de dados. gerenc
nã o-saudá veis e para fazer Com aprendizagem iadore
isso você tem uma nã o supervisionada nã o
há feedback com base nos
s de
amostra que associa cada
empresa saudá vel uma resultados da previsã o, ou bancos
série de variá veis. Entã o, seja, nã o há professor de
um algoritmo de para corrigi-la. Exemplo:
Nã o Clustering, é o
dados
aprendizagem
supervisionado tentaria “Algoritmo Cocktail (SGBD)
usar explicitamente essa Party”, que pode ,
informaçã o para no futuro encontrar em uma
Outro exemplo de estrutura de dados
model
ser há bil para separar
empresas saudá veis de Classificaçã o muito desorganizada como agem
nã o-saudá veis. O exemplo utilizado pelos bancos é a identificar as vozes conceit
mais simples de modelo decisã o do aceite do individuais e mú sica.
Abordagens comuns
ual de
que é baseado nesse tipo empréstimo para algum
de aprendizagem é o cliente com base no seu de aprendizagem nã o dados
modelo de regressã o histó rico de crédito. supervisionada incluem (a
linear, quando estimado armazenamento em
Cluster K-Médio,
aborda
usando por exemplo a Muitos algoritmos sã o
minimizaçã o dos erros utilizados para criar Hierá rquico, e Mapas gem
quadrá ticos, isto é, a aprendizes Auto-organizadores. entida
minimaçã o do erro supervisionadas, sendo os derela
quadrá tico entre o valor mais comuns as Redes
da variá vel predita pelo Neurais, Má quinas de cionam
modelo e o valor da Vetor de Suporte (SVMs), ento),
variá vel real. e Classificadores Naive model
Problemas de Bayes.
aprendizagem Por outro lado, o
supervisionados sã o algoritmos de relacio
classificados em aprendizagem nã o nal de
problemas de “regressã o” supervisionada nã o
e “classificaçã o”. Em um supõ em a classificação dados
problema de regressã o, entre as empresas Um exemplo de
estamos tentando prever saudá veis e nã o saudá veis projeto que implementa
os resultados em uma em sua base de dados. aprendizado de má quina
saída contínua, o que Eles simplesmente de uma maneira simplista
significa que estamos a tentariam separar as é o Apache Mahout que
tentando mapear empresas em questã o tem por objetivo a
variá veis de entrada para usando as variá veis construçã o de um
alguma funçã o contínua. associadas as empresas e ambiente para a criaçã o
Em um problema de nã o necessariamente rá pida de aplicaçõ es
classificaçã o, estamos separariam as empresas escalá veis de aprendizado
tentando prever os em duas classes. Eles de má quina de alta
resultados em uma saída normalmente associam o performance.
discreta. Em outras seu aprendizado a
palavras, estamos métricas que devem ser
tentando mapear otimizadas.
Outras formas de
22
aprendizagem nã o
http://prorum.com/index.php/167 supervisionado sã o
3/diferenca-algoritmos- baseadas no objetivo de
aprendizadosupervisionado- representar um conjunto
supervisionado
(concei satisfaçam esta restriçã o. CHAR(20), login:
Um exemplo de uma CHAR(10), age: INTEGER,
tos O Modelo Relacional23 instâ ncia para o esquema gpa: REAL)
básicos, Students é ilustrado na Observe que com a
normali No modelo relacional a Figura 1. execução deste comando
principal construçã o para está sendo criada apenas a
zação), relaçã o, sem que sejam
representaçã o dos dados é
banco a relaçã o, uma tabela com Sid Name Login atribuídos quaisquer
de linhas não ordenadas e valores aos seus atributos.
53666 Jones jones@cs
colunas. Uma relaçã o Para a remoçã o de
dados uma relaçã o do banco de
consiste de um esquema e 53688 Smith smith@eecs
SQL de uma instâ ncia. O dados usa-se o comando
(lingua esquema especifica o 53650 Smith smith@math
DROP TABLE. Assim, para
nome da relação e o nome remover a mesma relaçã o
gem Figura 1 – Exemplo Students tem-se:
e o domínio de cada
SQL coluna, também de instâ ncia da DROP TABLE Students
(SQL20 denominada atributo ou relaçã o Students Este comando remove
campo da relaçã o. O a relaçã o especificada,
08), removendo a informaçã o
domínio do atributo é O nú mero de tuplas
linguag referenciado no esquema (cada linha formada por sobre o seu esquema e
em por seu nome e serve para uma lista ordenada de também as tuplas da
restringir os valores que colunas) que uma dada instâ ncia atual.
HiveQL O comando ALTER
este atributo pode instâ ncia possui
(Hive assumir. O esquema de denomina-se TABLE é usado para
2.2.0)), uma relaçã o é invá riavel cardinalidade da relaçã o e alteraçã o do esquema de
ao longo do tempo, sendo o nú mero de atributos é o uma relaçã o. Ainda
banco considerando a relaçã o
modificado apenas por seu grau. A instâ ncia de
de comandos específicos. Um relaçã o da Figura 1 tem Students para alterar o
dados exemplo de esquema de cardinalidade 3 e grau 5. seu esquema com a adiçã o
relaçã o é: Note que a cardinalidade é de um novo campo
NoSQL
Students (sid: string, variá vel, mas o grau nã o. firstYear cujo domínio é
(conceit name: string, login: string, Um banco de dados inteiro usa-se o comando:
os age: integer, gpa: real). relacional é um conjunto ALTER TABLE
Neste caso está sendo de uma ou mais relaçõ es Students ADD
básicos,
definida a relaçã o de com nomes distintos. O COLUMN firstYear:
bancos nome Students, com esquema do banco de integer;
orienta atributos sid, name, login, dados relacional é a A execuçã o deste
dos a age e gpa, cujos domínios coleçã o dos esquemas de comando faz com que o
sã o respectivamente cada relação que compõ e esquema da relaçã o seja
grafos, string, string, string, o banco de dados. alterado e com que para
colunas, integer e real. cada tupla da instâ ncia
chave/v A instâ ncia de uma Criando e corrente seja criado um
relaçã o é o conjunto de Modificando Relações novo atributo de nome
alor e linhas, também em SQL firstYear, atribuindo a ele
docume denominadas tuplas ou A linguagem SQL o valor null.
ntos), registros, distintas entre padrã o usa a palavra Um outro subconjunto
si, que compõ em a relaçã o TABLE para referenciar da linguagem SQL forma a
data em um dado momento. Ela uma relação. Um Linguagem de
Wareho é variá vel, já que o subconjunto desta Manipulaçã o de Dados
use nú mero de tuplas e o linguagem forma a (DDL), que compreende
conteú do de seus Linguagem de Definiçã o comandos bá sicos para a
(model atributos podem variar ao de Dados (DDL) que modificaçã o e a
agem longo do tempo. A compreende comandos recuperação de dados.
conceit instâ ncia de uma relaçã o bá sicos para a criação, a O comando INSERT
deve seguir sempre o seu remoçã o e a modificaçã o INTO é usado para
ual respectivo esquema, de relaçõ es. adicionar novas tuplas a
para respeitando o nú mero de A criaçã o de relaçõ es uma relação.
data atributos definidos, bem em SQL é feita usando-se o Por exemplo, para
como os seus domínios. comando CREATE TABLE, inserir uma tupla na
wareho Esta restriçã o, com a especificaçã o do relaçã o Students, tem-se:
uses, denominada restriçã o de respectivo esquema. Por INSERT INTO Students
dados domínio, é muito exemplo, para criar a (sid, name, login, age, gpa)
importante. O modelo relaçã o Students citada VALUES (53688, ‘Smith’,
multidi relacional somente anteriormente tem-se: ‘smith@ee’, 18, 3.2) onde
mensio considera relaçõ es que CREATE TABLE os valores descritos por
nais); Students (sid: VALUES, correspondem ao
23 Fonte: CHAR(20), name: valor que cada atributo
www.ic.unicamp.br/~geovane/mo4 terá na nova tupla.
10-091/
As tuplas de uma garante as RIs, nã o unicamente as tuplas. O O uso de CONSTRAINT
relaçã o são removidas por permitindo a existência de conjunto de todos os no comando serve para
meio do comando DELETE instâ ncias invá lidas. atributos de uma relaçã o nomear uma restriçã o,
FROM. Pode-se remover As RI sã o especificadas formam sempre uma facilitando sua
todas as tuplas de uma e conferidas em 2 super-chave desta relaçã o. identificaçã o para
relaçã o ou apenas aquelas momentos diferentes: Pela definiçã o de impressão de mensagens
que satisfaçam uma dada - especificaçã o da relaçã o, é sempre de erro numa eventual
condiçã o. Para remover as RI: se dá na definiçã o do garantida a existência de ocorrência de violaçã o.
tuplas de estudantes cujo esquema da base de dados uma chave. Entretanto, Note que neste
nome (name) é Smith na pelo usuá rio ou pelo cada relação pode conter segundo exemplo cada
relaçã o Students executa- administrador da base de vá rias chaves candidatas. estudante pode cursar
se o comando: DELETE dados (DBA); Cabe ao DBA escolher apenas um curso e
FROM Students S WHERE - conferência das dentre elas aquela que receber uma ú nica nota
S.name = ‘Smith’ RIs: é feita pelo banco de será a chave primá ria, a para este curso. E ainda
A alteraçã o do valor de dados toda vez que uma ser usada pelo banco de que dois estudantes de um
atributos que compõ em as relaçã o é modificada por dados em operaçõ es de mesmo curso nã o
tuplas é feita usando-se o uma aplicação sendo otimizaçã o. A escolha recebem a mesma nota.
comando UPDATE FROM. executada. desta chave é muito Percebe-se, entã o, que
De forma semelhante ao O modelo relacional importante e deve ser quando usada de forma
comando DELETE FROM, permite a especificaçã o de feita visando garantir a displicente, uma restriçã o
podese modificar uma vá rios tipos de RIs. qualidade dos dados. Por de integridade pode
tupla específica ou vá rias Um deles exemplo, na relação impedir o armazenamento
delas por meio de um é a Students, se name fosse de instâ ncias de base de
ú nico comando. Por restriçã o escolhido como chave dados que surgem na
exemplo: de primá ria, nã o seria prá tica.
UPDATE FROM domínio citada possível a existência de
Students S anteriormente. Outros estudantes homô nimos, o Restrições de Chave
SET S.age = S.age + 1, tipos serã o vistos a seguir. que talvez nã o refletisse Estrangeira
S.gpa = S.gpa – 1 corretamente os No modelo relacional é
WHERE S.sid = 53688 Restrições de Chaves requisitos do sistema. A comum que a informaçã o
Este comando altera A restriçã o de chave chave primá ria nã o pode de uma relaçã o esteja
apenas a tupla da relação serve para garantir que as assumir valor null. ligada à informaçã o de
Students cujo atributo sid tuplas de uma relaçã o outra relaçã o. Se uma
tenha valor igual a 53688. sejam ú nicas. Para isso, Especificando delas é modificada a outra
Já o comando a seguir identifica um conjunto Restrições de Chaves também deve ser checada
altera todas as tuplas cujo mínimo de atributos que em SQL e modificada, se for o caso,
atributo gpa tenha valor devem ter valores A especificaçã o de uma de maneira a garantir a
maior ou igual a 3.2. diferentes em todas as chave e de uma chave consistência da
UPDATE FROM tuplas de uma instâ ncia da primá ria em SQL é feita informaçã o. Para que o
Students S SET S.gpa = relaçã o. Este conjunto de respectivamente, pelos banco de dados possa
S.gpa + 0.5 WHERE atributos denomina-se comandos UNIQUE e fazer esta checagem, é
S.gpa >= 3.2 chave candidata da PRIMARY KEY. especificada uma restriçã o
relaçã o e deve satisfazer Na execução do envolvendo ambas as
Restrições de os seguintes requisitos: comando a seguir está relaçõ es. Esta restriçã o
Integridade sobre - nã o podem sendo criada a relaçã o denomina-se restriçã o de
Relações existir 2 tuplas diferentes Enrolled, cuja chave chave estrangeira.
Um bom SGBD deve com os mesmos valores primá ria é composta pelos A chave estrangeira é
evitar a entrada de para estes atributos, ou atributos stdid e cid um conjunto de atributos
informaçã o incorreta ou seja, a chave identifica CREATE TABLE de uma relaçã o que é
inconsistente em sua base unicamente qualquer Enrolled (stdid CHAR(20), usado para fazer
de dados, garantindo, com tupla da relaçã o vá lida; cid CHAR(20), grade referência a uma tupla de
isso, a qualidade da - ao retirar-se CHAR(2), PRIMARY KEY outra relaçã o,
informaçã o inserida. Uma qualquer atributo (stdid,cid) ) correspondendo à chave
restriçã o de integridade componente da chave, ela Caso fosse desejado primá ria da relaçã o
(RI) é uma condiçã o deixa de identificar que esta mesma relaçã o referenciada. A chave
especificada no esquema unicamente as tuplas. tivesse uma chave estrangeira deve conter o
da base de dados para Se o segundo requisito composta pelos atributos mesmo nú mero de
restringir a informaçã o a for violado, entã o a chave cid e grade, sendo sid a atributos da chave
ser armazenada. Ou seja, a candidata é uma super- chave primá ria da relaçã o, primá ria da outra relaçã o,
RI é uma condiçã o chave. Por exemplo temos deveria ser executado o e seus respectivos
definida que deve ser que sid é uma chave para comando: domínios, mas nã o
verdadeira para qualquer a relaçã o Student, pois CREATE TABLE necessariamente os
instâ ncia da base de identifica cada estudantes. Enrolled (stdid CHAR(20), mesmos nomes. Além
dados. Se uma instâ ncia Já o conjunto {sid, gpa} é cid CHAR(20), grade disso, diferente da chave
da base de dados satisfaz uma super-chave da CHAR(2), primá ria, pode assumir
todas as RIs especificadas, relaçã o, pois ao retirar-se UNIQUE (cid, grade), valor null. Por fim pode
entã o ela é uma instâ ncia o atributo gpa, o atributo CONSTRAINT EnrolledKey referenciar a relaçã o que a
vá lida. Um bom SGBD sid continua identificando PRIMARY KEY (cid) ) contém, se necessá rio.
Considerando a (stdid) REFERENCES ser feito se uma tupla de valor à chave estrangeira
relaçã o Enrolled Students ) Enrolled com um id de da tupla referenciada.
apresentada Com este comando estudante nã o existente A seleção da
anteriormente, queremos garante-se que somente fosse inserida? Ou entã o alternativa a ser utilizada
garantir que apenas estudantes registrados em uma tupla de Students é feita no momento da
estudantes com registro Students possam ser com sid nulo (null)? O especificaçã o da RI. Para o
vá lido (sid) podem ser matriculados em cursos. sistema deveria apenas exemplo utilizado,
matriculados nos cursos. Outra restriçã o colocada rejeitá -las. Mas o que supondo-se que no caso
Para isso, cria-se uma por este comando, por deveria ser feito se uma de exclusão seja escolhida
chave estrangeira em meio da chave primá ria, é tupla de Student a segunda alternativa e no
Enrolled que corresponde que cada estudante pode referenciada por Enrolled caso de atualização a
à chave primá ria da ter apenas uma nota por fosse removida? Neste primeira delas, a criaçã o
relaçã o Students, curso. caso com certeza o da tabela Enrolled se daria
conforme ilustra a Figura sistema estaria violando pelo comando:
2: Restrições Gerais as restriçõ es de CREATE TABLE
Restriçõ es de domínio, integridade referencial. Enrolled (stdid CHAR(20),
de chave primá ria e de Para evitar isso, a cid CHAR(20), grade
Figura 2 – chave estrangeiras são linguagem SQL provê CHAR(2),
Exemplo de consideradas como parte alternativas de tratamento PRIMARY KEY
chave fundamental do modelo para estas violaçõ es. Sã o (stdid,cid), FOREIGN
estrangeira de dados relacional. elas: KEY (stdid) R
Entretanto, elas nã o sã o - rejeitar a EFERENCES Students
Neste caso, se a suficientes para remoçã o da tupla de ON DELETE CASCADE
aplicaçã o tentar inserir especificar outras Students que é ON UPDATE NO
em Enrolled uma tupla de restriçõ es mais genéricas, referenciada por Enrolled; ACTION )
um estudante de stdid como, por exemplo, a - remover também
53673, o sistema de banco definiçã o de intervalos de todas as tuplas de Transações e
de dados irá rejeitar a valores para Enrolled que referenciam Restrições
operaçã o, pois nã o existe determinados atributos. a tupla de Students a ser Uma transaçã o é um
um estudante em Students Para estes outros removida; programa que é executado
com este sid. Da mesma casos sã o usadas - atribuir um valor pelo banco de dados e que
forma, ao tentar excluir de restriçõ es de tabelas e de padrã o vá lido ao stdid das pode conter vá rios
Students o estudante com assertivas. As restriçõ es tuplas de comandos de acesso à
sid 53650, o sistema nã o de tabelas sã o associadas Enrolled que referenciam base de dados, como
deve permitir a exclusã o, a um ú nica tabela e sã o a tupla de Students a ser consultas, inserçõ es,
pois ele está sendo checadas sempre que a removida; atualizaçõ es, etc. Caso um
referenciado por Enrolled. tabela é alterada. Já as - atribuir o valor destes comandos da
Uma outra ação possível restriçõ es de assertivas null ao stdid das tuplas de transaçã o viole algumas
para este caso seria a sã o associadas a vá rias Enrolled que referenciam das restriçõ es de
exclusã o de todas as tabelas e sã o checadas a tupla de Students integridade especificadas
tuplas de Enrolled que sempre que uma destas removida, denotando o tratamento padrã o é
façam referência a este tabelas é modificada. ‘desconhecido’ ou ‘nã o rejeitar a sua execuçã o.
estudante. aplicá vel’; entretanto, Entretanto, esta
Se todas as restriçõ es Garantindo as como neste exemplo stdid abordagem algumas vezes
de chave estrangeiras Restrições de é parte da chave primá ria pode ser muito inflexível,
definidas no banco de Integridade de Enrolled , esta devendo ser dado outro
dados sã o garantidas, a Como já visto alternativa estaria tratamento à situaçã o.
sua integridade anteriormente, as RIs sã o violando a RI de chave Um exemplo seria,
referencial é alcançada, ou especificadas quando uma primá ria e portanto nã o considerando as relaçõ es
seja, garante-se que nã o relaçã o é criada e são poderia ser aplicada. Enrolled e Students, a
há referências pendentes. checadas sempre que uma Estas opçõ es sã o situação em que para o
relaçã o é modificada. O vá lidas também para o estudante ser registrado,
Especificando impacto de RIs de caso de atualizaçõ es na ou seja, ter seu id, ele deve
Restrições de Chave domínio, de chave relaçã o Students. estar matriculado em um
Estrangeira em SQL primá ria e de chave Os comandos em SQL curso. Entretanto, para o
O comando FOREIGN estrangeiras é direto. Ou para implementar curso existir, deve haver
KEY identifica a chave seja, sempre que um estas açõ es sã o: pelo menos um estudante
estrangeira na criação da comando de inserção, NO ACTION, que é a matriculado. Percebe-se
relaçã o. Assim, para exclusã o ou atualização opçã o padrã o e que rejeita pelas restriçõ es existentes
definir esta restriçã o para causa uma violaçã o de RI, a operação sendo neste caso, que ao tentar-
o exemplo da Figura 2 ele é rejeitado. executada; se inserir a primeira tupla
usa-se o comando: Considerando as CASCADE, que remove de qualquer das relaçõ es,
CREATE TABLE relaçõ es Students e a tupla da relaçã o ocorrerá violaçã o e,
Enrolled (stdid CHAR(20), Enrolled já definidas, referenciada e todas as portanto, as operaçõ es
cid CHAR(20), grade sendo stdid uma chave tuplas que fazem nã o serã o completadas. A
CHAR(2), estrangeira em Enrolled referência à ela; ú nica maneira de
PRIMARY KEY que faz referência a SET NULL / SET conseguir realizar a
(stdid,cid) , FOREIGN KEY Students. O que deveria DEFAULT , que atribui um primeira inserção em
alguma delas seria resposta é apresentada na
postergando a checagem Figura 3: Conjuntos Entidade
da restriçã o, que Um conjunto entidade
normalmente ocorreria ao (CE) é mapeado no
final da execuçã o do modelo relacional com
comando INSERT. Figura 3 – Relaçã o uma relaçã o. Os atributos
A linguagem SQL resultante de uma desta relaçã o serã o os
permite entã o que a consulta mesmos do CE, bem como
checagem de uma O símbolo ‘*’ na seus respectivos
Para o exemplo do CR
restriçã o possa ser feita consulta indica que a domínios. Da mesma
Works_In ilustrado na
em modo imediato relaçã o resultante deve forma, a chave primá ria
Figura 6, o seguinte
(IMMEDIATE) ou conter todos os atributos também é mantida.
comando SQL será usado
postergado (DEFERRED). existentes na relaçã o Como exemplo,
no mapeamento:
Para isso usa-se o consultada. Caso fosse considere o CE Employees
CREATE TABLE
comando SET, indicando a desejado obter apenas o ilustrado na Figura 5,
Works_In( ssn CHAR(11),
restriçã o e o seu modo. nome e a senha destes cujos atributos sã o ssn,
did INTEGER, since DATE,
Por exemplo o comando estudantes, o comando a name e lot, sendo ssn a
PRIMARY KEY (ssn,
SET CONSTRAINT ser exeutado seria o chave primá ria.
did),
EnrolledKey DEFERRED, descrito abaixo que
faz com que a restriçã o de FOREIGN KEY (ssn)
produziria o resultado REFERENCES
nome EnrolledKey ilustrado na Figura 4.
definida anteriormente Employees,
SELECT name, login FOREIGN KEY (did)
seja checada somente no FROM Students S
momento de efetivaçã o REFERENCES
WHERE S.age=18 Departments)
(commit ) da transaçã o.
No caso de auto
relacionamento a relaçã o
Consultando Dados
a ser criada conterá 2
Relacionais
ocorrências da chave
Uma consulta em uma
Figura 4 primá ria da entidade
base de dados relacionais,
– Relaçã o O comando SQL para envolvida, as quais
normalmente
resultante de criar a relaçã o comporã o a chave
referenciada como query,
uma consulta correspondente é primá ria da relaçã o.
é uma questã o sobre os
CREATE TABLE
dados da base, cuja
Projeto Lógico da Employees (ssn
resposta consiste em uma
Base de Dados: indo do CHAR(11), name
nova relaçã o que contém o
Modelo ER para o CHAR(20), lot INTEGER,
resultado na forma de
Modelo Relacional PRIMARY KEY (ssn)).
tuplas. Por exemplo,
usando as relaçõ es O Modelo Entidade
Students e Enrolled, pode- Relacionamento (MER) é
se querer saber quantos adequado para Conjuntos
Relacionamento
O mapeamento de
Sid Name Login age gpa
conjuntos relacionamento
53666 Jones jones@cs 18 3.4 (CR) para o modelo
relacional pode ser feito
53688 Smith smith@eecs 18 3.2 de duas maneiras,
estudantes sã o maiores de representar um projeto de abordadas a seguir.
18 anos ou quantos banco de dados em alto
estudantes estã o nível. Uma vez pronto o Conjuntos
matriculados em um esquema da base de dados Relacionamento sem
Assim, o mapeamento
determinado curso. em MER, é preciso Restrições
do conjunto auto-
O comando em SQL converter este esquema Um conjunto
relacionamento
usado para realizaçã o de para o esquema de banco relacionamento (CR) sem
Reports_To ilustrado na
consultas é o SELECT. de dados a ser usado, restriçõ es é mapeado
Figura 7 para o modelo
Para encontrar todos os geralmente no modelo numa relaçã o de maneira
relacional é feito pelo
relacional. Para isso, semelhante ao conjunto
Logi comando:
existe um conjunto entidade. Entretanto, a
Name n CREATE TABLE
de regras que chave primá ria de cada
Reports_To(supervisor_ss
direcionam o entidade envolvida irá
Jones jones@cs n CHAR(11),
usuá rio nesta compor os atributos da
Smit subordinate_ssn
atividade, tratando, nova relaçã o como chaves
h smith@eecs CHAR(11) ,
inclusive, restriçõ es estrangeiras, juntamente
estudantes com 18 anos PRIMARY KEY
que nã o foram cobertas no com os atributos
na instâ ncia de relaçã o da (supervisor_ssn,
esquema conceitual. Estas descritivos. A chave
Figura 1, executase o subordinate_ssn),
regras serã o discutidas a primá ria desta relação
comando SELECT * FROM seguir, abrangendo os FOREIGN KEY
será composta pelas
Students S WHERE principais elementos do (supervisor_ssn)
chaves estrangeiras.
S.age=18. A relaçã o MER.
REFERENCES DATE, PRIMARY KEY casos anteriores é ideal. que referencia a super
Employees (did), Entretanto, por se tratar entidade. A chave
(ssn), FOREIGN KEY (ssn) de uma entidade estrangeira desta relaçã o
FOREIGN KEY REFERENCES dependente de outra, tem é também a sua chave
(subordinate_ssn) Employees)) chave do tipo parcial. primá ria. Caso a relaçã o
REFERENCES Esta abordagem pode correspondente à super
Departments(ssn)) ser aplicada a CR que entidade seja removida, as
envolvam mais de 2 CE. relaçõ es das entidades
Conjuntos Em geral, se o CR envolve especializadas também
Relacionamento com N CE e algumas delas tem devem ser removidas,
Restrições de Chave restriçã o de chave, o CR usando para isso o
Existem 2 opçõ es para pode ser embutido nesta comando CASCADE.
o mapeamento de CR com CE. Figura A segunda abordagem
restriçã o de chave para o 9 – sugere criar uma relaçã o
modelo relacional. A Conjuntos Conju para cada especialização
primeira delas é Relacionamento com nto do CE, mas nã o para a
semelhante à quela já Restrições de Entida super entidade. Neste caso
apresentada, criando uma Participação de cada relação criada
relaçã o para representar o A abordagem é a Fraca conterá , além dos seus
CR, com chaves mesma que no caso atributos, os atributos da
estrangeiras para as anterior, mas com Para o exemplo de super entidade.
relaçõ es envolvidas. Esta algumas particularidades. conjunto entidade fraca A primeira abordagem
abordagem nem sempre é Considerando que no ilustrado na Figura 9 o é mais genérica e também
interessante, pois faz com exemplo da Figura 8 mapeamento para o a mais usada. Sua
que seja necessá ria a existisse uma restriçã o de modelo relacional seria principal vantagem é
combinação de relaçõ es participaçã o relacionada feito por meio do permitir que a relaçã o
para responder às ao gerente: todo comando: referente à super classe
consultas do usuá rio, departamento tem de ter CREATE TABLE seja utilizada
podendo se tornar uma sempre um gerente. O Dept_Policy(pname independente das relaçõ es
atividade lenta. comando a ser utilizado CHAR(20), age referentes à s entidades
A segunda opçã o é seria: INTEGER, cost REAL, ssn especializadas. Já a
embutir o CR em qualquer CREATE TABLE CHAR(11), segunda abordagem
das relaçõ es referentes à s Dept_Mgr(did INTEGER, PRIMARY KEY obriga que a informação
entidades envolvidas, dname CHAR(20), budget (pname, ssn), seja sempre obtida a
usando uma chave REAL, ssn CHAR(11) NOT FOREIGN KEY (ssn) partir de uma das
estrangeira para NULL, since REFERENCES Employees entidades especializadas,
referenciar a outra DATE, ON DELETE CASCADE) nã o permitindo a
entidade. Os atributos PRIMARY KEY (did), Note que neste caso, a existência da super classe.
descritivos também FOREIGN KEY (ssn) chave da relaçã o passou a
passam a integrar a REFERENCES Employees ser composta pela chave Traduzindo
relaçã o que recebeu o CR. ON DELETE NO ACTION) primá ria da entidade fraca diagramas ER com
Esta soluçã o é mais Neste caso a restriçã o (pname) e pela chave Agregação
vantajosa por permitir a de participaçã o é primá ria da relação que a Neste casos o
obtençã o mais rá pida de garantida pelo NOT NULL contém (ssn, em mapeamento é simples e
uma resposta. A ú nica usado no atributo ssn Employees), sendo esta semelhante à queles
ressalva é que podem indicando que ele nã o ú ltima também uma chave discutidos anteriormente:
ocorrer tuplas nas quais pode assumir valores null. estrangeira. O comando o CR da agregaçã o é
os atributos referentes ao Ou seja, que ele tem CASCADE, garante que se traduzido em uma nova
CR estejam vazios. sempre um valor o empregado for excluído relaçã o, sendo sua chave
associado. Já o comando da relaçã o Employees, primá ria é composta pela
NO ACTION, que é padrã o, todos os seus chave primá ria dos CE
garante que o empregado dependentes também o envolvidos. Da mesma
nã o pode ser excluído da serã o. forma, o CR que envolve
relaçã o de empregados, se esta agregaçã o também é
ele estiver como gerente Traduzindo traduzido em uma nova
do departamento. Hierarquias de Classe relaçã o, que terá dentre
Semelhante ao que seus atributos a chave
Conjuntos de ocorre com os CR, existem primá ria da relaçã o que
Considerando a
Entidades Fracas 2 abordagens para tratar representa a agregaçã o.
segunda opçã o, o
O conjunto de as hierarquias ISA. Na
mapeamento do CR
entidades fracas tem primeira delas, deve ser Visões
Manages da Figura 8 para
sempre participaçã o criada, além da relaçã o A visão é uma tabela
o modelo relacional é feito
biná ria do tipo 1:N, bem referente à super cujas linhas nã o são
pelo comando:
como uma restriçã o de entidade, uma relação explicitamente
CREATE TABLE
chave e uma de para cada especializaçã o armazenadas na base de
Dept_Mgr(did INTEGER,
participaçã o total. do CE, mantendo seus dados, mas sim
dname
Levando-se isso em conta, atributos e acrescentando computadas, quando
CHAR(20), budget REAL,
a abordagem utilizada nos uma chave estrangeira necessá rio, a partir de
ssn CHAR(11), since
uma definiçã o em termos possível permitir que Assim, por questõ es O controle de acesso
de tabelas da base de determinados grupos de prá ticas, a linguagem SQL ló gico pode ser encarado
dados, denominada usuá rios acessem somente permite a atualização de de duas formas diferentes:
tabelas base. O comando os dados que eles tem visõ es apenas em casos a partir do recurso
em SQL usado para isso é permissão para uso. Por muito específicos, nã o computacional que se
o CREATE VIEW. exemplo, permitir que permitindo, por exemplo, quer proteger e a partir do
Considere as relaçõ es estudantes vejam apenas a atualizaçã o de colunas usuá rio a quem serã o
Students e Enrolled o nome e login de outros calculadas, de visõ es concedidos certos
discutidas anteriormente. estudantes, mas nã o sua compostas por agregados privilégios e acessos aos
Suponha que exista um senha ou sua nota em um de linhas ou geradas a recursos.
interesse constante em curso. partir de junçõ es. A proteção aos
recuperar o nome e o recursos computacionais
identificador dos Atualizações em Destruindo e baseia-se nas
estudantes que tem nota B Visões Alterando Visões necessidades de acesso de
em algum curso e também Uma das vantagens do Uma visão, de maneira cada usuá rio, enquanto
o identificador deste uso de visõ es é permitir o semelhante ao que ocorre que a identificação e
curso. Uma visã o pode ser gerenciamento da com as relaçõ es, também autenticaçã o do usuá rio
utilizada neste caso, sem apresentaçã o do dados pode ser removida do (confirmaçã o de que o
que seja necessá ria a aos usuá rios, sem que eles banco de dados. O usuá rio realmente é quem
criação de uma tabela tenham de se preocupar comando em SQL utilizado ele diz ser) é feita
para isso. Entã o para o com a maneira como eles para isso é o DROP VIEW. normalmente por meio de
exemplo descrito poderia estã o fisicamente Note que a remoçã o de um identificador de
ser usado o comando: armazenados na base de uma relação também pode usuá rio (ID) e por uma
CREATE VIEW B- dados. Isto normalmente levar à remoção de uma senha durante o processo
Students (name, sid, funciona adequadamente, visão caso tenha sido de logon no sistema.
course) AS SELECT já que a visã o pode ser usado algum comando que
S.sname, S.sid, E.cid FROM usada exatamente como estabeleça esta restriçã o, Que recursos devem
Students S, Enrolled E uma relaçã o, permitindo a como o CASCADE. Já o ser protegidos?
WHERE S.sid = E.sid AND definiçã o de consultas comando RESTRICT evita A proteção aos
E.grade = 'B' sobre os dados que a que uma relaçã o seja recursos computacionais
A visã o definida neste compõ em. Esta vantagem excluída quando da inclui desde aplicativos e
caso é composta por 3 acaba levando a uma existência de uma visã o arquivos de dados até
campos (name, sid e restriçã o, pois como se associada a ela. utilitá rios e o pró prio
course) cujos domínios também se trata de uma sistema operacional.
correspondem aos relaçã o, é natural o desejo CONTROLES DE Abaixo serã o
mesmos das relaçõ es de atualizaçã o os seus ACESSO E apresentados os motivos
Students (name e sid) e dados. Entretanto, como a AUTENTICAÇÃO pelos quais esses recursos
Enrolled visã o é uma tabela virtual, Os controles de acesso, devem ser protegidos.
(course). a sua atualizaçã o deve físicos ou ló gicos, têm - Aplicativos
incidir sobre a tabela base, como objetivo proteger (programas fonte e
Visões, o que nem sempre é equipamentos, aplicativos objeto)
Independência de possível, devido a e arquivos de dados O acesso nã o
Dados e Segurança problemas como contra perda, modificaçã o autorizado ao có digo fonte
O mecanismo de ambiguidade e restriçõ es ou divulgaçã o nã o dos aplicativos pode ser
visõ es provê uma de integridade. autorizada. Os sistemas usado para alterar suas
independência ló gica dos computacionais, bem funçõ es e a ló gica do
dados no modelo Necessidade de diferentes de outros tipos programa. Por exemplo,
relacional. Ela pode ser Restringir de recursos, não podem em um aplicativo
usada para definir Atualizações de ser facilmente controlados bancá rio, pode-se zerar os
relaçõ es em um esquema Visões apenas com dispositivos centavos de todas as
externo que mascare É possível atualizar ou físicos, como cadeados, contas-correntes e
mudanças ocorridas no inserir uma linha em uma alarmes ou guardas de transferir o total dos
esquema conceitual da visã o. No entanto, nem segurança. centavos para uma
base de dados das sempre esta atualizaçã o determinada conta,
aplicaçõ es. Por exemplo, fará parte dela. Isto ocorre O que sã o controles de beneficiando ilegalmente
se o esquema de uma dada porque na verdade a acesso ló gico? esse correntista.
relaçã o for alterado, pode execução destes Os controles de acesso - Arquivos de dados
ser definida uma visã o comandos promovem uma ló gico sã o um conjunto de Bases de dados,
que represente o esquema atualizaçã o ou inserção procedimentos e medidas arquivos ou transaçõ es de
antigo, permitindo que nas tabelas base e com o objetivo de bancos de dados devem
aplicaçõ es continuem dependendo da condiçã o proteger dados, ser protegidos para evitar
executando estabelecida na definiçã o programas e sistemas que os dados sejam
normalmente da visã o, a linha pode nã o contra tentativas de apagados ou alterados
sem grandes ser selecionada para acesso nã o autorizadas sem autorização, como,
modificaçõ es. compor a tabela virtual, feitas por pessoas ou por por exemplo, arquivos
Visõ es também sã o nã o refletindo a alteraçã o outros programas de com a configuraçã o do
muito ú teis no contexto de feita. computador. sistema, dados da folha de
segurança. Com elas é
pagamento, dados alterar os arquivos de log e de uma senha computador. - limitar o
estratégicos da empresa. para que suas açõ es nã o (autenticaçã o do usuá rio). tempo má ximo para o
- Utilitá rios e sistema possam ser identificadas. A identificação define para procedimento de logon. Se
operacional Dessa forma, o o computador quem é o excedido, o sistema
O acesso a utilitá rios, administrador do sistema usuá rio e a senha é um deverá encerrar o
como editores, nã o ficará sabendo que autenticador, isto é, ela procedimento;
compiladores, softwares houve uma invasã o. prova ao computador que - mostrar as seguintes
de manutençã o, o usuá rio é realmente informaçõ es, quando o
monitoraçã o e diagnó stico O que os controles de quem ele diz ser. procedimento de logon no
deve ser restrito, já que acesso ló gico pretendem sistema finalizar com
essas ferramentas podem garantir em relaçã o à Como deve ser êxito:
ser usadas para alterar segurança de projetado um processo de a) data e hora do
aplicativos, arquivos de informaçõ es? logon para ser ú ltimo logon com
dados e de configuraçã o Os controles de acesso considerado eficiente? sucesso;
do sistema operacional, ló gico sã o implantados O procedimento de b) detalhes de
por exemplo. com o objetivo de garantir logon deve divulgar o qualquer tentativa
O sistema operacional que: mínimo de informaçõ es de logon sem
é sempre um alvo - apenas usuá rios sobre o sistema, evitando sucesso,
bastante visado, pois sua autorizados tenham fornecer a um usuá rio nã o desde o ú ltimo
configuraçã o é o ponto- acesso aos recursos; autorizado informaçõ es procedimento realizado
chave de todo o esquema - os usuá rios detalhadas. Um com sucesso.
de segurança. A tenham acesso apenas aos procedimento de logon
fragilidade do sistema recursos realmente eficiente deve: O que é identificaçã o
operacional compromete necessá rios para a - informar que o do usuá rio?
a segurança de todo o execução de suas tarefas; computador só deve ser A identificação do
conjunto de aplicativos, - o acesso a acessado por pessoas usuá rio, ou ID, deve ser
utilitá rios e arquivos. recursos críticos seja bem autorizadas; ú nica, isto é, cada usuá rio
- Arquivos de senha monitorado e restrito a - evitar identificar deve ter uma identificaçã o
A falta de proteçã o poucas pessoas; o sistema ou suas pró pria. Todos os usuá rios
adequada aos arquivos - os usuá rios aplicaçõ es até que o autorizados devem ter um
que armazenam as senhas estejam impedidos de processo de logon esteja ID, quer seja um có digo de
pode comprometer todo o executar transaçõ es completamente concluído; caracteres, cartã o
sistema, pois uma pessoa incompatíveis com sua - durante o inteligente ou qualquer
nã o autorizada, ao obter funçã o ou além de suas processo de logon, evitar o outro meio de
identificador (ID) e senha responsabilidades. fornecimento de identificaçã o. Essa
de um usuá rio O controle de acesso mensagens de ajuda que unicidade de identificaçã o
privilegiado, pode, pode ser traduzido, entã o, poderiam auxiliar um permite um controle das
intencionalmente, causar em termos de funçõ es de usuá rio não autorizado a açõ es praticadas pelos
danos ao sistema. Essa identificaçã o e completar esse usuá rios através dos logs.
pessoa dificilmente será autenticaçã o de usuá rios; procedimento; No caso de
barrada por qualquer alocação, gerência e - validar a identificaçã o a partir de
controle de segurança monitoramento de informação de logon caracteres, é comum
instalado, já que se faz privilégios; limitaçã o, apenas quando todos os estabelecer certas regras
passar por um usuá rio monitoramento e dados de entrada de composiçã o, como, por
autorizado. desabilitaçã o de acessos; e estiverem completos. Caso exemplo, quantidade
- Arquivos de log prevençã o de acessos nã o ocorra algum erro, o mínima e máxima de
Os arquivos de log sã o autorizados. sistema nã o deve indicar caracteres, misturando
usados para registrar qual parte do dado de letras, nú meros e
açõ es dos usuá rios, Como os usuá rios sã o entrada está correta ou símbolos.
constituindo-se em ó timas identificados e incorreta, como, por
fontes de informaçã o para autenticados? exemplo, ID ou senha; O que é autenticaçã o
auditorias futuras. Os logs Os usuá rios dos - limitar o nú mero do usuá rio?
registram quem acessou sistemas computacionais de tentativas de logon sem Apó s a identificaçã o do
os recursos sã o identificados e sucesso (é recomendado usuá rio, deve-se proceder
computacionais, autenticados durante um um má ximo de três à sua autenticaçã o, isto é,
aplicativos, arquivos de processo, chamado Logon. tentativas), e ainda: o sistema deve confirmar
dados e utilitá rios, quando Os processos de logon são a) registrar as se o usuá rio é realmente
foi feito o acesso e que usados para conceder tentativas de acesso quem ele diz ser. Os
tipo de operaçõ es foram acesso aos dados e invá lidas; sistemas de autenticação
efetuadas. aplicativos em um sistema b) forçar um tempo sã o uma combinaçã o de
Um invasor ou usuá rio computacional, e orientam de espera antes de hardware, software e de
nã o autorizado pode os usuá rios durante sua permitir novas tentativas procedimentos que
tentar acessar o sistema, identificaçã o e de entrada no sistema ou permitem o acesso de
apagar ou alterar dados, autenticaçã o. rejeitar qualquer tentativa usuá rios aos recursos
acessar aplicativos, alterar Normalmente esse posterior de acesso sem computacionais.
a configuraçã o do sistema processo envolve a autorizaçã o específica; Na autenticaçã o, o
operacional para facilitar entrada de um ID c) encerrar as usuá rio deve apresentar
futuras invasõ es, e depois (identificaçã o do usuá rio) conexõ es com o algo que só ele saiba ou
possua, podendo até - evitar reutilizar computador (ASDFG, sistemas. Se um deles nã o
envolver a verificaçã o de as mesmas senhas; YUIOP); for devidamente
características físicas - alterar senhas - objetos ou locais protegido, a senha poderá
pessoais. A maioria dos temporá rias no que podem ser vistos a ser descoberta e utilizada
sistemas atuais solicita primeiro acesso ao partir da mesa do nos sistemas que, a priori,
uma senha (algo que, sistema; usuá rio (nome de um estariam seguros. Outro
supostamente, só o - nã o incluir livro na estante, nome conselho: adquira o há bito
usuá rio conhece), mas já senhas em processos de uma loja de trocar sua senha com
existem sistemas mais automá ticos de acesso vista pela janela); frequência. Trocá -la a
modernos utilizando ao sistema (por - qualquer senha cada sessenta, noventa
cartõ es inteligentes (algo exemplo, armazenadas com menos de seis dias é considerada uma
que o usuá rio possui) ou em macros). caracteres. boa prá tica.
ainda características Vale lembrar também Alguns softwares sã o Se você realmente nã o
físicas (algo intrínseco ao que utilizar a mesma capazes de identificar conseguir memorizar sua
usuá rio), como o formato senha para vá rios senhas frá geis, como senha e tiver que escrevê-
da mã o, da retina ou do sistemas nã o é uma boa algumas dessas citadas la em algum pedaço de
rosto, impressã o digital e prá tica, pois a primeira acima, a partir de bases de papel, tenha pelo menos o
reconhecimento de voz. atitude de um invasor, dados de nomes e cuidado de nã o identificá -
quando descobre a senha sequências de caracteres la como sendo uma senha.
Como orientar os de um usuá rio em um mais comuns, e ainda Nã o pregue esse pedaço
usuá rios em relaçã o à s sistema vulnerá vel, é bloquear a escolha dessas de papel no pró prio
senhas? tentar a mesma senha em senhas por parte do computador, nã o guarde a
Para que os controles outros sistemas a que o usuá rio. Essas bases de senha junto com a sua
de senha funcionem, os usuá rio tem acesso. dados normalmente fazem identificaçã o de usuá rio, e
usuá rios devem ter pleno parte do pacote de nunca a envie por e-mail
conhecimento das Que tipos de senhas software de segurança, e ou a armazene em
políticas de senha da devem ser evitadas? podem ser atualizadas arquivos do computador.
organizaçã o, e devem ser Os usuá rios devem pelo gerente de segurança
orientados e estimulados evitar senhas compostas com novas inclusõ es. Como deve ser feita
a segui-las fielmente. de elementos facilmente a concessã o de
Todos os usuá rios devem identificá veis por Como escolher uma senhas aos usuá rios?
ser solicitados a: possíveis invasores, como boa senha? A concessã o de senhas
- manter a por exemplo: Geralmente sã o deve ser feita de maneira
confidencialidade das - nome do usuá rio; consideradas boas senhas formal, considerando os
senhas; - identificador do aquelas que incluem, em seguintes pontos:
- nã o compartilhar usuá rio (ID), mesmo sua composiçã o, letras - solicitar aos
senhas; que seus caracteres (maiú sculas e usuá rios a assinatura de
- evitar registrar estejam minú sculas), nú meros e uma declaraçã o, a fim de
as senhas em papel; embaralhados; símbolos embaralhados, manter a
- selecionar - nome de totalizando mais de seis confidencialidade de sua
senhas de boa membros de sua caracteres. Porém, para senha pessoal (isso pode
qualidade, evitando o família ou de amigos ser boa mesmo, a senha estar incluso nos termos e
uso de senhas muito íntimos; tem de ser difícil de ser condiçõ es do contrato de
curtas ou muito - nomes de adivinhada por outra trabalho do usuá rio);
longas, que os pessoas ou lugares em pessoa, mas de fá cil - garantir, aos
obriguem a escrevê- geral; memorizaçã o, para que usuá rios, que estã o sendo
las em um pedaço de - nome do sistema nã o seja necessá rio anotá - fornecidas senhas iniciais
papel para nã o serem operacional ou da la em algum lugar. seguras e temporá rias,
esquecidas má quina que está Também é conveniente forçando-os a alterá -las
(recomenda-se sendo utilizada; escolher senhas que imediatamente no
tamanho entre seis e - nomes pró prios; possam ser digitadas primeiro logon. O
oito caracteres); - datas; rapidamente, dificultando fornecimento de senhas
- alterar a senha - nú meros de que outras pessoas, a uma temporá rias, nos casos de
sempre que existir telefone, de cartã o de certa distâ ncia ou por esquecimento por parte
qualquer indicaçã o de crédito, de carteira de cima de seus ombros, dos usuá rios, deve ser
possível identidade ou de possam identificar a efetuado somente apó s a
comprometimento do outros documentos sequência de caracteres. identificaçã o positiva do
sistema ou da pró pria pessoais; Um método bastante respectivo usuá rio;
senha; - placas ou marcas difundido é selecionar - fornecer as
- alterar a senha de carro; uma frase significativa senhas temporá rias aos
em intervalos - palavras que para o usuá rio e utilizar os usuá rios de forma segura.
regulares ou com base constam de primeiros caracteres de O uso de terceiros ou de
no nú mero de acessos dicioná rios em cada palavra que a mensagens de correio
(senhas para usuá rios qualquer idioma; - compõ e, inserindo eletrô nico desprotegidas
privilegiados devem letras ou nú meros símbolos entre eles. É (nã o criptografadas) deve
ser alteradas com repetidos; também recomendá vel ser evitado.
maior frequência que - letras seguidas nã o utilizar a mesma
senhas normais); do teclado do senha para vá rios
O que a instituiçã o administrativos eficientes reproduzidas com maior O que são sistemas
pode fazer para proteger e que informem o gerente facilidade. biométricos?
controlar as senhas de de segurança, ou o Os sistemas
acesso a seus sistemas? administrador dos O que sã o cartõ es biométricos sã o sistemas
O sistema de controle sistemas, da ocorrência de magnéticos automá ticos de verificaçã o
de senhas deve ser demissõ es ou de inteligentes? de identidade baseados
configurado para proteger desligamentos de Os cartõ es inteligentes em características físicas
as senhas armazenadas funcioná rios. Esses sã o tokens que contêm do usuá rio. Esses sistemas
contra uso nã o autorizado, procedimentos, na prá tica, microprocessadores e têm como objetivo suprir
sem apresentá -las na tela nem sempre sã o seguidos, capacidade de memó ria deficiências de segurança
do computador, expondo a organizaçã o a suficiente para armazenar das senhas, que podem ser
mantendo-as em arquivos riscos indesejá veis. dados, a fim de dificultar reveladas ou descobertas,
criptografados e Também devem ser sua utilizaçã o por outras e das tokens, que podem
estipulando datas de bloqueadas contas de pessoas que nã o seus ser perdidas ou roubadas.
expiração (normalmente usuá rios apó s um proprietá rios legítimos. Os sistemas
se recomenda a troca de determinado nú mero de O primeiro cartã o biométricos automá ticos
senhas apó s 60 ou 90 tentativas de acesso sem inteligente, patenteado em sã o uma evoluçã o natural
dias). Alguns sistemas, sucesso. Esse 1975, foi o de Roland dos sistemas manuais de
além de criptografar as procedimento diminui os Moreno, considerado o pai reconhecimento
senhas, ainda guardam riscos de alguém tentar do cartã o inteligente. amplamente difundidos
essas informaçõ es em adivinhar as senhas. Comparado ao cartã o há muito tempo, como a
arquivos escondidos que Atingido esse limite, só o magnético, que é um aná lise grafoló gica de
nã o podem ser vistos por administrador do sistema simples dispositivo de assinaturas, a aná lise de
usuá rios, dificultando, poderá desbloquear a memó ria, o cartã o impressõ es digitais e o
assim, a açã o dos hackers. conta do usuá rio, por inteligente nã o só pode reconhecimento de voz.
Para evitar o uso exemplo. armazenar informaçõ es Hoje já existem sistemas
frequente das mesmas para serem lidas, mas ainda mais sofisticados,
senhas, o sistema de Existem outras formas também é capaz de como os sistemas de
controle de senhas deve de autenticação do processar informaçõ es. aná lise da conformaçã o
manter um histó rico das usuá rio, além do uso de Sua clonagem é mais dos vasos sanguíneos na
ú ltimas senhas utilizadas senhas? difícil e a maioria dos retina.
por cada usuá rio. Deve-se Sim. A autenticaçã o cartõ es inteligentes ainda
ressaltar, entretanto, que dos usuá rios pode ser oferece criptografia. Que características
a troca muito frequente de feita a partir de tokens, ou Normalmente o humanas podem ser
senhas também pode ainda, de sistemas usuá rio de cartã o verificadas por sistemas
confundir o usuá rio, que biométricos. inteligente precisa biométricos?
poderá passar a escrever a O que são tokens? fornecer uma senha à Teoricamente,
senha em algum lugar A ideia de fornecer leitora de cartã o para que qualquer característica
visível ou escolher uma tokens aos usuá rios como o acesso seja permitido, humana pode ser usada
senha mais fá cil, forma de identificá -los é como uma medida de como base para a
comprometendo, assim, bastante antiga. No nosso proteçã o a mais contra o identificaçã o biométrica.
sua segurança. dia-a-dia, estamos roubo de cartõ es. Na prá tica, entretanto,
O gerente de frequentemente As instituiçõ es existem algumas
segurança deve utilizando tokens para bancá rias, financeiras e limitaçõ es. A tecnologia
desabilitar contas inativas, acessar alguma coisa. As governamentais são os deve ser capaz de medir
sem senhas ou com chaves que abrem a porta principais usuá rios dessa determinada
senhas padronizadas. Até da sua residência ou seu tecnologia, em funçã o de característica de tal forma
mesmo a senha cartã o com tarja seus benefícios em relaçã o que o indivíduo seja
temporá ria fornecida ao magnética para utilizar o à segurança de realmente ú nico,
usuá rio pela gerência de caixa eletrô nico do banco informaçõ es e pela distinguindo inclusive
segurança deve ser gerada sã o exemplos de tokens. O possibilidade de reduçã o gêmeos, porém nã o deve
de forma que já entre cartã o magnético é ainda de custos de instalaçõ es e ser invasiva ou ferir os
expirada no sistema, uma token especial, pois de pessoal, como, por direitos dos indivíduos.
exigindo uma nova senha guarda outras exemplo, a substituição Um dos problemas
para os pró ximos logons. informaçõ es, como, por dos guichês de enfrentados pelos
Portanto, deve haver um exemplo, a sua conta atendimento ao pú blico sistemas biométricos
procedimento que force a bancá ria. nos bancos por caixas atuais é sua alta taxa de
troca de senha Token pode ser eletrô nicos. Os cartõ es erro, em funçã o da
imediatamente apó s a definida, entã o, como um inteligentes têm sido mudança das
primeira autenticação, objeto que o usuá rio usados em diversas características de uma
quando o usuá rio poderá possui, que o diferencia aplicaçõ es: cartõ es pessoa com o passar dos
escolher a senha que será das outras pessoas e o bancá rios, telefô nicos e de anos, ou devido a
utilizada dali por diante. habilita a acessar algum crédito, dinheiro problemas de saú de ou o
Ex-funcioná rios devem objeto. A desvantagem das eletrô nico, segurança de pró prio nervosismo, por
ter suas senhas tokens em relaçã o às acesso, carteiras de exemplo. A tolerâ ncia a
bloqueadas. Para isso, senhas é que essas, por identidade. erros deve ser
devem existir serem objetos, podem ser estabelecida com precisão,
procedimentos perdidas, roubadas ou de forma a nã o ser grande
o suficiente para admitir imagem captada por uma pagamento, poderá ser definiçõ es de acesso desse
impostores, nem pequena câ mera infravermelha que apresentado um menu usuá rio e do recurso
demais a ponto de negar mostra os padrõ es inicial com três opçõ es desejado conferem. O
acesso a usuá rios térmicos de uma face. Essa diferentes: funcioná rio, usuá rio só conseguirá o
legítimos. Abaixo serã o imagem é ú nica e, gerente e setor de acesso se essa verificação
apresentadas algumas combinada com recursos humanos. Nesse for positiva.
características humanas algoritmos sofisticados de caso, o administrador do Para garantir a
verificadas por sistemas comparaçã o de diferentes sistema deverá conceder segurança ló gica, pode-se
biométricos existentes: níveis de temperatura acesso a cada uma das especificar dois tipos de
- Impressõ es distribuídos pela face, opçõ es de acordo com a controle, sob ó ticas
digitais – sã o constitui-se em uma função desempenhada diferentes: - O que um
características ú nicas e técnica nã oinvasiva, pelo usuá rio. Portanto, o sujeito pode fazer; ou - O
consistentes. Nos sistemas altamente confiá vel, nã o funcioná rio só terá acesso que pode ser feito com um
biométricos que utilizam sendo afetada por a dados da sua folha de objeto.
essa opção, sã o alteraçõ es de saú de, idade pagamento pessoal,
armazenados de 40 a 60 ou temperatura do corpo. enquanto que o gerente O que são direitos e
pontos para verificar uma Sã o armazenados ao todo poderá ter acesso a permissõ es de acesso?
identidade. O sistema 19.000 pontos de algumas informaçõ es da Definir direitos de
compara a impressã o lida identificaçã o, podendo folha de seus funcioná rios. acesso individualmente
com impressõ es digitais distinguir gêmeos O setor de recursos para cada sujeito e objeto
de pessoas autorizadas, idênticos, mesmo no humanos, para poder pode ser uma maneira um
armazenadas em sua base escuro. O alimentar a base de dados tanto trabalhosa quando
de dados. Atualmente, desenvolvimento dessa de pagamento, obterá um estiverem envolvidas
estã o sendo utilizadas tecnologia tem como um nível diferente de acesso e grandes quantidades de
impressõ es digitais em de seus objetivos baratear sua interaçã o com o sujeitos e objetos. A forma
alguns sistemas seu custo para que possa sistema será feita a partir mais comum de definiçã o
governamentais, como, ser usada em um nú mero de menus pró prios para a de direitos de acesso,
por exemplo, o sistema de maior de aplicaçõ es de administraçã o de pessoal. nesse caso, é a matriz de
previdência social na identificaçã o e de Os menus apresentados controle de acesso. Nessa
Espanha e o de registro de autenticaçã o. apó s a seleçã o de uma das matriz pode-se fazer duas
eleitores na Costa Rica; opçõ es (funcioná rio, aná lises: uma em relação
- Voz – os sistemas Como restringir o gerente ou setor de aos sujeitos; outra, em
de reconhecimento de voz acesso aos recursos recursos humanos) serã o, relaçã o aos objetos.
sã o usados para controle informacionais? portanto, diferentes. Na primeira
de acesso, porém nã o sã o O fato de um usuá rio abordagem, cada sujeito
tã o confiá veis como as ter sido identificado e Para que servem os recebe uma permissã o (ou
impressõ es digitais, em autenticado nã o quer controles de funçõ es capacidade) que define
funçã o dos erros causados dizer que ele poderá de aplicativos? todos os seus direitos de
por ruídos do ambiente e acessar qualquer No que diz respeito às acesso. As permissõ es de
de problemas de garganta informaçã o ou aplicativo funçõ es internas dos acesso sã o, entã o,
ou nas cordas vocais das sem qualquer restriçã o. aplicativos, os respectivos atributos, associados a um
pessoas a eles submetidas; Deve-se implementar um proprietá rios deverã o sujeito ou objeto, que
- Geometria da controle específico, definir quem poderá definem o que ele pode ou
mã o – também é usada em restringindo o acesso dos acessá-las e como, por nã o fazer com outros
sistemas de controle de usuá rios apenas às meio de autorizaçã o para objetos. Essa abordagem,
acesso, porém essa aplicaçõ es, arquivos e uso de funçõ es específicas no entanto, é pouco
característica pode ser utilitá rios imprescindíveis ou para restriçã o de utilizada, já que, na
alterada por aumento ou para desempenhar suas acesso a funçõ es de prá tica, com grandes
diminuição de peso ou funçõ es na organizaçã o. acordo com o usuá rio quantidades de sujeitos e
pela artrite; Esse controle pode ser (menus de acesso objetos, a visualizaçã o
- Configuraçã o da feito por menus, funçõ es predefinidos), horá rio ou exata de quem tem acesso
íris e da retina – os ou arquivos. tipo de recursos a um determinado objeto
sistemas que utilizam (impressoras, fitas nã o é tã o clara,
essas características se backup). comprometendo, assim, a
propõ em a efetuar gerência de controle de
identificaçã o mais Como proteger acesso.
confiá vel do que os Para que servem os arquivos? Na segunda
sistemas que verificam controles de menu? A maioria dos sistemas abordagem, os direitos de
impressõ es digitais. Os controles de menu operacionais possui acesso sã o armazenados
Entretanto, sã o sistemas podem ser usados para mecanismos de controle com o pró prio objeto
invasivos, pois direcionam restringir o acesso de de acesso que definem as formando a chamada lista
feixes de luz aos olhos das diferentes categorias de permissõ es e os de controle de acesso
pessoas que se submetem usuá rios apenas à queles privilégios de acesso para (Access Control List
à sua identificaçã o; aplicativos ou utilitá rios cada recurso ou arquivo (ACL)).
- Reconhecimento indispensá veis a cada no sistema. Quando um
facial através de categoria. usuá rio tenta acessar um O que são listas de
termogramas - o Por exemplo, em um recurso, o sistema controle de acesso?
termograma facial é uma sistema de folha de operacional verifica se as
Enquanto a permissão de invasã o por meio da protegidos contra automá tico, isto é, a
de acesso define o que um identificaçã o e alteraçã o ou destruiçã o sessã o é desativada apó s
objeto pode ou nã o fazer autenticaçã o de usuá rios. por usuá rios ou invasores um determinado tempo
com outros, a lista de Na ocorrência de uma que queiram encobrir sem qualquer atividade no
controle de acesso define invasã o, falha do sistema suas atividades. terminal ou computador.
o que os outros objetos ou ou atividade nã o Para restaurá -la, o usuá rio
sujeitos podem fazer com autorizada, é O que deve ser é obrigado a fornecer
o objeto a ela associado. imprescindível reunir registrado em logs? novamente seu ID e senha.
As listas de controle de evidências suficientes Devido à grande Em alguns sistemas
acesso nada mais sã o do para que possam ser quantidade de dados operacionais, o pró prio
que bases de dados, tomadas medidas armazenada em logs, usuá rio, apó s sua
associadas a um objeto, corretivas necessá rias ao deve-se levar em habilitaçã o no processo de
que descrevem os restabelecimento do consideração que seu uso logon, pode ativar e
relacionamentos entre sistema à s suas condiçõ es pode degradar o desativar essa funçã o de
aquele objeto e outros, normais, assim como desempenho dos sistemas. time-out. Nesse sentido,
constituindo-se em um medidas administrativas Sendo assim, é os usuá rios devem ser
mecanismo de garantia de e/ ou judiciais para aconselhá vel balancear a orientados a:
confidencialidade e investigar e punir os necessidade de registro de - encerrar as
integridade de dados. invasores. atividades críticas e os sessõ es ativas, a menos
A definição das listas A forma mais simples custos, em termos de que elas possam ser
de controle de acesso deve de monitoramento é a desempenho global dos protegidas por mecanismo
ser sempre feita pelos coleta de informaçõ es, sistemas. de bloqueio (por exemplo,
proprietá rios dos sobre determinados Normalmente, os registros proteçã o de tela com
recursos, os quais eventos, em arquivos de log incluem: senha);
determinam o tipo de histó ricos, mais - identificação dos - no caso de
proteçã o adequada a cada conhecidos como logs. usuá rios; terminal conectado a
recurso e quem Com essas informaçõ es, a - datas e horá rios computador de grande
efetivamente terá acesso a equipe de segurança é de entrada (logon) e saída porte, efetuar a
eles. capaz de registrar eventos do sistema (logoff); desconexã o quando a
A gerência das listas e de detectar tentativas de - identificação da sessã o for finalizada (nã o
de controle de acesso, na acesso e atividades nã o estaçã o de trabalho e, apenas desligar o
prá tica, também é autorizadas apó s sua quando possível, sua terminal, mas utilizar o
complicada. Para reduzir ocorrência. localizaçã o; procedimento para
os problemas de - registros das desconexã o).
gerenciamento dessas O que são logs? tentativas de acesso Como controle de
listas e o espaço de Os logs sã o registros (aceitas e rejeitadas) ao acesso ló gico, a gerência
memó ria ou disco por elas cronoló gicos de atividades sistema; de segurança pode ainda
ocupado, costuma-se do sistema que - registros das limitar o horá rio de uso
agrupar os sujeitos com possibilitam a tentativas de acesso dos recursos
características reconstrução, revisã o e (aceitas e rejeitadas) a computacionais de acordo
semelhantes ou direitos aná lise dos ambientes e outros recursos e dados. com a real necessidade de
de acesso iguais. Dessa das atividades relativas a Ao definir o que será acesso aos sistemas. Pode-
forma, os direitos de uma operaçã o, registrado, é preciso se, por exemplo,
acesso sã o associados a procedimento ou evento, considerar que desabilitar o uso dos
grupos, e nã o a sujeitos acompanhados do início quantidades enormes de recursos nos fins de
individualizados. Vale ao fim. registros podem ser semana ou à noite.
ressaltar que um sujeito Os logs sã o utilizados inviá veis de serem É usual também
pode pertencer a um ou como medidas de monitoradas. Nada limitar a quantidade de
mais grupos, de acordo detecção e adianta ter um log se ele sessõ es concorrentes,
com o objeto a ser monitoramento, nã o é periodicamente impedindo que o usuá rio
acessado. registrando atividades, revisado. Para auxiliar a consiga entrar no sistema
falhas de acesso gerência de segurança na ou na rede a partir de
Como monitorar o (tentativas frustradas de á rdua tarefa de aná lise de mais de um terminal ou
acesso aos recursos logon ou de acesso a logs, podem ser computador
informacionais? recursos protegidos) ou previamente definidas simultaneamente. Isso
O monitoramento dos uso do sistema trilhas de auditoria mais reduz os riscos de acesso
sistemas de informaçã o é operacional, utilitá rios e simples e utilizados ao sistema por invasores,
feito, normalmente, pelos aplicativos, e detalhando o softwares especializados pois se o usuá rio
registros de log, trilhas de que foi acessado, por disponíveis no mercado, autorizado já estiver
auditoria ou outros quem e quando. Com os específicos para cada conectado, o invasor nã o
mecanismos capazes de dados dos logs, pode-se sistema operacional. poderá entrar no sistema.
detectar invasõ es. Esse identificar e corrigir falhas Da mesma forma, se o
monitoramento é da estratégia de Outros controles de invasor estiver logado, o
essencial à equipe de segurança. Por conterem acesso lógico usuá rio autorizado, ao
segurança de informaçõ es, informaçõ es essenciais Outro recurso de tentar se conectar,
já que é praticamente para a detecçã o de acesso proteçã o bastante identificará que sua conta
impossível eliminar por nã o autorizado, os utilizado em alguns já está sendo usada e
completo todos os riscos arquivos de log devem ser sistemas é o time-out
poderá notificar o fato à das regras de controle de documento escrito com sistema aplicativo sob sua
gerência de segurança. acesso? seus direitos de acesso. Os responsabilidade, os
Ao especificar as usuá rios deverã o assinar proprietá rios são as
Onde as regras de regras de controle de esse documento, pessoas mais indicadas
controle de acesso sã o acesso, devem ser indicando que para definir privilégios de
definidas? considerados os seguintes entenderam as condiçõ es acesso de acordo com as
As regras de controle e aspectos: de seus direitos de acesso; reais necessidades dos
direitos de acesso para - diferenciar - manutenção de usuá rios.
cada usuá rio ou grupo regras que sempre devem um registro formal de Dessa forma, as
devem estar claramente ser cumpridas das regras todas as pessoas responsabilidades sobre
definidas no documento opcionais ou condicionais; cadastradas para usar segurança de acesso sã o
da política de controle de - estabelecer cada sistema de segregadas entre o
acesso da instituiçã o, o regras baseadas na informaçõ es; gerente do ambiente
qual deverá ser fornecido premissa “Tudo deve ser - remoçã o operacional de
aos usuá rios e provedores proibido a menos que imediata dos direitos de informá tica e os gerentes
de serviço para que expressamente permitido” acesso de usuá rios que de aplicativos.
tomem conhecimento dos ao invés da regra “Tudo é mudarem de função ou
requisitos de segurança permitido a menos que saírem da organizaçã o; Em que os usuá rios
estabelecidos pela expressamente - verificação podem ajudar na
gerência. proibido”; perió dica da lista de implantaçã o dos controles
- diferenciar as usuá rios, com intuito de de acesso ló gico?
O que considerar na permissõ es de usuá rios remover usuá rios A cooperaçã o dos
elaboraçã o da política de que são atribuídas inexistentes e IDs em usuá rios autorizados é
controle de acesso? automaticamente por um duplicidade; essencial para a eficácia
A política de controle sistema de informaçã o - inclusã o de da segurança. Os usuá rios
de acesso deve levar daquelas atribuídas por cláusulas nos contratos de devem estar cientes de
em conta: um administrador; funcioná rios e suas responsabilidades
- os requisitos de - priorizar regras prestadores de serviço, para a manutençã o efetiva
segurança de aplicaçõ es que necessitam da que especifiquem as dos controles de acesso,
específicas do negó cio da aprovaçã o de um sançõ es a que estarã o considerando,
instituiçã o; administrador antes da sujeitos em caso de particularmente, o uso de
- a identificaçã o de liberaçã o daquelas que tentativa de acesso nã o senhas e a segurança dos
toda informaçã o referente nã o necessitam de tal autorizado. equipamentos de
à s aplicaçõ es de negó cio; aprovaçã o. informá tica que
- as políticas para Quem é o costumam utilizar.
autorização e distribuiçã o Que tipo de regras de responsá vel pelos
de informaçã o (por controle de acesso devem controles de acesso Análise estática de
exemplo, a necessidade de ser formalizadas na ló gico? código fonte24
conhecer os princípios e política? A responsabilidade
níveis de segurança, bem O acesso aos sistemas sobre os controles de A aná lise de có digo
como a classificação da de informaçã o deve ser acesso ló gico pode ser para fins de segurança é
informaçã o); controlado por um tanto do gerente do uma das alternativas
- a processo formal, o qual ambiente operacional bastante utilizadas pelo
compatibilidade entre o deverá abordar, entre como dos proprietá rios mercado para o
controle de acesso e as outros, os seguintes (ou gerentes) de desenvolvimento de
políticas de classificaçã o tó picos: aplicativos. O gerente do software seguro. Sua
da informaçã o dos - utilizaçã o de um ambiente operacional difusão se deve primeiro
diferentes sistemas e identificador de usuá rio deve controlar o acesso à aos resultados, em termos
redes; (ID) ú nico, de forma que rede, ao sistema de localização de bugs de
- a legislaçã o cada usuá rio possa ser operacional e seus segurança em có digo e,
vigente e qualquer identificado e recursos e, ainda, aos segundo, pela facilidade
obrigaçã o contratual, responsabilizado por suas aplicativos e arquivos de de incorporaçã o ao ciclo
considerando a proteçã o açõ es; dados. É responsá vel, de desenvolvimento, uma
do acesso a dados ou - verificaçã o se o assim, por proteger os vez que as principais
serviços; usuá rio obteve recursos do sistema ferramentas se integram
- o perfil de acesso autorização do contra invasores ou à s IDEs mais usadas hoje,
padrã o para categorias de proprietá rio do sistema de funcioná rios nã o como o Eclipse e o Visual
usuá rios comuns; informaçã o ou serviço autorizados. Studio da Microsoft.
- o gerenciamento para sua utilizaçã o; Enquanto isso, os Todas as ferramentas
dos direitos de acesso em - verificaçã o se o proprietá rios dos comerciais existentes se
todos os tipos de conexõ es nível de acesso concedido aplicativos sã o fundamentam no mesmo
disponíveis em um ao usuá rio está adequado responsá veis por seu princípio, regras e
ambiente distribuído aos propó sitos do negó cio controle de acesso, padrõ es de codificaçã o
conectado em rede. e consistente com a identificando quem pode suspeitos. Isso as tornam
política de segurança da acessar cada um dos
24 Fonte:
Que cuidados devem organizaçã o; sistemas e que tipo de
ser tomados na definiçã o - fornecimento, operaçõ es pode executar. http://softwareseguro.blogspot.co
Por conhecerem bem o m.br/2007/07/ferramentas-
aos usuá rios, de
deanlise-cdigo-fonte.html
muito dependentes da As aná lises de có digo
açã o humana. Num fonte podem ser divididas
primeiro momento, para de acordo com as
desenhar essas regras a seguintes abordagens:
partir de muita pesquisa e - Aná lise está tica:
depois, para avaliar o a aná lise está tica pode
resultado de uma aná lise compreender as técnicas
de có digo. de busca direta a partir de
As ferramentas de lista de strings (grep); a
aná lise de có digo aná lise léxica, onde os
fundamentam ao Teorema tokens do có digo fonte sã o
de Rice, que coloca que comparados com à queles
qualquer questã o nã o contidos numa biblioteca
trivial endereçada a um de vulnerabilidades e
programa pode ser aná lise semâ ntica, onde se
reduzido ao Problema de prevê como o programa se
Halting, isso implica que comportará em tempo de
os problemas de aná lise execução, usando a
de có digo sã o insolú veis tecnologia de
no pior caso e, por compiladores (á rvore
consequência, que essas sintá tica abstrata)
ferramentas sã o obrigadas - Aná lise de fluxo
a fazer aproximaçã o, cujo de controle: usada para
resultado é algo nã o caminhar através das
perfeito. condiçõ es ló gicas do
Os principais có digo. O processo
problemas das funciona como a seguir:
ferramentas de aná lise de - Observe uma
có digo fonte para funçã o e determine cada
segurança estã o condiçã o de desvio. Essas
concentradas em: incluem loops, switchs, if's
- Falso negativo - e blocos try/catch.
o programa contém bugs - Entenda as
nã o endereçados pela condiçõ es sobre como
ferramenta. Isso dá a falsa cada bloco será executado.
sensaçã o de que nã o - Vá para a
existe bugs, que na pró xima funçã o e repita.
verdade significa que a
ferramenta nã o foi capaz
de encontrar mais
exemplares.
- Falso positivo - a
ferramenta endereça bugs
nã o existentes. Isso se
refere a duas
possibilidades: um erro
propriamente dito, onde a
ferramenta localizou um
bug que nã o existe
fisicamente; ou há uma
classificaçã o da
ferramenta incoerente
com as variá veis do
ambiente. Por exemplo, a
ferramenta poderia
encontrar um bug de SQL
Injection, que na
realidade, nã o interessa
para o software
investigado pelas suas
características de
operaçã o.
Vale ressaltar que as
ferramentas comerciais
procuram reduzir o falso
positivo, assumindo o
custo de deixar passar
falsos negativos.
Apostila Digital Licenciada para Diego Rosilan Santana Pinheiro - CPF:009.064.395-07 (Proibida a Revenda) - www.apostilasopcao.com.br

APOSTILAS OPÇÃO

Aná lise de fluxo de dados: usada para seguir fluxos de Um backup de dados em um banco de dados completo
dados dos pontos de entrada aos pontos de saída. O processo (um backup de banco de dados), um banco de dados parcial
funciona como descrito a seguir: (um backup parcial) ou um conjunto de arquivos de dados ou
- Para cada entrada, determine o quanto você grupos de arquivos (um backup de arquivo). - backup de
acredita na fonte de entrada. Quando em dú vida você nã o banco de dados
deve acreditar. Um backup de um banco de dados. Os backups completos
- Siga o fluxo de dados para cada saída possível, de banco de dados representam todo o banco de dados no
registrando ao longo do percurso qualquer tentativa de momento em que o backup é concluído. Os backups de banco
validaçã o de dados. de dados diferenciais contêm somente alteraçõ es feitas no
- Vá para a pró xima entrada e continue. banco de dados desde seu backup completo de banco de
dados mais recente.
A ferramenta mais eficiente é a que consegue fazer uso - backup diferencial
dessas abordagens combinadas para reduzir tanto o falso Um backup de dados que se baseia no backup completo
negativo, como o falso positivo. Alguns fornecedores estã o na mais recente de um banco de dados completo ou parcial ou
busca por ferramentas efetivas em temos de aná lise de um conjunto de arquivos de dados ou grupos de arquivos (a
có digo para segurança. Dentre eles, vale destacar: base diferencial) que contém somente as extensõ es de dados
- Coverity alterados desde a base diferencial.
- Fortify Um backup diferencial parcial registra apenas as
- Ounce Labs extensõ es de dados que foram alteradas nos grupos de
- Microsoft arquivos desde o backup parcial anterior, conhecido como a
base para o diferencial.
Vale reforçar, que para conseguir tirar o melhor proveito - backup completo
das ferramentas de aná lise de có digo fonte para segurança, Um backup de dados que contém todos os dados em um
seu uso deve estar amparado por um ciclo de banco de dados ou em um conjunto de grupos de arquivos ou
desenvolvimento seguro, como o CLASP ou SDL. arquivos, além de log suficiente para permitir a recuperaçã o
desses dados.
Visão geral de backup (SQL Server)25 - backup de log
Este tó pico apresenta o componente de backup do SQL Um backup de logs de transaçõ es que inclui todos os
Server. O backup do banco de dados do SQL Server é registros de log dos quais nã o foi feito backup em um backup
essencial para proteger seus dados. Esta discussã o abrange de log anterior. (modelo de recuperaçã o completa)
tipos de backup e restriçõ es de backup. O tó pico também - backup de arquivo
apresenta dispositivos de backup do SQL Server e mídia de Um backup de um ou mais arquivos ou grupos de
backup. arquivos de banco de dados.
- fazer backup [verbo] - backup parcial
Copia os dados ou registros de log de um banco de dados Contém dados apenas de alguns grupos de arquivos em
do SQL Server ou de seu log de transaçõ es para um um banco de dados, incluindo os dados no grupo de arquivos
dispositivo de backup, como um disco, a fim de criar um primá rio, em cada grupo de arquivos de leitura/gravaçã o e
backup de dados ou backup de log. em qualquer arquivo somente leitura especificado
- backup [substantivo] opcionalmente.
Uma có pia dos dados do SQL Server que pode ser usada
para restaurar e recuperar os dados apó s uma falha. Um Termos e definições de mídia de backup
backup dos dados do SQL Server é criado no nível de um - dispositivo de backup
banco de dados ou de um ou mais de seus arquivos ou grupos Um disco ou dispositivo de fita no qual sã o gravados
de arquivos. Nã o é possível criar backups no nível da tabela. backups do SQL Server e nos quais eles podem ser
Além dos backups de dados, o modelo de recuperaçã o restaurados. Os backups do SQL Server também podem ser
completa requer a criaçã o de backups do log de transaçõ es. gravados em um serviço de armazenamento do Blob do
- modelo de recuperação Windows Azure. O formato de URL é usado para especificar o
Uma propriedade de banco de dados que controla a destino e o nome do arquivo de backup.
manutençã o do log de transaçõ es em um banco de dados. - mídia de backup
Existem três modelos de recuperaçã o: simples, completo e Uma ou mais fitas ou arquivos de disco nos quais um ou
bulk-logged. O modelo de recuperaçã o de banco de dados mais backups foram gravados.
determina seus requisitos de backup e de restauraçã o. - conjunto de backup
- restaurar O conteú do de backup adicionado a um conjunto de
Um processo multifase que copia todos os dados e mídias por uma operaçã o de backup bem-sucedida.
pá ginas de log de um backup do SQL Server para um banco - família de mídia
de dados especificado e, em seguida, efetua roll-forward de Os backups criados em um ú nico dispositivo não
todas as transaçõ es registradas no backup, aplicando as espelhado ou um conjunto de dispositivos espelhados em um
alteraçõ es registradas para avançar os dados em tempo. conjunto de mídias
- conjunto de mídias
Tipos de backups Uma coleção ordenada de mídias de backup, fitas ou
- backup somente có pia arquivos de disco, em que uma ou mais operaçõ es de backup
Um backup de uso especial que é independente da foram gravadas, usando um nú mero e um tipo fixo de
sequência regular dos backups do SQL Server. dispositivos de backup.
- backup de dados - conjunto de mídias espelhado
Vá rias có pias (espelhos) de um conjunto de mídias.

25 Fonte: https://msdn.microsoft.com/pt-br/library/ms175477(v=sql.120).aspx

Conhecimentos de Informática 82
Pedido N.: 2886190 - Apostila Licenciada para diegorosilan@hotmail.com (Proibida a Revenda) - www.apostilasopcao.com.br
Apostila Digital Licenciada para Diego Rosilan Santana Pinheiro - CPF:009.064.395-07 (Proibida a Revenda) - www.apostilasopcao.com.br

APOSTILAS OPÇÃO

-
Fazer backup e restaurar bancos de dados do SQL (um backup parcial) ou um conjunto de arquivos de dados ou
Server grupos de arquivos (um backup de arquivo).
O componente de backup e restauraçã o do SQL Server - backup de banco de dados
oferece uma proteçã o essencial para dados críticos Um backup de um banco de dados. Os backups completos
armazenados em bancos de dados do SQL Server. Para de banco de dados representam todo o banco de dados no
minimizar o risco de perda de dados catastró fica, você momento em que o backup é concluído. Os backups de banco
precisa fazer backup dos bancos de dados para preservar as de dados diferenciais contêm somente alteraçõ es feitas no
modificaçõ es feitas nos dados regularmente. Uma estratégia banco de dados desde seu backup completo de banco de
de backup e restauraçã o bem-planejada ajuda a proteger dados mais recente.
bancos de dados contra perda de dados causada por vá rias - backup diferencial
falhas. Teste sua estratégia restaurando um conjunto de Um backup de dados que se baseia no backup completo
backups e recuperando depois seu banco de dados para se mais recente de um banco de dados completo ou parcial ou
preparar para responder com eficiência a um desastre. um conjunto de arquivos de dados ou grupos de arquivos (a
Além do armazenamento local para guardar os backups, o base diferencial) que contém somente os dados alterados
SQL Server também oferece suporte ao backup e à desde essa base.
restauraçã o no serviço de armazenamento de Blob do - backup completo
Windows Azure. . Um backup de dados que contém todos os dados em um
banco de dados ou em um conjunto de grupos de arquivos ou
Benefícios arquivos, além de log suficiente para permitir a recuperaçã o
O backup dos bancos de dados do SQL Server, a execuçã o desses dados.
de procedimentos de restauração de teste nos backups e o - backup de log
armazenamento de có pias de backups em um local externo Um backup de logs de transaçõ es que inclui todos os
seguro evita a perda de dados potencialmente catastró fica. registros de log dos quais nã o foi feito backup em um backup
Com backups vá lidos de um banco de dados, você pode de log anterior. (Modelo de recuperação completa)
recuperar seus dados de muitas falhas, como: - recuperação
- Falha de mídia. Para retornar um banco de dados a um estado está vel e
- Por exemplo, erros de usuá rio, que removem uma consistente.
tabela por engano. - recuperação
- Por exemplo, problemas de hardware, uma unidade Uma fase de inicialização de banco de dados ou de
de disco danificada ou perda permanente de um servidor. restauraçã o com recuperaçã o que coloca o banco de dados
- Desastres naturais. Ao usar o Backup do SQL Server em um estado de transaçã o consistente.
para serviço de armazenamento de Blob do Windows - modelo de recuperação
Azure, é possível criar um backup externo em uma regiã o Uma propriedade de banco de dados que controla a
diferente daquela do seu local, para usar no caso de um manutençã o do log de transaçõ es em um banco de dados.
desastre natural afetar seu local. Existem três modelos de recuperaçã o: simples, completo e
Além disso, os backups de um banco de dados são ú teis bulk-logged. O modelo de recuperaçã o de banco de dados
para fins administrativos rotineiros, como copiar um banco determina seus requisitos de backup e de restauraçã o.
de dados de um servidor para outro, configurar o - restaurar
espelhamento do banco de dados ou Grupos de Um processo multifase que copia todos os dados e
Disponibilidade AlwaysOn e fazer arquivamento. pá ginas de log de um backup do SQL Server para um banco
de dados especificado e, em seguida, efetua roll forward de
Componentes e conceitos todas as transaçõ es registradas no backup, aplicando as
- fazer backup [verbo] alteraçõ es registradas para avançar os dados no tempo.
Copia os dados ou registros de log de um banco de dados
do SQL Server ou de seu log de transaçõ es para um Introduçã o à s estratégias de backup e restauraçã o
dispositivo de backup, como um disco, a fim de criar um O backup e a restauração dos dados devem ser
backup de dados ou backup de log. personalizados em um ambiente específico e devem
- backup [substantivo] funcionar com os recursos disponíveis. Portanto, um uso
Uma có pia dos dados que podem ser usados para confiá vel de backup e restauraçã o para recuperaçã o requer
restaurar e recuperar os dados apó s uma falha. Os backups uma estratégia de backup e restauraçã o. Uma estratégia de
de um banco de dados também podem ser usados para backup e restauraçã o bem-planejada maximiza a
restaurar uma có pia do banco de dados em um novo local. disponibilidade dos dados e minimiza a perda de dados,
- dispositivo de backup considerando, ao mesmo tempo, seus requisitos empresariais
Um disco ou dispositivo de fita no qual os backups do SQL específicos.
Server serã o gravados e nos quais eles poderã o ser Coloque o banco de dados e os backups em dispositivos
restaurados. Os backups do SQL Server também podem ser separados. Caso contrá rio, se o dispositivo que contém o
gravados em um serviço de armazenamento do Blob do banco de dados falhar, seus backups ficarã o indisponíveis.
Windows Azure. O formato de URL é usado para especificar o Colocar os dados e backups em dispositivos separados
destino e o nome do arquivo de backup. também aprimora o desempenho de E/S dos backups
- mídia de backup gravados e o uso de produção do banco de dados.
Uma ou mais fitas ou arquivos de disco nos quais um ou Uma estratégia de backup e restauração contém uma
mais backups foram gravados. parte de backup e uma parte de restauraçã o. A parte de
- backup de dados backup da estratégia define o tipo e a frequência dos backups,
Um backup de dados em um banco de dados completo a natureza e velocidade do hardware exigido para eles, como
(um backup de banco de dados), um banco de dados parcial os backups serã o testados, e onde e como a mídia de backup

Conhecimentos de Informática 83
Pedido N.: 2886190 - Apostila Licenciada para diegorosilan@hotmail.com (Proibida a Revenda) - www.apostilasopcao.com.br
Apostila Digital Licenciada para Diego Rosilan Santana Pinheiro - CPF:009.064.395-07 (Proibida a Revenda) - www.apostilasopcao.com.br

APOSTILAS OPÇÃO

deve ser armazenada (incluindo consideraçõ es de No modelo de recuperação simples, agende backups
segurança). A parte de restauraçã o da estratégia define quem diferenciais entre os backups de banco de dados completos.
é responsá vel pela execuçã o da restauraçã o e como a Um backup diferencial captura só as alteraçõ es desde o
restauraçã o deve ser executada para atender à s metas de ú ltimo backup completo do banco de dados.
disponibilidade do banco de dados e minimizar perda de No modelo de recuperaçã o completa, você deve agendar
dados. Recomendamos que você documente seus backups de log frequentes. O agendamento de backups
procedimentos de backup e restauraçã o e mantenha uma diferenciais entre backups completos pode reduzir o tempo
có pia da documentaçã o em seu livro de execuçõ es. de restauração reduzindo o nú mero de backups de log a
O design de uma estratégia de backup e restauraçã o eficaz serem restaurados apó s a restauração dos dados.
requer planejamento, implementaçã o e teste cuidadosos. O As alteraçõ es ocorrem geralmente em uma pequena parte
teste é obrigató rio. Nã o existirá uma estratégia de backup até do banco de dados ou em uma grande parte do banco de
que você tenha restaurado com êxito os backups em todas as dados?
combinaçõ es incluídas na estratégia de restauração. Você Para um banco de dados grande no qual mudanças estã o
deve considerar uma variedade de fatores. Eles incluem o concentradas em uma parte dos arquivos ou grupos de
seguinte: arquivos, backups parciais e backups de arquivo podem ser
- As metas de produçã o de sua organização para os ú teis
bancos de dados, especialmente os requisitos para Quanto espaço em disco é necessá rio para um backup
disponibilidade e proteçã o contra perda de dados. completo de banco de dados?
A natureza de cada um dos seus bancos de dados: o
tamanho, os padrõ es de uso, a natureza de seu conteú do, os Estimar o tamanho de um backup de banco de dados
requisitos dos dados, e assim por diante. completo
- Restriçõ es de recursos, como hardware, pessoal, espaço Antes de implementar uma estratégia de backup e
para armazenagem de mídia de backup, a segurança física da restauraçã o, calcule quanto espaço em disco um backup de
mídia armazenada, e assim por diante. banco de dados completo usará . A operaçã o de backup copia
O formato de armazenamento do SQL Server em disco é o os dados no banco de dados para o arquivo de backup. O
mesmo nos ambientes de 64 bits e 32 bits. Portanto, backup e backup contém só os dados reais no banco de dados e nã o
restauraçã o funcionam em ambientes de 32 bits e 64 bits. Um qualquer espaço nã o utilizado. Portanto, o backup é
backup criado em uma instâ ncia de servidor executada em geralmente menor do que o pró prio banco de dados. Você
um ambiente pode ser restaurado em uma instâ ncia de pode estimar o tamanho de um backup de banco de dados
servidor executada em outro ambiente. completo usando o procedimento armazenado do sistema
sp_spaceused. Para obter mais informaçõ es, consulte
Impacto do modelo de recuperaçã o no backup e na sp_spaceused (Transact-SQL).
restauraçã o
As operaçõ es de backup e restauraçã o ocorrem dentro do Agendar backups
contexto de um modelo de recuperaçã o. Um modelo de A execuçã o do backup tem um efeito mínimo sobre as
recuperação é uma propriedade de banco de dados que transaçõ es em andamento; portanto, as operaçõ es de backup
controla a forma de gerenciamento do log de transaçõ es. podem ser realizadas durante a operaçã o regular. Você pode
Além disso, o modelo de recuperação de um banco de dados executar um backup do SQL Server com um efeito mínimo
determina para quais tipos de backups e cená rios de sobre as cargas de trabalho de produçã o.
restauraçã o o banco de dados oferece suporte. Geralmente, Depois de decidir os tipos de backups necessá rios e a
um banco de dados usa o modelo de recuperaçã o simples ou frequência de execuçã o de cada tipo, recomendamos que
o modelo de recuperaçã o completa. O modelo de recuperaçã o você agende backups regulares como parte de um plano de
completa pode ser suplementado alternando para o modelo manutençã o de banco de dados para o banco de dados.
de recuperaçã o bulk-logged antes das operaçõ es em massa. Testar seus backups
A melhor escolha do modelo de recuperação para o banco Nã o existirá uma estratégia de restauraçã o até que você
de dados depende de seus requisitos empresariais. Para tenha testado seus backups. É muito importante testar sua
evitar gerenciamento de log de transaçõ es e simplificar o estratégia de backup completamente para cada um dos
backup e a restauraçã o, use o modelo de recuperaçã o bancos de dados, restaurando uma có pia do banco de dados
simples. Para minimizar exposiçã o à perda de trabalho, à s em um sistema de teste. É necessá rio testar a restauraçã o de
custas de uma sobrecarga administrativa, use o modelo de cada tipo de backup que você pretende usar.
recuperação completa. Recomendamos que você mantenha um manual de
Planejar a estratégia de backup operaçõ es para cada banco de dados. Esse manual
Depois de selecionar um modelo de recuperaçã o que operacional deve documentar o local dos backups, os nomes
satisfaça seus requisitos empresariais para um banco de do dispositivo de backup (se houver) e o tempo necessá rio
dados específico, você precisa planejar e implementar uma para restaurar os backups de teste
estratégia de backup correspondente. A melhor estratégia de
backup depende de uma série de fatores, dos quais os Banco de Dados NoSQL (Key/Value, Orientados a
seguintes são especialmente significativos: Documentos e Grafos).2627
Quantas horas ao dia os aplicativos precisam acessar o
banco de dados? O termo NoSQL (do inglês Not Only SQL) foi utilizado pela
Se houver um período de pouca atividade previsível, primeira vez em 1998 para designar um banco de dados nã o
recomendamos que você agende backups de banco de dados relacional de có digo aberto. É um termo genérico para uma
completos para aquele período. classe definida de banco de dados nã o-relacionais e ainda faz
Com que frequência as alteraçõ es e atualizaçõ es deverã o
ocorrer?
26 Fonte: http://jordankobellarz.github.io/nosql/2015/01/27/modelos-
Se as alteraçõ es forem frequentes, considere o debancos-no-sql.html
seguinte: 27 Fonte: http://www.codate.com.br/banco-de-dados-nosql/

Conhecimentos de Informática 84
Pedido N.: 2886190 - Apostila Licenciada para diegorosilan@hotmail.com (Proibida a Revenda) - www.apostilasopcao.com.br
Apostila Digital Licenciada para Diego Rosilan Santana Pinheiro - CPF:009.064.395-07 (Proibida a Revenda) - www.apostilasopcao.com.br

APOSTILAS OPÇÃO

-
referência aos bancos de dados relacionais mais populares do - os documentos geralmente são armazenados como
mercado: MySQL, PostgreSQL, etc. JSON
Com a popularizaçã o da internet e das redes sociais, a - sã o amigá veis à programaçã o orientada a objetos,
geraçã o de conteú do por dispositivos mó veis e o nú mero visto que cada documento é um objeto que contém vá rios
cada vez maior de pessoas e dispositivos conectados, faz com atributos (campos) com seus respectivos tipos
que o trabalho de armazenamento de dados com o objetivo - em vez de armazenar dados correlacionados em
de utilizá -los em ferramentas analíticas, comece a esbarrar locais diferentes, esse modelo permite que tudo fique em um
nas questõ es de escalabilidade e custos de manutençã o só documento, eliminando a necessidade de joins
desses dados. Bancos de dados relacionais escalam, mas - os campos podem mudar de um documento para
quanto maior o seu tamanho mais caro se torna essa outro, permitindo flexibilidade na estrutura do banco, mesmo
escalabilidade, seja pelo custo de novas má quinas, ou pelo apó s a implementaçã o
aumento de especialistas nos bancos de dados utilizados. Os - as querys sã o relativamente menores do que em um
nã o relacionais, permitem uma escalabilidade mais barata e banco relacional
menos trabalhosa, pois nã o exigem má quinas extremamente - é o mais usado dentre os bancos nã o relacionais
poderosas, e como sua manutençã o é fá cil permite que seja
necessá rio um nú mero menor de profissionais. Aplicação:
Existem quatro principais tipos de banco de dados NoSQL, - é um banco de propó sito geral
que são:
Famílias de Colunas: Bancos relacionais normalmente
Chave/valor (Key/Value): conhecidos como tabelas de guardam os registros das tabelas contiguamente no disco. Por
hash distribuídas, armazenam objetos indexados por chaves, exemplo, caso se queira guardar id, nome e endereço de
e facilita a busca por esses objetos a partir de suas chaves. usuá rios em um banco de dados relacional, os registros
Vantagens: Gerência bem o tamanho, processa uma seriam:
quantidade constante de leituras e escritas, é rá pido e é
amigo do programador. Id1, Nome1, Endereço1;
Alguns bancos que utilizam esse padrã o são: DynamoDb, Id2, Nome2, Endereço2.
Couchbase, Riak, Azure, Table Storage, Redis, Tokyo Cabinet,
Berkeley DB, etc… Essa estrutura torna a escrita muito rá pida, pois todos os
dados de um registro são colocados no disco com uma ú nica
Características escrita no banco. Essa estrutura também é eficiente caso se
- comparando com um banco de dados relacional, é queira ler registros inteiros. Mas para situaçõ es onde se quer
uma ú nica tabela com duas colunas: uma chave primá ria e ler algumas poucas colunas de muitos registros, essa
um valor - é o banco NoSQL mais simples de todos estrutura é pouco eficiente, pois muitos blocos do disco terã o
- cada item no banco é apenas o nome de um atributo de ser lidos.
(chave) e seu respectivo valor Para esses casos onde se quer otimizar a leitura de dados
- podemos compará -lo a um hashmap estruturados, bancos de dados de famílias de colunas sã o
- os dados sã o acessados somente pela chave (os mais interessantes, pois eles guardam os dados
valores sã o transparentes ao sistema) contiguamente por coluna.
- flexibilidade na estrura dos dados O exemplo anterior em um banco de dados dessa
- extremamente rá pido categoria ficaria: Id1, Id2; Nome1, Nome2; Endereço1,
- suporta quantidades extraordinariamente grande Endereço2. Os bancos de dados de famílias de colunas são
de dados mais interessantes para processamento analítico online
(OLAP). O Bigtable é uma implementaçã o da Google dessa
Aplicação: categoria de bancos de dados.
- propó sito geral Vantagens: Gerência bem o tamanho, processa uma
- aplicaçõ es mobile (metadados do aplicativo) grande quantidade de carga via fluxos, alta disponibilidade,
mú ltiplos data-centers e MapReduce.
Orientados a Documentos: os documentos dos bancos Outros bancos de dados que sã o orientados a coluna:
dessa categoria, sã o coleçõ es de atributos e valores, onde um Cassandra, Hypertable, Amazon SimpleDB, etc.
atributo pode ser multi-valorado.
Em geral, os bancos de dados orientados a documento Características
nã o possuem esquema, ou seja, os documentos armazenados - é um banco chave-valor multidimensional, ou seja,
nã o precisam possuir estrutura em comum. cada tupla (chave, valor) pode conter vá rias tuplas
Essa característica faz deles boas opçõ es para o encadeadas
armazenamento de dados semi estruturados. - as colunas podem ser agrupadas por famílias de
Vantagens: Modelagem de dados natural, amigo do colunas
programador, desenvolvimento rá pido e amigo da - o acesso é feito através da chave da coluna
web(CRUD).
Alguns bancos que utilizam esse padrã o sã o: MongoDB, Aplicação:
CouchDB, RavenDB, etc. - propó sito geral

Características Orientado a Grafos: diferente de outros bancos de dados


- modelo mais pró ximo do relacional, enquanto um NoSQL, esse está diretamente relacionado a um modelo de
BD relacional guarda os dados em linhas e colunas, o BD dados estabelecido, o modelo de grafos. A ideia desse modelo
orientado a documentos guarda em documentos é representar os dados e / ou o esquema dos dados como

Conhecimentos de Informática 85
Pedido N.: 2886190 - Apostila Licenciada para diegorosilan@hotmail.com (Proibida a Revenda) - www.apostilasopcao.com.br
Apostila Digital Licenciada para Diego Rosilan Santana Pinheiro - CPF:009.064.395-07 (Proibida a Revenda) - www.apostilasopcao.com.br

APOSTILAS OPÇÃO

grafos dirigidos, ou como estruturas que generalizem a noçã o Mongodb: um banco de dados NoSQL28
de grafos.
O modelo de grafos é aplicá vel quando “informaçõ es Vamos falar um pouco sobre o Mongodb que é um banco
sobre a inter-conectividade ou a topologia dos dados sã o de dados NoSQL que nã o utiliza modelagem relacional, o que
mais importantes, ou tã o importante quanto os dados é para muitos uma novidade assustadora, pois estamos
propriamente ditos”. acostumados a utilizar o modelo relacional. Os modelos
O modelo orientado a grafos possui três componentes relacionais utilizam uma abordagem bidimensional que
bá sicos: os nó s (sã o os vértices do grafo), os relacionamentos representa quantas dimensõ es quisermos a partir de
(sã o as arestas) e as propriedades (ou atributos) dos nó s e relacionamentos com linhas e colunas. Entretanto, para
relacionamentos. consultas com grandes quantidades de dados podemos
Vantagens: Auxilia em problemas complicados com grafos encontrar problemas de performance especialmente quando
e é rá pido. precisamos distribuir os dados em vá rios computadores. O
Alguns bancos que utilizam esse padrã o sã o: Neo4J, Mongodb nã o utiliza este conceito e oferece uma alta
Infinite Graph, InforGrid, HyperGraphDB, etc. performance em armazenamento de grandes quantidades de
dados e rapidez nas consultas. Nesse post vamos falar sobre
Características agregaçã o(embeded), associaçã o(reference), ids automá ticos
- usa grafos para armazenar os dados e Schemas. Os registros sã o documentos Fazendo uma
- baseado na teoria dos grafos (rede de elementos comparaçã o com banco de dados que utilizam modelagem
interconectados) relacional para persistirmos dados no banco precisamos criar
- cada nó representa uma entidade (como uma uma base de dados antes, entretanto no Mongodb nã o
pessoa, empresa, conta, etc.), que contém suas respectivas precisamos criá -la pois isso é feito automaticamente. Abaixo
propriedades segue dois exemplos do modelo relacional e o utilizado pelo
- nã o requer operaçõ es de join Mongodb: SQL
- requer uma grande curva de aprendizado
- flexibilidade na estrutura dos nó s

Aplicação:
- redes sociais
- á rvores genealó gicas
- controle de acesso
- georreferenciamento

Outros bancos NoSQL (pouco usuais)


- Orientado a objetos
- Orientado a serviços
Multivalor
- Multidimensional

Características em comum:
- todos esses modelos permitem flexibilidade no
projeto do banco de dados
- sã o amigá veis à programaçã o á gil
- podem ser consistentes ou ter eventuais
consistências

A seguir será demonstrado o Mongodb que é um dos


bancos de dados NoSQL.
Associações (References) no Mongodb

Fazendo uma analogia com SQL podemos dizer que no


Mongodb a associaçã o é como se fosse uma foreign key do
modelo relacional. Podemos incluir referências e vincular um
documento ao outro. Exemplo:

28 Fonte: http://www.codate.com.br/mongodb-um-banco-de-dados-nosql/

Conhecimentos de Informática 86
Pedido N.: 2886190 - Apostila Licenciada para diegorosilan@hotmail.com (Proibida a Revenda) - www.apostilasopcao.com.br
Apostila Digital Licenciada para Diego Rosilan Santana Pinheiro - CPF:009.064.395-07 (Proibida a Revenda) - www.apostilasopcao.com.br

APOSTILAS OPÇÃO

Schemas

Nos bancos de dados que utilizam modelagem relacional é


necessá rio realizar um esquema de tabelas e atributos que
farã o parte de uma estrutura de dados fixa, ou seja, se
durante um projeto precisarmos inserir um novo atributo em
uma tabela do banco de dados seremos obrigados a
acrescentá -lo na tabela incluindo uma coluna com campos
vazios. O Mongodb nã o exige uma estrutura fixa, assim,
podemos atualizar apenas um documento, com a adição de
novos campos, por exemplo, sem causar problemas na
estrutura do banco de dados. Binary JSON Permite
representaçã o de algumas formas de dados que nã o fazem
parte do padrã o JSON(Date, BinData, outros). Através do
Agregação (Embeded) no Mongodb comando instanceof retornará um boolean para testar se um
valor é uma instâ ncia de algum tipo: acadêmico.id instanceof
Podemos incorporar sub-documentos a um documento, ObjectId Resultado: true. Através do comando typeof
como assim? Vamos utilizar o exemplo anterior, realizamos podemos saber qual é o tipo do atributo. typeof acadêmico.id
uma associaçã o e vinculamos o documento acadêmico com o
documento curso inserindo o campo curso_id. Se fossemos
realizar uma consulta o banco acessaria os dois documentos,
porém, poderíamos incorporar o curso diretamente no
documento acadêmico o que permitiria ao banco realizar
apenas uma operação de consulta. Exemplo:

Id’s automá ticos(ObjectId) No mongo os documentos sã o


identificados através de um campo id que atua como uma
chave primá ria. Cada documento possui seu id que
possivelmente será ú nico. Se o programador nã o informar o
id do documento por padrã o o mongoDB irá adicionar um
campo id automaticamente que conterá um ObjectId.
Exemplo: Vamos criar um documento que e salvá -lo. Repare
que nã o identificamos um id para o documento acadêmico:

Agora vamos pesquisar esse mesmo documento através


do comando “db.academico.find();”. Deve aparecer uma
resposta similar à seguinte (o atributo _id é um identificador
exclusivo e provavelmente será diferente no seu resultado):

Conhecimentos de Informática 87
Pedido N.: 2886190 - Apostila Licenciada para diegorosilan@hotmail.com (Proibida a Revenda) - www.apostilasopcao.com.br
Apostila Digital Licenciada para Diego Rosilan Santana Pinheiro - CPF:009.064.395-07 (Proibida a Revenda) - www.apostilasopcao.com.br

APOSTILAS OPÇÃO

ORACLE29 Linguagem de Definiçã o de Dados (DDL)


Tem como objetivo definir, alterar e eliminar as tabelas
BANCO DE DADOS RELACIONAL usadas para armazenar os dados. CREATE TABLE, CREATE
Um banco de dados relacional pode ser definido como um VIEW, sã o comandos de definiçã o de dados, dentre outros.
banco de dados que aparece ao usuá rio como uma coleçã o de Exemplo: Criação de Tabelas
tabelas. A característica mais fundamental num banco de Em SQL as tabelas possuem a funçã o de armazenar os
dados relacional é a de que temos que identificar dados do Banco de Dados. O comando para criaçã o de tabelas
univocamente seus registros (que chamamos de linhas), ou no SQL é o CREATE TABLE.
seja, devemos definir um campo (ou mais de um) dentre os Exemplo de CREATE TABLE:
vá rios campos do registro, para ser o atributo identificador CREATE TABLE T_Funcionario
do mesmo (chave primá ria). (cod_funcionario VARCHAR(2),
O Oracle é um SGBD Relacional - Sistema de nome_funcionario VARCHAR(30), end_funcionario
Gerenciamento de Banco de Dados Relacional (RDBMS - VARCHAR(40),
Relational Database Managemente System) e foi um dos CONSTRAINT pk_funcionario PRIMARY KEY
primeiros sistemas de banco de dados a utilizar a Linguagem (cond_funcionario),
de Pesquisa Estruturada (SQL - Structured Query Language) TABLESPACE ST_funcionario;
como interface do usuá rio sendo, talvez, por este motivo,
agora um dos principais sistemas de gerenciamento de banco Linguagem de Controle de Dados (DCL)
de dados. A DCL contém elementos que serã o ú teis num sistema
CONCEITOS multiusuá rio, onde a privacidade das informaçõ es é
No estudo de banco de dados convém sabermos algumas importante, bem como a segurança das tabelas e o
definiçõ es importantes: estabelecimento de fronteiras entre as transaçõ es. Os
Tabelas - Sã o as unidades bá sicas de um SGBD Relacional. comandos GRANT e REVOKE sã o alguns dos comandos
É formada por linhas e colunas, onde as linhas representam utilizados para o controle de dados.
os registros e as colunas os campos da tabela. Sã o muito
conhecidas como Tabelas-Base. Linguagem de Manipulação de Dados (DML)
Esta linguagem contém os componentes da linguagem e
Exemplo: conceitos para a manipulação das informaçõ es armazenadas
Cod_Funcionario - CHAR(06) nas tabelas. Os comandos SELECT, UPDATE, INSERT, bem
Cod_Departamento - CHAR(05) como outros, são comandos de manipulaçã o.
Nome_Funcionario-VARCHAR2(40) O Comando mais utilizado na linguagem SQL para
Data_Nascimento-DATE manipulaçã o dos dados é o SELECT. Com ele é que
Colunas - Um nome de coluna é o nome que o usuá rio produzimos as “Queries”, ou seja, as pesquisas no Banco de
informará para representar os valores de dados que serão Dados. Exemplos: Selecionando Dados a) SELECT * FROM
entrados sob cada coluna. ALUNO;
Linhas - Sã o os registros da tabela. Retorna todas as linhas e todas as colunas da tabela
Valores de dados - Sã o os valores encontrados na ALUNO.
interseçã o de uma coluna e uma linha. b) SELECT MATRICULA, NOME_ALUNO
Chave primá ria - Uma ou mais de uma coluna que FROM ALUNO;
identifica uma linha, facilitando em muito o acesso aos dados. Retorna todas as linhas das colunas matrícula e o nome
Visã o ou Tabela Virtual(View) - É uma tabela formada por do aluno da tabela ALUNO.
uma pesquisa em uma ou mais tabela-base. Ela nã o existe, c) SELECT MATRICULA, NOME_ALUNO FROM
mas parece ao usuá rio como se existisse. ALUNO
Toda tabela num banco de dados relacional tem que WHERE NOME_ALUNO = ‘JOAO DA SILVA’;
possuir uma Chave Primá ria. As tabelas poderã o também ter Retorna a matrícula e o nome do aluno que tenham nome
chaves estrangeiras, que sã o campos que relacionam as igual a JOAO DA SILVA.
tabelas do banco de dados, fazendo referência entre uma e d) SELECT MATRICULA FROM CURSA WHERE
outra tabela. ((NOTA1+NOTA2+NOTA3)/3) > 7
SQL - LINGUAGEM DE PESQUISA ESTRUTURADA AND CD_DISCIPLINA = ‘PORT’;
A SQL - Linguagem de Pesquisa Estruturada (Structured Retorna a matrícula de todos os alunos que obtiveram
Query Language) devido as suas características tornou-se a média acima de sete na disciplina PORT.
linguagem padrã o de banco de dados relacionais. e) SELECT AVG(SALARIO) FROM EMPREGADO;
A Linguagem SQL pode ser usada através de dois modos:
SQL Interativa - Onde os comandos SQL são digitados
interativamente, ou seja, logo apó s a digitaçã o do comando
vemos sua execuçã o.
SQL Embutida - Neste modo os comandos SQL ficam
embutidos no programa-fonte de uma linguagem de
programaçã o. Tal linguagem é normalmente chamada
linguagem hospedeira. Linguagens de programaçã o como
COBOL, C, PASCAL, PL/1, etc, admitem a SQL Embutida.
A SQL divide-se em três grupos:
- Linguagem de Definiçã o de Dados (DDL)
- Linguagem de Controle de Dados (DCL)
- Linguagem de Manipulaçã o de Dados (DML)

29 Fonte: http://www.consulting.com.br/edsonalmeidajunior/

Conhecimentos de Informática 88
Pedido N.: 2886190 - Apostila Licenciada para diegorosilan@hotmail.com (Proibida a Revenda) - www.apostilasopcao.com.br
Retorna a média dos salá rios dos funcioná rios da tabela. Administraçã o de Dados, que é responsá vel pela elaboraçã o
Obs.: de um modelo global de dados para a corporaçã o, que
1) A Sintaxe completa do comando SELECT encontra-se normalmente surge como resultado da integraçã o dos
no manual de referência de SQL da ORACLE. sistemas de transaçõ es on line. Para o usuá rio, aspectos
2) Podemos usar o comando Select para acessar dados importantes sã o as ferramentas de query e aná lise de dados,
de duas ou mais tabelas, ao mesmo tempo: bem como o grau de integraçã o com as ferramentas de
SELECT COD_EMPREGADO, NOME_EMPREGADO, automaçã o de escritó rio, que correspondem ao dia-a-dia dos
SALARIO_EMPREGADO usuá rios corporativos.
FROM FUNCIONARIO, SALARIO Muitos vendedores consideram gerenciadores de banco
WHERE FUNCIONARIO.COD_EMPREGADO = de dados especializados para data warehouse, mas esses
SALARIO.COD_EMPREGADO; desconsideram as melhorias da tecnologia relacional nas
Esta “Query” acima retorna os dados da tabela á reas de processamento e otimizaçã o em paralelo de queries,
FUNCIONARIO (COD_EMPREGADO e NOME_EMPREGADO) e bem como a integraçã o com ferramentas de acesso,
da tabela SALARIO (SALARIO_EMPREGADO). modelagem, apresentaçã o e aná lise, tais como as planilhas
OUTROS CONCEITOS DE BANCO DE DADOS BANCO DE eletrô nicas e bancos de dados de mesa.
DADOS DISTRIBUÍDOS O Oracle Warehouse suporta além de dados estruturados
Permitem o manuseio da informação armazenada no da forma relacional, outros tipos de dados, como por
Banco de Dados que se encontra distribuído em diversas exemplo, textos desestruturados, dados espaciais, vídeo, ...
má quinas geralmente em locais geográ ficos distintos. A A proposta do Oracle Warehouse é a de possibilitar o
distribuiçã o dos dados pode ser feita no nível de uma entidade gerenciamento dos dados da empresa, independente da
do esquema conceitual (1 tabela, por exemplo) ou através de origem dos dados, ou seja, se sã o dados histó ricos, de
fragmentos (partiçõ es da tabela). Os fragmentos podem ser produçã o, etc.
obtidos através do uso de técnicas de fragmentaçã o horizontal
(seleçã o de linhas da tabela), fragmentaçã o vertical (seleçã o REPLICAÇÃO DE DADOS
de colunas da tabela) ou de forma híbrida (conbinando a O Oracle permite a replicaçã o dos dados, isto é, có pias de
fragmentaçã o horizontal e vertical ao mesmo tempo). tabelas dos bancos de dados podem ser instaladas nas
A alocaçã o dos fragmentos pode ser realizada com ou sem unidades regionais da empresa, visando assim a rapidez no
replicaçã o. No primeiro caso, có pias de um mesmo fragmento acesso aos mesmos (evita o trá fego na rede).
sã o distribuídas pelos diversos nó s que compõ em o Banco de
Dados distribuído. ATRIBUIÇÕES / RESPONSABILIDADES DE UM DBA
O principal objetivo dos bancos de dados distribídos é (DATABASE ADMINISTRATOR)
disponibilizar o dado o mais pró ximo possível do local onde é O DBA é o administrador do banco de dados Oracle e tal
mais acessado, permitindo um aumento no desempenho de função, geralmente é exercida por um Analista de Sistemas
consultas devido ao aproveitamento da localidade de acesso e com alguma formaçã o/experiência em Banco de Dados.
também, por trabalhar com um volume menor de dados. Diversas atividades de administraçã o do SGBD Oracle,
devem ser exercidas pelo(s) DBA(s). Dentre elas destacamos:
DATA WAREHOUSE Instalar e fazer o Upgrade do Oracle Server e das
Em sua forma essencial, um data warehouse é um ferramentas diversas da Oracle;
repositó rio para informaçõ es organizacionais. Pode incluir - Criar as estruturas e objetos primá rios;
tabelas relacionais geradas pelos sistemas de controle e - Planejar/calcular, bem como, disponibilizar o espaço
acompanhamento, dados consolidados altamente necessá rio para o Banco de Dados Oracle;
estruturados, documentos e objetos multimídia. Também - Modificar a estrutura do banco , quando necessá rio;
podem ser encapsuladas regras de negó cio. Sem dú vida, uma - Criar, deletar, dar/remover privilégios, enfim,
soluçã o data warehouse deve ser aberta, escalá vel, com gerenciar os usuá rios do banco;
velocidade e facilidade de acesso, e deve ser gerenciá vel. - Gerar có pias de segurança (Backup’s) e recuperar o
Dada a tendência da indú stria para a distribuiçã o de banco Oracle;
recursos e o desejo de maior controle e acessibilidade, uma - Manter a segurança do sistema, controlando o acesso
soluçã o deve ser projetada para operaçã o geograficamente ao banco de dados utilizando os recursos de segurança do
distribuída ao longo das unidades de negó cio da corporaçã o. sistema operacional, do sistema de rede e do Oracle;
Facilidade de instalaçã o, ajustes, gerenciamento, controle e - Monitorar e otimizar a performance do Banco de
interoperabilidade sã o pontos críticos, particularmente em dados.
um ambiente distribuído.
Data warehouse é uma arquitetura, nã o um produto, e nã o ARQUITETURA ORACLE
deve ser associada com um repositó rio de dados O DBA deve conhecer a arquitetura Oracle, isto é, como o
especializado, tal como um sistema de gerenciamento de Oracle “trabalha”, tendo assim subsídios para a
dados multidimensional, e pode, de fato, ser perfeitamente administraçã o do(s) banco(s).
hospedado em um sistema de gerenciamento de dados A Arquitetura Oracle
relacional, que provê uma base mais só lida sobre a qual se
construirá as aplicaçõ es que alimentarã o o repositó rio de
dados.
Mais importante que a ferramenta para hospedar o
repositó rio é o conjunto de aplicaçõ es e ferramentas que
compõ em as informaçõ es organizacionais. Data warehouse é
uma forma de unificar e facilitar o acesso a todas as
informaçõ es de que os membros de uma corporaçã o
necessitam para a execuçã o, controle e planejamento de
atividades de negó cio.
A construção do repositó rio é consequência da
INSTÂNCIA ORACLE

A cada inicialização do banco Oracle, parte da memó ria


RAM do computador é alocada para a SGA (System Global
Arquitetura Oracle = Instâ ncia + BD Oracle Area) e processos Oracle de segundo plano (Background
Instâ ncia = Memó ria + Processos Background Process) são inicializados, visando controlar o banco. Entã o
uma Instâ ncia Oracle (Instance) é o conjunto da SGA (buffers
ESTRUTURAS FÍSICAS da memó ria RAM) + processos Oracle de segundo plano
O Banco de Dados Oracle é composto por 3 tipos de (Background), que juntos oferecem aos vá rios usuá rios o
estruturas físicas (arquivos): Dados (data files); acesso ao banco de dados.
Controle (control files); Log Existe um banco de dados para cada instance, e é possível
(redo log files) e Parâ metros criar em um mesmo equipamento mais de uma instance,
(parameter file). sendo, por exemplo, uma para conter um banco de dados de
Data files – Contém todos os dados do banco. Estruturas produçã o e outra para conter o banco de dados de teste.
ló gicas, tabelas, índices, visõ es e outros objetos são Neste caso, haverá processos sendo executados em
armazenados nestes arquivos. Um ou mais data files podem background específicos para cada instance e uma á rea de
compor uma tablespace (objeto ló gico que armazena os memó ria independente utilizada em cada instance.
arquivos de dados). Obs.:
Control files – Arquivos que armazenam informaçõ es 1)SGA – Memó ria compartilhada por todos os usuá rios
sobre as estruturas físicas do banco de dados (nome, Oracle.
localizaçã o, ...). Todos os data files e redo log files são 2)Instâ ncia (instance) = SGA + Processos “Background”
identificados no control file, bem como o nome do banco de 3)É no arquivo de parâ metros (parameter file) que
dados. determinamos as características da instâ ncia
Recomenda-se que se tenha no mínimo dois Control Files, (instance)
armazenados em discos diferentes (se possível).
Redo log files – Arquivos que guardam todas as alteraçõ es OBJETOS DO BANCO DE DADOS ORACLE
efetuadas nos dados das tabelas do banco e sã o utilizados para O Oracle possui diversos componentes denominados
recuperação destas. Objetos do Banco de Dados. Dentre eles podemos destacar:
Para garantir uma boa recuperaçã o cada redo log file deve Tabelas - Sã o as unidades bá sicas de um SGBD Relacional.
Ter no mínimo uma réplica. Um conjunto de redo log files É formada por linhas e colunas, onde as linhas representam
iguais recebe o nome de grupo, e um grupo é formado por os registros e as colunas os campos da tabela. São muito
membros (redo log file original e suas réplicas). conhecidas como Tabelas-Base (conforme já vimos
Ao terminar o espaço disponível nos membros de um anteriormente).
grupo redo log, a gravaçã o continua nos membros do grupo Visão ou Tabela Virtual(View) - É uma tabela formada
seguinte (log switch). O grupo anterior fica entã o disponível por uma pesquisa em uma ou mais tabela-base. Ela nã o
para Ter seu conteú do copiado para outro local (archive log existe, mas parece ao usuá rio como se existisse.
files), pois, ao terminar o espaço no ú ltimo grupo, o processo Muitas vezes o acesso aos dados exigem “queries”
irá reutilizar o primeiro, sobregravando-o. complexas. Um usuá rio pode construir uma visã o que
Além dos 3 tipos de arquivos citados acima temos também contenha uma certa complexidade e disponibilizá -la para
o Parameter file – Para inicializar uma instâ ncia, o Oracle deve usuá rios finais e programadores, que farã o “queries” mais
ler um arquivo de parâ metros de nome padrã o simples sobre esta Visão. Você estará entã o, retirando a
init<nome_da_instâ ncia>.ora. Este arquivo é do tipo texto e complexidade da navegaçã o de uma aplicaçã o ou de um
contém diversos parâ metros de configuraçã o associados a usuá rio no acesso aos dados.
uma instâ ncia, aos quais devem ser atribuídos valores Usuá rio - Sã o as pessoas que irã o acessar o BD Oracle.
específicos. Possui nome e senha para o acesso ("login").
Os valores dos parâ metros serã o utilizados para inicializar Cabe ao DBA criar, modificar e excluir os usuá rios do BD.
muitas das configuraçõ es de memó ria e processos da instâ ncia Role - Agrupamento de privilégios, ou seja, em uma role
Oracle. Cada instâ ncia tem seu arquivo de parâ metros que podemos agrupar diversos privilégios e conceder aos
define as particularidades de cada ambiente. usuá rios, nã o mais os privilégios e sim as roles.
DB_BLOCK_BUFFERS (parâ metros contidos no arquivo de
Rotinas armazenadas (Stored Procedures, Functions e parâ metros do Oracle).
Triggers) - Sã o grupos de comandos SQL que poderã o ser Com a atuaçã o do Database Buffer Cache as E/S de disco
ativados pelos usuá rios. Uma "Function" retorna um valor sã o reduzidas, armazenando dados que as transaçõ es
sempre, enquanto que as "Procedures" nã o. solicitaram recentemente.
As Triggers (gatilhos) sã o também rotinas armazenadas Exemplo:
que sã o executadas (disparadas) quando ocorre algum evento Quando uma transaçã o inclui uma instruçã o pra atualizar
modificando alguma tabela (Ex. Ao clicar o botã o ...) uma linha o Oracle manda para o database buffer cache o
Índices - Quando criamos índices para uma tabela, bloco que contém a linha, atualizando a linha logo em
especificando uma coluna, tal tabela é classificada de tal forma seguida. Se outra transaçã o quiser atualizar a mesma linha,
que, sempre que for mencionada uma query, o sistema usará o ou outra que está no mesmo bloco, nã o será necessá rio outro
índice para Ter acesso direto aos dados desejados, ao invés de acesso a disco, pois a linha já está no database buffer cache
vasculhar a coluna toda. O objetivo da criação de índices é (memó ria).
agilizar a recuperaçã o de dados, ou seja, acelerar a procura
dos dados na tabela. SEGMENTOS DE RECONSTRUÇÃO: O “DESFAZER” DO
Tablespace - Objeto ló gico que guarda os arquivos de ORACLE
dados do BD Oracle. Convém, antes de definir o tamanho da Um Segmento de Rollback do Oracle é uma á rea utilizada
Tablespace, fazer uma estimativa do quanto de espaço em para guardar temporariamente dados anteriores a uma
disco será necessá rio para alocar os objetos (tabelas, transaçã o (que atualizou ou eliminou os dados). Se for
índices, ...). Entretanto, podemos aumentar o tamanho da necessá rio, através do comando Rollback (comando SQL) os
Tablespace, adicionando datafiles (arquivos de dados) à dados sã o reconstruídos (que estavam no segmento de
mesma. rollback) voltando os dados ao estado anterior.
O Segmento de Rollback System
PROCESSANDO COMANDOS SQL Todo banco de dados Oracle tem um segmento de
Observando a figura anterior, podemos ver a presença de rollback denominado System. Durante a criaçã o do BD, o
processos de usuá rios (users) e servidores (servers). segmento inicial é criado na tablespace System.
Todos os comandos SQL são executados pelos processos Obs.:
servidores, dividindo-os em 3 (três) fases: Ao se criar uma nova Tablespace devemos criar um
- Parse Segundo segmento de Rollback denominado System.
- Execute - Fetch. Para se criar um segmento de rollback usa-se o comando
Parse CREATE ROLLBACK SEGMENT
Checa a sintaxe do comando; Sintaxe:
Checa também os privilégios do usuá rio, definindo logo CREATE PUBLIC ROLLBACK SEGMENT rbs01
apó s, o caminho da pesquisa; Define o plano de execuçã o do TABLESPACE st_01
comando. STORAGE (INITIAL 10K NEXT 10K
Execute OPTIMAL 20K MAXEXTENTS 121);
Analisa o requerimento que está no buffer (na “Shared SQL Para colocar o segmento ativo (ONLINE):
Area”), e ALTER ROLLBACK SEGMENT rbs01 ONLINE;
Faz a leitura física ou ló gica (no arquivo datafile ou no
Database Buffer Cache). OS PROCESSOS ORACLE
Obs.:
Na “Shared SQL Area” temos: o texto do comando SQL (ou
PL/SQL), o plano de execuçã o.
Fetch
Retorna o resultado do comando SQL (geralmente
chamada de “tabela-resultado”).
Obs.:
Na Shared SQL Area temos dois caches a saber:
a)Cache de biblioteca – armazena instruçõ es SQL (e/ou
procedimentos) bem como planos de execuçã o das instruçõ es
(ex.: vá rios usuá rios (clientes) podem estar executando uma
mesma aplicaçã o compilada).
b)Cache de dicioná rio – Armazena informaçõ es contidas
no dicioná rio de dados do BD, reduzindo as E/S de disco (o
Oracle usa as informaçõ es do dicioná rio do BD em
praticamente todas as operaçõ es). Os processos Oracle executam tarefas específicas para os
usuá rios do banco de dados. Tais processos trabalham no
DATABASE BUFFER CACHE sentido de manipular as solicitaçõ es enviadas pelos
No Database Buffer Cache dados do BD Oracle são processos de clientes e operam as diversas funçõ es de um
armazenados. O processo DBWR (database writer) grava os servidor de banco de dados Oracle. O Oracle distingue os
blocos de dados que as transaçõ es modificam na memó ria processos de servidor de primeiro plano dos de segundo
(database buffer cache) de volta para os arquivos de dados do plano. Os processos de primeiro plano manipulam
BD. diretamente as solicitaçõ es dos processos de clientes,
Os buffer do Database Buffer Cache sã o compartilhados enquanto os processos de servidor de segundo plano
por todos os processos de usuá rio do Oracle conectados à manipulam outros serviços do Oracle.
instâ ncia (instance). O tamanho do bloco do database buffer Funcionamento de um sistema Cliente/Servidor Oracle:
cache é determinado no parâ metro DB_BLOCK_SIZE. A
quantidade de blocos é definida no parâ metro
1) Processo cliente envia solicitaçã o para o servidor
Oracle. Um processo despacha (Dispatcher) o mesmo para
uma fila de solicitaçõ es.
2) Um processo de servidor de primeiro plano pega a
solicitação mais antiga, processando-a. Ao terminar o
processamento, coloca o resultado numa fila de respostas.
3) O Dispatcher gerencia a fila de respostas, enviando o
resultado de cada solicitaçã o para o processo cliente que fez a
solicitação.
A quantidade de processos de servidor de primeiro plano
é ajustada automaticamente pelo Oracle. De acordo com a
necessidade o Oracle inicia/encerra processos de servidor de
primeiro plano, visando atender as solicitaçõ es dos clientes.
Cada estação cliente usa um processo Cliente. O Oracle usa
PRINCIPAIS PROCESSOS DE SEGUNDO PLANO a arquitetura de servidor multilinear
(BACKGROUND PROCESS) – que envolve os processos despachantes (Dispatchers),
DBWR (Database Writer) – Grava os dados do Database ouvinte (listener) e servidor (shared server) – para atender
Buffer Cache para os arquivos físicos do Banco de Dados às solicitaçõ es dos diversos clientes. Duas filas sã o
(datafiles). O DBWR não faz esta gravaçã o imediatamente formadas: fila de solicitaçõ es (Request Queue) e fila de
apó s a efetivaçã o das transaçõ es. Tal evento acontece quando: respostas (Response Queue).
um processo servidor precisa ler um novo bloco para a Quando uma aplicaçã o cliente estabelece uma conexã o
memó ria e não existe espaço disponível, ou ele está ocioso por com o Oracle, o listener fornece o endereço de rede de um
alguns segundos, ou Quando o Oracle efetua um Checkpoint processo Dispatcher, com o qual o cliente se conecta. O
do Banco de Dados ou da Tablespace. Dispatcher entã o pega a solicitaçã o do cliente e coloca-a na
LGWR (Log Writer) – Grava informaçõ es de alteraçõ es fila de solicitaçõ es. As solicitaçõ es são processadas e os
efetuadas sobre o BD do redo log buffer para os redo log files. resultados sã o inseridos na fila de respostas. A partir daí o
ARCH (Archiver) – É opcional. Copia automaticamente Dispatcher retorna os resultados para as aplicaçõ es clientes
grupos de log de transaçõ es (redo log files) para um outro adequadas.
local físico (gerando os archives redo log files). Pode ser para
fita ou para disco.
LCKn (Lock) - Faz bloqueios (Lock´s) entre instâ ncias em
servidores paralelos.
PMON (Process Monitor) – Realiza todo o processo de
recuperação para um processo de usuá rio que tenha falhado.
Por exemplo, se cair a conexã o de um usuá rio com o Oracle, o
Process Monitor irá desfazer a transaçã o que caiu, liberando
os lock´s da transaçã o, liberando assim o acesso de outras
Quando uma aplicaçã o cliente se conecta ao Oracle, o
transaçõ es aos mesmos dados.
processo ouvinte inicializa um processo servidor dedicado e
SMON (System Monitor) – Executa diversas operaçõ es de
conecta o cliente diretamente ao servidor dedicado,
gerenciamento do espaço à medida que as transaçõ es liberam
ignorando a arquitetura de servidor multilinear. Como um
mais espaço para dados do BD.
servidor dedicado consome uma quantidade significativa de
RECO (Recoverer) – Recupera falhas que envolvam
memó ria do servidor de banco de dados para apenas um
transaçõ es distribuídas.
usuá rio, os servidores dedicados nã o deve ser usados para as
CKPT (Checkpoint) – Faz periodicamente uma verificaçã o
conexõ es de aplicaçõ es clientes, a menos que absolutamente
(checkpoint), para se certificar de que todas as informaçõ es
necessá rio.
modificadas na memó ria estã o armazenadas fisicamente no
disco. Tem a funçã o de marcar o quanto o log de transaçõ es
LOG DE TRANSAÇÕES (LOG DE RECONSTRUÇÃO: REDO)
precisará aplicar, caso o sistema venha a exigir uma
O Log de transaçõ es do Oracle registra imediatamente as
recuperação por queda. Somente as mudanças provocadas
mudanças feitas no Banco de Dados pelas transaçõ es em
pelas transaçõ es a partir do ú ltimo Checkpoint serã o aplicadas
andamento, para que, se for necessá rio (em virtude, por
pois o Oracle sabe que os dados foram gravados no disco
exemplo, de uma falha), todo o trabalho confirmado seja
(anteriores ao ú ltimo Checkpoint). Atualiza os “headers” de
protegido e recuperado.
todos os arquivos físicos do BD.
Na SGA existe o Redo Log Buffer que armazena as
Dnnn (Dispatcher) – Direciona para a fila de solicitaçõ es,
informaçõ es que serã o gravadas nos Redo log Files.
as solicitaçõ es dos processos cliente, e também, retorna para
os clientes as respostas que estã o na fila de respostas. Um
nú mero limitado de processos servidores sã o compartilhados REDO LOG FILES
pelos usuá rios (configuraçã o multi-threaded).]

CONFIGURAÇÕES DE SERVIDORES DE BANCO DE


DADOS
Em relaçã o à configuraçã o de servidores o Oracle pode
trabalhar de 2 (dois) modos: Servidor multilinear
(Multithreaded Server);
Os Redo Log Files armazenam todas as alteraçõ es no
Servidor dedicado (Dedicated Server). Banco de Dados, e sã o usadas em um processo de
recuperaçã o. Se os Redo Log Files sã o espelhados em vá rios

SERVIDOR MULTILINEAR (MULTI-THREADED)


discos, as mesmas informaçõ es sã o gravadas nos arquivos log_checkpoint_interval = 10000# opcao por
espelhados. desempenho.
Os Redo Log Files sã o gravados de maneira circula, Nunca um checkpoint será
conforme figura acima. # disparado por Ter atingido este limite (10 mil blocos
Com o espelhamento dos Redo Log Files pelos discos, # de 512 gravados, desde o ú ltimo checkpoint).
todos os grupos de membros sã o gravados simultaneamente. log_checkpoint_timeout = 0 # valor default (em segundos).
A vantagem do espelhamento é que se, por exemplo, algum log_archive_start = true # utilizacao de archiving automatico
problema em um disco, tem-se a có pia em outro. # Localizaçã o dos arquivos de archived redologs, trace e
log.
LOG SWITCHES # Trace (dump) dos processos background, de usuá rios
Um Log Switch (troca de log) ocorre quando o Oracle troca log_archive_dest = /prd5/oracle/pb1/arch/A
de um redo log para outro. Enquanto isto o servidor fica log_archive_format = "RCH%s.log" background_dump_dest
gravando novas transaçõ es em outro grupo de log. = /prd2/oracle/pb1/bdump core_dump_dest =
/prd2/oracle/pb1/cdump user_dump_dest
CHECKPOINTS = /prd2/oracle/pb1/udump
Processo que verifica se as ú ltimas transaçõ es que estã o max_dump_file_size = 10240
na memó ria já foram gravadas fisicamente em disco. # Num. de processos = proc. Servers + proc Backgs
Ocorre quando: processes = 50 # 50 BD Pequeno
Acontece um Log Switch; # 100 BD Medio
- Durante um intervalo de tempo (definido no parâ metro # 200 BD Grande
Log_Checkpoint_Timeout do arquivo de parâ metro); # Numero de blocos lidos para memoria numa operacao
Acontece um Shutdown; de
O DBA força um Checkpoint; e I/O db_file_multiblock_read_count = 32 # 8 BD
Quando a Tablespace é passada para Offline. Pequeno
# 16 BD Medio
O processo Checkpoint é habilitado através do parâ metro # 32 BD Grande
Checkpoint_Process
(init<instâ ncia>.ora). # Parametros de configuracao do Asynchronous I/O
O ARQUIVO DE PARÂ METROS use_async_io = true lgwr_use_async_io = true
No arquivo de parâ metros é que definimos os parâ metros use_post_wait_driver = true
de inicialização da instâ ncia Oracle. Exemplo (sistema Unix): # Parametrso de configura;á o do servidor multi-threaded
# Parameter file para o database pb1 (Exemplo) # Multi_threaded server requer a instala;á o do SQL*Net
# V2 mts_dispatchers = “tcp,2” mts_max_dispatchers
# = 10 mts_servers = 2 mts_max_servers
# Nome do Banco de Dados db_name = 10 mts_service = pb1 mts_listener_address =
= pb1 “(ADDRESS=(PROTOCOL=tcp)
# Compatilidade com as características da versã o 7.3.2 (HOST=durjbf01) (PORT=1521)”
compatible = 7.3.2 # Localizaçã o dos controlfiles
control_files = (/prd3/oracle/pb1/dbs/control01.ctl, INICIALIZANDO E TERMINANDO UM BD ORACLE
/prd4/oracle/pb1/dbs/control02.ctl, Usamos o comando STARTUP para iniciar um BD e o
/prd5/oracle/pb1/dbs/control03.ctl) SHUTDOWN para terminá -lo.
Antes de inicializar ou terminar um banco Oracle é
# Especificaçã o dos Segmentos de Reconstruçã o (Rollback necessá rio conectar-se como usuá rio INTERNAL.
Segments) rollback_segments = Obs.: Conectar-se como INTERNAL é equivalente a
(r01,r02,r03,r04) # Definiçã o do conectar-se como usuá rio SYS (O “dono” do dicioná rio de
tamanho da SGA do Banco dados do Oracle)
#
# SGA = [( db_block_size * db_block_buffers) + INICIALIZANDO (STARTUP)
shared_pool_size + log_buffers ] Um processo de inicializaçã o é composto de 3 passos:
db_bloc_size = 2048 m# 2k START, MOUNT e OPEN.
shared_pool_size = 9000000 # 3500000 BD Pequeno START – O Oracle lê o arquivo de parâ metros; aloca
# 6000000 BD Médio espaço na memó ria para a SGA; “starta” os processo de
# 9000000 BD Grande segundo plano (background process) e abre os arquivos de
# 18000000 BD com Designer/2000 db_block_buffers = trace
3200 # 200 BD Pequeno (background trace files).
# 550 BD Médio MOUNT – Abre o(s) Control(s) File(s) e lê os nomes do
# 3200 BD Grande Banco de dados e dos REDO LOG FILES.
OPEN – Abre o Banco de Dados disponibilizando-o para as
log_buffer = 163840 # 8192 BD Pequeno transaçõ es dos usuá rios. Sintaxe:
# 32768 BD Médio STARTUP OPEN/MOUNT/NOMOUNT database
# 163840 BD Grande EXCLUSIVE/PARALLEL
# SGA = [ ( 2048 * 3200 ) + 9000000 = 163840 ] 15 PFILE = parfile
Mbytes (Aproximadamente) RECOVER/FORCE/RESTRICT Onde:
# Parametros de ajuste dos redologs files log_files = 3 OPEN - Disponibiliza o Banco para o acesso aos usuá rios.
# Num. De redo logs que podem ser abertos # MOUNT - Monta o banco para atividades de DBA, mas nã o
limitado pelo parametro maxlogfiles do create database deixa livre o acesso ao BD. NOMOUNT - Cria a SGA e “starta”
# que indica o num. Má ximo de grupos de redolog files
os processos de segundo plano, mas nã o deixa livre o acesso
ao BD.
EXCLUSIVE - Permite que somente a instâ ncia corrente
seja acessada. PARALLEL Disponibiliza mú ltiplas instâ ncias.
PFILE=parfile Pega do arquivo de parâ metrso
especificado (parfile) e “starta” tal instâ ncia. FORCE Aborta a
instâ ncia que está “rodando” para “startar’ a nova.
RESTRICT Permite que só os usuá rios com privilégio
RESTRICT SESSION acesse o BD. RECOVER Inicia processo de
Recover quando o banco é Startado.
Ex:
A) SVRMGR>STARTUP teste; Inicializa o banco de dados
teste.
B) STARTUP EXCLUSIVE MOUNT teste PFILE
inittest.ora;
Inicializa o BD teste, apenas montando-o, utilizando o
arquivo de parâ metros inittest.ora

Obs.:
Com o comando ALTER DABATASE podemos alterar o
modo de banco, ou seja, podemos por exemplo apenas
montá lo, deixando em modo Exclusivo (para serem feitas
atividades de DBA. O banco nã o fica disponível aos usuá rios).
Obs: Nos Bancos Apartir da versã o 9 o comando para
inicializar ou terminar o banco é
SQLPLUS /NOLOG Connect / as sysdba
TERMINANDO UM BD ORACLE (SHUTDOWN)
O comando SHUTDOWN fecha o BD e indisponibiliza-o aos
usuá rios. Sintaxe:
SHUTDOWN ABORT/IMMEDIATE/NORMAL; Onde:
ABORT Nã o espera a saída (desconexã o) dos usuá rios,
terminando rapidamente. IMMEDIATE Desconect os usuá rios Database
e depois termina. As seguintes estruturas sã o utilizadas para o
NORMAL espera todos os usuá rios conectados saíre, para gerenciamento do espaço do BD.
depois terminar o BD. Estrutura / Definição
ALTER DATABASE: ALTERANDO O ESTADO DO BANCO DE BLOCO Sã o blocos que ficam alocados nos datafiles
DADOS EXTENT Compõ em o bloco do datafile.
Com o ALTER DATABASE podemos fazer trocas no estado SEGMENT Armazena um ou mais EXTENT’s contendo
do Banco, para disponibilizá -lo a todos os usuá rios. todos os dados na TABLESPACE.
Sintaxe: TABLESPACE Estrutura ló gica do Oracle que pode ter um
ALTER DATABASE database MOUNT ou mais datafiles (arquivos físicos).
EXCLUSIVE/PARALLEL OPEN Onde: DATAFILES Arquivos físicos que armazenam os dados do
Database Nome do BD a ser alterado. BD.
MOUNT Monta o BD para atividades do DBA, mas nã o DATABASE Coleção ló gica dos dados compartilhados
disponibiza-o aos usuá rios. OPEN Permite o acesso dos (que estã o armazenados nos
usuá rios ao BD. TABLESPACES)
EXCLUSIVE Permite que somente a instâ ncia corrente
acesse o BD. PARALLEL Permite que vá rias COMPONENTES DE UM BLOCO ORACLE
instâ ncias acesse, o BD. Um bloco é composto das seguintes partes: Cabeçalho
Ex.: (Header), Diretó rio da Tabela (Table Directory), Diretó rio da
SVRMGR>CONNECT INTERNAL SVRMGR> ALTER Linha (Row Directory), Espaço Livre (Free Space), Linha de
DATABASE OPEN; Dados (Row Data).
Libera aos usuá rios o acesso ao BD. Parte / Descriçã o
ALTER SYSTEM: RESTRINGINDO O ACESSO Cabeçalho(Header) Contém informaçõ es gerais do bloco:
Tem a capacidade de disponibilizar o BD para somente os endereço do bloco, tipo de segmento.
usuá rios que tenham o privilégio de RESTRICTED SESSION (só Diretó rio da Tabela (Table Directory) Armazena
eles se conectam ao BD). Sintaxe: informaçõ es sobre as tabelas.
ALTER SYSTEM Diretó rio da Linha (Row Directory) Contém informaçõ es
ENABLE/DISABLE RESTRICT SESSION; Onde: sobre a linha que está no bloco.
ENABLE Permite que só os usuá rios que tem privilégio Espaço Livre (Free Space) É o conjunto de bytes do bloco
RESTRICT SESSION acessem o BD. disponível para operaçõ es de manipulaçã o (insert,
DISABLE Permite acesso ao BD a todos os usuá rios. update, ...)
Ex: Linha de Dados (Row Data) Guarda dados da tabela (ou de
ALTER SYSTEM ENABLE RESTRICTED SESSION; índices). Obs.: O espaço livre do bloco também pode conter
GERENCIANDO O ESPAÇO DO BANCO DE DADOS transaçõ es.

CONTROLANDO O ESPAÇO LIVRE


O controle do espaço livre para comandos de manipulaçã o Cláusulas
no bloco é especificado nos parâ metros PCTFREE, PCTUSED, ONLINE/OFFLINE Disponibiliza/indisponibiliza a
INITRANS, MAXTRANS. TABLESPACE.
PCTFREE - Armazena o percentual de espaço livre no NORMAL Faz um CHECKPOINT para todos os
bloco. DATAFILES da
PCTUSED - Permite ao bloco reconsiderar o espaço livre TABLESPACE.
para a inserção de novas linhas. INITRANS - Define o nú mero TEMPORARY Faz um CHECKPOINT para todos
inicial de transaçõ es para o bloco (default 1, mínimo 1, os DATAFILES da TABLESPACE, mas nã o assegura que serão
má ximo255) gravados dados em todos eles.
MAXTRANS Nú mero máximo de transaçõ es concorrentes IMMEDIATE Nã o assegura que os datafiles serã o
para o bloco (default 255, mínimo1, máximo 255). disponibilizados e nã o faz o
CHECKPOINT.
ESTUDANDO AS TABLESPACES DELETANDO UMA TABLESPACE
As TABLESPACES são objetos ló gicos que armazenam Comando: DROP TABLESPACE Sintaxe:
outros objetos do BD Oracle. Cada TABLESPACE possui um ou DROP TABLESPACE nome_da_tablespace
mais DATAFILES. INCLUDING CONTENTS [CASCADE CONSTRAINTS] Onde:
Podemos colocar uma TABLESPACE, no estado de Nome_da_tablespace É o nome da TABLESPACE a ser
OFFLINE (desativar a mesma) com ex ceçã o da TABLESPACE apagada. INCLUDING CONTENTS Apaga todo o conteú do da
SYSTEM (possui o dicioná rio de dados do Oracle). TABLESPACE.
A TABLESPACE SYSTEM contém informaçõ es do CASCADE CONSTRAINTS Apaga todas as restriçõ es de
dicioná rio de dados do Oracle, bem como contém também o integridade referencial das tabelas fora da TABLESPACE
Segmento de Reconstruçã o (ROLLBACK SEGMENT) CRIANDO SEGMENTOS DE RECONSTRUÇÃ O (ROLLBACK
denominado SYSTEM. SEGMENTS)
Obs: a TABLESPACE SYSTEM pode conter dados de Comando: CREATE ROLLBACK SEGMENT Sintaxe:
usuá rios. CREATE ROLLBACK SEGMENT nome_segmento
O uso de outras TABLESPACE diferente da SYSTEM TABLESPACE
permite uma maior flexibilidade na administração, por parte nome_da_tablespace STORAGE
do DBA cláusulas Onde:
Tais TABLESPACES armazenam Segmentos de ROLLBACK, nome_segmento É o nome do segmento a ser
segmentos temporá rios, dados de aplicaçõ es, índices, espaço criado. Nome_da_tablespace TABLESPACE onde
para os usuá rios. o segmento será criado. STORAGE clá usulas Define
como o espaço será alocado para o segmento.
CRIAÇÃO DE TABLESPACES Ex:
Sintaxe: CREATE ROLLBACK SEGMENT rbs1
CREATE TABLESPACE nome_da_tablespace TABLESPACE SYSTEM
DATAFILE “especif_do_datafile” DEFAULT STORAGE STORAGE (INITIAL 100K, NEXT 100K, MINEXTENTS 2,
clá usulas ONLINE/OFFLINE Onde: MAXEXTENTS 121,
Nome_da_tablespace É o nome da TABLESPACE a ser OPTIMAL lOOOK);
criada. “especif_do_datafile” Especificaçã o CRIANDO UM BANCO DE DADOS
do arquivo. Contém: Comando: CREATE DATABASE Sintaxe:
nome do datafile É o nome do datafile ou redo log file. CREATE DATABASE nome_do_banco
SIZE inteiro É o tamanho do mesmo (em K ou M ) REUSE CONTROL FILE REUSE
Permite ao Oracle reusar o arquivo. LOGFILE especif_arquivo GROUP inteiro MAXLOGFILES
DEFAULT STORAGE clá usulas Especifica os parâ metros inteiro MAXLOGMEMBERS inteiro MAXLOGHISTORY inteiro
default de armazenamento para todos os objetos criados na DATAFILE especif_arquivo MAXDATAFILES inteiro
TABLESPACE. MAXINSTANCES inteiro
ONLINE/OFFLINE Disponibiliza/indisponibiliza a ARCHIVELOG/NOARCHIVELOG
TABLESPACE. Clá usulas (DEFAULT STORAGE): INITIAL EXCLUSIVE CHARACTER SET charset
inteiro K/M Tamanho em bytes do primeiro EXTENT. Onde:
NEXT inteiro K/M Tamanho em bytes do pró ximo Nome_do_banco Nome do banco de dados a ser
EXTENT a ser alocado para a TABLESPACE. criado
MINEXTENTS Total de EXTENTS alocados quando o objeto Especif_arquivo
for criado. MAXEXTENTS Total de EXTENTS, incluindo o Especificaçã o do arquivo. Contém:
primeiro, que o Oracle pode alocar para o objeto. nome do datafile É o nome do datafile ou redo log
PCTINCREASE Percentual de incremento que o Oracle file. SIZE inteiro É o tamanho do mesmo (em K ou M ) REUSE
aloca novos EXTENTS para uma Tabela ou Índice. Permite ao Oracle reusar o arquivo.
ALTERANDO UMA TABLESPACE Comando: ALTER CONTROL FILE REUSE Especifica o
TABLESPACE Sintaxe: control file especificado no arquivo de parâ metros
ALTER TABLESPACE nome_da_tablespace (podendo ser reusado). LOGFILE GROUP Especifica o
ADD DATAFILE especif_do_datafile nome dos logfiles.
RENAME DATAFILE ‘nome_datafile’ TO ‘nome_datafile’ MAXLOGFILES má ximo de log files que podem ser criados
DEFAULT STORAGE Clá usulas para o banco de dados.
ONLINE/OFFLINE NORMAL/TEMPORARY/IMMEDIATE MAXLOGMEMBERS má ximo de membros de log files para
BEGIN/END BACKUP Onde: nome_da_tablespace É o um grupo de log files. MAXLOGHISTORY máximo de
nome da TABLESPACE a ser alterada. archived redo logs para ser recuperado
ADD DATAFILE Adiciona DATAFILE automaticamente (Oracle Parallel Server). DATAFILE
RENAME DATAFILE Renomeia um ou mais DATAFILES da especif_arquivo Nome(s) do(s) datafile(s)
TABLESPACE. DEFAULT STORAGE Altera as
a ser(em) usado(s). MAXDATAFILES Má ximo User_dump_dest caminho dos arquivos de trace dos
de datafiles que podem ser criados para o banco. usuá rios
MAXINSTANCES Má ximo de instâ ncias que podem ser Background_dump_dest caminho onde serã o gerados
montadas e abertas simultaneamente pelo banco de dados. arquivos de trace dos processos background do Oracle
ARCHIVELOG Habilita o modo de arquivamento. Processes nú mero máximo de processos (processos
NOARCHIVELOG Nã o habilita o modo de arquivamento. servidores + processos background)
EXCLUSIVE monta o banco no modo exclusivo apó s a sua Sql_trace habilita/desabilita o trace do SQL para todas as
criação. CHARACTER SET Seta o tipo de caracteres sessõ es de usuá rio
que será usado pelo banco para Audit_trail habilita/desabilita o Audit
armazenar os dados (Ex. ASCII). Obs: Para ver os parâ metros usar o comando SHOW
ALTERANDO UM BANCO DE DADOS PARAMETER Exemplo:
Comando: ALTER DATABASE Sintaxe: ALTER SVRMGR>SHOW PARAMETER DB; SVRMGR>SHOW
DATABASE nome_do_banco PARAMETER DEST;
ADD LOGFILE MEMBER ‘nome_arquivo’ CRIAÇÃ O E GERENCIAMENTO DE USUÁ RIOS DO BANCO
REUSE TO GROUP inteiro (“nome_arquivo, nome_arquivo) DE DADOS
Onde: Cada usuá rio do BD Oracle possui um esquema associado
nome_do_banco Nome do banco de dados a ser a ele, ou seja, cada objeto criado para (ou pelo) usuá rio é do
criado nome_arquivo nome de arquivo a ser adicionado esquema do mesmo. Ao se criar um usuá rio Oracle, um
(colocar esquema com o mesmo nome é criado para ele.
o caminho igual dos que já existem). Comando: CREATE USER Sintaxe:
GROUP inteiro nú mero do grupo que receberá o log file CREATE USER nome_usuá rio IDENTIFIED BY
membro a ser adicionado. senha/EXTERNALLY DEFAULT TABLESPACE
nome_tablespace
Obs.: TEMPORARY TABLESPACE nome_tablespace_temporaria
A Visã o V$LOGFILE mostra os grupos e membros de log PROFILE arquivo_profile
files. QUOTA inteiro/UNLIMITED ON nome_tablespace
INSTALAÇÃ O DO ORACLE Onde:
Na instalaçã o do Oracle geralmente utilizamos o instalador Nome_usuá rio nome do usuá rio a ser criado. BY senha
da Oracle, que é o Oracle Installer. Tal produto tanto instala senha do usuá rio
como desinstala os produtos Oracle. É de fá cil utilizaçã o pois EXTERNALLY usa como senha a senha do
basta escolhermos os produtos Oracle contratados e sistema operacional. DEFAULT TABLESPACE identifica a
selecionar a opçã o Install. (para maiores detalhes ver Manual TABLESPACE default para os objetos do usuá rio.
de Instalaçã o do produto). TEMPORARY TABLESPACE TABLESPACE temporá ria que
Obs Importante: armazena os segmentos temporá rios.
Alguns procedimentos (scripts) devem ser executados QUOTA inteiro define o espaço da TABLESPACE para o
apó s a instalaçã o do Oracle Server (como usuá rio SYS) usuá rio que está sendo criado (nú mero inteiro em K ou M
a) CATALOG.SQL Cria visõ es do dicioná rio de dados. bytes).
b) CATEXP.SQL Cria visõ es do dicioná rio UNLIMITED o espaço na TABLESPACE fica sem limite
de dados para o uso do Export/Import. c) CATPROC.SQL para o usuá rio. PROFILE arquivo_profile define o arquivo de
Cria tabelas e visõ es adicionais do dicioná rio de profile do usuá rio.
dados para a opçã o Ex:
procedural do Oracle. SVRMGR>CREATE USER ALUNO1
Tais procedimentos podem demandar de muito tempo, IDENTIFIED BY aluno1
pois formam muitas estruturas de dados. DEFAULT TABLESPACE TS_Treina TEMPORARY
O ARQUIVO DE PARÂ METROS: ESTUDANDO OS TABLESPACE Temp QUOTA 5M ON
PARÂ METROS TS_Treina PROFILE default; Obs:
O arquivo de parâ metros Oracle possui diversos O Oracle possui dois usuá rios especiais: o SYS e o
parâ metros que devem ser conhecidos pelo DBA: SYSTEM. O SYS é o usuá rio para colocar/tirar o BD do “ar” O
Db_name nome do banco de dados (obrigató rio) usuá rio SYSTEM é o usuá rio administrador do BD.
Control_files nome/localizaçã o dos control files ALTERANDO UM USUÁ RIO DO BANCO DE DADOS ORACLE
rollback_segments nome dos segmentos de rollback alocados Comando: ALTER USER Sintaxe:
para a instâ ncia. db_block_size tamanho do bloco Oracle (em ALTER USER nome_usuá rio IDENTIFIED BY
bytes) senha/EXTERNALLY DEFAULT TABLESPACE
shared_pool_size parâ metro que define nome_tablespace
a shared pool (para comando SQL TEMPORARY TABLESPACE nome_tablespace_temporaria
compartilhados) QUOTA inteiro/UNLIMITED ON nome_tablespace PROFILE
db_block_buffers nú mero de blocos armazenados arquivo_profile
na SGA DEFAULT ROLE nome_role/ALL [EXCEPT
log_buffer nú mero de bytes alocados para o redo log buffer nome_role]/NONE Onde:
na SGA log_files nú mero de redo log´s que podem ser abertos. Nome_usuá rio nome do usuá rio a ser alterado. BY senha
Log_checkpoint_interval define a freqü ência dos checkpoints senha do usuá rio
Max_dump_file_size tamanho má ximo de blocos para os EXTERNALLY usa como senha a senha do
arquivos de trace. Log_archive_start Habilita ou desabilita o sistema operacional. DEFAULT TABLESPA