View
0
Download
0
Category
Preview:
Citation preview
9/5/2016
1
Aula 02Conceitos e Princípios de Modularidade 1
Alessandro Garcia
LES/DI/PUC-Rio
Agosto 2016
Mar 2009 2 / 18Alessandro Garcia © LES/PUC-Rio
Lembretes
• Horário das aulas
– inicio cada aula a partir de 13:15
• Sítio (site) da disciplina: www.inf.puc-rio.br/~inf1301
– já atualizado
– material de apresentação da disciplina
• eliminei aula do dia 7/9
– notas de aula disponíveis após as aulas
– avisos diversos: provas são no horário de aula (início as 13:00)
– software e documentos para download
– instalação completa do Visual Studio
• na instalação mínima, certas bibliotecas importantes podem ser deixadas de fora
9/5/2016
2
Software também tem arquitetura…
September 16
3
... mas nem sempre ela é modular!
September 16
4
9/5/2016
3
Modularidade – por que é importante?
• Hadoop
September 16
5
Modularidade – por que é importante?
“Modularidade” real - Hadoop
September 16
6
Nenad Medvidović. When, Where, and Why Do Software Systems Architectures Decay? March 2013.
9/5/2016
4
7 /26Alessandro Garcia © LES - DI/PUC-Rio
Especificação
• Objetivos dessa aula
– Discutir o que o que vêm a ser abstração
– Estudar em detalhe o que vêm a ser interfaces
– Apresentar o conceito de módulo
– Como estruturar um módulo em C?
• Referência básica:
– Capítulo 5 do livro texto
• Slides adaptados de: Staa, A.v. Notas de Aula em Programação Modular; 2008.
8 /26Alessandro Garcia © LES - DI/PUC-Rio
Sumário
• Abstração
• Níveis de abstração
• Interfaces
– conceituação
– relacionamento cliente-servidor
– interfaces providas e requeridas
• Módulo
9/5/2016
5
9 /26Alessandro Garcia © LES - DI/PUC-Rio
Abstração
• O que é isso?
10 /26Alessandro Garcia © LES - DI/PUC-Rio
Abstração
• E agora?
9/5/2016
6
11 /26Alessandro Garcia © LES - DI/PUC-Rio
Abstração
• Abstração: omissão de detalhes, mas sem que se perca a compreensão da essência do artefato
• Entretanto, a falta de suficientes detalhes pode impedir a compreensão da sua essência
• O excesso de detalhe torna mais trabalhosa a operação com o artefato
Um dos problemas...
Excesso de detalhes expostos por cada abstração do sistema...
September 16
12
Nenad Medvidović. When, Where, and Why Do Software Systems Architectures Decay? March 2013.
9/5/2016
7
Quais são os detalhes…
• essenciais e suficientes na declaração de uma função inserção em uma lista para quem for chamá-la?
– quais as propriedades devem ser declaradas na assinatura/ protótipo da função?
Ago 2009 13 /26Alessandro Garcia © LES - DI/PUC-Rio
14 /26Alessandro Garcia © LES - DI/PUC-Rio
Abstração
• Definição: “Uma abstração denota as características essenciais de um elemento que distinguem este de todos os outros elementos e, assim, provê limites conceituais bem definidos”
• Exemplos de abstrações em um sistema de controle de cursos
– Curso• Pessoas: Nome, Endereço, Telefone, Data Nascimento, etc…
– Alunos
» Curso, Data Início, Disciplinas Cursadas, Período, Status, etc...
– Professores
» Formação, Tipo de Dedicação, etc...
– Certos detalhes podem ser ignorados deste sistema:• Hobbies das pessoas, etnia, altura, peso, etc...
• Temos diferentes níveis de abstração em um sistema
– Linguagens de programação provêem suporte a estes níveis
9/5/2016
8
15 /26Alessandro Garcia © LES - DI/PUC-Rio
Níveis de abstração de um sistema
Sistema
Programa
Componente
Arquivos, bases de dados,mensagens, plataformaalto
Linha de código
Bloco
Função
Módulo
Classe
Módulos de definiçãoheader files
Módulos de definiçãoAPI - Aplication program
interface
Elementos públicos(e protected)
Parâmetrosgeneralizados
Escopo visível
Escopovisível
Níveis deabstração
concreto
baixo
Interface típica
certos níveis deabstração nem sempresão utilizados
Primeiro Princípio de Programação Modular...
Mar 2009 16 / 18Alessandro Garcia © LES/PUC-Rio
Cada módulo deve implementar uma ÚNICA abstração
– Somente características essenciais devem ser utilizadas para definir tal abstração(em relação aos outros módulos)
– Características essenciais são expressas nas interfaces dos módulos
9/5/2016
9
17 /26Alessandro Garcia © LES - DI/PUC-Rio
O que é uma interface?
• Interfaces são os elementos (as coisas) através das quais os módulos (ou funções) interagem
– uma interface define os elementos visíveis necessários para a comunicação
– outro exemplo de “interface” em software é: janelas para o usuário
• Para que haja comunicação, o “cliente” e o “servidor”precisam ter um vocabulário (idioma) comum
– Uma função em um programa C:
• “função cliente” precisa conhecer:– nome da função
– tipo de dado utilizado pela função
– etc...
18 /26Alessandro Garcia © LES - DI/PUC-Rio
O que consiste então a interface do módulo?
• Em computação os elementos de interface de um módulo são
– funções
• exemplos
– abrir arquivo
– criar lista, inserir elemento, etc...
– dados
• exemplo: lista de palavras, lista de caracteres, caracter, etc...
– eventos
• uma forma de ação instantânea que informa que algo aconteceu, ex.– clicou sobre “abrir arquivo”
– foi pressionado “enter” com linha de comando contendo “xyz”
– fim de arquivo foi encontrado
– o relógio atingiu a hora cheia
– eventos excepcionais, tais como: estouro da pilha, “memory overflow”, etc...
9/5/2016
10
19 /26Alessandro Garcia © LES - DI/PUC-Rio
Função: Compor palavra é cliente de...
/* Precisa valer: inxCharPalavra == 0,
CharCorr o caractere a ser processado */
/* Compor a palavra chave */
while ( CharCorr != Char_EOF )
{
if ( TipoCaracter( CharCorr ) == TipoUtil )
{
/* Adicionar caractere útil à palavra */
Palavra[ inxCharPalavra ] = CharCorr ;
inxCharPalavra ++ ;
} else
{
/* Saltar caractere separador */
if ( inxCharPalavra > 0 )
{
break ;
} /* if */
} /* if */
CharCorr = LerProximoChar( ) ;
} /* while */
/* inxCharPalavra > 0 ���� existe palavra a registrar */
20 /26Alessandro Garcia © LES - DI/PUC-Rio
Relacionamento cliente – servidor
• Cada instância de comunicação (conexão) ocorre entre
– um cliente
• quem origina a comunicação
• transmissor– solicita um serviço
– um servidor
• quem recebe e processa a comunicação
• receptor– presta um serviço
– um servidor pode dar respostas ao cliente
9/5/2016
11
21 /26Alessandro Garcia © LES - DI/PUC-Rio
Composição de módulos:interfaces providas e requeridas
Módulo 1
Módulo 3
Módulo 4 Módulo 5 Módulo 6
Módulo 2
clienteservidor
Interfaceexternada
Interface(s)requerida(incluída)
Interface provida ou
Interface requerida
Exemplo
Ago 2009 22 /26Alessandro Garcia © LES - DI/PUC-Rio
Módulo Lista
Quais seriam possíveisfunções públicas:interface provida?
Interface
Provida?
9/5/2016
12
Exemplo
Ago 2009 23 /26Alessandro Garcia © LES - DI/PUC-Rio
Módulo Lista
Quais seriam possíveisfunções públicas:interface provida?
CriarLista()
InserirElemento(id, elem)
BuscarElemento(id)
RemoverElemento(id)
DestruirLista()
…
Exemplo
Ago 2009 24 /26Alessandro Garcia © LES - DI/PUC-Rio
Módulo Lista
CriarLista()
InserirElemento(id, elem)
BuscarElemento(id)
RemoverElemento(id)
DestruirLista()
…
struct Elem
struct Cabeça
InterfaceProvida
Dados e funçõesnão providas
DestruirNo()
…
Arquivar()
…
9/5/2016
13
Exemplo
Ago 2009 25 /26Alessandro Garcia © LES - DI/PUC-Rio
Módulo Lista
CriarLista()
InserirElemento(id, elem)
BuscarElemento(id)
RemoverElemento(id)
DestruirLista()
…
struct Elem
struct Cabeça
InterfaceProvida
Dados e funçõesnão providas
DestruirNo()
…
Arquivar()
…
Módulo Tabuleiro
Módulo PeçasExcluídas
CriarTabuleiro()
DestruirTabuleiro()
CriarPeças
Excluidas()
IncluirPeça
Excluida()
Exemplo
Ago 2009 26 /26Alessandro Garcia © LES - DI/PUC-Rio
Módulo Lista
CriarLista()
InserirElemento(id, elem)
BuscarElemento(id)
RemoverElemento(id)
DestruirLista()
…
struct Elem
struct Cabeça
InterfaceProvida
Dados e funçõesnão providas
DestruirNo()
…
Arquivar()
…
Módulo Tabuleiro
Módulo PeçasExcluídas
CriarTabuleiro()
DestruirTabuleiro()
CriarPeças
Excluidas()
IncluirPeça
Excluida()
9/5/2016
14
Exemplo
Ago 2009 27 /26Alessandro Garcia © LES - DI/PUC-Rio
Módulo Lista
CriarLista()
InserirElemento(id, elem)
BuscarElemento(id)
RemoverElemento(id)
DestruirLista()
…
struct Elem
struct Cabeça
InterfaceProvida
Dados e funçõesnão providas
DestruirNo()
…
Arquivar()
…
Módulo Tabuleiro
Módulo PeçasExcluídas
CriarTabuleiro()
DestruirTabuleiro()
CriarPeças
Excluidas()
IncluirPeça
Excluida()InterfacesRequeridas
28 /32Alessandro Garcia © LES/DI/PUC-Rio
Módulo: definição geral
• De forma geral: é qualquer unidade que podemos tratar de forma independente em um sistema de software
– “uma unidade lógica de um programa com interface bem definida que pode ser compilada e testada de forma independente” [Staa, 2000]
– cada módulo representa um único conceito (abstração)
– interface bem definida: provida e requerida
• idealmente: deveria ser totalmente explícita
• objetivos:– a especificação ou implementação interna é substituível!
– facilitar compreensão, uso, manutenção do módulo
9/5/2016
15
29 /32Alessandro Garcia © LES/DI/PUC-Rio
Composiçãointerna de um módulo
FunçãoInterna 1
FunçãoInterna 2
TipoInterno 1
DadoInterno 1
inter rma
Arquivo Janela Metafile
DadoExternado 1
ClasseExternada 1
interfaceencapsulada
Módulo deDefinição
Módulo deImplementação
TipoExternado 1
MóduloA
MóduloB
MóduloX
DadoD
FunçãoF 2
ClasseY
interfacerequerida
FunçãoExternada 1
arquivo header
arquivo *.c file
lista de includes
interface provida
FunçãoExternada 2 Tipo
ExternadoX
Arquivos
30 /32Alessandro Garcia © LES/DI/PUC-Rio
O que é um módulo físico?
• Um módulo físico é uma unidade de compilação
– é composto por um ou mais arquivos de texto código fontenecessários para que possa ser compilado com sucesso
• Exemplo
– O módulo físico de teste específico TestArv.c é composto por:
#include
#include "generico.h"
#include "lerparm.h"
#include "tst_espc.h"
#include "arvore.h"
além de TestArv.c
Interface da biblioteca de C
Interface da biblioteca do
arcabouço de apoio ao teste
Interface padrão do módulo de
teste específico
Interface do módulo sob teste
Código fonte do módulo de
teste específico
Items de interface requerida pelo módulo TestArv
9/5/2016
16
Exemplo de Módulo em C
31 /26Alessandro Garcia © LES - DI/PUC-Rio
• Módulo árvore implementa uma estrutura genérica de árvores binárias
• manipuláveis através de um conjunto limitado de funções
• detalhes internos (organização de dados) não são visíveis para os usuários da estrutura árvore
Exemplo de Módulo em C
32 /26Alessandro Garcia © LES - DI/PUC-Rio
• Módulo árvore implementa uma estrutura genérica de árvores binárias
• manipuláveis através de um conjunto limitado de funções
• detalhes internos (organização de dados) não são visíveis para os usuários da estrutura árvore
9/5/2016
17
Exemplo de Módulo em C
33 /26Alessandro Garcia © LES - DI/PUC-Rio
Discutindo
Estrutura do arquivo ARVORE.h
Estrutura do arquivo ARVORE.c
Investindo em modularidade...
• Por que separar interface da implementação de módulos?
Ago 2009 34 /26Alessandro Garcia © LES - DI/PUC-Rio
9/5/2016
18
Mar 2009 35 /32Alessandro Garcia © LES/DI/PUC-Rio
Módulos em C
• Módulo de declaração ( x.h)• ou header file
– estabelece a interface externada do módulo
• documentação da interface
• código da interface
– destina-se a
• programadores clientes do módulo
• programadores desenvolvedores ou mantenedores do correspondente módulo de implementação
• testadores usando teste caixa-preta
• aos redatores da documentação para o usuário
• ao compilador
– ao compilar um módulo cliente
– ao compilar o correspondente módulo de implementação
Mar 2009 36 /32Alessandro Garcia © LES/DI/PUC-Rio
Módulos em C
• Módulo de implementação ( x.c )
– contém
• a inclusão do módulo de declaração próprio
• as inclusões de todos módulos de declaração dos quais é cliente
• especificação e implementação do dados manipulados pelo módulo – estruturas de dados (e.g. estrutura do nó e cabeça da árvore)
– as declarações de elementos encapsulados
• o código executável do módulo– código das funções
– destinam-se
• aos programadores desenvolvedores ou mantenedores– lêem e interagem inúmeras vezes com o texto
• ao compilador
9/5/2016
19
Aula 02Conceitos e Princípios de Modularidade 1
Alessandro Garcia
LES/DI/PUC-Rio
Agosto 2016
Recommended