View
21
Download
0
Category
Preview:
Citation preview
18-Mar-19
1
Aula 02Conceitos e Princípios de Modularidade 1
Alessandro GarciaLES/DI/PUC-Rio
Março 2019
2 / 18Alessandro Garcia © LES/PUC-Rio
Lembretes
• Horário das aulas
– começamos as 13:15
• Definição de horário de monitoria
• Sítio (site) da disciplina: www.inf.puc-rio.br/~inf1301
– material de apresentação da disciplina
– notas de aula disponíveis após as aulas
– software e documentos para download
• Aba “Software”: ferramenta (arcabouço) de teste disponível– Arquivo zip: Arquivo de instalação da versão 2.02
– Arquivo “pdf: Leia-me”
• Aba “Documentos” – “Monografia sobre Arcabouço para a Automação dos Testes de Módulos
Redigidos em C.”, ler a Seção 2 (instalação do arcabouço)
– instalação completa do Visual Studio
• na instalação mínima, certas bibliotecas importantes podem ser deixadas de fora
18-Mar-19
2
3 /26Alessandro Garcia © LES - DI/PUC-Rio
Especificação
• Objetivos dessa aula
– Estudar conceitos básicos de modularidade
– Estudar em detalhe o que vêm a ser interfaces
– Estudar o que vem a ser um módulo
• Referência básica:
– Capítulo 5 do livro texto
• Slides adaptados de: Staa, A.v. Notas de Aula em Programacao Modular.
4 /26Alessandro Garcia © LES - DI/PUC-Rio
Sumário
• Abstração
– níveis de abstração
• Interface, conceituação
– elementos da interface
• Interface provida e requerida
• Relacionamento cliente-servidor
• Estruturação de módulos em C
18-Mar-19
3
Software também tem arquitetura…
March 19 5
... mas nem sempre ela é modular!
March 19 6
18-Mar-19
4
Modularidade – por que é importante?
• Hadoop
March 19 7
Modularidade – por que é importante?
“Modularidade” real - Hadoop
March 19 8
Nenad Medvidović. When, Where, and Why Do Software Systems Architectures Decay? March 2013.
18-Mar-19
5
9 /26Alessandro Garcia © LES - DI/PUC-Rio
Abstração
• O que é isso?
10 /26Alessandro Garcia © LES - DI/PUC-Rio
Abstração
• E agora?
18-Mar-19
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
• A falta de suficientes detalhes pode impedira compreensão da sua essência
• O excesso de detalhe torna mais trabalhosa a operação com o artefato
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 12 /26Alessandro Garcia © LES - DI/PUC-Rio
18-Mar-19
7
13 /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
14 /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
18-Mar-19
8
Primeiro Princípio de Programação Modular...
15 / 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
Um dos problemas...
Excesso de detalhes expostos por cada abstração do sistema...
March 19 16
Nenad Medvidović. When, Where, and Why Do Software Systems Architectures Decay? March 2013.
18-Mar-19
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
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 */
18-Mar-19
10
19 /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...
20 /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
18-Mar-19
11
Exemplo
21 /26Alessandro Garcia © LES - DI/PUC-Rio
Módulo Lista
Quais seriam possíveisfunções públicas:interface provida? Interface
Provida?
Exemplo
22 /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()
…
18-Mar-19
12
Exemplo
23 /26Alessandro Garcia © LES - DI/PUC-Rio
Módulo Lista
CriarLista()
InserirElemento(id, elem)
BuscarElemento(id)
RemoverElemento(id)
DestruirLista()
…
struct Elemstruct Cabeça
InterfaceProvida
Dados e funçõesnão providas
DestruirNo()
…
Arquivar()…
Exemplo
24 /26Alessandro Garcia © LES - DI/PUC-Rio
Módulo Lista
CriarLista()
InserirElemento(id, elem)
BuscarElemento(id)
RemoverElemento(id)
DestruirLista()
…
struct Elemstruct Cabeça
InterfaceProvida
Dados e funçõesnão providas
DestruirNo()
…
Arquivar()…
Módulo Tabuleiro
Módulo PeçasExcluídas
CriarTabuleiro()
DestruirTabuleiro()
CriarPeçasExcluidas()
IncluirPeçaExcluida()
18-Mar-19
13
Exemplo
25 /26Alessandro Garcia © LES - DI/PUC-Rio
Módulo Lista
CriarLista()
InserirElemento(id, elem)
BuscarElemento(id)
RemoverElemento(id)
DestruirLista()
…
struct Elemstruct Cabeça
InterfaceProvida
Dados e funçõesnão providas
DestruirNo()
…
Arquivar()…
Módulo Tabuleiro
Módulo PeçasExcluídas
CriarTabuleiro()
DestruirTabuleiro()
CriarPeçasExcluidas()
IncluirPeçaExcluida()
InterfacesRequerida
26 /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
18-Mar-19
14
27 /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
28 /32Alessandro Garcia © LES/DI/PUC-Rio
Exemplo: módulo Tabuleiro
• 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
– A interface requerida de Tabuleiro.c é composto por:
#include <string.h>
#include <stdio.h>
#include "Tabuleiro.h"
#include "Peca.h"
#include "Lista.h"
Interfaces da biblioteca de C
Interface do módulo
Interfaces de outros módulos do programa
Items de interface requerida pelo módulo Tabuleiro
18-Mar-19
15
29 /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
30 /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
18-Mar-19
16
Aula 02Conceitos e Princípios de Modularidade 1
Alessandro GarciaLES/DI/PUC-Rio
Março 2019
Recommended