Object oriented programming (OOP) is an design paradigm in [[software engineering]] that focuses on creating objects with code. It produces systems that are networks of objects collaborating to fulfill responsibilities (i.e., [[requirements]]) of the system. Objects are conceptual units that combine both **data** and **behavior**. The data of an object is referred to as **attributes** (also properties, instance variables, etc.). The behaviors of an object are a set of **methods**. Methods and attributes are **members** of an object. Attributes allow the object to keep track of its **state**. Methods allow it to function and interact properly. An object is created with a [[class]]. The key elements of good OOP code are [[abstraction]], [[encapsulation]] and [[modularity]]. ## SOLID