INF1301 Aula02 Principios Modularidade 17 1 finalinf1628/docs/2017_1/Aula02... · Microsoft...
Transcript of INF1301 Aula02 Principios Modularidade 17 1 finalinf1628/docs/2017_1/Aula02... · Microsoft...
3/16/2017
1
Aula 02Conceitos e Princípios de Modularidade 1
Alessandro GarciaLES/DI/PUC-Rio
Março 2017
2 / 18Alessandro Garcia © LES/PUC-Rio
Lembretes
• Horário das aulas
– vamos ter que começar as 13:00
• Definição de horário de monitoria
• Sítio (site) da disciplina: www.inf.puc-rio.br/~inf1301
– já atualizado
– material de apresentação da disciplina
– notas de aula disponíveis após as aulas
– software e documentos para download
– instalação completa do Visual Studio
• na instalação mínima, certas bibliotecas importantes podem ser deixadas de fora
3/16/2017
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; 2008.
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
3/16/2017
3
Software também tem arquitetura…
March 17 5
... mas nem sempre ela é modular!
March 17 6
3/16/2017
4
Modularidade – por que é importante?
• Hadoop
March 17 7
Modularidade – por que é importante?
“Modularidade” real - Hadoop
March 17 8
Nenad Medvidović. When, Where, and Why Do Software Systems Architectures Decay? March 2013.
3/16/2017
5
9 /26Alessandro Garcia © LES - DI/PUC-Rio
Abstração
• O que é isso?
10 /26Alessandro Garcia © LES - DI/PUC-Rio
Abstração
• E agora?
3/16/2017
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...
March 17 12
Nenad Medvidović. When, Where, and Why Do Software Systems Architectures Decay? March 2013.
3/16/2017
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
3/16/2017
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...
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
3/16/2017
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...
3/16/2017
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
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
3/16/2017
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()
…
3/16/2017
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()
3/16/2017
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()
Exemplo
26 /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
3/16/2017
14
27 /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
28 /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
3/16/2017
15
29 /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 <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
30 /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
3/16/2017
16
31 /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
Aula 02Conceitos e Princípios de Modularidade 1
Alessandro GarciaLES/DI/PUC-Rio
Março 2017