Programação
Orientada para Objectos
ETI e IGE
ISCTE
1
Docentes

Ricardo Ribeiro
[email protected]
Gabinete D6.21
Cacifo 292

Responsável:




2
Prof. Manuel Menezes de Sequeira
2003/2004
Programação Orientada para
Objectos
Informação





3
http://iscte.pt/programacao/p2/
http://br.groups.yahoo.com/group/poo-iscte/
[email protected]
Diapositivos das aulas teóricas
Resumos das aulas práticas
2003/2004
Programação Orientada para
Objectos
Avaliação

Problema: 10%


Trabalho final: 40%




4
Entrega intermédia: avaliação negativa = -3 valores
Entrega final: trabalho completo
Em grupo com discussão individual
Frequência: 50%


Em grupo
Individual sem consulta: nota mínima 7
Grupos: 2 alunos
2003/2004
Programação Orientada para
Objectos
Objectivos






5
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.
2003/2004
Programação Orientada para
Objectos
Aula 1
Modularização física e em
pacotes
6
Divisão de um programa




7
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
Objectos
Modularização

Procedimental: rotinas


De dados: classes


Ficheiros
Em pacotes: pacotes

8
Classes
Física: módulos físicos (ou módulos)


Funções e procedimentos
Espaços nominativos
2003/2004
Programação Orientada para
Objectos
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):

9
consumidor da rotina limita-se a invocá-la
2003/2004
Programação Orientada para
Objectos
Modularização de dados

Módulos são classes que modularizam dados e
respectivas operações:

Caixas pretas que separam interface de
implementação:



Escondem a implementação (encapsulamento):

10
interface: operações públicas (e restantes membros
públicos)
Implementação: métodos e membros privados
consumidor da classe limita-se a usá-la
2003/2004
Programação Orientada para
Objectos
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)


Ficheiro de implementação (.C)


11
como se usam e o que fazem as ferramentas
disponibilizadas pelo módulo
implementação das ditas ferramentas
Consumidor do ficheiro usa o ficheiro de interface
2003/2004
Programação Orientada para
Objectos
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;
}
12
2003/2004
Programação Orientada para
Objectos
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;
}
13
2003/2004
Programação Orientada para
Objectos
Construção de um executável
1.
Pré-processamento: pré-processador
c++ -E programa.C –o programa.ii
c++ -E matematica.C –o matematica.ii
2.
Compilação: compilador
c++ [opções] –c programa.C
c++ [opções] –c matematica.C
3.
Fusão (to link): fusor (linker)
c++ -o programa programa.o matematica.o
14
2003/2004
Programação Orientada para
Objectos
Pré-processamento


Copia ficheiro de implementação (.C)
para unidade de tradução (.ii)
Directivas de pré-processamento (linhas
iniciadas por #):



15
Inclusões (#include)
Macros (#define)
Compilação condicional (#ifdef;
#ifndef; #else; #endif)
2003/2004
Programação Orientada para
Objectos
Compilação


Tradução de unidade de tradução para
linguagem máquina
Fases da compilação:
1.
2.
3.
4.
5.
16
Análise lexical
Análise sintáctica
Análise semântica
Optimização
Geração de código máquina
2003/2004
Programação Orientada para
Objectos
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!
17
2003/2004
Programação Orientada para
Objectos
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!
18
2003/2004
Programação Orientada para
Objectos
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!
19
2003/2004
Programação Orientada para
Objectos
Optimização e
geração de código máquina

Optimização





Geração de código máquina

20
Elimina o código redundante
Simplifica expressões
Elimina variáveis desnecessárias
…
Gera em linguagem máquina as instruções que
realizam o especificado inicialmente na linguagem
C++
2003/2004
Programação Orientada para
Objectos
Ficheiros objecto
programa.o
21
matematica.o
Disponibilidades
main()
Disponibilidades
média()
Necessidades
média()
Necessidades
2003/2004
Programação Orientada para
Objectos
Fusão


Ficheiros objecto fundidos num único
executável
Verifica que:



22
Não há repetições
Há uma função main()
Para cada necessidade existe
correspondente disponibilidade
2003/2004
Programação Orientada para
Objectos
Exemplo
«file»
matemática.C
«file»
matemática.H
«file»
programa.C
Ficheiros fonte
Pré-processamento
«file»
matemática.ii
«file»
programa.ii
Unidades de
tradução
Compilação
«file»
matemática.o
«file»
programa.o
Ficheiros
objecto
Fusão
«file»
programa
23
2003/2004
Programação Orientada para
Objectos
Bibliotecas

Bibliotecas ou ficheiros de arquivo



Como arquivar ficheiros objecto


ar ru libarquivo.a ficheiro_objecto.o …
Como compilar com bibliotecas

24
Prefixo: lib
Extensão: .a
c++ … -larquivo
2003/2004
Programação Orientada para
Objectos
Modularização física

Dois ficheiros fonte:




25
Interface (.H)
Implementação (.C)
Que colocar em cada módulo?
Que colocar em cada ficheiro fonte?
2003/2004
Programação Orientada para
Objectos
Ficheiros de interface (.H)





26
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
Objectos
Ficheiros de implementação (.C)



27
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
Objectos
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:


28
Evitar problema de colisão de nomes
Distribuir software
2003/2004
Programação Orientada para
Objectos
Colisão de nomes (I)
Verão software
logistica.H
Inverno software
contabilidade.H
...
void consolida();
...
logistica.C
...
void consolida();
...
contabilidade.C
...
void consolida()
{
...
}
...
liblogistica.a:
...
void consolida()
{
...
}
...
libcontabilidade.a:
logistica.o
29
contabilidade.o
2003/2004
Programação Orientada para
Objectos
Colisão de nomes (II)
programa.C:
#include <contabilidade.H>
#include <logistica.H>
int main()
{
consolida();
}

30
Qual das versões do procedimento é invocada?
2003/2004
Programação Orientada para
Objectos
Colisão de nomes (III)

Comando de construção do executável:


c++ -o programa programa.C -llogistica
-lcontabilidade
Compilação tem sucesso:



Comando de construção do executável:


31
Fusão dos arquivos pára quando o procedimento é encontrado
Seguintes não são pesquisados
c++ -o programa programa.C logistica.o
contabilidade.o
Fusão dá erro por definição duplicada!
2003/2004
Programação Orientada para
Objectos
Definição de espaços nominativos
Verão software
logistica.H
Inverno software
contabilidade.H
namespace VerãoSoftware {
...
void consolida();
...
namespace InvernoSoftware {
...
void consolida();
...
}
}
logistica.C
contabilidade.C
...
Void
VerãoSoftware::consolida()
{
...
}
...
32
...
void
InvernoSoftware::consolida()
{
...
}
...
2003/2004
Programação Orientada para
Objectos
Utilização de ferramentas em
espaços nominativos
programa.C:
#include <contabilidade.H>
#include <logistica.H>
int main()
{
VerãoSoftware::consolida();
InvernoSoftware::consolida();
}
33
2003/2004
Programação Orientada para
Objectos
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

34
InvernoSoftware/Contabilidade/contabilidade.H
2003/2004
Programação Orientada para
Objectos
Aula 1: Sumário


Modularização: física e em pacotes
Noções de modularização física e compilação separada:






Noções de modularização em pacotes e espaços nominativos
(namespaces):



35
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
Utilidade
Sintaxe
Utilização
2003/2004
Programação Orientada para
Objectos
Download

Aula teórica - iscte-iul