9.3. Simplificación de modismos

Antes de adentrarnos en técnicas más complejas, es útil echar un vistazo a algunos métodos básicos de mantener el código simple y sencillo.

9.3.1. Mensajero

El más trivial es el Mensajero (Messenger), [136] que empaqueta información en un objeto que se envia, en lugar de ir enviando todas las piezas independientemente. Nótese que sin el Mensajero, el código para la función translate() sería mucho más confuso:

//: C10:MessengerDemo.cpp
#include <iostream>
#include <string>
using namespace std;

class Point { // A messenger
public:
  int x, y, z; // Since it's just a carrier
  Point(int xi, int yi, int zi) : x(xi), y(yi), z(zi) {}
  Point(const Point& p) :  x(p.x), y(p.y), z(p.z) {}
  Point& operator=(const Point& rhs) {
    x = rhs.x;
    y = rhs.y;
    z = rhs.z;
    return *this;
  }
  friend ostream&
  operator<<(ostream& os, const Point& p) {
    return os << "x=" << p.x << " y=" << p.y
              << " z=" << p.z;
  }
};

class Vector { // Mathematical vector
public:
  int magnitude, direction;
  Vector(int m, int d) : magnitude(m), direction(d) {}
};

class Space {
public:
  static Point translate(Point p, Vector v) {
    // Copy-constructor prevents modifying the original.
    // A dummy calculation:
    p.x += v.magnitude + v.direction;
    p.y += v.magnitude + v.direction;
    p.z += v.magnitude + v.direction;
    return p;
  }
};

int main() {
  Point p1(1, 2, 3);
  Point p2 = Space::translate(p1, Vector(11, 47));
  cout << "p1: " << p1 << " p2: " << p2 << endl;
} ///:~

Listado 9.1. C10/MessengerDemo.cpp


El código ha sido simplificado para evitar distracciones.

Como el objetivo del Mensajero es simplemente llevar datos, dichos datos se hacen públicos para facilitar el acceso. Sin embargo, podría tener razones para hacer estos campos privados.