Final answer:
The concept differentiating OOP from procedural programming is inheritance, which is used in OOP for code reusability and creating class hierarchies, as opposed to the sequence of procedures in procedural languages.
Step-by-step explanation:
The fundamental concept that differentiates Object-Oriented Programming (OOP) languages from procedural languages is the way they organize code and data. In OOP languages, inheritance is a key feature that allows a new class to derive properties and behavior from an existing class, leading to a hierarchical relationship between classes. This concept is used for code reusability and to create a more modular and scalable codebase. Let's look at the options provided:
- Inheritance; used for code reusability in OOP. It enables new objects to take on the properties of existing objects.
- Encapsulation; while it's not the term that differentiates OOP from procedural, it does contribute to OOP by hiding the internal state of an object and requiring all interaction to be performed through an object's methods.
- Polymorphism; it's another OOP concept, which allows for using a single interface to represent different underlying forms (data types).
- Abstraction; this does relate to modularity in OOP but it's not exclusively what differentiates OOP from procedural programming.
Procedural languages, on the other hand, follow a top-down approach and are structured around a sequence of procedures or routines where data is passed from one to the next.
Therefore, the correct answer is a) Inheritance; used for code reusability in OOP.