108
Conteúdo da Aula •Classes e objetos.

A19-20 Classes e Objetos

Embed Size (px)

DESCRIPTION

Classes e objetos

Citation preview

Page 1: A19-20 Classes e Objetos

Conteúdo da Aula •Classes e objetos.

Page 2: A19-20 Classes e Objetos

Por que devemos estudar POO?

• Porque é um paradigma de programação muito utilizado no mercado profissional. – As empresas vão exigir que você saiba:

• POO, análise e projeto OO, experiência em Java ou C++, banco de dados orientado a objetos, programação distribuída, etc.

Page 3: A19-20 Classes e Objetos

Por que devemos estudar POO?

• POO é a base de muitas linguagens de programação e plataformas tecnológicas. – Android, TV Digital, iOS, etc.

• Permite desenvolver aplicações complexas e bastante sofisticadas.

Page 4: A19-20 Classes e Objetos

Exemplo de Aplicações

Page 5: A19-20 Classes e Objetos

Por que devemos estudar POO? • O mercado profissional exige a utilização de

linguagens de programação que permitam desenvolver programas de forma mais: – Flexível;

– Padronizada;

– Com maior grau de reuso;

– Fácil de manter e entender;

Page 6: A19-20 Classes e Objetos

Paradigma • O que é um paradigma?

– É um modelo ou padrão que orienta a forma como programadores de software analisam problemas e definem soluções para estes problemas.

Problema Solução

Page 7: A19-20 Classes e Objetos

Paradigma (cont.)

• Exemplos de paradigmas de programação

Page 8: A19-20 Classes e Objetos

Paradigma Estrutural

• A ideia principal é decompor o problema em problemas menores através do desenvolvimento de procedimentos e funções que processam dados, e que são organizados em módulos.

Page 9: A19-20 Classes e Objetos

Paradigma Estrutural

• Limitações – Módulos muito dependentes entre si.

– Dificuldade na reutilização de código.

– As mudanças nos módulos muitas vezes traziam efeitos colaterais inesperados.

Page 10: A19-20 Classes e Objetos

Paradigma Orientada a Objetos • Pressupõe que o mundo é composto por objetos.

• Construção de um software envolve a abstração de um conjunto de objetos pertencentes ao domínio da aplicação.

• Alguns benefícios da POO

– Reutilização de código e aumento da produtividade

– Facilidade em manutenção e extensão

– Facilidade para análise e projeto

Page 11: A19-20 Classes e Objetos

Abstração – uma habilidade importante para POO

Page 12: A19-20 Classes e Objetos

Abstração

• Habilidade humana que permite visualizar imagens, identificar objetos em uma tela ou texto, identificar requisitos, comportamentos etc.

Page 13: A19-20 Classes e Objetos

Abstração

• Em termos de desenvolvimento de sistemas, consiste em identificar quais objetos são relevantes para a resolução de um problema.

Page 14: A19-20 Classes e Objetos

Quantos objetos você consegue identificar na figura abaixo?

Page 15: A19-20 Classes e Objetos

O que são objetos? • São todas as coisas, físicas ou abstratas do

mundo real que possuem características e comportamentos.

Objeto = Características + Comportamentos

• Características

– descrevem, identificam ou particularizam o objeto • Comportamento

– uma ação que um objeto sabe realizar (uma habilidade do objeto)

Page 16: A19-20 Classes e Objetos

O que são objetos?

Page 17: A19-20 Classes e Objetos

O que são objetos ?

• Os objetos (computacionais) são compostos por: – IDENTIDADE: endereço de memória

– ATRIBUTOS (ou campos): definem as características do objeto

– MÉTODOS: são as operações que manipulam as características ou estado do objeto. Estão relacionados ao comportamento do objetos.

Page 18: A19-20 Classes e Objetos

Estado de um Objeto

• É o conjunto de valores de seus atributos em um dado momento.

• Parte das operações (métodos) de um objeto, em geral, pode alterar o estado do objeto.

• Conforme as operações do objeto vão sendo invocadas, o objeto pode assumir diversos estados durante sua vida.

Page 19: A19-20 Classes e Objetos

Exemplos de Objetos

• Abstrair atributos e métodos dos objetos: – Conta Bancaria;

– Carro;

Page 20: A19-20 Classes e Objetos

• Uma conta bancária pode ter os seguintes atributos e métodos:

• Atributos – número da conta: 223344 – número da agência: 5577 – saldo: R$-100,00

• Métodos – emitir saldo(); – efetuar deposito(); – efetuar saque(); – emitir extrator()

Exemplos de Objetos

Page 21: A19-20 Classes e Objetos

• Um carro pode ter os seguintes atributos e métodos:

• Atributos – marcha; – velocidade; – modelo; – cor;

• Métodos – mudar marcha(); – acelerar(); – frear();

Exemplos de Objetos

Page 22: A19-20 Classes e Objetos

• Objetos também podem ser compostos por outros objetos.

• Isto permite que Objetos Complexos sejam definidos a partir de objetos mais simples.

• O objeto carro pode ser composto pelo objetos: – Volante;

– Motor;

– Roda;

– CD player;

Exemplos de Objetos

Page 23: A19-20 Classes e Objetos

Objetos Atributos e Operações • atributos:

– cor: Azul

– marca: Kaloy

– Quantidade de marchas: 20

– Marcha corrente: 5

• operações: – frear, pedalar, soltar pedal

– aumentar marcha

– reduzir marcha Minha bicicleta de corrida

Page 24: A19-20 Classes e Objetos

Rede de Objetos • Um software orientado a objetos consiste em

uma rede de objetos que interagem entre si (trocam mensagem).

Software

Objeto 1 Objeto 2

Objeto 3 Objeto 4

Page 25: A19-20 Classes e Objetos

Representando Objetos em Sistemas Computacionais

• Como transportar os objetos abstraídos no mundo real para o ambiente computacional? – Temos que implementar classes em programas

que dão vida a estes objetos em um sistema computacional.

Page 26: A19-20 Classes e Objetos

Classe

• Refere-se à implementação de um objeto no ambiente computacional.

• É um molde (planta do objeto) que especifica como o objeto deve ser construído no ambiente computacional.

• Classe especifica o que todo objeto criado a partir desta classe deve ter.

Page 27: A19-20 Classes e Objetos

Classe • A classe também classifica ou categoriza objetos que

possuem características e comportamentos comuns.

Classe Funcionário

Objeto Paula Objeto Pedro

Page 28: A19-20 Classes e Objetos

• Como agrupar estes objetos?

Chevrolet-Vectra

Fiat-Palio

Volkswagen-Fox

Ford-Ranger

Garfield

Frajola

Tom

W.A.Mozart

J.S.Bach M.Ravel

L.V.Beethoven

Piano

Violino Violão

Oboé Trompete

Classes

Page 29: A19-20 Classes e Objetos

Classes

• Que nomes atribuir para os agrupamentos?

Trompete Violão Piano Violino Oboé

Garfield Tom Frajola

Ford-Ranger Fiat-Palio Volkswagen-Fox Chevrolet-Vectra

J.S.Bach L.V.Beethoven W.A.Mozart M.Ravel

Page 30: A19-20 Classes e Objetos

Garfield Tom Frajola

Ford-Ranger Fiat-Palio Volkswagen-Fox Chevrolet-Vectra

J.S.Bach L.V.Beethoven W.A.Mozart M.Ravel

Trompete Violão Piano Violino Oboé

Carro

Gato

Compositor

Instrumento Musical

Classes

Page 31: A19-20 Classes e Objetos

• Quando temos vários objetos de um mesmo tipo, dizemos que eles pertencem a uma categoria ou classe. Exemplo: – Ford-Ranger, Fiat-Palio e Chevrolet-Vectra

pertecem à classe dos carros.

– Tom, Garfield e Frajola pertencem à classe dos gatos.

– Bach, Ravel, e Mozart são compositores, logo, pertecem à classe dos compositores.

Classes

Page 32: A19-20 Classes e Objetos

Classe

• Exemplo de classe para objeto Televisão.

• Classe Televisão • Atributos

– volume – canal – on/off – tamanho

• Métodos – ligar() – desligar() – aumentar volume() – diminuir volume() – mudar canal()

Objetos ou instâncias

instanciação

Page 33: A19-20 Classes e Objetos

Classes vs Objetos

• Classes – São abstrações de objetos que permitem descrever

um tipo de objeto. – Uma CLASSE descreve um categoria de objetos com

características (atributos), e comportamentos (métodos) semelhantes .

• Objetos – É a instância particular de uma classe. – São gerados em tempo de execução. – É a parte física, pois consume recursos da máquina

(aloca memória).

Page 34: A19-20 Classes e Objetos

Como representar uma classe?

Page 35: A19-20 Classes e Objetos

Representações Classes

• Como descrever os atributos e as operações de uma classe de objetos?

• Algumas alternativas são: – Usar a língua portuguesa

– Usar uma linguagem de programação OO

– Usar uma linguagem de modelagem - UML

Page 36: A19-20 Classes e Objetos

Representando Classes em UML

Page 37: A19-20 Classes e Objetos

Classes Representação em UML

• UML – Linguagem Unificada de Modelagem (Unified Modeling Language).

• UML nasceu em torno de 1995 e é fruto dos trabalhos de Booch, Jacobson e Rumbaugh.

• Ela fornece representações gráficas que auxiliam a modelagem e a programação OO.

Page 38: A19-20 Classes e Objetos

Classes Representação em UML

NomeDaClasse

atributo1: tipo atributo2: tipo ...

operação1(): tipo operação2(): tipo operação3(): tipo ...

Seção de nome da classe

Seção de atributos

Seção de operações

Page 39: A19-20 Classes e Objetos

Classes Representação em UML

Gato

nome: String idade: int peso: float

correr() comer() fazerAniversário() miar()

Seção de nome da classe

Seção de atributos

Seção de operações

Page 40: A19-20 Classes e Objetos

Classes Representação em C++

class NomeDaClasse { tipo atributo1; tipo atributo2; tipo método1(void); ... tipo método1(void) { // lógica... }; tipo método2(void) { // lógica... }; ... }

NomeDaClasse

atributo1: tipo atributo2: tipo ...

operação1(): tipo operação2(): tipo operação3(): tipo ...

Page 41: A19-20 Classes e Objetos

Classes de C++ - Métodos

• 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

Page 42: A19-20 Classes e Objetos

Classes de C++ - Métodos

Ex: class NomeDaClasse { void fazerAniversario(void); //Protótipo }; void NomeDaClasse::fazerAniversario(void) { };

Nome da classe

Nome do método

Page 43: A19-20 Classes e Objetos

Classes Representação em C++

• Um método é a implementação de uma operação.

Gato

nome: String idade: int peso: float

correr() comer() fazerAniversário() miar()

void Gato::fazerAniversario(void){

cout<<"Parabéns!!";

idade++;

};

Page 44: A19-20 Classes e Objetos

Classes Representação em C++

class Gato { string nome; int idade; float peso; void correr(void);... }; void Gato::correr(void) { cout<<nome<<" está correndo!“<<endl; peso--; cout<<"Peso: “<<peso<<endl; }; void Gato::comer(void) { cout<<nome<<nome<<" está comendo!“<<endl; peso = peso + 2; cout<<“Peso: “<<peso<<endl; }; void Gato::fazerAniversario(void){ cout<<"Parabens pra você, ...!“<<endl; idade++; cout<<"Idade: “<<idade<<endl; }; // classe Gato

Page 45: A19-20 Classes e Objetos

Exercícios

Q1. Considere os seguintes objetos abaixo. Identifique a classe destes objetos, três de seus atributos e operações, e represente tudo em UML: 1. Volkswagen Fusca, Toyota Corolla, Honda Civic,

Fiat Idea, e Ford Mondeo.

2. Objetos que marcam horas e minutos fabricados por Casio, Citizen, Rolex, Dumont, Seiko, etc.

Page 46: A19-20 Classes e Objetos

Exercícios

• Identifique os comportamentos e atributos de um aluno da UEA sob a perspectiva do sistema “Aluno On-Line”. Represente tudo em UML

Page 47: A19-20 Classes e Objetos

Exercícios

• Em que consiste a programação orientada a objetos (POO)?

• Quais os benefícios da orientação a objetos?

• Qual é a importância da abstração na POO?

• O comportamento de um objeto é definido por um conjunto de?

• As características ou estado de um objeto correspondem ao conjunto de?

Page 48: A19-20 Classes e Objetos

Exercícios

• Faça uma pesquisa sobre os paradigmas da computação e escreva um texto fazendo um comparativo sobre os vários paradigmas pesquisados.

• Pesquise pelo o menos 3 exemplos de linguagens de programação orientada a objetos.

Page 49: A19-20 Classes e Objetos

Exercícios

Q1. Considere os seguintes objetos abaixo. Identifique a classe destes objetos, seus atributos e métodos, e represente tudo em UML: 1. Objetos que recebem e realizam chamadas

telefônicas fabricados pela Nokia, Samsung, Apple e Blu

2. Objetos que marcam horas e minutos fabricados pela Casio, Citizen, Rolex, Dumont, Seiko, etc.

Page 50: A19-20 Classes e Objetos

Exercícios

Q2. Identifique os atributos e métodos de um objeto de aprendizagem voltado para ensinar geometria. O objeto deverá ensinar com calcular a área de um triangulo. Represente tudo em UML

Page 51: A19-20 Classes e Objetos

Exercícios

Q3. Verifique se as afirmativas são verdadeiras ou falsas: a) Uma classe descreve os atributos e as operações

(métodos) de um conjunto homogêneo de objetos. b) Na linguagem de modelagem UML, uma classe é

representada por uma caixa com três partes: na parte superior escrevemos o nome da classe; na parte central escrevemos a lista dos atributos da classe; e na parte inferior da caixa escrevemos a lista das operações.

(continua)

Page 52: A19-20 Classes e Objetos

Exercícios

Q3. Verifique se as afirmativas são verdadeiras ou falsas:

c) Imagine uma classe chamada Cachorro. Raça, cor, peso, nome, latir e dormir são exemplos de atributos possíveis para a classe Cachorro.

d) “Atributos” e “Métodos” são dois nomes diferentes que significam uma mesma coisa.

e) As características de um objeto (ou classe) podem ser chamadas de operações ou métodos.

Page 53: A19-20 Classes e Objetos

Instanciação e Instância

Page 54: A19-20 Classes e Objetos

Instanciação e Instância

• Como podemos usar um objeto? – É necessário instanciar a classe para criar um

objeto.

Page 55: A19-20 Classes e Objetos

55

• Instanciação é o processo que permite um objeto ser criado a partir de uma classe.

• Quando instanciamos ("criamos") um objeto de uma classe, o objeto passa a existir na memória.

• E quando o objeto é instanciado podemos começar a usá-lo.

• Dizemos que um objeto é uma instância de uma classe. Exemplo: os objetos Tom, Frajola e Garfield são instâncias da classe Gato.

Page 56: A19-20 Classes e Objetos

Instâncias

• A instanciação de um objeto de uma classe provoca a alocação de memória para criação do objeto.

• O objeto obtém uma endereço na memória também chamado de referência.

• Objetos são instâncias de classes!

Page 57: A19-20 Classes e Objetos

Instanciação e Instância

• Vamos instanciar um objeto gato da classe Gato:

// InstanciandoUmGato int main() { Gato meuGato = new Gato; }

Page 58: A19-20 Classes e Objetos

• O operador new na instrução new Gato;

instancia um objeto da classe Gato em uma região de memória chamada Heap.

Heap

objeto da classe Gato Endereço: F70A1

Page 59: A19-20 Classes e Objetos

• Problema: new Gato;

cria o objeto, mas não temos como acessá-lo, referenciá-lo!

• Sem acessar o objeto, não podemos utilizá-lo.

• Solução: – usar uma variável para referenciar o objeto

assim...

Page 60: A19-20 Classes e Objetos

// InstanciandoUmGato int main() {

Gato frajola; frajola = new Gato;

}

Page 61: A19-20 Classes e Objetos

• A variável frajola está referenciando o objeto.

• Agora, temos acesso ao objeto, e podemos utilizá-lo.

Heap

objeto da classe Gato Endereço: F70A1

frajola

Page 62: A19-20 Classes e Objetos

Variável de Instância • A variável frajola é uma variável de instância. • A variável de instância é o nome da variável

que recebe a referência do objeto instanciado. • Por meio desta variável os atributos e

métodos de uma classe tornam-se disponíveis em cada objeto instanciado e podem ser usados.

• Cada objeto tem sua própria variável de instância.

Page 63: A19-20 Classes e Objetos

Variável de Instância • Exemplo:

• Classe Aluno

• Atributos – nome

– matricula

• Métodos – imprimir nome

– imprimir matricula

Page 64: A19-20 Classes e Objetos

• Na classe aluno cada objeto instanciado modela uma pessoa que tem seu próprio nome e matrícula.

Aluno 1

nome: João matrícula: 123456

nome: Maria matrícula: 654321

Aluno 2

nome: Pedro matrícula: 123226

Aluno 3

Variáveis de Instância Objetos

Classe Aluno

referências

Page 65: A19-20 Classes e Objetos

Instanciação e Instância

• Como podemos utilizar um objeto? – Atribuindo valores para seus atributos (atribuir

um estado para o objeto).

– Invocando suas operações (métodos), visando algum objetivo.

Page 66: A19-20 Classes e Objetos

Instanciando e usando objetos

// GatoPrincipal1

int main() {

// Instanciação do objeto frajola da classe Gato.

Gato frajola = new Gato;

// Atribuindo dados ao gato frajola

frajola.nome = "Frajola"; frajola.idade = 2; frajola.peso = 2.3f; // “f” de float.

// Mostrando o estado do gato

cout<<"Nome: "<<frajola.nome<<endl; cout<<"Idade: "<<frajola.idade<<endl; cout<<"Peso: "<<frajola.peso<<endl;

} // fim main

Page 67: A19-20 Classes e Objetos

Instanciando e usando objetos

int main() {

// Instanciando dois gatos

Gato frajola = new Gato; Gato garfield = new Gato; // Atribuindo dados aos gatos

frajola.nome = "Frajola"; frajola.idade = 2; frajola.peso = 2.3f; // “f” de float. garfield.nome = "Garfield "; garfield.idade = 1; garfield.peso = 5.7f; // “f” de float. // Mostrando os estados dos gatos

cout<<"Nome:“<<frajola.nome<<endl; cout<<"Idade:“<<frajola.idade<<endl; cout<<"Peso:“<<frajola.peso<<endl; cout<<"Nome:“<<garfield.nome<<endl; cout<<"Idade:“<<garfield.idade<<endl; cout<<"Peso:“<<garfield.peso<<endl;

} // fim main

Page 68: A19-20 Classes e Objetos

Métodos

• Um MÉTODO é a implementação de uma operação numa classe.

• Operações são usadas para ler ou manipular os dados (atributos) de um objeto.

• Todos os objetos de uma classe compartilham os mesmos métodos.

• É formado por: – nome, tipo de dados dos argumentos e valores

retornados; – Algoritmo do método.

Page 69: A19-20 Classes e Objetos

Métodos

• Exemplo: • Classe Aluno • Atributos

– nome – matricula

• Métodos – inserir nome(“Pedro”) – imprimir nome() – Inserir matricula(654231) – imprimir matricula()

Page 70: A19-20 Classes e Objetos

Métodos

• Os métodos viabilizam que os objetos comunicam-se entre si. – Através dos métodos é possível:

• obter os valores de atributos (variáveis) de um objeto;

• alterar o valor de atributos do objeto;

• fornecer informações ao objeto;

Page 71: A19-20 Classes e Objetos

Métodos

• A capacidade de um objeto invocar o método de outro objeto é chamado enviar uma MENSAGEM.

• Desta forma, mensagens possibilitam a interação entre os objetos.

Page 72: A19-20 Classes e Objetos

Métodos

• Exemplo.

• Quando o objeto A deseja que o objeto B execute um dos seus métodos.

• O objeto A envia uma mensagem ao objeto B.

Objeto A Objeto B

Inserir aluno (“Pedro”)

Aluno inserido com sucesso!

Page 73: A19-20 Classes e Objetos

Métodos

• Uma mensagem contém: – nome do método;

– argumentos do método;

• A resposta a uma mensagem é o resultado da execução do método correspondente.

Page 74: A19-20 Classes e Objetos

Envio de Mensagem

• Envio de mensagem é quando invocamos um método de um objeto.

• Nada mais é do que chamar um método de um objeto.

• Exemplo: – envio da mensagem "frajola, coma": frajola.comer();

– envio da mensagem "frajola, corra": frajola.correr();

– envio da mensagem "frajola, faça aniversário": frajola.fazerAniversario();

Page 75: A19-20 Classes e Objetos

int main() {

// Instanciação...

Gato frajola = new Gato;

// Atribuindo dados ao gato frajola

frajola.nome = "Frajola"; frajola.idade = 2; frajola.peso = 2.3f; // “f” de float.

frajola.fazerAniversario(); frajola.correr(); frajola.correr(); frajola.comer(); frajola.fazerAniversario(); } // fim main

}

Envio de Mensagem

Page 76: A19-20 Classes e Objetos

Métodos Especiais

• Construtor – criação / instanciação do objeto.

– Método que atribui valores default (padrões) para os atributos de um objeto.

– Possui o mesmo nome da classe.

Gato frajola = new Gato;

Page 77: A19-20 Classes e Objetos

Função Construtora

• Métodos que facilitam aos programadores a inicialização dos dados-membro da classe

• Tem o mesmo nome da classe, porém, não precede o nome dela com a palavra-chave void

• Não retorna tipo

• É chamada quando se cria um objeto

Page 78: A19-20 Classes e Objetos

Métodos Especiais

• Destrutor – Método que libera o espaço ocupado pelo objeto

da memória (delete).

– Invocado quando o objeto será destruído da memória.

Page 79: A19-20 Classes e Objetos

Função Destrutora

• É chamada para descartar um objeto, liberando a memória que estava sendo usada

• Tem o mesmo nome da classe, porém, precedido do caractere til (~)

• Não retorna tipo, nem precede o nome dela com a palavra-chave void

Page 80: A19-20 Classes e Objetos

Encapsulamento

• O encapsulamento é uma forma de restringir o acesso aos atributos e aos métodos de um objeto. – Um objeto que precisa da colaboração de outro

objeto para realizar alguma tarefa simplesmente envia uma mensagem a este último.

Objeto A Objeto B

Inserir aluno (“Pedro”)

Aluno inserido com sucesso!

Page 81: A19-20 Classes e Objetos

Encapsulamento

• Objeto DVD

Page 82: A19-20 Classes e Objetos

Encapsulamento

• Esconde a estrutura dos dados e implementação interna dos métodos do objeto.

• Mudanças internas na implementação dos métodos não têm impacto sobre os objetos clientes.

Page 83: A19-20 Classes e Objetos

Encapsulamento

• Os objetos clientes conhecem somente as assinaturas dos métodos requisitados.

• Geralmente, utiliza-se modificadores de acesso para privar os atributos do acesso direto (tornando-os privados)

• Implementa-se os métodos que acessam e alteram os atributos como públicos.

Page 84: A19-20 Classes e Objetos

Encapsulamento

• Modificador de acesso – É uma palavra-chave que define um atributo ou

método como : • público (ou public, qualquer classe pode ter acesso)

• privado (ou private, apenas os métodos da própria classe pode manipular o atributo) ;

• protegido (ou protected, pode ser acessado apenas pela própria classe ou pelas suas subclasses).

Page 85: A19-20 Classes e Objetos

Exercícios

Q2. Verifique se as afirmativas são verdadeiras ou falsas:

a) Suponha que y seja um objeto da classe X e que m() seja um método de X. Para chamar o método m() devemos fazer y.m();

b) A principal função de um atributo é armazenar os dados de um objeto; a de um método é armazenar as instâncias de uma classe.

(continua)

Page 86: A19-20 Classes e Objetos

Exercícios

Q3. Verifique se as afirmativas são verdadeiras ou falsas:

a) Sempre que uma mensagem é enviada para um objeto, o seu estado se altera.

b) Duas instâncias quaisquer de uma classe podem ter estados iguais, e serem objetos distintos.

c) K p = new K; é um exemplo de instanciação de um objeto denominado p da classe K.

(continua)

Page 87: A19-20 Classes e Objetos

Exercícios

Q4. Verifique se as afirmativas são verdadeiras ou falsas:

a) O método construtor deve ser usado para construir uma classe.

b) O encapsulamento visa restringir o acesso a implementação interna dos métodos e aos atributos de um objeto.

Page 88: A19-20 Classes e Objetos

Exercícios

• Crie classes que modelam os objetos funcionário e aluno.

• Especifique os atributos, métodos e construtores.

Page 89: A19-20 Classes e Objetos

Classe Abstrata

Page 90: A19-20 Classes e Objetos

Classe Abstrata

• Em classes de caráter muito geral ou abstrato, não faz sentido instanciarmos seus objetos.

• Exemplos de classes sem sentido prático de instanciação: – Figura Geométrica, Conta Bancária, Alarme,

Pessoa Jurídica, Profissional, Atleta, etc.

• Em casos como esses podemos usar uma Classe Abstrata

Page 91: A19-20 Classes e Objetos

Classe Abstrata

• Uma classe abstrata é desenvolvida para representar entidades e conceitos abstratos.

• Uma classe abstrata é utilizada tipicamente como uma classe base para derivar outras classes.

• Comportasse como um modelo (template) para as suas subclasses .

• Apresenta definições que serão aproveitadas por outras classes da hierarquia.

Page 92: A19-20 Classes e Objetos

Classe Abstrata

• Não podemos instanciar uma classe abstrata

• Ou seja, a classe abstrata é sempre uma superclasse que não possui instâncias

• É composta por métodos abstratos, que são desprovidos de implementação, e também por métodos não abstratos

Page 93: A19-20 Classes e Objetos

Classe Abstrata

Page 94: A19-20 Classes e Objetos

Classe Abstrata

Page 95: A19-20 Classes e Objetos

Classe Abstrata

Page 96: A19-20 Classes e Objetos

Classe Abstrata em UML

Page 97: A19-20 Classes e Objetos

Classe Abstrata em C++

Em C++, a palavra virtual antes do nome do método: Class FormaGeometrica{ protected: int x,y; public: virtual void mostrar(void); };

Page 98: A19-20 Classes e Objetos

Classe Abstrata em C++

• Métodos abstratos são declarados em C++ por meio da palavra-chave virtual.

• Todos os métodos abstratos devem ser implementados pela classe concreta que herda (:) dela, a menos que a subclasse também seja abstrata.

Page 99: A19-20 Classes e Objetos

class Alarm { public: virtual void programarAlarm(void); } • Um método abstrato contém somente a declaração do método. class AlarmVeicular: public Alarm{ public: void AlarmVeicular::programarAlarm(void){ cout<<“Alarme programado”<<endl; } } • Deve ser implementado por qualquer classe concreta que herda dela com o objetivo

de definir o comportamento específico.

Page 100: A19-20 Classes e Objetos

//Esta é uma classe abstrata que representa qualquer operação matemática

class OperacaoMatematica { ...

public: virtual double calcular(double x, double y);

};

Page 101: A19-20 Classes e Objetos

class Soma : OperacaoMatematica { ...

//Override

public: double Soma::calcular(double x, double y) { return x + y; }

};

Page 102: A19-20 Classes e Objetos

class Subtracao : OperacaoMatematica { ...

//Override

public: double Subtracao::calcular(double x, double y) {

return x - y; }

}

Page 103: A19-20 Classes e Objetos

class Multiplicacao : OperacaoMatematica { ...

//Override

public: double Multiplicacao::calcular(double x, double y) {

return x * y; }

}

Page 104: A19-20 Classes e Objetos

class Divisao : OperacaoMatematica { ...

//Override

public: double Divisao::calcular(double x, double y) {

return x / y; }

}

Page 105: A19-20 Classes e Objetos

//ExemploClasseAbstrata

void mostrarCalculo(OperacaoMatematica operacao, double x, double y) {

cout<<"O resultado é: “<<operacao.calcular(x, y))<<endl;

}

int main() {

mostrarCalculo(new Soma, 5, 5); mostrarCalculo(new Subtracao, 5, 4); mostrarCalculo(new Multiplicacao, 5, 4); mostrarCalculo(new Divisao, 8, 4); }

Page 106: A19-20 Classes e Objetos

Exercício

• Elabore um digrama de classes que modele uma classe abstrata que represente um típico eletrodoméstico, com os atributos voltagem, preço, on_off e os métodos abstratos ligar() e desligar().

• Modele também classes concretas derivadas a partir da classe abstrata, e os respectivos métodos abstratos herdados.

Page 107: A19-20 Classes e Objetos

Exercício

• Implemente em C++ uma classe abstrata que represente um típico eletrodoméstico, com os atributos voltagem, preço, on_off e os métodos abstratos ligar() e desligar().

• Implemente também classes concretas derivadas a partir da classe abstrata, e os respectivos métodos abstratos herdados.

• Instancie objetos a partir das classes concretas.

Page 108: A19-20 Classes e Objetos

Muito Obrigado