Object-oriented design hides inside modules the details of how a function is implemented and what data it needs. The programmer need only know the external interfaces to the module: the definition of what it does. The implementation of the module can change at any time as long as the external interfaces remain the same. Object-oriented tools like C++ and Java make this easier by providing programming constructs to explicitly define interfaces and hide data (attributes) and functions (methods). The good news is that object-oriented designs can be implemented in almost any programming language or system.