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

Preview:

Citation preview

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

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