Object-orientation in the ABL
Capabilities and features
… and limits
Mike Fechner, Consultingwerk Ltd.
PUG Finland, Thursday, 25h 2010
Consultingwerk Ltd.
 Independent IT consulting organisation
 Focussing on OpenEdge and .NET
 Progress Consulting Partner, long running
cooperation with PSC
 Located in Cologne, Germany
 Consulting, conception, coaching, development,
training , mentoring, review
 Customers located in Germany, Europe (EU,
CH), USA
 Vendor of tools and consulting packages
Object-orientation in the ABL
2
Consultingwerk Ltd.
 20 years of Progress experience (V5 … V10)
 Progress, OpenEdge, ADM2, Dynamics,
OERA, Sonic MQ/ESB
 OpenEdge GUI for .NET early adaptor (hands
on since 10/2006)
 .NET (C#) experience since 2002 (.NET 1.0) in
combination with the OpenEdge Proxy objects
 Almost no Java experience (but I’ve been said
it’s a copy of C# - or vice versa )
Object-orientation in the ABL
3
Object-orientation in the ABL





Introduction
Comparing OOABL to procedural
Comparing OOABL to C#
OO with GUI for .NET
OERA and OO discussions in the community
Object-orientation in the ABL
4
Object-orientation in the ABL
 Often referred as OOABL
– Some people in PSC dislike that term. It‘s not
a new language. But it‘s much shorter than
the „object-oriented extensions to the ABL
aka 4GL“
 Adds coding constructs like classes, object
instantiation, methods, access types etc. to the
ABL
 Constructs well known from (other) OO
languages like C# and Java
Object-orientation in the ABL
5
OOABL time line
 10.1A first implementation, classes, objects, methods,
properties (but I’m not 100% sure about that)
 10.1B Interfaces, USING statement, properties (when
not part of 10.1A)
 10.1C Static members, structured error-handling,
properties in Interfaces, DYNAMIC-NEW
 10.2A GUI for .NET, garbage collection for objects
(anything reference by a WIDGET-HANDLE or COMHANDLE is not an object)
 10.2B Abstract classes, abstract members, .NET generic
type definition, strong typed events, reflection part 1
 OE11: No major new OO feature announced – so far
Object-orientation in the ABL
6
OOABL: Why?
 Common way of coding, known to every young
developer. Universities don’t teach procedural
programming at all
 Market trend that PSC could not resist anymore,
didn’t want to be the only modern non OO
language
 Simply the way people want to code today.
True for ABL?
 GUI for .NET! No way to leverage the .NET
framework without OO
Object-orientation in the ABL
7
OOABL: Why?
 Different way of coding, breaking tasks into smaller
chunks, agile coding, Unit-Testing, reusability (but
we believe the ABL is the most powerful language
to maintain spaghetti code)
 Interfaces, Design Patterns, often quoted Guru’s
(not sure if everybody read their books)
 Martin Fowler (UML, OO architecture,
transformation)
 GoF, Gang of Four, Erich Gamma et al., often
quoted in source code (i.e. GoF 175 – decorator
pattern)
Object-orientation in the ABL
8
OOABL: Members of a class




Constructor(s)
Destructor
Methods, overloaded methods, polymorph meth
Properties
– Data members
– Variables (primitive and reference types)
– Defined non OO objects, Temp-Tables,
ProDatasets
 Events
Object-orientation in the ABL
9
Demo / Sample code




IBusinessEntity Interface
BusinessEntity class
proSIretrieve.p
Class Browser
Object-orientation in the ABL
10
Object-orientation in the ABL





Introduction
Comparing OOABL to procedural
Comparing OOABL to C#
OO with GUI for .NET
OERA and OO discussions in the community
Object-orientation in the ABL
11
Comparing OOABL to procedural
 The compiler and runtime enforce OO concepts
(but not good OO design )
– strong-typing, type safeness
 Concepts like inheritance or encapsulation are
part of the language
 ADM2 implemented them in the language
 Object instance is very similar to a persistent
procedure: Launched by someone else, life
cycle, private and public members
Object-orientation in the ABL
12
Comparing OOABL to procedural
 Comparing SUPER class to SUPER procedure
 Both allow „inheriting“ behaviour by using
methods and procedures of the SUPER thing
 SUPER procedure: Manual task to run or locate
that, SUPER class: Just INHERIT
 Shared SUPER procedure: Data Members
(Variables, Temp-Tables, Buffer, …) shared
among childs, SUPER class: individual to every
single child
 Child class won‘t compile with error in SUPER
class in the ABL
Object-orientation
13
TABLE-HANDLE parameter
 A SUPER procedure expecting a TABLE-HANDLE
parameter can be overloaded with a TABLE
parameter
 Compiler doesn‘t care (know about it)
 Runtime is fine with that
 This is not possible with classes:
– Method with TABLE-HANDLE cannot be
overridden by method with TABLE parameter
– Interface method with TABLE-HANDLE
parameter cannot be implemented using TABLE
Object-orientation in the ABL
14
Dynamic coding
 Procedures
–
–
–
–
RUN VALUE („…“) . RUN VALUE („…“) IN hProc.
DYNAMIC-FUNCTION, {fn}, {fnarg}
INTERNAL-ENTRIES property
DYNAMIC-CALL
 OO
–
–
–
–
Don‘t do that  Except DYNAMIC-NEW
DYNAMIC-NEW (10.1C), DYNAMIC-INVOKE (10.2B)
No dynamic access to properties
No possibility to query available members 
Object-orientation in the ABL
15
AppServer
 The AppServer protocol only speaks procedural
 Every client needs to call into procedures
 Activate, Deactivate, Connect, Disconnect
procedures
 AppServer may use objects from there on
 Can‘t pass an object as a parameter between
AppServer and Client
 Can‘t remotely call into an object like we can into a
remote persistent procedure (not recommended,
but possible)
Object-orientation in the ABL
16
Garbage collection
 For true objects only (Progress.Lang.Object,
System.Object)
 Instace is removed automatically when nobody
knows about it anymore
 The fact that the DB objects (query object handle,
buffer object handle) are called objects is
misleading. In fact they should be called widgets
 A must have safety rope for large (OO) systems
Object-orientation in the ABL
17
GLOBAL SHARED Variables
 Classes and objects don‘t have access to these
 Static properties are much more powerful anyway
 But to introduce first OO features in an application
this may be an issue
Object-orientation in the ABL
18
Static classes
… classes with only static members
Easiely build a framework that needs no startup
Usably from procedures and classes
Build static wrappers to exisiting framework APIs
(Dynamics managers)
 But can‘t be unloaded at all! When static classes
have access to DB tables, you won‘t be able to
disconnect the DB at runtime




Object-orientation in the ABL
19
Demo / Sample code
 Wrapping Dynamics Managers
into (static) classes
Object-orientation in the ABL
20
Object-orientation in the ABL





Introduction
Comparing OOABL to procedural
Comparing OOABL to C#
OO with GUI for .NET
OERA and OO discussions in the community
Object-orientation in the ABL
21
C#
 The original language of the .NET Framework
 Java like
 Developed by MS after they wered allowed to
modify Java anymore
 100% object-oriented
Object-orientation in the ABL
22
C#
 Everything (in the .NET framework) is an object,
most objects you can inherit from and that is how
you code
– DataView, DataTable, DataSet, DataRow
 In the ABL most language features are pre OO
– Query, Temp-Table, ProDataset, Buffer
– No inheritance from built in language features
Object-orientation in the ABL
23
Subclassing Data Structures
Object-orientation in the ABL
24
class DataRow Inheritance
System.Data.DataRow
Similar to a buffer or a record
Allows dynamic access to fields
using a (weak typed) collection
inherits
Your.Application.OrderRow
Static access to fields
Strong typed
Potentially validation rules
(triggers)
inherits
Your.Application.Custom.SpecialOrderRow
Object-orientation in the ABL
Static access to additional
fields
25
OO ABL’s missing features
 Collections to handle „groups“ of object instances
 Generic types to make Collections type safe and
easy to use
 Serialization, ability to persist object state (data
members) or transport accross the wire
 ABL can only query (Temp-)Tables
 Browser can only show records in a query
 ProBindingSource needs qeury as well
Object-orientation in the ABL
26
Object-orientation in the ABL





Introduction
Comparing OOABL to procedural
Comparing OOABL to C#
OO with GUI for .NET
OERA and OO discussions in the community
Object-orientation in the ABL
27
OO ABL with GUI for .NET





A perfect match (in 10.2B)
Hybrid ABL classes act like .NET objects
Inheritance, Interface Implementation
Event handling
ABL can declare .NET Collections and generic
types
 A hybrid instance may be used in a .NET Collection
Object-orientation in the ABL
28
Demo





Class browser
Progress .NET Objects
Microsoft .NET Objects (+ generics)
Infragistics Classes
ABL classes
Object-orientation in the ABL
29
Object-orientation in the ABL





Introduction
Comparing OOABL to procedural
Comparing OOABL to C#
OO with GUI for .NET
OERA and OO discussions in the community
Object-orientation in the ABL
30
OERA and OO discussions
 Progress OERA (John Sadd, Mike Omerod)
– ProDataset central role
– OO Code to manage ProDataset and Queries
and validation etc.
– ProDataset exposed to others (no real
encapsulation of –internal- data)
– Difficulties with sub-classing data due to missing
language capabilities
– Little work to build and maintain, good ABL fit
Object-orientation in the ABL
31
OERA and OO discussions
 Model-Set-Entity Pattern (Phil Magnay)
– http://communities.progress.com/pcom/messa
ge/72716#72716
– ProDataset centric, but encapsulated
– Huge evolution of John Sadd‘s original
patterns
– „Facade“ objects to access and manipulate
records
– Used in large development projects, source
code not available
Object-orientation in the ABL
32
OERA and OO discussions
 Very often like religious war…
 Looooooooong threads, looooooong posts
 In a language that has nothing to do with classical
ABL speak
 Mostly debated is the role of relational concepts like
Temp-Tables and ProDatasets in the Business
Logic
 Classic ABL coding is often underestimated (my
opinion)
Object-orientation in the ABL
33
OERA and OO discussions
 PABLO (Thomas Mercer Hursh)
– No use of ProDataset and Temp-Tables in a
Business Logic
– A single instance represents each record
– Lazy instantiation to solve (potential)
performance issues
– XML serialization
– Sub-classing no problem
– But: No real implementation available
Object-orientation in the ABL
34
Questions
Object-orientation in the ABL
?
35
Thank you
Object-orientation in the ABL
!
36
Descargar

Debugging with OpenEdge Architect