Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: Baaaw Oic en 18 Febrero 2010, 21:45 pm



Título: Aplicando al PHP : POO (Renovado :: Active Record)
Publicado por: Baaaw Oic en 18 Febrero 2010, 21:45 pm
Miercoles, 17 de Febrero del 2010 [1]
Programacion orientada a objetos POO


Hola soy Baaaw Oic y a partir de ahora ire publicando el poco conocimiento, tecnicas, etc que tengo sobre lenguaje de programacion, espero que sea util a alquien, si detectas algun error enviame un MP y lo corregire si es necesario, gracias por su atencion y hablamos pronto.


Definiciones generales

El objeto como elemento principal, es la representacion abstracta de los objetos del mundo real (bicicletas, vehiculos, casas, personas, etc); un objeto es un conjunto de atributos y metodos relacionados entre si. Los atributos representan el estado en el que se encuentra un objeto en un momento dado, mientras que los metodos el comportamiento que puede realizar el objeto.

Caracteristicas

Entre sus principales caracteristicas tenemos:

* Abstraccion: Es separar los atributos que realmente sirven para el funcionamiento de un software.
* Encapsulacion: Permite el ocultamiento de codigo asegurandonos que el funcionamiento interno de un objeto es desconocida para otros.
* Reutilizacion: La utilizacion de clases deriva atributos y metodos a otras clases del mismo tipo.
* Polimorfismo: Indica literalmente la posibilidad de que una entidad tome muchas formas.

Conclusion

El objeto como representación abstracta de las entidades del mundo real permite que el programador pueda reconocer los atributos y comportamientos del mismo de una mejor manera; la fácil detección de los estados y comportamientos de un objeto permiten que el usuario sepa manipularlo y adaptarlo a su software.


Fuentes consultadas

* Libro : Programación orientada a objetos.
* Libro : Estructuras de datos en JAVA: Compatible con JAVA2
* Libro : Fundamentos de programación: Algoritmos, estructuras de datos y objetos.
* Wikipedia.


Proximo : Evolucion de los paradigmas de programacion.


Título: Re: [Taller] - Programacion orientada a objetos y su aplicacion al PHP
Publicado por: Baaaw Oic en 18 Febrero 2010, 21:46 pm
Sabado, 20 de Febrero del 2010 [2]
Evolucion de los paradigmas de programacion

Pues bien, a grandes rasgos se pueden distinguir 3.

1) Programacion en espaguetti: Como su propio nombre lo dice, se representa como un monton de hilos intrincados. Es tipico de los lenguajes de programacion antiguos.

2) Programacion estructurada: Escribe de forma mas clara, utiliza 3 estructuras: secuencia, seleccion e iteracion.

3) Programacion orientada a objetos: Las tecnicas de la programacion estructura no son suficientes para desarrollar nuevas aplicaciones, la POO busca desarrollar un software en el menor tiempo posible, que sea facil de implementar y modificar.


Fuentes consultadas

* Wikipedia.


Proximo : Active record.


Título: Re: [Taller] - Programacion orientada a objetos y su aplicacion al PHP
Publicado por: Baaaw Oic en 18 Febrero 2010, 21:47 pm
Domingo, 21 de Febrero del 2010 [3]
Active Record y PHP

Del autor: Los ejemplos que ire añadiendo no seran nada enrevesados, estaran mas orientados a dar una demostracion de como usar el active record con php aplicando las caracteristicas de la POO.

Definicion de Active Record

"En ingeniería informática, el patrón active record es un patrón de diseño que se suele dar en las aplicaciones empresariales. Active Record es un enfoque al problema de acceder a los datos de una base de datos. Una fila en la tabla de la base de datos (o vista) se envuelve en una clase, de manera que se asocian filas únicas de la base de datos con objetos del lenguaje de programación usado."
[Wikipedia  (http://es.wikipedia.org/wiki/Patr%C3%B3n_ActiveRecord)(Consultado el 21 Febrero 2010)]



1) Primero creamos la Base de datos y la tabla usuario:

Código
  1. CREATE DATABASE `web` ;
  2.  
  3. CREATE TABLE `usuario` (
  4.  `id` int(11) NOT NULL auto_increment,
  5.  `nombres` varchar(30) default NULL,
  6.  `apellidos` varchar(30) NOT NULL,
  7.  `sexo` int(11) NOT NULL,
  8.  PRIMARY KEY  (`id`)
  9. ) ENGINE=INNODB DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;

2) Ahora creamos el sitio ("htpdocs/www/active" - all files here) y la clase para la conexion:

Clase para la conexion: (conexion.php)

Código
  1. class Conexion
  2. {
  3. private $_CON;
  4.  
  5. function __construct()
  6. {
  7. $conex = array('localhost','root','miclaveROOT','web');
  8. $this->_CON = mysql_connect($conex[0],$conex[1],$conex[2]);
  9. mysql_select_db($conex[3],$this->_CON);
  10. }
  11.  
  12. public function conex()
  13. {
  14. return $this->_CON;
  15. }
  16. }

3) Creamos la clase ActiveRecord (Buscar y guardar)
Clase para active Record: (activerecord.php)

Código
  1. //Clase demostrativa elaborada por Baaaw Oic ºº Active Record..
  2. include("conexion.php");
  3. class Active
  4. {
  5. function error_handler()
  6. {
  7. die("Ups ... un error ha ocurrido.");
  8. return true;
  9. }
  10.  
  11. public function busca($codigo)
  12. {
  13. $tabla = get_class($this);
  14. $campos = $this->campos($tabla);
  15. $sentencia = "select * from $tabla where $campos[0]='$codigo'";
  16. $arreglo = $this->sentencia($sentencia);
  17. $numero = mysql_num_rows($arreglo);
  18. if($numero>0)
  19. {
  20. $this->definevalores($tabla,$arreglo);
  21. return 1;
  22. }else{ return 0; }
  23. }
  24.  
  25. public function guarda()
  26. {
  27. $tabla = get_class($this);
  28. $campos = $this->campos($tabla,true);
  29. $valores = array();
  30. $tamanio = sizeof($campos);
  31.  
  32. for($i=0;$i<$tamanio;$i++)
  33. {
  34. $elemento = split("-",$campos[$i]);
  35. if($elemento[2]=='NO' and strlen($this->$elemento[0])==0 and $i>0){ return 0; }
  36. else{ $valores[] = $this->$elemento[0]; }
  37. }
  38. $campos = $this->campos($tabla);
  39. $consulta = "insert into $tabla (".implode(",",$campos).") values ('".implode("','",$valores)."')";
  40. $arreglo = $this->sentencia($consulta);
  41. return 1;
  42. }
  43.  
  44. private function sentencia($query)
  45. {
  46. $con = new Conexion();
  47. $sentencia = mysql_query($query,$con->conex());
  48. if($sentencia){ return $sentencia;}
  49. else
  50. {
  51. set_error_handler($this->error_handler());
  52. return false;
  53. }
  54. }
  55.  
  56. private function definevalores($tabla,$arreglo)
  57. {
  58. $campos = $this->campos($tabla);
  59. $contenido = mysql_fetch_array($arreglo);
  60. foreach($campos as $valor)
  61. {
  62. $this->$valor = $contenido[$valor];
  63. }
  64. }
  65.  
  66. private function campos($tabla,$detalles=false)
  67. {
  68. $columnas = array();
  69. $sentencia = "show columns from $tabla";
  70. $consulta = $this->sentencia($sentencia);
  71. $numero = mysql_num_fields($consulta);
  72. while($arreglo = mysql_fetch_array($consulta))
  73. {
  74. $parametro = $arreglo[0];
  75. if($detalles==true)
  76. {
  77. for($i=1;$i<$numero;$i++)
  78. {
  79. $parametro = $parametro . "-" . $arreglo[$i];
  80. }
  81. }
  82. $columnas[] = $parametro;
  83. }
  84. return $columnas;
  85. }
  86. }

4) Creamos la clase que representara a la tabla usuario de la BD

Objeto que representa al usuario: (usuario.php)
Código
  1. include("activerecord.php");
  2. class Usuario extends Active
  3. {
  4. private $id;
  5. private $nombres;
  6. private $apellidos;
  7. private $sexo;
  8.  
  9.    public function __set($var, $val){
  10.        $this->$var = $val;
  11.    }
  12.  
  13.    public function __get($var){
  14.        return $this->$var;
  15.    }
  16. }

5) Index y funcionamiento (index.php)
Ejemplo guardando registro

Código
  1. <html xmlns="http://www.w3.org/1999/xhtml">
  2. <head>
  3. <title>Ejemplo</title>
  4. </head>
  5. <body>
  6.  
  7. <?
  8. include("usuario.php");
  9. $usu = new Usuario();
  10. //el ide es autogenerado por lo tanto no es necesario definirlo
  11. $usu->nombres='Jose Francisco';
  12. $usu->apellidos='El mejor';
  13. $usu->sexo=1;
  14. $usu->guarda();
  15. ?>
  16.  
  17. </body>
  18. </html>

Ejemplo buscando registro

Código
  1. <html xmlns="http://www.w3.org/1999/xhtml">
  2. <head>
  3. <title>Documento sin título</title>
  4. </head>
  5. <body>
  6.  
  7. <?
  8. include("usuario.php");
  9. $usu = new Usuario();
  10. $usu->busca(1);
  11. echo $usu->apellidos;
  12. ?>
  13.  
  14. </body>
  15. </html>



Caracteristicas usadas en el ejemplo:

* Encapsulamiento.
* Abstraccion
* Reutilizacion




Pronto estare renovando esta sección, muchos saludos y espero verlos pronto.
Saludos. Espero MP's con sugerencias. xD


Título: Re: [Taller] - Programacion orientada a objetos y su aplicacion al PHP
Publicado por: Baaaw Oic en 20 Febrero 2010, 16:18 pm
[Reservado 3]


Título: Re: Aplicando al PHP : POO (Renovado)
Publicado por: Baaaw Oic en 21 Febrero 2010, 21:46 pm
[Reservado 4]