by xmanuel » Tue Sep 10, 2024 8:39 pm
Clases en Harbour – Diseño, Modificación y Mejores Prácticas
Índice
1. Introducción
2. Diseño de Clases
◦ Definición de Clases
◦ Principios de Diseño
◦ Relaciones entre Clases
3. Modificación de Clases
◦ Añadir Métodos y Propiedades
◦ Uso de la Herencia
4. Diseño Eficaz de Clases
◦ Simplicidad y Modularidad
◦ Polimorfismo y Abstracción
◦ Buenas Prácticas
5. Conclusión
1. Introducción
Este manual tiene como objetivo enseñar cómo diseñar, modificar y mejorar el diseño de clases en el lenguaje de programación Harbour. A través de ejemplos prácticos, aprenderás a aplicar principios fundamentales de la programación orientada a objetos (POO) para crear sistemas más robustos, reutilizables y fáciles de mantener.
2. Diseño de Clases
Definición de Clases
Una clase en Harbour es una plantilla o estructura que define un conjunto de datos (atributos) y funciones (métodos) que los objetos basados en esa clase pueden tener. Para crear una clase, utilizamos la palabra clave CLASS. Veamos un ejemplo sencillo:
CLASS Coche
DATA marca
DATA modelo
DATA año
METHOD arrancar()
ENDCLASS
METHOD arrancar() CLASS Coche
? "El coche ha arrancado."
RETURN
Este código define una clase Coche con tres datos (marca, modelo, y año) y un método arrancar().
Principios de Diseño
Cohesión
Las clases deben tener una única responsabilidad. Esto significa que una clase debe estar enfocada en una sola tarea. Por ejemplo, una clase Coche debería encargarse solo de aspectos relacionados con un coche, no con la gestión de personas o ventas.
Encapsulamiento
El encapsulamiento consiste en ocultar los detalles internos de una clase y exponer solo lo que es necesario. Por ejemplo, los datos deben ser accesibles solo mediante métodos, en lugar de permitir el acceso directo.
Relaciones entre Clases
Composición
Es cuando una clase contiene otras clases y estas últimas no pueden existir independientemente. Un coche no tiene sentido sin un motor.
CLASS Motor
DATA potencia
METHOD encender()
ENDCLASS
CLASS Coche
DATA oMotor
METHOD arrancar()
ENDCLASS
METHOD arrancar() CLASS Coche
::oMotor:encender()
RETURN
METHOD encender() CLASS Motor
? "El motor ha sido encendido."
RETURN
Agregación
Es una relación más débil. Un curso puede tener estudiantes, pero los estudiantes pueden existir sin el curso.
CLASS Curso
DATA estudiantes
METHOD agregarEstudiante( estudiante )
ENDCLASS
METHOD agregarEstudiante( estudiante ) CLASS Curso
AADD( ::estudiantes, estudiante )
RETURN
3. Modificación de Clases
Añadir Métodos y Propiedades
Modificar una clase en Harbour es fácil. Se pueden añadir métodos o propiedades sin tener que cambiar el diseño original. Por ejemplo, si queremos añadir un método para detener un coche:
CLASS Coche
METHOD detener()
ENDCLASS
METHOD detener() CLASS Coche
? "El coche se ha detenido."
RETURN
Uso de la Herencia
La herencia permite que una clase herede las propiedades y métodos de otra. En Harbour, usamos INHERIT para heredar de una clase base.
CLASS Vehiculo
DATA marca
DATA modelo
METHOD moverse()
ENDCLASS
CLASS Coche INHERIT Vehiculo
METHOD arrancar()
ENDCLASS
METHOD moverse() CLASS Vehiculo
? "El vehículo se está moviendo."
RETURN
METHOD arrancar() CLASS Coche
? "El coche ha arrancado."
RETURN
Aquí, Coche hereda de Vehiculo, lo que significa que Coche tiene acceso a los métodos y datos definidos en Vehiculo.
4. Diseño Eficaz de Clases
Simplicidad y Modularidad
Es fundamental que las clases sean simples y modulares. Cada clase debe tener una única responsabilidad y debe poder ser reutilizada en otros contextos. Esto facilita el mantenimiento y mejora la legibilidad del código.
Polimorfismo y Abstracción
El polimorfismo permite que diferentes clases implementen el mismo método de maneras diferentes. Esto permite que el código sea más flexible y extensible.
Por ejemplo, podrías tener una clase Trabajador con un método calcularSalario(), que es implementado de manera diferente en las clases Empleado y Consultor:
CLASS Trabajador
METHOD calcularSalario()
ENDCLASS
CLASS Empleado INHERIT Trabajador
METHOD calcularSalario()
ENDCLASS
METHOD calcularSalario() CLASS Empleado
? "Salario basado en horas trabajadas."
RETURN
CLASS Consultor INHERIT Trabajador
METHOD calcularSalario()
ENDCLASS
METHOD calcularSalario() CLASS Consultor
? "Salario basado en proyecto completado."
RETURN
Buenas Prácticas
1. Uso adecuado de visibilidad: Usa METHOD para definir métodos públicos, y encapsula los detalles de implementación internos.
2. Uso de nombres descriptivos: Los nombres de clases, métodos y propiedades deben ser claros y describir su propósito.
3. Reutilización de código: Aprovecha la herencia y la composición para evitar duplicar código.
5. Conclusión
Este manual ha cubierto los aspectos fundamentales del diseño, modificación y creación de clases eficaces en Harbour. Aplicando estos principios, podrás desarrollar software más flexible, reutilizable y fácil de mantener. Recuerda siempre enfocarte en la simplicidad, el encapsulamiento y la reutilización del código.
______________________________________________________________________________
Sevilla - Andalucía