1/24. Classes. Introdução

Documentos relacionados
Paradigmas de Linguagens de Programação. Tipos de Dados Abstratos

INF 1620 P2-01/11/03 Questão 1 Nome:

Programação I Funções. Prof. Carlos Alberto

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

2. Considerando as seguintes declarações de uma lista encadeada

Programação Orientada a Objetos para Redes de Computadores

Estrutura de Dados Funções e Procedimentos

E N C A P S U L A M E N T O P R O F. M E. H É L I O E S P E R I D I Ã O

Capítulo 5. Nomes, Vinculações e Escopos

Linguagens de Programação

LINGUAGEM C: FUNÇÕES FUNÇÃO 04/07/2017. Funções são blocos de código que podem ser nomeados e chamados de dentro de um programa.

INF P4-12/12/09 Questão 1 Nome:

Classes e Encapsulamento

Programação Estruturada Prof. Rodrigo Hausen Agregados de Dados Heterogêneos (structs)

Variáveis primitivas e Controle de fluxo

Motivação. Estrutura de Dados. Motivação. Motivação. Por que estudar os tipos de dados? Duas são as principais preocupações em um projeto de software

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

Singleton. Como a maioria dos programadores organizaria o código para acessar informação de configuração? Eis um exemplo:

Módulo 5. Programação Orientada a Objetos. Programação Orientada a Objetos I Java (Rone Ilídio)

Algoritmos e Estruturas de dados

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

Estruturas de Dados. Módulo 11 Pilhas. 9/8/2005 (c) Dept. Informática - PUC-Rio 1

INF1007 Programação 2 9 Pilhas. (c) Dept. Informática - PUC-Rio 1

Introdução a classes e objetos. Copyright 2006 by Pearson Education

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

Linguagens de Programação Aula 11

Singleton e Adapter. Professor: Nazareno Andrade (baseado no material de Hyggo Almeida e Jacques Sauvé)

LINGUAGEM C: FUNÇÕES FUNÇÃO 08/01/2018. Funções são blocos de código que podem ser nomeados e chamados de dentro de um programa.

1. Selecione a Estrutura de Dados que melhor representa os diretórios ou pastas de arquivos do computador.

INF 1620 P2-23/10/04 Questão 1 Nome:

13/11/15. Incrementando C: C++ E na especificação de BigInt... Arquitetura da solução exemplo. O arquivo de declarações. Explorando a classe BigInt

Fundamentos de Programação

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

Fundamentos de Programação 2

Tipos Abstratos de Dados TADs

Paradigmas de Linguagens de Programação. Suporte para Programação Orientada a Objeto

Programação Orientada a Objetos para Redes de Computadores

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

Linguagem de Programação Orientada a Objeto Abstração - Encapsulamento

INF 1007 Programação II

Algoritmos e Estruturas de Dados I (DCC/003) Funções

Material sobre Funções AEDS 1

Linguagens de Programação Aula 12

Prof. Jesus José de Oliveira Neto

Programação Orientada a Objetos

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

Revisão: Tipo Abstrato de Dados Recursividade

Algoritmos e Estruturas de Dados I. Universidade Federal de São João del-rei Pedro Mitsuo Shiroma Sala 119 Bloco 3

Construtores e Especificadores de Acesso

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

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

Linguagem C: funções e ponteiros. Prof. Críston Algoritmos e Programação

Estruturas de Dados. Módulo 12 - Filas. 9/8/2005 (c) Dept. Informática - PUC-Rio 1

INF 1620 P4-13/12/01 Questão 1 Nome:

Linguagem de Programação C++

UNIVERSIDADE FEDERAL FLUMINENSE INSTITUTO DE COMPUTAÇÃO DEPARTAMENTO DE CIÊNCIA DA COMPUTAÇÃO

Programação Java (nível intermediário) 4. Polimorfismo

Ponteiros de Variáveis

Linguagem de Programação C++

Nomes, vinculações e escopos

Departamento de Informática - PUC-Rio INF 1007 Programação 2 P3 26/11/2010

Classes, Métodos e Propriedades

ANHANGUERA ESTRUTURA DE DADOS AULA 02 O QUE É ESTRUTURA DE DADOS? Prof. Thomás da Costa

Instituto de C. Filas. Luis Martí Instituto de Computação Universidade Federal Fluminense -

Departamento de Informática - PUC-Rio INF 1007 Programação 2 P3 23/06/2010

Fundamentos de Programação

3. Linguagem de Programação C

Nomes, vinculações e escopos

Programação de Computadores I Introdução ao C PROFESSORA CINTIA CAETANO

facilita o trabalho em equipe, com diferentes grupos trabalhando em cada módulo independente.

Técnicas de Programação:

Variação de implementação. Variação de implementação (2) Variação de implementação (3)

Programação Orientada a Objetos CLASSES E OBJETOS

PRIMEIRA AVALIAÇÃO IDENTIFICAÇÃO. Nome: 22/09/2010

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

Especificam quem tem acesso a cada entidade, isto é, quem tem acesso a. cada classe e cada membro da classe (dados e métodos)

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

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++

ponteiros INF Programação I Prof. Roberto Azevedo

PROGRAMAÇÃO ORIENTADA A OBJETOS: OCULTAR INFORMAÇÕES E ENCAPSULAMENTO

Análise de Programação

Introdução a Programação. Tipos Abstratos de Dados Implementando Pilha e Fila

Métodos Computacionais. Funções, Escopo de Variáveis e Ponteiros

Estruturas de Dados Aula 8: Tipos Abstratos de Dados 30/03/2011

Namespaces, Classes e Métodos.

Métodos Computacionais. Tipos Estruturados

nome = n; cargo = c; salario = s; public void print() { System.out.println(nome cargo salario); public void aumento( double fator){

Classes e Objetos. Prof. Leonardo Barreto Campos 1

Linguagens de Programação

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

Encapsulamento. Separa a interface de um objeto dos detalhes de seu funcionamento interno. Caixa preta 2/27

INF 1007 Simulado P2 Nome: Instruções

1 Introdução e Conceitos básicos

BCC202 - Estrutura de Dados I

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

Transcrição:

1/24 Classes Introdução

2/24 Tipos e operações Novos tipos de dados requerem operações associadas. Tipo: pilha Operações: inicializa, insere, retira, topo, vazia. Queremos essa relação indicada no código. struct + funções não fornece essa indicação. Tipo é caracterizado pelas operações, e não pela implementação. Ex: pilha.

Ocultamento de implementação O cliente não deve ter acesso à implementação. Se cliente usa detalhes de implementação: Fica difícil alterar implementação (código do cliente depende da implementação que ele usou). Cliente pode alterar detalhes inconsistentemente (fora do que é esperado pelo tipo de dados). Exemplo em pilha com struct. 3/24

4/24 Interface e implementação É necessário determinar claramente o que é parte da implementação e o que é interface: Implementação: detalhes que não interessam aos clientes. Interface: Determina o acesso pelo cliente. É necessário associar as operações com os tipos. Feito em orientação a objetos por meio de classes.

5/24 Classes Classes em C++

6/24 Classes Definem um tipo de dados. Especificam as operações sobre esse tipo. Determinam a implementação: Da representação do tipo. Das operações. A separação entre o que é interface e o que é implementação é chamada controle de acesso.

7/24 Controle de acesso A implementação da classe é definida por: Código da implementação das operações. Membros privados (não acessíveis aos clientes). Em uma classe, os membros são privados, a menos que seja indicado em contrário. Os membros públicos devem ser precididos pelo rótulo public. Membros públicos definem a interface.

Membros privados Nome do tipo Membros públicos Exemplo Representação do tipo class Rational { int _numerator, _denominator; public: void set(int num, int den); void set(const Rational &r); int numerator(); int denominator(); Rational plus(const Rational &b); Rational minus(const Rational &b); Rational times(const Rational &b); Rational over(const Rational &b); double to_double(); }; Operações sobre o tipo 8/24

9/24 Nomenclatura Classes têm dois tipos de membros: Membros tipo dados, também chamados campos. Membros tipo função, também chamados funções membro ou métodos. Normalmente os membros tipo dados são privados (fazem parte da implementação). Os membros públicos são métodos (operações sobre o tipo). Há exceções!

10/24 Nomenclatura Uma classe define um tipo de dados. Uma variável (ou elemento alocado dinamicamente) desse tipo é denominada um objeto da classe, ou uma instância da classe. Rational r; Objeto ou instância da classe Rational.

11/24 Acesso a membros O acesso a membros (tipo dados ou funções) é feito através de um objeto com o operador de acesso a membro. Envio da mensagem set ao objeto b. Rational a, b, c; b.set(1,2); c.set(2,3); a.set(b.times(c));

Exemplo Nome da classe Operador de escopo Nome do método void Rational::set(int num, int den) { _numerator = num; _denominator = den; } Membros privados da classe podem ser acessados por qualquer método da classe. void Rational::set(const Rational &r) { _numerator = r._numerator; _denominator = r._denominator; } Membros do objeto que recebeu a mensagem. Membros do objeto parâmetro. 12/24

13/24 Exemplo (cont) int Rational::numerator() { return _numerator; } int Rational::denominator() { return _denominator; }

14/24 Exemplo (cont) Rational Rational::times(const Rational &b) { Rational r; r.set(_numerator * b._numerator, _denominator * b._denominator); return r; } Rational Rational::over(const Rational &b) { Rational r; r.set(_numerator * b._denominator, _denominator * b._numerator); return r; }

15/24 Exemplo (cont) Rational Rational::plus(const Rational &b) { Rational r; int n, d; n = _numerator * b._denominator + _denominator * b._numerator; d = _denominator * b._denominator; r.set(n, d); return r; } Rational Rational::minus(const Rational &b) { // Similar }

16/24 Exemplo (cont) double Rational::to_double() { return static_cast<double>(_numerator) / _denominator; }

17/24 Compilação separada Geralmente se usa compilação separada. Definição da classe (com protótipos dos métodos) vai num arquivo cabeçalho. Definição dos métodos vai num arquivo de implementação. Código cliente (possivelmente vários) em arquivo separado.

18/24 Exemplo Rational: código e execução

19/24 Encapsulação A implementação fica encapsulada pela interface. Impossibilidade de acesso à implementação facilita realização de alterações. Alterações na implementação garantidamente não afetam clientes. Alterações na interface afetam clientes, e devem ser evitadas. Cuidado no desenvolvimento da interface.

20/24 Exemplo Exemplo Rational com simplificação. Ver também exemplo de classe Complexo (apostila, seção 7.1)

21/24 Ponteiros como membros Quando alguns membros são ponteiros é necessário tomar certos cuidados. Queremos impedir que cliente altere valor do objeto. Dados controlados pelo cliente devem ser copiados internamente na entrada. Ao retornar ao cliente: Fazer uma cópia, ou Garantir que não pode ser alterado (const).

22/24 Exemplo Exemplo de nomes. Ver também exemplo de classe Cadeia (apostila, seção 7.1)

23/24 Controle de acesso O controle de acesso é feito através dos rótulos: public: indica a parte acessível ao cliente (interface) private: indica a parte não acessível ao cliente (implementação). A diferença entre struct e class é apenas a acessibilidade default. Usamos class para tipos abstratos.

24/24 Equivalentes class A { int a; public: void f(int x); int g(); }; class A { public: void f(int x); int g(); private: int a; }; class A { private: int a; public: void f(int x); int g(); }; struct A { public: void f(int x); int g(); private: int a; }; class A { public: void f(int x); private: int a; public: int g(); }; struct A { void f(int x); int g(); private: int a; };