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

Mi primer codigo POO...estoy en lo correcto?

Estas en el tema de Mi primer codigo POO...estoy en lo correcto? en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola amigos, Resulta que durante la semana he ido poco a poco avanzando en esto de POO y POO en PHP5, apenas son mis primero ...
  #1 (permalink)  
Antiguo 11/08/2006, 15:30
Avatar de locojars  
Fecha de Ingreso: mayo-2002
Mensajes: 265
Antigüedad: 21 años, 11 meses
Puntos: 4
Mi primer codigo POO...estoy en lo correcto?

Hola amigos,

Resulta que durante la semana he ido poco a poco avanzando en esto de POO y POO en PHP5, apenas son mis primero pasos y quisiera mostrar el codigo para saber si no ando tan "perdido", por favor diganme si el siguiente codigo es realmente orientado a objetos.

Tengo una tabla de actividades y he guardado ahi un par de registros para hacer una prueba, la clase que he creado para manejar el objeto es la siguiente:
Código PHP:
require_once'class.Conexion.php'// Esta clase de la conexion con la BD usando PEAR

class Actividad
{
        public 
$nombre;
        public 
$status;
        
    function 
__constructor()
    {
                
$nombre null;
                
$status null;
            
    }
        
    
    private function 
conectar()
    {
            
$connect = new Conexion();
            
$this->connected $connect->conexion();
            
            return 
$this->connected;

    }
    
    public function 
Agregar()
    {
        
        
$db $this->conectar();
        
$insertar "insert into actividades set nombre='".$this->nombre."', status='".$this->status."'";
        
$db->query($insertar);
        

    }
    
    public function 
Buscar()
    {
        
$db $this->conectar();
        
$consulta "select * from actividades where idActividad=".$this->id;
        
$res $db->query($consulta);
        
$row $res->fetchRow(DB_FETCHMODE_OBJECT);
        
$this->nombre $row->nombre;
        
$this->status $row->status;
        
        return 
$this->nombre;
        return 
$this->status;        
    }

Esta es la clase actividad, para utilizar los metodos de dicha clase hago lo siguiente:
Código PHP:
// Para agregar un registro
$acti->nombre"Linea de Construcción";
$acti->status "arctivo";
$acti->Agregar();

// Para buscar un registro

$acti->id 6;
$acti->Buscar();
echo 
$acti->nombre." ".$acti->status
Gracias por su atencion y ayuda.
Saludos,
jorge.
  #2 (permalink)  
Antiguo 11/08/2006, 16:03
 
Fecha de Ingreso: enero-2006
Ubicación: mi casa
Mensajes: 255
Antigüedad: 18 años, 3 meses
Puntos: 0
Yo igual hoy me decidi adentrarme a la POO en PHP y según lo que ya sé...
entiendo que el constructor debe un método con el mismo nombre de la clase no?

Código:
class clase{

function clase($variable){

}
}
;

y en cuanto a los atributos veo que los declaras con Public, según el tute que vi se usa Var, y que las clases en PHP son solo publicas no hay privadas pero en C++ sí (puede que el tute esté desactualizado y ya se haya implementado en PHP5 xDD no lo sé)

y sí está orientado a objetos...


te muestro las practicas que he hecho hoy:
Código:
<?php
/*
Programación orientada a Objectos (POO)
Practicando: Sobreescritura de metodos y atributos
Código: PHP
Autor: xxxx*/

Class ClaseA {
        var $atributo1;
        var $atributo2;

        function ClaseA($szNombre,$szApellido){
                $this->atributo1 = $szNombre;
                $this->atributo2 = $szApellido;

        }
        function Imprime_dato(){
                echo "Nombre: $this->atributo1\n";
                echo "Apellido: $this->atributo2\n";
        }
}

Class SubClaseA extends ClaseA {

      var $atributo1;
      var $atributo2;

      function ClaseA($szNombre,$szApellido){
              $this->atributo1 = $szNombre;
              $this->atributo2 = $szApellido;

      }
      function Imprime_dato(){
              echo "El nombre es $this->atributo1";

      }
}
y este es un ejercicio que hice para memorizarme los conceptos:

Código:
<?php

class clase {
        /* Esto es una estupida clase */

        /* ---------------------- Atributos
        */
        var $atributo1;
        var $atributo2;

        /* -----------------------Métodos */
        function metodo1() {

        echo "El parametro pasado fue:".$this->atributo1."\n";
        echo "La primera letra del atributo es:".$this->atributo2."\n";


        }
        function metodo2($param1,$param2){


        }

        /* ----------------------- Constructor */
        function clase($param1) {
                echo "Este es un constructor! llamado con un parametro: $param1\n";
                $this->atributo1 = $param1;
                $this->atributo2 = $param1[0];
        }

}

$a = new clase("xxx");    /* ---------------------- instancia de  un objeto            */
$b = new clase("jxxxa!");
$c = new clase("cxxx!");

$a->metodo1();
$b->metodo1();
$c->metodo1();


?>
hice otros pero ya los eliminé xDDD estos te los pego directo de mi editor...

un saludo! y a seguir con la POO! que no está nada dificil.
  #3 (permalink)  
Antiguo 11/08/2006, 16:15
Avatar de locojars  
Fecha de Ingreso: mayo-2002
Mensajes: 265
Antigüedad: 21 años, 11 meses
Puntos: 4
Gracias por responder

HOla NightDark

Gracias por tu respuesta , la verdad es que si hay algunos tutoriales que esta desactualizado porque trabajan inclusive con PHP4, yo encontre uno que me ayudo bastante a comprender mas la POO en PHP5 y te comento que si hay cosas nuevas.

Si quieres date una pasada por aqui

http://devzone.zend.com/node/view/id/638
http://www.epsilon-eridani.com/p2D/a...279800cfa3d5bb

Espero que los MAESTROS en el foro me den una opnion acerca de lo que he hecho.

Saludos,
Jorge.

Última edición por jam1138; 13/08/2006 a las 01:43 Razón: Arreglo enlaces
  #4 (permalink)  
Antiguo 11/08/2006, 18:03
 
Fecha de Ingreso: enero-2006
Ubicación: mi casa
Mensajes: 255
Antigüedad: 18 años, 3 meses
Puntos: 0
Cita:
Iniciado por locojars Ver Mensaje
HOla NightDark

Gracias por tu respuesta , la verdad es que si hay algunos tutoriales que esta desactualizado porque trabajan inclusive con PHP4, yo encontre uno que me ayudo bastante a comprender mas la POO en PHP5 y te comento que si hay cosas nuevas.

Si quieres date una pasada por aqui

Espero que los MAESTROS en el foro me den una opnion acerca de lo que he hecho.

Saludos,
Jorge.
Ah interesante el nuevo modelo de objetos en PHP5...
se ha ampliado bastante...

gracias por los links

Última edición por jam1138; 13/08/2006 a las 01:19
  #5 (permalink)  
Antiguo 12/08/2006, 11:53
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Hola, tu codigo esta, "bien", pero tienes unos pequeños errores, a continuacion te los pongo:

- Siempre define de que tipo son las funciones, inclusive los constructores, se que por compatibilidad si declaras una funcion sin su atributo de acceso es public por default, pero es bueno que definas si el constructor es publico o privado.

- Trata de que tus variables de clase siempre sean privadas, esto es para prevenir que se cambien sin que tu lo hagas exclusivamente, se que esto no es un problema en PHP, pero cuando programes en otros lenguajes (como Java, .NET) donde hay clases sincronizadas, te sera mas facil programar de igual forma.

Para esto crea lo que se les conoce Getters y Setters, esto es, metodos como: getNombre(), getStatus(), y setNombre( $nombre ), setStatus( $status).

Se que esto "complica" un poco las cosas pero es bueno cuando a veces hay que programar en otros lenguajes POO, como Java y .NET.

- En tus funciones no uses 2 returns, ya que la funcion siempre se sale con el primer return que encuentra, esto es un error de programacion que estas haciendo aunque para el compilador no es problema.

A continuacion te pego tu codigo ya arreglado
Código PHP:
require_once'class.Conexion.php'// Esta clase de la conexion con la BD usando PEAR 

class Actividad 
{
    private 
$nombre
    private 
$status;
         
    public function 
__construct() 
    {
        
$nombre null;
        
$status null
    }
    
    private function 
conectar() 
    { 
        
$connect = new Conexion(); 
        
$this->connected $connect->conexion(); 
        
        return 
$this->connected
    }
    
    public function 
Agregar() 
    { 
        
$db $this->conectar(); 
        
$insertar "insert into actividades set nombre='".$this->nombre."', status='".$this->status."'"
        
$db->query($insertar);
    }
    
    public function 
Buscar$id 
    { 
        
$db $this->conectar(); 
        
$consulta "select * from actividades where idActividad=".$id;
        
$res $db->query($consulta); 
        
$row $res->fetchRow(DB_FETCHMODE_OBJECT); 
        
$this->nombre $row->nombre
        
$this->status $row->status
        
        return 
true// Aqui regresamos true para indicar una busqueda exitosa
    
}
    
    public function 
getNombre()
    {
        return 
$this->nombre;
    }
    
    public function 
getStatus()
    {
        return 
$this->status;
    }
    
    public function 
setNombre$nombre )
    {
        
$this->nombre $nombre;
    }
    
    public function 
setStatus$status )
    {
        
$this->status $status;
    }

  #6 (permalink)  
Antiguo 15/08/2006, 09:12
Avatar de B**
B**
 
Fecha de Ingreso: enero-2006
Ubicación: Monterrey,Mexico
Mensajes: 952
Antigüedad: 18 años, 3 meses
Puntos: 3
Gator , y como para que servirian los metodos get y set en ese ejemplo... o en cualquier otro..
Yo cuando lleve la clase de POO hace como 1 año y medio... recuerdo que hice algunos beans en java,pero no recuerdo para que hacia los metodos get y set ...
Si pudieras darme porfavor una breve explicacion y un ejemplillo donde se podrian usar..
! Saludos !
__________________
-URL= Go PHP5.
-Age=22.
-Learning=PHP,J2EE,Struts,MAMBO,C++,JSON,AJAX,XHTML ,CSS.
  #7 (permalink)  
Antiguo 15/08/2006, 09:21
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Hola, pues los metodos get y set, son para obtener y establecer el valor de las variables privadas de la clase.

Son recomendables porque asi puedes comprobar el tipo de dato que te envian, si estan o no en un rango, o si es el tipo de variable que quieres, por ejemplo, supon que tienes un metodo que se llame setItems, que requiera un array, como PHP no hace diferencia de variables, podrias mandarle un int, o algun otro valor y en donde uses ese valor te ocasionaria un error.

Para eso puedes aplicar esto:
Código PHP:
function setItems$data ) {
      if( !
is_array$data ) ) {
            throw new 
Exception'$data se espera sea un array, y se envio: ' gettype$data ) );
      }

Los metodos get de igual forma te sirven para lo mismo, para regresar el valor de la variable interna, y como te digo son utiles cuando tienes clases con threads sincronizados (muy comun en Java y .NET) asi no tienes colision de datos
  #8 (permalink)  
Antiguo 15/08/2006, 09:47
Avatar de B**
B**
 
Fecha de Ingreso: enero-2006
Ubicación: Monterrey,Mexico
Mensajes: 952
Antigüedad: 18 años, 3 meses
Puntos: 3
Entonces de igual manera se puede hacer esto???:

Código PHP:
function getItems($producto){
returns $this->producto=$producto;
}
getItems=("laptop");// Puedo asignar un valor asi ?? 
Me confundio que dijiste q sirven pa lo mismo... ó tendria que hacer esto:?
Código PHP:
function setItems($producto){
returns $this->producto=$producto;
}
// Y ya que estableci el valor...//
function getItems(){
return 
$this->producto;

y ya a la hora de imprimir el valor.. a traves de getItems... la variable producto es la misma que estableci a traves de setItems ???
__________________
-URL= Go PHP5.
-Age=22.
-Learning=PHP,J2EE,Struts,MAMBO,C++,JSON,AJAX,XHTML ,CSS.

Última edición por B**; 15/08/2006 a las 10:16
  #9 (permalink)  
Antiguo 15/08/2006, 10:16
 
Fecha de Ingreso: enero-2006
Ubicación: mi casa
Mensajes: 255
Antigüedad: 18 años, 3 meses
Puntos: 0
Haber yo tambien coopero, aunque sé poco (dos días de leer y uno de codear)

Según lo que entiendo es que al poner tus atributos en privado al no poder ser accesados fuera de la clase necesitas usar funciones set y get para obtener y colocarle valores a esos atributos, por ejemplo:

Código PHP:
Class example
{
  private 
$atributo1;
  private 
$atributo2;

  public function 
setAtributo1($variable)
  { 
     
$this->atributo1 $variable;
  }
  public function 
getAtributo2()
  {
     return 
$this->atributo2;
  }
  
   function 
__construct($exam)
   {
   
$this->atributo2 $exam;
   }
}

$obj = new example("Esto es un ejemplo");
$obj->setAtributo1("Seteamos el atributo 1.. es como una puerta hacia el objeto, ya que no tenemos acceso al atributo..");

echo 
$obj->getAtributo2(); 
Eso es lo que yo entendí, si estoy mal pues corregidme :)
un saludo...

Ah! y aquí va lo que codie que le faltan varios retoques aún y que no terminé, pero espero que esté bien codeado..


Código PHP:
<?php

Class Auto
{
  public 
$velocidad;
  private 
$gasolina;
  public 
$puertas;
  public 
$velocidad2;

  static public function 
cargar_gasolina($litro){
          
$this->gasolina +=  $litro;
  }

  public function 
enciende_motor($encender)
  {
          if ( 
$encender )
             {
               return 
true;
             }
  }

  public function 
frenar_auto()
  {

  while(
$this->velocidad2 0){
       echo 
"Auto frenando: bajando velocidad:"$this->velocidad2."\n";
          
$this->velocidad2--;
  }
  if( 
$this->velocidad2 == ) return 0;
  }

  public function 
acelerar($acelera)
  {
  if ( 
$acelera ) {

          while(
$this->velocidad2 $this->velocidad && $acelera+$this->velocidad2 != $this->velocidad2){
          echo 
"El auto acelera: $this->velocidad2 \n";
          
$this->velocidad2++;

          if ( 
$this->velocidad2 == $this->velocidad )
           {
                   return 
$this->velocidad2;
           }
          }
          return 
$this->velocidad2;
  }

  }

  function 
__construct($velocidad,$cilindros,$puertas,$combustible)
  {
          
$this->velocidad $velocidad;
          
$this->cilindros $cilindros;
          
$this->puertas   $puertas;
          
$this->velocidad2 0;
          
$this->gasolina   $combustible;

  }

}


$obj = new Auto("315","16","2");
if ( 
$obj->enciende_motor("1") )
{
        echo 
"El auto va a:"$obj->acelerar(6)." km/h \n";
        
$obj->frenar_auto();
        echo 
"El auto frenó y su velocidad es de: $obj->velocidad2\n";
}

exit(
"Fin de programa");


?>
  #10 (permalink)  
Antiguo 16/08/2006, 16:44
foo
 
Fecha de Ingreso: febrero-2006
Mensajes: 278
Antigüedad: 18 años, 2 meses
Puntos: 0
esto esta mal:

static public function cargar_gasolina($litro){
$this->gasolina += $litro;
}

no puedes utilizar una referencia a la instancia ($this) en un miembro de clase (static ...)
  #11 (permalink)  
Antiguo 16/08/2006, 21:10
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 18 años, 11 meses
Puntos: 32
Hablamos sobre getter y setter en el propio foro

No se olviden de buscar antes de preguntar.
__________________
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 03:27.