Que tal este ejemplo:
Código PHP:
interface VO{
public function insertarDatos();
}
class Persona implements VO{
private $nombre;
private $apellidos;
public function insertarDatos(){
$query = "INSERT INTO personas values ....";
// codigo adecuado para insertar en la tabla 'personas'....
return 1;
}
}
class Proveedor implements VO{
private $nombre;
private $direccion;
public function insertarDatos(){
$query1 = "SELECT count(id_proveedor) from proveedor ...";
// codigo adecuado para buscar algun proveedor con el nombre '$nombre' ....
if( <no-existe> ){
$query1 = "INSERT INTO proveedores VALUES...";
// codigo adecuado para insertar en la tabla 'proveedores'....
}else{
return -1;
}
}
}
class Transaccion {
...
/* @param un objeto de tipo VO */
public function procesar( $vo ){
...
$vo->insertarDatos();
}
}
En este caso, a la clase Transaccion, en el método 'procesar', no le importa 'CÓMO' el objeto '$vo' lleva a cabo su tarea, solo le importa que "sabe insertar datos" (observa el comportamiento especifico de las clases Proveedor y Persona). Es decir, si conoces que algun objeto 'sabe hacer algo' puedes hacer que otras clases futuras, empleen ese comportamiento sin necesidad tener que hacerlo desde cero.