Upload
bryanmartins
View
15
Download
0
Embed Size (px)
DESCRIPTION
Classes e objetos
Citation preview
Conteúdo da Aula •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.
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.
Exemplo de Aplicações
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;
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
Paradigma (cont.)
• Exemplos de paradigmas de programação
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.
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.
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
Abstração – uma habilidade importante para POO
Abstração
• Habilidade humana que permite visualizar imagens, identificar objetos em uma tela ou texto, identificar requisitos, comportamentos etc.
Abstração
• Em termos de desenvolvimento de sistemas, consiste em identificar quais objetos são relevantes para a resolução de um problema.
Quantos objetos você consegue identificar na figura abaixo?
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)
O que são 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.
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.
Exemplos de Objetos
• Abstrair atributos e métodos dos objetos: – Conta Bancaria;
– Carro;
• 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
• Um carro pode ter os seguintes atributos e métodos:
• Atributos – marcha; – velocidade; – modelo; – cor;
• Métodos – mudar marcha(); – acelerar(); – frear();
Exemplos de 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
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
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
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.
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.
Classe • A classe também classifica ou categoriza objetos que
possuem características e comportamentos comuns.
Classe Funcionário
Objeto Paula Objeto Pedro
• 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
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
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
• 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
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
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).
Como representar uma classe?
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
Representando Classes em UML
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.
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
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
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 ...
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
Classes de C++ - Métodos
Ex: class NomeDaClasse { void fazerAniversario(void); //Protótipo }; void NomeDaClasse::fazerAniversario(void) { };
Nome da classe
Nome do método
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++;
};
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
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.
Exercícios
• Identifique os comportamentos e atributos de um aluno da UEA sob a perspectiva do sistema “Aluno On-Line”. Represente tudo em UML
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?
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.
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.
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
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)
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.
Instanciação e Instância
Instanciação e Instância
• Como podemos usar um objeto? – É necessário instanciar a classe para criar um
objeto.
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.
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!
Instanciação e Instância
• Vamos instanciar um objeto gato da classe Gato:
// InstanciandoUmGato int main() { Gato meuGato = new Gato; }
• 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
• 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...
// InstanciandoUmGato int main() {
Gato frajola; frajola = new Gato;
}
• 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
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.
Variável de Instância • Exemplo:
• Classe Aluno
• Atributos – nome
– matricula
• Métodos – imprimir nome
– imprimir matricula
• 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
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.
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
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
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.
Métodos
• Exemplo: • Classe Aluno • Atributos
– nome – matricula
• Métodos – inserir nome(“Pedro”) – imprimir nome() – Inserir matricula(654231) – imprimir matricula()
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;
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.
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!
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.
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();
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
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;
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
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.
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
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!
Encapsulamento
• Objeto DVD
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.
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.
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).
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)
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)
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.
Exercícios
• Crie classes que modelam os objetos funcionário e aluno.
• Especifique os atributos, métodos e construtores.
Classe Abstrata
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
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.
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
Classe Abstrata
Classe Abstrata
Classe Abstrata
Classe Abstrata em UML
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); };
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.
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.
//Esta é uma classe abstrata que representa qualquer operação matemática
class OperacaoMatematica { ...
public: virtual double calcular(double x, double y);
};
class Soma : OperacaoMatematica { ...
//Override
public: double Soma::calcular(double x, double y) { return x + y; }
};
class Subtracao : OperacaoMatematica { ...
//Override
public: double Subtracao::calcular(double x, double y) {
return x - y; }
}
class Multiplicacao : OperacaoMatematica { ...
//Override
public: double Multiplicacao::calcular(double x, double y) {
return x * y; }
}
class Divisao : OperacaoMatematica { ...
//Override
public: double Divisao::calcular(double x, double y) {
return x / y; }
}
//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); }
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.
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.
Muito Obrigado