> Profe: ¿Qué significa exactamente el "Rep"? El "Rep" son los campos de una clase. Es siempre recomendable que el "Rep" sea privado, de manera que el programador cliente de la clase no manipule los campos de la clase y destruya la invariante. Si un lenguaje tiene "campos privados" el compilador le ayudará a uno a "no metérsele al Rep"; esto quiere decir que el lenguaje tiene "ocultamiento de datos". El ocultamiento de datos es la técnica fundamental de programación que permite disminuir la cohesión entre módulos, lo que resulta en programas más simples y mejor construidos, lo que reduce la dificultad y el costo de su mantenimiento. - Abstracción (concepto-escencia) - Especificación (Documentación Doxygen) - Encapsulamiento (campos y métodos están sintácticamente juntos) - Ocultamiento de datos (El "Rep" es privado) Abstracción (concepto-escencia): =============================== - http://rae.es/esencia "Aquello que constituye la naturaleza de las cosas, lo permanente e invariable de ellas." "Lo más importante y característico de una cosa." - http://rae.es/abstracto "Que significa alguna cualidad con exclusión del sujeto." - http://rae.es/abstraer "Separar por medio de una operación intelectual las cualidades de un objeto para considerarlas aisladamente o para considerar el mismo objeto en su pura esencia o noción." Ejemplos: - Pila ==> Push() + Pop() \ - Número ==> [ + - * / ] |___ - Cola ==> Enqueue() + Dequeue() | | - Matriz ==> A(i,j) ^ ^ - Vector ==> V(j) Silla Especificación (Documentación Doxygen): ====================================== (***) En la especificación se habla del QUÉ SI==> /// Ordena el vector \c "V[]" de dimensión \c "n" void Sort( unsigned n, T V[] ); (***) Es un error hablar del CÓMO en la especificación NO==> /// Intercambia los valores hasta que ya no están desordenados void Sort( unsigned n, T V[] ); (***) En las especificaciones sí es conveniente incluir un ejemplo de uso /** Calcula el Máximo Común Divisor de los números \c "x" y \c "y". - mcd(x,y) >= 1 siempre. - MCD <==> GCD: Greatest Common Divisor . \pre (y != 0) \remark Se usa el algoritmo de Euclides para hacer el cálculo. \par Ejemplo: \code 2*3*5 == mcd( 2*2*2*2 * 3*3 * 5*5, 2*3*5 ) 30 == mcd( 3600, 30 ) \endcode */ long mcd(long x, long y); Encapsulamiento (campos y métodos están sintácticamente juntos): =============================================================== - Ponga juntos los "campos" y los "métodos" en una clase. class Pila { int m_vec[20]; // Estos son los "campos" del "Rep" public: void Push(int v); // Los métodos de la clase están declarados int Pop() // "dentro" de la misma clase }; Ocultamiento de datos (El "Rep" es privado): =========================================== - Los campos de Rep son privados class Racional { int m_num, m_den; // campo del "Rep" privado public: friend Racional operator+ ( const RAcional& izq, const RAcional& der); // ... friend Racional operator/ ( const RAcional& izq, const RAcional& der); };