440 likes | 692 Views
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)
E N D
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 doiscientistas dinamarqueses criaram a linguagem Simula(Simulation Language) • 1967 - Linguagem de Programação Simula-67-conceitosde classe e herança • O termo Programação Orientada a Objetos (POO) éintroduzido com a linguagem Smalltalk (1980) • Inicio dos anos 90Paradigma de Orientação aObjetos • abordagem poderosa e prática para odesenvolvimento de software
Vantagens da Orientação a Objetos • Abstração de dados: os detalhes referentes àsrepresentações das classes serão visíveis apenas a seusatributos; • Reutilização: o encapsulamento dos métodos erepresentação dos dados para a construção de classesfacilitam o desenvolvimento de software reutilizável,auxiliando na produtividade de sistemas; • Flexibilidade: as classes delimitam-se em unidadesnaturais para a alocação de tarefas de desenvolvimentode software;
Vantagens da Orientação a Objetos • Extensibilidade: facilidade de estender o software devidoa 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 quefacilita alterações; • Mesma notação é utilizada desde a fase de análise até aimplementação. • Manutenibilidade: a modularização natural em classesfacilita a realização de alterações no software.
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
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 mensagensentre si. • Essas mensagens resultam na ativação de métodos, osquais realizam as ações necessárias. • Os objetos que compartilham uma mesma interface, ouseja, respondem as mesmas mensagens, são agrupadosem classes.
Exemplo de Classe e Objetos • Objetos e Classes Automóvel Marca Placa Palio JWO-4567 Parati KLJ-0978 Celta JDK-6543 CLASSE OBJETOS (Instâncias da classe Automóvel)
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).
Conceitos de Classe • Exemplos de Classes: • aluno • conta corrente • folha de cheque • automóvel • cliente • fornecedor • time de futebol • jogo de futebol
Conceito de Objetos • Objetos: • Tudo em Orientação a Objetos é OBJETO. • Objeto, no mundo físico, é tipicamente um produtore consumidor de itens de informação. • Definição (mundo do software) • “Qualquer coisa, real ou abstrata, a respeito daqual armazenamos dados e métodos que osmanipulam” Martin, Odell (1995) • Abstração de uma entidade do mundo real e que possuí características (VALORES). • É uma instanciação de uma classe.
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”)
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 emum objeto para serem exclusivamente manipuladopelas operações daquele objeto. • São variáveis que definem o estado de um objeto, ouseja, são entidades que caracterizam os objetos. • Cada objeto possui seu próprio conjunto deatributos.
Conceitos Básicos • Métodos: • Quando um objeto é mapeado dentro do domínio dosoftware, os processos que podem mudar a suaestrutura de dados são denominados Operações ouMé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 edeclarados que atuam sobre um objeto.
Notação de Classe em UML • Atributos e Métodos: Automóvel Placa Fabricante Modelo Proprietario RegistrarDados ImprimirDados ValidarFabricante CLASSE ATRIBUTOS MÉTODOS
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
Exemplo Programação Orientada a Objetos em C++ Definição de uma classe Pessoa em C++ class Pessoa { // Atributos int Cpf; char Nome[30]; int DataNascimento; // Metodos void CadastrarPessoa(); void ImprimirPessoa(); void CalcularIdade(); }; main() { Pessoa p; return 0; } Dados encapsulados Métodos Instanciação de um objeto Pessoa (p)
Conceito de Encapsulamento • Encapsulamento: • Objetos encapsulam seus atributos. • Propriedade segundo a qual os atributos de umaclasse são acessíveis apenas pelos métodos daprópria classe; • Outras classes só podem acessar os atributos de umaclasse 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 umnome e podem ser reusados como uma especificaçãoou componente de programa.
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
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(); };
Exemplo Programação Orientada a Objetos em C++ Erro: variável Private só pode ser acessadas pelos métodos p.AnoNasc = 1971;
Nome do método Nome da classe 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) • { • };
Exercícios: • 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 mostrada no slide 14.
Conceito de Herança • Herança: • É o mecanismo pelo qual uma subclasseherda todas as propriedades da superclasse eacrescenta suas próprias e exclusivas características. • As propriedades da superclasse não precisam serrepetidas em cada subclasse. • Propicia a reutilização de código.
Herança Automovel Placa Fabricante Modelo Proprietario Passeio Cor Taxi NumeroTaxi Lotação NumeroPassag
SuperClasse Automovel Método da SubClasse Passeio 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 int main() { Passeio Pass; Instanciando SubClasse Passeio
Exercícios: • 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. • 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.
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.
Exercícios: 4. Implementar em C++ as classes que seguem abaixo: Pessoa Nome Endereço Cidade CadastrarPessoa AlterarEndereço PessoaFisica Sexo Idade CPF IncluirDadosPFisica PessoaJuridica NomeFantasia CNPJ IncluirDadosPJuridica
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".
Exemplo Arquivo Header Arquivo header Automovel.h
Exercícios • 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.
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
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.
Polimorfismo Veículo Verificar() Reparar() Limpar() Automóvel Verificar() Reparar() Limpar() Bicicleta Verificar() Reparar() Limpar()
Figura Atributos Operações 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. area calcularArea {abstrato} informarArea
Area,altura,base ler altura,base calcularArea {abstrato} MostrarArea Triângulo Retângulo Atributos Atributos Figura Operações Operações Atributos Operações calcularArea altura*base calcularArea (base*altura)/2 Exercícios • Implementar as classes da figura abaixo, usando o conceito de • polimorfismo e classe abstrata.
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
Exemplo Construtor #include <iostream> using namespace std; classponto { 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(); }
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.
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
Analogia com Programação Tradicional • Analogia dos conceitos principais no paradigmaorientado a objeto e no paradigma tradicional deprogramação