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

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 />

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

Saved successfully!

Ooh no, something went wrong!