Aula 02 Conceitos e Princípios de Modularidade 1

Documentos relacionados
Aula 10 Arquitetura de Software e Exercício. Alessandro Garcia LES/DI/PUC-Rio Abril de 2017

IDES E PROGRAMAÇÃO. Prof. Dr. Cláudio Fabiano Motta Toledo PAE: Maurício A Dias

Aula 8 Especificação de Requisitos

Programação Modular. Alessandro Garcia. DI/PUC-Rio Agosto 2016

Programação Orientada a Objetos

Aula 9 Especificação de Requisitos Exercício

A c c e s s B á s i c o

COMPILAÇÃO. Ricardo José Cabeça de Souza

Universidade Federal de Goiás Bacharelado em Ciências da Computacão Compiladores

Plano de Aula - Lógica de Programação - cód Horas/Aula

Aula 3 Primeiros programas

Aula 06 Introdução à Teste de Módulos II e Exercícios. Alessandro Garcia LES/DI/PUC-Rio Março 2014

Orientação a Objetos Parte I. Introdução a POO (Programação Orientada a Objetos)

Trabalho Prático. Descrição Considere os seguintes dados a respeito de uma pessoa:

Introdução ao Python. Programa Computacional

Estruturas de Dados Aula 1: Introdução e conceitos básicos 28/02/2011

Laboratório de Engenharia de Software I

Curso de C. Introdução by Arnaldo V. Moura e Daniel F. Ferber 3/10/ :43 AM

AULA 03: FUNCIONAMENTO DE UM COMPUTADOR

BCC202 - Estrutura de Dados I

Universidade Estadual de Mato Grosso do Sul Ciência da Computação Algoritmos e Estruturas de Dados I (AED-I) Prof. Nilton

Arquitetura de Software: Documentação

Visões Arquiteturais. Visões Arquiteturais. Visões Arquiteturais. Visão Conceitual

Unidade II MODELAGEM DE PROCESSOS. Profa. Gislaine Stachissini

Disciplina de Lógica e Linguagem de Programação Desenvolvido pelo professor Danilo Giacobo Ferramenta Code::Blocks

Anhanguera Educacional S.A. Centro Universitário Ibero-Americano

Introdução à Linguagem C

Aula 05 Instalação e Uso do Arcabouço. Alessandro Garcia Alexander Chávez LES/DI/PUC-Rio Março 2016

Algoritmos Computacionais

Computação Embarcada - Projeto

1. Selecione a Estrutura de Dados que melhor representa os diretórios ou pastas de arquivos do computador.

Introdução. descrever os tipos de interfaces e linguagens oferecidas por um SGBD. mostrar o ambiente de programas dos SGBD s

Introdução à Computação: Máquinas Multiníveis

Capítulo 6: Arquivos

IFSC/Florianópolis - Programação Orientada a Objetos com Java - prof. Herval Daminelli

Princípios da Engenharia de Software aula 03

Linguagem de Programação C

Programação em Linguagem C

2.1 NesC Seguem alguns dos principais desafios impostos à linguagem NesC:

Análise e Projeto Orientados a Objetos: Visibilidade Diagrama de Classe de Projeto

3. Linguagem de Programação C

Métodos Computacionais

Algoritmia e Programação APROG. Tecnologia JAVA. IDE Netbeans. Nelson Freire (ISEP DEI-APROG 2012/13) 1/31

Programação Básica. Estrutura de um algoritmo

Introdução a UML (Unified Modeling Language)

Linguagem C Ficheiros Compilação Separada

Algoritmos e Programação

Elementos de Linguagem C

Linguagem C Princípios Básicos (parte 1)

A modelagem é tida como a parte central de todas as atividades para a construção de um bom sistema, com ela podemos:

Universidade Federal de Uberlândia Faculdade de Computação. Linguagem C: funções

Acadêmica: Giselle Mafra Schlosser Orientador: Everaldo Artur Grahl

Linguagens de Programação Aula 11

Classes e Objetos. Sintaxe de classe em Java

Conhecendo e editando o seu perfil

void push(int i){ if (num<max) vet[num++]=i; else { printf(">>> Erro: overflow na pilha!!!\n"); printf("%d nao foi empilhado!!!

Computadores e Programação (DCC/UFRJ)

Paradigmas de Linguagens de Programação. Suporte para Programação Orientada a Objeto

TCC 00308: Programação de Computadores I Organização de programas em Python

#include <stdio.h> Void main() { printf( Cheguei!\n"); } INTRODUÇÃO A LINGUAGEM C

Levantamento, Análise e Gestão Requisitos. Aula 03

PROJETO DE PROGRAMAS. Projeto de Programas PPR0001

Objetivos. Responder o que é Java; Mostrar as vantagens e desvantagens do Java; Compilar e executar um programa simples.

Capítulo 1. Aspectos Preliminares

INTRODUÇÃO AO ARDUINO DUE, CANAL DIGITAL, FUNÇÃO DELAY

Estrutura de Dados Básica

Análise e projeto de sistemas

Indexação e Busca. O objetivo deste trabalho é projetar e implementar um sistema de programas para indexação e busca em arquivos de texto.

AULA 02. OBJETIVO: Características da Linguagem Orientada a Objetos.

DELPHI Curso Extensão. walter Prof. Walter Gima

Linguagens de Domínio Específico

RUP RATIONAL UNIFIED PROCESS PRÁTICAS RECOMENDADAS. Prof. Fabiano Papaiz IFRN

Linguagem C: diretivas, compilação separada. Prof. Críston Algoritmos e Programação

Programação Orientada a Objetos (utilizando C#) Professor Emiliano S. Monteiro Versão 20 Jan/2017.

Linguagens de Programação

Linguagem de Programação

CAP. IX - MANIPULAÇÃO DE ARQUIVOS Generalidades sobre Arquivos. 9.2 Abertura e Fechamento de Arquivos. Operações com arquivos:

MODELAGEM DE SISTEMAS Unidade 4 Modelo de Classes de Projeto. Luiz Leão

Ambiente de desenvolvimento

Transcrição:

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

Software também tem arquitetura September 3... mas nem sempre ela é modular! September 4 2

Modularidade por que é importante? Hadoop September 5 Modularidade por que é importante? Modularidade real - Hadoop Nenad Medvidović. When, Where, and Why Do Software Systems Architectures Decay? March 2013. September 6 3

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. 7 /26 Sumário Abstração Níveis de abstração Interfaces conceituação relacionamento cliente-servidor interfaces providas e requeridas Módulo 8 /26 4

Abstração O que é isso? 9 /26 Abstração E agora? 10 /26 5

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 11 /26 Um dos problemas... Excesso de detalhes expostos por cada abstração do sistema... Nenad Medvidović. When, Where, and Why Do Software Systems Architectures Decay? March 2013. September 12 6

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

Níveis de abstração de um sistema alto Sistema Arquivos, bases de dados, mensagens, plataforma Programa Módulos de definição API - Aplication program interface Componente Módulos de definição header files Níveis de abstração Interface típica Módulo Classe Elementos públicos (e protected) Parâmetros generalizados certos níveis de abstração nem sempre são utilizados baixo concreto Função Bloco Escopo visível Linha de código Escopo visível 15 /26 Primeiro Princípio de Programação Modular... 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 Mar 2009 Alessandro Garcia LES/PUC-Rio 16 / 18 8

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... 17 /26 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 dados abrir arquivo criar lista, inserir elemento, etc... 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... 18 /26 9

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 */ 19 /26 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 20 /26 10

Composição de módulos: interfaces providas e requeridas Módulo 1 cliente servidor Módulo 2 Módulo 3 Interface requerida Interface provida ou Interface externada Módulo 4 Módulo 5 Módulo 6 Interface(s) requerida (incluída) 21 /26 Exemplo Módulo Lista Quais seriam possíveis funções públicas: interface provida? Interface Provida? Ago 2009 22 /26 11

Exemplo Módulo Lista Quais seriam possíveis funções públicas: interface provida? CriarLista() InserirElemento(id, elem) BuscarElemento(id) RemoverElemento(id) DestruirLista() Ago 2009 23 /26 Exemplo Módulo Lista CriarLista() InserirElemento(id, elem) BuscarElemento(id) RemoverElemento(id) DestruirLista() struct Elem struct Cabeça Arquivar() DestruirNo() Interface Provida Dados e funções não providas Ago 2009 24 /26 12

Exemplo Módulo Tabuleiro CriarTabuleiro() DestruirTabuleiro() Módulo PeçasExcluídas CriarPeças Excluidas() CriarLista() Módulo Lista InserirElemento(id, elem) BuscarElemento(id) RemoverElemento(id) DestruirLista() struct Elem struct Cabeça Arquivar() DestruirNo() IncluirPeça Excluida() Interface Provida Dados e funções não providas Ago 2009 25 /26 Exemplo Módulo Tabuleiro CriarTabuleiro() DestruirTabuleiro() Módulo PeçasExcluídas CriarPeças Excluidas() CriarLista() Módulo Lista InserirElemento(id, elem) BuscarElemento(id) RemoverElemento(id) DestruirLista() struct Elem struct Cabeça Arquivar() DestruirNo() IncluirPeça Excluida() Interface Provida Dados e funções não providas Ago 2009 26 /26 13

Exemplo Módulo Tabuleiro CriarTabuleiro() DestruirTabuleiro() Módulo PeçasExcluídas CriarPeças Excluidas() CriarLista() Módulo Lista InserirElemento(id, elem) BuscarElemento(id) RemoverElemento(id) DestruirLista() struct Elem struct Cabeça Arquivar() DestruirNo() IncluirPeça Excluida() Interfaces Requeridas Interface Provida Dados e funções não providas Ago 2009 27 /26 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 Alessandro Garcia LES/DI/PUC-Rio 28 /32 14

Composição interna de um módulo arquivo header arquivo *.c file Módulo de Definição Tipo Externado 1 Módulo de Implementação interface encapsulada Função Interna 1 Função Interna 2 Tipo Interno 1 Dado Externado 1 interface provida Função Externada 1 Função Classe Externada12 lista de includes Módulo X Tipo Externado Classe YX interface requerida Módulo A Dado D Função F 2 Dado Interno 1 Módulo B Arquivo Janela Metafile Alessandro Garcia LES/DI/PUC-Rio in Arquivos a 29 /32 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 fonte necessários para que possa ser compilado com sucesso Exemplo Items de interface requerida pelo módulo TestArv O módulo físico de teste específico TestArv.c é composto por: Interface da biblioteca de C #include <string.h> #include "generico.h" #include "lerparm.h" #include "tst_espc.h" #include "arvore.h" além de TestArv.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 Alessandro Garcia LES/DI/PUC-Rio 30 /32 15

Exemplo de Módulo em C 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 31 /26 Exemplo de Módulo em C 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 32 /26 16

Exemplo de Módulo em C Discutindo Estrutura do arquivo ARVORE.h Estrutura do arquivo ARVORE.c 33 /26 Investindo em modularidade... Por que separar interface da implementação de módulos? Ago 2009 34 /26 17

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 Alessandro Garcia LES/DI/PUC-Rio 35 /32 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 Mar 2009 Alessandro Garcia LES/DI/PUC-Rio 36 /32 18

Aula 02 Conceitos e Princípios de Modularidade 1 Alessandro Garcia LES/DI/PUC-Rio Agosto 2016 19