To "simulate" either, you need IF/WHEN.
If I understand what you mean by IF/WHEN, I am not so sure you DO need them
to have dynamic invocation of a service programs sub procedure. The reason
I say this is because I have done it! :-) You can use system API's to
"activate" and "bind" to a service program sub proc at runtime. I use this
approach to dispatch web service requests to the appropriate "handler". I
use the SOAPAction HTTP request header to chain to a PF and retrive the
service program and sub proc to call.
---Overriding in RPG---
I also had a customer this week that wanted me to modify one of my API's,
and being that I couldn't get the mod made, tested and released in time for
their needs I started looking for alternatives and stumbled across
"overriding" in RPGILE. I didn't know I could override in RPG, but it works
as I expect it (see below). I have an API named MOD_subProc that is
exported out of a *SRVPGM named 'MOD'. I wanted to massage data before it
made it to MOD_subProc, and normally that wouldn't be a big deal, but in
this case MOD_subProc was called A LOT in this particular program. So I
needed a way to "intercept" the call, and the below does just that :-)
Maybe this would more be "super" inheritance, being that the external
MOD_subProc is being intercepted locally and then "inherits" whatever
processing was done? Yeah, I know that is streathcing the terms a bit ;-)
H dftactgrp(*no) bnddir('MYBND')
/copy proto
/free
MOD_subProc('parm');
*inlr = *on;
/end-free
P MOD_subProc b
D MOD_subProc pi
D pValue 30a const varying
D MOD_subProcExt pr extproc('MOD_SUBPROC')
D pValue 30a const varying
/free
pValue = pValue + 'something';
// Now call the external version of MOD_subProc
MOD_subProcExt(pValue);
/end-free
P e
Cool eh?
Aaron Bartell
http://mowyoulawn.com
-----Original Message-----
From: rpg400-l-bounces@xxxxxxxxxxxx [mailto:rpg400-l-bounces@xxxxxxxxxxxx]
On Behalf Of Wilt, Charles
Sent: Friday, October 19, 2007 11:49 AM
To: RPG programming on the AS400 / iSeries
Subject: RE: Objects and such
Buck,
You can't in RPG since RPG doesn't support polymorphism or overloading.
Note the basic difference between polymorphism and overloading is that with
overloading, the choice as
to which function to call is made at compile time vs. run-time with
polymorphism. Though even with
polymorphism if the choice can be made at compile time, it (usually) will be
for performance reasons.
To "simulate" either, you need IF/WHEN.
Creating the right abstract class _IS_ the hard part but maybe you can still
make some comparisons to
creating service programs. Specifically, consider service programs that act
as interfaces to
something else. Like Scott's FTPAPI and HTTPAPI or maybe service programs
you've written to
encapsulate some IBM APIs. The key question you have to ask yourself, is
not only what how do I need
to use this functionality now, but how may it be used in the future.
HTH,
Charles
As an Amazon Associate we earn from qualifying purchases.