In Part 1 of this series, we talked about how Oracle objects compare to Java and how to create Oracle Objects. In Part 2, I covered we covered object comparison and type inheritance. Today, we’ll talk about polymorphism and type evolution.
Like parts 1 and 2, this will be a technical discussion.
Polymorphism
First a definition. What is Polymorphism and why is it important? One of the best definitions I have found is this link at OnJava. You can skip the part about object serialization. Not really that important to Oracle’s OO as you’re already in the database.
Let’s go back to our (most basic) calculator example.
CREATE OR REPLACE TYPE Calculator AS OBJECT (
value NUMBER,
MEMBER PROCEDURE print,
MEMBER PROCEDURE add1( p_amt IN NUMBER ),
MEMBER PROCEDURE subtract( p_amt IN NUMBER )
)
NOT FINAL;
/
CREATE OR REPLACE TYPE BODY Calculator AS
MEMBER PROCEDURE print IS
BEGIN
DBMS_OUTPUT.PUT_LINE( TO_CHAR( value ) );
END;
MEMBER PROCEDURE add1( p_amt IN NUMBER ) IS
BEGIN
value := value + p_amt;
END;
MEMBER PROCEDURE subtract( p_amt IN NUMBER ) IS
BEGIN
value := value - p_amt;
END;
END;
/
And our Advanced Calculator:
CREATE OR REPLACE TYPE AdvancedCalculator UNDER Calculator (
pi FLOAT,
CONSTRUCTOR FUNCTION AdvancedCalculator
RETURN SELF AS RESULT ,
MEMBER PROCEDURE multiply( p_amt IN NUMBER ),
MEMBER PROCEDURE divide( p_amt IN NUMBER ),
OVERRIDING MEMBER PROCEDURE print
)
NOT FINAL;
/
This isn’t exactly the same AdvancedCalculator.