Documentos de Académico
Documentos de Profesional
Documentos de Cultura
1. Introducción
1
En realidad, las clases no son meramente un “mecanismo de construcción de tipos”, sino que repre-
sentan un concepto más complejo, que forma parte del paradigma de programación con objetos. No las
veremos desde ese punto de vista en la materia.
1
#define MAXTAM 20
class ConjuntoInt{
public:
ConjuntoInt();
void agregar(int elem);
int cardinal() const;
bool pertenece(int elem) const;
int tomarUno();
private:
int elems[MAXTAM];
int card;
};
Desde fuera de esta declaración, para usar algo de tipo ConjuntoInt, lo declaramos
de esta manera:
int main(){
ConjuntoInt miConj;
...
}
3. Un poco de vocabulario
En esta definición deberı́a haber bastantes elementos que les llamen la atención.
Empecemos por notar que la declaración de esta clase tiene tres partes: primero que
nada, su nombre, y luego, entre corchetes, una lista de declaraciones bajo la palabra
public y otra bajo la palabra private.
Estas dos palabras clave son las que proveen el ocultamiento, uno de los componentes
esenciales de los tipos abstractos de datos. Todas las declaraciones de la primera parte
se llaman públicas y forman la interfaz de la clase: son las operaciones visibles desde
fuera, que constituyen la única manera de acceder y manipular elementos de la clase.
Las declaraciones de la segunda parte son privadas: forman parte de la representación
interna, que permanece oculta cuando se utiliza la clase desde fuera. La comparación
con Haskell es directa: en la parte pública están los elementos que exportarı́amos en un
módulo de Haskell, y en la privada, los restantes.
En este caso, nuestra interfaz está compuesta de las cinco operaciones que especifi-
camos. Las funciones provistas por una clase se llaman métodos. En la parte privada,
mantenemos oculta la representación interna del conjunto: en este caso, lo implemen-
tarı́amos con un arreglo que contenga sus elementos, y un entero que represente su
tamaño. Las variables de una clase se llaman propiedades. Los métodos y propiedades
pueden ir tanto en la parte pública como en la privada, aunque en general, en la parte
pública sólo aparecen métodos (los de la interfaz), mientras que la parte privada contiene
las propiedades y eventualmente algunos métodos auxiliares.
2
Una vez definida, la clase funciona como un tipo abstracto de datos, y podemos
utilizarla creando elementos del tipo. Estos se llaman instancias de la clase. En nuestro
ejemplo, miConj es una instancia de la clase ConjuntoInt.
4. El parámetro implı́cito
∆ : Z = cardinal(this : ConjuntohZi)
P ≡ {this = T his0 }
Q ≡ {∆ = |T his0 |}
3
(∆ : Z, this : ConjuntohZi) = tomarU no(this : ConjuntohZi)
P ≡ {this = T his0 ∧ |T his0 | > 0}
Q ≡ {∆ ∈ T his0 ∧ (∀n : Z)(n ∈ this ↔ (n ∈ T his0 ∧ n 6= ∆))}
int main(){
ConjuntoInt miConj; (construimos una instancia de
ConjuntoInt)
5. Otros detalles
6. Implementación