Programação Orientada a Objetos

Download Report

Transcript Programação Orientada a Objetos

Programação Orientada a Objetos
C++
Prof. Érico Olavo Weissheimer
1
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)
1967 - Linguagem de Programação Simula-67conceitos de classe e herança
O termo Programação Orientada a Objetos (POO) é
introduzido com a linguagem Smalltalk (1980)
Inicio dos anos 90 Paradigma de Orientação a
Objetos
abordagem poderosa e prática para o desenvolvimento
de software
2
Vantagens da Orientação a
Objetos
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;
3
Vantagens da Orientação a
Objetos
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.
4
Exemplos de Linguagens
Orientada a Objetos
Existem diversas linguagens OO, tais como:
Smalltalk (1980)
 Ada (1983)
 Eiffel (~1985)
 Object Pascal (1986)
 Common Lisp (1986)
 C++ (~1989)
 Java

5
Conceitos Básicos de Orientação
a 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.
6
Exemplo de Classe e Objetos
Objetos e Classes
Palio
JWO-4567
Parati
KLJ-0978
Automóvel
Marca
Placa
Celta
JDK-6543
CLASSE
OBJETOS
(Instâncias da classe Automóvel)
7
Conceitos 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).
8
Conceitos de Classe
Exemplos de Classes:








aluno
conta corrente
folha de cheque
automóvel
cliente
fornecedor
time de futebol
jogo de futebol
9
Conceito 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.
10
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”)
11
Conceito 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.
12
Conceitos 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.
13
Notação de Classe em UML
Atributos e Métodos:
Automóvel
Placa
Fabricante
Modelo
Proprietario
RegistrarDados
ImprimirDados
ValidarFabricante
CLASSE
ATRIBUTOS
MÉTODOS
14
Notação de Classe em UML
Atributos e Métodos:
Pessoa
Cpf
Nome
Estado Civil
Ano Nascimento
Naturalidade
UF
CadastrarPessoa
CalcularIdade
CLASSE
ATRIBUTOS
MÉTODOS
15
Exemplo Programação Orientada
a Objetos em C++
class Pessoa
{
// Atributos
int Cpf;
char Nome[30];
int DataNascimento;
Definição de uma
classe Pessoa em
C++
Dados encapsulados
// Metodos
};
void CadastrarPessoa();
void ImprimirPessoa();
void CalcularIdade();
main()
{
Pessoa p;
}
Métodos
Instanciação de um
objeto Pessoa (p)
return 0;
16
Conceito 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.
17
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
18
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();
};
19
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;
Erro: variável Private só
pode ser acessadas pelos
métodos
p.AnoNasc = 1971;
p.CadastrarPessoa();
p.ImprimirPessoa();
system("pause");
}
20
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
Nome do método
void funcionario::exibe_func(void)
Nome da classe
{
};
21
Exercícios:
1.
2.
3.
4.
Declarar os métodos do exemplo, colocando os códigos dos
métodos fora da classe.
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.
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.
Fazer um programa que implemente a classe Automóvel
22
mostrada no slide 14.
Conceito 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.
23
Herança
Automovel
Placa
Fabricante
Modelo
Proprietario
Passeio
Taxi
Lotação
Cor
NumeroTaxi
NumeroPassag
24
Exemplo Herança
SuperClasse Automovel
class Passeio:public Automovel
{
SubClasse que esta herdando da SuperClasse Automovel
private:
char Cor[15];
public:
void RegistrarCor();
};
...
Método da SubClasse Passeio
void Passeio::RegistrarCor()
{ cout << "Cor: ";
cin.getline (Cor,16);
};
int main()
{
Passeio Pass;
Instanciando SubClasse Passeio
25
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.
26
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.
27
Exercícios:
4. Implementar em C++ as classes que seguem abaixo:
Pessoa
Nome
Endereço
Cidade
CadastrarPessoa
AlterarEndereço
PessoaFisica
PessoaJuridica
Sexo
Idade
CPF
NomeFantasia
CNPJ
IncluirDadosPJuridica
IncluirDadosPFisica
28
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".
29
Exemplo Arquivo Header
Arquivo header
#include ...
Automovel.h
#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()
....
30
Exercícios
1.
2.
Gravar a classe Automovel como sendo um arquivo tipo
header.
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.
31
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();
{
Atributo da classe pai sendo
cout << "Placa: ";
acessado por método de uma
cin.getline (Placa,8); };
classe filha
32
Polimorfismo
Geralmente 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.
33
Polimorfismo
Veículo
Verificar()
Reparar()
Limpar()
Automóvel
Bicicleta
Verificar()
Reparar()
Limpar()
Verificar()
Reparar()
Limpar()
34
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.
Figura
Atributos
area
Operações
calcularArea {abstrato}
informarArea
35
Exercícios
1. Implementar as classes da figura abaixo, usando o conceito de
polimorfismo e classe abstrata.
Figura
Atributos
Operações
Area,altura,base
ler altura,base
calcularArea {abstrato}
MostrarArea
Triângulo
Retângulo
Atributos
Atributos
Operações
Operações
calcularArea
altura*base
calcularArea
(base*altura)/2
36
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
37
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 classe
y=b;
};
void ponto::mostra(void)
{cout << "X:" << x << " , Y:" << y;
system ("pause");
};
main()
{
ponto ap(1,2);
ap.mostra();
}
38
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.
39
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 destrutor
void 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
40
Analogia com Programação
Tradicional
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
41