Pular para o conteúdo
Visualizando 2 posts - 1 até 2 (de 2 do total)
  • Autor
    Posts
  • #84650
    RicardoC
    Participante

      Prezados,

      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…

      #84651
      Manoel872
      Participante

        Algum 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 IS

        CONSTRUCTOR 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 IS

        CONSTRUCTOR 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:

        http://glufke.net/oracle/viewtopic.php?t=2265

      Visualizando 2 posts - 1 até 2 (de 2 do total)
      • Você deve fazer login para responder a este tópico.