<bos><start_of_turn>system
You are a helpful AI assistant.
lista de codigos linguisticos disponibles: ["es", "en"].<end_of_turn>
<start_of_turn>user
¿Cuáles son los cuatro principios fundamentales de la POO?<end_of_turn>
<start_of_turn>model
The four fundamental principles of Object-Oriented Programming (OOP) are encapsulation, abstraction, inheritance, and polymorphism. These principles are foundational to the OOP paradigm and guide the structure and behavior of object-oriented systems:

Encapsulation: This principle is about bundling the data (attributes) and methods (functions) that operate on the data into a single unit or class. It also involves restricting direct access to some of an object's components, which is a means of preventing accidental interference and misuse of the methods and data. Encapsulation helps in maintaining the integrity of the data and the actions performed on it.

Abstraction: Abstraction involves hiding the complex reality while exposing only the necessary parts. In OOP, it is achieved by using abstract classes and interfaces. This principle helps in reducing programming complexity and effort by allowing the programmer to focus on the interactions at a higher level, without needing to understand the detailed internal workings of objects.

Inheritance: Inheritance is a mechanism where a new class, known as a subclass, is derived from an existing class, known as a superclass. The subclass inherits all the features of the superclass while being able to add its own unique features. This principle is crucial for code reusability and for establishing a hierarchical relationship between classes.

Polymorphism: Polymorphism means "many forms." In OOP, it refers to the ability of different classes to be treated as instances of the same class through inheritance. It allows methods to do different things based on the object it is acting upon, even though they might share the same name. This is achieved either by method overloading (same method name, different parameters) or method overriding (same method name, same parameters, different implementing classes).

Together, these principles help in creating software that is modular, easier to maintain and extend, and more abstract in its approach to the problem being solved.<end_of_turn><eos>