2002/2003 Programação Orientada para Objectos 1 Aula 5 Memória livre e instâncias dinâmicas Criação de instâncias dinâmicas Destruição de instâncias dinâmicas.

Slides:



Advertisements
Apresentações semelhantes
Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 10 Criado por Frederick H. Colclough, Colorado Technical University Ponteiros e Vetores.
Advertisements

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.
Paulo Marques Hernâni Pedroso
Introdução à Programação Orientada à Objetos Prof. Daniel Merli Lamosa Maio de 2002.
Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/ Capitulo 3 – Introdução às classes Capitulo 3 Introdução às classes.
Construção de Algoritmos Professor: Aquiles Burlamaqui Construção de Algoritmos AULA 07 Aquiles Burlamaqui UERN
03/08/2011 Professor Leomir J. Borba- –
Vamos abordar o exemplo
Programação Orientada aos Objectos Paulo Marques Departamento de Eng. Informática Universidade de Coimbra Out/2005 Core C++: Uma abordagem.
Orientação a Objetos: Encapsulamento e Classificação
Linguagem Java Renata Araujo
INF Computação Gráfica
Tópicos Preliminares na Linguagem C
Ponteiros em C.
Orientação a Objetos Classes
Centro Integrado de Tecnologia da Informação
Prof. Msc. Raul Paradeda Aula 3 Fundamentos
Ponteiros.
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.
Matrizes clássicas e vectores em C++
1 Aula 4 Ponteiros. 2003/2004 Programação Orientada para Objectos 2 Instâncias de um programa C++ int i = 10; Nome: i Tipo: int Valor: 10.
Aula 7 Instrução de iteração while. 2003/2004 Introdução à Programação 2 passo [G][G] [¬G][¬G] Início da actividade Fim da actividade Actividade Transição.
2002/2003 Programação Orientada para Objectos 1 Aula 7 - Herança Herança pública: relação é um. A relação tem um. A relação é composto por um. Ponteiros,
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;
Aula 8 Polimorfismo.
Metodologia de Dijkstra para desenvolvimento de ciclos
Programação Baseada em Objectos Desenho de TAD
Aula 6 Instruções de selecção e instruções condicionais.
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.
Aula 9 Fases do desenvolvimento de software UML Diagramas de classes
2002/2003 Programação Orientada para Objectos 1 Aula 10 UML (continuação da aula 9) Diagramas de sequência Diagramas de actividade Desenvolvimento de um.
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.
Introdução a Computação e Cálculo Numérico
Subprogramas São blocos de execução internas a um programa.
Aula prática 13 Orientação a Objetos – C++ Parte 1
Linguagens de Programação
Linguagens de Programação – DEL-Poli/UFRJ Prof. Miguel Campista Linguagens de Programação Prof. Miguel Elias Mitre Campista
Gestão dinâmica de memória
Linguagem de Programação II
Paradigmas e Ferramentas de Desenvolvimento de Software – Revisão da linguagem C++ Lúbia Vinhas DPI - INPE.
+ Curso de C/C++ Aula 6 Instrutor: Luiz Felipe Sotero Material por: Allan Lima
Tipos Abstratos de Dados
Classes, Objetos, Atributos e Métodos JAVA
Compilação de Linguagens OO Marco Simões (macs3) André Santos (alms)
Programação orientada a objectos em C++
Prof. Silvestri – todos os direitos reservados SISTEMAS DISTRIBUIDOS Aula 5 Eduardo Silvestri
2002/2003 Programação Orientada para Objectos 1 Aula 6 Classes que reservam recursos externos Problemas comuns Construtores e destrutores Construção por.
Aula prática 14 Orientação a Objetos – C++ Parte 2
Prof. Gilberto Irajá Müller
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota
Implementação Orientada a Objetos – Aula 05 Construtores e sobrecarga de métodos Prof. Danielle Martin Universidade de Mogi das Cruzes
Estruturas Revisando: tipos de dados simples
Construtores e Destrutores
Copyright 1998, Departamento de Informática da UFPE. Todos os direitos reservados sob a legislação em vigor. Variáveis e métodos estáticos, Passagem de.
Usando vetor e matriz em java
Conteúdos Programáticos Criação de classes em VB Criar Criar Manipular Manipular Tipos de acesso Tipos de acesso Constructores Constructores.
De 19 1 Linguagens de Programação Orientadas a Objetos Pós-Gradução(Lato-Sensu) em Sistemas de Banco de Dados - UFPa Marco Fagundes
BCC221 Programação Orientada a Objetos Prof. Marco Antonio M. Carvalho 2014/2.
Tipos de dados básicos em C++ –Formato geral para declaração de variáveis: ; = ;,,... ; =, = ; –O elemento da declaração indica o tipo de dado usado para.
Programação Orientada a Objetos para Redes de Computadores Prof. Miguel Elias Mitre Campista POO para Redes de Computadores.
Implementação Orientada a Objetos – Aula 04 Métodos, parâmetros e retorno Prof. Danielle Martin/Marcia Bissaco Universidade de Mogi das Cruzes
Programação Orientada a Objetos para Redes de Computadores Prof. Miguel Elias Mitre Campista POO para Redes de Computadores.
Laboratório de Computação Aula 06 e 07 – Implementação de classes Prof. Fábio Dias
Linguagem de Programação – Aula 04 Prof. Me. Ronnison Reges Vidal.
Transcrição da apresentação:

2002/2003 Programação Orientada para Objectos 1 Aula 5 Memória livre e instâncias dinâmicas Criação de instâncias dinâmicas Destruição de instâncias dinâmicas Problemas comuns Matrizes dinâmicas Introdução à memória dinâmica em classes: Construtores e destrutores Problema da cópia e da atribuição

2002/2003 Programação Orientada para Objectos 2 Instâncias (I) Características: Tipo Valor VariáveisConstantes Valor alterávelValor fixo

2002/2003 Programação Orientada para Objectos 3 Instâncias (II) DeclaradasNão-declaradas Características: nome tipo valor Características: sem nome tipo valor AutomáticasEstáticasTemporáriasDinâmicas Construídas quando a instrução de definição é atingida e destruídas no final do respectivo bloco. Construídas no início do programa ou quando a sua instrução de definição é atingida pela primeira vez e destruídas no final do programa. Construídas durante o cálculo de uma expressão e destruídas no final da expressão completa em que são criadas. Construídas e destruídas sob o domínio integral do programador.

2002/2003 Programação Orientada para Objectos 4 int* p = new int(10); int const* p = new int const(10); Criação de instâncias dinâmicas (I) p:int* :int 10 p:int const* :int {frozen} 10

2002/2003 Programação Orientada para Objectos 5 Aluno* pa = new Aluno(Zé, 77); Aluno const* pac = new Aluno const(Zé, 77); Criação de instâncias dinâmicas (II) pa:Aluno* :Aluno nome_ = Zé número_ = 77 pac:Aluno const* :Aluno {frozen} nome_ = Zé número_ = 77

2002/2003 Programação Orientada para Objectos 6 Destruição de instâncias dinâmicas delete pa; delete pac; A partir deste momento pa e pac contêm lixo.

2002/2003 Programação Orientada para Objectos 7 Regras 1. Todas as instâncias dinâmicas têm de ser destruídas uma e uma só vez! 2. Quem constrói, destrói.

2002/2003 Programação Orientada para Objectos 8 Erros mais comuns Fugas de memória: instâncias dinâmicas construídas e nunca destruídas for(int i = 0; i != ; ++i) int* p = new int(i); int const* p = new int const(10); p = new int const(20); Outros casos: double* p = new double(1.1); delete p;

2002/2003 Programação Orientada para Objectos 9 Matrizes dinâmicas: operadores new[] e delete[] int* p = new int[10]; for(int i = 0; i != 10; ++i) p[i] = i; for(int i = 0; i != 10; ++i) cout << p[i] << endl; delete[] p;

2002/2003 Programação Orientada para Objectos 10 E quando não há memória? Lançamento de excepção Alternativa (a evitar): #include … int* p = new(nothrow) int(20); if(p == 0) { cerr << Não havia memória! << endl; … }

2002/2003 Programação Orientada para Objectos 11 Memória dinâmica em classes (I) class PilhaDeInt { public: typedef int Item; … private: static int const capacidade_inicial = 32; int capacidade_actual; Item* itens; int número_de_itens; bool cumpreInvariante() const; };

2002/2003 Programação Orientada para Objectos 12 Memória dinâmica em classes (II) Construtor: inline PilhaDeInt::PilhaDeInt() : capacidade_actual(capacidade_inicial), itens(new Item[capacidade_actual]), número_de_itens(0) { assert(cumpreInvariante()); }

2002/2003 Programação Orientada para Objectos 13 Memória dinâmica em classes (III) void PilhaDeInt::põe(Item const& novo_item) { assert(cumpreInvariante()); if(número_de_itens == capacidade_actual) { Item* novos_itens = new Item[capacidade_actual * 2]; for(int i = 0; i != número_de_itens; ++i) novos_itens[i] = itens[i]; capacidade_actual *= 2; delete[] itens; itens = novos_itens; } itens[número_de_itens] = novo_item; ++número_de_itens; assert(cumpreInvariante()); }

2002/2003 Programação Orientada para Objectos 14 Memória dinâmica em classes (IV) Evitar fuga de memória: é necessário um destrutor inline PilhaDeInt::~PilhaDeInt() { assert(cumpreInvariante()); delete[] itens; }