Você está na página 1de 23

SGBDOO

Exemplos Básicos

Marta Mattoso
Introdução

Conceitos de Sistemas OO [Ditt94]


Enxergam e modelam o mundo real como uma coleção de unidades
distintas que se inter-relacionam : OBJETOS
‹ abstração e autonomia Æ objetos possuem estado e
encapsulamento de comportam
associação com outros objetos
solicitação de serviços
‹ classificação Æ descrição comum (intenção)
coleção de objetos similares
(extensão; "classes")
‹ taxonomia Æ super-/subclasses
herança de propriedades

I Escola Regional de Informática Marta Mattoso 1


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

I Escola Regional de Informática Marta Mattoso 2


Introdução

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 {
...}

I Escola Regional de Informática Marta Mattoso 3


Introdução

Objeto

Mensagens aceitas:
estado: valor
(interface de
operações) ...

Î
Î
método {

Î implementação da operação
...}

I Escola Regional de Informática Marta Mattoso 4


Introduçã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
...

I Escola Regional de Informática Marta Mattoso 5


Introdução

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;

I Escola Regional de Informática Marta Mattoso 6


Introdução

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;

I Escola Regional de Informática Marta Mattoso 7


Introdução

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

I Escola Regional de Informática Marta Mattoso 8


Introdução

Método
Um método está sempre associado a uma classe.

Sua especificação é chamada de .


ex: method public solicita_reserva (rn:integer) : boolean
in class Vôo;

Sua implementação é chamada de .


ex: method body solicita_reserva (rn:integer) : boolean in
class Vôo
{ ... }

I Escola Regional de Informática Marta Mattoso 9


Introdução

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

I Escola Regional de Informática Marta Mattoso 10


Introdução

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 ‹

I Escola Regional de Informática Marta Mattoso 11


Relacionamentos

Criando objetos e coleções


class Pessoa
public type tuple (
nome: string,
ano_nasc: integer)
run body {
o2 Pessoa p1, p2, p3;
p1 = new Pessoa;
p1->nome = "Vivaldi";
p1->ano_nasc = 1678;
p2 = new Pessoa;
p2->nome = "Bach";
p2->ano_nasc = 1681;
p3 = new Pessoa;
p3->nome = "Handel";
p3->ano_nasc = 1685;
}
name Barrocos : set (Pessoa);
Barrocos += {p1, p2, p3};

I Escola Regional de Informática Marta Mattoso 0


Relacionamentos

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

I Escola Regional de Informática Marta Mattoso 1


Relacionamentos

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

I Escola Regional de Informática Marta Mattoso 2


Relacionamentos

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

I Escola Regional de Informática Marta Mattoso 3


Relacionamentos

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)

I Escola Regional de Informática Marta Mattoso 4


Relacionamentos

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
*
#, #

I Escola Regional de Informática Marta Mattoso 5


Relacionamentos

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

Air France 147 1000,00 250 Air France


Air France 455 750,00 500 Air France
Varig 224 500,00 150 Varig

Varig 20000K Pampa Porto Alegre


Air France 10000K Etoile Paris

I Escola Regional de Informática Marta Mattoso 6


3- Linguagem de Consulta

Exemplos - Consultas relacionais


Seleção:
select p
from p in Barrocos
where p.ano_nasc > 1680;

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 ;

I Escola Regional de Informática Marta Mattoso 1


3- Linguagem de Consulta

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

I Escola Regional de Informática Marta Mattoso 2


3- Linguagem de Consulta

Exemplo relacional ( navegação )


OO
select v from v in Vôos,
p in v.assentos_reservados
where p.idade >30

Rel
select v.nome, tarifa, p.nome

from v in Vôos, p in Pessoas, r in Reservas

where v.nome = r.voo


and r.passageiro = p.nome
and p.idade >30

I Escola Regional de Informática Marta Mattoso 3


3- Linguagem de Consulta

Escopo: exemplos - métodos


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,
end;
...
select v
from v in Vôos
where v->solicita_reserva (15);

I Escola Regional de Informática Marta Mattoso 4

Você também pode gostar