Programação Estruturada 2 - Aula 02

562 visualizações

Publicada em

Aula 02 – Modularização e Funções

Publicada em: Tecnologia
0 comentários
2 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
562
No SlideShare
0
A partir de incorporações
0
Número de incorporações
33
Ações
Compartilhamentos
0
Downloads
21
Comentários
0
Gostaram
2
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Programação Estruturada 2 - Aula 02

  1. 1. Programação Estruturada II Aula 02 – Modularização e Funções Prof. Thomás da Costa thomasdacosta@gmail.com Anhanguera – 2015.1
  2. 2. Modularização e Funções MODULARIZAÇÃO E FUNÇÕES Prof. Thomás da Costa Programação Estruturada II
  3. 3. Modularização e Funções O que é Modularização: É o processo de decompor um programa em partes menores, facilitando a manutenção e o entendimento pelos desenvolvedores. Com isso podemos ter rotinas reutilizáveis para outros programas e aplicações. Além disso, conseguimos efetuar atividades paralelas na construção do código-fonte, na qual mais de um desenvolvedor pode atuar no trabalho. Modularização e Funções Prof. Thomás da Costa Programação Estruturada II
  4. 4. Modularização e Funções Veja o exemplo abaixo: Um carro é composto por vários componentes (portas, rodas, motor e etc). Esses componentes tornam o carro modular. Modularização e Funções Cada parte tem uma finalidade, todas juntas formam o carro. Caso uma peça tenha problema, fazemos o ajuste neste local sem afetar o restante do carro. Prof. Thomás da Costa Programação Estruturada II
  5. 5. Modularização e Funções Benefícios da Modularização em um programa: - Componentes menores formam um programa - Programa fica mais legível para compreensão - Facilidade na manutenção da aplicação - Funcionalidade pode ser reutilizada em outros programas - Previne duplicação de código e retrabalho Modularização e Funções Prof. Thomás da Costa Programação Estruturada II
  6. 6. Modularização e Funções Modularização em C/C++: Em C++ a modularização é feita a partir de blocos de funcionalidades, denominado funções. Modularização e Funções Prof. Thomás da Costa Programação Estruturada II
  7. 7. Modularização e Funções O que é: São rotinas que tem como objetivo, executar trechos de códigos de forma modular, melhorando a organização do programa e evitando repetição de código. As funções são reutilizáveis dentro de um programa. Funções Prof. Thomás da Costa Programação Estruturada II
  8. 8. CALCULADORA Modularização e Funções Funções Para pensar: Em uma calculadora quais são as suas 4 principais operações? SOMA MULTIPLICAÇÃO DIVISÃO SUBTRAÇÃO Conseguimos definir as 4 principais operações da calculadora. No desenvolvimento do código da calculadora vamos precisar criar as 4 funções de acordo com as operações definidas.
  9. 9. Modularização e Funções Funções Como criar funções: - Análise quais tarefas o programa vai executar - Identifique ações - Ações são verbos como inserir, alterar, excluir e etc. - A partir das ações temos as funções Mais um exemplo: Quais as funções da lista de contatos de um celular? - Inserir um Contato - Alterar um Contato - Excluir um Contato - Discar para um Contato Prof. Thomás da Costa Programação Estruturada II
  10. 10. Modularização e Funções Funções Estrutura de uma função: Retorno da função Nome da função Parâmetros da função Corpo da função Escopo de início e fim da função double somar(double x, double y) { double resultado = x + y; return resultado; } Prof. Thomás da Costa Programação Estruturada II
  11. 11. Modularização e Funções Funções Estrutura de uma função: - Tipos de retorno da função - double, float, int, char, void, vetores e outros tipos - Parâmetros da função - Cada parâmetro é composto pelo tipo, nome e separados por virgulas - Retorno da função - Quando uma função deve retornar um valor, devemos usar a palavra reservada return seguido de um valor, variável ou operação do mesmo tipo de retorno - Corpo da função - Código fonte com a funcionalidade que a função deve executar - Protótipo - As funções possuem protótipos para definir sua estrutura Prof. Thomás da Costa Programação Estruturada II
  12. 12. Modularização e Funções Funções Como Utilizar em C++: As quatro funções da calculadora Protótipo das funções #include <iostream> using namespace std; double somar(double x, double y); double subtrair(double x, double y); double multiplicar(double x, double y); double dividir(double x, double y); int main() { double x, y; cout << "Digite os valores para somar:n"; cin >> x >> y; cout << somar(x, y); cout << "Digite os valores para subtrair:n"; cin >> x >> y; cout << subtrair(x, y); cout << "Digite os valores para multiplicar:n"; cin >> x >> y; cout << multiplicar(x, y); cout << "Digite os valores para dividir:n"; cin >> x >> y; cout << dividir(x, y); } Chamando uma função double somar(double x, double y) { double resultado = x + y; return resultado; } double subtrair(double x, double y) { double resultado = x - y; return resultado; } double multiplicar(double x, double y) { double resultado = x * y; return resultado; } double dividir(double x, double y) { double resultado = x / y; return resultado; } Prof. Thomás da Costa Programação Estruturada II
  13. 13. Modularização e Funções Funções Chamando uma função: Chamando a função “somar” passando os parâmetros 10 e 15 Retornando o valor para a variável “valor” Protótipo da função #include <iostream> using namespace std; double somar(double x, double y); int main() { double valor; valor = somar(10,15); } ... Prof. Thomás da Costa Programação Estruturada II
  14. 14. Modularização e Funções Funções Chamando uma função: - Para executar uma função, devemos colocar o nome da função seguido dos parâmetros - Nos parâmetros podemos passar um valor especifico ou uma variável - Devemos respeitar o tipo passado nos parâmetros das funções. Ex: se o parâmetro for int, devemos passar um tipo int. Se for passado o tipo incorreto no parâmetro, o programa não compila. - Caso a função retorne algum valor, podemos atribuir diretamente a uma variável - Quando uma função não tem parâmetros, abrimos e fechamos parênteses - void faz a função retornar nenhum valor Prof. Thomás da Costa Programação Estruturada II
  15. 15. Modularização e Funções Funções Retorno da função: Quando o tipo de retorno da função é diferente do tipo void, a função devolve algum valor para alguma variável. Para efetuar este tipo de operação utilizamos a palavra reservada return seguido de um valor ou uma variável. Retorno da função Retorno da função na variável “resultado” #include <iostream> using namespace std; int par_ou_impar(int numero); int main() { int numero, resultado; cout << "Digite um número:n"; cin >> numero; resultado = par_ou_impar(numero); if (resultado == 0) cout << "Par"; else cout << "Impar"; } int par_ou_impar(int numero) { int valor = numero % 2; return valor; } Prof. Thomás da Costa Programação Estruturada II
  16. 16. Modularização e Funções Funções Tipo void: A palavra reservada void não efetua nenhum retorno para a função. Retorno da função do tipo void Função não retorna um valor #include <iostream> using namespace std; void imprime_idade(int idade); int main() { int idade; cout << "Digite a sua idade:n"; cin >> idade; imprime_idade(idade); } void imprime_idade(int idade) { cout << "Sua idade é: " << idade; } Prof. Thomás da Costa Programação Estruturada II
  17. 17. Modularização e Funções Funções Usando return em uma função void: O return em uma função void, interrompe a execução do código. #include <iostream> using namespace std; void dividir(int x, int y); int main() { int x, y; cout << "Digite os valores para dividir:n"; cin >> x >> y; dividir(x, y); } void dividir(int x, int y) { if (y == 0) { cout << "Não dividirás por zero"; return; } cout << "Valor da Divisão:" << x / y; } Não existe divisão por zero Terminando a execução da função com return Este código não vai ser executado Prof. Thomás da Costa Programação Estruturada II
  18. 18. Modularização e Funções Resumo: - Possuem um nome - Podem possuir um retorno ou não - Tem parâmetros com tipo e nome, separados por virgulas - A função tem um corpo, aonde é definido e escrito oque a função vai executar - Tem um protótipo para definir a função - São reutilizáveis - Ajuda a deixar o código mais simples - Funções quando usadas corretamente deixa muito mais fácil o entendimento do programa - Organização do código - Retornam valores com a palavra reservada return - void é tipo que não retorna valor na função Funções Prof. Thomás da Costa Programação Estruturada II
  19. 19. Modularização e Funções Prof. Thomás da Costa Programação Estruturada II
  20. 20. Modularização e Funções Exemplo – Imprime na tela: Funções #include <iostream> using namespace std; void imprimir(); int main() { imprimir(); } void imprimir() { char valor[10]; cout << "Digite algo:n"; gets(valor); cout << valor; } Prof. Thomás da Costa Programação Estruturada II
  21. 21. Modularização e Funções Exemplo – Quadrado: Funções #include <iostream> using namespace std; int quadrado(int x); int main() { int x; cout << "Digite um numero:n"; cin >> x; cout << "Quadrado de " << x << " é " << quadrado(x); } int quadrado(int x) { return x * x; } Prof. Thomás da Costa Programação Estruturada II
  22. 22. Modularização e Funções Exemplo – Conversor de Moedas: Funções #include <iostream> using namespace std; const double VALOR_DOLAR = 2.7; void converte_real_dolar(double real); int main() { double valor_real; cout << "Valor em reais:"; cin >> valor_real; converte_real_dolar(valor_real); } void converte_real_dolar(double real) { if (real < 0) { cout << "O valor não pode ser menor que zero"; return; } cout << "Valor convertido: " << real * VALOR_DOLAR; } Prof. Thomás da Costa Programação Estruturada II
  23. 23. Modularização e Funções Exemplo – Calculadora: Funções #include <iostream> using namespace std; double somar(double x, double y); double subtrair(double x, double y); double multiplicar(double x, double y); double dividir(double x, double y); int main() { double x, y; cout << "Digite os valores para somar:n"; cin >> x >> y; cout << somar(x, y); cout << "Digite os valores para subtrair:n"; cin >> x >> y; cout << subtrair(x, y); cout << "Digite os valores para multiplicar:n"; cin >> x >> y; cout << multiplicar(x, y); cout << "Digite os valores para dividir:n"; cin >> x >> y; cout << dividir(x, y); } double somar(double x, double y) { double resultado = x + y; return resultado; } double subtrair(double x, double y) { double resultado = x - y; return resultado; } double multiplicar(double x, double y) { double resultado = x * y; return resultado; } double dividir(double x, double y) { double resultado = x / y; return resultado; } Prof. Thomás da Costa Programação Estruturada II
  24. 24. Modularização e Funções O que é: No caso da linguagem C++, escopo de variáveis é o ciclo de vida de um tipo de dado e como ele pode ser acessado pelo programa principal e suas funções. Escopo de Variáveis Prof. Thomás da Costa Programação Estruturada II
  25. 25. Modularização e Funções Exemplo: Escopo de Variáveis Prof. Thomás da Costa Programação Estruturada II #include <iostream> using namespace std; int global = 0; void escopo(int x); int main() { int a = 1; { int b = 1; cout << "Escopo mais interno: " << b << endl; } escopo(100); cout << "Escopo local: " << a << endl; } void escopo(int x) { cout << "Escopo local: " << x << endl; cout << "Escopo global: " << global << endl; } Variável global, ou seja, pode ser acessada em qualquer lugar do programa Variável b pode ser acessada somente neste trecho Chaves definem um escopo
  26. 26. Modularização e Funções O que é: É quando uma variável é passada como parâmetro de uma função, e seu valor original não é alterado. Somente o valor da sua cópia pode ser alterado dentro da função. Parâmetros Por Valor Prof. Thomás da Costa Programação Estruturada II
  27. 27. #include <iostream> using namespace std; void troca(int a, int b); int main() { int a = 10; int b = 20; troca(a, b); cout << "Valor de A e B não foi alterado:" << a << b << endl; } void troca(int a, int b) { a = b; b = a + 100; cout << "Valor de A e B: " << a << b << endl; } Modularização e Funções Exemplo: Parâmetros Por Valor Prof. Thomás da Costa Programação Estruturada II Variáveis a e b tem valor 10 e 20 Variáveis a e b continuam com o mesmo valor 10 e 20 Trocamos o valor de a com b dentro da função
  28. 28. Modularização e Funções Parâmetros Por Referência Prof. Thomás da Costa Programação Estruturada II O que é: É quando uma variável é passada como parâmetro de uma função, e seu valor original pode ser alterado.
  29. 29. #include <iostream> using namespace std; void troca(int &a, int &b); int main() { int a = 10; int b = 20; cout << "Valor de A e B original:" << a << "-" << b << endl; troca(a, b); cout << "Valor de A e B FOI alterado:" << a << "-" << b << endl; } void troca(int &a, int &b) { int temp; temp = b; b = a; a = temp; } Modularização e Funções Exemplo: Parâmetros Por Referência Prof. Thomás da Costa Programação Estruturada II Variáveis a e b tem valor 10 e 20 Variáveis a e b mudam de valor Trocamos o valor de a com b dentro da função Referencia endereço de memória
  30. 30. Modularização e Funções Exemplo: Parâmetros do Tipo String Prof. Thomás da Costa Programação Estruturada II #include <iostream> #include <string.h> using namespace std; int validar_senha(char *senha); int main() { char senha[10]; cout << "Digite a senha:" << endl; gets(senha); validar_senha(senha); } int validar_senha(char *senha) { if (strcmp(senha, "entrar123") == 0) { cout << "Senha OK"; return 0; } else { cout << "Senha inválida"; return 1; } } Passando uma string como parâmetro devemos colocar o sinal ( * )
  31. 31. Modularização e Funções Exemplo: Parâmetros do Tipo Vetor Prof. Thomás da Costa Programação Estruturada II #include <iostream> #include <string.h> using namespace std; void imprime_vetor(int *valores); int main() { int valores[10] = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29}; imprime_vetor(valores); } void imprime_vetor(int *valores) { for (int i=0;i<=9;i++) { cout << "valores[" << i << "] :" << valores[i] << endl; } } Passando um vetor como parâmetro devemos colocar o sinal ( * ) CUIDADO: alterar o vetor dentro da função, modifica o valor que foi passado como parâmetro
  32. 32. Modularização e Funções Para pensar: Podemos ter funções com o mesmo nome ? Sim podemos !!! Desde que as funções possuam parâmetros diferentes uma da outra. Essa técnica é chamada de sobrecarga. Sobrecarga de funções Prof. Thomás da Costa Programação Estruturada II Para acontecer a sobrecarga: - Tipos de parâmetros diferentes - Quantidades de parâmetros
  33. 33. Modularização e Funções Exemplo: Sobrecarga de funções Prof. Thomás da Costa Programação Estruturada II #include <iostream> #include <string.h> using namespace std; void imprime_vetor(char *valores); void imprime_vetor(int *valores); void imprime_vetor(int *valores, int tamanho); int main() { int valores[10] = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29}; char nome[10] = {'a','n','h','a','n','g','u','e','r','a'}; imprime_vetor(nome); imprime_vetor(valores); imprime_vetor(valores, 10); } Continua -> Funções com o mesmo nome e parâmetros diferentes
  34. 34. Modularização e Funções Exemplo - Continuação: Sobrecarga de funções Prof. Thomás da Costa Programação Estruturada II void imprime_vetor(char *valores) { cout << "void imprime_vetor(char *valores)" << endl; for (int i=0;i<=9;i++) { cout << "valores[" << i << "] :" << valores[i] << endl; } } void imprime_vetor(int *valores) { cout << "void imprime_vetor(int *valores)" << endl; for (int i=0;i<=9;i++) { cout << "valores[" << i << "] :" << valores[i] << endl; } } void imprime_vetor(int *valores, int tamanho) { cout << "void imprime_vetor(int *valores, int tamanho)" << endl; for (int i=0;i<tamanho;i++) { cout << "valores[" << i << "] :" << valores[i] << endl; } }
  35. 35. Modularização e Funções Exemplo: Valores Default Prof. Thomás da Costa Programação Estruturada II #include <iostream> using namespace std; double media(double b1 = 0, double b2 = 0); int main() { cout << "Media Default:" << media() << endl; cout << "Media Aluno:" << media(6.5, 6.5) << endl; } double media(double b1, double b2) { return (b1 + b2) / 2; } Valores pré-definidos na função é chamado de valores default
  36. 36. Modularização e Funções Desenvolvendo uma Biblioteca !!!: Vamos criar uma biblioteca para ser utilizada em todos os nossos programas. A nossa biblioteca será chamada pela diretiva #include, como todas as outras do C++. Para criar um biblioteca: - Criar um projeto no Dev-C++ - Criar um arquivo .h com os protótipos das funções - Criar um arquivo .cpp com as definições das funções Bibliotecas Prof. Thomás da Costa Programação Estruturada II
  37. 37. Modularização e Funções Vamos criar uma biblioteca matemática: Criando um projeto do Dev-C++: - File -> New Project - Console Application - Colocar em Name (nome do projeto) matematica Bibliotecas Prof. Thomás da Costa Programação Estruturada II
  38. 38. Modularização e Funções Vamos criar uma biblioteca matemática: - Criar arquivo .h - Criar arquivo .cpp Bibliotecas Prof. Thomás da Costa Programação Estruturada II Arquivos da biblioteca .h e .cpp
  39. 39. namespace matematica { double somar(double x, double y); double subtrair(double x, double y); double multiplicar(double x, double y); double dividir(double x, double y); } Modularização e Funções Arquivo .h: Bibliotecas Prof. Thomás da Costa Programação Estruturada II Namespace da biblioteca Os namespace´s servem para identificar uma biblioteca, tornando única dentro da aplicação e não entrar em conflito com outras bibliotecas
  40. 40. #include <iostream> #include "matematica.h" using namespace std; namespace matematica { double somar(double x, double y) { return x + y; } double subtrair(double x, double y) { return x - y; } double multiplicar(double x, double y) { return x * y; } double dividir(double x, double y) { return x / y; } } Modularização e Funções Arquivo .cpp: Bibliotecas Prof. Thomás da Costa Programação Estruturada II Implementações das funções Namespace da biblioteca
  41. 41. #include <iostream> #include "matematica.h" using namespace matematica; using namespace std; int main() { cout << "Somar:" << somar(2,2) << endl; cout << "Subtrair:" << subtrair(2,2) << endl; cout << "Multiplicar:" << multiplicar(2,2) << endl; cout << "Dividir:" << dividir(2,2) << endl; } Modularização e Funções Usando a biblioteca: Bibliotecas Prof. Thomás da Costa Programação Estruturada II Chamando as funções Namespace da biblioteca Incluindo a biblioteca no programa
  42. 42. Modularização e Funções Obrigado !!! Prof. Thomás da Costa Programação Estruturada II

×