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

Ayuda con Ejemplos POO

Estas en el tema de Ayuda con Ejemplos POO en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola. Como están. Si alguien me puede ayudar con esto. Estoy entrando a lo que son clases en php. ya se lo básico de ejemplos ...
  #1 (permalink)  
Antiguo 03/08/2009, 21:13
Avatar de juanca2626  
Fecha de Ingreso: junio-2004
Ubicación: Lima-Peru
Mensajes: 67
Antigüedad: 20 años, 6 meses
Puntos: 0
Ayuda con Ejemplos POO

Hola. Como están.

Si alguien me puede ayudar con esto.

Estoy entrando a lo que son clases en php. ya se lo básico de ejemplos clásicos que se encuentran por la web. Pero la verdad que no se cómo aplicar estos conocimientos a un sistema real. Por ejemplo. Si quisiera hacer un sistema de compras, ventas, etc.

Me gustaría saber si hay algún tuto, algo que te explique un sistema pequeño de lo que sea, en la cual yo pueda partir de ello.

Por ejemplo:
Un sistema de ventas.
Definamos 4 tablas básicas.

1 -Producto.
2 -Clientes.
3 -Pedidos.
4 -Pedidos-detalle.

Como aplicaría la parte de clases. En php aquí.
Por favor necesito algo bien detallado, porque están tratando con alguien que recién está entrando a los temas con clases y no puedo suponer nada .

Desde ya muchas gracias por leer este tema.
  #2 (permalink)  
Antiguo 04/08/2009, 11:50
Avatar de Snaft_J1  
Fecha de Ingreso: diciembre-2006
Mensajes: 285
Antigüedad: 18 años, 1 mes
Puntos: 8
Respuesta: Ayuda con Ejemplos POO

Una pregunta, de casualidad haz programado en algun otro lenguaje?

te doy una primera instancia, convierte cada una de esas entidades en clases
que seran las encargadas de llevar a cabo sus actividades de gestion.
esto a groso modo y sería una primera instancia con lo cual puedes ir visualizandolo, luego ya entras con mayor detalle a elaborar tus clases, que te parece?

sería algo como esto:

Código PHP:
 <?php
 
abstract class DbProvider {
     protected function 
__construct() {
    }
    
    
//TODO: aqui defines los metodos que las clases hijas Producto, Pedido entre otras
    //        requieren para llevar a cabo una actividad en la BD.
    
abstract public function DeleteCommand ();
    abstract public function 
InsertCommand ();
    abstract public function 
SelectCommand ();
    abstract public function 
UpdateCommand ();
    
    
//TODO: aqui crearias otros metodos comunes para todas las entidades
    //        metodos que no requieras personalizar para cada una de ellas.
    
public function DbConnect(/* Aqui pasarias los parametros de conexion*/) {
        
//TODO: aqui estableces la conexion, la podrias retornar y/ seleccionar la BD
    
}
    
    public function 
DbDisConnect(/* Aqui pasarias los parametros de conexion*/) {
        
//TODO: aqui lebararias la conexion a la bd....
    
}
    
    
//TODO: Otras posibilidades de metodos.... 
    //        recuerda todos van acorde a tus necesidades y analisis.
    
 
}
 
 class 
Producto extends DbProvider {
    
//Aqui defines todos los metodos propios para la gestion
    //de la entidad producto.
 
}
 
 class 
Cliente extends DbProvider {
    
//Aqui defines todos los metodos propios para la gestion
    //de la entidad Cliente.
 
}
 
 class 
Pedidos extends DbProvider {
    
//Aqui defines todos los metodos propios para la gestion
    //de la entidadPedidos.
 
}

?>
ten presente es solo una muestra muy sencilla, se puede generar algo mucho mejor, pero solo es una pequeña guia.
  #3 (permalink)  
Antiguo 06/08/2009, 00:16
Avatar de juanca2626  
Fecha de Ingreso: junio-2004
Ubicación: Lima-Peru
Mensajes: 67
Antigüedad: 20 años, 6 meses
Puntos: 0
Respuesta: Ayuda con Ejemplos POO

gracias snaft_j1 por responder.

No ubiece conocido el uso de las clases abstractas, si no lo ubieces usado aqui para ilustrarme tu codigo :).

Te expondo mis dudas.

1 - Al definir 4 metodos abstractos: DeleteCommand,InsertCommand,SelectCommand,UpdateCo mmand. estamos obligando a que todas las clases que extiendan de la clase abstracta DbProvider definan estos 4 metodos no ??.

2 - Como seria el mejor uso para DbConnect ?. se que este metodo seran usados por todas las demas clases hijas y que no se nesecitaran cambiarla. tu me pones que le mande como parametros los datos de conexion. entonces mas o menos podria ser algo asi.

Código PHP:

    
public function DbConnect$server $user $pass $bd  ) {
        
$handle mysql_connect($server,$user,$pass);
        if(
$handle)
           
$ok mysql_select_db($bd,$handle);
        if(!
$ok)
            return 
false;
        else
            return 
$handle;
    } 
Trabajemos con la clase Cliente que tendria por ejemplo 4 campos basicos.
Id , Nombres, Apellidos, Email. y queramos implementar SelectCommand. haber si mas o menos entiendo. lo aria asi.


Código PHP:

 
class Cliente extends DbProvider 
 
    private 
$id;
    private 
$nombres;
    private 
$apellidos;
    private 
$email;
    private 
$registro = Array();

    public function 
setId($id){
        
$this->id $id;
    }
    public function  
DeleteCommand(){
    }
    public function  
InsertCommand(){
    }
    public function  
UpdateCommand(){
    }
    public function  
SelectCommand(){

       
$sql="select * from cliente where id_cliente=".$this->id;
       
$tb mysql_query($sql);
       if (
$tb){
           
$row mysql_fetch_array($tbMYSQL_ASSOC);
           
$this->registro $row;
       }
    }
    public function 
getRegistro(){
        return 
$this->registro;
    }
 }


 
$claseCliente = new Cliente;
 
$claseCliente->DbConnect('localhost','root','','bdPrueba');
 
$claseCliente->setId('83');
 
$claseCliente->SelectCommand();
 
 echo 
"<pre>";
        
print_r($claseCliente->getRegistro());
 echo 
"</pre>"

de este modo en todas las clases que instanciaria tendria que estar pasandole los datos de coneccion, esto seria un modo nose redundante diria yo. otra que lee visto es usar el contructor, que ahora esta en blanco y poner algo como esto.

Código PHP:
    public function __construct() {
        
$this->DbConnect('localhost','root','','bdPrueba');
    } 
con esto cada ves que instancio una clase extendida automaticamente ejecutaria el metodo DbConnect y no tendria que estar pasandole los datos de conexion en cada instancia.

un problema que tube aqui fue. al declarar el construct como protected , me tira un error que no entiendo.

Fatal error: Call to protected DbProvider::__construct() from invalid context in C:\xampp\webdav\phpPOO\ejemploMantenimientos.php on line 100

Bueno, me gustaria tu opinion de como lo llevo hasta aqui. y si tienes una aclaracion me gustaria leerla para ver donde esta mi error.

desde ya te agradesco el interes por ayudarme a entender como es el uso de la POO.


Gracias.
  #4 (permalink)  
Antiguo 06/08/2009, 10:10
Avatar de Snaft_J1  
Fecha de Ingreso: diciembre-2006
Mensajes: 285
Antigüedad: 18 años, 1 mes
Puntos: 8
Respuesta: Ayuda con Ejemplos POO

Cita:
No ubiece conocido el uso de las clases abstractas, si no lo ubieces usado aqui para ilustrarme tu codigo :).
tambien pudiste usar una interfaz.

Cita:
1 - Al definir 4 metodos abstractos: DeleteCommand,InsertCommand,SelectCommand,UpdateCo mmand. estamos obligando a que todas las clases que extiendan de la clase abstracta DbProvider definan estos 4 metodos no ??.
eso es correcto, y el metodo de conexion estara implementado para todas por defecto.

Cita:
2 - Como seria el mejor uso para DbConnect ?. se que este metodo seran usados por todas las demas clases hijas y que no se nesecitaran cambiarla. tu me pones que le mande como parametros los datos de conexion. entonces mas o menos podria ser algo asi.
es muy valido lo que dices, el constructor seria la mejor opcion, lo unico que no me agrada mucho es que en los constructores no puedes usar sobrecarga, pero para este ejemplo lo mas adecuado sería usar el constructor y cambiar su definicion a public.

respecto a la clase cliente:
la forma en que estructures los metodos de las clases van acorde con tu necesidad, pero debes fijarte y estructurarlo mejor y mas generico, aun que tambien es una opcion inicial valida.

Toma encuenta las descripciones anteriores y me cuentas si aun continua generandote el error.
  #5 (permalink)  
Antiguo 06/08/2009, 14:42
Avatar de juanca2626  
Fecha de Ingreso: junio-2004
Ubicación: Lima-Peru
Mensajes: 67
Antigüedad: 20 años, 6 meses
Puntos: 0
Respuesta: Ayuda con Ejemplos POO

Gracias por contestar.
Cambiando el protected por public ya no me da el error que te mensione.

podrias explicarme que quieres decir con sobrecarga.


tambien crees que me podria poner un codigo de mas o menos como podrias defenir la clase Cliente a tu manera.

A todo esto la verdad no tengo idea de como trabajan los programadores en si todo esto, supongo que ya deben de tener algun estandar que siguen para programar POO. tu me podrias recomendar alguno, con ejemplos de codigo. me ubiece gustado encontrar un tuto donde desarrollen algun sistema pequeño basico del cual pueda partir. y seguir ese estandar.

Saludos.

Gracias.
  #6 (permalink)  
Antiguo 06/08/2009, 16:04
Avatar de Snaft_J1  
Fecha de Ingreso: diciembre-2006
Mensajes: 285
Antigüedad: 18 años, 1 mes
Puntos: 8
Respuesta: Ayuda con Ejemplos POO

Sobrecarga de funciones

quere decir que dos o más funciones pueden tener el mismo nombre representando cada una de ellas un código diferente. Esta característica se conoce como sobrecarga de funciones.

Una función sobrecargada es una función que tiene más de una definición.

Estas funciones se diferencian en el número y tipo de argumentos, pero también hay funciones sobrecargadas que devuelven tipos distintos.

Sobrecarga se refiere al uso de un mismo nombre para múltiples significados de un operador o una función.

Dado el énfasis del concepto de clase, el uso principal de la sobrecarga es con las funciones miembro de una clase. Cuando más de una función miembro con igual nombre se declara en una clase, se dice que el nombre de la función está sobrecargado en esa clase. El ámbito del nombre sobrecargado es el de la clase.

La sobrecarga de funciones amigas es similar a la de funciones miembro, con la única diferencia de que es necesaria la palabra reservada que l caracteriza en el lenguaje especifico al igual que en la declaración de cualquier función amiga.

jajaja, hombre, hombre compañero por eso te he explicado para que tu mismo la generes, de este modo aprendes más, por que no mejor tu la defines de tal manera que sea optima y funcional, luego la posteas aui y yo te la reviso?

umm metodologias de desarrollo?
muchas, pero debes indagar, te recomiendo leas tutos de UML, RUP, COBIT, ummm POO en general, y cuando programes es muy comun utilizar notacion hungara y otro tipo de conceptos para estandarizar el codigo, pero todo va acorde con las necesidades.

un saludo y espero no haberte decepcionado.

Animo!!
  #7 (permalink)  
Antiguo 07/08/2009, 10:58
Avatar de juanca2626  
Fecha de Ingreso: junio-2004
Ubicación: Lima-Peru
Mensajes: 67
Antigüedad: 20 años, 6 meses
Puntos: 0
Respuesta: Ayuda con Ejemplos POO

Gracias nuevamente. No conocía la palabra sobrecarga, pero si lo que me definiste es mas creo que en algún post de java vi esa funcionalidad de crear múltiples constructores, pero que cada uno se debe diferenciar en algo, 1 parámetro o 2 parámetros. etc. y cuando instanciabas la clase dependiendo que parámetros mandes usaba el constructor asociado. lástima que en php no estén permitidos esto pero si se pueden simular creo yo.

Bien me pondré hacer un código, y lo pondré haber si lo testeas y miras y me dices si estoy en lo correcto.

Te agradezco deberás el interés.

Saludos.
  #8 (permalink)  
Antiguo 07/08/2009, 11:42
Avatar de Snaft_J1  
Fecha de Ingreso: diciembre-2006
Mensajes: 285
Antigüedad: 18 años, 1 mes
Puntos: 8
Respuesta: Ayuda con Ejemplos POO

si, se pueden casi que simular, bueno ahi funciones que sirven de cierto modo.

por aqui estare, ante cualquier cosa que te pueda colaborar.
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 02:26.