Programação Orientada a Objetos

Documentos relacionados
Carlos Eduardo Batista. Centro de Informática - UFPB

Programação Orientada a Objetos

Programação Orientada a Objetos CLASSES E OBJETOS

Técnicas de Programação:

Carlos Eduardo Batista. Centro de Informática - UFPB

Programação Orientada a Objetos HERANÇA E COMPOSIÇÃO

Fundamentos de Programação

Fundamentos de Programação 2

Linguagem de Programação I

Linguagem de Programação III

Namespaces, Classes e Métodos.

Programação Orientada a Objetos Aula I Declaração de classes, métodos construtores. Prof.: Bruno E. G. Gomes IFRN

Programação Orientada a Objetos

Classes, Métodos e Propriedades

Linguagem de Programação II Implementação

Linguagem de Programação I

Classes e Objetos. Sintaxe de classe em Java

Linguagem de Programação C++

Programação Orientada a Objetos. Métodos e Atributos. Métodos. Métodos. Alexandre César Muniz de Oliveira. Parte III

Tipos Básicos. Operadores de Incremento e Decremento. Operador Sizeof. Estruturas de Dados Aula 2: Estruturas Estáticas

Estruturas de Dados Aula 2: Estruturas Estáticas. Tipos Básicos. Quantos valores distintos podemos representar com o tipo char?

Estruturas de Dados Aula 2: Estruturas Estáticas 02/03/2011

Linguagem de Programação Orientada a Objeto Construtores e Sobrecarga

C com introdução a OO

ANHANGUERA ESTRUTURA DE DADOS AULA 04 MATRIZES, LISTAS E ALOCAÇÃO DINÂMICA. Prof. Thomás da Costa

LINGUAGEM DE PROGRAMAÇÃO C++ CLASSES E OBJETOS

Implementando classes em C# Curso Técnico Integrado em Informática Fundamentos de Programação

Classes e Encapsulamento

Programação Orientada a Objetos

ORIENTAÇÃO A OBJETOS SISTEMAS DE INFORMAÇÃO DR. EDNALDO B. PIZZOLATO

Programação Orientada a Objetos HERANÇA E COMPOSIÇÃO

# Estrutura de Dados # Aula - Revisão de C/C++ na Prática. Prof. Leinylson Fontinele Pereira

PCS3111. Laboratório de Programação Orientada a Objetos para Engenharia Elétrica. Aula 6: Polimorfismo

Programação Orientada a Objetos HERANÇA E COMPOSIÇÃO

Fundamentos de Programação

Laboratório de programação II

INF1636 PROGRAMAÇÃO ORIENTADA A OBJETOS

DEFINIÇÃO DE CLASSES EM C++

Introdução à Programação. Encapsulamento e Herança

Programação Orientada a Objetos HERANÇA E COMPOSIÇÃO

Programação Orientada a Objetos. Aula 1.9 this e static. Prof. Bruno Moreno

INF1337 LINGUAGEM DE PROGRAMAÇÃO ORIENTADA A OBJETOS

LÓGICA DE PROGRAMAÇÃO PARA ENGENHARIA

Sobrecarga de Operadores

Programação Orientada a Objetos para Redes de Computadores

Programação Orientada a Objetos para Redes de Computadores. Empacotador de Pré-processador. Empacotador de. Primeiro Exemplo Usando Classes em C++

Exercícios... Capítulo 15. if62c. prof. Robinson Vida Noronha. Monday, March 23, 15

Introdução ao C++ Ambientes de Desenvolvimento Avançados. 2 de Outubro de 2002 ADA / DEI - ISEP 2002/2003 1

Relacionamentos entre objetos

DEM-Sec.Sistemas Tipos Abstractos de Informação 2006 / Programação

Linguagem de Programação C++ Se analisarmos a manipulação do objeto c, efetuada no exercício anterior, e compararmos com o que acontece em um banco

ANHANGUERA ESTRUTURA DE DADOS AULA 06 LISTAS CIRCULARES E DUPLAMENTE ENCADEADAS. Prof. Thomás da Costa

Encapsulamento e Métodos (Construtores e Estáticos) João Paulo Q. dos Santos

Aula 26: Estruturas heterogêneas

Física Computacional 7 Classes

Paradigmas de Programação. Java First-Tier: Aplicações. Orientação a Objetos em Java (I) Nomenclatura. Paradigma OO. Nomenclatura

Linguagem de Programação III

CIÊNCIA DA COMPUTAÇÃO - LINGUAGEM DE PROGRAMAÇÃO II REVISÃO POO

Fábio da Fontoura Beltrão Felipe Augusto Chies Lucas Fialho Zawacki Marcos Vinicius Cavinato Matheus de Carvalho Proença

Carlos Eduardo Batista. Centro de Informática - UFPB

Conceito de classe em C++

PCS Laboratório de Programação Orientada a Objetos 1a. Prova. 02 de Setembro de 2015

Estruturas de Dados. Módulo 4 Funções. 9/8/2005 (c) Dept. Informática - PUC-Rio 1

Métodos Computacionais

Esta categoria mais geral, à qual cada objeto pertence, denominamos de classe; IFSC/POO + JAVA - prof. Herval Daminelli

Linguagens de Programação Departamento de Engenharia Eletrônica e de Computação - DEL-Poli/UFRJ Prof.: Miguel Elias Mitre Campista

Linguagem C Princípios Básicos (parte 1)

Aula 27: Estruturas heterogêneas e alocação dinâmica

Orientação a objetos. Programação. Orientada a Objetos. Orientação a objetos. Orientação a objetos. Abstração e encapsulamento

Programação Avançada C++ Slide 12 Nielsen Castelo Damasceno

Interfaces. Universidade Católica de Pernambuco Ciência da Computação. Prof. Márcio Bueno.

3) A função de Fibonacci, F: N N, no conjunto dos naturais, é definida recursivamente por F(0) = 0, F(1) = 1, e F(n) = F(n-1) + F(n-2) para n > 1

Parte IV. Linguagens de Programação. Relembrando da Última Aula... Empacotador de Préprocessadores. Primeiro Exemplo Usando Classes em C++

Linguagens de Programação

ESTRUTURA COM DECISÃO COMPOSTA

Instituto de Informática Estrutura de Dados II

Trabalho Linguagem e Programação de Compiladores

The Cyclops Project. Introdução: C++

Algoritmos e Programação 2. Objetos e Classes em Java. Classes. Revisão. Definições de classes incluem (geralmente):

Programação Orientada a Objetos OUTROS MECANISMOS

Estrutura de dados 1. Ponteiros

Conceitos de Programação Orientada a Objetos

Introdução a Programação. Tipos Estruturados de Dados

LÓGICA DE PROGRAMAÇÃO PARA ENGENHARIA ESTRUTURA COM DECISÃO MÚLTIPLA. Prof. Dr. Daniel Caetano

Programação Estruturada e Orientada a Objetos. Objetos e Métodos

Programação com Objectos. Processamento de Dados I. 2. Classes, Atributos e Métodos

Aula 10 Comandos de Repetição

Computação L2. Linguagem C++ Observação: Material Baseado na Disciplina Computação Eletrônica.

Linguagens de Programação

Introdução à linguagem C++

LÓGICA DE PROGRAMAÇÃO PARA ENGENHARIA

Classes e Objetos. Prof. Fernando V. Paulovich 9 de agosto de 2010

CES-11. Algoritmos e Estruturas de Dados. Carlos Alberto Alonso Sanches

C++ - Funções. Forma geral das funções C++

Programação científica C++

Prof. Jhonatan Fernando

Introdução à Programação. Conceitos Básicos de Orientação a Objetos

Programação Orientada a Objetos para Redes de Computadores

Introdução à Programação

Programação Orientada por Objectos em C++ (alguns conceitos) Algoritmos e Estruturas de Dados 2009/2010. Três maneiras de passar parâmetros:

Transcrição:

Programação Orientada a Objetos Classes e Objetos Renato Dourado Maia Universidade Estadual de Montes Claros Engenharia de Sistemas

Onde Estamos? Da Unidade III Classes e Objetos, já foram trabalhados os seguintes tópicos: Implementando classes e objetos em C++. Atributos e métodos: controle de acesso e encapsulamento. Inicialização e destruição. Sobrecarga de funções e argumentos default. Constantes. Começaremos a ver na aula de hoje: Funções inline e controle de visibilidade. 2/31

Funções inline Uma das maneiras que a linguagem C possui para permitir uma maior eficiência do código é a u- tilização de macros. Uma macro permite que algo que seria feito por meio de uma chamada a uma função, com todo o custo associado (criando os argumentos e copiando os seus valores, fazendo um CALL em assembly, retornando o valor e efetuando um RE- TURN em assembly), seja feito pela simples substituição de código pelo pré-processador. 3/31

Macros Exemplo de macro: #define F(x) (x + 1) Utilização da macro: F(1) Código expandido pelo pré-processador: (1+1) 4/31

Macros Problema 1: #define F (x) (x + 1) F(1) (x) (x + 1)(1) Problema 2: #define CUBO(x) x*x*x. CUBO(a+b) a+b*a+b*a+b = a + 2*b*a + b Solução Problema 2 parênteses: #define CUBO(x) (x)*(x)*(x). CUBO(a+b) (a+b)*(a+b)*(a+b) 5/31

Macros Problema 3: não se pode implementar uma função membro de uma classe como uma macro! class X { int i; public: #define VAL(X::i) // Error Problemas adicionais: macros não permitem variáveis locais, blocos, verificação de tipos, chamadas recursivas, etc. Solução para todos os problemas das macros: funções inline! 6/31

Funções inline O especificador inline é uma dica para o compilador de que ele deve tentar expandir o código para a função inline, tal como a macro fazia, evitando o overhead associado à chamada à função. Todo o processo estará sobre controle do compilador. Não se pode garantir que toda chamada a uma função inline vai ser realmente gerada inline... 7/31

Funções inline Para tornar a geração de código inline possível na ausência de compiladores e links "com esperteza fora do padrão", a definição e não somente a declaração, de uma função inline deve estar no escopo da chamada à função. inline int par (int num) {return((num%2==0)? num : num+1);} inline float cubo (float x) {return x*x*x;} inline float dobro (float x) {return 2*x;} 8/31

Funções inline Toda função definida no corpo de uma classe será inline: class Circulo{ private: int raio; Ponto centro; public: Circulo(Ponto ce, int ra): centro(ce), raio(ra){ } float area( ) const { return PI*raio*raio; } }; Circulo::Circulo() e Circulo::area() são inline! 9/31

Funções inline A utilização de funções inline se justifica para funções pequenas, tais que o overhead da chamada seja maior do que o causado pela duplicação de código. Um exemplo são as chamadas funções de acesso a atributos: class Access { int i; public: int get() const { return i; } void set(int ii) { i = ii; } }; 10/31

Funções inline É comum a utilização de funções sobrecarregadas para acessar/modificar os atributos: class Rectangle { int wide, high; public: Rectangle(int w = 0, int h = 0) : wide(w), high(h) {} int width() const { return wide; } // Read void width(int w) { wide = w; } // Set int height() const { return high; } // Read void height(int h) { high = h; } // Set }; int main() { Rectangle r(19, 47); r.height(2 * r.width()); r.width(2 * r.height()); } ///:~ 11/31

Funções inline A utilização de funções inline na definição da classe faz com que a sua interface fique poluída com detalhes de implementação que deveriam estar sendo escondidos do usuário da classe... Para evitar isso e ainda poder utilizar funções inline, funções membro inline podem ser definidas fora da definição da classe, mas ainda no arquivo.h. 12/31

Funções inline class Rectangle { int width, height; public: Rectangle(int w = 0, int h = 0); int getwidth() const; void setwidth(int w); int getheight() const; void setheight(int h); }; inline Rectangle::Rectangle(int w, int h) : width(w), height(h) {} inline int Rectangle::getWidth() const { return width;} inline void Rectangle::setWidth(int w) { width = w;} inline int Rectangle::getHeight() const { return height;} inline void Rectangle::setHeight(int h) { height = h;} 13/31

Variáveis static int count ( ) { static int num = 0; // inicializada uma única vez int x = 0; // inicializada várias vezes num++; return num; } A inicialização da variável local num é feita somente na primeira vez em que a função é chamada (na primeira vez em que o programa passa pela declaração da variável) e, portanto, o seu valor é mantido de uma chamada para outra: isso significa que a variável static não é criada na pilha, mas sim na área de variáveis estáticas do programa. 14/31

Objetos static O construtor de um objeto static é chamado apenas uma vez, no momento em que a thread de e- xecução executa pela primeira vez o código da função. O destrutor de um objeto static somente é executado ao final do programa. O construtor de um objeto global é executado antes do main() começar a sua execução. O destrutor de um objeto global é executado somente ao final da execução do programa. 15/31

#include <iostream> using namespace std; Objetos static class Obj { char c; // Identifier public: Obj(char cc) : c(cc) { cout << "Obj::Obj() for " << c << endl; } ~Obj() { cout << "Obj::~Obj() for " << c << endl; } }; Obj a('a'); // Global void f() { static Obj b('b');} void g() { static Obj c('c');} int main() { cout << "inside main()" << endl; f(); // Calls static constructor for b // g() not called, c not constructed cout << "leaving main()" << endl; } ///:~ 16/31

Atributos static Atributos estáticos servem para implementar o conceito de Atributo de Classe: Deseja-se que todos os objetos de uma determinada classe compartilhem um certo dado. class Ponto{ int x, y; static int cont; //... }; Ponto Ponto_1, Ponto_2; 17/31

Atributos static Ponto_1 x y cont Ponto_2 x y cont 18/31

Atributos static O atributo estático pode ser acessado por funções membro ou por outras partes do programa, quando público. Ele pode, inclusive, ser acessado antes da existência de qualquer objeto da classe, já que o espaço de memória que ele ocupa é reservado antes da criação de qualquer objeto. 19/31

Atributos static Todo membro estático deve ser redeclarado fora da classe, mas dentro do escopo do arquivo da classe, ponto em que ele pode ser inicializado. Não se pode inicializar um membro estático não constante dentro da definição da classe! class Ponto{ int x, y; static int cont; //... }; int Ponto :: cont = 7; Se o atributo static for constante, pode ser inicializado na própria classe class Buffer{ static const int buffsize = 256; char buff[buffsize]; //... }; 20/31

Funções Membro static Funções membro estáticas são um tipo de função membro especial cujas principais características são: Podem ser chamadas sem estar associadas a um objeto da classe. Não podem manipular membros não estáticos da classe, ou seja, são criadas para manipular os atributos estáticos de uma classe! 21/31

#include <iostream.h> class Ponto{ int x, y; static int cont; public: Ponto( ){ cont ++;} ~Ponto(); static void mostra () { cout << cont << " "; } }; int Ponto::cont = 0; Ponto :: ~Ponto () { Funções Membro static int main() { Ponto :: mostra(); // Sem objeto declarado Ponto p1; p1.mostra(); { Ponto p2; p2.mostra(); } Ponto p2; p2.mostra(); return 0; } cout << "Destruindo Ponto " << cont << endl; cont --; } 22/31

Padrão de Projeto Singleton Objetivo: criar uma classe que possa possuir apenas uma instância que esteja disponível globalmente no código. Motivação: há várias situações em que é útil criar uma classe que pode possuir apenas uma instância. Exemplos: deve existir apenas um sistema de arquivos, apesar de poderem existir várias impressoras, deve e- xistir apenas um spool de impressão, apenas um conversor A/D para um filtro digital, etc. 23/31

Padrão de Projeto Singleton A instância global deve ser facilmente localizável, mas criar um ponteiro global não é recomendável: Poluição do namespace global. Objetos globais são criados antes de se entrar no main, o que é um problema nos casos em que alguma informação adicional seja necessária para a criação do Singleton... 24/31

Padrão de Projeto Singleton O construtor da classe é privado, de modo que a criação da instância única é feita no método Instance(). Instance() é um método de classe static e, portanto, pode ser chamado antes mesmo da existência do objeto. Uma vez que a instância exista, Instance() simplesmente retorna um ponteiro para ela. 25/31

Padrão de Projeto Singleton Singleton static InstancePtr static Instance( ) Singleton( ) return InstancePtr 26/31

Padrão de Projeto Singleton Exemplo: considere uma classe que encapsula um buffer de teclado, armazenando todas as teclas pressionadas pelo usuário. Pode-se garantir que existirá uma única instância do buffer, tornando a classe um Singleton. KbdBuffer static InstancePtr : KbdBuffer* static Instance () : KbdBuffer* KbdBuffer () getch () : char return InstancePtr 27/31

Exemplo Singleton class KbdBuffer { public: char getch(); // reads from the buffer static KbdBuffer *Instance(); // returns pointer to instance private: KbdBuffer(); // the constructor static KbdBuffer *instanceptr; // pointer to instance }; KbdBuffer *KBdBuffer::instancePtr = 0; // reset pointer KbdBuffer *KbdBuffer::Instance () { if (instanceptr == 0) // if pointer is null... instanceptr = new KbdBuffer; //... create instance return(instanceptr) } Utilização: char foo = KbdBuffer::Instance() -> getch(); 28/31

Singleton Consequências Como existe apenas uma instância da classe, o programador tem controle sobre como os clientes a acessam! Reduz a poluição do namespace global, pois apenas o nome da classe entra nele! Exemplos interessantes são as classes Singleton criadas por Wizards na programação com a MFC no Visual C++. 29/31

Por enquanto, isso é tudo, pessoal! 30/31

Importante Esta apresentação é uma adaptação do material originalmente desenvolvido pelo professor Renato Cardoso Mesquita, do Departamento de Engenharia Elétrica da Universidade Federal de Minas Gerais. http://www.cpdee.ufmg.br/~renato/ 31/31