12: What’s New in DEV- Object-Oriented ABL OpenEdge 10.1C and beyond
Download
Report
Transcript 12: What’s New in DEV- Object-Oriented ABL OpenEdge 10.1C and beyond
DEV-12: What’s New in
Object-Oriented ABL
OpenEdge 10.1C and beyond
Shelley Chase
OpenEdge Architect
Agenda
Overview of Object-oriented ABL
10.1C Features
•
•
•
•
Static behavior and data
Dynamic programming
Error handling
Data widening, NEW function,
reserved keywords, THIS-OBJECT
Futures
2
DEV-12 What’s New in the Object-Oriented ABL
© 2008 Progress Software Corporation
What is Object-oriented ABL…
OpenEdge 10.1 Releases
Functionality centered around objects
• Classes encapsulate data and behavior
– Properties and variables
– Methods, constructors and destructor
• Inheritance shares common behavior
• Interfaces publish a common API
• Objects are the runtime instance of a class
Strong-typing does compile time validation
Can be combined with procedures
3
DEV-12 What’s New in the Object-Oriented ABL
© 2008 Progress Software Corporation
Benefits of Procedural and OO Programming
OpenEdge is committed to both programming models
Procedures and Classes
• Modular programming
• Supports reuse of common behavior (super)
• Maps well to OpenEdge Reference Architecture
Classes only
• Programming errors caught early by compiler
• Natural integration with modeling tools and other
Object-oriented platforms like .NET™
• Modern programming model (used at most
universities)
4
DEV-12 What’s New in the Object-Oriented ABL
© 2008 Progress Software Corporation
Agenda
Overview of Object-oriented ABL
10.1C Features
•
•
•
•
Static behavior and data
Dynamic programming
Error handling
Data widening, NEW function,
reserved keywords, THIS-OBJECT
Futures
5
DEV-12 What’s New in the Object-Oriented ABL
© 2008 Progress Software Corporation
Wouldn’t It Be Great If…
Classes supported global variables
within a session?
You could always get a reference
to the same object every time you
wanted to… without keeping track
of anything?
… Static Class Members
6
DEV-12 What’s New in the Object-Oriented ABL
© 2008 Progress Software Corporation
A Step Back: Instance Data
Separate copy of data for each instance
Always need to NEW an object to access members
Unique data segment for each instance
MyClass
Data
OpenEdge Runtime
7
DEV-12 What’s New in the Object-Oriented ABL
© 2008 Progress Software Corporation
Instance Data
CLASS
MyClass:
DEF VAR
myClassRef AS CLASS MyClass.
…
myClassRef = NEW CLASS MyClass( “Joe” ).
DEFINE PUBLIC PROPERTY Count AS INT
DELETE OBJECT myClassRef.
GET.
SET.
myClassRef = NEW CLASS MyClass( “Tim” ).
DEFINE
PUBLIC
PROPERTY Name AS CHARACTER
DELETE
OBJECT
myClassRef.
GET.
SET.
myClassRef
= NEW CLASS MyClass( “Ann” ).
DELETE OBJECT myClassRef.
CONSTRUCTOR MyClass ( inName AS CHARACTER
Name = inName.
Count = Count + 1.
END CONSTRUCTOR.
END CLASS.
8
DEV-12 What’s New in the Object-Oriented ABL
Count = 1
Name = Joe
Count = 1
Name = Tim
Count = 1
):
Name
= Ann
© 2008 Progress Software Corporation
Classes and Static Data
One copy of data for the session
Access to static members do not require a NEW object
One global data segment
MyClass
Static Data
OpenEdge Runtime
9
DEV-12 What’s New in the Object-Oriented ABL
© 2008 Progress Software Corporation
Static Data
Count = 2
3
1
CLASS
MyClass:= MyClass:Count + 1.
MyClass:Count
Name = Ann
Tim
Joe
…
MyClass:Name = “Joe”.
DEFINE PUBLIC STATIC PROPERTY Count AS INT
GET.
MyClass:Count = MyClass:Count + 1.
SET.
MyClass:Name = “Tim”.
DEFINE PUBLIC STATIC PROPERTY Name AS CHARACTER
GET.
MyClass:Count
= MyClass:Count + 1.
SET.
MyClass:Name
= “Ann”.
CONSTRUCTOR MyClass ( inName AS CHARACTER ):
Name = inName.
Count = Count + 1.
END CONSTRUCTOR
END CLASS.
10
DEV-12 What’s New in the Object-Oriented ABL
© 2008 Progress Software Corporation
Classes are not Static…
Mix of instance and static members
allowed
• Static members accessed using class
type name
• Instance members accessed using object
reference
• Unqualified references allowed inside class
Static members created before instances
Static constructor runs before instances
11
© 2008 Progress Software Corporation
ABL Static Data – “Typed” Global Data
Definition of static properties and data members
• Useful for session-wide data
– Variables, buffers, temp-tables, queries, datasets,
data sources
DEFINE PUBLIC STATIC PROPERTY Count AS INT
GET.
SET.
Available anywhere in the session
• Single instance life-cycle controlled by the AVM
• Access using class type name
MESSAGE MyClass:Count.
12
DEV-12 What’s New in the Object-Oriented ABL
© 2008 Progress Software Corporation
ABL Static Constructor
Definition of static constructor
• Useful to initialize static data
–
–
–
–
Only one static constructor per class
No arguments or access mode
Can access STATIC data of the class
Can RUN procedures
– Can NEW classes (even this one!)
CONSTRUCTOR STATIC MyClass ( ):
Count = 0. /* Initialize static counter */
END.
Run automatically before any class member
access is allowed
13
DEV-12 What’s New in the Object-Oriented ABL
© 2008 Progress Software Corporation
ABL Static Methods
Definition of static methods
• Useful when instance data is not required
– Can access STATIC data of the class
– Can RUN procedures
– Can NEW classes (even this one!)
METHOD STATIC PUBLIC INT DisplayMessage( c AS CHAR ):
MESSAGE c VIEW-AS ALERT-BOX.
END.
Available anywhere in the session
• Access using class type name
MyClass:DisplayMessage( “Statics are cool” ).
14
DEV-12 What’s New in the Object-Oriented ABL
© 2008 Progress Software Corporation
Accessing a Static Class Member
/* MyClass class not instantiated */
MESSAGE MyClass:Count VIEW-AS ALERT-BOX.
MyClass
Access static data member
Count
•
15
DEV-12 What’s New in the Object-Oriented ABL
Runtime checks if static class
members are loaded; it’s not so
© 2008 Progress Software Corporation
Accessing a Static Class Member
/* MyClass class not instantiated */
MESSAGE MyClass:Count VIEW-AS ALERT-BOX.
MyClass
STATIC
ttUsers
Count
Access static data member
Count
•
Runtime checks if static class
members are loaded; it’s not so
–
16
DEV-12 What’s New in the Object-Oriented ABL
Creates static global data
segment
ttUsers and Count
© 2008 Progress Software Corporation
Accessing a Static Class Member
/* MyClass class not instantiated */
MESSAGE MyClass:Count VIEW-AS ALERT-BOX.
MyClass
STATIC
ttUsers = …
Count
= 0
17
Access static data member
Count
Joe, 3
• Runtime checks if static class
Tim, 2
members are loaded; it’s not so
Ann, 5
DEV-12 What’s New in the Object-Oriented ABL
–
Creates static global data
segment
ttUsers and Count
–
Runs static constructor
Initialize Count and ttUsers
© 2008 Progress Software Corporation
Accessing a Static Class Member
/* MyClass class not instantiated */
MESSAGE MyClass:Count VIEW-AS ALERT-BOX.
MyClass
STATIC
ttUsers = …
Count
= 0
18
DEV-12 What’s New in the Object-Oriented ABL
Access static data member
Count
•
Runtime checks if static class
members are loaded; it’s not so
–
Creates static global data
segment
ttUsers and Count
–
Runs static constructor
Initialize Count and ttUsers
–
Gets value of Count
© 2008 Progress Software Corporation
New’ing a Class with Static Members
DEFINE VAR objRef AS MyClass.
objRef = NEW CLASS MyClass( “Joe” ).
MyClass
STATIC
ttUsers = …
Count
= 0
19
DEV-12 What’s New in the Object-Oriented ABL
NEW an instance of MyClass
•
Runtime checks if static class
members are loaded; it is.
© 2008 Progress Software Corporation
New’ing a Class with Static Members
DEFINE VAR objRef AS MyClass.
objRef = NEW CLASS MyClass( “Joe” ).
MyClass
STATIC
ttUsers = …
Count
= 0
NEW an instance of MyClass
•
Runtime checks if static class
members are loaded; it is.
•
Creates local data segment
– name
Instance
name
20
DEV-12 What’s New in the Object-Oriented ABL
© 2008 Progress Software Corporation
New’ing a Class with Static Members
DEFINE VAR objRef AS MyClass.
objRef = NEW CLASS MyClass( “Joe” ).
MyClass
STATIC
ttUsers = …
Count
= 1
NEW an instance of MyClass
•
Runtime checks if static class
members are loaded; it is.
•
Creates local data segment
– name
Runs instance constructor
– Sets instance data name
– Increments static data Count
•
Instance
name = Joe
21
DEV-12 What’s New in the Object-Oriented ABL
© 2008 Progress Software Corporation
New’ing a Class with Static Members
DEFINE VAR objRef AS MyClass.
objRef = NEW CLASS MyClass( “Joe” ).
MyClass
STATIC
ttUsers = …
Count
= 1
NEW an instance of MyClass
•
Runtime checks if static class
members are loaded; it is.
•
Creates local data segment
– name
Runs instance constructor
– Sets instance data name
– Increments static data Count
•
Instance
name = Joe
22
DEV-12 What’s New in the Object-Oriented ABL
Assigns new instance
to object reference
© 2008 Progress Software Corporation
New’ing a Class with Static Members
DEFINE VAR objRef2 AS MyClass.
objRef2 = NEW CLASS MyClass( “Tim” ).
MyClass
STATIC
ttUsers = …
Count
= 2
23
•
Runtime checks if static class members are
loaded; it is.
•
Creates local data segment
–
name
Runs instance constructor
–
Sets instance data name
–
Increments static data Count
•
Instance
name = Joe
NEW an instance of MyClass
Assigns new instance to object reference
Instance
name = Tim
DEV-12 What’s New in the Object-Oriented ABL
© 2008 Progress Software Corporation
New’ing a Class with Static Members
DEFINE VAR objRef3 AS MyClass.
objRef3 = NEW CLASS MyClass( “Ann” ).
MyClass
STATIC
ttUsers = …
Count
= 3
24
•
Runtime checks if static class members are
loaded; it is.
•
Creates local data segment
–
name
Runs instance constructor
–
Sets instance data name
–
Increments static data Count
•
Instance
name = Joe
NEW an instance of MyClass
Assigns new instance to object reference
Instance
name = Tim
DEV-12 What’s New in the Object-Oriented ABL
Instance
name = Ann
© 2008 Progress Software Corporation
Singleton Design Pattern
Single instance of the class
Available from anywhere within the session
Loaded on demand
Singleton Class
Instance Data members
•
25
Avoids any restrictions on static data
Private or protected constructor
Single instance created on demand
Used to return an object reference to a
single instance of the class
DEV-12 What’s New in the Object-Oriented ABL
© 2008 Progress Software Corporation
Demo – Singleton Class
26
DEV-12 What’s New in the Object-Oriented ABL
© 2008 Progress Software Corporation
Developing with STATIC Members
Static lifecycle controlled by OpenEdge Runtime
Static class members loaded for the life of the
session
• When a .cls file is changed and re-compiled,
the static portion is NOT refreshed
Caution during development
• One active session shared by application and
development environment
• Recompile does not reload any static changes
– Runtime error for mismatches can occur
• Session must be restarted
27
DEV-12 What’s New in the Object-Oriented ABL
© 2008 Progress Software Corporation
Developing with STATIC Members
Static lifecycle controlled by OpenEdge Runtime
Static class members loaded for the life of the
session
• When a .cls file is changed and re-compiled,
the static portion is NOT refreshed
Caution during development
• One active session shared by application and
development environment
• Recompile does not reload any static changes
– Runtime error for mismatches can occur
• Session must be restarted
28
DEV-12 What’s New in the Object-Oriented ABL
© 2008 Progress Software Corporation
Wouldn’t It Be Great If…
You could create an instance of
a class passing in a character
expression for the class type
name at runtime?
… DYNAMIC-NEW and DYNAMIC-CAST
29
DEV-12 What’s New in the Object-Oriented ABL
© 2008 Progress Software Corporation
Dynamic Programming in OO ABL
OO Strong-typing restricts dynamic programming
DYNAMIC-NEW
• New a class using a character expression and
it’s constructor parameters
• Object reference is normally a super class
DYNAMIC-CAST
• Cast an object reference to a type using a
character expression
Full Progress.Lang.Class reflection API still
on roadmap
30
DEV-12 What’s New in the Object-Oriented ABL
© 2008 Progress Software Corporation
Dynamic Object Creation
DYNAMIC-NEW
BusinessEntity
• Used to create a new instance
– Fully qualified character type name
USING is not used
– Common parameter list
BEEmployee BECustomer
• Returns a strongly-typed object
– Type checked at runtime
METHOD BusinessEntity CreateBE( beType AS CHAR):
DEFINE VARIABLE myObj AS BusinessEntity.
myObj = DYNAMIC-NEW STRING(“BE”
beType)(parm1, …).
“BE” + beType
RETURN myObj.
END METHOD.
31
DEV-12 What’s New in the Object-Oriented ABL
© 2008 Progress Software Corporation
Dynamic Object Casting
DYNAMIC-CAST
BusinessEntity
• Used to cast an object reference
– Fully qualified character type name
USING is not used
BEEmployee BECustomer
• Returns a strongly-typed object
– Type checked at runtime
METHOD BusinessEntity CreateBE( beType AS CHAR):
DEFINE VARIABLE myObj AS BusinessEntity.
myObj = DYNAMIC-NEW STRING(“BE”
beType)(parm1, …).
“BE” + beType
DYNAMIC-CAST( myObj,STRING(“BE”
beType).
“BE” + beType
RETURN myObj.
END METHOD.
32
DEV-12 What’s New in the Object-Oriented ABL
© 2008 Progress Software Corporation
ClassFactory Design Pattern
Class returns different types of classes
Available from anywhere within the
session
ClassFactory Class
Creates different classes
• Common super class for all classes
• Common set of constructor parameters
Type name passed in at runtime
33
Alternative is a large CASE statement
DEV-12 What’s New in the Object-Oriented ABL
© 2008 Progress Software Corporation
Demo – Class Factory
34
DEV-12 What’s New in the Object-Oriented ABL
© 2008 Progress Software Corporation
Wouldn’t It Be Great If…
ABL had a common way to
deal with all errors (system
and application)?
An error could be thrown
out of the local block /
procedure and handled
elsewhere?
… Structured Error Handling
35
DEV-12 What’s New in the Object-Oriented ABL
© 2008 Progress Software Corporation
Structured Error Handling
TRY – CATCH model
•
•
•
•
•
Based on new built-in error objects
Uses existing ABL blocks: DO, REPEAT, …
System and application errors treated equally
Can be used in classes and procedures
Fully integrated with existing error handling
– NO-ERROR
– ERROR-STATUS
– RETURN ERROR
36
DEV-12 What’s New in the Object-Oriented ABL
© 2008 Progress Software Corporation
Error Object Hierarchy
Progress.Lang.Object
Progress.Lang.
Error
<<interface>>
Progress.Lang.ProError
Application Errors
37
System Errors
Progress.Lang.
AppError
Progress.Lang.
SysError
User-Defined
Error Objects
Progress.Lang.
SoapFaultError
DEV-12 What’s New in the Object-Oriented ABL
© 2008 Progress Software Corporation
Error Handling Example: System Error
CATCH put on existing FOR EACH block…
FOR EACH Customer:
FIND Order 1000. /* Fails */
MESSAGE "Never reach here".
CATCH err AS Progress.Lang.SysError:
/* Handle error here */
MESSAGE err:GetMessage(1).
END CATCH.
END.
38
DEV-12 What’s New in the Object-Oriented ABL
© 2008 Progress Software Corporation
Error Handling Example: Application Error
CATCH put on existing DO block for running
a procedure…
DO ON ERROR, UNDO LEAVE:
RUN doIt.p.
/* RETURNS AppError */
MESSAGE "Never reach here".
CATCH err AS Progress.Lang.AppError:
/* Handle error here */
MESSAGE err:ReturnValue.
END CATCH.
END.
39
DEV-12 What’s New in the Object-Oriented ABL
© 2008 Progress Software Corporation
Wouldn’t It Be Great If…
CHARACTER data could be
passed for a LONGCHAR
NEW could be called as an
expression
Reserved keywords could be
used for class member names
THIS-OBJECT could be used to
qualify a class member
40
DEV-12 What’s New in the Object-Oriented ABL
© 2008 Progress Software Corporation
Data Widening
Strong-typing rules for compatibility
More flexible parameters passing
• 10.1B
Narrower
INTEGER >
DATE
>
to
INT64
>
DATETIME >
Wider
DECIMAL
DATETIME-TZ
• New for 10.1C
Narrower(32K)
CHARACTER
41
DEV-12 What’s New in the Object-Oriented ABL
to
>
Wider (1GB)
LONGCHAR
© 2008 Progress Software Corporation
NEW function
NEW statement ( 10.1A )
• Similar to an assignment
• Assigns an object reference to a variable
NEW function
( 10.1C )
• Object created as part of an expression
• Returns a reference to new object
• No need to assign it to an intermediate
variable
42
DEV-12 What’s New in the Object-Oriented ABL
© 2008 Progress Software Corporation
Caution Using NEW function
Object cleanup
• Object not assigned to anything – memory
leak!
MESSAGE “Using NEW function”
(NEW myObject()):myMethod( ).
• Object assigned to something
– Parameter receiving object responsible for
cleanup
RUN myProc.p ( INPUT NEW myObject() ).
43
DEV-12 What’s New in the Object-Oriented ABL
© 2008 Progress Software Corporation
Caution Using NEW function
Object cleanup
• Object not assigned to anything – memory
leak!
MESSAGE “Using NEW function”
(NEW myObject()):myMethod( ).
• Object assigned to something
– Parameter receiving object responsible for
cleanup
RUN myProc.p ( INPUT NEW myObject() ).
44
DEV-12 What’s New in the Object-Oriented ABL
© 2008 Progress Software Corporation
Reserved Keywords in Classes
ABL Reserved Keywords can be used for:
• Class names
– Best to prefix with packages
• Method names
CLASS
DEFINEForm:
VAR myClass AS CLASS Form.
CONSTRUCTOR
Form( ):
myClass
= New PUBLIC
Form( ).
…
myClass:Create(
).
METHOD PUBLIC INT Create( ):
…
45
DEV-12 What’s New in the Object-Oriented ABL
© 2008 Progress Software Corporation
THIS-OBJECT as a Local Qualifier
Qualifier used inside a class when accessing
local method, variable, and property names
• Identifies member as class instance
• Enables content assist in Architect
• Required when a local method name is a
reserved keyword
CLASS Form:
CONSTRUCTOR PUBLIC Form( ):
THIS-OBJECT:Create( ).
END.
METHOD PUBLIC INT Create( ):
…
46
DEV-12 What’s New in the Object-Oriented ABL
© 2008 Progress Software Corporation
Agenda
Overview of Object-oriented ABL
10.1C Features
•
•
•
•
Static behavior and data
Dynamic programming
Error handling
Data widening, NEW function,
reserved keywords, THIS-OBJECT
Futures
47
DEV-12 What’s New in the Object-Oriented ABL
© 2008 Progress Software Corporation
Under Development
D I S C L A I M E R
This talk includes information about potential
future products and/or product enhancements.
What I am going to say reflects our current
thinking, but the information contained herein is
preliminary and subject to change. Any future
products we ultimately deliver may be materially
different from what is described here.
D
48
I
S
C
DEV-12 What’s New in the Object-Oriented ABL
L
A
I
M
E
R
© 2008 Progress Software Corporation
Expected 10.2A Functionality
Properties in Interfaces
• Defines data portion of contract
Advanced GUI
• New UI Model Access to .NET UI Classes
Garbage collection
• Automatic cleanup
Array Enhancements
•
•
•
•
49
Arrays of Objects
Public arrays variables and properties
Return value support for methods and functions
Vector assignment
DEV-12 What’s New in the Object-Oriented ABL
© 2008 Progress Software Corporation
A Glimpse Further into the Roadmap
Strongly-typed events
• Define, Publish and Subscribe in Classes
Remote objects
• Pass objects across an AppServer
Abstract methods
• Force implementation in subclasses
Inheritance for Interfaces
• Allow one Interface to inherit from another
50
DEV-12 What’s New in the Object-Oriented ABL
© 2008 Progress Software Corporation
Relevant Exchange Sessions
DEV-8: Structured Error Handling in the ABL
DEV-22: Catch Me if You Can – Practical
Structured Error Handling
DEV-38: OpenEdge ABL Info Exchange
DEV-41: The Power of Polymorphism
51
DEV-12 What’s New in the Object-Oriented ABL
© 2008 Progress Software Corporation
?
Questions
52
DEV-12 What’s New in the Object-Oriented ABL
© 2008 Progress Software Corporation
Thank You
53
DEV-12 What’s New in the Object-Oriented ABL
© 2008 Progress Software Corporation
54
DEV-12 What’s New in the Object-Oriented ABL
© 2008 Progress Software Corporation