programação orientada a objetos c++ prof. Érico olavo weissheimer
DESCRIPTION
Programação Orientada a Objetos C++ Prof. Érico Olavo Weissheimer. Histórico de Orientação a Objetos. A OO surgiu no final da década de 60, quando dois cientistas dinamarqueses criaram a linguagem Simula (Simulation Language) - PowerPoint PPT PresentationTRANSCRIPT
1
Programação Orientada a ObjetosProgramação Orientada a Objetos
C++C++
Prof. Érico Olavo WeissheimerProf. É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
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;
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.
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
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.
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
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).
9
Conceitos de Classe
Exemplos de Classes: aluno conta corrente folha de cheque automóvel cliente fornecedor time de futebol jogo de futebol
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.
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”)
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.
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.
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
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
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
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.
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
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();
};
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
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
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.
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.
24
HerançaHerança
AutomovelPlacaFabricanteModeloProprietario
Passeio
Cor
Taxi
NumeroTaxi
Lotação
NumeroPassag
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
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.
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.
28
Exercícios:Exercícios:
PessoaNomeEndereçoCidade
CadastrarPessoaAlterarEndereço
PessoaFisicaSexoIdadeCPF
IncluirDadosPFisica
PessoaJuridicaNomeFantasiaCNPJ
IncluirDadosPJuridica
4. Implementar em C++ as classes que seguem abaixo:
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".
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
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.
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
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.
34
PolimorfismoPolimorfismo
Veículo
Verificar()Reparar()Limpar()
Automóvel
Verificar()Reparar()Limpar()
Bicicleta
Verificar()Reparar()Limpar()
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
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.
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
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();}
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.
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
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