Presentation is loading. Please wait.

Presentation is loading. Please wait.

DEV-12: What’s New in Object-Oriented ABL

Similar presentations


Presentation on theme: "DEV-12: What’s New in Object-Oriented ABL"— Presentation transcript:

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


Download ppt "DEV-12: What’s New in Object-Oriented ABL"

Similar presentations


Ads by Google