INF1301 Aula02 Principios Modularidade 19 1 ...inf1301/docs/2019_1/aula_2.pdf · 2 txh p xpd...

16
18-Mar-19 1 Aula 02 Conceitos e Princípios de Modularidade 1 Alessandro Garcia LES/DI/PUC-Rio Março 2019 2 / 18 Alessandro 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-meAba “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

Transcript of INF1301 Aula02 Principios Modularidade 19 1 ...inf1301/docs/2019_1/aula_2.pdf · 2 txh p xpd...

Page 1: INF1301 Aula02 Principios Modularidade 19 1 ...inf1301/docs/2019_1/aula_2.pdf · 2 txh p xpd lqwhuidfh" ,qwhuidfhv vmr rv hohphqwrv dv frlvdv dwudypv gdv txdlv rv pygxorv rx ixqo}hv

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

Page 2: INF1301 Aula02 Principios Modularidade 19 1 ...inf1301/docs/2019_1/aula_2.pdf · 2 txh p xpd lqwhuidfh" ,qwhuidfhv vmr rv hohphqwrv dv frlvdv dwudypv gdv txdlv rv pygxorv rx ixqo}hv

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

Page 3: INF1301 Aula02 Principios Modularidade 19 1 ...inf1301/docs/2019_1/aula_2.pdf · 2 txh p xpd lqwhuidfh" ,qwhuidfhv vmr rv hohphqwrv dv frlvdv dwudypv gdv txdlv rv pygxorv rx ixqo}hv

18-Mar-19

3

Software também tem arquitetura…

March 19 5

... mas nem sempre ela é modular!

March 19 6

Page 4: INF1301 Aula02 Principios Modularidade 19 1 ...inf1301/docs/2019_1/aula_2.pdf · 2 txh p xpd lqwhuidfh" ,qwhuidfhv vmr rv hohphqwrv dv frlvdv dwudypv gdv txdlv rv pygxorv rx ixqo}hv

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.

Page 5: INF1301 Aula02 Principios Modularidade 19 1 ...inf1301/docs/2019_1/aula_2.pdf · 2 txh p xpd lqwhuidfh" ,qwhuidfhv vmr rv hohphqwrv dv frlvdv dwudypv gdv txdlv rv pygxorv rx ixqo}hv

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?

Page 6: INF1301 Aula02 Principios Modularidade 19 1 ...inf1301/docs/2019_1/aula_2.pdf · 2 txh p xpd lqwhuidfh" ,qwhuidfhv vmr rv hohphqwrv dv frlvdv dwudypv gdv txdlv rv pygxorv rx ixqo}hv

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

Page 7: INF1301 Aula02 Principios Modularidade 19 1 ...inf1301/docs/2019_1/aula_2.pdf · 2 txh p xpd lqwhuidfh" ,qwhuidfhv vmr rv hohphqwrv dv frlvdv dwudypv gdv txdlv rv pygxorv rx ixqo}hv

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

Page 8: INF1301 Aula02 Principios Modularidade 19 1 ...inf1301/docs/2019_1/aula_2.pdf · 2 txh p xpd lqwhuidfh" ,qwhuidfhv vmr rv hohphqwrv dv frlvdv dwudypv gdv txdlv rv pygxorv rx ixqo}hv

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.

Page 9: INF1301 Aula02 Principios Modularidade 19 1 ...inf1301/docs/2019_1/aula_2.pdf · 2 txh p xpd lqwhuidfh" ,qwhuidfhv vmr rv hohphqwrv dv frlvdv dwudypv gdv txdlv rv pygxorv rx ixqo}hv

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 */

Page 10: INF1301 Aula02 Principios Modularidade 19 1 ...inf1301/docs/2019_1/aula_2.pdf · 2 txh p xpd lqwhuidfh" ,qwhuidfhv vmr rv hohphqwrv dv frlvdv dwudypv gdv txdlv rv pygxorv rx ixqo}hv

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

Page 11: INF1301 Aula02 Principios Modularidade 19 1 ...inf1301/docs/2019_1/aula_2.pdf · 2 txh p xpd lqwhuidfh" ,qwhuidfhv vmr rv hohphqwrv dv frlvdv dwudypv gdv txdlv rv pygxorv rx ixqo}hv

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()

Page 12: INF1301 Aula02 Principios Modularidade 19 1 ...inf1301/docs/2019_1/aula_2.pdf · 2 txh p xpd lqwhuidfh" ,qwhuidfhv vmr rv hohphqwrv dv frlvdv dwudypv gdv txdlv rv pygxorv rx ixqo}hv

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()

Page 13: INF1301 Aula02 Principios Modularidade 19 1 ...inf1301/docs/2019_1/aula_2.pdf · 2 txh p xpd lqwhuidfh" ,qwhuidfhv vmr rv hohphqwrv dv frlvdv dwudypv gdv txdlv rv pygxorv rx ixqo}hv

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

Page 14: INF1301 Aula02 Principios Modularidade 19 1 ...inf1301/docs/2019_1/aula_2.pdf · 2 txh p xpd lqwhuidfh" ,qwhuidfhv vmr rv hohphqwrv dv frlvdv dwudypv gdv txdlv rv pygxorv rx ixqo}hv

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

Page 15: INF1301 Aula02 Principios Modularidade 19 1 ...inf1301/docs/2019_1/aula_2.pdf · 2 txh p xpd lqwhuidfh" ,qwhuidfhv vmr rv hohphqwrv dv frlvdv dwudypv gdv txdlv rv pygxorv rx ixqo}hv

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

Page 16: INF1301 Aula02 Principios Modularidade 19 1 ...inf1301/docs/2019_1/aula_2.pdf · 2 txh p xpd lqwhuidfh" ,qwhuidfhv vmr rv hohphqwrv dv frlvdv dwudypv gdv txdlv rv pygxorv rx ixqo}hv

18-Mar-19

16

Aula 02Conceitos e Princípios de Modularidade 1

Alessandro GarciaLES/DI/PUC-Rio

Março 2019