INF1301 Aula02 Principios Modularidade 17 1 finalinf1628/docs/2017_1/Aula02... · Microsoft...

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

Transcript of INF1301 Aula02 Principios Modularidade 17 1 finalinf1628/docs/2017_1/Aula02... · Microsoft...

Page 1: INF1301 Aula02 Principios Modularidade 17 1 finalinf1628/docs/2017_1/Aula02... · Microsoft PowerPoint - INF1301_Aula02_Principios_Modularidade_17_1_final [Compatibility Mode] Author:

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

Page 2: INF1301 Aula02 Principios Modularidade 17 1 finalinf1628/docs/2017_1/Aula02... · Microsoft PowerPoint - INF1301_Aula02_Principios_Modularidade_17_1_final [Compatibility Mode] Author:

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

Page 3: INF1301 Aula02 Principios Modularidade 17 1 finalinf1628/docs/2017_1/Aula02... · Microsoft PowerPoint - INF1301_Aula02_Principios_Modularidade_17_1_final [Compatibility Mode] Author:

3/16/2017

3

Software também tem arquitetura…

March 17 5

... mas nem sempre ela é modular!

March 17 6

Page 4: INF1301 Aula02 Principios Modularidade 17 1 finalinf1628/docs/2017_1/Aula02... · Microsoft PowerPoint - INF1301_Aula02_Principios_Modularidade_17_1_final [Compatibility Mode] Author:

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.

Page 5: INF1301 Aula02 Principios Modularidade 17 1 finalinf1628/docs/2017_1/Aula02... · Microsoft PowerPoint - INF1301_Aula02_Principios_Modularidade_17_1_final [Compatibility Mode] Author:

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?

Page 6: INF1301 Aula02 Principios Modularidade 17 1 finalinf1628/docs/2017_1/Aula02... · Microsoft PowerPoint - INF1301_Aula02_Principios_Modularidade_17_1_final [Compatibility Mode] Author:

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.

Page 7: INF1301 Aula02 Principios Modularidade 17 1 finalinf1628/docs/2017_1/Aula02... · Microsoft PowerPoint - INF1301_Aula02_Principios_Modularidade_17_1_final [Compatibility Mode] Author:

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

Page 8: INF1301 Aula02 Principios Modularidade 17 1 finalinf1628/docs/2017_1/Aula02... · Microsoft PowerPoint - INF1301_Aula02_Principios_Modularidade_17_1_final [Compatibility Mode] Author:

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

Page 9: INF1301 Aula02 Principios Modularidade 17 1 finalinf1628/docs/2017_1/Aula02... · Microsoft PowerPoint - INF1301_Aula02_Principios_Modularidade_17_1_final [Compatibility Mode] Author:

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

Page 10: INF1301 Aula02 Principios Modularidade 17 1 finalinf1628/docs/2017_1/Aula02... · Microsoft PowerPoint - INF1301_Aula02_Principios_Modularidade_17_1_final [Compatibility Mode] Author:

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

Page 11: INF1301 Aula02 Principios Modularidade 17 1 finalinf1628/docs/2017_1/Aula02... · Microsoft PowerPoint - INF1301_Aula02_Principios_Modularidade_17_1_final [Compatibility Mode] Author:

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

Page 12: INF1301 Aula02 Principios Modularidade 17 1 finalinf1628/docs/2017_1/Aula02... · Microsoft PowerPoint - INF1301_Aula02_Principios_Modularidade_17_1_final [Compatibility Mode] Author:

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

Page 13: INF1301 Aula02 Principios Modularidade 17 1 finalinf1628/docs/2017_1/Aula02... · Microsoft PowerPoint - INF1301_Aula02_Principios_Modularidade_17_1_final [Compatibility Mode] Author:

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

Page 14: INF1301 Aula02 Principios Modularidade 17 1 finalinf1628/docs/2017_1/Aula02... · Microsoft PowerPoint - INF1301_Aula02_Principios_Modularidade_17_1_final [Compatibility Mode] Author:

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

Page 15: INF1301 Aula02 Principios Modularidade 17 1 finalinf1628/docs/2017_1/Aula02... · Microsoft PowerPoint - INF1301_Aula02_Principios_Modularidade_17_1_final [Compatibility Mode] Author:

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

Page 16: INF1301 Aula02 Principios Modularidade 17 1 finalinf1628/docs/2017_1/Aula02... · Microsoft PowerPoint - INF1301_Aula02_Principios_Modularidade_17_1_final [Compatibility Mode] Author:

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