Abstraction is when an object is used at a higher level, and the code under the hood does not need to be understood or broken up. Abstraction is done in the automation software development environment (SDE) all the time. These are the premade functions that are in the SDE. But, regardless, PLC programmers can make their own that are not readily needed at higher-level troubleshooting layers, if done correctly. For instance, add-on instructions should be building blocks and never have to change, if tested out before implementation.
Polymorphism is when the interfaces of a parent class may be accessed by the child class of said parent without disruption. This allows enhancement of code without major architecture changes. In this example, a “conveyor” can be added to the system because the conveyor block has all the parts needed and that makes coding quicker. On top of that, sending the data to the human-machine interface (HMI) is easier because user-defined data types (UDTs) may be duplicated there to match the logic.
Of course, all of this depends on the application that you choose to use for programming. It also depends on how you set up your structures.
Why is it important for automation? For integrators and equipment manufacturers, over the long run, it will save time. And time is money. Also, the future is now. The Internet of Things (IoT) and communications protocols that are letting automation be more modular and more compatible means that one day the PLC may go away. If you think currently, the edge computer has an emulated PLC. This means that understanding the software and being able to code it efficiently is a win-win situation, regardless of whether using ladder or structured text.