1 / 54

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

DEV-7: 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

Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. DEV-7: What’s New in Object-Oriented ABL OpenEdge 10.1C and beyond Shelley Chase OpenEdge Architect

  2. 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 DEV-7 What’s New in the Object-Oriented ABL

  3. What is Object-oriented ABL… 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 OpenEdge 10.1 Releases DEV-7 What’s New in the Object-Oriented ABL

  4. Benefits of Procedural and OO Programming 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) OpenEdge is committed to both programming models DEV-7 What’s New in the Object-Oriented ABL

  5. 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 DEV-7 What’s New in the Object-Oriented ABL

  6. Wouldn’t It Be Great If… … Static Class Members • 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? DEV-7 What’s New in the Object-Oriented ABL

  7. A Step Back: Instance Data Always need to NEW an object to access members Unique data segment for each instance Data Data Data objRef = 1012 objRef = 1008 objRef = 1004 Separate copy of data for each instance MyClass Data OpenEdge Runtime DEV-7 What’s New in the Object-Oriented ABL

  8. Instance Data Count = 1 Name = Joe CLASS MyClass: … DEFINE PUBLIC PROPERTY Count AS INT GET. SET. DEFINE PUBLIC PROPERTY Name AS CHARACTER GET. SET. 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” ). DELETE OBJECT myClassRef. myClassRef = NEW CLASS MyClass( “Ann” ). DELETE OBJECT myClassRef. Count = 1 Name = Tim Count = 1 Name = Ann DEV-7 What’s New in the Object-Oriented ABL

  9. Classes and Static Data Access to static members do not require a NEW object One global data segment Static Data Static Data Static Data “MyClass:” “MyClass:” “MyClass:” One copy of data for the session MyClass Static Data OpenEdge Runtime DEV-7 What’s New in the Object-Oriented ABL

  10. Static Data Count = 2 Name = Tim Count = 3 Name = Ann Count = 1 Name = Joe CLASS MyClass: … DEFINE PUBLIC STATIC PROPERTY Count AS INT GET. SET. DEFINE PUBLIC STATIC PROPERTY Name AS CHARACTER GET. SET. CONSTRUCTOR MyClass ( inName AS CHARACTER ): Name = inName. Count = Count + 1. END CONSTRUCTOR END CLASS. MyClass:Count = MyClass:Count + 1. MyClass:Name = “Joe”. MyClass:Count = MyClass:Count + 1. MyClass:Name = “Tim”. MyClass:Count = MyClass:Count + 1. MyClass:Name = “Ann”. DEV-7 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 PROPERTYCountAS INT GET. SET. MESSAGE MyClass:Count. DEV-7 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 STATICMyClass ( ): Count = 0. /* Initialize static counter */ END. DEV-7 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-7 What’s New in the Object-Oriented ABL

  15. Accessing a Static Class Member /* MyClass class not instantiated */ MESSAGE MyClass:CountVIEW-AS ALERT-BOX. • Access static data member Count • Runtime checks if static class members are loaded; it’s not so MyClass DEV-7 What’s New in the Object-Oriented ABL

  16. Accessing a Static Class Member /* MyClass class not instantiated */ MESSAGE MyClass:CountVIEW-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 • ttUsersandCount MyClass STATIC ttUsers Count DEV-7 What’s New in the Object-Oriented ABL

  17. Accessing a Static Class Member /* MyClass class not instantiated */ MESSAGE MyClass:CountVIEW-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 andCount • Runs static constructor • Initialize Count andttUsers MyClass STATIC ttUsers = … Count = 0 Joe Tim Ann DEV-7 What’s New in the Object-Oriented ABL

  18. Accessing a Static Class Member /* MyClass class not instantiated */ MESSAGE MyClass:CountVIEW-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 andCount • Runs static constructor • Initialize Count andttUsers • Gets value of Count MyClass STATIC ttUsers = … Count = 0 DEV-7 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-7 What’s New in the Object-Oriented ABL

  20. New’ing a Class with Static Members DEFINE VAR objRefAS 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-7 What’s New in the Object-Oriented ABL

  21. New’ing a Class with Static Members DEFINE VAR objRefAS 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-7 What’s New in the Object-Oriented ABL

  22. New’ing a Class with Static Members DEFINE VAR objRefAS 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-7 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” ). • 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 MyClass STATIC ttUsers = … Count = 2 Instance name = Joe Instance name = Tim DEV-7 What’s New in the Object-Oriented ABL

  24. New’ing a Class with Static Members DEFINE VAR objRef3AS MyClass. objRef3= NEW CLASS MyClass( “Ann” ). • 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 MyClass STATIC ttUsers = … Count = 3 Instance name = Ann Instance name = Joe Instance name = Tim DEV-7 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-7 What’s New in the Object-Oriented ABL

  26. Demo – Singleton Class DEV-7 What’s New in the Object-Oriented ABL

  27. Developing with STATIC Members 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 Static lifecycle controlled by OpenEdge Runtime DEV-7 What’s New in the Object-Oriented ABL

  28. Developing with STATIC Members 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 Static lifecycle controlled by OpenEdge Runtime Use Architect Launch Configurations DEV-7 What’s New in the Object-Oriented ABL

  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-7 What’s New in the Object-Oriented ABL

  30. Dynamic Programming in OO ABL 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 OO Strong-typing restricts dynamic programming DEV-7 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 BECustomer BEEmployee 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-7 What’s New in the Object-Oriented ABL

  32. Dynamic Object Casting BusinessEntity BECustomer BEEmployee • 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 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-7 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-7 What’s New in the Object-Oriented ABL

  34. Demo – Class Factory DEV-7 What’s New in the Object-Oriented ABL

  35. Wouldn’t It Be Great If… … Structured Error Handling • 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? DEV-7 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-7 What’s New in the Object-Oriented ABL

  37. Error Object Hierarchy Progress.Lang.Object Progress.Lang. Error <<interface>> Progress.Lang.ProError System Errors Application Errors Progress.Lang. AppError Progress.Lang. SysError User-Defined Error Objects Progress.Lang. SoapFaultError DEV-7 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 1000. /* Fails */ MESSAGE "Never reach here". CATCHerr AS Progress.Lang.SysError: /* Handle error here */ MESSAGE err:GetMessage(1). END CATCH. END. DEV-7 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". CATCHerr AS Progress.Lang.AppError: /* Handle error here */ MESSAGE err:ReturnValue. END CATCH. END. DEV-7 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-7 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 Narrower to Wider INTEGER > INT64 > DECIMAL DATE > DATETIME > DATETIME-TZ Narrower(32K) to Wider (1GB) CHARACTER > LONGCHAR DEV-7 What’s New in the Object-Oriented ABL

  42. 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 DEV-7 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-7 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-7 What’s New in the Object-Oriented ABL

  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-7 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-7 What’s New in the Object-Oriented ABL

  47. 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 DEV-7 What’s New in the Object-Oriented ABL

  48. Under Development 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 D I S C L A I M E R DEV-7 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-7 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 Remote access to objects on an AppServer Abstract methods Force implementation in subclasses Inheritance for Interfaces Allow one Interface to inherit from another DEV-7 What’s New in the Object-Oriented ABL

More Related