Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Programación orientada a ojetos

Estas en el tema de Programación orientada a ojetos en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Estoy leyendo cosas sobre programación orientada en php a objetos y me surje una duda. Siempre se suele poner el ejemplo del carro de la ...
  #1 (permalink)  
Antiguo 01/10/2009, 12:22
Avatar de PacoRuiz  
Fecha de Ingreso: abril-2009
Mensajes: 254
Antigüedad: 15 años
Puntos: 3
Programación orientada a ojetos

Estoy leyendo cosas sobre programación orientada en php a objetos y me surje una duda.

Siempre se suele poner el ejemplo del carro de la compra, de la clase carros, la instancia nuevo_carro y todo eso, pero pienso que todo esto tiene utilidad si estamos hablando de programas que manejan mucha información, digamos varios carros circulando a la vez, diferentes tipos de personas que manejan diferentes tipos de carros que llevan diferentes tipos de productos, y con métodos y variables asociados a las diferentes clases.

Pero por ejemplo, no me imagino un script en el que circulen varios carros, porque cada visitante ejecuta su propio script, y abrirá un carro y ya está. Imagino que si hay varios visitantes cada script corre por su lado y las variables de cada uno van independientes.

Me da la sensación de que la historia de la programación orientada a objetos, en php genera más trabajo del que evita porque no son tan complejos los programas. ¿No es así?

Por otro lado, yo defino una clase en un script y luego no la puedo usar en el otro, ¿no? ¿Qué hacéis?¿Metéis un include al principio de cada script? ¿hay una especie de definición de clase para la sesión de modo que pueda ser usada por todos los scripts de la sesión?

Es que no me imagino que un solo script de una sola página sea tan complejo como para tener que usar la programación orientada a objetos
  #2 (permalink)  
Antiguo 01/10/2009, 12:47
Avatar de emiliodeg  
Fecha de Ingreso: septiembre-2005
Ubicación: Córdoba
Mensajes: 1.830
Antigüedad: 18 años, 8 meses
Puntos: 55
Respuesta: Programación orientada a ojetos

1.- POO no es mas facil hace mas facil la tarea de programar, hace mas facil la tarea de mejorar/entender el sistema
2.- no tiene nada q ver la poo con la antidad de gente q se conecta a un sitio, o acaso has visto alguna vez al iniciar una sesion en hotmail por ejemplo q veas emails de otra persona? no pq cada uno es una sesion distinta para el servidor
3.- las clases es mejor definirlas en un archivo individual y luego incluirla en donde la necesites
4.- te puedo asegurar q yo hago sistemas tan complejos q si no fuera por la poo no se q haria
__________________
Degiovanni Emilio
developtus.com
  #3 (permalink)  
Antiguo 01/10/2009, 13:17
 
Fecha de Ingreso: septiembre-2009
Ubicación: Neuquén
Mensajes: 142
Antigüedad: 14 años, 7 meses
Puntos: 12
Respuesta: Programación orientada a ojetos

Es la mejor forma de programar, creo que lo que te dice emilideg tiene razon... y tambien hace mucho mas manejable la informacion a utilizar, etc. y siempre es recomendable poner una clase por archivo... por mas que tengas 16 clases, nunca vas a tener que hacer una larga lista de include, ya que en php existe un metodo para cargar las clases que se van instanciando en los scripts

yo siempre las cargo asi:

Código php:
Ver original
  1. <?php
  2.  
  3. define('__LIBRARIES__', dirname(dirname(__FILE__)). '/libraries/');
  4.  
  5. function __autoload($class)
  6. {
  7.     $libraries = __LIBRARIES__ .$class. '.php';
  8.     if (file_exists($libraries)) require($libraries);
  9.     else return exit('No se pudieron cargar las librerias necesarias. ');
  10. }
  11.  
  12. ?>

la funcion __autoload, no hace falta llamarla, solo hay que definirla, y a la hora de instanciar una clase, te incluye el archivo, etc.

Saludos!
  #4 (permalink)  
Antiguo 01/10/2009, 13:45
Avatar de PacoRuiz  
Fecha de Ingreso: abril-2009
Mensajes: 254
Antigüedad: 15 años
Puntos: 3
Respuesta: Programación orientada a ojetos

Gracias,

No dudaba de su utilidad, simplemente me parecía raro, no lo entendía. Pero está claro que cuando la gente usa una cosa es por algo. Imagino que según vaya aprendiendo a manejarla al final la veré imprescindible. Por ahora estoy empezando.
  #5 (permalink)  
Antiguo 01/10/2009, 13:51
 
Fecha de Ingreso: septiembre-2009
Ubicación: Neuquén
Mensajes: 142
Antigüedad: 14 años, 7 meses
Puntos: 12
Respuesta: Programación orientada a ojetos

Ya la verdad que conviene... Ademas hace los codigos mucho mas limpios...

Y algo bueno que tiene, tambien es lo de hacer classes reutilizables, yo me manejo haciendo clases bien hechas, e independientes... Ya que hago paginas web, y cuando varios cleintes me piden por ej. pequeñas aplicaciones con MySQL, yo ya me hice una pequeña y simple libreria para el manejo de base de datos, entonces se me hace mas facil, y no tengo que andar perdiendo el tiempo volviendo a crear tantos codigos nuevamente...

Aca te la dejo para que la mires si queres... Es algo simpl,e no muy compleja, pero hasta el momento me ha sido efectiva... De a poco cuando tengo tiempo trato de mejorarla, y tambien mis otras librerias...

Código php:
Ver original
  1. <?php
  2.  
  3. /**
  4.  * @author estilodg.com <[email protected]>
  5.  * @copyright 2009
  6.  */
  7.  
  8. /**
  9.  * MySQL Management Class
  10.  *
  11.  * @author Diego P. M. Baltar <www (dor) estilodg (dot) com>
  12.  * @package SimpleMySQL
  13.  */
  14. class SimpleMySQL
  15. {
  16.     /**
  17.      * Link identifier
  18.      *
  19.      * @access public
  20.      * @var resource
  21.      */
  22.     public $link = null;
  23.    
  24.     /**
  25.      * Selected database
  26.      *
  27.      * @access public
  28.      * @var string
  29.      */
  30.     public $database = null;
  31.    
  32.     /**
  33.      * Query result resource
  34.      *
  35.      * @access public
  36.      * @var resource
  37.      */
  38.     public $result = null;
  39.    
  40.     /**
  41.      * Query result data
  42.      *
  43.      * @access public
  44.      * @var array
  45.      */
  46.     public $query_result = array();
  47.    
  48.     /**
  49.      * Query error
  50.      *
  51.      * @access public
  52.      * @var boolean
  53.      */
  54.     public $query_error = false;
  55.    
  56.     /**
  57.      * Selected rows
  58.      *
  59.      * @access public
  60.      * @var integer
  61.      */
  62.     public $rows = null;
  63.    
  64.     /**
  65.      * Number of affected rows
  66.      *
  67.      * @access public
  68.      * @var integer
  69.      */
  70.     public $affected_rows = null;
  71.    
  72.     /**
  73.      * Last inserted id
  74.      *
  75.      * @access public
  76.      * @var integer
  77.      */
  78.     public $last_id = null;
  79.    
  80.     /**
  81.      * MySQL connection state
  82.      *
  83.      * @access public
  84.      * @var boolean
  85.      */
  86.     public $ready = false;
  87.    
  88.     /**
  89.      * Database tables
  90.      */
  91.     private $tables = array();
  92.    
  93.     public function __construct($hostname = 'localhost', $username = 'root', $password = '')
  94.     {
  95.         return $this->connect($hostname, $username, $password);
  96.     }
  97.    
  98.     public function __destruct()
  99.     {
  100.         return true;
  101.     }
  102.    
  103.     /**
  104.      * MySQL connect
  105.      *
  106.      * @param string $hostname MySQL server address/ip(port)
  107.      * @param string $username MySQL username
  108.      * @param string $password MySQL password
  109.      * @return boolean
  110.      */
  111.     private function connect($hostname,$username,$password)
  112.     {
  113.         $this->link = @mysql_connect($hostname, $username, $password, true);
  114.         if (!$this->link) return exit(mysql_error($this->link));
  115.         else return $this->ready = true;
  116.     }
  117.    
  118.     /**
  119.      * MySQL select database
  120.      *
  121.      * @param string $database MySQL database name to use
  122.      * @return boolean
  123.      */
  124.     public function select_db($database = '')
  125.     {
  126.         if (!$this->link) return exit(mysql_error($this->link));
  127.         else if (!@mysql_select_db($database)) {
  128.             $this->ready = false;
  129.             return exit(mysql_error($this->link));
  130.         }
  131.         else $this->database = $database;
  132.         return true;
  133.     }
  134.    
  135.     /**
  136.      * MySQL query
  137.      *
  138.      * @param string $sentence MySQL query sentence
  139.      * @return integer Number of selected rows
  140.      */
  141.     public function query($sentence = '')
  142.     {
  143.         if (!$this->link) return exit(mysql_error($this->link));
  144.         $this->result = @mysql_query($sentence, $this->link);
  145.         if (!$this->result) {
  146.             $this->query_error = true;
  147.             return exit(mysql_error($this->link));
  148.         }
  149.        
  150.         $this->affected_rows = mysql_affected_rows($this->link);
  151.        
  152.         if (preg_match('/^\s*(insert|replace)(.+)/is',$sentence)) $this->last_id = mysql_insert_id($this->link);
  153.        
  154.         if (preg_match('/^\s*(select|replace)(.+)/is',$sentence))
  155.         {
  156.             $rows = 0;
  157.             while ($row = mysql_fetch_object($this->result)) {
  158.                 $this->query_result[$rows] = $row;
  159.                 ++$rows;
  160.             }
  161.         }
  162.        
  163.         @mysql_free_result($this->result);
  164.        
  165.         if ($this->query_error) $this->query_error = false;
  166.        
  167.         $this->rows = $rows;
  168.         return true;
  169.     }
  170.    
  171.     /**
  172.      * Clean cached query result
  173.      *
  174.      * @access public
  175.      * @return void
  176.      */
  177.     public function clean()
  178.     {
  179.         $this->query_error = false;
  180.         $this->query_result = array();
  181.         $this->affected_rows = null;
  182.     }
  183.    
  184.     /**
  185.      * Espaces a string
  186.      *
  187.      * @access public
  188.      * @param string $string
  189.      * @return string
  190.      */
  191.     public function escape($string)
  192.     {
  193.         if (!$this->link) return exit(mysql_error($this->link));
  194.         $string = stripslashes($string);
  195.         return @mysql_real_escape_string($string, $this->link) ;
  196.     }
  197. }
  198.  
  199. ?>

Documento en ingles porque el ingles siempre es mas corto que escribir que el español jeje

Saludos.
  #6 (permalink)  
Antiguo 01/10/2009, 13:53
Avatar de dquispe  
Fecha de Ingreso: mayo-2009
Ubicación: Lima
Mensajes: 232
Antigüedad: 15 años
Puntos: 0
Respuesta: Programación orientada a ojetos

Combiene utilizar dto y pdo en php es muy interesante.
Si deseas tambien puedes trabajar con mvc.
Saludos
  #7 (permalink)  
Antiguo 01/10/2009, 14:23
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Programación orientada a ojetos

Tema trasladado desde PHP
  #8 (permalink)  
Antiguo 04/10/2009, 08:29
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 19 años
Puntos: 32
Respuesta: Programación orientada a ojetos

Que tal Nisrokh... pero, ¿atributos públicos?
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #9 (permalink)  
Antiguo 04/10/2009, 10:14
Avatar de PacoRuiz  
Fecha de Ingreso: abril-2009
Mensajes: 254
Antigüedad: 15 años
Puntos: 3
Respuesta: Programación orientada a ojetos

Respecto a la librería de Nisrokh, quizás esté equivocado, pero el usar una librería con funciones de uso común no necesariamente es poo, ¿no? No veo la necesidad de crear una clase. ¿Por qué no crear estas funciones sin mas?
  #10 (permalink)  
Antiguo 04/10/2009, 11:23
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 19 años
Puntos: 32
Respuesta: Programación orientada a ojetos

Que tal Paco,

POO es un paradigma de programación, otra forma de resolver problemas y "organizar" el código.

Considero que existen distintos niveles, generalmente todos empiezan por el primero y luego pocos llegan hasta el último (la mayoría solo logra llegar al 2 y se estancan en el 3):
  1. Programación Estructurada
  2. Programación Estructurada con uso de Objetos (sueltos)
  3. Programación Orientada a Objetos Sin Conceptos Claros
  4. Desarrollo 100% OO

Puedes seguir desarrollando estructurado y apoyarte en algunos objetos, pero lo ideal es que te vayas adecuando a la forma de trabajo con objetos y estructures todo el sistema de esta forma (y eso empieza por "pensar en objetos", no en código).

Nuevamente, "crear clases y jugar con objetos" todos podemos hacerlo, pero desarrollar "orientado a objetos" es un tema más de tener los conceptos claros que de saber la sintaxis de cómo se codifica.

Recomiendo que antes de preguntar si es o no POO, revisar el apartado de Wikipedia sobre POO y paradigmas de programación y las diferencias entre ellos.

Saludos!
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #11 (permalink)  
Antiguo 04/10/2009, 12:08
Avatar de PacoRuiz  
Fecha de Ingreso: abril-2009
Mensajes: 254
Antigüedad: 15 años
Puntos: 3
Respuesta: Programación orientada a ojetos

Gracias Enrique,

guardo estos enlaces para leerlos. Aunque hay una cosa que los que estáis muy metidos en informática no os dais cuenta, y es que cuando un novato lee ese tipo de enlace no se entera de nada, así que, por lo menos para mi, es bueno combinar el ir leyendo esas cosas e ir pillando lo que puedo con empezar un proyecto sencillo.
  #12 (permalink)  
Antiguo 04/10/2009, 13:09
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Programación orientada a ojetos

Creo la cuestión es aprovechar que eres novato para mejor empezar con el pie derecho, conozco muchos programadores que durante años programaron en forma estructurada, y se les hace muy complicado cambiar el paradigma de pensamiento.

Por eso mi recomendación es que te esfuerzes por entender los conceptos ahorita que tienes el concepto fresco, o si no luego es mucho más complicado tratar de mudar la forma de pensar, te estancas como bien indica enriqueplace en un hibrido entre programación estructurada y unos pocos objetos.

Saludos.
  #13 (permalink)  
Antiguo 04/10/2009, 13:45
Avatar de PacoRuiz  
Fecha de Ingreso: abril-2009
Mensajes: 254
Antigüedad: 15 años
Puntos: 3
Respuesta: Programación orientada a ojetos

Si, eso lo tengo claro, de hecho he abandonado el proyecto que estaba haciendo para empezar uno utilizando poo, y así no continúo demasiado tiempo sin usarla y no cojo malas costumbres. Por otro lado iré despacio con este proyecto, para así tener tiempo de leer cosas como las que recomienda Enrique.

Mi problema es el que comentaba, que por ahora me cuesta entenderos y también entender los tutoriales. vosotros no os dais cuenta, pero los informáticos y a los electrónicos sois los profesionales a los que más cuesta entender. Lo mejor es ir comprendiendoos poco a poco, ir pillando una cosilla por aquí y otra por allá y tener paciencia. Por otro lado, se entiende mejor si uno tiene un proyecto entre manos y se centra en intentar comprender las cosas que afectan al mismo. Por eso no me quiero dar un atracón de teoría al principio.
  #14 (permalink)  
Antiguo 04/10/2009, 14:34
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Programación orientada a ojetos

El problema es ese, muchos sistemas se construyen de esa forma, y al terminar cuando entiendes los conceptos ves que el sistema esta mal hecho y tienes que volver a hacerlo de 0 porque fue construido de forma incorrecta (aún con una buena meta).

Por eso aunque te cueste trabajo y estes entrando en esta área de programación si quieres realmente tener éxito debes de esforzarte por entender los conceptos así te evitaras muchos dolores de cabeza futuros.

Saludos.
  #15 (permalink)  
Antiguo 04/10/2009, 16:48
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 19 años
Puntos: 32
Respuesta: Programación orientada a ojetos

Paco, la teoría siempre va primero, no después.

Es como queres primero probar de construir edificios para luego empezar a estudiar arquitectura.
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:21.