Diferència entre revisions de la pàgina «M2 - Bases de dades / Apunts UF4 : BDOR2»

De wikiserver
Dreceres ràpides: navegació, cerca
Línia 3: Línia 3:
 
* Se usan las reglas conocidas sobre la herencia de los atributos y métodos:
 
* Se usan las reglas conocidas sobre la herencia de los atributos y métodos:
  
:'''Super-tipo''' tipo tiene que incluir la cláusula '''NOT FINAL''' (por defecto es FINAL).
+
:-''' Super-tipo''' tipo tiene que incluir la cláusula '''NOT FINAL''' (por defecto es FINAL).
 
<source lang="sql">
 
<source lang="sql">
 
CREATE TYPE person_typ AS OBJECT (
 
CREATE TYPE person_typ AS OBJECT (
Línia 14: Línia 14:
 
</source>
 
</source>
  
:Los '''métodos''' pueden ser también '''FINAL''' o '''NOT FINAL''' (por defecto) independientemente de la correspondiente declaración para la estructura del tipo.
+
:- Los '''métodos''' pueden ser también '''FINAL''' o '''NOT FINAL''' (por defecto) independientemente de la correspondiente declaración para la estructura del tipo.
  
 +
* Los tipos y métodos pueden ser definidos como '''NOT INSTANTIABLE''':
 +
 +
:- El tipo no instantiable no permite crear instancias y puede ser usado para representar las sub-tipos instatiables con la participación total.
 +
:- Los métodos se definen como no instantiable cuando se espera que cada sub-tipo sobrescriba el método.
  
  

Revisió del 09:40, 17 maig 2018

  • El lenguaje PL/SQL admite la herencia simple de tipos de objetos, mediante la cual, puedes definir subtipos de los tipos de objeto. Estos subtipos, o tipos heredados, contienen todos los atributos y métodos del tipo padre, pero además pueden contener atributos y métodos adicionales, o incluso sobreescribir métodos del tipo padre.
  • Se usan las reglas conocidas sobre la herencia de los atributos y métodos:
- Super-tipo tipo tiene que incluir la cláusula NOT FINAL (por defecto es FINAL).
CREATE TYPE person_typ AS OBJECT (
   idno NUMBER,
   name VARCHAR2(20),
   phone VARCHAR2(20),
   FINAL MAP MEMBER FUNCTION get_idno RETURN NUMBER,
   MEMBER FUNCTION show RETURN VARCHAR2) /* despliega idno y nombre */
   NOT FINAL;
- Los métodos pueden ser también FINAL o NOT FINAL (por defecto) independientemente de la correspondiente declaración para la estructura del tipo.
  • Los tipos y métodos pueden ser definidos como NOT INSTANTIABLE:
- El tipo no instantiable no permite crear instancias y puede ser usado para representar las sub-tipos instatiables con la participación total.
- Los métodos se definen como no instantiable cuando se espera que cada sub-tipo sobrescriba el método.


  • Para indicar que un tipo de objeto es heredado de otro hay que usar la palabra reservada UNDER, y además hay que tener en cuenta que el tipo de objeto del que hereda debe tener la propiedad NOT FINAL . Por defecto, los tipos de objeto se declaran como FINAL , es decir, que no se puede crear un tipo de objeto que herede de él.
  • Si no se indica lo contrario, siempre se pueden crear objetos (instancias) de los tipos de objeto declarados. Indicando la opción NOT INSTANTIABLE puedes declarar tipos de objeto de los que no se pueden crear objetos. Estos tipos tendrán la función de ser padres de otros tipos de objeto.
  • En el siguiente ejemplo puedes ver cómo se crea el tipo de objeto Persona, que se utilizará heredado en el tipo de objeto UsuarioPersona. De esta manera, este último tendrá los atributos de Persona más los atributos declarados en UsuarioPersona. En la creación del objeto puedes observar que se deben asignar los valores para todos los atributos, incluyendo los heredados.
CREATE TYPE Persona AS OBJECT (
   nombre VARCHAR2(20),
   apellidos VARCHAR2(30)
) NOT FINAL;
/
CREATE TYPE UsuarioPersona UNDER Persona (
   login VARCHAR(30),
   f_ingreso DATE,
   credito NUMBER
);
/
DECLARE
   u1 UsuarioPersona;
BEGIN
   u1 := NEW UsuarioPersona('nombre1', 'apellidos1', 'user1', '01/01/2001', 100);
   dbms_output.put_line(u1.nombre);
END;
/