Fundamentos da Orientação a Objetos
Fundamentos da Orientação a Objetos
Aplicações do
Paradigma de Orientação a
Objetos
Paradigma de Orientação a
Objetos
Surgiu na tentativa de solucionar problemas
existentes no desenvolvimento de Softwares
Complexos e Confiáveis com baixo custo de
desenvolvimento e manutenção
Mundo Real é formado por objetos que se
interagem
Representar esses objetos em um software é mais
natural e permanente do que representar a sua
funcionalidade (decomposição funcional), pois
essa é mutável
UNIC/ USP Turine/Minghim 2
1
Mundo Computacional
Mundo Real
ESPAÇO DE
ESPAÇO DE SOLUÇÕES
PROBLEMAS
Gap Semântico
RESULTADOS
DADOS ESPAÇO DE
PROBLEMAS
Objetos do
Objetos e Operações Algoritmo do mundo real
do mundo real mundo real
Mapeamento do
domínio de Interpretação Humana dos
soluções resultados
ESPAÇO DE
SOLUÇÕES
Objetos e Operações Dados de Saída
abstratas
Algoritmo
computacional
2
Gap Semântico
Diferença entre Espaço de Problemas e Soluções
Todo software representa um Modelo de um problema do
mundo real (Espaço de Soluções)
A construção de um software envolve um processo de
mapeamento de objetos pertencentes ao espaço de
problemas para o espaço de soluções, de tal maneira que
operações sobre essas representações abstratas
correspondam a operações do mundo real
Projetista cria algoritmos que quando executados no
computador produzirão resultados, que podem ser
mapeados fisicamente para alguma ação do mundo real
ou examinados/interpretados por pessoas
Gap Semântico
EVIDENTE:quanto mais próximo
(conceitualmente) estiver o espaço de soluções
do espaço de problemas, mais fácil será:
– o desenvolvimento da aplicação
– assegurar a compreensão, confiabilidade e
manutenção da aplicação
3
Mundo Computacional
Mundo Real
ESPAÇO DE
ESPAÇO DE SOLUÇÕES
PROBLEMAS
Mapeamento
Processo de Identificação
de Abstrações
•Se essas abstrações não tiverem uma expressão direta (ou próxima)
do mundo computacional, a complexidade da solução será aumentada
Modelagem Conceitual
Tarefa mais importante de um processo de
desenvolvimento de software
– realiza-se a análise do domínio da aplicação e a
modelagem das entidades e fenômenos desse domínio
que o projetista considera importante,
independentemente da implementação
A tarefa de modelagem conceitual envolve dois
mecanismos:
– Abstração
– Representação
4
Modelagem Conceitual
Refere-se às
Operação mental convenções de
para observar um representação
domínio e capturar
sua estrutura REPRESENTAÇÃO
ABSTRAÇÃO
Entidade Entidade
Observada Representada
Notação gráfica,
Avião
linguagem de programação
Abstração
Mecanismo utilizado na análise de um domínio
Através dela, o indivíduo observa a realidade e
dela abstrai entidades, ações, etc. consideradas
essenciais para uma aplicação, excluindo todos
os aspectos julgados irrelevantes
Exemplo:
– Fotografia por satélite (imagem da realidade),
despida de alguns aspectos (por exemplo, cor, movimento)
– Da foto, pode-se abstrair um mapa, que elimina
diversas propriedades da foto (detalhes particulares de
um edifício ou praça)
– O mapa pode ser a base para abstrair um grafo
UNIC/ USP Turine/Minghim 10
5
Abstração
“a beleza está nos olhos de quem a vê”
Abstração
“a beleza está nos olhos de quem a vê”
Cardinalidade
I, II, do conjunto
Maça
Peso
cor da casca
format Receita
3
ATRIBUTO
CATEGORIA
AÇÃO
6
Operações de Abstração relevantes para
a modelagem conceitual
Classificação (Instanciação)
– categorização dos objetos em grupos e/ou classes
(categoria), com base em algum conjunto de
propriedades comuns
Generalização (Especialização)
– a partir de duas categorias abstrai-se uma categoria
mais genérica
– sub-categorias satisfazem todas as propriedades das
categorias de que elas constituem especializações
– deve existir pelo menos uma propriedade que
distingue duas categorias especializadas
UNIC/ USP Turine/Minghim 13
Agregação (Decomposição)
– composição de uma nova categoria como um
agregado de categorias pré-existentes
– instâncias de uma categoria (Estudante) são
compostas por instâncias de outras categorias (Nome,
Endereço)
7
Classificação/Instanciação
CATEGORIA
Estudante
de
Graduação
CLASSIFICAÇÃO
INSTANCIAÇÃO
José Maria
INDIVÍDUO
(Objeto)
UNIC/ USP Turine/Minghim 15
Classificação/Instanciação
CATEGORIA
Estudante
de
Graduação
CLASSIFICAÇÃO
Membro
do
Coral INSTANCIAÇÃO
José Maria
INDIVÍDUO
(Objeto)
UNIC/ USP Turine/Minghim 16
8
Generalização/Especialização
CATEGORIA
Estudante
GENERALIZAÇÃO
ESPECIALIZAÇÃO
Estudante Estudante (herança)
de de Pós-
Graduação Graduação
CATEGORIA
UNIC/ USP Turine/Minghim 17
Generalização/Especialização
CATEGORIA
Atributos Mamífero
•sangue quente
•vertebrado
•vivíparo
GENERALIZAÇÃO
ESPECIALIZAÇÃO
Baleia (herança)
Atributos
•Habitat: mar
•Tempo médio de
vida: 200 anos
CATEGORIA
UNIC/ USP Turine/Minghim 18
9
Agregação/Decomposição
CATEGORIA
Estudante
AGREGAÇÃO
(composição -
síntese)
DECOMPOSIÇÃO
Graduação Especializ. (refinamento -
análise)
CATEGORIA COMPONENTE
Paradigma de Orientação a
Objetos (OO)
Idéia básica
“Nós percebemos o mundo como uma coleção de objetos
que interagem entre si”
10
Paradigma de Orientação a
Objetos (OO)
Tradicionalmente
– Softwares são formados por dados e procedimentos
independentes
Paradigma OO
– Softwares são formados, principalmente, por:
• Objetos
– parte interna (define o comportamento do objeto, ou seja,
especifica os métodos associados ao objeto)
– parte externa (interface - maneira que o objeto se apresenta
para outros objetos)
• Mensagens
– Diminuir o gap semântico
Paradigma de Orientação a
Objetos
O desenvolvimento orientado a objetos evoluiu no sentido
PROGRAMAÇÃO
ANÁLISE
Conceitos desse paradigma foram introduzidos com o
surgimento da linguagem Smalltalk
Em seguida, surgiram métods de projeto para dar suporte
à implementação de sistemas orientados a objetos
Recentemente, propostas de métodos para análise e
projeto vêm emergindo
UNIC/ USP Turine/Minghim 22
11
Histórico
A OO surgiu no final da década de 60, quando
dois cientistas dinamarqueses criaram a linguagem
Simula (Simulation Language)
1967 - Linguagem de Programação Simula-67-
conceitos de classe e herança
O termo Programação Orientada a Objeto (POO) é
introduzido com a linguagem Smalltalk (1983)
FINS DOS ANOS 80 Paradigma de Orientação
a Objetos
– abordagem poderosa e prática para o desenvolvimento
de software
UNIC/ USP Turine/Minghim 23
Histórico
Linguagens híbridas:
– C++ (1986), Object-Pascal (1986)
Métodos de Análise e Projeto OO
– CRC (Class Responsability Collaborator, Beecke e
Cunningham, 1989)
– OOA (Object Oriented Analysis, Coad e Yourdon,
1990)
– Booch (1991)
– OMT (Object Modeling Technique, Rumbaugh, 1991)
– Objectory (Jacobson, 1992)
– Fusion (1994)
– Unified Modeling Language (UML, 1997)
UNIC/ USP Turine/Minghim 24
12
Conceitos de OO
Modelo de Objetos
– Objeto
– Mensagem
– Método
Classe
Atributo
Protocolo
Classificação
Herança
Encapsulamento/Ocultamento de Informação
Polimorfismo
UNIC/ USP Turine/Minghim 25
Objeto
Tudo em Orientação Objeto é OBJETO
Objeto, no mundo físico, é tipicamente um produtor e
consumidor de itens de informação
– máquina, comandos, arquivos, pessoas, sinais
Definição (mundo do sofware)
– “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 de modo
que essa entidade possue várias características
– Exemplo: objetos cachorro e casa
13
•Raça
•cor
•pedigree
CACHORRO CASA
14
Mapeamento
Abstração Implementação
DOMÍNIO
ABSTRAÇÃO +
OPERAÇÕES
ATRIBUTOS
<Nome do Objeto>
(Dados)
+
IMPLEMENTAÇÃO <Atributos>
MÉTODOS
(Procedimentos)
<Métodos>
UNIC/ USP Turine/Minghim 29
Objeto
Resumindo:
– Pacote de informações (atributos) e a descrição de
suas operações (métodos), de modo que elas são
intrínsecas ao seu domínio e este é formado pelos
elementos que o caracterizam
– Exemplo: Objeto: Pessoa
• Objeto: Pessoa
Nome
• Atributos: Nome, Data de Data Nasc.
Nascimento, Cor Cor
15
Objeto
Exemplo
– uma Pessoa e um Carro podem ser considerados
como um objeto de dados no sentido de que qualquer
um deles pode ser definido em termos de um conjunto
de atributos e operações
Objetos podem relacionar-se um com o outro
Uma Pessoa pode possuir Carro, onde o
relacionamento possuir define uma conexão
específica entre Pessoa e Carro
Objeto
=
Atributos (Dados)
+
Métodos (Funcionalidade)
+
Encapsulamento
16
Exemplos de Objeto
Uma fatura
Uma organização
Uma tela com a qual o usuário interage
Um desenho de engenheiro
Um avião
Um vôo de avião
Uma reserva num avião
Um processo de atendimento de pedidos
Um computador
Um ser humano neurrótico pode ser estereotipado como
um objeto: possui memória em que valores podem ser
armazenados e que condicionarão seu comportamento
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 possue seu próprio conjunto de atributos
Exemplos:
– Objeto Pessoa
• Atributos: Nome, Cor, Data de Nascimento
– Objeto Empregado
• Atributos: No do empregado, nome, nome do departamento, salário,
endereço, dependentes
UNIC/ USP Turine/Minghim 34
17
Dicionário
Objeto: Dicionário
Estrutura de Dados
Adicionar Palavra
Eliminar Palavra
Encontrar Palavra
Imprimir definição
Atributo
Um valor armazenado pelos objetos da classe
– PESSOA: nome, idade, peso, cor
– CARRO: cor, peso, ano, modelo
– Cada atributo possui um valor para cada instância
– João tem 24 anos e Maria tem 40
Não se deve explicitar identificadores (características de
programação - não têm significado intrínseco)
– Não confunda identificadores internos com atributos do mundo
real
– O número do seguro social, número da chapa do carro,
número do telefone, RG não são identificadores
internos. ELES são atributos, pois têm significado no
mundo real. ATRIBUTOS LEGÍTIMOS
18
Classificação
Categorização em Classes
Quando estamos modelando um domínio, observamos
que há várias entidades similares que podem ser
abstraídas em um conceito único que engloba esta
similaridade
Operação de abstração das Similaridades
O POO incorporou esta operação através da abstração dos
atributos e dos métodos que caracterizam objetos
semelhantes, especificando-os na CLASSE
Exemplo:
– Classificação de espécies em Zoologia
19
Classe
Objeto: abstração de uma entidade do mundo real,
através dos atributos e operações
Classe: abstração de um conjunto de objetos similares do
mundo real
Agrupamento de objetos similares. Descreve a
– estrutura de dados, e o
– comportamento de objetos similares
Todo objeto é uma instância de uma Classe
Todas as instâncias de uma classe têm valores próprios
para os atributos especificados na classe
Os objetos representados por determinada classe
diferenciam-se entre si pelos valores de seus atributos
Sistema puramente OO, Classe é também um Objeto
UNIC/ USP Turine/Minghim 39
Classe
Conjunto de objetos que possuem propriedades
semelhantes (ATRIBUTOS), o mesmo
comportamento (MÉTODOS), os mesmos
relacionamentos com outros objetos e a mesma
semântica
– PESSOA, CARRO, CASA, VEÍCULO
– EMPRESA, PAÍS, SERES HUMANOS, HOMENS,
MULHERES, MEIO DE TRANSPORTE
20
Classe
Similar a um TAD (Tipo-Abstrato-de-Dados):
pode ser usado como base para a criação de
objetos que sejam entidades executáveis com
atributos e operações (métodos) da classe.
Sua especificação é uma especificação da
interface na qual as partes visíveis da entidade
são expostas.
Os objetos criados podem ter outros atributos e
procedimentos privativos não aparecem na
especificação
Livro
21
Portas Quartos
Reformar
Salas Localização
Limpar
Cozinha Telhado
Pintar
Mobiliar
CASA
Especialização
22
Animal superclasse
Hierarquia de Classes
Gato Cão
De Raça Vira-Lata
Seres Humanos
Nome
Data_Nascimento
RG
Homem Mulher
Certif_Reservista
23
Veículo
Herança
Mecanismque permite definir uma nova classe
(subclasse) a partir de uma classe já existente
(superclasse)
Ao se estabelecer uma Especialização (subclasse) de uma
classe, a subclasse herda as características comuns da
superclasse, isto é, a especificação dos atributos e dos
métodos da superclasse passam a fazer parte da
especificação dos atributos e dos métodos da subclasse
– A subclasse pode adicionar novos métodos, como também
reescrever métodos herdados
Habilidade de um objeto derivar seus atributos (dados) e
métodos (funcionalidade) automaticamente de outro
objeto
UNIC/ USP Turine/Minghim 48
24
Herança
Classes podem ser construídas a partir de outras já
existentes; facilita extensibilidade
Quando uma mensagem é enviada para um objeto
– A procura do método correspondente começa pela classe do
objeto
– Se o método não for encontrado, a procura continua na
superclasse
A Herança pode ser de dois tipos:
– Herança Simples: quando uma classe é subclasse de somente
uma superclasse
– Herança Múltipla: quando uma classe é subclasse de várias
superclasses e conseqüentemente herda as características de cada
uma delas
RGM (registro)
Cursar Estudante Docente Funcionário
Graduação Pós-Graduação
Herança
Múltipla
Assistente
25
Mensagem
É o mecanismo através do qual os objetos se comunicam,
invocando as operações desejadas
Especificação de uma operação do objeto
É composta por
– Seletor:
• nome simbólico que descreve o tipo da operação
• descreve O QUE o objeto que envia quer que seja invocado,
não como deveria ser invocado
• o objeto recebedor da mensagem contém a descrição de
COMO a operação deveria ser executada
– Parâmetros:
• argumentos que uma mensagem pode conter que faz parte da
operação e requer uma ordem única
UNIC/ USP Turine/Minghim 51
26
Mensagem
Um objeto (Emissor) envia uma mensagem a outro
(Receptor) que executará o serviço
Métodos são invocados por Mensagens
Exemplo
– A chamada de um procedimento/função em LP é uma
aproximação inicial de uma mensagem, como em
P(10,20), onde
P é o seletor e os valores 10 e 20 são os parâmetros
– Diferença:
• a ação da mensagem a ser ativada depende essencialmente do
objeto que receber a mensagem
Método
Origem: LP Smalltalk
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 possue seu próprio conjunto de métodos
Definições:
– São procedimentos definidos e declarados que atuam sobre um
objeto ou sobre uma classe de objetos
– Descrição de uma sequência de ações a serem executadas por um
objeto
– Através dos métodos que especifica-se a um objeto COMO
FAZER alguma coisa
– São intrínsecos aos objetos e não podem ser separados
UNIC/ USP Turine/Minghim 54
27
Interface (Protocolo)
Objetos se comunicam através de Mensagens, que
invocam os Métodos desejados
Parte Privada do Objeto (Visão Interna)
– Métodos
– Atributos
Parte Compartilhada do Objeto ou Interface
– corresponde à parte externa do objeto, isto é, àquela que é vista
por outros objetos com a finalidade de invocar os métodos que o
objeto realiza
– agrupa um conjunto de mensagens que o objeto pode responder
– as mensagens especificam quais operações sobre o objeto podem
ser realizadas, mas não como a operação será executada
<Nome do Objeto>
Interface
<Métodos>
<Métodos>
28
Classes em C++
// classe chamada counter
class counter
{
private:
unsigned int value;
public:
counter( ) {value = 0}; // um construtor
void increment ( ) {if (value < 65535) value++; };
void decrement ( ) {if (value > 0) value--; };
unsigned int access_value( ) {return value; }
};
UNIC/ USP Turine/Minghim 57
Ocultamento de Informação
(Information Hiding)
29
Encapsulamento de Dados
Objetos encapsulam suas estruturas de dados (atributos)
Os atributos de um objeto só podem ser manipulados
pelos próprios métodos do objeto
Restringe a visibilidade do objeto mas 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
Polimorfismo
Ao receber uma mensagem para efetuar uma Operação, é
o objeto quem determina como a operação deve ser
efetuada, pois ele tem o comportamento próprio
Como a responsabilidade é do Receptor e não do
Emissor, pode acontecer que uma mesma mensagem
ative métodos diferentes, dependendo da classe de objeto
para onde é enviada a mensagem
Permite a criação de várias classes com interfaces
idênticas, porém objetos e implementações diferentes
Capacidade de uma mensagem ser executada de acordo
com as características do objeto que está recebendo o
pedido de execução do serviço
30
Polimorfismo
Por exemplo, a operação “=“ pode ser definida em várias
classes de números: inteiro (método de comparação
interia), string (método da ordem lexicográfica)
É comum em LPOOs
Objeto Valor
Classe Tipo (TAD)
Mensagem Chamada de Procedimento
31
Características
É membro - (instância)
de uma classe maior de
objetos
Cadeira Mobiliário
UNIC/ USP Turine/Minghim 63
Cor Classe
Mobiliário
Peso
Dimensões
Localização
Custo
herda
Atributos
(Propriedades) Cadeira
32
Cor Classe
Mobiliário
Comprado
Peso
Vendido
Dimensões
Modificado
Localização
Custo
herda
Operações
Atributos
(Serviços e
(Propriedades)
Cadeira Métodos)
33
Uma vez que o objeto CADEIRA é um
membro da classe MOBILIÁRIO, HERDA
todos os atributos definidos para a classe
Todo objeto da classe MOBILIÁRIO pode
ser manipulado de diversas maneiras
(OPERAÇÕES)
– comprado
– vendido, pesado
– modificado (pintar de roxo, serrar uma
perna)
Cada uma dessas operações (SERVIÇOS ou
MÉTODOS) modificará um ou mais
atributos do objeto
UNIC/ USP Turine/Minghim 67
Classe:
Mobiliário
Classe:
Custo Cadeira
Dimensões
Custo
Peso
Dimensões
Cor Classe:
Peso
Localização Camesa
Cor
Comprar Custo Localização
Vender Dimensões
Peso Comprar
Pesar
Cor Vender
Modificar
Localização Pesar
Modificar
Comprar
O objeto herda todos os Vender
atributos e as operações Pesar
da classe Modificar
34
<Nome da classe>
<Atributos>
<Operações>
35
Identificação de Objetos
O processo de análise para identificação dos
objetos e classes DIFÍCIL
Basicamente a mesma tarefa realizada na análise
e no projeto de sistemas (Análise Estruturada)
Os domínios de aplicação que naturalmente
refletem entidades concretas do mundo real se
beneficiam da abordagem OO
Identificação de Objetos
Objetos podem ser:
– Entidades Externas que produzem ou consomem
informações (outros sistemas, pessoas)
– Coisas que fazem parte do domínio (relatórios,
displays, cartas)
– Eventos que ocorrem no contexto do sistema
(transferência de propriedade)
– Papéis desempenhados por pessoas (gerente,
engenheiro, vendedor)
– Unidades organizacionais (grupo, equipe)
– Lugares que estabelecem o contexto do problema
(piso de fábrica, área de descarga)
UNIC/ USP Turine/Minghim 72
36
Efetuar uma "análise gramatical" sobre a narrativa
de processamento que descreva a bolha
37
Circulo Inicializa(float ax, float by, float cr)
//COLOCA O CIRCULO EM DETERMINADA POSICAO
{
Circulo altereme;
altereme.x = ax; altereme.y = by; altereme.r = cr;
return altereme;
}
Circulo Altera_Raio(Circulo altereme, float ar)
{
altereme.r = altereme.r + ar;
return altereme;
}
float Retorna_Raio(Circulo copieme)
{
return copieme.r;
}
UNIC/ USP Turine/Minghim 75
38
//Programa Principal - PARTE 1
int main(void)
{
ac = Inicializa(x,y,raio);
Mostra(ac);
ac = Move(ac,100.0,0.0);
ac = Altera_Raio(ac,10.0);
printf("Deslocou o circulo em 100 unidades na coordenada X e
aumenta o raio de 10 unidades\n");
Mostra(ac);
scanf("%d",leitura);
return 0;
39
Exemplo - C versus C++
// Programação Orientada a Objetos (C++)
// Programa Simples para ilustrar algumas diferenças básicas entre
programação orientada a objetos e procedural
#include <iostream.h> //para o método cout
class circulo //métodos para circulo
{
protected:
float raio; float x; float y;
public:
void inicializa(float ax,float by,float cr);
void altera_raio(float a);
float retorna_raio(void);
void move(float dx,float dy);
void mostra(void);
}; Turine/Minghim 79
UNIC/ USP
40
void circulo::move(float dx,float dy)
{
x= x + dx;
y = y + dy;
}
void circulo::mostra(void)
{
cout << "Raio:"<< retorna_raio() <<endl;
cout << "X:"<<x << endl;
cout << "Y:" <<y<< endl;
}
void main()
{
char wait;
float x, y, raio;
circulo ac;
cout << "Entre com a coordenada X:"; cin >> x;
cout << "\nEntre com a coordenada Y:";cin >> y;
cout << "\nEntre com o raio:"; cin >> raio;
[Link](x,y,raio);
[Link]();
...
UNIC/ USP Turine/Minghim 82
41
// Programa Principal –parte 2
[Link](100.0,0.0);
ac.altera_raio(12.0);
cout << "Desloca o circulo em 100 unidades na coordenada X e
aumenta o raio de 12 unidades\n";
[Link]();
cin >> wait;
42