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

Ayuda con interfaces

Estas en el tema de Ayuda con interfaces en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Miren estoy realizando altas. bajas. modificaciones y consultas con OOP y una base de datos, pero mi duda surge si las clases que manejo pueden ...
  #1 (permalink)  
Antiguo 23/05/2010, 17:16
 
Fecha de Ingreso: febrero-2009
Ubicación: mexico
Mensajes: 148
Antigüedad: 15 años, 2 meses
Puntos: 1
Pregunta Ayuda con interfaces

Miren estoy realizando altas. bajas. modificaciones y consultas con OOP y una base de datos, pero mi duda surge si las clases que manejo pueden implementar una interface

En mi BD tengo las tablas que comunmente se harian para una biblioteca

CREATE TABLE `libros` (
`id_libro` varchar(15) NOT NULL,
`id_autor` int(5) NOT NULL,
`id_libros_seccion` int(2) NOT NULL,
`id_editorial` int(5) NOT NULL,
`nombre` varchar(100) NOT NULL,
`paginas` int(5) NOT NULL,
`ano_edicion` date NOT NULL,
`fecha_alta` date NOT NULL,
`original` int(2) NOT NULL,
`copia` int(2) NOT NULL,
`descripcion` text NOT NULL,
`imagen` varchar(10) NOT NULL,
PRIMARY KEY (`id_libro`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `libros_seccion` (
`id_libros_seccion` int(2) NOT NULL auto_increment,
`nombre` varchar(50) NOT NULL,
`descripcion` varchar(100) NOT NULL,
PRIMARY KEY (`id_libros_seccion`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;

CREATE TABLE `editoriales` (
`id_editorial` int(5) NOT NULL auto_increment,
`nombre` varchar(50) NOT NULL,
PRIMARY KEY (`id_editorial`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;

CREATE TABLE `autores` (
`id_autor` int(5) NOT NULL auto_increment,
`nombre` varchar(30) NOT NULL,
`apellidos` varchar(50) NOT NULL,
PRIMARY KEY (`id_autor`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;

Ahora para los prestamos de libros utilizo 2 tablas de usuarios ya que existen alumnos y empleados(docentes y administrativos)

CREATE TABLE `alumnos_prestamos_libros` (
`id_prestamo` int(5) NOT NULL auto_increment,
`id_libro` int(6) NOT NULL,
`id_alumno` varchar(15) NOT NULL,
`fecha_salida` date NOT NULL,
`fecha_devolucion` date NOT NULL,
`status` int(1) NOT NULL,
PRIMARY KEY (`id_prestamo`),
KEY `alumnos_prestamo` (`id_alumno`),
KEY `id_libro` (`id_libro`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

CREATE TABLE `empleados_prestamos_libros` (
`id_prestamo` int(5) NOT NULL auto_increment,
`id_libro` int(6) NOT NULL,
`id_empleado` varchar(15) NOT NULL,
`fecha_salida` date NOT NULL,
`fecha_devolucion` date NOT NULL,
`status` int(1) NOT NULL,
PRIMARY KEY (`id_prestamo`),
KEY `empleados_prestamo` (`id_empleado`),
KEY `id_libro` (`id_libro`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;


Hasta ahi todo bien, ya tengo las clases para libros, libros_seccion, autores, editoriales las cuales por logica utilizan altas, bajas, consultas y modificaciones los cuales se ven reflejados en metodos o funciones dentro de cada clase, por ejemplo la clase autor es esta

<?php
class Autor
{
private $nombre;
private $apellidos;
private $cn;
private $id_autor;

public function __construct()
{
$this->cn = new Conexion();
}

public function agregar($nombre, $apellidos)
{
$this->nombre = $nombre;
$this->apellidos = $apellidos;
$query = "INSERT INTO autores (id_autor,nombre,apellidos) VALUES ('','$nombre','$apellidos')";
return $this->cn->dbExecute($query);
}

public function consultar()
{
$query = "SELECT * FROM autores";
return $this->cn->dbExecute($query);
}
public function consulta_id($id_autor)
{
$this->id_autor = $id_autor;
$query = "SELECT nombre,apellidos FROM autores WHERE id_autor='$id_autor'";
return $this->cn->dbExecute($query);
}
public function omite_id($id_autor){
$this->id_autor = $id_autor;
$query = "SELECT * FROM autores WHERE id_autor<>'$id_autor'";
return $this->cn->dbExecute($query);
}
public function modificar($nombre, $apellidos, $id_autor)
{
$this->nombre = $nombre;
$this->apellidos = $apellidos;
$this->id_autor = $id_autor;
$query = "UPDATE autores SET nombre='$nombre',apellidos='$apellidos' WHERE id_autor='$id_autor'";
return $this->cn->dbExecute($query);
}
public function eliminar($id_autor)
{
$this->id_autor = $id_autor;
$query = "DELETE FROM autores WHERE id_autor='$id_autor'";
return $this->cn->dbExecute($query);
}
public function relacion($id_autor){
$this->id_autor=$id_autor;
$query="SELECT COUNT(id_autor) AS id_autor FROM libros WHERE id_autor='$id_autor'";
return $this->cn->dbExecute($query);
}
}
?>

pero siento que hay simulitudes con las otras clases en lo metodos de eliminar, consultar, y quisiera saber si estas clases (libros, libros_seccion, autor y editoriales) pueden hacer con la ayuda de alguna inteface. Y por otro lado para el prestamos de libros si se dan cuenta las tablas de la BD tienen los mismos campos a excepcion del id_alumno y el id_empleado que son los usuario que harian prestamos de libros, pero creo que hacer dos clases serian repetir lo mismo pero estoy viendo que con una interface podria solucionar esto pero no se como hacerlo, si alguien puede ayudarme se lo agradeceria mucho, a lo mejor mi planteamiento no sea el correcto.
  #2 (permalink)  
Antiguo 23/05/2010, 17:59
 
Fecha de Ingreso: enero-2007
Mensajes: 405
Antigüedad: 17 años, 3 meses
Puntos: 3
Respuesta: Ayuda con interfaces

Las interfaces sirven para indicarles a las clases que metodo deben implementar obligatoriamente, es una especie de contrato, para asegurarte de que la clase que implementa la interfaz cumple con lo establecido. En la interfaz solo se ponen los prototipos, nunca el código del metodo.
  #3 (permalink)  
Antiguo 23/05/2010, 18:22
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Ayuda con interfaces

Te recomiendo que busques en este foro sobre interfaces. Hay un buen tema con información amplia sobre lo que quieres hacer.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
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 08:41.