Aula 02 Conceitos e Princípios de Modularidade 1inf1628/docs/2016_2/INF1301_Aula02... · 2016. 9....

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 1inf1628/docs/2016_2/INF1301_Aula02... · 2016. 9....

  • 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

    #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