Download presentation
Presentation is loading. Please wait.
1
DEV-12: What’s New in Object-Oriented ABL
OpenEdge 10.1C and beyond With 10.1A Progress introduced support for object-oriented programming in the OpenEdge ABL. As part of its continued development 10.1C included additional Object-oriented ABL features that ABL developers have come to expect from a flexible, modern language. This session will describe support for statically defined members of a class, which will allow a class to maintain data, and methods that act on it, for the class as a whole rather than for an individual instance of a class. This now enables native support for a singleton object. It will also introduce features such as syntax to work with classes dynamically and support for character to longchar data widening between methods. Shelley Chase OpenEdge Architect
2
Agenda Overview of Object-oriented ABL 10.1C Features Futures
Static behavior and data Dynamic programming Error handling Data widening, NEW function, reserved keywords, THIS-OBJECT Futures DEV-12 What’s New in the Object-Oriented ABL
3
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 DEV-12 What’s New in the Object-Oriented ABL
4
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) DEV-12 What’s New in the Object-Oriented ABL
5
Agenda Overview of Object-oriented ABL 10.1C Features Futures
Static behavior and data Dynamic programming Error handling Data widening, NEW function, reserved keywords, THIS-OBJECT Futures DEV-12 What’s New in the Object-Oriented ABL
6
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 DEV-12 What’s New in the Object-Oriented ABL
7
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 Data Data Data OpenEdge Runtime DEV-12 What’s New in the Object-Oriented ABL
8
Instance Data Count = 1 CLASS MyClass:
Name = Joe CLASS MyClass: … DEFINE PUBLIC PROPERTY Count AS INT GET. SET. DEFINE PUBLIC PROPERTY Name AS CHARACTER CONSTRUCTOR MyClass ( inName AS CHARACTER ): Name = inName. Count = Count + 1. END CONSTRUCTOR. END CLASS. DEF VAR myClassRef AS CLASS MyClass. myClassRef = NEW CLASS MyClass( “Joe” ). DELETE OBJECT myClassRef. myClassRef = NEW CLASS MyClass( “Tim” ). myClassRef = NEW CLASS MyClass( “Ann” ). Count = 1 Name = Tim Count = 1 Name = Ann DEV-12 What’s New in the Object-Oriented ABL
9
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 Static Data Static Data Static Data OpenEdge Runtime DEV-12 What’s New in the Object-Oriented ABL
10
Static Data Count = 3 Name = Ann Count = 2 Name = Tim Count = 1
Name = Joe CLASS MyClass: … DEFINE PUBLIC STATIC PROPERTY Count AS INT GET. SET. DEFINE PUBLIC STATIC PROPERTY Name AS CHARACTER CONSTRUCTOR MyClass ( inName AS CHARACTER ): Name = inName. Count = Count + 1. END CONSTRUCTOR END CLASS. MyClass:Count = MyClass:Count + 1. MyClass:Name = “Joe”. MyClass:Name = “Tim”. MyClass:Name = “Ann”. DEV-12 What’s New in the Object-Oriented ABL
11
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
12
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 Available anywhere in the session Single instance life-cycle controlled by the AVM Access using class type name DEFINE PUBLIC STATIC PROPERTY Count AS INT GET. SET. MESSAGE MyClass:Count. DEV-12 What’s New in the Object-Oriented ABL
13
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!) Run automatically before any class member access is allowed CONSTRUCTOR STATIC MyClass ( ): Count = 0. /* Initialize static counter */ END. DEV-12 What’s New in the Object-Oriented ABL
14
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!) Available anywhere in the session Access using class type name METHOD STATIC PUBLIC INT DisplayMessage( c AS CHAR ): MESSAGE c VIEW-AS ALERT-BOX. END. MyClass:DisplayMessage( “Statics are cool” ). DEV-12 What’s New in the Object-Oriented ABL
15
Accessing a Static Class Member
/* MyClass class not instantiated */ MESSAGE MyClass:Count VIEW-AS ALERT-BOX. Access static data member Count Runtime checks if static class members are loaded; it’s not so MyClass DEV-12 What’s New in the Object-Oriented ABL
16
Accessing a Static Class Member
/* MyClass class not instantiated */ MESSAGE MyClass:Count VIEW-AS ALERT-BOX. 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 MyClass STATIC ttUsers Count DEV-12 What’s New in the Object-Oriented ABL
17
Accessing a Static Class Member
/* MyClass class not instantiated */ MESSAGE MyClass:Count VIEW-AS ALERT-BOX. 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 MyClass STATIC ttUsers = … Count = 0 Joe, 3 Tim, 2 Ann, 5 DEV-12 What’s New in the Object-Oriented ABL
18
Accessing a Static Class Member
/* MyClass class not instantiated */ MESSAGE MyClass:Count VIEW-AS ALERT-BOX. 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 MyClass STATIC ttUsers = … Count = 0 DEV-12 What’s New in the Object-Oriented ABL
19
New’ing a Class with Static Members
DEFINE VAR objRef AS MyClass. objRef = NEW CLASS MyClass( “Joe” ). MyClass NEW an instance of MyClass Runtime checks if static class members are loaded; it is. STATIC ttUsers = … Count = 0 DEV-12 What’s New in the Object-Oriented ABL
20
New’ing a Class with Static Members
DEFINE VAR objRef AS MyClass. objRef = NEW CLASS MyClass( “Joe” ). MyClass NEW an instance of MyClass Runtime checks if static class members are loaded; it is. Creates local data segment name STATIC ttUsers = … Count = 0 Instance name DEV-12 What’s New in the Object-Oriented ABL
21
New’ing a Class with Static Members
DEFINE VAR objRef AS MyClass. objRef = NEW CLASS MyClass( “Joe” ). MyClass 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 STATIC ttUsers = … Count = 1 Instance name = Joe DEV-12 What’s New in the Object-Oriented ABL
22
New’ing a Class with Static Members
DEFINE VAR objRef AS MyClass. objRef = NEW CLASS MyClass( “Joe” ). MyClass 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 Assigns new instance to object reference STATIC ttUsers = … Count = 1 Instance name = Joe DEV-12 What’s New in the Object-Oriented ABL
23
New’ing a Class with Static Members
DEFINE VAR objRef2 AS MyClass. objRef2 = NEW CLASS MyClass( “Tim” ). MyClass 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 Assigns new instance to object reference STATIC ttUsers = … Count = 2 Instance name = Joe Instance name = Tim DEV-12 What’s New in the Object-Oriented ABL
24
New’ing a Class with Static Members
DEFINE VAR objRef3 AS MyClass. objRef3 = NEW CLASS MyClass( “Ann” ). MyClass 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 Assigns new instance to object reference STATIC ttUsers = … Count = 3 Instance name = Joe Instance name = Tim Instance name = Ann DEV-12 What’s New in the Object-Oriented ABL
25
Singleton Design Pattern
Single instance of the class Available from anywhere within the session Loaded on demand Singleton Class Instance Data members 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
26
Demo – Singleton Class DEV-12 What’s New in the Object-Oriented ABL
27
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 DEV-12 What’s New in the Object-Oriented ABL
28
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 Use Architect Launch Configurations DEV-12 What’s New in the Object-Oriented ABL 28
29
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 DEV-12 What’s New in the Object-Oriented ABL
30
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 DEV-12 What’s New in the Object-Oriented ABL
31
Dynamic Object Creation
DYNAMIC-NEW Used to create a new instance Fully qualified character type name USING is not used Common parameter list Returns a strongly-typed object Type checked at runtime BusinessEntity BEEmployee BECustomer METHOD BusinessEntity CreateBE( beType AS CHAR): DEFINE VARIABLE myObj AS BusinessEntity. myObj = DYNAMIC-NEW STRING(“BE” + beType)(parm1, …). RETURN myObj. END METHOD. “BE” + beType DEV-12 What’s New in the Object-Oriented ABL
32
Dynamic Object Casting
DYNAMIC-CAST Used to cast an object reference Fully qualified character type name USING is not used Returns a strongly-typed object Type checked at runtime BusinessEntity BEEmployee BECustomer METHOD BusinessEntity CreateBE( beType AS CHAR): DEFINE VARIABLE myObj AS BusinessEntity. myObj = DYNAMIC-NEW STRING(“BE” + beType)(parm1, …). DYNAMIC-CAST( myObj,STRING(“BE” + beType). RETURN myObj. END METHOD. “BE” + beType “BE” + beType DEV-12 What’s New in the Object-Oriented ABL
33
ClassFactory Design Pattern
Class returns different types of classes Available from anywhere within the session Alternative is a large CASE statement ClassFactory Class Creates different classes Common super class for all classes Common set of constructor parameters Type name passed in at runtime DEV-12 What’s New in the Object-Oriented ABL
34
Demo – Class Factory DEV-12 What’s New in the Object-Oriented ABL
35
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 DEV-12 What’s New in the Object-Oriented ABL
36
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 DEV-12 What’s New in the Object-Oriented ABL
37
Error Object Hierarchy
Progress.Lang.Object The OO portion of the talk – object hierarchy makes all this possible! Every object has as its root PLO Interface (makes it possible to catch errors that are not OpenEdge errors) (more applicable with .NET) PLP is the root of built-in error objects PLE is all system generated errors – errors raised by the AVM, OpenEdge runtime (FIND fails) PLA is any error your application requires – raised by the programmer Any error you define! What does it mean to catch different kinds of errors? SysError – all system generated errors AppError – all errors raised by the applications (or distinguish and catch specific user-defined types) ProError – catches all errors – then CAST to get to specific error info. interface – catches all errors as well, including third party errors that implement the interface, such as System.Exception Progress.Lang. Error <<interface>> Progress.Lang.ProError Application Errors 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
38
Error Handling Example: System Error
CATCH put on existing FOR EACH block… FOR EACH Customer: FIND Order /* Fails */ MESSAGE "Never reach here". CATCH err AS Progress.Lang.SysError: /* Handle error here */ MESSAGE err:GetMessage(1). END CATCH. END. DEV-12 What’s New in the Object-Oriented ABL
39
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. DEV-12 What’s New in the Object-Oriented ABL
40
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 DEV-12 What’s New in the Object-Oriented ABL
41
Data Widening More flexible parameters passing 10.1B New for 10.1C
Strong-typing rules for compatibility More flexible parameters passing 10.1B New for 10.1C Narrower to Wider INTEGER > INT64 > DECIMAL DATE > DATETIME > DATETIME-TZ Narrower(32K) to Wider (1GB) CHARACTER > LONGCHAR DEV-12 What’s New in the Object-Oriented ABL
42
NEW function NEW statement ( 10.1A ) NEW function ( 10.1C )
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 DEV-12 What’s New in the Object-Oriented ABL
43
Caution Using NEW function
Object cleanup Object not assigned to anything – memory leak! Object assigned to something Parameter receiving object responsible for cleanup MESSAGE “Using NEW function” (NEW myObject()):myMethod( ). RUN myProc.p ( INPUT NEW myObject() ). DEV-12 What’s New in the Object-Oriented ABL
44
Caution Using NEW function
Object cleanup Object not assigned to anything – memory leak! Object assigned to something Parameter receiving object responsible for cleanup Garbage Collection planned for 10.2A MESSAGE “Using NEW function” (NEW myObject()):myMethod( ). RUN myProc.p ( INPUT NEW myObject() ). DEV-12 What’s New in the Object-Oriented ABL 44
45
Reserved Keywords in Classes
ABL Reserved Keywords can be used for: Class names Best to prefix with packages Method names CLASS Form: CONSTRUCTOR PUBLIC Form( ): … METHOD PUBLIC INT Create( ): DEFINE VAR myClass AS CLASS Form. myClass = New Form( ). myClass:Create( ). DEV-12 What’s New in the Object-Oriented ABL
46
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( ): … DEV-12 What’s New in the Object-Oriented ABL
47
Agenda Overview of Object-oriented ABL 10.1C Features Futures
Static behavior and data Dynamic programming Error handling Data widening, NEW function, reserved keywords, THIS-OBJECT Futures DEV-12 What’s New in the Object-Oriented ABL
48
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 I S C L A I M E R DEV-12 What’s New in the Object-Oriented ABL
49
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 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
50
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 DEV-12 What’s New in the Object-Oriented ABL
51
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 DEV-12 What’s New in the Object-Oriented ABL
52
? Questions DEV-12 What’s New in the Object-Oriented ABL
53
Thank You DEV-12 What’s New in the Object-Oriented ABL
54
DEV-12 What’s New in the Object-Oriented ABL
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.