1 programação orientada para objectos eti e ige iscte
Post on 17-Apr-2015
121 Views
Preview:
TRANSCRIPT
1
Programação Orientada para Objectos
ETI e IGE
ISCTE
2003/2004 Programação Orientada para
Objectos2
Docentes
Ricardo Ribeiro Ricardo.Ribeiro@iscte.pt Gabinete D6.21 Cacifo 292
Responsável: Prof. Manuel Menezes de Sequeira
2003/2004 Programação Orientada para
Objectos3
Informação
http://iscte.pt/programacao/p2/ http://br.groups.yahoo.com/group/poo-iscte/ poo-iscte@yahoogrupos.com.br Diapositivos das aulas teóricas Resumos das aulas práticas
2003/2004 Programação Orientada para
Objectos4
Avaliação
Problema: 10% Em grupo
Trabalho final: 40% Entrega intermédia: avaliação negativa = -3 valores Entrega final: trabalho completo Em grupo com discussão individual
Frequência: 50% Individual sem consulta: nota mínima 7
Grupos: 2 alunos
2003/2004 Programação Orientada para
Objectos5
Objectivos
Conhecer os princípios básicos da resolução de problemas usando diversos paradigmas de programação.
Ter conhecimentos sólidos da linguagem C++ e conhecimentos básicos da sua biblioteca padrão.
Saber desenhar estruturas de dados e respectivos algoritmos em C++.
Saber lidar com erros durante o desenvolvimento e fazer programas com um comportamento razoável face a erros.
Ser capaz de planear a resolução dos problemas, analisando, desenhando e implementando correctamente os correspondentes programas.
Ter conhecimentos elementares sobre a linguagem UML.
6
Aula 1
Modularização física e em pacotes
2003/2004 Programação Orientada para
Objectos7
Divisão de um programa
Mais fácil dividir trabalho Permite divisão lógica do programa de
acordo com objectivo das ferramentas Construção do executável acelerada Facilita reutilização de código
2003/2004 Programação Orientada para
Objectos8
Modularização
Procedimental: rotinas Funções e procedimentos
De dados: classes Classes
Física: módulos físicos (ou módulos) Ficheiros
Em pacotes: pacotes Espaços nominativos
2003/2004 Programação Orientada para
Objectos9
Modularização procedimental
Módulos são rotinas que modularizam algoritmos: Caixas pretas que separam interface de
implementação: interface: cabeçalho implementação (mecanismo): corpo
Escondem implementação (encapsulamento): consumidor da rotina limita-se a invocá-la
2003/2004 Programação Orientada para
Objectos10
Modularização de dados
Módulos são classes que modularizam dados e respectivas operações: Caixas pretas que separam interface de
implementação: interface: operações públicas (e restantes membros
públicos) Implementação: métodos e membros privados
Escondem a implementação (encapsulamento): consumidor da classe limita-se a usá-la
2003/2004 Programação Orientada para
Objectos11
Modularização física
Divisão de um programa em ficheiros Módulos são conhecidos por… módulos
Módulos físicos são pares de ficheiros fonte: Ficheiro de interface (.H)
como se usam e o que fazem as ferramentas disponibilizadas pelo módulo
Ficheiro de implementação (.C) implementação das ditas ferramentas
Consumidor do ficheiro usa o ficheiro de interface
2003/2004 Programação Orientada para
Objectos12
Módulo programa
programa.C:
#include "matematica.H"
#define TURMAS_GRANDES
#ifdef TURMAS_GRANDES int const número_máximo_de_alunos = 100; #else int const número_máximo_de_alunos = 30; #endif
int main() { int notas[número_máximo_de_alunos]; ... cout << média(notas, 10) << endl; }
2003/2004 Programação Orientada para
Objectos13
Módulo matematica
matematica.H:
double média(int const m[], int const n);
matematica.C:
#include "matematica.H"
double média(int const m[], int const n) { double soma = 0.0; for(int i = 0; i != n; ++i) soma += m[i]; return soma / n; }
2003/2004 Programação Orientada para
Objectos14
Construção de um executável
1. Pré-processamento: pré-processadorc++ -E programa.C –o programa.iic++ -E matematica.C –o matematica.ii
2. Compilação: compiladorc++ [opções] –c programa.Cc++ [opções] –c matematica.C
3. Fusão (to link): fusor (linker)c++ -o programa programa.o matematica.o
2003/2004 Programação Orientada para
Objectos15
Pré-processamento
Copia ficheiro de implementação (.C) para unidade de tradução (.ii)
Directivas de pré-processamento (linhas iniciadas por #): Inclusões (#include) Macros (#define) Compilação condicional (#ifdef; #ifndef; #else; #endif)
2003/2004 Programação Orientada para
Objectos16
Compilação
Tradução de unidade de tradução para linguagem máquina
Fases da compilação:1. Análise lexical2. Análise sintáctica3. Análise semântica4. Optimização5. Geração de código máquina
2003/2004 Programação Orientada para
Objectos17
Análise lexical
Divide em palavras e símbolos a sequência de caracteres que constitui o ficheiro fonte
Verifica a correção dos símbolos Exemplo para a língua Portuguesa:
A a alfac um choou ovo.
Erros!Erros!
2003/2004 Programação Orientada para
Objectos18
Análise sintáctica
Verifica as regras de gramática da linguagem
Exemplo para a língua Portuguesa: A a alface um chocou ovo.
Erros!Erros!
2003/2004 Programação Orientada para
Objectos19
Análise semântica
Verifica se, apesar de sintacticamente correcta, a sequência de símbolos faz sentido
Exemplo para a língua Portuguesa: A alface chocou um ovo.
Erro!
2003/2004 Programação Orientada para
Objectos20
Optimização egeração de código máquina
Optimização Elimina o código redundante Simplifica expressões Elimina variáveis desnecessárias …
Geração de código máquina Gera em linguagem máquina as instruções que
realizam o especificado inicialmente na linguagem C++
2003/2004 Programação Orientada para
Objectos21
Ficheiros objecto
programa.o matematica.o
Necessidades
média()
Necessidades
Disponibilidades
main()
Disponibilidades
média()
2003/2004 Programação Orientada para
Objectos22
Fusão
Ficheiros objecto fundidos num único executável
Verifica que: Não há repetições Há uma função main() Para cada necessidade existe
correspondente disponibilidade
2003/2004 Programação Orientada para
Objectos23
Exemplo
«file»matemática.H
«file»matemática.C
«file»programa.C
«file»programa.ii
«file»matemática.ii
«file»matemática.o
«file»programa.o
«file»programa
Pré-processamento
Compilação
Ficheiros fonte
Unidades de tradução
Ficheiros objecto
Fusão
2003/2004 Programação Orientada para
Objectos24
Bibliotecas
Bibliotecas ou ficheiros de arquivo Prefixo: lib Extensão: .a
Como arquivar ficheiros objecto ar ru libarquivo.a ficheiro_objecto.o …
Como compilar com bibliotecas c++ … -larquivo
2003/2004 Programação Orientada para
Objectos25
Modularização física
Dois ficheiros fonte: Interface (.H) Implementação (.C)
Que colocar em cada módulo? Que colocar em cada ficheiro fonte?
2003/2004 Programação Orientada para
Objectos26
Ficheiros de interface (.H)
Definições de classes Declarações de rotinas não-membro e
não inline Definições de rotinas e métodos inline Definições de constantes Declarações de variáveis globais (evitar!!!)
2003/2004 Programação Orientada para
Objectos27
Ficheiros de implementação (.C)
Definições de tudo o que for apenas necessário dentro do módulo (classes, rotinas, ...)
Definições de todas as rotinas e métodos que não sejam inline
Definições de todas as variáveis globais
2003/2004 Programação Orientada para
Objectos28
Modularização em pacotes
Agrupamento das ferramentas num nível mais elevado de modularização: os espaços nominativos (name spaces)
Principais razões para o uso de pacotes: Evitar problema de colisão de nomes Distribuir software
2003/2004 Programação Orientada para
Objectos29
Colisão de nomes (I)
Verão software
logistica.H...void consolida();...
logistica.C...void consolida() { ... }...
liblogistica.a:logistica.o
Inverno software
contabilidade.H...void consolida();...
contabilidade.C...void consolida() { ... }...
libcontabilidade.a:contabilidade.o
2003/2004 Programação Orientada para
Objectos30
Colisão de nomes (II)
programa.C:
#include <contabilidade.H> #include <logistica.H>
int main() { consolida(); }
Qual das versões do procedimento é invocada?
2003/2004 Programação Orientada para
Objectos31
Colisão de nomes (III)
Comando de construção do executável: c++ -o programa programa.C -llogistica-lcontabilidade
Compilação tem sucesso: Fusão dos arquivos pára quando o procedimento é encontrado Seguintes não são pesquisados
Comando de construção do executável: c++ -o programa programa.C logistica.o contabilidade.o
Fusão dá erro por definição duplicada!
2003/2004 Programação Orientada para
Objectos32
Definição de espaços nominativos
Verão software
logistica.Hnamespace VerãoSoftware { ... void consolida(); ...
}
logistica.C...VoidVerãoSoftware::consolida() { ... }...
Inverno software
contabilidade.Hnamespace InvernoSoftware { ... void consolida(); ...}
contabilidade.C...voidInvernoSoftware::consolida() { ... }...
2003/2004 Programação Orientada para
Objectos33
Utilização de ferramentas em espaços nominativos
programa.C:
#include <contabilidade.H> #include <logistica.H>
int main() { VerãoSoftware::consolida(); InvernoSoftware::consolida();}
2003/2004 Programação Orientada para
Objectos34
Organização
Podemos ter hierarquias de espaços nominativos
namespace InvernoSoftware { namespace Contabilidade { void consolida(); }}
Colocar ficheiros de interface em directórios correspondentes ao espaço nominativo a que pertencem
InvernoSoftware/Contabilidade/contabilidade.H
2003/2004 Programação Orientada para
Objectos35
Aula 1: Sumário
Modularização: física e em pacotes Noções de modularização física e compilação separada:
Vantagens. Fases da construção dum programa Compilação Noções sobre ficheiros de interface (.H), fonte (.C), objecto (.o),
biblioteca ou arquivo (.a), e executável Conteúdo dos ficheiros de implementação e de interface
Noções de modularização em pacotes e espaços nominativos (namespaces):
Utilidade Sintaxe Utilização
top related