Procedural programming handles data by often using global data structures, which are accessible throughout the program. This approach contrasts with object-oriented programming (OOP), which encapsulates data within objects. In procedural programming, global variables and data structures are used to store and manage data, making it accessible to all functions and procedures in the program. While this can simplify data sharing and manipulation, it can also lead to issues with data integrity and maintenance, as changes to the global data can have unintended consequences throughout the program. In contrast, OOP encapsulates data within objects, protecting it from unintended modifications and ensuring that it can only be accessed through defined methods. This encapsulation enhances data security and integrity, making it easier to manage and maintain the code. By bundling data and methods together, OOP promotes modularity and reusability, allowing developers to create more robust and maintainable software systems.