> 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);
};