Programação III
Aula Revisão I
Prof. Alexandre Monteiro
Recife
‹#›
Contatos

Prof. Guilherme Alexandre Monteiro Reinaldo

Apelido: Alexandre Cordel

E-mail/gtalk: [email protected]
[email protected]

Site: http://www.alexandrecordel.com.br/fbv

Celular: (81) 9801-1878
Programação Concorrente
[ O que é ]

“Um programa concorrente especifica 2
ou mais processos que cooperam para
realizar uma tarefa. Processos cooperam
através de comunicação; utilizam
variáveis compartilhadas ou troca de
mensagens“(G. R. Andrews)
Programação Concorrente
[ Motivação ]

Aproveitar hardware com múltiplos processadores

Atender a vários usuários simultaneamente

Melhorar o desempenho das aplicações

Aumentar a disponibilidade da CPU para o usuário

Objetos ativos e controle de atividades

Programas paralelos
Programação Concorrente
[ Conceitos ]

Paralelismo
• Processamento simultâneo físico

Concorrência
• Processamento simultâneo lógico (aparente)
• Requer entrelaçamento (interleaving) de ações

Processo
• Execução de um programa (running)

Programa Concorrente
• Vários processos que cooperam para a realização de
uma tarefa ou mais tarefas
Programação Concorrente
[ Conceitos ]

Comunicação
• Variáveis compartilhadas
• Passagem de mensagens

Sincronização
• Exclusão mútua de seções críticas
• Sincronização por condição

Estado de um programa concorrente
• Consiste dos valores das variáveis (explícitas e implícitas)
• A execução de um comando muda o estado

Ações atômicas
• Transformação indivisível de estado
Programação Concorrente
[ Conceitos ]

Comunicação
• Variáveis compartilhadas
• Passagem de mensagens

Sincronização
• Exclusão mútua de seções críticas
• Sincronização por condição

Estado de um programa concorrente
• Consiste dos valores das variáveis (explícitas e implícitas)
• A execução de um comando muda o estado

Ações atômicas
• Transformação indivisível de estado
Threads
[ Ciclo de Vida ]
Intervalo de tempo expirou
4.sleep()
Dormindo
6.stop()
1.new Thread()
escalonada
Criada
Encerrada
Término
3.run()
2.start()
Pronta
Executando
interrompida
Operação
de E/S
concluída
5.notify()
5.notityAll()
4.wait()
Esperando
Bloqueada
Operação
de E/S
iniciada
Threads
[ Sincronização ]



A sincronização baseia-se na idéia de que para
acessar um método sincronizado ou um entrar em
um bloco sincronizado, é preciso obter (ou já ter)
o lock desse objeto.
A Thread que conseguir esse lock é a única
autorizada a acessar os recursos protegidos
através de sincronização.
DICA QUENTE:
•Aprendam a implementar
sincronização na prática.
Classes java.io

Vamos passar a conhecer APIs do
Java.


java.io
Possuem as classes que você
mais comumente vai usar, não
importando se seu aplicativo é
desktop, web, ou mesmo para
celulares.
OO em java.io



A ideia atrás do polimorfismo no pacote java.io é de utilizar
fluxos de entrada (InputStream) e de saída (OutputStream)
Para toda e qualquer operação, seja ela relativa a um
arquivo, a um campo blob do banco de dados, a uma
conexão remota via sockets, ou até mesmo às entrada e
saída padrão de um programa (normalmente o teclado e o
console).
As classes abstratas InputStream e OutputStream
definem, respectivamente, o comportamento padrão
dos fluxos em Java: em um fluxo de entrada, é
possível ler bytes e, no fluxo de saída, escrever bytes.
Decorator Pattern

Como o próprio nome diz, essa classe lê do Reader por pedaços
(usando o buffer) para evitar realizar muitas chamadas ao
sistema operacional.

Você pode até configurar o tamanho do buffer pelo construtor.

É essa a composição de classes que está acontecendo.

Esse padrão de composição é bastante utilizado e conhecido.

É o Decorator Pattern.
Lendo Strings do Teclado


Apenas modificamos a quem a variável is está se referindo.
Podemos receber argumentos do tipo InputStream e ter
esse tipo de abstração: não importa exatamente de onde
estamos lendo esse punhado de bytes, desde que a gente
receba a informação que estamos querendo. Vejamos:
Escrevendo Caracteres (Saída)

Como você pode imaginar, escrever em um
arquivo é o mesmo processo:
Introdução ao MVC

É um modelo padrão de arquitetura usado em engenharia
de software para separar o projeto 3 camadas:
• Model: representam suas entidades e as que te ajudam a
armazenar
e
buscar
os
dados
são
chamadas
de Modelo (Model).
• View: interface visual gráfica (GUI), ou páginas web de
apresentação ao usuário, normalmente página HTML com
<forms>, constando informações da aplicação.
• Controller: interpreta eventos e manipula os dados (Objetos)
como listar, procurar, alterar, inserir e deletar dados;
“O Modelo é o objeto de aplicação que é manipulado, a Visão é a
apresentação ao usuário através das telas e o Controlador é o que define a
maneira como a interface do usuário reage às entradas do mesmo”.
Fonte: livro “Padrões de projeto: Soluções reutilizáveis de software orientado a objetos“.
Introdução ao MVC



MVC é implementado em várias linguagens de programação e
altamente
difundida,
permitindo
equipes
distintas
(programadores e designers) trabalharem sem interferência
no trabalho uns dos outros;
Deixa o código mais legível e possibilita que cada equipe foque
exclusivamente nas suas atribuições.
Duas palavras-chave em MVC são: Reuso e Flexibilidade.
Vantagens do MVC

Abaixo serão listadas algumas das vantagens em utilizar MVC em
seus projetos:
• Facilita o reaproveitamento de código;
• Facilidade na manutenção e adição de recursos;
• Maior integração da equipe e/ou divisão de tarefas;
• Diversas tecnologias estão adotando essa arquitetura;
• Facilidade em manter o seu código sempre limpo;
Comportamento do MVC
Comportamento do MVC
Top-Down
Browser
Evolução dos Dados
(DADOS)
MODEL
(Objeto)
MODEL
(Objeto)
Mapeamento
Objeto-Relacional
TABELA
(Registro)
Linguagens
(VIEW)
(CONTROLLER)
(MODEL)
HIBERNATE
JSP
JAVA
JAVA
HQL
SQL
Hibernate

Um aplicação simples usando hibernante consiste de
• uma classe Java
• um arquivo de mapeamento XML
• uma tabela de banco de dados SQL (MySQL)

O objetivo é desenvolver o Mapeamento ObjetoRelacional usando Hibernate como framework de
comunicação com um banco de dados.
Hibernate é produtividade!

Não tenha medo dos metadados XML!
• Siga as convenções que eles se mantêm simples

Pode-se gerar tudo em Hibernate
• O arquivo XML de mapeamento pode ser gerado
automaticamente de classes ou tabelas
• Classes podem ser geradas automaticamente a partir de
tabelas
• Tabelas podem ser geradas automaticamente a partir de
classes
• Outros arquivos de configuração podem ser gerados

Mais adiante apresentaremos ferramentas que
realizam essas tarefas
Criação da base de dados

Use a interface do seu MySQL Worbench

1) Crie a seguinte base de dados
teste_hibernate

2) Crie a seguinte tabela
CREATE TABLE `aluno` (
`id_aluno` int(11) NOT NULL,
`nm_aluno` varchar(255) NOT NULL,
`mat_aluno` varchar(255) NOT NULL,
`nota` double DEFAULT NULL,
`dt_cadastro` datetime DEFAULT NULL,
);
Os Meta dados de mapeamento

As informações sobre o mapeamento entre a tabela e a classe
Aluno ficam em um arquivo XML
• Guarde-o no mesmo pacote que a classe (entidade)
• Chame-o de Aluno.hbm.xml
Os Meta dados de mapeamento
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="entidade.Aluno" table="aluno" catalog="teste_hibernate">
<id name="idAluno" type="java.lang.Integer">
<column name="id_aluno" />
<generator class="identity" />
</id>
<property name=“nome" type="string">
<column name="nm_aluno" length="45" not-null="true" />
</property>
...
<set name="disciplinas" inverse="false" table="aluno_has_disciplina">
<key>
<column name="aluno_id_aluno" not-null="true" />
</key>
<many-to-many entity-name="entidade.Disciplina">
<column name="disciplina_id_disciplina" not-null="true" />
</many-to-many>
</set>
</class>
</hibernate-mapping>
A classe

Possui:
• Identificador do aluno(id),
• Nome do aluno (nome)
• ...


É um POJO/Java Bean (Plain Old Java Object ou Velho
e Simples Objeto Java)
Não tem nada a ver com o Hibernate
• Pode ser usado em qualquer aplicação Java.
• Segue as convenções usadas em JavaBeans
A classe
package entidade;
public class Aluno {
private int id;
private String nome;
...
public Aluno() {}
public String getNome() {
return this.nome;
}
public void setNome(String nome) {
this.nome = nome;
}
...
// getters e setters e outros construtores
}
Configuração em ambientes não
gerenciados

Em ambientes não
gerenciados, a aplicação é
responsável por obter
conexões JDBC
• Deve-se sempre usar um pool
de conexões para obter uma
conexão
• O Hibernate faz interface com o
pool isolando-o da aplicação
Fonte: Bauer/King. Hibernate In Action, Manning, 2005
Introdução à Padrão de Projeto



É uma solução geral reutilizável para um problema que ocorre
com frequência dentro de um determinado contexto no
projeto de software.
Um padrão de projeto não é um projeto finalizado que pode
ser diretamente transformado em código fonte ou de máquina,
ele é uma descrição ou modelo (template) de como resolver
um problema que pode ser usado em muitas situações
diferentes.
Padrões são melhores práticas formalizadas que o programador
pode usar para resolver problemas comuns quando projetar
uma aplicação ou sistema.
Introdução à Padrão de Projeto


Padrões de projeto orientados a objeto normalmente
mostram relacionamentos e interações entre classes ou
objetos, sem especificar as classes ou objetos da
aplicação final que estão envolvidas.
Padrões que implicam orientação a objetos ou estado
mutável mais geral, não são tão aplicáveis em linguagens
de programação funcional.
Padrão GoF



Livro Design Patterns: Elements of Reusable Object-Oriented Software,
publicado em 1995.
Autores: Erich Gamma, Richard Helm, Ralph Johnson e John Vlissides,
são conhecidos como a "Gangue dos Quatro" (Gang of Four) ou
simplesmente "GoF".
Os padrões "GoF" são organizados em 3 famílias :
• Padrões de criação: relacionados à criação de objetos
• Padrões estruturais: tratam das associações entre classes e objetos.
• Padrões comportamentais: tratam das interações e divisões de
responsabilidades entre as classes ou objetos.

Padrão "GoF" é classificado em 2 outros grupos :
• Padrões com escopo de classe : definido por relacionamentos de herança e
em tempo de compilação.
• Padrões com escopo de objeto : encontrados no relacionamento entre os
objetos definidos em tempo de execução.
Facade ou Fachada

É um objeto que disponibiliza uma interface simplificada
para uma das funcionalidades de uma aplicação.
Singleton


Este padrão garante a existência de apenas uma instância
de uma classe, mantendo um ponto global de acesso ao seu
objeto.
Ex.: Conexão com banco de dados, Log de sistema, Sessão
de Aplicação, etc.
Fachada + Singleton
Browser
Evolução dos Dados
(DADOS)
MODEL
(Objeto)
MODEL
(Objeto)
Mapeamento
Objeto-Relacional
TABELA
(Registro)
Linguagens
(VIEW)
JSP
Fachada
(CONTROLLER)
(MODEL)
HIBERNATE
JAVA
JAVA
HQL
SQL
Fachada + Singleton
Fachada
Singleton
Continuação: Fachada + Singleton
Controlador
Controlador: saveUsuario(u)
Download

Aula de Revisão