13.01.2015 Views

Pensar en C++ (Volumen 1) - Grupo ARCO

Pensar en C++ (Volumen 1) - Grupo ARCO

Pensar en C++ (Volumen 1) - Grupo ARCO

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

✐<br />

✐<br />

✐<br />

“Volum<strong>en</strong>1” — 2012/1/12 — 13:52 — page 180 — #218<br />

✐<br />

Capítulo 5. Ocultar la implem<strong>en</strong>tación<br />

} ///:~<br />

La clase (class) <strong>en</strong> un concepto OOP fundam<strong>en</strong>tal <strong>en</strong> <strong>C++</strong>. Es una de la palabras<br />

clave que no se pondrán <strong>en</strong> negrita <strong>en</strong> este libro - es incomodo pues se repite mucho.<br />

El cambio a clases es tan importante que sospecho que Stroustrup hubiese preferido<br />

eliminar completam<strong>en</strong>te struct, pero la necesidad de compatibilidad con C no lo<br />

hubiese permitido.<br />

Mucha g<strong>en</strong>te prefiere crear clases a la manera struct <strong>en</strong> vez de a la mánera<br />

class, pues sustituye el «por-defecto-private» de class empezando con los elem<strong>en</strong>tos<br />

public:<br />

class X {<br />

public:<br />

void miembro_de_interfaz();<br />

private:<br />

void miembro_privado();<br />

int repres<strong>en</strong>tacion_interna;<br />

};<br />

El porqué de esto es que ti<strong>en</strong>e más s<strong>en</strong>tido ver primero lo que más interesa, el programador<br />

cli<strong>en</strong>te puede ignorar todo lo que dice private. De hecho, la única razón<br />

de que todos los miembros deban ser declarados <strong>en</strong> la clase es que el compilador sepa<br />

como de grande son los objetos y pueda colocarlos correctam<strong>en</strong>te, garantizando<br />

así la consist<strong>en</strong>cia.<br />

De todas formas, los ejemplos <strong>en</strong> este libro pondrán los miembros privados primero,<br />

así:<br />

class X {<br />

void private_function();<br />

int internal_repres<strong>en</strong>tation;<br />

public:<br />

void interface_function();<br />

};<br />

Alguna g<strong>en</strong>te incluso decora sus nombres privados<br />

class Y {<br />

public:<br />

void f();<br />

private:<br />

int mX; // "Self-decorated" name<br />

};<br />

Como mX esta ya oculto para Y, la m (de «miembro») es innecesaria. De todas<br />

formas, <strong>en</strong> proyectos con muchas variables globales (algo que debe evitar a toda costa,<br />

aunque a veces inevitable <strong>en</strong> proyectos exist<strong>en</strong>tes), es de ayuda poder distinguir<br />

variables globales de atributos <strong>en</strong> la definición de los métodos.<br />

180<br />

✐<br />

✐<br />

✐<br />

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!