Foros del Web » Programando para Internet » PHP »

[POO] interfaces

Estas en el tema de [POO] interfaces en el foro de PHP en Foros del Web. Hola que tal, estoy aprendiendo POO y estoy por la parte de interfaces. El tema es que entiendo la teoria creo pero me cuesta bastante ...
  #1 (permalink)  
Antiguo 07/08/2013, 19:25
 
Fecha de Ingreso: enero-2013
Mensajes: 32
Antigüedad: 11 años, 9 meses
Puntos: 0
[POO] interfaces

Hola que tal, estoy aprendiendo POO y estoy por la parte de interfaces. El tema es que entiendo la teoria creo pero me cuesta bastante llevarlo a la practica y adaptarlo a algun sistema mio.

Por ejemplo estoy programando un carrito de compras y me pregunto a mi mismo donde debo usar interfaces y realmente ahi no se que responder, vuelvo a la teoria y lo "entiendo"... (entre comillas lo pongo por q parece que no, si no me sale en la practica :P).

Si alguno me pudiera orientar aunque sea con el ejemplo que puse. Un carrito simple de compras SIMPLE, de que manera deberia aplicar interface?

Slds.
  #2 (permalink)  
Antiguo 07/08/2013, 19:36
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 6 meses
Puntos: 292
Respuesta: [POO] interfaces

Pues en la Interfaz defines aquellas "operaciones" basicas que crees siempre deben estar presentes, eso te ayudara a poder utilizar el carrito por otros componentes aun antes de haberlo programado pues sabras que necesitas de él.


Eso te permite que otros programadores puedan basarse en tu diseño pues sabran con certeza que es lo necesitan para hacer uso de ese componente.
__________________
Salu2!
  #3 (permalink)  
Antiguo 07/08/2013, 19:43
 
Fecha de Ingreso: enero-2013
Mensajes: 32
Antigüedad: 11 años, 9 meses
Puntos: 0
Respuesta: [POO] interfaces

Cita:
Iniciado por Italico76 Ver Mensaje
Pues en la Interfaz defines aquellas "operaciones" basicas que crees siempre deben estar presentes, eso te ayudara a poder utilizar el carrito por otros componentes aun antes de haberlo programado pues sabras que necesitas de él.


Eso te permite que otros programadores puedan basarse en tu diseño pues sabran con certeza que es lo necesitan para hacer uso de ese componente.
Por ejemplo, entonces en el caso del carrito de compras, un metodo seria addProducto(Producto $producto)?

Otra pregunta. En general, la mayoria de las clases estan "respaldadas" por una interface? Hablo de las clases que realizan las operaciones mas destacadas de un sistema (por ejemplo un sistema de envios, realizaria una interface que se implemente en la clase Envio)...

Esta bien esto ultimo?
  #4 (permalink)  
Antiguo 07/08/2013, 19:58
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 6 meses
Puntos: 292
Respuesta: [POO] interfaces

Es correcto...... idealmente asi seria: primero las interfaces

Algunas operaciones del carrito:

add(producto $prod)
remove(producto $prod)
save_for_later(producto $prod)
checkout()
__________________
Salu2!
  #5 (permalink)  
Antiguo 07/08/2013, 20:01
 
Fecha de Ingreso: enero-2013
Mensajes: 32
Antigüedad: 11 años, 9 meses
Puntos: 0
Respuesta: [POO] interfaces

buenisimo, gracias.

de todos modos no entiendo como de esta manera se ayuda a re-utilizar codigo. Lo unico que define es como lo indican los manuales, "un contrato de implementacion" para ser utilizado.

Pero donde ayuda a que se pueda re-usar codigo?
  #6 (permalink)  
Antiguo 07/08/2013, 20:08
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 2 meses
Puntos: 2237
Respuesta: [POO] interfaces

Como aprendiz de POO, "endiendo" que el uso de interfaces o de clases abstractas facilita la creación de clases/objetos con una estructura similar, por ejemplo:

Vas a crear módulos de productos, categorías, clientes, etc. y deseas que todos tengan determinadas propiedades y/o métodos:
Código PHP:
Ver original
  1. interface interfazControlador {
  2.       public function config($parametros);
  3.       public function getVar($name);
  4.       public function setVar($name, $value);
  5. }

En tus clases necesariamente debes implementar todos los métodos de la interface o se generará un error fatal.

Código PHP:
Ver original
  1. class productos implements interfazControlador {
  2.        private $_vars = array();
  3.        public function __construct() {
  4.             /* Aquí inicializas la clase /*
  5.        }
  6.        public function config($parametros) {
  7.             /* Estableces alguna configuración de la clase */
  8.             foreach($parametros as $name => $value) {
  9.                   $this->setVar($name, $value);
  10.             }
  11.        }
  12.        public function getVar($name) {
  13.             return (isset($this->_vars[$name])) ? $this->_vars[$name] : null;
  14.        }
  15.        public function setVar($name, $value) {
  16.             $this->_vars[$name] = $value;
  17.        }
  18. }

La diferencia entre una interfaz y una clase abstracta es que en esta última puedes declarar métodos que contengan lógica, ejemplo:

Código PHP:
Ver original
  1. abstract class abstractControlador {
  2.        private $_vars = array();
  3.        public function __construct();
  4.        public function config($parametros) {
  5.             /* Estableces alguna configuración de la clase */
  6.             foreach($parametros as $name => $value) {
  7.                   $this->setVar($name, $value);
  8.             }
  9.        }
  10.        public final function getVar($name) {
  11.             return (isset($this->_vars[$name])) ? $this->_vars[$name] : null;
  12.        }
  13.        public final function setVar($name, $value) {
  14.             $this->_vars[$name] = $value;
  15.        }
  16. }

Con eso, tu clase quedaría más o menos así:
Código PHP:
Ver original
  1. class productos extends abstractControlador {
  2.        public function __construct() {
  3.             /* Aquí inicializas la clase */
  4.        }
  5.        // getVar() y setVar() no puedes declararlos nuevamente
  6.        // porque son finales en la clase abstracta
  7.        // Pero, a pesar de que config() ya tiene código
  8.        // al no ser final sí puedes "sobreescribirla"
  9.        public function config($parametros) {
  10.              /** Aquí el código necesario */
  11.        }
  12. }

De hecho, puedes combinar interfaces y clases abstractas sin problema.
__________________
- León, Guanajuato
- GV-Foto
  #7 (permalink)  
Antiguo 07/08/2013, 20:52
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 6 meses
Puntos: 292
Respuesta: [POO] interfaces

En general.....

Primero defines las interfaces (no hay codigo que re-utilizar) ...
Luego podrias tener una clase abstracta que la implemte
Despues las concretas
__________________
Salu2!
  #8 (permalink)  
Antiguo 08/08/2013, 00:45
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 11 años, 4 meses
Puntos: 379
Respuesta: [POO] interfaces

Cita:
Iniciado por Shirag Ver Mensaje
Hola que tal, estoy aprendiendo POO y estoy por la parte de interfaces. El tema es que entiendo la teoria creo pero me cuesta bastante llevarlo a la practica y adaptarlo a algun sistema mio.
Para complementar lo expuesto por Italico76 y Triby te dejo una lectura que puede aclarar el concepto y por que se usa: http://www.fatagnus.com/program-to-a...mplementation/
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.

Etiquetas: interfaces
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 01:06.