Programação Orientada para Objectos

Slides:



Advertisements
Apresentações semelhantes
Estruturação de Linguagens (Pascal e C++)
Advertisements

TIPOS ABSTRATOS DE DADOS
Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 11 Criado por Frederick H. Colclough, Colorado Technical University Compilação Separada.
Funções em C Prof. Fabiano Utiyama.
Curso de aprofundamento na linguagem C
Programação em Java Prof. Maurício Braga
ABSTRAÇÃO processo de representar um grupo de entidades através de seus atributos comuns feita a abstração, cada entidade particular (instância) do grupo.
Programação Orientada a Objetos C++ Prof. Érico Olavo Weissheimer
Métodos, Parâmetros, Argumentos e Contratos
Engenharia de Software
1 Arquitectura de Computadores II Ano lectivo 2008/09
Arquitectura de Computadores I
Perspectivas baseadas em procedimentos e orientadas por objectos Conceitos principais: Encapsulamento, Herança, Polimorfismo (Encapsulation, Hierarchy,
Programação Orientada aos Objectos Paulo Marques Departamento de Eng. Informática Universidade de Coimbra Out/2005 Core C++: Uma abordagem.
Algoritmos e Programação Linguagens de Programação Teoria Aula (09/06)
Java: Pacotes e Modificadores de Visibilidade
Introdução à Programação
2002 LCG/UFRJ. All rights reserved. 1 Tópicos em C++ Claudio Esperança Paulo Roma Cavalcanti.
PROGRAMAÇÃO MODULAR (com uso de subprogramas)
Linguagem de Programação C++
Introdução Linguagem C
Introdução ao paradigma de programação: Orientado a Objetos
Estruturas de Dados II Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Estruturas de Dados II Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
1 Professor Rogério B. de Andrade - Aula 001- Dez/2008 Técnicas e Linguagem de Programação.
Tecnologia da Informação Orientação a Aspectos
Vetores, Matrizes e Funções
Aspectos Avançados em Engenharia de Software Aula 3 Fernanda Campos
Modularização: funções e procedimentos
1 Aula 5 Instâncias dinâmicas. 2003/2004 Programação Orientada para Objectos 2 Instâncias… int j = 20; int f() { int const i = 10; // … } Constante automática.
2002/2003 Programação Orientada para Objectos 1 Aula 11: Genericidade Genericidade usando herança Conceito de rotina genérica Conceito de classe genérica.
1 Aula 3 Listas e iteradores (cont.). 2003/2004 Programação Orientada para Objectos 2 ListaDeInt : interface class ListaDeInt { public: typedef int Item;
Introdução à Programação
Aula 8 Polimorfismo.
Programação Baseada em Objectos Desenho de TAD
1 Aula 7 Herança. 2003/2004 Programação Orientada para Objectos 2 Conceitos fundamentais: Herança Polimorfismo Ligação dinâmica.
1 Aula 6 Classes que reservam recursos externos. 2003/2004 Programação Orientada para Objectos 2 PilhaDeInt : interface /** Representa pilhas de int.
Sobrecarga de nomes de rotinas Rotinas recursivas Invocação de rotinas
Aula 13 Tipos Abstractos de Dados IV. 2003/2004 Introdução à Programação 2 Estrutura global do programa (I) Construtores Inspectores.
Programação Orientada para Objectos
2002/2003 Programação Orientada para Objectos 1 Aula 4 Memória, unidade básica de memória e conceito de endereço Ponteiros Relação de ponteiros com matrizes.
2002/2003 Programação Orientada para Objectos 1 Aula 3 Utilização de listas Melhorando a implementação das listas e iteradores Reflexão sobre interfaces.
Aula 2 Listas e iteradores.
Paulo J. Azevedo Departamento de Informática Universidade do Minho
Classes e objetos P. O. O. Prof. Grace.
Algoritmos e Programação
Iniciação à linguagem C++
Separation of Concerns (SoC)
Princípios de Orientação à Objetos
PROGRAMAÇÃO I UNIDADE 1.
Programação Orientada a Objetos com Java
Classes Revisando: –Forma de implementação de estruturas específicas –Atributos (grupos de dados) –Métodos (conjuntos de procedimentos)
Sub-programas. Mecanismo de composição de programas Sub-programa está para peça de LEGO assim como um programa está para a construção.
Linguagens Orientadas a Objeto
METODOLOGIA PARA DESENVOLVIMENTO DE SISTEMAS Prof. Dr. rer. nat. Daniel D. Abdala 1.
Modelagem de Software.
UML – Diagrama de Classes
© Introdução à programação Ano lectivo 2006/2007.
Modularização de um programa em C
Tipos Abstratos de Dados
Linguagens de Programação II Aula 04 – Entendendo Classes
Programação orientada a objectos em C++
Programação Orientada à Objetos
Estruturas de Dados Aula 8: Tipos Abstratos de Dados 30/04/2014.
Paradigma Estruturado
Padrão- MVC Model, View, Controller
BCC221 Programação Orientada a Objetos Prof. Marco Antonio M. Carvalho 2014/2.
Treinamento PHP Módulo 2 PHP Avançado Waelson Negreiros
Programação Orientada a Objetos para Redes de Computadores Prof. Miguel Elias Mitre Campista POO para Redes de Computadores.
Desenvolvendo sotfware com UML1 Visão Geral de Orientação a Objetos.
Transcrição da apresentação:

Programação Orientada para Objectos ETI e IGE ISCTE

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 Objectos

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 Objectos

Avaliação Problema: 10% Trabalho final: 40% Frequência: 50% 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 Objectos

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. 2003/2004 Programação Orientada para Objectos

Modularização física e em pacotes Aula 1 Modularização física e em pacotes

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 Objectos

Modularização Procedimental: rotinas De dados: classes 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 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): 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: 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 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) 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 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; } 2003/2004 Programação Orientada para Objectos

Módulo matematica matematica.H: matematica.C: 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 Objectos

Construção de um executável Pré-processamento: pré-processador c++ -E programa.C –o programa.ii c++ -E matematica.C –o matematica.ii Compilação: compilador c++ [opções] –c programa.C c++ [opções] –c matematica.C Fusão (to link): fusor (linker) c++ -o programa programa.o matematica.o 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 #): 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: 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! Erros! 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! Erros! 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! 2003/2004 Programação Orientada para Objectos

Optimização e geração de código máquina 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 Objectos

Ficheiros objecto programa.o matematica.o Disponibilidades main() média() Necessidades média() Necessidades 2003/2004 Programação Orientada para Objectos

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 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 2003/2004 Programação Orientada para Objectos

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 Objectos

Modularização física Dois ficheiros fonte: Que colocar em cada módulo? 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) 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) 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: Evitar problema de colisão de nomes Distribuir software 2003/2004 Programação Orientada para Objectos

Colisão de nomes (I) Verão software Inverno 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 Objectos

Colisão de nomes (II) Qual das versões do procedimento é invocada? programa.C: #include <contabilidade.H> #include <logistica.H> int main() {     consolida(); } 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: 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 namespace VerãoSoftware { ... void consolida(); } logistica.C Void VerãoSoftware::consolida()  {    ... Inverno software contabilidade.H namespace InvernoSoftware { ... void consolida(); } contabilidade.C 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(); } 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 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: 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 2003/2004 Programação Orientada para Objectos