35
1 Programação Orientada para Objectos ETI e IGE ISCTE

1 Programação Orientada para Objectos ETI e IGE ISCTE

Embed Size (px)

Citation preview

Page 1: 1 Programação Orientada para Objectos ETI e IGE ISCTE

1

Programação Orientada para Objectos

ETI e IGE

ISCTE

Page 2: 1 Programação Orientada para Objectos ETI e IGE ISCTE

2003/2004 Programação Orientada para

Objectos2

Docentes

Ricardo Ribeiro [email protected] Gabinete D6.21 Cacifo 292

Responsável: Prof. Manuel Menezes de Sequeira

Page 4: 1 Programação Orientada para Objectos ETI e IGE ISCTE

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

Page 5: 1 Programação Orientada para Objectos ETI e IGE ISCTE

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.

Page 6: 1 Programação Orientada para Objectos ETI e IGE ISCTE

6

Aula 1

Modularização física e em pacotes

Page 7: 1 Programação Orientada para Objectos ETI e IGE ISCTE

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

Page 8: 1 Programação Orientada para Objectos ETI e IGE ISCTE

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

Page 9: 1 Programação Orientada para Objectos ETI e IGE ISCTE

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

Page 10: 1 Programação Orientada para Objectos ETI e IGE ISCTE

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

Page 11: 1 Programação Orientada para Objectos ETI e IGE ISCTE

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

Page 12: 1 Programação Orientada para Objectos ETI e IGE ISCTE

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

Page 13: 1 Programação Orientada para Objectos ETI e IGE ISCTE

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

Page 14: 1 Programação Orientada para Objectos ETI e IGE ISCTE

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

Page 15: 1 Programação Orientada para Objectos ETI e IGE ISCTE

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)

Page 16: 1 Programação Orientada para Objectos ETI e IGE ISCTE

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

Page 17: 1 Programação Orientada para Objectos ETI e IGE ISCTE

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!

Page 18: 1 Programação Orientada para Objectos ETI e IGE ISCTE

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!

Page 19: 1 Programação Orientada para Objectos ETI e IGE ISCTE

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!

Page 20: 1 Programação Orientada para Objectos ETI e IGE ISCTE

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

Page 21: 1 Programação Orientada para Objectos ETI e IGE ISCTE

2003/2004 Programação Orientada para

Objectos21

Ficheiros objecto

programa.o matematica.o

Necessidades

média()

Necessidades

Disponibilidades

main()

Disponibilidades

média()

Page 22: 1 Programação Orientada para Objectos ETI e IGE ISCTE

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

Page 23: 1 Programação Orientada para Objectos ETI e IGE ISCTE

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

Page 24: 1 Programação Orientada para Objectos ETI e IGE ISCTE

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

Page 25: 1 Programação Orientada para Objectos ETI e IGE ISCTE

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?

Page 26: 1 Programação Orientada para Objectos ETI e IGE ISCTE

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

Page 27: 1 Programação Orientada para Objectos ETI e IGE ISCTE

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

Page 28: 1 Programação Orientada para Objectos ETI e IGE ISCTE

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

Page 29: 1 Programação Orientada para Objectos ETI e IGE ISCTE

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

Page 30: 1 Programação Orientada para Objectos ETI e IGE ISCTE

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?

Page 31: 1 Programação Orientada para Objectos ETI e IGE ISCTE

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!

Page 32: 1 Programação Orientada para Objectos ETI e IGE ISCTE

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

Page 33: 1 Programação Orientada para Objectos ETI e IGE ISCTE

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

Page 34: 1 Programação Orientada para Objectos ETI e IGE ISCTE

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

Page 35: 1 Programação Orientada para Objectos ETI e IGE ISCTE

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