componentização e reúso de software

79
Componentização e Reúso de Software Composição André Santanchè Laboratory of Information Systems – LIS Instituto de Computação – UNICAMP Museu Exploratório de Ciências da Unicamp Agosto 2019 Picture by Goran Konjevod [https://flic.kr/p/8msVPU]

Upload: others

Post on 16-Apr-2022

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Componentização e Reúso de Software

Componentização e Reúso de Software

ComposiçãoAndré Santanchè

Laboratory of Information Systems – LISInstituto de Computação – UNICAMP

Museu Exploratório de Ciências da UnicampAgosto 2019

Pic

ture

by

Go

ran

Ko

nje

vo

d [

htt

ps

://f

lic

.kr/

p/8

ms

VP

U]

Page 2: Componentização e Reúso de Software

Jornalismo Colaborativo

Page 3: Componentização e Reúso de Software

Wiki Notícias

Page 4: Componentização e Reúso de Software

torcedores.com

Page 5: Componentização e Reúso de Software

Cenário 1

Autore-mail

Editor Apresentador...

...

AutorWeb

...

Page 6: Componentização e Reúso de Software

Tarefa 1

▪Considere que haverá um ou mais DTOs (Data Transfer Objects) que circulará(ão) entre os componentes.

▪Escreva uma classe UML para este DTO.

Page 7: Componentização e Reúso de Software

Tarefa 1

▪Considere que haverá um ou mais DTOs (Data Transfer Objects) que circulará(ão) entre os componentes.

▪Escreva uma classe UML para este DTO.

Noticia

+ topico: String [1] + titulo: String [1] + resumo: String [1] + corpo: String [1] + autor: String [1]

Page 8: Componentização e Reúso de Software

Tarefa 2

▪Modele um conjunto de componentes em UML e suas respectivas interfaces, que atendam ao problema detalhado.

Page 9: Componentização e Reúso de Software

Tarefa 2

▪Modele um conjunto de componentes em UML e suas respectivas interfaces, que atendam ao problema detalhado.

▪Não é necessário especificar o tipo dos atributos. Noticia

+ topico: String [1] + titulo: String [1] + resumo: String [1] + corpo: String [1] + autor: String [1]

«component»Editor

«component»Apresentador

«Interface»INoticia

+ send( in noticia: Noticia)

INoticiaINoticia

«component»Author

INoticiaINoticia

Page 10: Componentização e Reúso de Software

Como compor e coordenar os componentes?

Page 11: Componentização e Reúso de Software

Orquestração

Page 12: Componentização e Reúso de Software

Orquestração

(Wolf, 2018)

Page 13: Componentização e Reúso de Software

Arquiteturana

Prática

Page 14: Componentização e Reúso de Software

Compiere

Workflows▪General Workflow

▫ Provides guidance and step-by-step instructions for achieving a task. Examples: Setup Wizards or Month End procedures. A user starts them from the menu.

▪Document Process Workflow

▫ Started when processing any document. You would extend these workflow type for approval situations. Example: Special approval for orders over a certain amount.

▪Document Value Workflow

▫ The workflow is automatically started when any entity fulfills a user defined condition. Example: Start credit approval for a new Business Partner.

(Agenda, 2010)

Page 15: Componentização e Reúso de Software

Compiere

Workflows

Page 16: Componentização e Reúso de Software

Arquiteturana

Prática

Page 17: Componentização e Reúso de Software

Open ERP

Workflows

Page 18: Componentização e Reúso de Software

Open ERP

Workflows

Page 19: Componentização e Reúso de Software

Open ERP

Workflows

Page 20: Componentização e Reúso de Software

Open ERP

Workflows

Page 21: Componentização e Reúso de Software

UML Activity Diagram

início

Ação 1

final

Ação 2 Ação 3

join

fork

merge

decisão

Ação 4

início

Ação 1

Ação 3 Ação 4

Ação 2

Ação 5

final

false

true

Page 22: Componentização e Reúso de Software

Exemplo de Compra

OMG Unified Modeling Language TM (OMG UML)Version 2.5http://www.omg.org/spec/UML/2.5

Page 23: Componentização e Reúso de Software

Exemplo de Compra

OMG Unified Modeling Language TM (OMG UML)Version 2.5http://www.omg.org/spec/UML/2.5

Page 24: Componentização e Reúso de Software

Tarefa 3

▪Escreva o fluxo de atividades que interliga os componentes da Tarefa 2 desde a escrita da notícia, até sua publicação.

▪Considere que pode-se enviar notícia pela Web ou por e-mail.

Noticia

+ topico: String [1] + titulo: String [1] + resumo: String [1] + corpo: String [1] + autor: String [1]

«component»Editor

«component»Apresentador

«Interface»INoticia

+ send( in noticia: Noticia)

INoticiaINoticia

«component»Author

INoticiaINoticia

Page 25: Componentização e Reúso de Software

Tarefa 3

▪ Escreva o fluxo de atividades que interliga os componentes da Tarefa 2 desde a escrita da notícia, até sua publicação.

▪ Considere que pode-se enviar notícia pela Web ou por e-mail.

Noticia

+ topico: String [1] + titulo: String [1] + resumo: String [1] + corpo: String [1] + autor: String [1]

«component»Editor

«component»Apresentador

«Interface»INoticia

+ send( in noticia: Noticia)

INoticiaINoticia

«component»Author

INoticiaINoticia

Page 26: Componentização e Reúso de Software

UML Activity Diagram

Apresenta Notícia

Seleciona e Refina Notícias

Submete Notícia Web Submete Notícia e-mail

noticia selecionada?

[não]

[sim]

Page 27: Componentização e Reúso de Software

Apresenta Notícia

Seleciona e Refina Notícias

Submete Notícia Web Submete Notícia e-mail

noticia selecionada?

[não]

[sim]

«component»Editor

«component»Apresentador

INoticiaINoticia

«component»Author

INoticiaINoticia

UML Activity Diagram

Page 28: Componentização e Reúso de Software

Coreografia

Page 29: Componentização e Reúso de Software

Coreografia

(Wolf, 2018)

Page 30: Componentização e Reúso de Software

Enterprise Service Bus (ESB)

Everything you need to know about Enterprise Service Bus (ESB)Sanchit Agrawal | October 25, 2016https://www.hcltech.com/blogs/everything-you-need-know-about-enterprise-service-bus-esb

Page 31: Componentização e Reúso de Software

Padrões de Mensagens▪ISO8583

▪NACHA

▪EDIFACT

▪HL7

▪SWIFT

▪TLOG

▪X12

▪ACORD

▪FIX

▪IDoc

Page 32: Componentização e Reúso de Software

Tomógrafo

Workflow Engine

Apresenta Notícia

Seleciona e Refina Notícias

Submete Notícia Web Submete Notícia e-mail

noticia selecionada?

[não]

[sim]

Laudo Impressão

Page 33: Componentização e Reúso de Software

Tomógrafo

Workflow Engine

Apresenta Notícia

Seleciona e Refina Notícias

Submete Notícia Web Submete Notícia e-mail

noticia selecionada?

[não]

[sim]

Laudo Impressão

Page 34: Componentização e Reúso de Software

Tomógrafo Laudo Impressão

Page 35: Componentização e Reúso de Software

TemperaturaMonitora

NormalidadeSirene

Resfriamento

Page 36: Componentização e Reúso de Software

«component»

Solicita Estoque

«component»

Monta Pedido

«component»

Solicita Compra

Verifica Disponibilidade

SolicitaProduto

«component»

Despacha Encomenda

Entrega Produto

«component»

Prepara Encomenda

Despacha

EnviaPedido

«component»

Entrega Pedido Compra

SolicitaProduto

SolicitaEntrega

SolicitaEntrega

EncomendaDespachada

Consulta Estoque

Posição Estoque

Solicita ProdutoEstoque

Entrega Estoque

Solicita CompraProduto

Entrega Compra

Compondo em Dois Níveis

Page 37: Componentização e Reúso de Software

Monitorando Sensores

Page 38: Componentização e Reúso de Software

Estilos ArquiteturaisDecomposição Modular

Pipe & Filter

Page 39: Componentização e Reúso de Software

Pipe & Filter

▪Bastante popular em sistemas operacionais UNIX-like

▪Processo incremental

▫vai gerando os dados de saída, sem esperar que a entrada de dados se complete (Garlan, 1993).

▪Invariantes (Garlan, 1993)

▫entidades independentes

▫ identidades de entrada e saída desconhecidas

▫especificação local

Page 40: Componentização e Reúso de Software

Pipe & Filter

▪Filter (componente)

▫Lê fluxos de dados de entrada e produz seus resultados como fluxos de dados de saída.

▪Pipe (conector)

▫Conduzem o fluxo, conectando o fluxo de saída de um filter ao fluxo de entrada de outro filter.

Page 41: Componentização e Reúso de Software

Pipe & Filter UNIX-like

▪Lista nome dos arquivos

▫dir /b

Page 42: Componentização e Reúso de Software

Pipe & Filter UNIX-like

▪Operador de pipe no DOS e Unix: |

▪Lista nome dos arquivos “pipe” coloca em ordem alfabética

▫dir /b | sort

Page 43: Componentização e Reúso de Software

Pipe & Filter Unix-like

▪Lista nome dos arquivos “pipe” coloca em ordem alfabética “pipe” recorta aqueles que têm o trecho “Win”

▫dir /b | sort | grep "Win"

▪Redireciona saída (pipe) no DOS: >

▪Mesmo anterior com saída para arquivo “resultado.txt”

▫dir /b | sort | grep "Win" >resultado.txt

Page 44: Componentização e Reúso de Software

Pipe & Filter

Exemplos

▪Empacotando e comprimindo

▪Docbook

Page 45: Componentização e Reúso de Software

Vantagens do Pipe & Filter

▪Suporta reúso de transformações

▪Organização intuitiva para a comunicação das partes

▪Fácil de adicionar novas transformações

▪Relativamente simples de implementar tanto em sistemas concorrentes como sequenciais.”1

(Sommerville, 2007)__________________________________

1. “- Supports transformation reuse. - Intuitive organisation for stakeholder communication. - Easy to add new transformations. - Relatively simple to implement as either a concurrent or sequential system.” (Sommerville, 2007)

Page 46: Componentização e Reúso de Software

Componente Console

«component»

ConsoleComponent

ITableProducer

IConsoleUpdate

«interface»IConsoleUpdate

+ update()

Page 47: Componentização e Reúso de Software

Conectando Componentes

«component»BusConsumerComponent

URI: String

ITableProducer

topic: String

IBusConsumer bc = new BusConsumerComponent();

Page 48: Componentização e Reúso de Software

Conectando Componentes

«component»BusConsumerComponent

URI: String

ITableProducer

topic: String

IBusConsumer bc = new BusConsumerComponent();

bc.setBusURI("tcp://localhost:1883");

bc.setTopic("sensor/+/+");

bc.setBlockSize(10);

bc.setVerbose(2);

sensor/+/+

Page 49: Componentização e Reúso de Software

Conectando Componentes

«component»BusConsumerComponent

URI: String

ITableProducer

ITableProducer

«component»

ConsoleComponentIUpdate

topic: String

IBusConsumer bc = new BusConsumerComponent();

bc.setBusURI("tcp://localhost:1883");

bc.setTopic("sensor/+/+");

bc.setBlockSize(10);

bc.setVerbose(2);

IConsole console =

new ConsoleComponent();

sensor/+/+

Page 50: Componentização e Reúso de Software

Conectando Componentes

«component»BusConsumerComponent

URI: String

ITableProducer

ITableProducer

«component»

ConsoleComponentIUpdate

topic: String

IBusConsumer bc = new BusConsumerComponent();

bc.setBusURI("tcp://localhost:1883");

bc.setTopic("sensor/+/+");

bc.setBlockSize(10);

bc.setVerbose(2);

IConsole console =

new ConsoleComponent();

console.connect(bc);

sensor/+/+

Page 51: Componentização e Reúso de Software

IBusConsumer bc = new BusConsumerComponent();

bc.setBusURI("tcp://localhost:1883");

bc.setTopic("sensor/+/+");

bc.setBlockSize(10);

bc.setVerbose(2);

IConsole console =

new ConsoleComponent();

console.connect(bc);

bc.connect(console);

Conectando Componentes

ITableProducer

«component»

ConsoleComponentIUpdate

«component»BusConsumerComponent

URI: String

ITableProducer

topic: Stringsensor/+/+

Page 52: Componentização e Reúso de Software

Conectando Componentesconsole.update();

«component»

ConsoleComponentIConsoleUpdate

ITableProducer

«component»BusConsumerComponent

URI: String

ITableProducer

topic: Stringsensor/+/+

Page 53: Componentização e Reúso de Software

Conectando Componentes

«component»

ConsoleComponentIConsoleUpdate

ITableProducer

requestInstances()

«component»BusConsumerComponent

URI: String

ITableProducer

topic: Stringsensor/+/+

Page 54: Componentização e Reúso de Software

Conectando Componentes

«component»

ConsoleComponentIConsoleUpdate

ITableProducer

requestInstances()

«component»BusConsumerComponent

URI: String

ITableProducer

topic: Stringsensor/+/+

Page 55: Componentização e Reúso de Software

Conectando Componentes

«component»

ConsoleComponentIConsoleUpdate

ITableProducer

requestInstances()

«component»BusConsumerComponent

URI: String

ITableProducer

topic: Stringsensor/+/+

Page 56: Componentização e Reúso de Software

Conectando Componentes

IConsoleUpdate«component»

ConsoleComponent

ITableProducer

«component»BusConsumerComponent

URI: String

ITableProducer

topic: Stringsensor/+/+

Page 57: Componentização e Reúso de Software

Conectando Componentes

«component»BusConsumerComponent

URI: String

ITableProducer

topic: String

IBusConsumer bc = new BusConsumerComponent();

Page 58: Componentização e Reúso de Software

Conectando Componentes

«component»BusConsumerComponent

URI: String

ITableProducer

topic: String

IBusConsumer bc = new BusConsumerComponent();

bc.setBusURI("tcp://localhost:1883");

bc.setTopic("sensor/+/+");

bc.setBlockSize(10);

bc.setVerbose(2);

sensor/+/+

Page 59: Componentização e Reúso de Software

Conectando Componentes

«component»BusConsumerComponent

URI: String

ITableProducer

ITableProducer

«component»

ConsoleComponentIUpdate

topic: String

IBusConsumer bc = new BusConsumerComponent();

bc.setBusURI("tcp://localhost:1883");

bc.setTopic("sensor/+/+");

bc.setBlockSize(10);

bc.setVerbose(2);

IConsole console =

new ConsoleComponent();

sensor/+/+

Page 60: Componentização e Reúso de Software

Conectando Componentes

«component»BusConsumerComponent

URI: String

ITableProducer

ITableProducer

«component»

ConsoleComponentIUpdate

topic: String

IBusConsumer bc = new BusConsumerComponent();

bc.setBusURI("tcp://localhost:1883");

bc.setTopic("sensor/+/+");

bc.setBlockSize(10);

bc.setVerbose(2);

IConsole console =

new ConsoleComponent();

console.connect(bc);

sensor/+/+

Page 61: Componentização e Reúso de Software

IBusConsumer bc = new BusConsumerComponent();

bc.setBusURI("tcp://localhost:1883");

bc.setTopic("sensor/+/+");

bc.setBlockSize(10);

bc.setVerbose(2);

IConsole console =

new ConsoleComponent();

console.connect(bc);

bc.connect(console);

Conectando Componentes

ITableProducer

«component»

ConsoleComponentIUpdate

«component»BusConsumerComponent

URI: String

ITableProducer

topic: Stringsensor/+/+

Page 62: Componentização e Reúso de Software

Componente Projection

«component»

ProjectionComponentITableProducer

ITableProducer

attributes: String[]

Page 63: Componentização e Reúso de Software

Exercício 3▪Faça um diagrama UML de como seria a

interface de um componente que realize uma filtragem da coluna de “value” da tabela.

«component»

ProjectionComponentITableProducer

ITableProducer

attributes: String[]

«component»

ConsoleComponent

ITableProducer

IConsoleUpdate

ITableProducer

«component»BusConsumerComponent

URI: String

ITableProducer

topic: String

Page 64: Componentização e Reúso de Software

Conectando Três Componentes

“value” «component»

ProjectionComponentITableProducer

ITableProducer

attributes: String[]

«component»

ConsoleComponent

ITableProducer

IConsoleUpdate

ITableProducer

«component»BusConsumerComponent

URI: String

ITableProducer

topic: Stringsensor/+/+

Page 65: Componentização e Reúso de Software

Conectando Três Componentes

«component»

ProjectionComponentITableProducer

ITableProducer

attributes: String[]

«component»

ConsoleComponent

ITableProducer

IConsoleUpdate

“name”

“name”

«component»BusConsumerComponent

URI: String

ITableProducer

topic: Stringsensor/+/+

Page 66: Componentização e Reúso de Software

Conectando Três Componentes

«component»

ProjectionComponentITableProducer

ITableProducer

attributes: String[]

«component»

ConsoleComponent

ITableProducer

IConsoleUpdate

“name”

“name”

«component»BusConsumerComponent

URI: String

ITableProducer

topic: Stringsensor/+/+

Page 67: Componentização e Reúso de Software

Conectando Três Componentes

«component»

ProjectionComponentITableProducer

ITableProducer

attributes: String[]

«component»

ConsoleComponent

ITableProducer

IConsoleUpdate

“name”

«component»BusConsumerComponent

URI: String

ITableProducer

topic: Stringsensor/+/+

Page 68: Componentização e Reúso de Software

Conectando Três Componentes

«component»

ProjectionComponentITableProducer

ITableProducer

attributes: String[]

«component»

ConsoleComponent

ITableProducer

IConsoleUpdate

“name”

“name”

«component»BusConsumerComponent

URI: String

ITableProducer

topic: Stringsensor/+/+

Page 69: Componentização e Reúso de Software

Conectando Três Componentes

«component»

ProjectionComponentITableProducer

ITableProducer

attributes: String[]

«component»

ConsoleComponent

ITableProducer

IConsoleUpdate

“name”

“name”

«component»BusConsumerComponent

URI: String

ITableProducer

topic: Stringsensor/+/+

Page 70: Componentização e Reúso de Software

Conectando Três Componentes

«component»

ProjectionComponentITableProducer

ITableProducer

attributes: String[]

«component»

ConsoleComponent

ITableProducer

IConsoleUpdate

“name”

“name”

«component»BusConsumerComponent

URI: String

ITableProducer

topic: Stringsensor/+/+

Page 71: Componentização e Reúso de Software

Conectando Três Componentes

«component»

ProjectionComponentITableProducer

ITableProducer

attributes: String[]

«component»

ConsoleComponent

ITableProducer

IConsoleUpdate

“name”

“name”

«component»BusConsumerComponent

URI: String

ITableProducer

topic: Stringsensor/+/+

Page 72: Componentização e Reúso de Software

Componente Selection

«component»

SelectionComponent

ITableProducer

attribute operator value nominalComparison

ITableProducer

Page 73: Componentização e Reúso de Software

Conectando com Selection

«component»

SelectionComponent ITableProducer

ITableProducerattribute

«component»

ConsoleComponent

ITableProducer

IConsoleUpdate

operator value nominalComparison

«component»BusConsumerComponent

URI: String

ITableProducer

topic: Stringsensor/+/+

Page 74: Componentização e Reúso de Software

Conectando com Selection

«component»

SelectionComponent ITableProducer

ITableProducerattribute

«component»

ConsoleComponent

ITableProducer

IConsoleUpdate

valueoperator value nominalComparison

> 22 false

«component»BusConsumerComponent

URI: String

ITableProducer

topic: Stringsensor/+/+

Page 75: Componentização e Reúso de Software

Exercício 6

▪Apresente um gráfico comparativo entre idade e tempo de recuperação, filtrando apenas a doença “bacterial_infection”.

Page 76: Componentização e Reúso de Software

Referências

▪ Agenda OpenSystems. COMPIERE – Smart Open Source ERP Software with integrated CRM Solutions. Disponível em http://www.agenda.si/fileadmin/www.agenda.si/documents/Compiere.opis.pdf, acessado em 9/04/2010.

▪ Ecma International (2011). ECMAScript Language Specification - Standard ECMA-262 (5.1 ed.).

▪ Fay Chang, Jeffrey Dean, Sanjay Ghemawat, Wilson C. Hsieh, Deborah A. Wallach, Mike Burrows, Tushar Chandra, Andrew Fikes, and Robert E. Gruber. 2008. Bigtable: A Distributed Storage System for Structured Data. ACM Trans. Comput. Syst. 26, 2, Article 4 (June 2008).

Page 77: Componentização e Reúso de Software

Referências

▪ Hickson, I. (2011). HTML Microdata -- W3C Working Draft 13 January 2011. W3C. Retrieved from http://www.w3.org/TR/2011/WD-microdata-20110113/

▪ Wolf, O. (2018). Introduction into Microservices. Retrieved August 20, 2018, from https://specify.io/concepts/microservices

Page 78: Componentização e Reúso de Software

André Santanchèhttp://www.ic.unicamp.br/~santanche

Page 79: Componentização e Reúso de Software

Licença▪ Estes slides são concedidos sob uma Licença Creative

Commons. Sob as seguintes condições: Atribuição, Uso Não-Comercial e Compartilhamento pela mesma Licença.

▪ Mais detalhes sobre a referida licença Creative Commons veja no link:https://creativecommons.org/licenses/by-nc-sa/4.0/deed.pt_BR

▪ Agradecimento a Goran Konjevod [https://www.flickr.com/photos/23913057@N05/] por sua fotografia “50 waves” usada na capa e nos fundos, disponível em [https://flic.kr/p/8msVPU]vide licença específica da fotografia.