Engenharia de Software - fenix.tecnico.ulisboa.ptP_C... · Escrita da solução na sintaxe da...

Preview:

Citation preview

Engenharia de Software

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

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

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++.

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

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

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?

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.

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

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

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:

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

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 π⋅ ⋅ ⋅=

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.

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(){}

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";

}

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

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

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.

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.

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.

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”.

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.

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

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.)

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

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";}

Recommended