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