CONEXION ORIENTADA A OBJETOS PHP Y MYSQL

Posted: lunes, 5 de marzo de 2012 by Skuarch in Etiquetas: , , , ,
0




Como todos sabemos las ventajas de la programacion orientada a objectos es poder reutilizar el codigo, aqui les muestro como hacer una clase en PHP para conectarse a la base de datos, tambien se creara una capa superior a la conexion para poder reutilizar nuestro codigo.

La clase no sera un singleton, debido a que si en cualquier momento se requiere cambiar de servidor de base de datos o se utilizen varias conexiones a diferentes bases de datos, el singleton no nos funcionaria.

Unos de los principios de la clase para conectarse es que pueda ser utilizada por cualquiera, recibira todos las parametros necesarios para crear la conexion y como servidor de base de datos se utiliza MySQL.


class ConnectionDatabase {

    private $user;
    private $password;
    private $database;
    private $server;
    private $link;
    private $result;

    //===================================================================
function __construct($user, $password, $database, $server) {
$this->user = $user;
$this->password = $password;
$this->database = $database;
$this->server = $server;
} // end __construct


Primero declararemos las variables y en el contructor recibimos los parametros necesarios para inicializar las variables, como puedes ver con esto, esta clase se puede conectarse a cualquier servidor.



//===================================================================
private function connect(){

if(isset($this->link)){

$this->link = mysql_connect($this->server,$this->user,$this->password) or die(mysql_error());
$this->selectDatabase();

}

return $this->link;

} // end connect


//===================================================================
private function selectDatabase(){

mysql_select_db($this->database,$this->link) or die(mysql_error());

}


Estos metodos son privados por que los demas metodos lo utilizaran, entonces no tiene caso que sea publico.

//===================================================================
public function executeQuery($query){

$this->result = mysql_query($query,$this->link);

return $this->result;

}


Este metodo si es publico, puede ejecutar cualquier query que me mandes, insert, update o select.

//===================================================================
public function fetchArray($query){

$fetchArray = null;          
        $this->result = $this->query($query);
        while($array = mysql_fetch_array($this->result)){              
        $fetchArray[] = $array;
        }
       
         $this->disconnect();
        return $fetchArray;

}


Este metodo tambien es publico y si lo observas tiene un while en donde llena un array para poderlo regresar, el array que regresa lo puedes recorrer en un foreach.


//====================================================================
private function disconnect(){

mysql_close($this->link);

}

//====================================================================
private function freeResult(){

mysql_free_result($this->result);

}

} //end class
Estos son los respectivos metodos para liberar y cerra la conexion que tambien son privados




PATRONES DE DISEÑO: PROXY VIRTUAL

Posted: lunes, 26 de diciembre de 2011 by Skuarch in Etiquetas: ,
0


Proxy virtual se utiliza para no tener que estar creando objectos constantemente, especialmente si estos objetos son dificiles o costosos de hacer, un ejemplo de un objeto costoso puede ser la carga de una imagen y la imagen es de un gran tamano, para poder utilizar este patron de diseno se siguen estos pasos.

Crear una clase abstracta
public abstract class Graphic {
public void draw();
}
Creamos una clase que herede de la clase abstracta y sobre escriba el unico metodo de la clase padre


public class Image extends Graphic {
public void draw() { ... }
}

Ahora crearemos una tercera clase que tambien herede de la clase abstracta, tambien sobre escribira el 
mismo metodo pero este se asegura de que el objecto no haya sido creado anteriormente

public class ImageProxy extends Graphic {
private Image _image;
private String _fileName;
public ImageProxy (String fileName) {
_fileName = fileName;
_image = null;
}

public void draw () {
if (_image==null)
_image = loadImage(_fileName);
_image.draw();
}
}
La forma de de utilizar este patron de diseno es la siguente:

Graphic g = new ImageProxy(“imagen.gif”);

Asi evitaremos que se esten creando objetos constantemente


PATRONES DE DISEÑO: ADAPTER

Posted: jueves, 8 de diciembre de 2011 by Skuarch in Etiquetas: ,
0





El patron de diseño adapter nos ayuda a la comunicacion entre clases que hacen lo mismo pero que los metodos tienen nombres diferentes, por ejemplo, las conexiones de los aparatos electricos en America son diferentes a los de Europa, pero el aparato hace lo mismo en cualquiera de los dos continentes, pero no puedes usar un aparato electrico de Europa en America debido a que el tipo de conexion es diferente para poder usarlo debes de utilizar un adaptador


Este patron de diseño en ocaciones es llamado WRAPPER debido a que crea un objeto de otra clase y dentro de un metodo sobre cargado llama al metodo del objeto previamente creado.

Otra forma de explicar este patron de diseño es cuando se encuentran problemas con los nombre de los metodos por ejemplo en una conexion a la base de datos.


public class ConnectionDataBase(){
public Connection getConnection(){
// codigo para hacer la conexion
}
}


Esta clase es solo de ejemplo y esta en ingles, supongamos que tu codigo esta totalemente en español, entonces tendrias problemas de como usar esta clase y para eso creas un adaptador

public interface adaptador{
public Connection dameConexion();
}

Esta es la interface que debes de implementar en otra clase para poder usarla como normalmente lo harias

public class ConexionBaseDatos implements adaptador{
@override
public Connection dameConexion(){
ConnectionDataBase cdb = new ConnectionDataBase();
return cdb.getConnection();
}
}

Entonces implementando el adaptador ya se puede usar la clase que esta escrita en ingles en español.

Adapatador adaptador = new Adaptador();
adaptador.dameConexion();




PROGRAMACION MULTICORE EN JAVA

Posted: martes, 6 de diciembre de 2011 by Skuarch in Etiquetas: , , , ,
0


Si alguna vez te preguntaste si java (JVM) por si sola corre en varios nucleos a la vez, pues la respuesta es que si , pero en tu programa se debe de habilitar esto, y como diablos habilito esto ???, pues se tiene que crear ciertas funcionalidades en el codigo para usar multicore, lo primero que tenemos que hacer es saber cuantos nucleos tiene nuestro procesador

int processors = Runtime.getRuntime().availableProcessors();


Con esa simple linea de codigo sabes cuantos procesadores tenemos disponibles ahora nececitamos crear nuestro procesos independientes, la forma mas comun es esta.
ExecutorService executor = Executors.newFixedThreadPool(processors);

ExecutorService es una interface que hereda de Executor, como se puede apreciar se crea un pool de Threads y como parametros le mandamos el numero de procesadores que tiene el cliente donde se ejecutara. Ahora solo falta lanzar nuestros procesos
executor.execute(new Runnable(){
public void run(){
//aqui se hace algo ...
}
});

La mejor forma de iniciar un proceso es creando un hilo, hasta el final debemos de dar de baja el executor con la siguiente instruccion
executor.shutdown();

Esto te puede servir como introduccion para el manejo de diferentes procesos en java solo ten cuidado en no dejar Threads vivos asi como tambien la concurrencia.