Cpp programacion orientada objetos

Page 120

Pensemos que si una clase se pudiera modificar con posterioridad a su definición todo nuestro esquema de acceso se vendría abajo, pues bastaría para ello que el cliente "añadiera" una función con acceso al miembro de la clase que deseara, sin encontrar restricción alguna. Sigamos. Bien, ya sabemos que el sistema proporciona a nuestra clase un constructor de copia y un operador de asignación implícitos. La pregunta es: ¿son suficientes para nuestros propósitos, en lo que respecta a la clase Racional, o más bien deberíamos definir nuestras propias versiones? Dado que nuestra clase no maneja memoria del almacenamiento libre, parece que lo que proporciona el sistema es suficiente17. De esta manera podemos escribir: Racional dosTercios( 2, 3 ), tuFraccion( 7 ); Racional miFraccion = dosTercios; // constructor de copia: // miFraccion "vale" 2/3 tuFraccion = miFraccion; // operador de asignación: // tuFraccion "vale" 2/3

SOBRECARGA DE OPERADORES De acuerdo: ya tenemos la representación interna y distintas formas de construir los objetos. ¿Qué sigue ahora? Bien, lo siguiente es completar el interfaz de cliente de la clase. O sea, dotar a la clase de métodos públicos que permitan la aplicación de sus instanciaciones (objetos) de una forma similar a como se haría con objetos de tipo predefinido. Esta es, en general, una labor delicada, pues exige prudencia, experiencia y una cierta comprensión de las sutilezas del lenguaje. Lo más fácil es que el novicio "hinche" el interfaz con un número elevado de funciones miembros, previendo -y aun duplicando- todos los posibles casos de uso que se le ocurran. Esto suele ser un error, pues normalmente confunde al cliente de la clase, que se siente como si hubiera entrado en un parque de atracciones que constara únicamente de montañas rusas, eso sí, diferenciadas por colores y por algún oscuro matiz que se le escapa al observador. El interfaz que nos ocupa debe ser, pues, breve y completo (algo así como una extensión informática de la célebre máxima de Gracián). Resolvamos una primera lista descriptiva de métodos necesarios: - comparación: igualdad, mayor, menor. - suma, resta, multiplicación y división entre objetos. - operaciones de entrada y salida de objetos.

17

De hecho, lo contrario puede afirmarse como regla: "siempre que una clase haga uso de la memoria de almacenamiento libre (normalmente mediante el operador new), el desarrollador deberá proveerla de sus propias versiones del constructor de copia y de la sobrecarga del operador de asignación".

C++/OOP: UN ENFOQUE PRÁCTICO

Página 27/297


Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.