Pensar en C++ (Volumen 1) - Grupo ARCO
Pensar en C++ (Volumen 1) - Grupo ARCO
Pensar en C++ (Volumen 1) - Grupo ARCO
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
✐<br />
✐<br />
✐<br />
“Volum<strong>en</strong>1” — 2012/1/12 — 13:52 — page 219 — #257<br />
✐<br />
7.6. Resum<strong>en</strong><br />
//: C07:Mem2.h<br />
#ifndef MEM2_H<br />
#define MEM2_H<br />
typedef unsigned char byte;<br />
class Mem {<br />
byte* mem;<br />
int size;<br />
void <strong>en</strong>sureMinSize(int minSize);<br />
public:<br />
Mem(int sz = 0);<br />
~Mem();<br />
int msize();<br />
byte* pointer(int minSize = 0);<br />
};<br />
#<strong>en</strong>dif // MEM2_H ///:~<br />
Note que la llamada a <strong>en</strong>sureMinSize(0) siempre será bastante efici<strong>en</strong>te.<br />
Aunque ambos casos se basan <strong>en</strong> decisiones por motivos de eficacia, debe t<strong>en</strong>er<br />
cuidado para no caer <strong>en</strong> la trampa de p<strong>en</strong>sar sólo <strong>en</strong> la eficacia (siempre fascinante).<br />
Lo más importante <strong>en</strong> el diseño de una clase es la interfaz de la clase (sus miembros<br />
públicos, que son las que el programador cli<strong>en</strong>te ti<strong>en</strong>e a su disposición). Si se implem<strong>en</strong>ta<br />
una clase fácil de utilizar y reutilizar, <strong>en</strong>tonces ha t<strong>en</strong>ido éxito; siempre puede<br />
realizar ajustes para mejorar la eficacia <strong>en</strong> caso necesario, pero el efecto de una clase<br />
mal diseñada porque el programador está obsesionado con la eficacia puede resultar<br />
grave. Su primera preocupación debería ser que la interfaz t<strong>en</strong>ga s<strong>en</strong>tido para<br />
aquéllos que la utilic<strong>en</strong> y para los que lean el código. Note que <strong>en</strong> MemTest.cpp el<br />
uso de MyString no cambia indep<strong>en</strong>di<strong>en</strong>tem<strong>en</strong>te de si se utiliza el constructor por<br />
defecto o si la eficacia es bu<strong>en</strong>a o mala.<br />
7.6. Resum<strong>en</strong><br />
Como norma, no debería utilizar argum<strong>en</strong>tos por defecto si hay que incluir una<br />
condición <strong>en</strong> el código. En vez de eso debería partir la función <strong>en</strong> dos o más funciones<br />
sobrecargadas si puede. Un argum<strong>en</strong>to por defecto debería ser un valor que<br />
normalm<strong>en</strong>te pondría ahí. Es el valor que es más probable que ocurra, para que los<br />
programadores cli<strong>en</strong>tes puedan hacer caso omiso de él o sólo lo pongan cuando no<br />
quieran utilizar el valor por defecto.<br />
El argum<strong>en</strong>to por defecto se incluye para hacer más fáciles las llamadas a función,<br />
especialm<strong>en</strong>te cuando esas funciones ti<strong>en</strong>e muchos argum<strong>en</strong>tos con valores típicos.<br />
No sólo es mucho más s<strong>en</strong>cillo escribir las llamadas, sino que además son más s<strong>en</strong>cillas<br />
de leer, especialm<strong>en</strong>te si el creador de la clase ord<strong>en</strong>a los argum<strong>en</strong>tos de tal<br />
manera que aquéllos que m<strong>en</strong>os cambian se pon<strong>en</strong> al final del todo.<br />
Una utilización especialm<strong>en</strong>te importante de los argum<strong>en</strong>tos por defecto es cuando<br />
empieza con una función con un conjunto de argum<strong>en</strong>tos, y después de utilizarla<br />
por un tiempo se da cu<strong>en</strong>ta que necesita añadir más argum<strong>en</strong>tos. Si pone los nuevos<br />
argum<strong>en</strong>tos como por defecto, se asegura de que no se rompe el código cli<strong>en</strong>te que<br />
utiliza la interfaz anterior.<br />
219<br />
✐<br />
✐<br />
✐<br />
✐