Programação Orientada a Objetos C++



Documentos relacionados
Linguagem de Programação III

Prof. Jhonatan Fernando

Um objeto é uma instância de uma 'classe'. Você define uma classe utilizando o trecho de código abaixo;

Análise e Projeto Orientados por Objetos

UM ESTUDO PARA A EVOLUÇÃO DO PHP COM A LINGUAGEM ORIENTADA A OBJETOS

Introdução a POO. Introdução a Linguagem C++ e POO

Linguagem de Programação III Herança

Polimorfismo. Prof. Leonardo Barreto Campos 1

Comandos de repetição For (inicialização; condição de execução; incremento/decremento) { //Código }

Análise de Programação

Computação II Orientação a Objetos

Material de Apoio 5. int getres() { return res; O que estas classes possuem em comum? 1) 2) 3)

Introdução à Programação com Classes em C++

Programação por Objectos. Java

Linguagem de Programação JAVA. Técnico em Informática Professora Michelle Nery

Encapsulamento de Dados

Orientação a Objetos e a Linguagem Java

Programação por Objectos. Java

Programação de Computadores - I. Profª Beatriz Profº Israel

Capítulo 4. Packages e interfaces

Linguagem de Programação III

Orientação a Objetos. Thiago Messias Evangelista UESC Universidade Estadual de Santa Cruz Version LibreOffice Productivity Suite

Técnicas de Programação II

UML: Diagrama de Casos de Uso, Diagrama de Classes

Implementando uma Classe e Criando Objetos a partir dela

Programação Orientada a Objetos em Java

Módulo 02 Programação Orientada a Objetos. Última atualização: 07/06/2010

Aula 2. Objetivos. Encapsulamento na linguagem Java; Utilizando a referência this.

Algoritmos e Programação

POO Programação Orientada a Objetos. Classes em Java

Noções sobre Objetos e Classes

Prof. Me. Marcos Echevarria

Herança. Algoritmos e Programação II. Aula 5 Herança

Introdução a Computação

Módulo 06 Desenho de Classes

ORIENTAÇÃO A OBJETOS. Professora Lucélia Oliveira

Programação Orientada a Objetos (DPADF 0063)

Programando em C++ Histórico da Linguagem C

Reuso com Herança a e Composiçã

Templates. Introdução. Motivação. Thiago Rosso Adams

Esta apresentação ensinará os conceitos de Orientação a Objetos com C++, do mais básico para o mais avançado. É suposto que o aluno já tenha

Orientação a Objeto e UML Questões 2014 Prof. Felipe Leite

EXERCÍCIOS SOBRE ORIENTAÇÃO A OBJETOS

LINGUAGEM. Silvio do lago Pereira

Programação Orientada a Objetos

Orientação a Objetos

Curso Adonai QUESTÕES Disciplina Linguagem JAVA

PCS LABORATÓRIO DE PROGRAMAÇÃO ORIENTADA A OBJETOS PARA A ENGENHARIA ELÉTRICA

Introdução à Programação. Interface, Polimorfismo e Dynamic Binding

Trabalho 3: Agenda de Tarefas

Herança e Polimorfismo de Inclusão

Prova de Java. 1) Copie o programa abaixo no eclipse e complete-o, utilizando os conceitos aprendidos durante o curso. (4 pontos)

CONCEITOS DE LINGUAGEM DE PROGRAMAÇÃO CARACTERÍSTICAS. João Gabriel Ganem Barbosa

Programação Orientada a Objeto

Parte I. Orientação a objetos no PHP. Contato: <lara.popov@ifsc.edu.br> Site:

Computação II Orientação a Objetos

Desenvolvimento OO com Java Orientação a objetos básica

Introdução à orientação a objetos. João Tito Almeida Vianna 25/05/2013

Exemplo 1. Um programa que cria uma instância de uma classe que herda da classe Frame

Programação Orientada a Objetos (DPADF 0063)

C++ e Orientação a Objetos

PROGRAMAÇÃO ORIENTADA A OBJETO EM PHP

ITENS FUNDAMENTAIS. Profª Angélica da Silva Nunes

Profº. Enrique Pimentel Leite de Oliveira

ARRAYS. Um array é um OBJETO que referencia (aponta) mais de um objeto ou armazena mais de um dado primitivo.

Herança. Alberto Costa Neto DComp - UFS

MODELAGEM VISUAL DE OBJETOS COM UML DIAGRAMA DE CLASSES.

Programação aplicada de computadores Andréa Maria Pedrosa Valli

Relacionamentos entre objetos. Relacionamentos entre objetos. Relacionamentos entre objetos. Relacionamentos entre objetos

Linguagem de Programação

Programação Orientada a Objetos Prof. Rone Ilídio UFSJ/CAP

Java. Marcio de Carvalho Victorino

Linguagens de Programação Aula 10

Programação por Objectos. Java

Programação Orientada a Objetos. Encapsulamento

Lista de Contas: Assinatura. Lista de Contas. Listas de Contas: Descrição. Listas de Contas: Descrição. Listas de Contas: Descrição

insfcanceof new public switch transient while byte continue extends for int null

INTRODUÇÃO AO C++ SISTEMAS DE INFORMAÇÃO DR. EDNALDO B. PIZZOLATO

Módulo 07 Características Avançadas de Classes

PHP Orientado a Objetos Análise e Desenvolvimento de Sistemas Prof. Marcelo da Silveira Siedler siedler@gmail.com

Exercícios de Revisão Java Básico

Algoritmos e Programação II. Sobrecarga

FUNDAMENTOS DA ORIENTAÇÃO A OBJETOS- REVISÃO

Sintaxe Geral Tipos de Dados. Prof. Angelo Augusto Frozza, M.Sc.

PHP INTRODUÇÃO CLASSES E OBJETOS

Membros de classe e de instância. PARTE III: Java e OO - detalhes. Exemplo 1: método. Exercício. Exemplo 1 corrigido

Algoritmos e Técnicas de

AULA 4 VISÃO BÁSICA DE CLASSES EM PHP

Java 2 Standard Edition Como criar classes e objetos

Programação Orientada a Objetos em Java. Herança

Linguagens de Programação

Programação Estruturada. Programação Estruturada. Idéias Básicas da Programação Estruturada

ALGORITMOS MEMÓRIA, VARIÁVEIS E CONSTANTES, OPERADORES Prof. Angelo Augusto Frozza, M.Sc. frozza@ifc-camboriu.edu.br

UNIVERSIDADE ESTADUAL PAULISTA

Introdução à Programação Orientada a Objetos com C++ Antonio Mendes da Silva Filho

LINGUAGEM ORIENTADA A OBJETOS

Construção de novas Classes em Java. Classes Atributos Métodos Herança...

Linguagens de Programação

Introdução a Java. Hélder Nunes

Transcrição:

Programação Orientada a Objetos em C++

Sumário Histórico Comparação com Java Encapsulamento Tratamento de classes e objetos Herança Polimorfismo

Histórico Desenvolvido por Bjarne Stroustrup dos Bell Labs na década de 80; O C++ é considerada uma linguagem de médio nível; Bjarne inicialmente a chamou de C com classes;

Histórico Ao longo dos cinco anos posteriores foram acrescentado novos recursos como herança múltipla até que 1990 foi lançado o livro The Annotated C++ Reference Manual; Em 1990 houve a criação da Standard Template Library(STL), por Alexander Stapanov. Em 1993 a linguagem foi padronizada pelo comitê ANSI/ISO

Encapsulamento O encapsulamento é uma assinatura das linguagens orientadas a objetos; Em C++ este se dá através de três palavras- chaves: public, protected e private; Em C++ existe a palavra reservada friend que permite que métodos fora da classe acesse diretamente atributos privados;

Encapsulamento Exemplo: struct Data { friend int manipula(c); public: //declarando métodos ou atributos públicos private: // declarando métodos ou atributos privados int x; // atributo privado }; Int manipula(data data) { data.x++; // isso é permitido a um método amigo! };

Encapsulamento C++ vs Java Em Java public class Teste{ private boolean var1; private int num; public void metodo() {...} } Em C++ struct Teste{ public: void metodo(void); void exibe(void); private: int var1; char var2; };

Tratamento de Classes e Objetos Uma classe em C++ é uma estrutura que contém: Dados membros,, representando atributos; Funções membros,, representando métodos. Ao contrário da linguagem C, além dos campos de dados, a linguagem C++ aceita também a de- claração de funções dentro de uma estrutura.

Tratamento de Classes e Objetos //exemplo de uma classe declarada como estrutura struct Data { unsigned short data; void define(short d,short m,short a); void exibe(void); };

Tratamento de Classes e Objetos Por padrão quando você declara dados membros (atributos) e funções membros (métodos) na classe criada a partir de uma estrutura estes campos são definidos como public. Por isso, se quisermos evitar o acesso indevido ao atributo data da classe anterior precisamos alterá-la da seguinte forma:

Tratamento de Classes e Objetos //classe anterior com modificador de acesso ao atributo struct Data { void define(short d,short m,short a); void exibe(void); private: unsigned short data; };

Tratamento de Classes e Objetos Em C++ temos também a palavra reservada class para a declaração de classes. A diferença é que uma classe definida com essa palavra torna por default todos os campos com restrição de acesso private.

Tratamento de Classes e Objetos // por default o dado membro data está como private class Data { unsigned short data; public: void define(short d,short m,short a); void exibe(void); };

Tratamento de Classes e Objetos // padrão recomendado. struct Data { public: void define(short d,short m,short a); void exibe(void); private: unsigned short data; };

Tratamento de Classes e Objetos Objetos de uma classe em C++ são criadas de duas formas: estáticas ou dinâmicas. Na forma estática o objeto é declarado como uma variável que tem como tipo básico sua classe veja o exemplo: Data hoje; // objeto hoje do tipo Data;

Tratamento de Classes e Objetos Já na forma dinâmica o objeto é declarado como um ponteiro do tipo da classe, no entanto esse deve usar a palavra reservada new vejamos o exemplo: Data *amanha; // declara o ponteiro; amanha = new Data; //instanciando o ponteiro;

Tratamento de Classes e Objetos Para acessar os métodos (funções membros) ou atributos públicos de um objeto usamos os operadores (.) e (->). Exemplo: hoje.define(22,08,2011); // ponto para instâncias amanha->define(23,08,2011); // seta para ponteiros

Tratamento de Classes e Objetos Construtores e Destrutores da Classe Em C++ além dos construtores como conhecemos em Java temos também os destrutores, os construtores são idênticos a Java, porém os destrutores são declarados da mesma forma que os construtores com o sinal (~) na frente.

Tratamento de Classes e Objetos Exemplo: Class Pilha { Public: Pilha(); //construtor ~Pilha(); //destrutor };

Tratamento de Classes e Objetos C++ vs Java Em Java public class Data{} Possui construtor; Não possui destrutor; declarando classes Em C++ struct Data{}; ou class Data{}; Possui construtor; Possui destrutor;

Tratamento de Classes e Objetos C++ vs Java declarando atributos Em Java private short data; Em C++ private: unsigned short data;

Tratamento de Classes e Objetos C++ vs Java declarando métodos Em Java public void exibe(void) {...} obs.: Os métodos obrigatoriamente deve estar dentro da classe. Em C++ public: void exibe(void); obs.: preferencialmente os protótipos são declarados no escopo da classe.

Herança Herança simples; Modos de derivação; Herança Múltipla; Herança virtual;

Herança Herança simples A subclasse ou classe derivada, herda automaticamente todos os membros da sua classe base (superclasse). Exemplo: class Ponto { public: ponto(int x, int y); private: int x; int y; };

Herança Herança simples Para indicar que a classe Pixel é derivada da classe Ponto, escrevemos Pixel : Ponto. Exemplo: class Pixel : Ponto { // Pixel é derivada de Ponto! public: pixel (int x, int y, int c); void acende(void); void apaga(void); private: int cor; };

Herança Modos de derivação Herança pública Herança protegida Herança privada

Herança Modos de derivação Sintaxe básica class <derivada> : <modo> <base> { };

Herança Herança múltipla Se um mesmo nome de membro for usado em duas ou mais classes bases, então será preciso empregar o operador de resolução de escopo para resolver o conflito ::

Herança Herança múltipla Exemplo: Class A { Public: Void ma(){...} Protected: Int x; }; Class B { Public: Void mb(){...} Protected: Int x; };

Herança Herança múltipla Exemplo: class C : public B, public A { Public void mc(); }; void C :: mc() { int i; ma(); mb(); i = A :: x + B :: x; // resolução de conflito f(i); }

Herança Herança virtual Considere a derivação da classe D ilustrada a seguir: A B C D

Herança Herança virtual Duplicidade na herança; exemplo: void main(void) { D d; d.a=0; // erro: ambíguo d.b::a = 1; //O, acessa cópia herdada de B d.c::a = 2; //O, acessa cópia herdada de C }

Herança Herança virtual Através da herança virtual, entretanto, é possível especificar que haja apenas uma ocorrência dos dados herdados da classe base: Exemplo: class B : virtual public A {...}; class C : virtual public A {...}; class D : public B, public C {...}; void main() { D d; d.a=0; // Ok, não há mais ambiguidade }

Herança C++ vs Java Em Java herança simples public class D extends B {...} herança múltipla não existe usa o recurso de interface para a multiplicidade Em C++ herança simples class D : public B {...}; herança múltipla class D : public B, public C {...};

Polimorfismo C++ suporta diversos tipos de polimorfismos, sejam estáticos (resolvidos em tempo de compilação de código) ou dinâmico (resolvidos em tempo de execução de código).

Polimorfismo Em C++, o polimorfismo é obtido através de funções virtuais. Se uma classe uma classe base B e sua derivada D possuem ambas uma função virtual f(), do mesmo tipo, então uma chamada a f() a partir de um objeto da classe derivada estará invocando D::f(). B::f() foi sobrescrito por D::f().

Polimorfismo Exemplo: class Componente { public: virtual void exibe() const {cout<< Componente::exibe() << endl; } };

Polimorfismo class Botao: public Componente{ public: virtual void exibe() const{ cout<< Botao:: exibe() <<endl; } }; class Janela: public Componente{ public: virtual void exibe() const{ cout<< Janela:: exibe() <<endl; } };

Polimorfismo Ao encontrar uma chamada a um método virtual, o compilador terá que aguardar até o momento da execução para decidir qual o método correto a ser chamado. Quando trabalhamos com ponteiros para objetos de classes derivadas, é importante que os destrutores também sejam declarados como virtuais.

Polimorfismo class Componente{ public: virtual ~Componente(); }; class Botao: public Componente{ public: ~Botao(); }; void main(void){ Botao *ok= new Botao; Componente *c=ok; delete c; }

Polimorfismo Nem construtores nem métodos estáticos podem ser declarados virtuais!

Polimorfismo C++ vs Java Em Java sobrecarga de métodos; Métodos sobrescritos; Execução dinâmica; Em C++ sobrecarga de métodos; Métodos sobrescritos; Sobrecarga de operadores; Execução dinâmica; Execução estática.

Obrigado!!

Referências http://www.cprogramming.com; http://pt.wikipedia.org/wiki/c%2b%2b; www.apostilando.com (Apostila de C++); C++ aprenda em 24 horas (Jesse Liberty); Estrutura de dados e algoritmos em c++ (Adam Drozdek);