1 / 41

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

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)

Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. 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 90Paradigma de Orientação aObjetos • abordagem poderosa e prática para odesenvolvimento de software

  3. 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;

  4. 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.

  5. 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

  6. 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.

  7. 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)

  8. 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).

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

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

  13. 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.

  14. Notação de Classe em UML • Atributos e Métodos: Automóvel Placa Fabricante Modelo Proprietario RegistrarDados ImprimirDados ValidarFabricante CLASSE ATRIBUTOS MÉTODOS

  15. 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

  16. 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)

  17. 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.

  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++ Erro: variável Private só pode ser acessadas pelos métodos p.AnoNasc = 1971;

  21. 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) • { • };

  22. 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.

  23. 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.

  24. Herança Automovel Placa Fabricante Modelo Proprietario Passeio Cor Taxi NumeroTaxi Lotação NumeroPassag

  25. 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

  26. 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.

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

  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 Arquivo header Automovel.h

  31. 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.

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

  34. Polimorfismo Veículo Verificar() Reparar() Limpar() Automóvel Verificar() Reparar() Limpar() Bicicleta Verificar() Reparar() Limpar()

  35. 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

  36. 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.

  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; 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(); }

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

  41. Analogia com Programação Tradicional • Analogia dos conceitos principais no paradigmaorientado a objeto e no paradigma tradicional deprogramação

More Related