Filipe Marques Ribeiro Drisostes Tópicos Programação Concorrente Modelo de Dados Relacional Redes de Petri Programação Orientada a Aspectos Programação Concorrente Definição Execução Concorrente Threads Sincronização Exemplo Prático – Números Primos Definição Para um melhor entendimento do conceito de programação concorrente devemos saber o que é concorrência. Concorrência é disputa por recursos ou juntarse para uma ação ou fim comum. A programação concorrente é uma técnica De programação que explora a independência Temporal de atividades definidas por uma aplicação. Execução Concorrente Pseudo-Paralela: execução em um único processador. Paralela: Execução em vários processadores que compartilham uma memória. Distribuída: Execução em vários processadores independentes, sem compartilhamento de memória. Threads Um thread é um fluxo único de controle sequencial dentro de um programa. É importante destacar a diferença entre thread e processo. O que diferencia ambas é o espaço de endereçamento. Enquanto várias threads compartilham o mesmo espaço (processo), vários processos possuem diferentes espaços de endereçamento. Sincronização É a troca de informações entre duas tarefas. A sincronização permite controlar o compartilhamento de dados entre tarefas. Existem dois tipos de sincronização, sincronização de competição e sincronização de cooperação. Sincronização Sincronização de Competição: impede que duas tarefas acessem uma estrutura de dados compartilhados ao mesmo tempo, sob pena da informação perder sua integridade. Sincronização de Cooperação: Quando dois objetos trabalham juntos em uma determinada tarefa e o objeto A precisa esperar que o objeto B termine sua execução para então continuar a sua. Exemplo Prático – Números Primos Modelo de Dados Relacional Modelo de Dados Relacional Definição Entidades e Relacionamentos Chaves Classificações Modelo Conceitual Modelo Lógico Modelo Físico SQL Data Definition Language Data Manipulation Language Definição Estudo das informações existentes em um contexto sob observação para construção de um modelo de representação de domínio real. Entidades e Relacionamentos Entidades são “objetos” do mundo real que podem ser identificadas de forma única em relação aos outros objetos. Entidades podem ser concretas(pessoas, casa) ou abstratas(departamento, polígono). Relacionamento são associações entre entidades ou ainda ações que podem ser realizadas de uma entidade sobre outra. Chaves Conjunto de atributos que podem identificar unicamente uma entidade. Chaves podem ser primárias ou estrangeiras. Chaves primárias identificam uma entidade. Chaves estrangeiras são atributos de uma entidade que são chaves primárias em outras entidades. Classificações Modelo Conceitual Modelo Lógico Modelo Fisico Modelo Conceitual Descreve a realidade do ambiente do problema, formado das principais entidades e relacionamentos. Modelo Conceitual Modelo Lógico Estabelece a lógica de relacionamento entre dados. Inicia-se o modelo lógico após a construção do modelo conceitual. Modelo Lógico Modelo Físico Descreve a estrutura física de armazenamento dos dados. É no modelo físico que são definidos tipos de dados, índices, exigência de conteúdo e etc. O modelo físico é representado por uma linguagem de script de criação de banco de dados(em geral SQL) Modelo Físico SQL Structured Query Language (SQL) é uma linguagem usada a construção de banco de dado relacional. A SQL tem como principais funcionalidades a definição e manipulação dos dados, definição de visões e autorização de acesso, e definição de restrição de integridade. Data Definition Language (DDL) É através das instruções DDL que são criados os bancos de dados e tabelas, alteração em tabelas e exclusão do banco de dados ou das tabelas Comandos DDL create database nome_do_BD create table nome_da_tabela drop table nome_da_tabela Data Manipulation Language (DML) É através das instruções DML que são realizadas inserções de dados, alterações ou consulta. Vale ressaltar que as instruções DML não modificam a estrutura do banco de dados. Comandos DML insert into nome_tabela(col1, col2, ...) values(1, 2, ...) select (col1, col2, ...) from nome_da_tabela Redes de Petri Redes de Petri Definição Representação Classificação das Redes de Petri Redes Ordinárias Redes de Alto Nível Aplicações Definição Rede de Petri é uma técnica de modelagem que permite a representação de sistemas, utilizando como alicerce uma forte base matemática . Essa técnica possui a particularidade de permitir modelar sistemas paralelos, concorrentes, assíncronos e não-determiníticos. Definição Podemos definir redes de Petri das seguintes formas: Matrizes, bags, relações. Nesta apresentação, será utilizado bags para definir redes de Petri. Bag é uma generalização do conceito de conjunto que admite a repetição de elementos. Na notação de bags, utiliza-se [ ], enquanto que para denotar conjuntos, utiliza-se { }. Definição Uma rede de Petri é composta de uma quíntupla (P, T, I, O, K )tal que P é um conjunto finito e não vazio de posições(lugares), T é o conjunto finito e não vazio de transições, I: TP é um conjunto de bags que representam o mapeamento de transições para as posições de entrada. O : T → P é um conjunto de bags que representa o mapeamento de transições para lugares de saída K : P → N é o conjunto da capacidades associadas a cada lugar, podendo assumir um valor infinito. Representação Redes de Petri podem ser representados como grafos orientados, onde os vértices são chamados de posições(lugares), os arcos possuem pesos e ainda possuem um barra que corta o arco que é chamada de transição. As posições equivalem às variáveis de estado e as transições correspondem às ações realizadas pelo sistema. Representação Representação-Exemplo Ciclo repetitivo dos turnos de um dia Representação-Exemplo Ciclo repetitivo dos turnos de um dia P = {Manhã, Tarde, Noite} T = {Amanhecer, Entardecer, Anoitecer} I = {I (Amanhecer) = [Noite] I (Entardecer) = [Manhã], I(Anoitecer) = [Tarde] } O = {O(Amanhecer) = [Manhã], O(Entardecer) = [Tarde], O(Anoitecer) = [Noite] } K = {k manhã=1, k tarde =1, k noite =1 } Classificação das Redes de Petri Redes Ordinárias: São caracterizadas pelas suas marcações(tokens. que são informações atribuídas aos lugares, para representar o estado da rede em um determinado momento), que são do tipo inteiro e não negativo. As redes ordinárias se subdividem em duas, Rede Binária e Rede Place-Transition Classificação das Redes de Petri Rede Binária: Permite apenas um token em cada lugar, e todos os arcos possuem valor unitário. Rede Place-Transition: Permite o acumulo de marcas no mesmo lugar, assim como valores não unitários para os arcos. Classificação das Redes de Petri Redes de Alto Nível: São caracterizadas por suas marcas, que não se restringem apenas ao números, podendo ser agora cores ou objetos. Com isso permite-se a individualização de uma marca, que possibilita maior clareza e um maior (ou menor) nível de abstração ao modelo. Aplicações das Redes de Petri Automação de manufatura Circuitos integrados Sistemas de produção Programação Orientada à Aspectos Programação Orientada à Aspectos Definição Conceitos Importantes Hello World Utilizando Programação Orientada à Aspectos Vantagens Definição É um paradigma de programação que provê a separação dos crosscuting concerns introduzindo uma nova unidade de modularização, o aspecto. Crosscuting concerns são as funcionalidades secundarias de um sistema, como por exemplo, Loggin. Conceitos Importantes Aspectos: Onde são declarados e implementados os códigos que expressam as regras de mesclagem das funcionalidades. Weaving: Processo onde é feita a mesclagem dos modulos do sistema de acordo com os aspectos encontrados. Join Point: É um ponto identificável do fluxo de um programa. Pode ser uma chamada de método ou a configuração do valor de uma variável. Variadas implementações da orientação a aspectos suportam variados tipos de join point. Conceitos Importantes Pointcut: É uma construção que seleciona join points. Depois de capturar um join point é possível especificar as regras de weaving nesses join points, como executar determinada ação antes ou depois da execução desse join point. Advice: É o código a ser executado em um join point que foi selecionado por um pointcut. Hello World Utilizando Programação Orientada à Aspectos Primeiro, cria-se a classe Hello Em seguida, cria-se o aspecto Hello Vantagens Maior Modularização Menor Acoplamento Maior Reusabilidade de Código Facilidade na adição de novas funcionalidades Referências Bibliográficas http://www.javaframework.org/portal/2010/04/14/o-que-programaoorientada-a-aspectos/ http://www.dca.ufrn.br/~affonso/FTP/DCA409/redes_de_petri.pdf http://gersonc.anahy.org/ppdrep/04-ProgramacaoConcorrentePPD.pdf http://www.dsc.ufcg.edu.br/~jacques/cursos/map/html/threads/threa ds1.html FIM Duvidas?!