Inheritence

  
Hello Outers

Not a criticism just a question if I am missing something.

I see I can Copy an object (Screen, Action etc) but I understood the act of copying code is always the chance to create an abstraction. Is it possible to abstract in Outsystems but not a one off copy but to make ObjectB inherit characteristics from ObjectA. Then when ObjectA is altered the changes are inherited into ObjectB?

Not complaining just checking out the possibilities on this platform which at first glance look good.

Thanks
I believe what you are describing would be a 'reference' in the Outsystems platform.  Assume you have two eSpaces - A and B.  You create an object in eSpace A (Entity, Screen, whatever) and make it public.  In eSpace B you click right-click on the eSpace name at the top of the object tree and there's an option to Add/Remove References (there is also a button on the tool bar).  Find eSpace A list and click on it.  On the right will show the public objects that you can use.  Click on the one(s) you want and click done.  ESpace B now can use the object in eSpace A.   Important note - when you change the object in eSpace A you must refresh your references to in in eSpace B.  The platform usually tells you about this but I like to do it myself just to be sure.

Additional information can be found here - http://www.outsystems.com/help/servicestudio/9.1/index.htm#t=Reusing_eSpaces%2FAdd_Remove_References_Window.htm

Hope this helps,
Curt
Thanks Curt,

Nope Reference is not inheritence it is a mechanism to allow reuse of objects across eSpaces which is great but nothing to do with inheritence.

https://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming)

Would be slightly surprised not to see inheritence in a tool but once the tool is created it is a massive job to support it, even impossible..but I would expect a tool/platform to be built intially on the principles of Inheritience if possible. Maybe the mix of technonlogy would allow an inheritinece engine for parts of the implmentations ie the .net and java classes but not of the UI frameworks.. But again the platform itself could have its own inheritence engine supporting all objects.

Regards
Yes, I know reference is not inheritence - I was trying to describe the most equivalent Outsystems feature.
So it does not exist in the tool? So be it. Needed to check in case it was avaliable.
Hi Curt,

The reference mechanism does raise an interesting implmentation of your referenced object as it would appear the object is compiled again for your target eSpace and does not invoke the compiled object in the source eSpace? Good to know if infact this is how it is works under the covers.

Regards
 
Since no one else has replied I'll add my two cents.  Note that I'm not familiar with the inner workings but I do know, from working with the platform, how it works.

References - when eSpace A references an object in eSpace B and eSpace A is complied and published, none of the references are compiled as part of that process.  This is pretty easy to verify by making a change in eSpace B and publishing it but not updating the reference when you publish eSpace A.  This is why Service Studio asks to update references during the publish process.

Inheritence - while obviously any programmer can appreciate the capabilities of Inheritence in a programming language, in this case you are trying to apply a solution without a problem.  If you were to define the problem where Inhertence seems like a good solution I'd be willing to bet there would be several workable alternatives using the current Outsystem platform capabilities. 

Hope that helps,
Curt
Creating patterns I would like to use multiple inheritence: https://sourcemaking.com/design_patterns

I acknowledge the following below but am in no position to argue against the use of inheritence as it is fundmental to OO languages. 

"Targets the wrong problem

The need for patterns results from using computer languages or techniques with insufficient abstraction ability. Under ideal factoring, a concept should not be copied, but merely referenced. But if something is referenced instead of copied, then there is no "pattern" to label and catalog. Paul Graham writes in the essay Revenge of the Nerds.

Peter Norvig provides a similar argument. He demonstrates that 16 out of the 23 patterns in the Design Patterns book (which is primarily focused on C++) are simplified or eliminated (via direct language support) in Lisp or Dylan."





Solution
It's not OO, plain and simple, because you are not working with a 3GL.
And tbh, OO is not the holy grail for everything.
Especially not for webapplications.

One could discuss the need for more OO in outsystems, but over the years I experienced one thing.
only tiny patterns can be generalized. the rest will become "unique" anyways.
The effort of OO'ing things is too costly, too heavy on the maintenance after time.
Especially with the webapplications you are building with Outsystems.

I love OO back in the day, but I would rather focus on solving business-problems than to spend time.effort in creating a zillion abstraction-layers. I have done time to debug applications where even a character was an object, so debugging through a an issue took me into at least 100 classes.






Solution
What stops developers re-inventing the wheel. They are busy solving business-problems knocking up webapplications I wanted to provide inheritable building blocks that contain the way we want them to develop to let the developer concentrate on  solving business-problems and not creating their own unqiue special ways of doing things.

I am looking to use Outsystems for much more than webapplications, even a desktop replacment, architecting coding solutions is required so that developers can concentrate on 
solving business-problems. I get the feeling that Outsystems is for light weight webapplications and there is a HUGE demand for this but creating a desktop ERP system maybe not.

It is an awesome tool thou and would love to use it at a company.

I suggest to dive deeper. All the abstraction one needs, imho, is already done by outsystems itself. Outsystems is perfect for big webapplications, no worries about that. What I said before, I doubt you really need multiple inheritance.
George,

Developers shouldn't reinvent the wheel, that's why there are so many Forge components and SilkUI patterns. I can't even begin to fathom how ineritence would even work in OutSystems, as it's not a 3GL, as J. already mentioned. Inheritable building blocks are created by creating templates and web blocks, and that works fine.

The "feeling" you get that OS is for light weight web apps and not for ERP systems is false. I work at a company that runs almost it's entire business on OS software, in several integrated systems. It's a company with 100+ employees, 50,000 customers, 200M € turnover. Our sales, sourcing, CRM and billing systems (including PDF invoice generation) is done in OutSystem, as well as our customer portals. This consumes over 1,5M software units, so we are talking about huge applications.

I admit that the focus on "mobile" and "web apps" may obscure the fact a bit, but you can actually run large businesses exclusively on OS, with all the benefits it brings.
hahahah I have protected my niche language of CA Plex for 17 years so I see where all your strong convictions come from. I like Outsystems period. Now to find a company that uses it....exactly the problem I have faced with CA Plex for the last 17 years...I would miss inheritence and no Outsystems does not support it in any way but I understand why not, I would still miss it as I found my self copying code.

Like Outsystems, CA Plex is a 4GL and generates .net and java but uses multiple inheritence, like Outsystems you work at an abstraction above the native generated code. But where you do a one off copy in Outsystems, CA Plex allowed you to inherit from an object. Now in both cases of CA Plex or Outsystems your IDE object might infact be generated as many native objects, you as the developer only see one object. Inheritence was an invaluable tool as well as shared patterns (read Forge objects) and as well as externalising as much functionality as possible as single objects that can be reused else where but inheritence in the 4GL environment of CA Plex is how you could get productivity and maintenace and impact analysis gains.

Any duplication of a window property, of a field, of a line of pseudo code can be seen as an opportunity to make an inheritable object WITHIN reason. I will miss this possbiblity and strongly disagree inheritence is just for 3GL...
George -

There are a bunch of companies using OutSystems, and it seems like many/most are hiring, but it can be a challenge to find them. For whatever reason, they don't seem to mention OutSystems much. I know we (FICO) are always looking for people. I know of a number of open contracting/consulting positions as well. I am aware of a position in Utah and one in PA right now (and possibly one in NJ as well). Many of these employers are open minded to remote workers, recognizing that OutSystems expertise is not too common.

J.Ja
Sorry James never thanked you for your advice.

I am still not confident I could professionally recommend a rewrite of a ERP system in Outsystems. This has been my hunch along but IT IS NOT A CRITISIM before fanboys coming shouting at me. I am battling like hell on IBM i  forums to try and get the the low code love!

But I believe what Outsystems themselves say here backs up my hunch: What_is_NOT_a_good_project_for_OutSystems

Should I rebuild my CRM or ERP from the ground up?

Customers with existing CRM or ERP packages that have processes that are constantly changing, yet the flexibility to change is limited and expensive, often ask if they should rebuild these systems from the ground up with OutSystems Platform. Although they could do so if they wanted, a better scenario would be to carve out and replace part of the CRM or ERP with an OutSystems application. This result is the power to change quickly and the ability to mash-up other data sources and build unique applications and processes that are very costly to build with traditional development technologies.

One OutSystems customer, Liberty Seguros, used OutSystems Platform to integrate and extend their existing back-end insurance systems and create front-ends tailored specifically to their innovative business model.




Kilian Hekhuis wrote:
George,

Developers shouldn't reinvent the wheel, that's why there are so many Forge components and SilkUI patterns. I can't even begin to fathom how ineritence would even work in OutSystems, as it's not a 3GL, as J. already mentioned. Inheritable building blocks are created by creating templates and web blocks, and that works fine.

The "feeling" you get that OS is for light weight web apps and not for ERP systems is false. I work at a company that runs almost it's entire business on OS software, in several integrated systems. It's a company with 100+ employees, 50,000 customers, 200M € turnover. Our sales, sourcing, CRM and billing systems (including PDF invoice generation) is done in OutSystem, as well as our customer portals. This consumes over 1,5M software units, so we are talking about huge applications.

I admit that the focus on "mobile" and "web apps" may obscure the fact a bit, but you can actually run large businesses exclusively on OS, with all the benefits it brings.
 
 
George -

Every ERP project is different. My ERP experiences (as well as CRM) has been that everyone ends up customizing their ERPs to death.

If someone asked me to write a customer-specific ERP system in OutSystems, I'd tell them that it was a *perfect* tool for them.

I suggest that you get some one-on-one talks with people who have "been there, done that", maybe describe your project in some detail or perhaps share the spec, and see if it makes sense. Maybe throwing a couple of contracting/consulting hours to someone who is really familiar with the system to have them really give you a neutral opinion will be worth it in the long run.

J.Ja
Hi James 

I don't have a spec, I am going out on professional limb and exploring the viability of IBM i sites accepting Outsystems as a platform. I know the landscape and I am accepting of Outsystems lack of support for record level access but I know that this would be an issue. I stress again I am accepting of Outsystems and its strengths and weakness but it maybe professional harmful for me to go all low code to such an audience. 

If I had an actual job and not unemployed I would advocate starting small and all thing things you and I would agree on such as I have already stated on these forums get one to one, don't think you can do it right from the start.

I hope this makes it clear one my arrival here and secondly the need to know with certainty where to pitch Outsystems at notoriously conservative IBMi sites. 

I want any to be a standard bearer of Outsystems in the IBM i space but while blogging I must not over state its capabilities in s general sense as you could write anything  in Outsystems but whether poltically, economically etc you might not be advised to do

cheers
george