Conceptos básicos del diseño orientado a objetos
Conceptos básicos del diseño orientado a objetos.
Los conceptos básicos del diseño orientado a objetos (DOO) son los pilares fundamentales sobre los que se construyen sistemas de software robustos, flexibles y mantenibles. Estos principios permiten modelar el mundo real de manera natural y eficiente dentro de un programa, traduciendo las entidades y sus comportamientos en elementos de software cohesivos.
1. Objetos
Los objetos son la unidad básica del DOO. Representan entidades del mundo real, encapsulando tanto sus datos (atributos) como las acciones que pueden realizar (métodos). Cada objeto posee un estado interno, definido por sus atributos, y un comportamiento, determinado por sus métodos.
Un objeto es una entidad física o conceptual del mundo real que proporciona una comprensión del mundo real y, por tanto, forma la base de una solución de software. Un objeto del mundo real puede tener propiedades físicas (se pueden ver o tocar); Algunos ejemplos son una puerta, un motor o una lámpara. Un objeto conceptual es un concepto más abstracto, como una cuenta o transacción.
Las aplicaciones orientadas a objetos constan de objetos. Desde una perspectiva de diseño, un objeto agrupa tanto datos como procedimientos que operan sobre los datos. Los procedimientos suelen denominarse operaciones o métodos. Algunos enfoques, incluida la notación UML, se refieren a la operación como la especificación de una función realizada por un objeto y el método como implementación de la función.
La firma de una operación especifica el nombre de la operación, los parámetros de la operación y el valor de retorno de la operación. La interfaz de un objeto es el conjunto de operaciones que proporciona, según lo definido por las firmas de las operaciones. El tipo de un objeto está definido por su interfaz. La implementación de un objeto está definida por su clase. Por lo tanto, una clase es la implementación de un tipo de datos abstracto.
2. Clases
Una clase es la implementación del objeto real o abstracto. Las clases actúan como plantillas o moldes para crear objetos. Definen las características comunes que comparten un grupo de objetos, estableciendo sus atributos, métodos y relaciones. Una clase funciona como un modelo genérico que se instancia en objetos específicos.
Las clases implementan los métodos y los atributos del objeto.
Atributo.
- Título: El nombre del libro.
- Autor: La persona que escribió el libro.
- Número de páginas: La cantidad de páginas que tiene el libro.
- ISBN: El identificador único del libro.
- Los atributos son fundamentales para representar el estado de los objetos en la POO.
- Permiten diferenciar entre objetos de la misma clase.
- Se utilizan para almacenar información relevante sobre los objetos.
- Son esenciales para el funcionamiento de los métodos de la clase.
Métodos.
- ObtenerTítulo(): Devuelve el título del libro.
- EstablecerAutor(autor): Establece el autor del libro como el valor especificado en el parámetro "autor".
- AgregarPagina(): Incrementa el número de páginas del libro en 1.
- MostrarResumen(): Imprime en pantalla un resumen del libro, incluyendo título, autor, número de páginas e ISBN.
- Pertenecen a una clase: Los métodos se definen dentro de la definición de la clase a la que pertenecen.
- Reciben y devuelven valores: Los métodos pueden recibir parámetros de entrada y devolver valores de salida.
- Se invocan desde objetos: Los métodos se invocan utilizando la notación de punto (objeto.metodo()).
- Pueden ser públicos, privados o protegidos: La accesibilidad de un método define quién puede invocarlo.
- Los métodos son fundamentales para implementar el comportamiento de los objetos en la POO.
- Permiten encapsular la lógica de las acciones que un objeto puede realizar.
- Promueven la reutilización de código al permitir crear métodos que pueden ser utilizados por diferentes objetos.
- Facilitan la organización y mantenibilidad del código.
Representación.
Es así que la clase Triangulo se conforma de 3 atributos:
- Lado1: Longitud de un lado.
- Lado2: Longitud de un lado.
- Lado3: Longitud de un lado.
- GetAltura(): Regresa el valor de la altura del triangulo.
Instancias de una clase.
Una instancia de una clase es la representación concreta de esa clase en la memoria del ordenador. En otras palabras, es un objeto individual creado a partir de una plantilla o molde definido por la clase.
Las instancias son como las copias o materializaciones de la clase, pero con la particularidad de tener valores específicos para sus atributos. Esto significa que cada instancia de la misma clase puede tener un estado diferente, dependiendo de los valores asignados a sus atributos.
Por ejemplo, para la clase triangulo:
- Lado1 = 3; Lado2 = 4; Lado3 = 6
- Lado1 = 4; Lado2 = 4; Lado3 = 4
- Lado1 = 8; Lado2 = 2; Lado3 = 5
3. Encapsulamiento
El encapsulamiento es el mecanismo que oculta la implementación interna de un objeto, exponiendo solo una interfaz pública para interactuar con él. Esto protege los datos y métodos del objeto de accesos o modificaciones no deseados, promoviendo la modularidad y seguridad del código.
El encapsulamiento de información es un concepto fundamental de diseño de software relevante para el diseño de todos los sistemas de software. Los primeros sistemas eran frecuentemente propensos a errores y difíciles de modificar porque hacían un uso generalizado de datos globales. Se ha demostrado que al ocultar información, los desarrolladores podían diseñar sistemas de software para que fueran sustancialmente más modificables al reducir en gran medida o, idealmente, eliminar los datos globales. Cada módulo de ocultación de información debe ocultar una decisión de diseño que se considera probable que cambie. Cada decisión modificable se llama secreto del módulo. Con este enfoque, se podría lograr el objetivo del diseño para el cambio.
Note que la función isValidTriangle es privada y tiene como objetivo validar que las longitudes de los lados sean válidas.
4. Herencia
La herencia permite a las clases heredar atributos y métodos de otras clases, creando una jerarquía de clases. Las clases hijas pueden especializar el comportamiento heredado de sus clases padre, añadiendo o redefiniendo métodos, para crear objetos más específicos.
Mas información aquí.
5. Polimorfismo
El polimorfismo permite que objetos de diferentes clases respondan al mismo mensaje de manera distinta. Esto se logra gracias a la sobre escritura de métodos, donde las clases hijas redefinen la implementación de métodos heredados de sus clases padre. El polimorfismo brinda flexibilidad y abstracción al código.
Mas información aquí.
6. Abstracción
La abstracción es el proceso de enfocarse en las características esenciales de un objeto, ignorando detalles de implementación irrelevantes. Permite crear modelos conceptuales que representan el comportamiento fundamental de los objetos sin entrar en complejidades innecesarias.
7. Principios S.O.L.I.D:
Los principios S.O.L.I.D. (Single Responsibility, Open-Closed, Liskov Substitution, Interface Segregation, Dependency Inversion) son un conjunto de buenas prácticas para el diseño orientado a objetos que promueven la creación de código más flexible, mantenible y reutilizable.
Beneficios del DOO:
- Modularidad: El código se divide en módulos independientes y cohesivos, facilitando su comprensión, modificación y reutilización.
- Reutilización: Los componentes de software pueden ser utilizados en diferentes partes del programa o incluso en otros proyectos.
- Mantenimiento: Los cambios en el código son más fáciles de realizar y menos propensos a errores, gracias a la encapsulación y la modularidad.
- Flexibilidad: El software es más adaptable a nuevos requerimientos y cambios en el entorno.
- Claridad: El código es más legible y comprensible, reflejando mejor el problema que se está resolviendo.
El diseño orientado a objetos ha revolucionado la forma en que se desarrolla software, convirtiéndose en un paradigma fundamental para la creación de sistemas complejos, escalables y mantenibles. Al comprender y aplicar los conceptos básicos del DOO, los desarrolladores pueden crear software más robusto, eficiente y adaptable a las necesidades cambiantes del mundo actual.
Bibliografía
Hassan Gomaa. (2011). Software Modeling and Design : UML, Use Cases, Patterns, and Software Architectures. Cambridge University Press.
Comentarios
Publicar un comentario