Anda di halaman 1dari 31

nova tabela Address criada no banco de dados

- Address.java (addressBean) criada no pacote .bean correspondente a entidade


no banco de dados
- AddressDAO.java criada no pacote .dao correspondente a interface de acesso a
os metodos de persistencia utilizados na
mentabean(hibernate)
-metodos criados:
find(Address a)
findAddressByUserID(user)
- aplicaçacao com erros...
-> estudando...
+ JDBC - Java Database Connectivity
- sockets
- Connection con = DriverManager.getConnection("jdbc:mysql://loc
alhost/teste");
-
jdbc:mysql://localhost/dexlibrary
+ JAVA EE
- API´s - JSP, JSF, EJB, JTA, JMS, JPA...
+ Servlet Container
- Servlet - uma forma de se trabalhar com requisições de cliente cia
web que economiza o tempo de processamento de uma chamada e amemoria que siria
gasta para tal processo
- sao tao portaveis quanto qualquer programa e
scrito em java e aqules que programarservlets nao precisam mais se preocupar com
a funcionalidade do servido, que ja foi escrita para nós e nao presica ser altera
da
- aplicacoes web no java ee e servlet container - e composto por
JSP, Servlets, JSTL, JSF
* Servlet Container = é um servidor que suporta essas func
ionalidades mas nao o Java EE completo (Apache tomcat é um servlet container famos
assim como o Jetty da Morbay)
* WTP - Web tools plataform - contem plugins que auxilia
m no desenvolvimento para web, desde editores para JSP, JS, e HTML até perspectiva
s e jeitos de rodar servidores dentro do eclipse

- JSP - Java Server Pages


- baseado em html
- scriplet - codigo java escrito entre as tags <% %>
-<%
ContatoDao dao = new ContatoDAO();
List<contato> contatos = dao.getLista();
for (Contato contato: contatos){
%>
<li> <%= contato.getNome()%>, <%
= contato.getEmail() %>: <%= contato.getEndereco() %> <li>
<% } %>
- no JSP utilizamos a tag <%@ page import="" %> para importar aquilo
que será usado no nosso código scriplet. o tributo import premite que seja especifi
cado qual o pacote a ser importado. esse atributo é o único que pode aparecer várias v
ezes. nesse caso, importaremos diversos pacores separados por vírgulas
EL- Expression Language
para remover um pouvo do codigo java que fica na pagina
JSP foi desenvolvida a EL que é interpretada pelo servlet conteiner
existe uma variavel chamada "param", que é responsavel pel
os parametros enviados pelo cliente.
para ler o parametro chamado idade basta colocar
${param.idade}
para ler o parametro chamado dia devemos usar ${
param.dia}
- instanciando POJOs - os Javabeans devem possuir o cons
trutor publico sem argumentos tipico POJO: Plain Old Java Object, getters e sett
ers
se desejarmos instanciar um objeto desse tipo em nossa páf
ina JSP podemos fazer uso de uma tag (para substituir trechos de código) como resu
ltado surgiu um conjunto de tags uma tag library ou taglib, padrao, qe possui en
tre outras tags a funcionalidade de instanciar objetos através do construtor sem a
rgumentos.
Ex: <jsp:useBean id="contato" class="br.com.caelum.jdbc.
modelo.Contato"/>
desta forma podemos imprimir o nome do contato.. que est
a em branco uma vez que o construtor ´um pojo
${contato.nome}
a expressioin language é capaz de perceber sozinha a neces
sidade de chamar um método tipo getter, por isso o padrão getter/setter do pojo é tao
importante hoje em dia
desta mandeira classe conmo Contato sao ferramentas pode
ros por seguir esse pdrao pois diversas bibliotecas importantes estao baseadas l
nele como hibernate strits vrapotor JXpath e EJB padrao pojo!
Na Expression Languafe ${contato.}
o padrao POJO é utilizado pelas classes Bean que se baseia
m em entidades do banco de dados, as Beans ao respeitar o padrao pojo possuem so
mente guetters e setters e um construtor sem parametros.
- compilando arquivos JSP
no geral os arquivos JSP nao so compilados dentro do fra
mwork(eclipse), estes sao transformados em uma servlet por um com um compilador
JSP(o tomcat possui um compilador embuitido) esse compulador JSP pode gerar um c
odigo java que é entao compulkado para pytecode diretamente para a servlet
somente durante a execução de uma pagina jsp quando ele e tr
ansformado em uma servlet, que seu codifo java e compilado e necessitamos das cl
asses do friver que sao procuradas no diretorio lib.
- JSTL - JavaServer Pages Tag Library
utilizar as diversas tags jsp consideradas do grupo core
JSTL - é a API que encapsulou em tags simples toda a funci
onalidade que diversas pafinas web precisam, como controle de lacos, controle de
fluxoo, manipulacao de daos XML ...
antigamente diversas bibliotecas foram criadas p
or varios grupos com funcionalidades semelhantes a jstl,
antigamente se programava somente com JSPs e Jav
abeans o chamdo modelo 1, que na epoca fazia parte dos Blueprints de j2ee boas p
raticas
para baixar a biblioteca jstl basta acesar jstl.
dev.java.net onde serao encontrados os arquivos jar que estao no diretorio lib d
o projeto. esta e uma implementacao padrao da jstl feita pela sun atraves do Gla
ssFish
ao user o JSTL em alguma pagina pricisamos prime
iro definir o cabecalho. existem quatroo APIs basicas e iremos aprender utilizar
primeiro a api chamda core
sempre que utilizarmos uma taglib devemos primei
ro escrever um cabeçalho atraves de uma tag JSP que define qual taglib iremos util
izar e um nome chamado prefixo.
o prefixo pode ter qualquer valor mas por padrao
o prefixo da JSTL core é a letra c. u URI representa uma busca entre os aquivos j
ar no diretorio lib
ao descompactarmos o arquivo projeto.....
Comandos JSTL:
FOR:
<%@ taglib uri="http://java.sun.com/jsp
/jstl/core" prefix="c"%> -> inclui a taglib core
<jsp:useBean id="dao" class="br.com.cae
lum.jdbc.dao.ContatoDAO"> -> instancia ContatoDAO
<c: out value="${dao.lista[0].nome}"> -
> imprime o nome do primeiro contato retornado
o valor contido dentro do campo value é ch
amado de Expression Value.
para chamar o metodo getLista basta ulil
izar a EL : ${dao.lista}
caso desejamos executar um loop para cad
a contato dentro da coleçao retornada por esse metodo
array ou colecao: dao.lista
variavel temporaria: contato
<%
List <Contato> contatos = dao.getLista()
;
for (Contato contato : contatos){
%>
<li><%=contato.getNome()%>,<%=co
ntato.getEmail()%>:<%=contato.getEndereco() %><li>
<%
}
%>
A JSTL core disponibiliza uma tag chamda
c:forEach capaz de iterar por uma cole~cao exatamente o que precisamos. o exemp
lo a seguir mostra o suo de expression languafe de uma maneira muito mais elegan
te:
<c: forEach var="contato" items="${dao.l
ista}">
<li>${contato.nome},${contato.em
ail}:${contato.endereco}<li>
</c:forEach>
*c:import = Inclusao dinamica de arquivo
s: a inclusao e feita em tempo de execucao, e feita uma requisicao da pagina a
cada acesso e a pagina e incluida
<%c:import url="rodape.jsp" %>
*include = inclusao estatica de arquivos
: a inclusao e feita uma unica fez antes do aruqivo ser compulado, essa inclusao
e extremamente rapiuda, porem vale lembrar que o arquivo incluido pode ou nao f
uncionar separadamente.
<%@ include file="outra_pagina.jsp" %>
*c:url = link utilizando a tag c:url
<a href="<c:url value="/jstl-import.jsp"
/>"> link para jstl-import.jsp</a>
<c:url value="/imagem/banner.jpg"/>
*c:if Expresoes condicionais
<c:if test="${empty param.nome}">
Voce nao preencheu o campo nome
</c:if>
Controle de erro
Dvide as dificuldades que trnhas de axaminar em tantas partes qu
antas for possivel para uma melhor solucao
- tuilizacao de try catch em um arquivo jsp
utilizacao da tag c:catch em um aquivo jsp
- controle atraves de configuracao declaratica
- controle de erros atraves de exceptions
- controle de erros atraves de error codes.

Servlets- pequeno servidor


recebe requisicoes- request e retorna algo atravez do response. Diversas
requisicoes podem ser feitas a uma mesma servlet ao mesmo tempo em um unico ser
vidor por isso ela e mais rapica que um programa cgi comum. a especificacao da s
ervlet cita algumas vantafens que possui sobre o antigo cgi
classe HttpServlet do pacote javax.servlet estes se aplicam as servlets
que trabalham atraves do protocolo Http
a interface Servlet e a que define extatmente como uma servlet funciona.
E importante frisar que amesma instancia de uma servlet pode ser chama mais de
uma vez para diferentes requisicoes ao mesmo tempo, jistamente para obter as van
tagens mencionadas anteriormente em relacao ao uso de cgis
Funcionamento de uma servlet:
- inicializacao
- chamadas a metodos de servico, dois argumentos sao passados pa
ra o metodo service. a requisicao que o cliente faz e a resposta que permite enc
iar dados para o mesmo
coid service(HttpServletRequest req, HttpServletResponse res)
- finalizacao
para fazermos o mapeamento de uma servlet utiliza-se o arquivo w
eb.xml
fara simplificar as chamadas e reduzir o tamanho das URLs faz-se
o mapeamento de servlets, como na chamada OiMundo para o nome servletDeTeste
Definicao da servlet:
<servlet>
<servlet-name>servletDeTeste</servlet-name>
<servlet-class>br.caelum.servlet.OiMundo</servlet-class>
</servlet>
Mapeamento da servlet:
<servlet-mapping>
<servlet-name>servletDeTeste</servlet-name>
<url-pattern>/oi</url-pattern>
</servlet-mapping>
a anotacao @Override serve para notificar o compiladore que esta
mos sobrescrevendo o metodo service da classe pai, se por algum acaso errarmos o
nome do metodo ou trocarmos a ordem dos parametros o compiladore ira reclamer e
voce cvai percerver o rerro ainda em tempo de compilacao
Init e Destroy, toda servlet deve possuir um construtor sem argu
mentos para que o container possa cria-la. O servlet container inicializa a serv
let com o metodo ini. e a usa durante todo o seu peiodo ativo , ate que ira desa
tiva-la atraves do metodo destroy(), para entao liuberer o objeto
Na inicialixacao de ua servlet, quando paramentros podem ser lid
os e variaveis comuns a todas as requisicoes devem ser inicializadas. por exempl
l, conexcoes com o BD sao estabelecidas neste momento.
void init(ServletConfig config);
void destroy();
os metodos init e destroy quando reescritos soao obigados a cham
arar a classe HttpSevelets, sendo assim o parametro super.destroy deve ser utili
zado.
a maior complicaçcao e chatice dos parametros enciados atraves do
protocolo HTTP e que eles estao limitados a Strings, portatndo deem ser converti
dos para o tipo desejado
int idade= Integer.parseInt(request.getParameter("idade"));
é melhor colocar cada regra de negocio (como inserir aluno,remover
aluno, fazer relatorio de um aluno, etc..) em uma clsse separada;cada acao(regr
a de negocio) em nossa aplicacao estaria em uma classe
entao vamos extrair classes:
if(businessLogic.equals("AdicionaContato")){
new AdicionaContato().execute(request,response);
}else if(businessLoagic.equals("ListaContato")){
new ListaContatos().execute(request,response);
}
porem a cada lofgica nova, logica removida, alteraco etc
, temos que alterar essa servlet. isso e trabalhos e muito propenso a erros huma
nos
a utiliza~cao de codigo sql dentro de uma aplicacao agra
va o problema da independencia de plataforma de banco de dados e complica em mui
to o trabalho de mapeamenteo entre classes
o hibernate abstrai o codigo sql da nossa aplicacao e pe
rmite escolher o tipo de banco de dados enquanto o ptoframa esta rodando permiti
ndo mudar sua base sem alterar nada no seu codigo jaca
alem disso, ele permite criar suas tabelas do banco de d
ados de um jeito bem simples nao se fazenso necessario todo um desifn de tabelas
antes de desenvolver seu projeto que pode ser muito bem utilizado em prodjetos
pequenos.
ja projetos grandes onde o plano de acao padrao tomado p
elo hibernate nao satisfaz as necessidades da aempresa como o uso de jelect join
s etc ele possui dezenas de otimizacoes que podem ser feitas para atinfir tal ob
jetico

IOC - Inversao de controle é a arte de programar sem gerar acoplamento ent


re as classe, isto é, uma classe deve nunca instanciar outra classe dentro dela
DI - É responsavel pelo interligamento dos componentes, uma vez que um com
ponente pode depender de outro para executar sua funcoao
Tags de HTML
manipulando listas:
<mtw:select name="gender" list="genders" /><br/>
Gender: <mtw:checkboxes name="gender" list="genders" /><br/>
Gender: <mtw:radiobuttons name="gender" list="genders" /><br/>
AjaxRender pega o output da action e transforma em uma string que sera u
sada como saida da requisicao Ajax. Normalmente as respostas as requisiçoes ajax s
ao estruturas XML
passadas por DOM embutido no JavaScript do navegador.
Sequencia de requisicões ajax dentro do Mentawai:
- nav faz req Ajax para uma aplic web, em uma url mapeada por um
a action do mentawai.
- O servlet controler trata a requisicao Ajax como uma requisica
o HTTP normal e passa para a action.
- a action trata a requisicao ajax como se fosse uma HTTP normal
, gerando um Output como sempre.
-

-> Classe abstrata.


visa axiliar a utilizaçao de polimorfismo
referenciando funcionario, temos o polimorfismo de referencia, j
a que podemos receber qualquer coisa que seja um funcionario.
porem dar new em funcionario pode nao fazer sentido..por isso cr
iamos classes abastratas
utilizamos a palavra chave abstract para impedir que a classe po
ssa ser instanciada:
abstract class Funcionario{
protected double salario;
abstract double getBonigficacao();
}
metodo abstrato: requere que um metodo seja sempre escrito pelas
classes filhas,
class Gerente extends Funcionario(){
public String getBonificacao(){
return this.salario*1.4;
}
}
-> Interface - contrato (define tudo que uma classe deve fazer se quiser
ter um determinado stattus)
poderosa ferramenta contra o acoplamento entre classes.

-> Sobrecarga-> overloading -> em java metodos podem ter o mesmo nome de
sde que nao sejam ambiguos, (ou seja deve haver uma maneira de distingui-los no
momento da chamada oupor diferenca no numero de parametros ou no tipo que os mes
mos requerem..
interface Autenticavel{
//metodos de uma interface sao publicos e abstra
tos. sempre!
boolean autentica(int senha);
//quem desejar ser autentcavel precisa saber aut
enticar dado um inteiro retornando um boolean
}
//a interface é um contrato onde quem assina se responsabi
liza a implementar estes metodos.
//uma interface pode declarar uma série de metodos mas nun
ca contem a implementacao deles.
//a interface espoe o que o objeto deve fazer, como ele
faz é problema vai ser definido em uma implementacao desssa interface
Ex:
conexao com o banco de dados.
para que todas as chamadas para banco de dados diferentes respei
tem a mesma regra.
Interface Conexao contem todos os métodos necessarios para a comun
icacao e troca de dados com um banco de dados
cada banco de dados fica encarregado de criar a sua implementaca
o para essa interface
querm for usar uma Conexao nao precisa se importar com qual obje
to exatamente esta trabalhando, ja que ele vai cumprir o papel que toda conexao
deve ter. nao importa se é uma conexao com um Oracle ou mysql

interface AreaCalculavel{
double calculaArea();
}
//implementando algumas classes que sao area calculavel:
class Quadrado implements AreaCalculavel{
private int lado;
//construtor
public Quadrado(int lado){
}
//metodo obridatorio devido a interface
public double calculaArea(){
return this.lado * this.lado;
}
}
class Retangulo implements AreaCalculavel{
private int largura;
private int altura;
public Retangulo(int altura, int largura){
this.altura = altura;
this.largura = largura;
}
public double calculaArea(){
return this.altura * this.largura;
}
}
usar interfaces é uma maneira muito mais elegante de imple
mentar as classes. elas trasem vantagens de nao acoplar as classes
uma vez que heranca atraves de classes traz muito acopla
mento,
2 regras de ouro "prefira composicao ao inves de heranca
(e um..)"
"programe voltado para
a interface e nao para a implementacao"
interface Tributavel{
double calculaTributos();
}
class ContaCorrente extends Conta implements Tributavel{
//outros atributos e metodos
public double calculaTributos(){
return this.saldo * 0.01
}
}
class SeguroDeVida implements Tributavel{
public double calculaTributos{
return 24;
}
}
class TestaTributavel{
public static void main(String[] args){
ContaCorrente cc = new
cc.deposita(100);
Tributavel t= cc;
System.out.println(t.calculaTributos());
}
}
ao chamar o meodo getSaldo através da referencia t funciona normal
mente, a linha em que atribuimos ums conta corrente a um tributavel ~e apenas pa
ra enxergar que ~e possível fazê-lo. Nesse nosso caso, isso nao tem uma utilidade. E
ssa possibilidade sera util para o poximo exerciciso
class GerenciadorDeImpostoDeRenda{
private double total;
void adiciona(Tributavel t){
System.out.println("Adiciondo tributavel: " +t);
this.total = this.total + t.calculaTributos();
}
public double getTotal(){
return total;
}
//main que instancia diversas classe que implementam Tri
butavel e passa como argumento para um GerenciadorDeImpostosDeRenda.
//noa posso passar qualquer tipo de conta para o metodo
adiciona, apanas a que implementa Tributavvel. alem disso posso passe o se
}
Tratamento de ERROS
tecnica usual "magic numbers";
cada um desses metodos pode ter suas propias variaveis l
ocais, sendo que por exemplo, o metodo 1 nao enxerga as variaveis declaradas den
tro do main
como java e muitas outras linguagfem fazem isso atravez da pilha
de invoca~cao onde trosa invocaçâo de metodo é empilhada em uma estrutura de dados qu
e isola a area de memoria de cada um. quando um metodo termina retorna, ele colt
a para o metodo que o invocou. ele descobre isso atravez da pilha de execu~c"ao
stack"
pasta jogar fora o gomo no topo da pilha stackframe
Isso é conhecido como RASTRO DA PILHA(STACKTRACE). e uma saida ump
ortantissicma para o programador tanto que em qualquer forum ou lista de discuss
ao e comum os programadores enviarem juntamente com a descricao do problema essa
stacktrace
o sistema de exce~coes do java funciona da seguinte maneira: qua
ndo uma exveçao é lancada thrown, a jvm entra em estado de alerta e vai ser o metodo
atual toma alguma precaoucao ao tentar execuar esse trecho de codigo. como pord
emos ver o medodo2 nao toma nenhuma medida diferente do que vimos ate agora
como o medoo 2 nao esta tratando esse problema a jvm para a exec
utar dele anormalmente sem esperar ele terminar e volta um stachframe pra baixo
onde eer afieta nova veirficacao
o metodo 1 esta se precavendo de um prblema chamado ArrayIndexOu
tOfBoundsException??? nao... volta pra o main onde tambem nao ha prote~cao entao
a jvm morre, na verdade quem morre é apenas a Thread corrente, veremos mais pra f
rente...
Obvimamente, aqui estamos forcando o err, e nao faria sentido to
marmos cuidado com ele. seria facil arrumar um problema desse. basta navegarmos
na array ate o seu length.
porem apenas para entender o controle de fluxo de uma Exeption,
vamos colocar o codigo que vai tentar executar o bloco perigoso
caso o problema seja do tipo ArrayIndexOutOfBoundsException, ele
será pego(catched). Repare que é interessante que cada excecao no jave tenha um tip
o... ela pode ter atributos e memtodos
try{
for(int i=0; i<=15;i++){
array[i] =1;
System.out.println(i);
}
}catch(ArrayIndexAoutOfBoundsExeception e){
System.out.println("erro: "+e);
}
em vez de fazer o tray em torno do for interio tente apenas com
o bloco de dentro do for:
for(int i=0; i<=15;i++){
try{
}catch(ArrayIndexOutOfBoundsException e){
System.out.println("errro: "+e);
}
}
a diferençca...
ele captura o erro, trata a mensagem e retorna o fluxo de execuçca
o para o for, o que permite ele tentar acesar os campos seguintes do vetor e mai
s excessao sao levantadas
colovano o try/catch em volta da chamada do metodo 2
ele nao terminaria de ser executado.. a mensagem fim do metodo 2
nao seria exibida
a partir do momento que uma exception foi catched a execução volta a
o normal a partir daquele ponto.
Excecoes de Runtime mais comuns...
que tal tentarmos dividir um numero por zero? sera que o
computador conseguqe fazer aquilo que nos definirmos qu ano existe??
public clas TestandoADivisao{
public class void main(){
int i=2232;
i=i/0;
System.out.println("O resultado é: "+i);
}
}
java.lang.AruthmeticException: / by zero
public calss TestaReferenciaNula{
public static void main(String args[]){
Conta c = null;
System.out.println("Saldo atual "+c.getS
aldo());
}
}
java.lang.NullPointerException;
tepare qum um arrayIndexOutOfBoundsException ou um NullP
ointerException poderia ser facilmente evidaodo com o for corretamento escrito c
om ifs que checariam os limites da arra
outro caso em que tambem ocorre tal tipo de excecao e qu
ando um cast errado e feito- feremos mais pra frente.. Em todos os casos tais er
ros provavelmente poderiam ser evitaods pelo programador
e por esse motivo que o java nao te obriga a dar o try c
atch nessa excetion e chamamos essas exececoes de
UNCHECKED - estas exceçoes poderiam ser facilmente evitada
s pelo programador por isso o compilador nao checa se voce esta tratando essas e
xcecoes.
os erros em java sao um tipo de excecao que tambem pode
ser tratado. eles representam problemas na maquia virtual e nao devem ser tratad
os em 99%
Outro tipo de excecao: Checked Exceptions x Unchecked Exceptions
fica claro com os exempolos de codigo acima que
nao e necesario declarar que voce esta tentando fazer algo onde um erro possa oc
orrer. os dois exemplos com ou sem try/catch compilaram e rodaram. em um o erro
temino o programa e no outro foi possivel trata-lo
mas nao e sso este tipo de excesao que existe em java. o
u toutro tipo, obriga o meodo ou construtor a tratar o erro. um exemplo que pode
mos mostrar agora, eo de abrir um arquivo para leitura, onde pode ocorrer o erro
do arquivo nao existir(veremos como trabalhar ocm arquivos em outro capitulo,.
nao se pereoocu
public static void metodo(){
new java.io.FileReader("arquivo.txt");
}
o codigo acima nao compila e o complilador avisa que e n
ecessario tratar o FileNotFoundExeption que pode ocorrer.
"unreported exception java.io.FileNotFoundException" mus
t be caught or declared to be thrown
para compilar e fazer o programa funcionar, precisamos t
ratar o erro de um de dois jeitos. O primeiro , e trata-lo com o try e catch do
mesmo jeito que usamos no exemplo anterior com um array:
public static void metodo(){
try{
new java.io.FileReader("arquivo.txt");
}catch(java.io.FileNotFoundException e ){
System.out.println("Nao foi possivel abr
ir o arquyivo para leitura");
}
}

a seguyunda forma de tratar esse erro e delegar ele para


quem chamou o nosso metodo isto é passar para
a frente...
public static void metodo() throws java.io.FileNotFoundE
xception{
new java.io.FileReader("arquivo.txt");
}
no eclipse ~e bem simples fazer um try/catch como um thr
ows :
tente digitar eesse codigo no eclipse: ;;;
public class TestaException{
public static void main(String[] args){
new java.io.FileReader("arquivo.txt");
}
}
add throws declaration:
surround with try/catch...
No inicio existe um grande tentacao de sempre passar o e
rro pra frente para outros tratarem dele. pode ser que daca sentido, dependendo
do caso, mas nao ate o main, por exemplo, acontece que quem tenta abrir um arqui
vo sabe como lidar com um problema na leitura.
quem chamou um metodo no comeco do programa pode nao sab
er ou pior ainda, tentar abrir cinco arquivos diferente e nao saber qual deles t
eve um problema
nao ha uma regra para decidir em que momento do seu prog
rama voce vai tratar determinada excecao iso vai depender de em que podnto voce
tem condicao de tomar uma decisar em relacao aquele erro...
enquanto nao for o momento voce provavelemnte vai prefer
eir felegfar a responsabilidade para o metodo que te invocou...
boas prticas no tratamento de excecos
public void abre(String arquivo) throws IOException{
try{
objeto.metodoQuePodeLancarIOeSQLExceptio
n();
}catch(SQLException e ){
}
}
É desnecessario declara no throws as exeption que sao unch
ecked, porem é permitido e as vezes facilita a leitura e a docuamntacao do seu cod
igo.
Lembre-se do metodo saca da nossa classe conta. ele devo
lve um boolean caso consiga ou nao sacarÇ
boolean saca(double valor){
if(this.saldo < valor){
return false;
}else{
this.saldo -= valor;
return true;
}
}
pódemos, tambem lancar uma exveption o que extremamamente
util. dessa maneira resolvemos o proplema se alguem poder esquever de fazer um i
g para o retornao do metodo...
a palavra chave throw lanca uma exveption diferente de t
hrows que apensas avisa da possibilidade daquele metodo lanca-la
throw X throws
void saca(double valor){
if(this.saldo < valor){
throw new RuntimeException();
}else{
this.saldo-= valor;
}
}
no nosso caso, lanca uma do tipo unchecked. RuntimeExcep
tion e a mae de toas as exception unchecked. a desvantagem aqui é que ela é muito fe
nerica quem receber esse erro nao sabe todas a exeptions unchecked. a desvantage
m aqui e que ela e muiito generica quem receber esse erro nao sabe dizer exatame
nte qual foi o problema. podemos entao usar uma exeption mais especifica:
void saca(double valor){
if(this.saldo < valor){
throw new IllegalArgumentException();
}else{
this.saldo-=valor;
}
}
IllegalArgumentsException diz um pouco mais: algo foi pa
ssado como argumento sempre é invalido com opor exemplo numeros nefaticos referenc
ias nulas
vamos usar o try/catch ao inves do if/else o que faz mai
s sentido ja que a falta de saldo e uma excecao
Conta cc = new ContaCorrente();
cc.deposita(100);
try{
cc.saca(100);
}catch(IllegalArgmentException e){
System.out.println("Saldo Insuficiente");
}
void saca(double valor) throws IllegalArgumentsException
{
if(this.saldo < valor){
throw new IllegalArgumentException("Sald
o Insuficiente");
}else{
}
}
try{
cc.saca(100);
}catch(IllegalArgumentException e){
System.out.println(e.getMessage());
}
o que colocar dentro do try???
imagine que vamos saver dinheiro de diversas contas:
Conta cc - new ContaCorrente();
cc.deposita(100);
a forma como se insere os metodos dentro do try influencia muito
a execucao do programa!
pense direito nas linhas que dependem uma da outra para a execuc
ao correta da sua logica de negocios

e comum criar uma propria classe de excesao para controlar melho


r o uso de suas excessores. dessa maneira podemos passar valores especificos par
a ela carregar que sajam uteis de alguma forma. vamos criar a nossa:
cria-se uma propria classe de execoes para controlar melhor o us
o das exvesors., dessa forma podemos passar valores especificos para ela carrega
r, que sajam uteis de alguma forma. vamos criar a nossa:
public class SaldoInsuficienteException extends RuntimeException
{
SaldoInsuficienteException(String message){
super(message);
}
}
unchecked para chacked - obrigando assim, quem chama ese metodo
a dar try-catch ou throws...
existe uma pessima prtica de programacao em java que e a de escr
ever o catch e throws com exception
existem codigos que sempre usar exception pois isso cuida de tod
os os possiveis erros. o maior problema deisso e generalizar o erro, se alguem j
oga algo do tipo exception para quem o chamaou quem recebe nao sabe quao o tipo
especifico de erro ocorreu e nao vai saber como tratar o mesmo
para saber mais-> Finlly
os blocos try e catch podem conter uma terceira clausula chamada
finally que indica o que deve ser feito apos o termino do bloco try ou de um ca
tch qualquer.
é interessante colocar algo que ~e imprescindivel de ser executado
, caso o que voce queria fazer tenha dado certo, ou nao. o caso mais comum e o d
e liberar um recurso no finally, como um arquivo ou conexao com banco de dados p
ara que possamos ter a certeza de que aquele arquivo ou conexao va ser fechado,
mesmo que algo tenha falhado no decorrer do codigo
no exemplo a seguir o bloico finally sera executado nao importa
se tudo ocorreo ok ou com laum proiblema
try{
}catch{
}catch{
}catch{
}finally{
}finally{
}
um pouco mais..
é possivel criar um bloco try e finnly sem catch. isso significa q
ue se nao ocorrer erro algum, o bloco do finally sera executado. Se ocorrer algu
m erro, ele tambem sera exeutado e o erro sera jogado para quem chamou o metodo
i=1;
assert (i == 1) : "i é diferente de 1! ";

-> Pacotes - organizando suas classes e bibliotecas


- organizacao
Full Qualified Name - qyando precudamos referenciar uma classe com todo
o nome do pacote a ua frente...
as classes so sao visiveis para outras no mesmo pacote, para permitir qu
e a classe TesteDoBanco veja e acesse a classe Banco em outro pacote, precisamos
alterar essa ultima e transformala em publica...
a palavra public libera o acesso para classe de outros pacotes. do mesmo
jeito que o compilador reclamou que a casse nao estave cisivel agora ele reclam
a que o atrinutio variavel membro tamebm nao esta
e facil deduxit como resolver o problema algo que ja foi visto anteriorm
emte...
package, import, class
é iumportante manter a ordem priumeira aparece uma vez o package, depois p
ode aparecer um ou mais ports e or utimo as declaracoes de classes
e impossivel im´prtar um paconte interiro todas as classe do pacote, excet
o os subpacotes
importar todas as classes de um pacote nao implica em perda de performac
e em tempo de execucao mas pode trazer problemas com classes de mesmo nome, alem
disso importar de em um e considerado boa pratica pois facilita a leitura para
outros programadores
acesso aos atributos contrutores e metodos...
os modificadores de acesso existentes em java jao quatro, e ate o momnte
o ja vimos tres, mas so explicamos dois
public - todos podem acessar aquilo que for definido como public. classe
s, atributos, construtores e metodos podem ser public
protected - aquiti que é potected pode ser acessado por todas as classes d
o mesmo parcote tem acesso ao atritributo construtor metodo ou classe somente co
nstrutores e metrodos podem ser protected

private - a unica classe capaz de acessar os atributos, construtores e m


etodos privados é a propria classe. Classes como conhecemos nao podem ser pricate,
mas atributos, construtores e metodos sim.
classes publicas - para melhor organizar seu codigo, o java nao permite
mais de uma classe publica por arquivo e o arquivo deve ser NomeDaClasse. java
Uma vez que outros programadores irao utilizar essa classe, quando preci
sarem olhar o codifo da m
-> jar e javadoc
-> Programacao Concorrente - Threads
"O unico lugar onde o sucesso vem antes do trabalho e no difionario"
-Threads - "Suas coisas ao mesmo tempo"
utilizações: onde se necessita rodar duas coisas ao mesmo te
mpo
ex: gerar um pdf muito extenso...
queremos gerar o relatorio e ao mesmo te
mpo atualizar a barrinha de progresso
fazer varias coisas ao mesmo tempo, paralelament
e.
Em um programa só(um processo so), se queremos exe
cutar algo em paralelo normalmente falamos em Threads.
em java usamos a classe Thread do pacote java.la
ng para criarmos linhas de execucao paralela..
a classe thread recebe como um arfumento um obje
to com um codigo que desejamos rodar de maneira paralela.
por exemplo a geraao do relatorio pdf e a barra
de tarefas.
public class GeraPDF{
public vois rodar(){
// logica para gerar o pdf em qu
estao.
}
}
public class BarraDeProgresso{
public void rodar(){
//mostra a barra de progresso e
vai atualizando ela...
}
}
e no metodo main devemos criar os objetos e pass
armos para a classe Thread. O metodo start e responsavel por iniciar a execucao
da thread.
public class MeuPrograma{
public static void main(String[] args){
GeraPDF gerapdf new GeraPDF();
Thread threadDoPdf = new Thread(gerapdf)
;
threadDoPdf.start();
BarraDeProgresso barraDeProgresso = new
BarraDeProgresso();
Thread threadDaBarraDeProgresso = new Th
read(barraDeProgresso);
theadDaBarraDeProgresso.start();
como que a classe thread sabe que voce d
eve chamar o metodo roda?
é necessario um contrato entre as nossas c
lasse a serm exevutadas e a classe Thread.
para este contrato existe a interface Ru
nnable - rodavel na interface Runnable existe apenas um metodo chamado run. Bast
a umplememntalo "assinar " o contrato e a class Thread ja sabera executar nossa
classe.
public class GeraPDF implements Runnable
{
public void run(){
}
}
public class BarraDeProgresso implements
Runnable{
public void run(){
}
}
}
polimorfismo - e a capacidade de um objeto ser refereniado de diversas f
ormas
prefira implementar Runnable a herdar de Thread.
assim sua classe é um athread e pode usar o star diretamente.
gera.start();
ao inves de
GeraPDF gera = new GeraPDF();
Thread threadGera = new Thread(gera);
threadGera.start();
apesar de ser um codigo mais simples voce estamo
s usando heranca apenas por preguiça( herdamos um monte de metodos mas usaremos ap
enas o run)
Escalonador e troicas de contexto:
public class Programa implements Runnable{
private int id;
public int getId(){
return this.id;
}
public void setId(id){
this.id = id;
}
public void run(){
for(int i=0; i< 1000; i++){
System.out.println("Programa "+
id + "valor :"+ i);
}
}
}
scheduler- escalonador
é responsavel por escolher qual a proxima tarefa a ser executar e
executar o context switch switch switch switch switch
switch switch

GARBAGE COLLECTOR - coletor de lixo


Thread responsavel por jogar fora todos os oobjetos que nao esta
o mais sendo referenciados por nenhuyma outra Thread- seja de maneira direta ou
indireta.
O uso de Threads comeca a ficar interessante e complicado quando
precisamos compartilhar objetos entre carias Threads.
situa~cao:
banco com milhoes de contas.
clientes sacam e depositam dinheiro continuamente, 24 hr
s por dia
trava- a qual nao permite que mais de uma thread acesse
uma regiao criotica simultaneamente, em java a palavra chave
syncronized da essa cracteristica a um bloco de codigo e
recebe qual e o objeto que sera usado como chave.
a chave so e devolvida no momento em que a thread sque t
inha essa chave sair do bloco seja por retun ou disparo de uma excecao
para bloquear o acesso simultane o em uma classe conta:
public class Conta{
private double saldo;
public void autaliza(double taxa){
synchronized(this){
double saldo Atualizado = this.s
aldo*(1+taxa);
this.saldo = saldoAtualizado;
}
}
public void deposita(double valor){
synchronized(this){
double novoSaldo = this.saldo+valor;
this.saldo = novoSaldo;
}
}
observa-se que o uso dos blocoas synchronized de
ntro dos dois metodos. eles blqueiam uma Thread utilizando o mesmo objeto Conta,
o this.
desta forma estes metodos sao sutuamente exclusi
vos e so executam de maneira atomeica. threads que tentam pegar um lock que ja e
sta pegop ficaram em um conjunto especial esperando pela liberacao lock(naop nec
esariamente numa fila)
sincronizando o bloco inteiro
é comum sempre sincronizarmos um metodo inteiro no
rmalmente utilizando o this.
pyblic void metodo(){
synchronized(this){
//conteudo do metodo
}
}
para este mesmo efeito exeistem uma sisntaxe mai
s simple onde o synchronized pode ser usado como modificador do metodo.
public synchronized metodo(){
//conteudo do metodo
}
sobre locks e monitores e concorrencia - se o metodo for
estatico sera sincronizado usando o lock do objeto que representa a classe Nome
DaClasse.class
alem disso o pavote java.util.current, conhecido
com JUC, entrou no java 5.0 para facilitar uma serie de trabalhos comuns que co
stumam a a aparecer em uma aplicacao concorrente.
17.5 para saber mais: Vector e Hashtable.
duas collections muito famosas so o Vector e Ha
shtable, a diferenca delas com usas irmas ArrayList e HashMap e que as primeiras
sao thead safe.
porque nao usarmos sempre classes thread safe? a
dquirir um lock tem um custo, e caso um objeto nao va ser usasdo entre diferente
es threads nao ha poorque usar essas classe que consomem mais recursos. mas nem
semepre e facil enxergar se devemos sincronizar um bloco ou se devemos utilizar
blocos sincronizados.
antigamente o custo de se usar locks era altissi
mo, hoje em dia issi custa puco para a JVM, mas nao e motivo prara voce sincroni
zar tudo sem necessidade.

}
Collections framework...
- a amizade e um contrato segundo o qual nos conpromentemos a prestar pe
quenos favores para que no-los retribuam com grandes.

ao termino desse capitulo, voce sera capaz de:


- utilizar arrays, lists, sets ou maps dependendo da necessidade
do programa;
- iterar e ordenar listas e colecoes;
- usar mapas para insercao e busca de objetos
Arrays sao trabalhosos, utilizar estrutura de dados
a utilizacao de arrays ~e complicada em muitos pontos:
- nao podemos redimensionar um arrau am Java;
- é umpossivel buscar diretamente por um determinado eleme
nto cujo indice nao se sabe
- nao conseguimos saber quantos posicoes do array ja for
am populadas sem criar para isso metodos auxiliares
alem dessas dificuldades que os arrays apresentavam falt
ava um conjunto robusto de classes para suprir a necessidade de estruturas de da
dos basicas como listas ligadas e tabelas de espalhamento
com esses e outros objetivos em mente, a sun criou um co
njunto de classes e interfaces conhecido como collections framework, que reside
no pacote java.util desde o java1 1.2
a API do Collection é robusta e possui deversas classes qu
e representam estrutura de daos avancadas.
por exemplo, nao e necessario reiventar a roda e criar u
ma lista ligafa
- listas: é um recurso que a API de Collections, é u
ma colecao que permite elementos duplicados e mantem uma ordenacao especifica en
tre os elementos.
em outras palavras tem-se uma garantia de que qu
ando percorrer a lista os elementos serao entocntasdos em uma ordem pre determin
ada definida na hora da insercao dos mesmos
ela resolve todos os problemas que levantamos em
relacao ao array, esse co
java.util.List é a ArrayList, que trabalha com um
array interno para gerar uma lista, Portanto ela e mais rapida na pesquisa do qu
e sua concorrente a ArrayList trabalha com um array interno para gerar uma lista
.
ArrayList trabalha com um array interno para a implement
acaõ sendo mais rapida que o LinkedList que é mais rapida nas operacoes de inscercao
e remocao de itens nas pontas.
ArrayList nao é um array, nao se tem o atributo lenght em
uma list mas sim o atributo sise, list.size() array.lenght;
lista de String:
List listaString = new ArrayList();
lista.add("neto");
lista.add("dih");
lista.add("geovane");
lista.add("glasi");
lista.add("giuliano");

SEMPRE UMA LISTA RETORNA UM OBJECT sendo ne


cessario um cast para que o obejto retornado seja do tipo desejado e os metodos
referentes ao mesmo possam ser utiulizadosl.
o ideal é sempre trabalhar com a interface mais ge
nerica possivel - programe voltado para a interface e nao para a implementacao -
desta forma prefira retornar uma List do que um
ArrayList, pois se algum dia este metodo for modificado para retornar uma Linked
List as calsses que a utilizam terao que ser modificadas para que possam trabalh
ar com a linked list, caso se estivesse retornando apenas List a mudanca nao afe
taria as demais classes uma vez que seria apenas uma mudanca interna no metodo.,
desta forma obtemos um baixo acoplamento.
Listas no java 5.0 com Generics - o uso de gener
ics tambem elimina a necessidade de casting, ja que a seguranca de todos os obje
tos inseridos na lista serao do tipo conta corrente
restringe a lista a um determinado tipo de objet
o, nao necessitando mais do cast
faz com que todos objetos a serem inseridos na l
ista sejam do da classa de acordo com a declaracao
List<ContaCorrente> contas = new ArrayList<Conta
Corrente>();
contas.add(c1);
contas.add(c2);
contas.add(c3);
for(int i; contas.size(); i++){
ContaCorrente cc = contas.get(i); //sem
cast !!
Systen.out.println(cc.getSaldo());
}
Ordenacao: Collections Sort:
as listas sao percorridas de maneira pre determinada de acordo c
om a inclusao dos itens . Mas muitas vezes queremos percorrer nossa lista de man
eira ordenada.
a Classe Collections traz o metodo estatico sort. que recebe um
List como argumento e ordena de maneira crescente.
Ex:
List lista = new ArrayList();
lista.add("sergio");
lista.add("ze");
lista.add("algusto");
System.out.println(lista);
Collection.sort(lista);
System.out.println(lista);
sempre que falamos em ordenacao devemos pensar em um cri
terio de ordenacao, uma forma de determinar qual elemento vem antes de qual...

Conjuntos: java.util.set();
um conjunto (Set) funciona de forma analoga aos conjuntos da mat
ematica ele e uma colecao que nao permite elementos duplicados.l
ao percorrer um conjunto sua ordenacao nao e conhecida.
um conjunto é implementado atravez da interface set;
e tem como principais implementacoes as classes HashSet e TreeS
et;
Set conjunto() = new HashSet();
conjunto.add("neto"):
conjunto.add("algusto"):
conjunto.add("neimar"):
System.out.println(conjunto);
no java 5.0 Sets tambem podem ser parametrizados evitando o uso
de casts

casses que utilizam a interface Set:


HashSet -
TreeSet - thread safe, insere os elementos de forma orde
nada de acordo com o metodo de ordenacao definido

Set conjunto1 = new HashSet();


conjunto.add("neto");
conjunto.add("algusto");
conjunto.add("neimar");
System.out.println(conjunto); //a ordem que eles serao i
mpressos nao ira seguir necessariamente a ordem com que eles foram inseridos...

colecoes tem como base a interface Collection, que define metodo


s para adicionar e remover um elemento e verificar se ele eesta na colecao, entr
e outras operacoes como mostra a tabela a seguir
boolean add(Object) - adiciona um lemento na colecao. Como algum
as coleçoes nao suportam elementos duplicados este metodo retorna true ou false in
dicando se a adicao foi efetuada com sucesso.
boolean remove(Object) - Remove determinado elemendo da colecao.
sele nao existia retorna false
int size() - Retorna a quantidade de elementos existentes na col
ecao
boolean contains(Objeto) - procura por determinado elemento na c
olecao, e retorna verdadeiro caso ele exista. esta comparacao e feita baseando-s
e no metodo equal() do objeto e nao através do operador ==;
Iterator iterator() - retorna um objeto que possibilita percorre
os elementos daquela colecao
uma colecao pode implementar diretamente a interface Collection,
porem normalmente se usa uma das duas subinterfaces mais famosas: justamente Se
t ou List.
A interface Set pode ser mais rápida do que em um objeto do tipo L
ist, pois diversas implementacoes utilizam-se de tabelas de espalhamento(hash ta
bles), trazendo a busca para tempo linear.
A interface Map faz parte do framework, mas nao estende Collecti
on.
Vector X ArrayList
HashTable X HashSet - elementos distintos

TreeSet - permite ordenacao


A classe Map tambem faz parte do Framewrok mas nao extende Colle
ctions como o Set e o List
No Java 5, temos outra interface filha de Collection: a Queue, q
ue define metodos de entrada e de saida e cujo criterio sera definido pela sua i
mplementacao
por exemplo: LIFO, FIFO, ou ainda um heap onde cada elemento pos
sui sua chave de prioridade
Percorrendo colecoes..
se for uma lista podemos sempre utilizr um laco for chamando o m
etodo get para cada elemento. mas e se a colecao nao permitir indexacao?
por exemplo, um set nao possui um funcao para pegar o primeiro o
segundo ou o quinto elemento do conjunto..
podemos usar o enhanced-for (foreach) do java 5 para percorrer q
ualquer Collection se se preocupar com essas coisas. vimos antes o sudo do for d
o java 5 em listas, veja aora seu uso em Set:
for (Object elemento: conjunto){
String palavra = (String) elemento;
System.out.println(palavra);
}
Iterator - a partir do java 5 utiliza-se mais o enhanced for, ma
s por traz dele utiliza o iterator,
pode ser util utilizar-se o iterator ainda hoj, uma vez que este
permite se deletar um elemento enquanto se esta percorrendo um conjunto...
no caso da lista ainda temosmos um iterator especial o listItea
rator em que é possivel se deletar um elemnto da lista e voltar para a posicao ant
erior
que foi iterado anteriormente

Mapas - java.util.Map
Um mapa é composto de uma associçao de uma chave e um valor. e equi
valente ao conveito de dicionario, usado e varias linguagens
algumas linguagens como Perl ou PHP possuem suporte nativo a ma
pas onde sao conhecidos como matrizes associativas.
java.util.Map é um mapa, pois é possivel usá-lo para mapear uma chave
por exemplo:
mapeie o valor "Caelum" a chave "escola", ou mapeoe Rua verguei
ro a rua
chaves-> valores
Possiveis acoes de um mapa:
mapeie uma chave a um valor
o que esta mapeado na chave x
remapeie uma certa chave
quero o conjunto de chaves
quero o conjunto de vaores
desmapeie a chave x
Collections : Set(HashSet, TreeSet) e List(LinkedList, A
rrayList)
add
addAll
clear
contains
isEmpty
iterator
remove
size
toArray
exclusivo de List
add - em uma posicao especifica
addAll- a partir de uma dada posicao
get
listIterator
Operacoes em Maps.
clear
containsKey
containsValue
get
put
remove
size
Mapas- java.util.Map
metodo put(Object, Object) da intercae map receb
e a chave e o valor de uma nova associao. para saber o que esta assoviado a um d
eterminado objeto-chave, passa-se objeto no metodo get(Object).
criamos duas contas corrente e as colocamos em u
m mapa associando-as ao seu dono respectivamente.
ContaCorrente c1 = new ContaCorrente();
ContaCorrente c2 = new ContaCorrente();
c1.deposita(10000);
c2.deposita(10000);
Map mapaDeContas = new HashMap();

Bilioteca e framework: JFreeChart


"Duas coisas sao infinitas: o universo e a estup
idez humana; e nao estou certo sobre a estupidez humana" Albert Einstein
Ao termino deste capitulo voce será capaz de:
Entender o conveito de classpath
adicionar jars no path do seu projeto eclipse
utilizar o JfreeChat
Bibliotecas e o Java
Uma das grandes vanagens frequentemente levantad
as em favor do Java é o imenso numero de bibliotecas de qualidade para as mais var
iadas necessidades
o java padrao ja e poderoso o sufuciente para se
faezer milhares de coisas. mas existem muitas outras ferramentas em cima disso
que facilitam ainda mais certas atividades
e o melhor de tudo isso e que existe uma imensa
comunidade de software livre por traz desses produtos.
hoje a maioria das mais imporantes ferramentas e
bibliotecas Java usadas no mercado sao codigo aberto e gratuitas.
a Sun inclusive reconhece isso e apoia muito ess
e moviemento
Como usar uma biblioteca???
uma biblioteca de terceiro nada mais e que um co
njunto de classes escritas por eles e distribuidas npara nosso uso.
e o formato usado para isso e o formato padrao d
o java para distribuir aplicacoes, o JAR Java Archive, que vimos no capitulo 13
O acesso aos recursos da biblioteca e feito atra
ves do acesso a metoso publicos disponibilizadas por ela.
e a API , Application Programming Interface, ou
seja a interface de uso daquele programa, daquela biblioteca, para que possamano
s integrá-la ao nosso sistema.
Classpath-
quando compilamos um programa java como ele sabe
onde procurar suas classses? na biblioteca padrao e em alguns diretoris especif
icos em que a JVM foi instalada
Mas, e nos projetos que usam clases diferentes d
as padroa? por exemplo as que usam jars de terceiros??
no Classpath e que definimos qual o caminho das
nossas classes. por isso o nome Classpath
a algumas formas de confuiguramos o classpath
O JFreeChart é hoje a biblioteca mais famosa para
desenho de graficos. e um projeto de software livre iniciado em 200 que tem ampl
a aceitacao pelo emrcado
alem o fato de ser livre possui a vantafem de se
r bastante robusta e flexivel.
e possivel usala para desenhar grafico de pontos
, de barra, de torta, fgraficos financeiros,gantt charts em 2d ou 3d e mais um m
onte de coisas. Consegue dar saida em JPG, PNG, SVG, EPS e exibir em componentes
Swing
Sua licenca e LGPL o que permite ser usada em pr
ojetos de codigo fechado. o site oficial possui links para download, demos e doc
umentacao
é uma boa pratica colocarmos sempre os jars de dep
endencia de nosso projeto no proprio projeto e nao deizalos em outro ligar e ref
erencialos externamente.
dessa forma cada projeto pode ter sua propria ve
rsao e evitamos problemas de compatibilidade
alem disso nosso projeto e eauto contido e conse
guimos transporta-lo facilmente para outras maquinas

Criteria crit = this.getSession().createCriteria(ItemMovimentacao.class)


;
crit.createAlias("lotes", "l");
crit.createAlias("produto", "p");
crit.createAlias("p.tipo", "tp");

// Filtrando por Movimentacoes.


if (movimentacoes != null) {
crit.createAlias("movimentacao", "mov");
crit.createAlias("mov.setorDestino", "setor");
crit.add(Restrictions.in("movimentacao", movimentacoes));
crit.add(Restrictions.eq("setor.codigo",setor));
}
Calendar c = Calendar.getInstance();
c.add(Calendar.DAY_OF_MONTH, qtdDias);
Date data = c.getTime();
crit.add(Restrictions.le("l.dataValidade", data));
crit.addOrder(Order.asc("tp.codigo"));
crit.addOrder(Order.asc("p.codigo"));
if (crit.list().isEmpty()) {
return null;
} else {
return (List<ItemMovimentacao>) crit.list();
}
}
Listagem dos Medicamentos distribuídos por:
-> Usuarios
-> Proficionais de Saúde
-> Gestores do Sistema

Cobit -
Visão Executiva.
para muistas empresas, ingmacao e a tecnologia que da suporte a
ela representa o seu recurso de maiopr valor, mas frequentemente o menos reconhe
cido.
Empresas de Sucesso reconhecem os beneficos da Tecnologia da Inf
ormaçãoe a usa para

- Listar Medicamentos vencidos no almoxarifado - OK


- Solicitar Saída de Medicamentos da Unidade Consumidora -OK
- Listar Medicamentos Distribuídos pelas Unidades Consumidora - OK
- Saídas Confirmadas da Unidade Consumidora - OK
- Listar Estoque de Medicamentos das Unidades Consumidoras (erro grave) - OK
- Listar Medicamentos a expirar na Unidade Consumidora - OK
- listar Medicamentos vencido na Unidade Consumidora - OK
- sistema de autenticacao de login (sicomef) - ok
- bugs sicomef -
- arrumar script prijeto_padrao - arrumar indices iniciais tabela...
- remover select classificaçao em carregar produdotos estoque almoxarifado- caso t
ipoSistema = sicomef.- OK
da52f8780e4877cae20659465f9641d4 - 123 encriptado
Cederj
- como fazer a gestao de 1 projeto.

8- Maquina virtual e geracao de codigo


trazir um programam fonte em LDP (codigo fornte de entrada)
para um programa-objeto em linguagem de maquina de uma dada
arquitetura computacional.
o passo inicial é estabelecer precisamente a traducao que corresponde
a cada construcao de LPD.

BPMN -business process modeling notation


Business Porcess Modelling Notatia
medio praso - 25 anos quebra o sistema previdenciario brasileiro
esgotar vai exigir da socienda um pagamento muito grande pra quem ta aposentado
a relacao entre ativos e aposentados vai se tornar pequena e vai precisar de uma

Moditvacao
como identificar o inicio e o fim de um processo
quais simbolos permitem identificar decisao
onde e como estao representados as atividades do processo de venda de produto?
existem sub processos, como identifica-los?
Problemas- ambiquidade dos simbolos
ausencia de um padroa para a notacao de elementos de processos de negocio
influencia no desenvolvimento de novas alicacoes
atrelado a um fornecedor
dificik de atingir interoperabilidade
comunicao visualizacvao e divulgacao dos porcessos de negocio entre as partes in
teressadas fica prejudicada
cada interessado cria e usa uma notacao que entende ser a mais adequada
Business process Management initiative BPMI desenvolveu o padrao BPMN
em 2001 houve a formacao
surgiu em 2002
desde 2005 foi assumida pelo OMG
BPMN ~e uma linguagem grafica usada para representar processos de negocio.
estees processos de negocios sao representados atraves de um conjunto de simbolo
s padrao que sao organizados em um diagrama de processos de negocio
objetivo: comunicar uma grande variedade de informacao diferentes audiencias
analista de negocio
desenvolcedores
interessados nbos processos
eventos
atividade
gateway
Pool- representa um participante no processo; pools sao usadas quando tem-se doi
s oumais processos de negocios
2 ou mais porcesso sestao fisicamente separados a comunicacao entre as pools ~e
feita atraves de troca de mensagens
Lane- e a sub-participacao dentro de uma pool. sao usadas para separar processos
dentro de uma mesma organizacao

Aula 3 cederj
- Ciclo de vida do projeto e porcessos de gestao de projeto
Objetivo:
+ definir ciclo de vida do projeto
+ conceituar as principais fases de um projeto
+ distiguir ciclo de vida do projeto e ciclo de vida do produto
+ distinguir grupos de processos da gestao de projeto
Processo- conjunto de acoes e atividades inter relacionadas que sao exec
utadas para atigir um produto, resultado ou servico
Tecnologia da informacao tem se tornado difusa na dinamica turbulenta dos atuais
ambientes empresariais.
Enquanto no passado, executivos de negócios podem delegar, ignorar ou evitar decisõe
s de TI, hoje isso se torna impossível na maioria dos setores e industrias.
Essa maior dependencia da TI implica em uma maior vunerabilidade que está inerente
mente presentes em ambientes de TI. O tempo de inatividade do sistema ou da rede
tornou-se muito dispendioso para qualquer organizaç~zao nos idas de hoje. Tomemos
por exemplo o impacto da paralisa~cao no setor bancário ou em um ambiente médico. O
fator de resco é acompanhado por um amplo espectro de ameaças externas, tais como e
rros e omissões, abusos e fraudes.
Certamente a TI tem potencial nao somente para apoiar estrategias de negocio exi
stentes mas tambem potencial para formar novas estratégias. Neste sentido torna-se
nao somente um fator de sucesso para a sobrevivencia e prosperidade da organiza
cao, mas tambem uma oportunidade para diferenciar e alcancar vantagem competitiv
a.
Nesta perspectiva, o departamente se move de um provedor de servicos de produtos
a um parceiro estrategico
1.1.2 Governanca de TI para EMpresas Governanca de TI
Tecnologia da informacao e sua utilizacao em ambientes de negocios sofreu forte
transformacao na ultima decada. Desde a introducao da TI nas organizacoes, acade
mios e profissionais conduziram pesquisas e desenvolveram teorias e melhores par
ticas neste dominio do conhecimento. Isto resultou em uma variadade de definicao
es de governanca de TI, algumas das quais sao formulados na fig..
DEFINICOES de governanca de TI.

Alinhamento estratégico: garantia da ligação entre o negócio e os planos de TI; def


anutenção e validação do valor proposto para a TI; alinhamento das operações da TI com as o
erações corporativas;
COBIT (Control Objectives for Information and Realated Technologies) é um frameowo
rk disponivel gratuitamente que descreve um conjunto de melhores praticas para g
erenciamento, controle e seguranca em tecnologia da informaçao.
Tais praticas estao organizadas em um arcabouço logico baseado em 34 porcessos.
Este capitulo descreve o framework COBIT e como utiliza-lo como instrumento pra
Governanca de TI.
COBIT é sesenvolvido pela ISACA (Information Systems Sudit e Controle Association)
, associacão internacional composta por mais de 60.000 membros em todo mundo. Cobi
t se originou nos anos 90, no ambiente de audi

Configurando novo Ambiente de Desenvolvimento.


Desenvimento
- JDK 1.6
- Netbeans
- Notepad ++
- Tortoise SVN
- Mozila Firefox
-> instalar firebug
- Postgress -
OBS: Deve-se habilitar o login secundário: Ferramentas de sistema- serviços
- Logon Secundario
* escritorio:
- MSN
- Office
- Converter
- CutePDF
-
LIGAR MARCIO - intervalo
Pontos...
1 paragrafo
É inquestionavel o poder da mídia sobre a sociedade como um
todo.
A imagem de um lider a aceitação de um governo podem ser for
temente influenciados pelas noticias vinculadas aos meios de comunicacao.
2 paragrafo

A recente proposta de criar uma comissão para analizar a p


roducão editorial, esta sendo fortemente criticada pois pode representar
um indicio de tentativa da base aliada do governo em coi
bir ou inibir noticias que se chocam com os interesses do governo.
Um exemplo, talvez um pouco mais extremista, de influenc
ia do governo nos canais de midia podemos citar o caso da venezuela em que o pre
sidente Hugo Chaves está tomando
medidas claras no intuito de controlar o poder na midia
no pais, utilizando o dito "rolo compressor" aos que se opoem ao seu governo.
Em contrapartida os defensores da proposta quesionam a a
parente democracia da midia, levantando o fato de que so aparece na midia aquilo
que interessa os donos da midia.
uma midia condicionada por interesses economicos e rebat
em levantando A medida buscaria uma maior abordagem de temas a favor da diversid
ade, pluraridade, independentemente da opiniao da altoridade.

3 paragrafo conclusao
Concluindo, a socidade deve estar atenta a tais manobras
do governo, as motivações para a o aprovação dessa lei
Deve-se se observar a forma com que esse controle seria
estabelecido
tais medidas devem ser bem analizadas e dicutidas pois

Estudando prova compiladores;...


Materias:
- Geracao de Codigo intermediario
* fase executada apos a execução das analises: lexica sintat
ica e semantica e estiver correta do ponto de vista das 3 analises
* corresponde ao fim da analise e inicio do processo de
SINTESE.
* A geração de código se dá através do uso de QUADRUPLAS, TRIPLAS,
u_pascal**, (no caso de expressões aritméticas ou booleanas, devem ser usadas variáve
is TEMPORARIAS)

- Otimizacao de Codigo

- Geracao de Código Objeto


A tarefa central desse gerador de código é transformar uma especifi
cação de código intermediário vinda da etapa anterior para uma especificação de código asse
y, para poder ser executado num PC.

Sorting Algorithms
visual:
http://www.cs.oswego.edu/~mohammad/classes/csc241/samples/sort/S
ort2-E.html
*Quicksort
+ link de demonstracao da execucao: http://algol.dcc.ufl
a.br/~heitor/Projetos/TBC_AED_GRAFOS_WEB/TBC_AED_GRAFOS_WEB_arquivos/ordenacao/q
uick/QuickSort.html
+ quick sort paralelizado: http://myxman.org/dp/node/183
observar imagem:
+ https://im.ufba.br/pub/MATA52/Seminarios/algoritmo_par
alelo.pdf
Documentacao:
O algoritmo quick sort apresentado recebe como entrada uma lista
de numeros o os imprime ordenados.
A funçâo quicksort recebe o primeiro e o ultimo apontador de uma lis
ta,.
para execucao esperimental deve-se chamar "$ quicksort < entrada
.txt"
Conteudo:
- quicksort.c : contem a funcao quicksort
- quicksort.h : contem prototipos de funcoes auxiliares
- main.c : programa principal que chama o quixcksor
t para demosntracao
- entrada.txt : arquivo que deve conter uma lista de num
eros inteiros a serem ordenados.

*Bucket
+ http://www.youtube.com/watch?v=Iiuqrns0Gwk
- subdivide a ordenacao em regioes, pode ser utilizado i
nividualmente ou em conjunto com insert sor que o torna bem interessante
-
* Sample Sort
- é uma versao melhorada do bucket sort

algoritmos sorts:
http://www.cs.oswego.edu/~mohammad/classes/csc241/samples/sort/S
ort2-E.html
Insertionsort (int data[],int n) {
int tmp,i,j;
for (j=1; j<n; j++) {
i =j - 1;
tmp = data[j];
while ( (i>=0) && (tmp < data[i]) ) {
data[i+1] = data[i];
i--;
}
data[i+1] = tmp;
}
}
admin
adminimepo

ferias - 23 a dia 02 - 1 semana


caso possivel tirar do dia 16 ao dia 02 - 2 semanas
steps
adicionar aspecto
- pegar item selecionado no select
- passar para action que sera chamada via ajax, apos o retorno (uma list
a de aspectos atualizada sera colocada no output da action)
remover todos os li´s e inserir os novos...
remove semelhante.

Anda mungkin juga menyukai