Object-orientation in the ABL
Download
Report
Transcript Object-orientation in the ABL
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