You are currently browsing the daily archive for agosto 10, 2012.

Las heramientas CASE (Computer Aided Software Engineering) pretenden aplicar los métodos de la ingenieria a la producción de software y surgen en respuesta a la crisis del software de finales de los sesenta. Cubren todas las etapas del ciclo de vida del software y básicamente pretende generar software de calidad minimizando tiempo y costes tanto en el desarrollo como en el mantenimiento del mismo.

El lenguaje UML (Unified Modeling Language) es un estandar que permite especificar y diseñar software basado en el paradigma de la orientación a objetos.

En este enlace podemos ver  diferentes herramientas CASE que soportan UML y que permiten  generar código automáticamente en diferentes lenguajes de programación.

Anuncios

Existen diferentes posibilidades a la hora de definir una función kernel:

  1. Gaussiana [Gingold & Monaghan, 1977]:W(r,h) = \alpha_D \cdot e^{-q^2} con 0 \leq q \leq 2 donde q=\frac{r}{h}, r es la distancia entre dos partículas determinadas y \alpha_D, el factor dimensional, que es \frac{1}{\pi h^2} en dos dimensiones y \frac{1}{\pi^{\frac{3}{2}} h^3} en tres.
  2. Cuadrática [Gingold & Monaghan, 1977]: \alpha_D (\frac{3}{16} q^2 - \frac{3}{4} q + \frac{3}{4}) con 0 \leq q \leq 2 y donde \alpha_D es \frac{2}{\pi h^2} en 2D y \frac{5}{4 \pi h^3} en 3D.
  3. B-spline cúbico [Monaghan & Lattancio, 1985]W(r,h) = \alpha_D \begin{cases} 1 - \frac{3}{2} q^2 + \frac{3}{4} q^3 ,& \mbox{if } 0 \leq q \leq 1 \\ \frac{1}{4}(2-q)^3 ,& \mbox{if } 1 < q \leq 2 \\ 0 ,& \mbox{if } q > 2\end{cases} con \alpha_D = \frac{10}{7 \pi h^2} en dos dimensiones y \frac{1}{\pi h^3} en 3 dimensiones.
  4. Quíntica: W(r,h) = \alpha_D (1-\frac{q}{2}^4)(2q + 1) con 0 \leq q \leq 2 y \alpha_D = \frac{7}{4 \pi h^2} en 2D y \frac{7}{8 \pi h^3} en 3D.

Pensando en posibles implementaciones, parece lógico utilizar una classe abstracta Kernel de la que heredaran las anteriores implementando sus métodos, de manera que, las posibles clases que llamen a la misma puedan hacerlo siempre de la misma manera independientement de cual estemos utilizando.

El siguiente código muestra la definición de una clase en el lenguaje C++. En el podemos ver los elementos típicos de las mismas.

En el fichero Complex.h, tendriamos la representación del tipo:


#ifndef ComplexH
#define ComplexH

class Complex {

  private:

    //atributos
    double re;
    double im;

  public:

    //constructores
    Complex();
    Complex(double re, double im);

    //metodos
    double get_re();
    double get_im();
    void set_re(double re);
    void set_im(double im);
    double get_mod();
    double get_arg();

    //destructor
    ~Complex();

};

Mientras que en el fichero Complex.cpp tendriamos la implementación del mismo:

#include "Complex.h"

//constructores
Complex::Complex() {
  re = 0;
  im = 0;
}

Complex::Complex(double re, double im) {
  this.re = re;
  this.im = im;
}

//destructor
Complex::~Complex() {
}

//metodos
double Complex::get_re() {
  return this.re;
}

double Complex::get_im() {
  return this.im;
}

void Complex::set_re(double re) {
  this.re = re;
}

void Complex::set_im(double im) {
  this.im = im;
}

double Complex::get_mod() {
  return ...;
}

double Complex::get_arg(){
  return ...;
}

};
agosto 2012
L M X J V S D
    Sep »
 12345
6789101112
13141516171819
20212223242526
2728293031  
Anuncios