Modularização: funções e procedimentos

Slides:



Advertisements
Apresentações semelhantes
Programação II Licenciatura de Ciências da Computação Padoca Calado
Advertisements

Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 11 Criado por Frederick H. Colclough, Colorado Technical University Compilação Separada.
Funções em C Prof. Fabiano Utiyama.
Python: Funções Claudio Esperança.
Programação em Java Prof. Maurício Braga
1.3.2 – Linguagem Assembly Um programa em linguagem de máquina sofre de total falta de clareza O programa é uma sequência de linhas numeradas Cada linha.
Um programa em C Bibliotecas Variáveis globais
Capítulo II – Algoritmos e Programas
Estruturas de Repetição
Paulo Marques Hernâni Pedroso
Recursividade Função recursiva é aquela que chama a si própria.
Métodos, Parâmetros, Argumentos e Contratos
Manuseamento de strings
Recursividade Prof. Rosana Palazon.
Aula 4 – Sumário Linguagem assembly do MAC-1 A pilha
Recursividade Prof. Alex F. V. Machado
Algoritmos e Estrutura de Dados I
Conteúdo: - Modularização.
PROGRAMAÇÃO MODULAR (com uso de subprogramas) prof
Templates Traduzido de:
2002 LCG/UFRJ. All rights reserved. 1 Tópicos em C++ Claudio Esperança Paulo Roma Cavalcanti.
Recursividade Conceitos e Aplicações.
PROGRAMAÇÃO MODULAR (com uso de subprogramas)
Linguagem C LPG – I - FUNÇÕES Prof. Flavio Marcello
OBS: Este ppt não é o definitivo (Versão Beta)
Curso de Programação em C++
Linguagem C Funções.
Vetores, Matrizes e Funções
Estruturas de Dados Homogêneas Unidimensionais – Vetores e Strings
Matrizes clássicas e vectores em C++
Aula 11 Tipos Abstractos de Dados II. 2003/2004 Introdução à Programação 2 Estrutura global do programa #include using namespace std; int mdc(int const.
Aula 10 Tipos Abstractos de Dados I. 2003/2004 Introdução à Programação 2 Flashback Lembram-se da Aula 4?
Modularização: funções e procedimentos (continuação)
Programação Orientada para Objectos
Revisão da Linguagem C.
Classes e objetos P. O. O. Prof. Grace.
Algoritmos e Programação
Iniciação à linguagem C++
CRIANDO OBJETOS EM JAVA
Sub-programas. Mecanismo de composição de programas Sub-programa está para peça de LEGO assim como um programa está para a construção.
Introdução à Programação
1 Funções (versão C) Funções são pedaços de código encapsulados para fácil acesso. Em C e C++ o processo de construção de uma função passa por 2 etapas.
Informática e Computação Estrutura de Repetição aula 13
PROGRAMAÇÃO ESTRUTURADA II
PROGRAMAÇÃO ESTRUTURADA II
Programação II Estruturas de Dados Aula 02 - continuação
Seminário 1: Revisão de C
Estruturas de Dados Módulo 3 – Controle de Fluxo
PROGRAMAÇÃO ESTRUTURADA (MODULARIZAÇÃO/SUBPROGRAMAÇÃO)
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Técnicas de Desenvolvimento de Programas
Algoritmos - Profa. Alciléia1 Profa. Maria Alciléia Alves Rocha Funções em C 2011.
UTFPR – Campus Curitiba - DAELN Cursos de Eng. Eletrônica/Eng
Estruturas de Dados Aula 8: Tipos Abstratos de Dados 30/04/2014.
FACULDADE DE CIÊNCIAS SOCIAIS E TECNOLÓGICAS Tecnologia em Redes de Computadores Algoritmos e linguagens de programação 1 (aula 07) Prof. Alessandro Bernardo.
Introdução à Linguagem C
Declarando e Chamando Funções
 São utilizadas para dividir um código maior (mais complexo) em partes menores (mais simples).  Quando uma mesma tarefa é realizada várias vezes em um.
CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo IX Subprogramação e Recursividade.
CONHECER MELHOR OS NÚMEROS
Aula Prática 3 Funções Monitoria Introdução à Programação.
Aula Prática 5 Monitoria IP/CC (~if669). Roteiro 1. 1.Recursão 2. 2.Escopo de Variáveis 3. 3.Arrays 4. 4.Strings.
Recursividade Profs. De Prog2 e Lab2.
Aula 4 – Sumário Linguagem assembly do MAC-1: Funções e procedimentos
Linguaguem de Programação II
Linguagem de Programação
USP – ICMC – SSC SSC0300 2º Semestre 2015 Disciplina de Linguagem de Programação e Aplicações [ Eng. Elétrica / Eletrônica ] 1 Prof. Dr. Daniel Rodrigo.
Módulo I Capítulo 7: Funções e Procedimentos William Ivanski Curso de Programação C#
Tipo Abstrato de Dados (TAD) Estrutura de Dados Professor: Rodrigo Alves Sarmento Professor: André Cypriano.
Estrutura de Dados Prof. André Cypriano M. Costa
Transcrição da apresentação:

Modularização: funções e procedimentos Aula 3 Modularização: funções e procedimentos

Modularizar Arte de identificar claramente que módulos devem existir num sistema Sistema Modular Sistema Integrado

Vantagens da modularização Facilita detecção de erros: Simples identificar módulo responsável Reduz tempo gasto na identificação Permite testar módulos individualmente: Reduz complexidade do teste Permite testar antes de completado o sistema Permite fazer manutenção do sistema módulo a módulo: Reduz probabilidade de haver consequências imprevistas Permite desenvolvimento independente dos módulos: Simplifica trabalho em equipa Permite reutilização dos módulos desenvolvidos

Boa modularização Módulos têm função única e bem definida Módulos são coesos Componentes internos com fortes ligações entre si Existem poucas ligações entre os componentes internos? Talvez se deva dividir o módulo… Ligações entre módulos mínimas: Existem muitas ligações entre os módulos? Talvez devam formar um único módulo…

Abstracção In this connection it might be worthwhile to point out that the purpose of abstraction is not to be vague, but to create a new semantic level in which one can be absolutely precise. Edsger W. Dijkstra, “The Humble Programmer”, Communications of the ACM, 15(10), 1972.

Abstracção Utilização de sistema olhando apenas para o seu funcionamento externo Limita quantidade de informação com que lidar Maior produtividade Menor taxa de erros

Encapsulamento Única parte visível é a interface Mecanismo interno dos módulos encerrado numa cápsula (caixa preta) Protege consumidor dos seus erros Facilita abstracção

Papeis do programador Programador assume papeis distintos: Produtor Desenvolve mecanismo do módulo Preocupa-se com: o que faz como se usa como funciona Consumidor Integra cada módulo em sistema complexo

Contrato Entre produtor e consumidor Indica como se usa Produtor garante resultados… …se consumidor respeitar condições de utilização

Módulos em C++ Rotinas Funções Conjunto de instruções, com interface bem definida, que efectua um dado cálculo Procedimentos Conjunto de instruções, com interface bem definida, que faz qualquer coisa

Resolução de problemas

Abordagem descendente (top down) Análise global do problema Identificação de sub-problemas Resolução independentemente de cada sub-problema usando a mesma abordagem Problemas e sub-problemas correspondem a rotinas Vantagens Diminuição da informação a processar pelo programador em cada instante Redução da complexidade dos problemas até à trivialidade

Problema Escrever programa para somar duas fracções positivas fornecidas pelo utilizador e mostrar resultado no ecrã na forma de uma fracção irredutível 6/9 + 7/3 = 3/1

Sub-problemas Ler fracções Calcular fracção soma reduzida Escrever resultado

Em C++ #include <iostream> using namespace std; int main() { // Ler fracções: ... // Calcular fracção soma reduzida: // Escrever resultado: }

Ler fracções // Ler fracções: cout << "Introduza duas fracções (numerador denominador): "; int n1, d1, n2, d2; cin >> n1 >> d1 >> n2 >> d2;

Escrever resultado // Escrever resultado: cout << "A soma de "; escreveFracção(n1, d1); cout << " com "; escreveFracção(n2, d2); cout << " é "; escreveFracção(?, ?); cout << '.' << endl;

Calcular fracção soma reduzida int n; int d;

Calcular fracção soma reduzida int n = d2 * n1 + d1 * n2; int d = d1 * d2;

Calcular fracção soma reduzida int n = d2 * n1 + d1 * n2; int d = d1 * d2; int k = mdc(n, d); n /= k; d /= k;

Ler fracções // Ler fracções: cout << "Introduza duas fracções (numerador denominador): "; int n1, d1, n2, d2; cin >> n1 >> d1 >> n2 >> d2; int k = mdc(n1, d1); n1 /= k; d1 /= k; int k = mdc(n2, d2); n2 /= k; d2 /= k;

Ler fracções // Ler fracções: cout << "Introduza duas fracções (numerador denominador): "; int n1, d1, n2, d2; cin >> n1 >> d1 >> n2 >> d2; int k = mdc(n1, d1); n1 /= k; d1 /= k; int k = mdc(n2, d2); n2 /= k; d2 /= k;

Calcular fracção soma reduzida int n = d2 * n1 + d1 * n2; int d = d1 * d2; int k = mdc(n, d); n /= k; d /= k;

Máximo divisor comum (I) int m; // Inicializadas int n; // automagicamente! int r; if(m < n) r = m; else r = n; while(m % r != 0 or n % r != 0) --r; m : int n : int k : int

Máximo divisor comum (II) int const m; // Inicializadas int const n; // automagicamente! int r; if(m < n) r = m; else r = n; while(m % r != 0 or n % r != 0) --r; m : int {frozen} n : int {frozen} k : int

Máximo divisor comum (III) { int const m; // Inicializadas int const n; // automagicamente! int r; if(m < n) r = m; else r = n; while(m % r != 0 or n % r != 0) --r; } Encapsular código numa caixa

Máximo divisor comum (IV) mdc { int const m; // Inicializadas int const n; // automagicamente! int r; if(m < n) r = m; else r = n; while(m % r != 0 or n % r != 0) --r; } Nome do módulo

Máximo divisor comum (V) mdc(int const m, int const n) { int r; if(m < n) r = m; else r = n; while(m % r != 0 or n % r != 0) --r; } Parâmetros: variáveis ou constantes especiais de entrada

Máximo divisor comum (VI) mdc(int const m, int const n) { int r; if(m < n) r = m; else r = n; while(m % r != 0 or n % r != 0) --r; return r; } Retorno e devolução: regressa ao ponto onde foi invocada e devolve valor guardado em r

Máximo divisor comum (VII) int mdc(int const m, int const n) { int r; if(m < n) r = m; else r = n; while(m % r != 0 or n % r != 0) --r; return r; } Devolução de valor com tipo int

Máximo divisor comum (VIII) Documentação: o que faz /** Devolve o máximo divisor comum dos inteiros positivos passados como argumento. @pre 0 < m e 0 < n. @post o valor r devolvido é o mdc de m e n. */ int mdc(int const m, int const n) { int r; if(m < n) r = m; else r = n; while(m % r != 0 or n % r != 0) --r; return r; } Cabeçalho: como se usa Corpo: como funciona

Máximo divisor comum (IX) /** Devolve o máximo divisor comum dos inteiros positivos passados como argumento. @pre 0 < m e 0 < n. @post o valor r devolvido é o mdc de m e n. */ int mdc(int const m, int const n) { assert(0 < m); assert(0 < n); int r; if(m < n) r = m; else r = n; while(m % r != 0 or n % r != 0) --r; assert(0 < r); assert(m % r == 0); assert(n % r == 0); return r; } Instruções de asserção (afirmação)

Escreve fracção Um procedimento não devolve nada: faz qualquer coisa /** Escreve no ecrã uma fracção, no formato usual, que lhe é passada na forma de dois argumentos inteiros positivos. @pre nenhuma. @post o ecrã contém n/d em que n e d são os valores de n e d em base decimal. */ void escreveFracção(int const n, int const d) { } Um procedimento não devolve nada: faz qualquer coisa

Escreve fracção /** Escreve no ecrã uma fracção, no formato usual, que lhe é passada na forma de dois argumentos inteiros positivos. @pre nenhuma. @post o ecrã contém n/d em que n e d são os valores de n e d em base decimal. */ void escreveFracção(int const n, int const d) { cout << n << ‘/’ << d; }

Somador de fracções #include <iostream> using namespace std; /** … */ int mdc(int const m, int const n) { ... } void escreveFracção(int const n, int const d) int main()

Aula 3: Sumário Modularização, abstracção e encapsulamento. Rotinas como unidades atómicas de modularização. Abordagem descendente. Sintaxe da definição de rotinas: cabeçalho vs. corpo. Interface e implementação. Contratos: pré-condições e condições objectivo. Instruções de asserção e programação por contrato. Parâmetros e argumentos. Instrução return. Retorno e devolução. Procedimentos: não há devolução (tipo de devolução void). Invocação de rotinas.