miércoles, 28 de mayo de 2014

Software a medida

El software a medida es un producto de Ingeniería de Software desarrollado especialmente para un cliente, teniendo en cuenta los requerimientos del mismo y las políticas de su empresa u organización.

El software estándar por su parte está orientado un uso masivo por clientes con necesidades similares. Algunos productos de software estándar permiten también ciento grado de personalización de forma que con un desarrollo particular pueden adaptarse a las necesidades del cliente, aunque es difícil que se adapte exactamente a los requerimientos y políticas del mismo. Un ejemplo serían los diversos CMS (sistemas de gestión de contenidos) como Wordpress, Joomla, Prestashop, Drupal, ... Otros productos de software estándar no permiten ningún tipo de personalización.

A priori el software a medida siempre es más caro porque requiere más trabajo, pero cumple exactamente con las necesidades del cliente. Sin embargo en ocasiones las adaptaciones de software estándar a las necesidades de un cliente pueden costar tanto como hacer el software a medida desde cero. Todo depende de lo que el producto inicial se adapte a los requerimientos del cliente.

Como analogía entre software a medida y estándar se puede usar, con restricciones, el caso de un traje a medida frente a otro comprado en un centro comercial. Muchos clientes tendrán bastante con un traje del centro comercial al que le hacen unos mínimos arreglos. En cambio si el cliente tiene necesidades especiales por ser por ejemplo muy alto es difícil que encuentre un traje que le sirva en el centro comercial y tendrá que pedir a un sastre que se lo confeccione a medida. Otra posibilidad sería comprar el traje más grande del centro comercial y luego pedir a un sastre que se lo alargue. El coste del arreglo generalmente será menor que el traje a medida pero el resultado tampoco será el mismo.


Ventajas del software a medida:

  • Se adapta perfectamente a las necesidades del cliente.
  • No requiere un cambio en la forma de trabajar de la empresa u organización.
  • Se puede modificar y ampliar fácilmente.
  • Posibilidad de entregas modulares.
  • El software es propiedad del cliente.

Desventajas del software a medida:

  • Generalmente es más caro que el software estándar.
  • La implementación es más costosa y por lo tanto más lenta.

¿Cuando conviene desarrollar software a medida?

Una empresa u organización preferirá desarrollar software a medida cuando las necesidades de sus sistemas de información no se adapten exactamente a ningún producto comercial, personalizable o no, ya sea porque tienen requerimientos especiales o porque no deseen cambiar sus procesos de gestión. Los requerimientos especiales pueden ser cualquier cosa: desde informes especializados hasta procesos de gestión no habituales. La decisión de desarrollar software a medida puede afectar a la competitividad del cliente a medio plazo, por lo que es una decisión que hay que meditar bien antes de tomar una decisión definitiva.

jueves, 22 de mayo de 2014

PHP avanzado: Llamadas recursivas en funciones anónimas (closures)

PHP

Una closure es una función sin nombre que puede por ejemplo asignarse a una variable o pasarse como parámetro a otra función. PHP soporta closures desde la versión 5.3 con una restricción importante: El ámbito de las variables es totalmente privado. Esto quiere decir que desde dentro de la closure no se puede acceder a variables externas a no ser que sean variables globales y las declares con la palabra clave global. Una excepción a esto son las variables superglobales. Además desde PHP 5.4 se puede acceder a $this si la closure se declara dentro de un método de una clase. Esa restricción no es un problema por si mismo, pero restringe el uso de variables locales cuando declaras la closure dentro de una función o de un método de una clase. Para solucionar eso se usa la palabra clave use. Entonces si queremos hacer una llamada recursiva a la closure tendremos que pasar una referencia a la propia closure a través de la palabra clave use. Por ejemplo (*):

$factorial = function( $n ) use ( &$factorial ) {
    if( $n == 1 ) return 1;
    return $factorial( $n - 1 ) * $n;
};

(*) Ejemplo sacado de Stack Overflow.

martes, 20 de mayo de 2014

Añadir métodos a una clase en Javascript

Javascript es un lenguaje de programación que está cada vez más en alza debido a sus enorme flexibilidad y a sus muchas posibilidades. Una característica que los principiantes en este lenguaje no suelen conocer es que se puede añadir y modificar el comportamiento de los métodos de una clase posteriormente a la declaración de la misma. Y esto puede hacerse tanco con clases propias como con clases nativas del lenguaje.

Por ejemplo la clase String, que es nativa de Javascript, tiene muchos métodos útiles como pueden ser trim(), substring(), indexOf() o replace(); pero carece por ejemplo de un método stripTags() que elimine las etiquetas HTML de una cadena de texto. Sin embargo podemos añadirlo fácilmente:

String.prototype.stripTags = function() {
    return this.replace(/<(?:.|\n)*?>/gm, '').trim();
}

Una vez declarado podemos hacer lo siguiente:

var x = "<p>Hola <b>mundo</b>.</p>";
x = x.stripTags();
document.write(x);

El resultado será "Hola mundo" sin los tags HTML.