- Este tópico contém 1 resposta, 2 vozes e foi atualizado pela última vez 17 anos, 2 meses atrás por
Manoel872.
-
AutorPosts
-
12 de janeiro de 2009 às 7:06 pm #84650
RicardoC
ParticipantePrezados,
Sou Desenvolvedor dot net, não tenho conhecimento em Oracle, mas sei do seu potencial. Estou fazendo meu TCC sobre Banco de Dados Orientado a Objeto e gostaria de saber quais das versões do Oracle é Orientado a Objeto e onde eu posso conseguir material de estudo sobre esta versão para OO, inclusive baixar o próprio banco para implementar os testes.
Obrigado,
Ricardo…
12 de janeiro de 2009 às 7:21 pm #84651Manoel872
ParticipanteAlgum tempo atraz le em um post a respeito disso e achei uma resposta legal de um usuario de um outro forum.
”
discordo do que você falou sobre o Pl/SQL não ser orientado a objetos, pode ser que não seja completamente orientado a objetos, mas realmente é possível programar orientado a objetos em Pl/SQL utilizando principalmente os TYPES… veja o exemplo
Código:CREATE OR REPLACE TYPE PESSOA AS OBJECT (
NOME VARCHAR2(80),
IDADE NUMBER,
MEMBER FUNCTION GET_IDADE RETURN NUMBER,
MEMBER FUNCTION GET_NOME RETURN VARCHAR2,
MEMBER PROCEDURE SET_IDADE(IDADE IN NUMBER),
MEMBER PROCEDURE SET_NOME(NOME IN VARCHAR2),
MEMBER FUNCTION GET_TYPE RETURN VARCHAR2,
CONSTRUCTOR FUNCTION PESSOA(NOME IN VARCHAR2,IDADE IN NUMBER)RETURN SELF AS RESULT
)NOT FINAL
/
CREATE OR REPLACE TYPE BODY PESSOA ISCONSTRUCTOR FUNCTION PESSOA(NOME IN VARCHAR2,IDADE IN NUMBER)
RETURN SELF AS RESULT IS
BEGIN
SELF.SET_IDADE(IDADE);
SELF.SET_NOME(NOME);
RETURN;
END;
MEMBER FUNCTION GET_IDADE RETURN NUMBER IS
BEGIN
RETURN SELF.IDADE;
END;MEMBER FUNCTION GET_NOME RETURN VARCHAR2 IS
BEGIN
RETURN SELF.NOME;
END;MEMBER PROCEDURE SET_IDADE(IDADE IN NUMBER) IS
BEGIN
SELF.IDADE := IDADE;
END;MEMBER PROCEDURE SET_NOME(NOME IN VARCHAR2) IS
BEGIN
SELF.NOME := NOME;
END;MEMBER FUNCTION GET_TYPE RETURN VARCHAR2 IS
BEGIN
RETURN ‘PESSOA’;
END;
END;e um TYPE “filho”…
Código:CREATE OR REPLACE TYPE PESSOA_SUB UNDER PESSOA(
NR_CPF NUMBER,
MEMBER FUNCTION GET_CPF RETURN NUMBER,
MEMBER PROCEDURE SET_CPF(NR_CPF IN NUMBER),
OVERRIDING MEMBER FUNCTION GET_NOME RETURN VARCHAR2,
OVERRIDING MEMBER FUNCTION GET_TYPE RETURN VARCHAR2,
CONSTRUCTOR FUNCTION PESSOA_SUB(NOME IN VARCHAR2,IDADE IN NUMBER,NR_CPF IN NUMBER)RETURN SELF AS RESULT
)
/
CREATE OR REPLACE TYPE BODY PESSOA_SUB ISCONSTRUCTOR FUNCTION PESSOA_SUB(NOME IN VARCHAR2,IDADE IN NUMBER,NR_CPF IN NUMBER)
RETURN SELF AS RESULT IS
BEGIN
SELF.SET_IDADE(IDADE);
SELF.SET_NOME(NOME);
SELF.SET_CPF(NR_CPF);
RETURN;
END;MEMBER PROCEDURE SET_CPF(NR_CPF IN NUMBER) IS
BEGIN
SELF.NR_CPF := NR_CPF;
END;MEMBER FUNCTION GET_CPF RETURN NUMBER IS
BEGIN
RETURN SELF.NR_CPF;
END;OVERRIDING MEMBER FUNCTION GET_NOME RETURN VARCHAR2 IS
BEGIN
RETURN ‘pessoa sub ‘||SELF.NOME;
END;OVERRIDING MEMBER FUNCTION GET_TYPE RETURN VARCHAR2 IS
BEGIN
RETURN ‘PESSOA SUB’;
END;
END;como podem ver, é possível até mesmo sobrescrever métodos, e implementar herança, e mais, como podem ver no código abaixo, é possível utilizar polimorfismo também.
Código:DECLARE
obj PESSOA;
sub PESSOA_SUB;
poli PESSOA;
BEGIN
obj:= new PESSOA(‘Jhonatan’,19);
dbms_output.put_line(‘Nome: ‘||obj.get_nome()||’ idade: ‘||obj.get_idade());
dbms_output.put_line(obj.get_type());
obj.set_nome(‘Alan’);
obj.set_idade(26);
dbms_output.put_line(‘Nome: ‘||obj.get_nome()||’ idade: ‘||obj.get_idade());
dbms_output.put_line(obj.get_type());sub:= new PESSOA_SUB(‘Érika’,28,1234567809);
dbms_output.put_line(‘Nome: ‘||sub.get_nome()||’ idade: ‘||sub.get_idade()||’ cpf: ‘||sub.get_cpf());
dbms_output.put_line(sub.get_type());poli := sub;
dbms_output.put_line(‘Nome: ‘||poli.get_nome()||’ idade: ‘||poli.get_idade());
dbms_output.put_line(poli.get_type());
END;alguém ainda discorda de que o Pl/SQL é orientado a objetos? Very Happy hehehe
[]’s
Jhonatan da Rosa
Desenvolvedor Oracle
”Segue link do post:
-
AutorPosts
- Você deve fazer login para responder a este tópico.