A method in which programmers define not only the type of data structure, but also the types of operations (functions or procedures) that can be applied to the data structure. In this way, the data structure becomes an object that includes both data and functions. In addition, programmers can create relationships between one object and another. For example, objects can inherit characteristics from other objects. One of the principal advantages of OOP techniques over traditional procedural programming techniques is that they enable programmers to create modules that do not need to be changed when a new type of object is added. A programmer can simply create a new object that inherits many of its features from existing objects, making object-oriented programs easier to modify. To perform object-oriented programming, one needs an object-oriented programming language. Java, C++, and Smalltalk are three of the more popular OOP languages, and there are also object-oriented versions of Pascal (see also database model/schema: objectoriented model).