engenharia de software - fenix.tecnico.ulisboa.ptp_c... · escrita da solução na sintaxe da...
TRANSCRIPT
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";}