Como sugiere el nombre, la Programación Orientada a Objetos o OOP se refiere a lenguajes que usan objetos en la programación. La programación orientada a objetos tiene como objetivo implementar entidades del mundo real como herencia , abstracción , polimorfismo y encapsulación en la programación. El objetivo principal de OOP es unir los datos y las funciones que operan en ellos para que ninguna otra parte del código pueda acceder a estos datos excepto esa función. En este artículo, comprenderemos algunas de las mejores prácticas de OOP.
El acrónimo SOLID se considera la mejor filosofía de programación orientada a objetos. Entendamos lo que esto realmente significa junto con algunos otros principios importantes.
- Principio de responsabilidad única: De acuerdo con este principio, una clase debe tener una sola responsabilidad o un solo trabajo o un solo propósito. Deberíamos evitar estrictamente el uso de clases generalizadas donde toda la implementación se da en la misma clase. También establece que la responsabilidad debe estar completamente encapsulada por la clase, el módulo o la función.
- Principio abierto/cerrado: según este principio, las entidades de software como clases, módulos, funciones, etc. deben estar abiertas para la extensión y las clases deben estar cerradas para la modificación. Esto significa que deberíamos poder extender el comportamiento de una clase, sin modificarlo.
- Principio de sustitución de Liskov: según este principio, las clases derivadas o secundarias deben ser sustituibles por sus clases base o primarias. Este principio garantiza que cualquier clase que sea hija de una clase padre se pueda usar en lugar de su padre sin ningún comportamiento inesperado.
- Principio de segregación de interfaz: este es el primer principio que se aplica a una interfaz . Es similar al principio de responsabilidad única. Establece que no debemos obligar a ningún cliente a implementar una interfaz que es irrelevante para ellos. El objetivo principal de este concepto es centrarse en evitar una interfaz voluminosa y dar preferencia a muchas interfaces pequeñas específicas del cliente.
- Principio de inversión de dependencia: según este principio, los módulos/clases de alto nivel no deben depender de módulos/clases de bajo nivel, sino que deben depender de abstracciones . También debemos asegurarnos de que la abstracción no dependa de los detalles, sino que los detalles dependan de las abstracciones.
Además de los principios anteriores, algunas otras prácticas importantes que deben practicarse en la programación orientada a objetos son:
1. Nombres significativos: la primera práctica que debe seguirse en el concepto de programación orientada a objetos es usar nombres significativos. Y también, todos los métodos deben seguir la convención de nomenclatura de camel case. Siempre debemos hacer el diseño de tal manera que una clase sea responsable solo de una tarea en particular. Si existe una clase en el proyecto que realiza más de una tarea, debe dividirse además de tal manera que solo tenga una responsabilidad. Sin embargo, cuando usamos principios de diseño orientado a objetos , las responsabilidades están predefinidas. Por ejemplo,
- En el patrón constructor , la clase crea objetos. Entonces, usamos el nombre como la clase constructora.
- Si una clase actúa como mediador entre dos funcionalidades, entonces se la nombra como mediador. Como CatMediator, DogMediator, etc.
- Si usamos un tipo de diseño de consumidor, entonces podemos usar el sufijo Adaptador para explicar la responsabilidad de la clase.
2. Menos argumentos: siempre necesitamos escribir métodos de tal manera que la cantidad de argumentos sea la mínima posible. Siempre podemos usar los valores de otros objetos en la misma clase en lugar de pedirle al usuario la misma entrada varias veces. Y también, los métodos con demasiados argumentos son difíciles de leer.
3. Evitar el comportamiento global y no determinista: siempre que utilicemos el concepto OOP, siempre debemos asegurarnos de que el comportamiento global de las variables y los objetos se minimice. Esto se puede visualizar con un ejemplo de creación de un guepardo animal. El color del animal no cambia después de su creación. Por lo tanto, debemos asegurarnos de que el atributo no sea global y no sea accesible para asegurarnos de que no se produzcan conflictos de datos. Por lo tanto, debe evitarse el uso de variables u objetos globales. Podemos usar el concepto de encapsulación en los miembros de datos para resolver este problema.
4. Evite los métodos estáticos: además de la razón anterior, los métodos estáticos deben evitarse tanto como sea posible porque actúan casi de manera similar a una variable global. Y también, otra razón importante para evitar es que crean una dependencia secreta con la clase donde se crea y la dependencia no se observa ni revela hasta que se cambia toda la estructura de la clase. Esto hace que la mantenibilidad sea mucho más difícil. Y además, un método estático no se puede probar de forma aislada.
5. Evite el uso de constructores: los constructores deben evitarse estrictamente porque dificultan la usabilidad del programa desde la perspectiva del cliente. Para usar un programa que es invocado por un constructor, el cliente necesita recordar el orden de los parámetros y la inicialización del objeto no es posible si se olvida el orden correcto. En los casos en que el constructor exige múltiples parámetros, la usabilidad del programa se vuelve mucho más difícil. Una solución alternativa es el patrón constructor .
6. Reducción de sentencias condicionales: El uso de sentencias condicionales debe reducirse tanto como sea posible. El uso de demasiadas declaraciones condicionales en el programa aumenta la complejidad y el código no se puede reutilizar. En su lugar, podemos hacer uso de interfaces y clases abstractas e implementar la lógica condicional en diferentes métodos que pueden ser reutilizados y además, se mantiene la responsabilidad única de los métodos y clases. Siempre que necesitemos reutilizar el mismo condicionamiento, simplemente llamamos al método donde se implementa en lugar de escribir el código nuevamente.
Para concluir, las prácticas utilizadas en diferentes programas y Softwares pueden ser diferentes y principalmente inclinarse hacia el resultado final, pero las prácticas mencionadas anteriormente son algunas de las que se siguen universalmente y hacen que el programa sea más eficiente, legible, reutilizable y fácil de usar. mantener.
Publicación traducida automáticamente
Artículo escrito por KaashyapMSK y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA