Escolar Documentos
Profissional Documentos
Cultura Documentos
Exemplos Básicos
Marta Mattoso
Introdução
O que é um objeto ?
VooAF147/Abril21/91
tarifa
assentos_disponíveis
assentos_reservados
solicita_reserva
muda_tarifa
Objeto = dados
+ definição de operações
+ implementação de operações
Objeto
Objetos vistos de fora: uma caixa com botões
Objetos vistos de dentro: dados e engenharia por trás
tarifa: 1000
assentos_disponíveis: 23
solicita_reserva
Î assentos_reservados: Reis, Rios,
...
muda_tarifa
Î solicita_reserva {
...}
muda_tarifa {
...}
Objeto
Mensagens aceitas:
estado: valor
(interface de
operações) ...
Î
Î
método {
Î implementação da operação
...}
Classe
Fábrica de objetos
nome: string
tarifa: real
...
muda_tarifa { ... }
solicita_reserva { ... }
...
Ó Ô
nome: Air France 147
tarifa: 1000.00
muda_tarifa { ... } instância da classe
...
Classe - especificação
class Vôo
type tuple (
public nome: string,
read tarifa: real,
read assentos_reservados: list(Pessoa))
...
method
public solicita_reserva (nb: integer): boolean,
public muda_tarifa (tarifa_nv: real)
...
end;
Classe - visibilidade
class Vôo
type tuple (
public nome: string,
read tarifa: real,
read assentos_reservados: list(Pessoa),
private assentos_disp: integer)
method
public solicita_reserva (nb: integer): boolean,
public muda_tarifa (tarifa_nv: real),
public muda_assentos (ass_livres: integer),
private assento_reservado (quem:Pessoa, qtd:integer)
end;
Graus de Encapsulamento
Total
Todo o acesso é feito apenas através das
operações definidas
De Modificação
É permitido o acesso direto para leitura
Parcial
Combinação de acesso direto e encapsulamento
Método
Um método está sempre associado a uma classe.
Método - corpo
method body solicita_reserva (rn:integer) : boolean in class Vôo
{
if ( self->assentos_disp >= rn)
return true;
else
return false;
}
method body muda_tarifa (tarifa_nv: real) in class Vôo
{
self->tarifa = tarifa_nv;
}
method body public muda_assentos (ass_livres: integer)
{
self->assentos_disp += ass_livres;
}
Criando objetos
run body {
o2 Vôo v;
v = new Vôo;
v->nome = "Alitalia 128";
printf("O vôo %s foi criado.\n", v->nome);
v->muda_tarifa(1500.00);
v->muda_assentos (250);
v->display;
}
O vôo Alitalia 128 foi criado.
o2
methods Vôo
nome Alitalia 128
tarifa 1500.00
assentos_reservados
Criando Relacionamentos
class Vôo
type tuple (
public nome: string,
read tarifa: real,
public assentos_reservados: list(Pessoa),
private assentos_disp: integer)
v1 = new Vôo;
v1->nome = "Alitalia 128";
v1->assentos_reservados[1] = p1;
v1->assentos_reservados[2] = p2;
o2
methods Vôo
nome Alitalia 128
tarifa 1500.00
assentos_reservados Vivaldi Bach
Criando Relacionamentos
display ( Barrocos );
o2
Barrocos
Vivaldi
Bach
Handel
v1->edit ;
o2
methods Vôo
nome Alitalia 128
tarifa 1500.00
assentos_reservados Vivaldi Bach
Criando Relacionamentos
o2
o2
Barrocos
methods Vôo
Vivaldi
nome Alitalia 128
tarifa
assentos_reservados
1500.00 Bach
Handel
Vival
di
o2
methods Vôo
nome Alitalia 128
tarifa 1500.00
assentos_reservados Vivaldi
Navegação
class Vôo
type tuple (
public nome: string,
read tarifa: real,
public cia_aerea: Cia,
public assentos_reservados: list(Pessoa),
private assentos_disp: integer)
class Cia
type tuple (
public nome: string,
read faturamento: real,
public presidente: string,
public sede: string)
class Pessoa
public type tuple (
nome: string,
telefone: string)
Navegação
José Air France Air
Campos 147 France
322 9999 1000,00 10000K
250 Etoile
Maria Silva *
222-3333 Paris
# # #
Gabriel
Silva Air France
455
750,00 Varig
500 20000K
Cláudio Silva *
222-3333 Pampa
Varig 224 Porto Alegre
500,00
150
*
#, #
Relacionamento implícito
Jose Campos 322-9999
Air France 147 José Campos
Maria Silva 222-3333
Air France 147 Maria Silva
Gabriel Silva 222-3333 Air France 147 Gabriel Silva
Varig 224 Gabriel Silva
Cláudio Silva 222-3333 Varig 224 Cláudio Silva
Projeção:
select nome
from Barrocos ;
Junção:
select p.nome, e.nome, e.ano_nasc
from p in Barrocos, e in Escritores
where p.ano_nasc = e.ano_nasc ;
Exemplos - navegação
class Vôo type tuple (
public nome: string,
read tarifa: real,
public assentos_reservados: set(Pessoa) )
method public solicita_reserva (nb: integer): boolean,
end;
name Vôos : set (Vôo);
o2 Vôo v1, v2, vtemp; o2 Pessoa p1, p2;
v1 = new Vôo ( "Air France 147", 1500.00);
v1.assentos_reservados += set( p1 = new Pessoa ( "João Reis", 19));
v2 = new Vôo ( "Varig 747", 2000.00);
v2.assentos_reservados += set( p2 = new Pessoa ( "José Rios", 39);
Vôos += set (v1, v2) ;
select v from v in Vôos,
p in v.assentos_reservados
where p.idade >30
Rel
select v.nome, tarifa, p.nome