Ver Mensaje Individual
  #11 (permalink)  
Antiguo 24/07/2007, 12:14
Avatar de nachopro
nachopro
 
Fecha de Ingreso: noviembre-2003
Ubicación: Haedo, Bs. As.
Mensajes: 290
Antigüedad: 21 años, 3 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.