41
1 Programação Orientada a Objetos Programação Orientada a Objetos C++ C++ Prof. Érico Olavo Weissheimer Prof. Érico Olavo Weissheimer

1 Programação Orientada a Objetos C++ Prof. Érico Olavo Weissheimer

Embed Size (px)

Citation preview

Page 1: 1 Programação Orientada a Objetos C++ Prof. Érico Olavo Weissheimer

1

Programação Orientada a ObjetosProgramação Orientada a Objetos

C++C++

Prof. Érico Olavo WeissheimerProf. Érico Olavo Weissheimer

Page 2: 1 Programação Orientada a Objetos C++ Prof. Érico Olavo Weissheimer

2

Histórico de Orientação a Histórico de Orientação a ObjetosObjetos

A OO surgiu no final da década de 60, quando dois cientistas dinamarqueses criaram a linguagem Simula (Simulation Language)1967 - Linguagem de Programação Simula-67-conceitos de classe e herançaO termo Programação Orientada a Objetos (POO) é introduzido com a linguagem Smalltalk (1980)Inicio dos anos 90 Paradigma de Orientação a Objetosabordagem poderosa e prática para o desenvolvimento de software

Page 3: 1 Programação Orientada a Objetos C++ Prof. Érico Olavo Weissheimer

3

Vantagens da Orientação a Vantagens da Orientação a ObjetosObjetos

Abstração de dados: os detalhes referentes às representações das classes serão visíveis apenas a seus atributos;Reutilização: o encapsulamento dos métodos e representação dos dados para a construção de classes facilitam o desenvolvimento de software reutilizável, auxiliando na produtividade de sistemas;Flexibilidade: as classes delimitam-se em unidades naturais para a alocação de tarefas de desenvolvimento de software;

Page 4: 1 Programação Orientada a Objetos C++ Prof. Érico Olavo Weissheimer

4

Vantagens da Orientação a Vantagens da Orientação a ObjetosObjetos

Extensibilidade: facilidade de estender o software devido a duas razões: herança: novas classes são construídas a partir das que já

existem; as classes formam uma estrutura fracamente acoplada o que

facilita alterações;

Mesma notação é utilizada desde a fase de análise até a implementação.Manutenibilidade: a modularização natural em classes facilita a realização de alterações no software.

Page 5: 1 Programação Orientada a Objetos C++ Prof. Érico Olavo Weissheimer

5

Exemplos de Linguagens Exemplos de Linguagens Orientada a ObjetosOrientada a Objetos

Existem diversas linguagens OO, tais como: Smalltalk (1980) Ada (1983) Eiffel (~1985) Object Pascal (1986) Common Lisp (1986) C++ (~1989) Java

Page 6: 1 Programação Orientada a Objetos C++ Prof. Érico Olavo Weissheimer

6

Conceitos Básicos de Orientação Conceitos Básicos de Orientação a Objetosa Objetos

Criou o conceito de objeto, que é um tipo de dado com uma estrutura e operações para manipular esta estrutura.Tipos definidos pelo usuário devem se comportar da mesma maneira de tipos pré-definidos (fornecidos pelo compilador).Os objetos trocam mensagens entre si.Essas mensagens resultam na ativação de métodos, os quais realizam as ações necessárias.Os objetos que compartilham uma mesma interface, ou seja, respondem as mesmas mensagens, são agrupados em classes.

Page 7: 1 Programação Orientada a Objetos C++ Prof. Érico Olavo Weissheimer

7

Exemplo de Classe e ObjetosExemplo de Classe e Objetos

Objetos e Classes

Palio JWO-4567

Parati KLJ-0978

Celta JDK-6543

OBJETOS

(Instâncias da classe Automóvel)

Automóvel

Marca

Placa

CLASSE

Page 8: 1 Programação Orientada a Objetos C++ Prof. Érico Olavo Weissheimer

8

Conceitos de ClasseConceitos de Classe

Classes: É um tipo definido pelo usuário que contém o molde, a

especificação para os objetos, assim como o tipo inteiro contém o molde para as variáveis declaradas como inteiros.

A classe envolve, associa, funções e dados, controlando o acesso a estes, definí-la implica em especificar os seus atributos (dados) e suas funções membro (código).

Todo objeto é uma instância de uma Classe. Possuem propriedades (ATRIBUTOS) e comportamento

(MÉTODOS).

Page 9: 1 Programação Orientada a Objetos C++ Prof. Érico Olavo Weissheimer

9

Conceitos de Classe

Exemplos de Classes: aluno conta corrente folha de cheque automóvel cliente fornecedor time de futebol jogo de futebol

Page 10: 1 Programação Orientada a Objetos C++ Prof. Érico Olavo Weissheimer

10

Conceito de ObjetosConceito de Objetos

Objetos: Tudo em Orientação a Objetos é OBJETO. Objeto, no mundo físico, é tipicamente um produtor e

consumidor de itens de informação. Definição (mundo do software)

“Qualquer coisa, real ou abstrata, a respeito da qual armazenamos dados e métodos que os manipulam” Martin, Odell (1995)

Abstração de uma entidade do mundo real e que possuí características (VALORES).

É uma instanciação de uma classe.

Page 11: 1 Programação Orientada a Objetos C++ Prof. Érico Olavo Weissheimer

11

Conceito de Objetos

Exemplos de objetos: um aluno (“Carlos Alberto da Silva”) uma conta corrente (“0123-003934-1”) uma folha de cheque (“234564”) um automóvel (“Honda Civic preto 06/06”) um cliente (“Maria Antonia Guimaraes”) um fornecedor (“Bosch”) um time de futebol (“Palmeiras”) uma partida de futebol (“Palmeiras x Santos”)

Page 12: 1 Programação Orientada a Objetos C++ Prof. Érico Olavo Weissheimer

12

Conceito de AtributosConceito de Atributos

Atributos: Representam um conjunto de informações, ou seja,

elementos de dados que caracterizam um objeto. Descrevem as informações que ficam escondidas em um

objeto para serem exclusivamente manipulado pelas operações daquele objeto.

São variáveis que definem o estado de um objeto, ou seja, são entidades que caracterizam os objetos.

Cada objeto possui seu próprio conjunto de atributos.

Page 13: 1 Programação Orientada a Objetos C++ Prof. Érico Olavo Weissheimer

13

Conceitos BásicosConceitos Básicos

Métodos: Quando um objeto é mapeado dentro do domínio do

software, os processos que podem mudar a sua estrutura de dados são denominados Operações ou Métodos.

Métodos são invocados por Mensagens. Cada objeto possui seu próprio conjunto de métodos Definições: São procedimentos ou funções definidos e

declarados que atuam sobre um objeto.

Page 14: 1 Programação Orientada a Objetos C++ Prof. Érico Olavo Weissheimer

14

Notação de Classe em UMLNotação de Classe em UML

Atributos e Métodos:Automóvel

Placa FabricanteModeloProprietario

RegistrarDadosImprimirDadosValidarFabricante

ATRIBUTOS

MÉTODOS

CLASSE

Page 15: 1 Programação Orientada a Objetos C++ Prof. Érico Olavo Weissheimer

15

Notação de Classe em UMLNotação de Classe em UML

Atributos e Métodos:

Pessoa

CpfNomeEstado CivilAno NascimentoNaturalidadeUF

CadastrarPessoaCalcularIdade

ATRIBUTOS

MÉTODOS

CLASSE

Page 16: 1 Programação Orientada a Objetos C++ Prof. Érico Olavo Weissheimer

16

Exemplo Programação Orientada a Objetos em C++

class Pessoa{// Atributos int Cpf; char Nome[30]; int DataNascimento;

// Metodos void CadastrarPessoa(); void ImprimirPessoa(); void CalcularIdade();};

main(){ Pessoa p;

return 0;}

Definição de uma classe Pessoa em C++

Instanciação de um objeto Pessoa (p)

Dados encapsulados

Métodos

Page 17: 1 Programação Orientada a Objetos C++ Prof. Érico Olavo Weissheimer

17

Conceito de EncapsulamentoConceito de Encapsulamento

Encapsulamento: Objetos encapsulam seus atributos. Propriedade segundo a qual os atributos de uma classe são

acessíveis apenas pelos métodos da própria classe; Outras classes só podem acessar os atributos de uma classe

invocando os métodos públicos. Restringe a visibilidade do objeto, mais facilita o reuso Os DADOS e os MÉTODOS são empacotados sob um

nome e podem ser reusados como uma especificação ou componente de programa.

Page 18: 1 Programação Orientada a Objetos C++ Prof. Érico Olavo Weissheimer

18

Dados Públicos e Privados

Privados: somente as funções (métodos) membro da classe podem acessá-los.

Sendo privados, os programas não podem acessar os membros da classe usando o operador ponto

objeto.alguma_variável = valor

Se não colocar o rótulo public, pressupõe-se que todos os membros são privados

Page 19: 1 Programação Orientada a Objetos C++ Prof. Érico Olavo Weissheimer

19

Dados Públicos e Privados

class funcionario { private:

char nome[64];long func_id;float salario;

public:int atribui_valores(long x, float y);void exibe_funcinario();

};

Page 20: 1 Programação Orientada a Objetos C++ Prof. Érico Olavo Weissheimer

20

Exemplo Programação Orientada a Objetos em C++

#include <iostream>

using namespace std;

class Pessoa

{

private:

char Nome[30];

char Cpf[11];

int AnoNasc;

public:

void CadastrarPessoa()

{ cout <<"\nNome: ";

cin.getline(Nome,30);

cout << "CPF: ";

cin.getline (Cpf,12);

cout <<"\nAno Nascimento: ";

cin >> AnoNasc; };

void ImprimirPessoa()

{ cout << Cpf << "\n";

cout << Nome << "\n";

cout << AnoNasc; };

};

main()

{

Pessoa p;

p.CadastrarPessoa();

p.ImprimirPessoa();

system("pause");

}

p.AnoNasc = 1971;

Erro: variável Private sópode ser acessadas pelosmétodos

Page 21: 1 Programação Orientada a Objetos C++ Prof. Érico Olavo Weissheimer

21

Exemplo Programação Orientada a Objetos em C++

A medida que os métodos se tornarem maiores, defini-los dentro da classe poderá congestionar a definição de classe

Solução: colocar o protótipo dentro da classe e definir o método fora dela

Ex: class funcionario {

void exibe_func(void); //Protótipo

};

void funcionario::exibe_func(void)

{

};

Nome do método

Nome da classe

Page 22: 1 Programação Orientada a Objetos C++ Prof. Érico Olavo Weissheimer

22

Exercícios:

1. Declarar os métodos do exemplo, colocando os códigos dos métodos fora da classe.

2. Criar um novo método para a classe Pessoa (exemplo anterior) que calcule a idade. A idade calculada deverá ser mostrada no método ImprimirPessoa.

3. Fazer um programa que tenha um método que inicialize uma variável com 0, outro que incremente esta variável e outro que mostre o valor incrementado. O programa principal deverá chamar 5 vezes o método que incrementa e o método que mostra o valor.

4. Fazer um programa que implemente a classe Automóvel mostrada no slide 14.

Page 23: 1 Programação Orientada a Objetos C++ Prof. Érico Olavo Weissheimer

23

Conceito de HerançaConceito de Herança

Herança: É o mecanismo pelo qual uma subclasse herda todas as

propriedades da superclasse e acrescenta suas próprias e exclusivas características.

As propriedades da superclasse não precisam ser repetidas em cada subclasse.

Propicia a reutilização de código.

Page 24: 1 Programação Orientada a Objetos C++ Prof. Érico Olavo Weissheimer

24

HerançaHerança

AutomovelPlacaFabricanteModeloProprietario

Passeio

Cor

Taxi

NumeroTaxi

Lotação

NumeroPassag

Page 25: 1 Programação Orientada a Objetos C++ Prof. Érico Olavo Weissheimer

25

Exemplo Herança

class Passeio:public Automovel{ private: char Cor[15]; public: void RegistrarCor(); };...void Passeio::RegistrarCor()

{ cout << "Cor: ";

cin.getline (Cor,16);

};

SubClasse que esta herdando da SuperClasse Automovel

SuperClasse Automovel

Método da SubClasse Passeio

int main(){ Passeio Pass;

Instanciando SubClasse Passeio

Page 26: 1 Programação Orientada a Objetos C++ Prof. Érico Olavo Weissheimer

26

Exercícios:

1. Fazer um programa para criar as subclasses mostradas no slide 24, tendo-se nestas subclasses os métodos para ler e mostrar os seus atributos.

2. Crie uma classe Retângulo. A classe possui os atributos altura e base e 4 métodos:

1. ler a base e a altura, 2. calcular a área (base*altura) (declarar como função),3. calcular o perímetro (soma dos todos os lados) (declarar

como função), 4. mostrar os valores da área e do perímetro.

Page 27: 1 Programação Orientada a Objetos C++ Prof. Érico Olavo Weissheimer

27

Exercícios:

3. Crie a classe ContaBancaria, com os seguintes atributos: NumeroConta e Saldo. Esta classe deverá ter os seguintes métodos: Aberturaconta, onde deverá ser lido o número da conta e o saldo

inicializando com 0, OperacaoCredito, somar valor informado com o saldo, OperacaoDebito, debitar valor informado do saldo, MostrarSaldo.

Deverá ser lido 5 movimentações, sendo lido o tipo da operação (C ou D) e o valor da transação. O número da conta e o saldo deverão ser mostrado após as 5 movimentações.

Page 28: 1 Programação Orientada a Objetos C++ Prof. Érico Olavo Weissheimer

28

Exercícios:Exercícios:

PessoaNomeEndereçoCidade

CadastrarPessoaAlterarEndereço

PessoaFisicaSexoIdadeCPF

IncluirDadosPFisica

PessoaJuridicaNomeFantasiaCNPJ

IncluirDadosPJuridica

4. Implementar em C++ as classes que seguem abaixo:

Page 29: 1 Programação Orientada a Objetos C++ Prof. Érico Olavo Weissheimer

29

Herança: Arquivo Header

A definição das classes podem estar divididos em vários arquivos do tipo Header (extensão .h).

Estes arquivos Header são criados pelos programadores, com o objetivo de melhor organização e encapsulamento.

É costume deixar nesses arquivos somente a interface das classes e funções para que os programadores possam olhá-los,

como uma "library".

Page 30: 1 Programação Orientada a Objetos C++ Prof. Érico Olavo Weissheimer

30

Exemplo Arquivo Header#include ...#include "Automovel.h"class Taxi:public Automovel { private: int NumeroTaxi; public: void RegistrarTaxi(); { cout << "Numero Taxi "; cin >> NumeroTaxi; }; };

int main(){

Taxi Tx;

Tx.RegistrarDados();

Tx.RegistrarTaxi();

return 0;

}

Arquivo header Automovel.h:using namespace std;

class Automovel

{

private:

char Placa[7];

char Fabricante[30];

public:

void RegistrarDados();

void ImprimirDados();

void ValidarFabricante();

};

void Automovel::RegistrarDados()

{ cout << "Placa: ";

cin.getline(Placa,8);};

void Automovel::ImprimirDados()

....

Arquivo headerAutomovel.h

Page 31: 1 Programação Orientada a Objetos C++ Prof. Érico Olavo Weissheimer

31

Exercícios

1. Gravar a classe Automovel como sendo um arquivo tipo header.

2. Alterar o programa gerado no exercício 1 do slide 26, fazendo uso deste arquivo header, onde deverá ser criado um arquivo header para a super-classe automovel e headers para as sub-classes taxi, passeio e lotacao. Deverá ter um programa principal.

Page 32: 1 Programação Orientada a Objetos C++ Prof. Érico Olavo Weissheimer

32

Dados Protected

Os atributos da classe pai não podem ser acessados pelos métodos das classes filhas, se estes estiverem declarados como private.Para que os atributos da classe pai possam ser acessados pelos métodos das classes filhas, estes devem ser declarados como protected.Exemplo: class Automovel

{ protected: char Placa[7]; .....

class Passeio:public Automovel{

private: char Cor[15]; public: void RegistrarCor();

{ cout << "Placa: ";

cin.getline (Placa,8); };

Atributo da classe pai sendo acessado por método de uma classe filha

Page 33: 1 Programação Orientada a Objetos C++ Prof. Érico Olavo Weissheimer

33

PolimorfismoPolimorfismoGeralmente representa a qualidade ou estado de um objeto ser capaz de assumir diferentes formas.

Mais especificamente, propriedade segundo o qual vários métodos podem existir com o mesmo nome.

Ao receber uma mensagem para efetuar uma Operação, é o objeto quem determina como a operação deve ser efetuada;

Permite a criação de várias classes com interfaces idênticas, porém objetos e implementações diferentes.

Page 34: 1 Programação Orientada a Objetos C++ Prof. Érico Olavo Weissheimer

34

PolimorfismoPolimorfismo

Veículo

Verificar()Reparar()Limpar()

Automóvel

Verificar()Reparar()Limpar()

Bicicleta

Verificar()Reparar()Limpar()

Page 35: 1 Programação Orientada a Objetos C++ Prof. Érico Olavo Weissheimer

35

Classes Abstratas

Classes abstratas são classes que não produzem instâncias. Elas agrupam características e comportamentos que serão herdados por outras classes. Fornecem padrões de comportamento que serão implementados nas suas subclasses.

Podem ter métodos com implementação definida.

Atributos

Operações

Figura

calcularArea {abstrato}informarArea

area

Page 36: 1 Programação Orientada a Objetos C++ Prof. Érico Olavo Weissheimer

36

Exercícios

Atributos

Operações

Figura

ler altura,basecalcularArea {abstrato}MostrarArea

Area,altura,base

Atributos

Operações

Retângulo

Atributos

Operações

Triângulo

calcularAreaaltura*base

calcularArea(base*altura)/2

1. Implementar as classes da figura abaixo, usando o conceito de polimorfismo e classe abstrata.

Page 37: 1 Programação Orientada a Objetos C++ Prof. Érico Olavo Weissheimer

37

Construtor

São métodos declarados como funções que são chamados no momento da criação de um objeto.

São usados para inicializar os objetos.

Este tipo de método não possuí valor de retorno.

Um construtor tem sempre o mesmo nome da classe.

Se nenhum for declarado será criado um construtor default

Page 38: 1 Programação Orientada a Objetos C++ Prof. Érico Olavo Weissheimer

38

Exemplo Construtor#include <iostream>using namespace std;class ponto{ float x; float y;public: ponto(int a,int b); //esse e o construtor, note a ausência do valor de retorno void mostra(void);};ponto::ponto(int a,int b) //método construtor: tem sempre o nome da classe{x=a; //incializando atributos da classey=b;};void ponto::mostra(void){cout << "X:" << x << " , Y:" << y;system ("pause");};

main(){ ponto ap(1,2); ap.mostra();}

Page 39: 1 Programação Orientada a Objetos C++ Prof. Érico Olavo Weissheimer

39

Destrutor

O destrutor diz como o objeto será destruído quando sair de escopo.

O funcionamento é análogo ao método Construtor, ou seja:

Não possuí valor de retorno. Tem sempre o mesmo nome da classe, só que precedido por

~ . Se nenhum for declarado será criado um destrutor default. seu argumento é sempre void.

Page 40: 1 Programação Orientada a Objetos C++ Prof. Érico Olavo Weissheimer

40

Exemplo Destrutor#include <iostream>using namespace std;class ponto{ float x; float y;public: ponto(int a,int b); // método construtor ~ponto(void); // método destrutorvoid mostra();};ponto::ponto(int a,int b) //códido do método construtor{ x=a; y=b; };ponto::~ponto(void) // método destrutor: tem o mesmo nome da classe precedido de ~{ cout << " Variaveis destruidas"; system("pause"); };void ponto::mostra(void){ cout << "X:" << x << " , Y:" << y << "\n"; system ("pause"); };

main(){ ponto ap(1,2); ap.mostra(); } // o método destrutor será executado automaticamente

Page 41: 1 Programação Orientada a Objetos C++ Prof. Érico Olavo Weissheimer

41

Analogia com Programação Analogia com Programação TradicionalTradicional

Analogia dos conceitos principais no paradigma orientado a objeto e no paradigma tradicional de programação

Linguagens Orientadas a Objetos

Linguaguens Tradicionais

Objeto Valor

Classe Tipo (TAD)

Mensagem Chamada de Procedimento

Método Procedimento ou Função

Interface Conjunto de nomes e funções para um fim específico