27
Engenharia de Software

Engenharia de Software - fenix.tecnico.ulisboa.ptP_C... · Escrita da solução na sintaxe da linguagem escolhida 3. Execução, testes e depuração de erros Correção de erros

  • Upload
    vandien

  • View
    215

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Engenharia de Software - fenix.tecnico.ulisboa.ptP_C... · Escrita da solução na sintaxe da linguagem escolhida 3. Execução, testes e depuração de erros Correção de erros

Engenharia de Software

Page 2: Engenharia de Software - fenix.tecnico.ulisboa.ptP_C... · Escrita da solução na sintaxe da linguagem escolhida 3. Execução, testes e depuração de erros Correção de erros

2João Sousa João Sousa –– Miguel Miguel Pedro SilvaPedro Silva ComputaComputaçção e Programaão e Programaçção 2007 / 2008ão 2007 / 2008

Objectivos

Indicação onde são utilizados os computadoresPrimeiro programa em C++Etapas básicas do desenvolvimento de programas

Projecto centrado nos objectos

Classes e programação orientada por objectos

Page 3: Engenharia de Software - fenix.tecnico.ulisboa.ptP_C... · Escrita da solução na sintaxe da linguagem escolhida 3. Execução, testes e depuração de erros Correção de erros

3João Sousa João Sousa –– Miguel Miguel Pedro SilvaPedro Silva ComputaComputaçção e Programaão e Programaçção 2007 / 2008ão 2007 / 2008

Utilização de computadores

IndústriaRobots, CAD, gestão de projectos e controlo

EstadoDefesa, espaço, dados seguros, tempo

MedicinaRegistos médicos, sistema de apoio à vida, tomografias axiais

LazerAnimação, efeitos especiais, jogos

CiênciaSimulações, análise molecular, teste de qualidade a alimentos

Tecnologias da InformaçãoBibliotecas digitais, arte online

Page 4: Engenharia de Software - fenix.tecnico.ulisboa.ptP_C... · Escrita da solução na sintaxe da linguagem escolhida 3. Execução, testes e depuração de erros Correção de erros

4João Sousa João Sousa –– Miguel Miguel Pedro SilvaPedro Silva ComputaComputaçção e Programaão e Programaçção 2007 / 2008ão 2007 / 2008

O Mundo do C++

Exemplo de programa:/* saudacoes.cpp sauda o seu utilizador** Input: O nome do utilizador* Output: Uma saudacao personalizada*********************************************************/#include <iostream> // cin, cout, <<, >>#include <string> // stringusing namespace std;int main(){cout << “Introduza o seu nome, por favor: ";string nome;cin >> nome;cout << "\nBenvindo ao mundo do C++, " << nome << "!\n";}

Comentários

Instruções de compilaçãoNomes relacionados

com normas de C++

Bloco principal do programa.Contém instruções de C++.

Page 5: Engenharia de Software - fenix.tecnico.ulisboa.ptP_C... · Escrita da solução na sintaxe da linguagem escolhida 3. Execução, testes e depuração de erros Correção de erros

5João Sousa João Sousa –– Miguel Miguel Pedro SilvaPedro Silva ComputaComputaçção e Programaão e Programaçção 2007 / 2008ão 2007 / 2008

O Mundo do C++

Instruções em C++

int main(){cout << “Introduza o seu nome, por favor: ";string nome;cin >> nome; cout << "\nBenvindo ao mundo do C++, " << nome << "!\n";}

Instrução de saídapara o utilizadorDeclaração de

variável

Entrada do tecladogravada numa variávelSaída de cadeia de

caracteres e de valor gravado numa variável

Page 6: Engenharia de Software - fenix.tecnico.ulisboa.ptP_C... · Escrita da solução na sintaxe da linguagem escolhida 3. Execução, testes e depuração de erros Correção de erros

6João Sousa João Sousa –– Miguel Miguel Pedro SilvaPedro Silva ComputaComputaçção e Programaão e Programaçção 2007 / 2008ão 2007 / 2008

Etapas do desenvolvimento de programas

1. ProjectoAnálise do problema, e especificação do algoritmo pararesolver o problema.

2. Codificação do programaEscrita da solução na sintaxe da linguagem escolhida

3. Execução, testes e depuração de errosCorreção de erros (debugging)

4. ManutençãoActualizações (updates), e modificações necessárias

Page 7: Engenharia de Software - fenix.tecnico.ulisboa.ptP_C... · Escrita da solução na sintaxe da linguagem escolhida 3. Execução, testes e depuração de erros Correção de erros

7João Sousa João Sousa –– Miguel Miguel Pedro SilvaPedro Silva ComputaComputaçção e Programaão e Programaçção 2007 / 2008ão 2007 / 2008

Problema

Maior bola de corda do mundo existe em Cawker City, Kansas, EUA.

Quanto pesa a bola?Quantos Kms atingiriaa bola de fio se fossedesenrolada?

Page 8: Engenharia de Software - fenix.tecnico.ulisboa.ptP_C... · Escrita da solução na sintaxe da linguagem escolhida 3. Execução, testes e depuração de erros Correção de erros

8João Sousa João Sousa –– Miguel Miguel Pedro SilvaPedro Silva ComputaComputaçção e Programaão e Programaçção 2007 / 2008ão 2007 / 2008

Programação centrada em Objectos

1. Comportamento: descrição do que o programa devefazer.

2. Objectos: Identificar e dar categorias aos objectos.3. Operações: Identificar as operações necessárias para

resolver o problema.4. Algoritmo: manipula os objectos e as operações

sobre os objectos de forma a resolver o problema.

Page 9: Engenharia de Software - fenix.tecnico.ulisboa.ptP_C... · Escrita da solução na sintaxe da linguagem escolhida 3. Execução, testes e depuração de erros Correção de erros

9João Sousa João Sousa –– Miguel Miguel Pedro SilvaPedro Silva ComputaComputaçção e Programaão e Programaçção 2007 / 2008ão 2007 / 2008

Comportamento

Cálculo do peso de uma bola de corda.Insira o raio da esfera : 9

Insira a densidade da esfera: 100

A calcular . . .

Peso da bola de corda = 999.99

Page 10: Engenharia de Software - fenix.tecnico.ulisboa.ptP_C... · Escrita da solução na sintaxe da linguagem escolhida 3. Execução, testes e depuração de erros Correção de erros

10João Sousa João Sousa –– Miguel Miguel Pedro SilvaPedro Silva ComputaComputaçção e Programaão e Programaçção 2007 / 2008ão 2007 / 2008

Objectos

ObjectosDescrição

Tipo Espécie Nomeprompt para raio daesfera

string Constante nenhum

Écran ostream variável cout

raio da esfera double variável raio

Teclado istream variável cin

peso da bola double variável peso

Page 11: Engenharia de Software - fenix.tecnico.ulisboa.ptP_C... · Escrita da solução na sintaxe da linguagem escolhida 3. Execução, testes e depuração de erros Correção de erros

11João Sousa João Sousa –– Miguel Miguel Pedro SilvaPedro Silva ComputaComputaçção e Programaão e Programaçção 2007 / 2008ão 2007 / 2008

Objectos adicionais

ObjectosDescrição

Tipo Espécie Nomedensidade da esfera double variável densidade

4.0 double constante

π double constante PI

3 integer constante

3.0 double constante

O cálculo do peso requer objectos adicionais:

Page 12: Engenharia de Software - fenix.tecnico.ulisboa.ptP_C... · Escrita da solução na sintaxe da linguagem escolhida 3. Execução, testes e depuração de erros Correção de erros

12João Sousa João Sousa –– Miguel Miguel Pedro SilvaPedro Silva ComputaComputaçção e Programaão e Programaçção 2007 / 2008ão 2007 / 2008

Operações

Escreve prompt para raio da esfera em coutRecebe valor real de cinGrava o valor em raioEscreve prompt para densidade da esfera em coutRecebe valor real de cinGrava o valor em densidadeCalcula o pesoDevolve o valor de peso para cout

Page 13: Engenharia de Software - fenix.tecnico.ulisboa.ptP_C... · Escrita da solução na sintaxe da linguagem escolhida 3. Execução, testes e depuração de erros Correção de erros

13João Sousa João Sousa –– Miguel Miguel Pedro SilvaPedro Silva ComputaComputaçção e Programaão e Programaçção 2007 / 2008ão 2007 / 2008

Algoritmo

1. Inicializa constante PI2. Enviar prompt para cout para raio da esfera3. Recebe valor real de cin, e grava-o em raio4. Enviar prompt para cout para densidade da esfera.5. Recebe valor real de cin, e grava-o em densidade

6. Calcula:

7. Saída do valor do peso para cout

34.03.0

densidade raiopeso π⋅ ⋅ ⋅=

Page 14: Engenharia de Software - fenix.tecnico.ulisboa.ptP_C... · Escrita da solução na sintaxe da linguagem escolhida 3. Execução, testes e depuração de erros Correção de erros

14João Sousa João Sousa –– Miguel Miguel Pedro SilvaPedro Silva ComputaComputaçção e Programaão e Programaçção 2007 / 2008ão 2007 / 2008

Codificação

Primeiro, cria-se um programa “vazio” que contém:O cabeçalho,directivas para o compilador para adicionar as bibliotecasnecessárias para os objectos e operaçõesUma função main vazia

Conversão de cada passo do algoritmo em código. Se for utilizado um objecto que não foi declaradoanteriormente, adiciona uma instrução de declaração queespecifica o tipo e o nome do objecto.

Page 15: Engenharia de Software - fenix.tecnico.ulisboa.ptP_C... · Escrita da solução na sintaxe da linguagem escolhida 3. Execução, testes e depuração de erros Correção de erros

15João Sousa João Sousa –– Miguel Miguel Pedro SilvaPedro Silva ComputaComputaçção e Programaão e Programaçção 2007 / 2008ão 2007 / 2008

Programa PesoEsfera.cpp

/* PesoEsfera.cpp calcula o peso de uma esfera.** Input: O raio (metros) e a densidade (Kg/m3)* da esfera* Output: O peso da esfera (Kg)************************************************/

#include <iostream> // cin, cout, <<, >>#include <cmath> // pow()using namespace std;

int main(){}

Page 16: Engenharia de Software - fenix.tecnico.ulisboa.ptP_C... · Escrita da solução na sintaxe da linguagem escolhida 3. Execução, testes e depuração de erros Correção de erros

16João Sousa João Sousa –– Miguel Miguel Pedro SilvaPedro Silva ComputaComputaçção e Programaão e Programaçção 2007 / 2008ão 2007 / 2008

Programa PesoEsfera.cpp

int main(){const double PI = 3.14159;

cout << “Insira o raio da esfera (m): ";double raio;cin >> raio;cout << “\nInsira a sua densidade (Kg/m3): ";double densidade;cin >> densidade;

double peso = densidade * 4.0 * PI * pow(raio, 3) / 3.0;

cout << “\nO peso da esfera e’ aproximadamente "<< peso << " Kg.\n";

}

Page 17: Engenharia de Software - fenix.tecnico.ulisboa.ptP_C... · Escrita da solução na sintaxe da linguagem escolhida 3. Execução, testes e depuração de erros Correção de erros

17João Sousa João Sousa –– Miguel Miguel Pedro SilvaPedro Silva ComputaComputaçção e Programaão e Programaçção 2007 / 2008ão 2007 / 2008

Testes

Insira o raio da esfera (m): 6.5

Insira a sua densidade (Kg/m3): 14.6

O peso da esfera e’ aproximadamente 16795 Kg

Page 18: Engenharia de Software - fenix.tecnico.ulisboa.ptP_C... · Escrita da solução na sintaxe da linguagem escolhida 3. Execução, testes e depuração de erros Correção de erros

18João Sousa João Sousa –– Miguel Miguel Pedro SilvaPedro Silva ComputaComputaçção e Programaão e Programaçção 2007 / 2008ão 2007 / 2008

Testes, Execução e Depuração

Erros mais comuns:Erros gramaticais (de sintaxe) na linguagem de alto nívelErros durante a execuçãoErros no projecto do algoritmo

Page 19: Engenharia de Software - fenix.tecnico.ulisboa.ptP_C... · Escrita da solução na sintaxe da linguagem escolhida 3. Execução, testes e depuração de erros Correção de erros

19João Sousa João Sousa –– Miguel Miguel Pedro SilvaPedro Silva ComputaComputaçção e Programaão e Programaçção 2007 / 2008ão 2007 / 2008

Erros de sintaxe

Exemplo:double raio

Falta um “ponto e vírgula” ( ; )

Compilador encontra este tipo de erros.O diagnóstico depende do compilador. O Visual C++ dá informações detalhadas dos erros.

Page 20: Engenharia de Software - fenix.tecnico.ulisboa.ptP_C... · Escrita da solução na sintaxe da linguagem escolhida 3. Execução, testes e depuração de erros Correção de erros

20João Sousa João Sousa –– Miguel Miguel Pedro SilvaPedro Silva ComputaComputaçção e Programaão e Programaçção 2007 / 2008ão 2007 / 2008

Erros de execução (run-time)

Não são detectados até o programa correrExemplos:

Divisão por zero faz o programa “rebentar” (dá erro e acabaa execução do programa).Tirar a raíz quadrada de um número negativo faz o programaacabar.

Os programas devem ser modificados de forma a evitar que o programa acabe onde não deve.

Page 21: Engenharia de Software - fenix.tecnico.ulisboa.ptP_C... · Escrita da solução na sintaxe da linguagem escolhida 3. Execução, testes e depuração de erros Correção de erros

21João Sousa João Sousa –– Miguel Miguel Pedro SilvaPedro Silva ComputaComputaçção e Programaão e Programaçção 2007 / 2008ão 2007 / 2008

Erros lógicos (semânticos)

O programa compila, corre sem erros, mas devolve resultados incorrectos!Estes erros podem ser difíceis de encontrar.São encontrados através de exemplos de dados, e comparando com cálculo dos resultados “à mão”.Nota: Os testes são cada vez mais difíceis quantomaior é o programa

Alguns programas correm durante anos até aparecer um errológico.

Page 22: Engenharia de Software - fenix.tecnico.ulisboa.ptP_C... · Escrita da solução na sintaxe da linguagem escolhida 3. Execução, testes e depuração de erros Correção de erros

22João Sousa João Sousa –– Miguel Miguel Pedro SilvaPedro Silva ComputaComputaçção e Programaão e Programaçção 2007 / 2008ão 2007 / 2008

Manutenção

Programas dos alunos correm apenas algumas vezesProgramas no “mundo real” são utilizados durantebastantes anos

Devido a investimentos significativos de recursos

Um programa pode exigir novas tarefas durante o seuciclo de vida.A manutenção é chamada “upgrading”.

Page 23: Engenharia de Software - fenix.tecnico.ulisboa.ptP_C... · Escrita da solução na sintaxe da linguagem escolhida 3. Execução, testes e depuração de erros Correção de erros

23João Sousa João Sousa –– Miguel Miguel Pedro SilvaPedro Silva ComputaComputaçção e Programaão e Programaçção 2007 / 2008ão 2007 / 2008

Esfera como um objecto

Relembrando a descrição do comportamento da esferade corda:

Verificando a lista de objectos:Não são referidos objectos do tipo esfera.São apenas utlizados os atributos da esfera.O substantivo principal foi ignorado … esfera

Pergunta o valor do raio e densidade.Utilizador introduz osvalores.Programa calcula o peso, e mostra-o no écran.

Pergunta o valor do raio e densidade.Utilizador introduz osvalores.Programa calcula o peso, e mostra-o no écran.

Page 24: Engenharia de Software - fenix.tecnico.ulisboa.ptP_C... · Escrita da solução na sintaxe da linguagem escolhida 3. Execução, testes e depuração de erros Correção de erros

24João Sousa João Sousa –– Miguel Miguel Pedro SilvaPedro Silva ComputaComputaçção e Programaão e Programaçção 2007 / 2008ão 2007 / 2008

Criação de um novo tipo: Esfera

Quando não existe um tipo para um objecto é criadoum novo:

É denominada de classe

Uma dada classe contém:Espaço em memória para guardar os atributos de um objectoOperações para manipular esse objecto

Page 25: Engenharia de Software - fenix.tecnico.ulisboa.ptP_C... · Escrita da solução na sintaxe da linguagem escolhida 3. Execução, testes e depuração de erros Correção de erros

25João Sousa João Sousa –– Miguel Miguel Pedro SilvaPedro Silva ComputaComputaçção e Programaão e Programaçção 2007 / 2008ão 2007 / 2008

Operações para a classe Esfera

Inicialização dos atributos em valores por defeitoLeitura de vários valores para os atributosEscrita dos vários valores dos atributosObtenção de valores dos atributos para seremutilizadas por outras operações (funções, etc.)

Page 26: Engenharia de Software - fenix.tecnico.ulisboa.ptP_C... · Escrita da solução na sintaxe da linguagem escolhida 3. Execução, testes e depuração de erros Correção de erros

26João Sousa João Sousa –– Miguel Miguel Pedro SilvaPedro Silva ComputaComputaçção e Programaão e Programaçção 2007 / 2008ão 2007 / 2008

Exemplo de código com Esfera

#include <iostream> // cin, cout, <<, >>#include “Esfera.h" // classe Esferausing namespace std;int main(){cout << “Insira o raio (m)"<< " e a densidade (Kg/m3) da esfera: ";Esfera umaEsfera;umaEsfera.leRaio_e_Densidade(cin);cout << "\nA esfera pesa "

<< umaEsfera.buscarPeso() << " Kg.\n"; }

Declaração de objecto do tipoEsfera

ObjectoumaEsfera

recebemensagem para

efectuaroperações

Ficheiro com a declaração de Esfera

Page 27: Engenharia de Software - fenix.tecnico.ulisboa.ptP_C... · Escrita da solução na sintaxe da linguagem escolhida 3. Execução, testes e depuração de erros Correção de erros

27João Sousa João Sousa –– Miguel Miguel Pedro SilvaPedro Silva ComputaComputaçção e Programaão e Programaçção 2007 / 2008ão 2007 / 2008

Cálculo da densidade com a classe

#include <iostream> // cin, cout, <<, >>#include “Esfera.h" // classe Esferausing namespace std;

int main(){

cout << “Insira o raio (m) "<< " e o peso (Kg) da esfera: ";Esfera umaEsfera;umaEsfera.leRaio_e_Peso(cin);cout << "\nA densidade da esfera e’ "

<< umaEsfera.buscarDensidade() << " Kg/m3\n";}