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

introduccion a POO (ayuda)

Estas en el tema de introduccion a POO (ayuda) en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Bueno, llegó el momento... ya hace tiempo que leo sobre programacion orientada a objetos... peroo en PHP se me complica verlo.. he hecho cientos de ...
  #1 (permalink)  
Antiguo 20/07/2007, 00:35
Avatar de nachopro  
Fecha de Ingreso: noviembre-2003
Ubicación: Haedo, Bs. As.
Mensajes: 290
Antigüedad: 20 años, 5 meses
Puntos: 2
introduccion a POO (ayuda)

Bueno, llegó el momento... ya hace tiempo que leo sobre programacion orientada a objetos... peroo en PHP se me complica verlo..

he hecho cientos de cosas en PHP (básicamente intranets o similares)
pero no le encuentro sentido a los objetos, dado que php lee el archivo, lo procesa y saca su resultado y finalizó la ejecución.

me podrían dar una guía o un punto de vista para entender mejor poo en php?

por ejemplo, no sé, un sistema básico de autenticación de usuarios con niveles de permisos... o algo por el estilo

gracias
  #2 (permalink)  
Antiguo 20/07/2007, 00:46
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 7 meses
Puntos: 41
Re: introduccion a POO (ayuda)

Hola Nacho. Muevo tu tema al Foro de PHP OO.

Un abrazo,
  #3 (permalink)  
Antiguo 20/07/2007, 07:39
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
Re: introduccion a POO (ayuda)

Si buscas en el foro hay muchisimos ejemplos ya de programas hechos en PHP OO.

Saludos.
  #4 (permalink)  
Antiguo 21/07/2007, 14:09
Avatar de nachopro  
Fecha de Ingreso: noviembre-2003
Ubicación: Haedo, Bs. As.
Mensajes: 290
Antigüedad: 20 años, 5 meses
Puntos: 2
Re: introduccion a POO (ayuda)

a ver... empecé por este ejemplo

podrían decirme si está bien planteado??
http://fundacioncjc.org.ar/np/poo_1/

para ver el php tienen que hacer clic en el archivo ejecutar.php

de modo contrario verán la fuente del código del archivo que elijan

espero me puedan dar el visto bueno para seguir incursionando..

la idea sería que cada página herede a esta clase principal o estoy equivocado?
  #5 (permalink)  
Antiguo 21/07/2007, 16:02
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
Re: introduccion a POO (ayuda)

Hola nachopro

Aunque tu ejemplo es correcto (funciona) la POO no es nadamas programar con Clases, va mucho mas alla, te recomiendo que leas un buen libro de POO, para que entiendas como es que se tienen que encapsular las clases, como todo debe de ser un objeto y todo debe de estar aislado y a la vez funcionando y relacionado.

Saludos.
  #6 (permalink)  
Antiguo 21/07/2007, 16:20
Avatar de nachopro  
Fecha de Ingreso: noviembre-2003
Ubicación: Haedo, Bs. As.
Mensajes: 290
Antigüedad: 20 años, 5 meses
Puntos: 2
Re: introduccion a POO (ayuda)

Hola GatorV, leí y sé cómo trabajan la poo pero no entiendo cómo implementarla en php, por eso acudo aa quí...

me gustaría ver un sitio simple hecho con clases para terminar de darle el cierre.

o al menos una estructura básica de un sitio
  #7 (permalink)  
Antiguo 21/07/2007, 19:29
 
Fecha de Ingreso: junio-2005
Mensajes: 981
Antigüedad: 18 años, 10 meses
Puntos: 2
Re: introduccion a POO (ayuda)

Cita:
Iniciado por nachopro Ver Mensaje
Hola GatorV, leí y sé cómo trabajan la poo pero no entiendo cómo implementarla en php, por eso acudo aa quí...

me gustaría ver un sitio simple hecho con clases para terminar de darle el cierre.

o al menos una estructura básica de un sitio
Yo te recomendaría que no te centres a buscar un sistema que te aclare las ideas... yo cuando empecé también buscaba un sistema que me termine de aclarar el tema y bue, sigo buscandolo.
Centrate en estudiar, leer, analizar y digerir todo lo que puedas sobre POO que de a poco te vas a ir dando cuenta solo de las cosas. Muchas veces tenes una sensación de que te estas faltando entender algo, pero no sabes precisamente que, ahí lo único que puedes hacer es seguir estudiando hasta que te des cuenta.

Saludos.
  #8 (permalink)  
Antiguo 22/07/2007, 00:18
 
Fecha de Ingreso: noviembre-2003
Mensajes: 798
Antigüedad: 20 años, 5 meses
Puntos: 8
Re: introduccion a POO (ayuda)

Ademas como la mayoría de las cosas, nunca dejaras de aprender OOP, siempre hay algo nuevo que no sabias. Hay que tratar de mantenerse siempre a la vanguardia y estudiar constantemente.
  #9 (permalink)  
Antiguo 22/07/2007, 10:32
Avatar de nachopro  
Fecha de Ingreso: noviembre-2003
Ubicación: Haedo, Bs. As.
Mensajes: 290
Antigüedad: 20 años, 5 meses
Puntos: 2
Re: introduccion a POO (ayuda)

pasa que tengo un nuevo proyecto para encarar y no lo quiero hacer procedural, quiero implementar poo.

pero bueno, será cuestión de dejarlo para la próxima.

muchas gracias
  #10 (permalink)  
Antiguo 22/07/2007, 11:30
 
Fecha de Ingreso: junio-2005
Mensajes: 981
Antigüedad: 18 años, 10 meses
Puntos: 2
Re: introduccion a POO (ayuda)

Cita:
Iniciado por nachopro Ver Mensaje
pasa que tengo un nuevo proyecto para encarar y no lo quiero hacer procedural, quiero implementar poo.

pero bueno, será cuestión de dejarlo para la próxima.

muchas gracias
Me parece buenisimo que intentes realizar un nuevo proyecto completamente en POO pero ten cuidado, no es cuestión de "vamos a hacerlo", cuanto más grande el proyecto más es la dificultad y mayores los problemas... no digo que esperes el proyecto perfecto para aplicar todo esto (el proyecto perfecto no existe), pero es bueno que empieces con algo medianamente chico y vayas aumentando. Cuando estudias arquitectura empiezas con cosas chicas, no te mandas a hacer un edificio de 15 pisos, se entiende a que apunto?

Saludos.
  #11 (permalink)  
Antiguo 24/07/2007, 12:14
Avatar de nachopro  
Fecha de Ingreso: noviembre-2003
Ubicación: Haedo, Bs. As.
Mensajes: 290
Antigüedad: 20 años, 5 meses
Puntos: 2
Re: introduccion a POO (ayuda)

Gracias Darío!

ahora bien, decidí hacer el ABM de una página personal de un amigo.
El sitio básicamente es un portal con entradas, del tipo noticia, artículo y contenido (es decir, una página estática como puede ser "mi biografía")

Ahora bien, los artículos, a diferencia de noticias y contenidos (que sólo tienen una página), pueden componerse de infinitas páginas.

Les cuento cómo es la base:
Tabla Entradas:
id clave primaria
tipo_id si es noticia, articulo o contenido
categoria_id categoría a la que perdetence
fecha
titulo
titulo_url
foto
copete
contenido
firma
impresiones
foro_url
creado_administrador_id
creado
modificado_administrador_id
modificado
destacado
activo

Tabla Paginas:
id clave primaria
entrada_id entrada (de tipo artículo) a la que pertenece
orden orden y/o número de página, ej: 1, 2, 3 y 4
titulo
contenido

Ahora bien, bajo esa estructura de tablas hice las siguientes clases:

class.entrada.php
Código PHP:
<?

abstract class entrada
{
    private 
$id;
    private 
$tipo_id;
    private 
$titulo;
    private 
$titulo_url;
    private 
$creado_administrador_id;
    private 
$creado;
    private 
$modificado_administrador_id;
    private 
$modificado;
    private 
$activo;
    
    
/*function __construct($tipo_id, $titulo, $activo)
    {
        $this->tipo_id = $tipo_id;
        $this->titulo = $titulo;
        $this->activo = $activo;        
    }*/
    
    
public function guardar_entrada();
    public function 
leer_entrada();
    public function 
borrar_entrada();
    
}

?>
class.noticia.php
Código PHP:
<?

class noticia extends entrada
{
    private 
$categoria_id;
    private 
$fecha;
    private 
$foto;
    private 
$copete;
    private 
$contenido;
    private 
$foro_url;
    private 
$destacado;
    
    
/*function __construct($tipo_id, $titulo, $activo)
    {
        $this->tipo_id = $tipo_id;
        $this->titulo = $titulo;
        $this->activo = $activo;        
    }*/
    
    
public function guardar_entrada($id null$tipo_id 2$categoria_id$fecha$titulo$titulo_url$foto$copete$contenido$foro_url$destacado$activo)
    {
        if (
is_null($id))
        {
            
// Insert
        
}
        else
        {
            
// Update
        
}
    }
    public function 
leer_entrada($id)
    {
        
// Select
    
}
    public function 
borrar_entrada($id)
    {
        
// Delete
    
}
}

?>
class.contenido.php
Código PHP:
<?

class contenido extends entrada
{
    private 
$contenido;
    
    
/*function __construct($tipo_id, $titulo, $activo)
    {
        $this->tipo_id = $tipo_id;
        $this->titulo = $titulo;
        $this->activo = $activo;        
    }*/
    
    
public function guardar_entrada($id null$tipo_id 3$titulo$titulo_url$contenido$activo)
    {
        if (
is_null($id))
        {
            
// Insert
        
}
        else
        {
            
// Update
        
}
    }
    public function 
leer_entrada($id)
    {
        
// Select
    
}
    public function 
borrar_entrada($id)
    {
        
// Delete
    
}
}

?>
class.articulo.php
Código PHP:
<?

class articulo extends entrada
{
    private 
$categoria_id;
    private 
$fecha;
    private 
$foto;
    private 
$copete;
    private 
$paginas// Array con Objetos del tipo página (class.pagina.php)
    
private $firma;
    private 
$foro_url;
    
    
/*function __construct($tipo_id, $titulo, $activo)
    {
        $this->tipo_id = $tipo_id;
        $this->titulo = $titulo;
        $this->activo = $activo;        
    }*/
    
    
public function guardar_entrada($id null$tipo_id 1$categoria_id$fecha$titulo$titulo_url$foto$copete$firma$foro_url$activo)
    {
        if (
is_null($id))
        {
            
// Insert
        
}
        else
        {
            
// Update
        
}
    }
    public function 
leer_entrada($id)
    {
        
// Select
    
}
    public function 
borrar_entrada($id)
    {
        
// Delete
    
}
}

?>
class.pagina.php
Código PHP:
<?

class pagina
{
    private 
$id;
    private 
$entrada_id;
    private 
$orden;
    private 
$titulo;
    private 
$contenido;
    
    public function 
guardar_entrada($id null$entrada_id$orden$titulo$contenido)
    {
        if (
is_null($id))
        {
            
// Insert
        
}
        else
        {
            
// Update
        
}
    }
    public function 
leer_entrada($id)
    {
        
// Select
    
}
    public function 
borrar_entrada($id)
    {
        
// Delete
    
}
    
}

?>
como ven, la clases noticia, contenido y artículo heredan a la clase entrada, y ésta última es abstracta con los atributos básicos y los métodos comunes (que son modificar, leer y borrar)

ahora bien, quisiera que alguno que sepa al respecto me corrija esto para saber si voy por buen camino. también si tienen alguna recomendación.

y tengo una duda: los métodos que definí en la clase abstracta entrada, los podría definir como una interfaz también, no es cierto?
y en caso de definirlo como interfaz, no los debo definir en la clase abstracta?

espero sus respuestas, gracias.
  #12 (permalink)  
Antiguo 24/07/2007, 14:35
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
Re: introduccion a POO (ayuda)

mmmmm

Varias cosas:
1.- No es lo mas correcto usar valores por defectos en tus funciones que vayan de izquierda a derecha, asi:
Código:
function algo( $unvalor = 1, $otrovalor, $otrovalormas );
Mas bien es al revez, yo creo el compilador te deberia de marcar un error, pero si no lo hace de todos modos consideralo un error.

2.- En todas tus clases en las que heredas pasas el parametro de $tipo, este deberia ser mas bien un atributo privado, si no, no tiene caso que hagas diferentes tipos de clase.

3.- Las interfaces es mejor utilizarlas cuando quieres que las clases tengan una firma predeterminada, es decir cuando quieres que acepten trabajar de cierta forma, si no, es mejor utilizar clases abstractas.

Saludos.
  #13 (permalink)  
Antiguo 24/07/2007, 14:45
Avatar de nachopro  
Fecha de Ingreso: noviembre-2003
Ubicación: Haedo, Bs. As.
Mensajes: 290
Antigüedad: 20 años, 5 meses
Puntos: 2
Re: introduccion a POO (ayuda)

Gracias GatorV por tus comentarios.

1. No tira error, pero tenés razón. Tienen sentido al final, ya que se puede obviar, si no hay que pasar como valor null y para eso mejor pasarle un 0 o 1 y ya.

2. Y sí, más allá de que cambia los campos a llenar en la tabla según el tipo de entrada, tenés razón sobre el atributo $tipo_id.

3. creo que lo entendí :)

Bueno, voy a seguir elavorándolo con la almohada y con ustedes obvio.. que son quienes me contestan :P jaja
  #14 (permalink)  
Antiguo 15/11/2007, 09:08
Avatar de yssalina  
Fecha de Ingreso: noviembre-2007
Mensajes: 35
Antigüedad: 16 años, 5 meses
Puntos: 1
Re: introduccion a POO (ayuda)

hola, he estado leyendo los mensajes, y resulta, que estoy haciendo un curso online que entra php, ahora estamos con php poo, y resulta que ando haciendo los archivos sobre clases (que me dan error), mi pregunta es la siguiente: para que sirven estos archivos? dentro de un proyecto web cual son su función?
gracias y saludos
  #15 (permalink)  
Antiguo 15/11/2007, 10:02
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
Re: introduccion a POO (ayuda)

Podrías especificar mas tu pregunta?

Las clases son archivos PHP comunes, que debes de incluir para poder utilizarlas, pero no es necesario que estén en archivos separados (aunque es lo que se recomienda).

Dentro de un proyecto web, su función es la de utilizar las clases para que el sitio funcione.

Saludos.
  #16 (permalink)  
Antiguo 15/11/2007, 10:49
Avatar de yssalina  
Fecha de Ingreso: noviembre-2007
Mensajes: 35
Antigüedad: 16 años, 5 meses
Puntos: 1
Re: introduccion a POO (ayuda)

GatorV sabes de algun sitio donde pueda encontrar más informacion sobre php poo?
donde se vean ejemplos y cosas asi?
Gracias
  #17 (permalink)  
Antiguo 15/11/2007, 10:53
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
Re: introduccion a POO (ayuda)

Puedes buscar en el foro, hay mucha información y ejemplos.

Saludos.
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 13:42.