Aula 02 Conceitos e Princípios de Modularidade...

19
9/5/2016 1 Aula 02 Conceitos e Princípios de Modularidade 1 Alessandro Garcia LES/DI/PUC-Rio Agosto 2016 Mar 2009 2 / 18 Alessandro 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

Transcript of Aula 02 Conceitos e Princípios de Modularidade...

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 <string.h>

#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