A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

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

Apresentações semelhantes


Apresentação em tema: "1 Programação Orientada a Objetos C++ Prof. Érico Olavo Weissheimer."— Transcrição da apresentação:

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

2 2 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) Linguagem de Programação Simula-67- conceitos 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

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

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

5 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 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 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 7 Exemplo 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 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 9 Conceitos de Classe Exemplos de Classes: aluno conta corrente folha de cheque autom ó vel cliente fornecedor time de futebol jogo de futebol

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

11 11 Conceito de Objetos Exemplos de objetos: um aluno ( Carlos Alberto da Silva ) uma conta corrente ( ) uma folha de cheque ( ) 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 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 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 13 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.

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

15 15 Notação de Classe em UML Atributos e Métodos: Pessoa Cpf Nome Estado Civil Ano Nascimento Naturalidade UF CadastrarPessoa CalcularIdade ATRIBUTOS MÉTODOS CLASSE

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

18 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 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 20 Exemplo Programação Orientada a Objetos em C++ #include 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 pelos métodos

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

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

25 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 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 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 28 Exercícios: Pessoa Nome Endereço Cidade CadastrarPessoa AlterarEndereço PessoaFisica Sexo Idade CPF IncluirDadosPFisica PessoaJuridica NomeFantasia CNPJ IncluirDadosPJuridica 4. Implementar em C++ as classes que seguem abaixo:

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

31 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 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 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 34 Polimorfismo Veículo Verificar() Reparar() Limpar() Automóvel Verificar() Reparar() Limpar() Bicicleta Verificar() Reparar() Limpar()

35 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 36 Exercícios Atributos Operações Figura ler altura,base calcularArea {abstrato} MostrarArea Area,altura,base Atributos Operações Retângulo Atributos Operações Triângulo calcularArea altura*base calcularArea (base*altura)/2 1.Implementar as classes da figura abaixo, usando o conceito de polimorfismo e classe abstrata.

37 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 38 Exemplo Construtor #include 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(); }

39 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 40 Exemplo Destrutor #include 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 41 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 ObjetoValor ClasseTipo (TAD) MensagemChamada de Procedimento MétodoProcedimento ou Função InterfaceConjunto de nomes e funções para um fim específico


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

Apresentações semelhantes


Anúncios Google