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

ke es y para ke sirve una interfaz

Estas en el tema de ke es y para ke sirve una interfaz en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Bueno estuve revisando unos post publicados abajo, y tocaron el tema de interfazes concepto ke no se para ke sirve agradecere alguien me de una ...
  #1 (permalink)  
Antiguo 04/07/2006, 08:43
 
Fecha de Ingreso: octubre-2005
Mensajes: 85
Antigüedad: 18 años, 6 meses
Puntos: 0
ke es y para ke sirve una interfaz

Bueno estuve revisando unos post publicados abajo, y tocaron el tema de interfazes concepto ke no se para ke sirve agradecere alguien me de una orientacion en este tema.
  #2 (permalink)  
Antiguo 04/07/2006, 08:48
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Una interfaz (en POO), define que metodos o propiedades una clase debe de tener, o sea la intefaz en si, no hace nada por si sola, cuando uno crea una clase y implementa una interfaz, nescesita declarar los metodos y propiedades que la interfaz tiene definidas o un error es lanzado por ejemplo:
Código PHP:
interface jugadores_interface {
       public function 
salta();
       public function 
camina();
       public function 
corre();

Luego la implementamos:

Código PHP:
class jugador1 implements jugadores_interface {
      public function 
salta() {
          
// algo de codigo para saltar
      
}
      public function 
camina() {
          
// algo de codigo para caminar
      
}
      public function 
corre() {
          
// algo de codigo para correr
      
}

Espero te sirva para entenderlo :)
  #3 (permalink)  
Antiguo 04/07/2006, 16:42
 
Fecha de Ingreso: octubre-2005
Mensajes: 85
Antigüedad: 18 años, 6 meses
Puntos: 0
Bueno haver, lo ke dices es ke una interfaz sirve para declarar metodos y propiedades ke debe de tener una klase, en el kaso ke la klase no tenga un metodo ke esta declarado en la interfaz botaria error cierto?, bueno eso es lo ke entendi, pero para ke me sirve , lo uniko ke gano es forzar a ke la klase declare ciertos metodos y/o atributos no le veo hasta aki una utilidad a las interfazes
  #4 (permalink)  
Antiguo 04/07/2006, 17:00
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Puedes definir tus propios metodos en la clase que implementa la interfaz. o sea en el ejemplo anterior puedes ponere un metodo vuela y no habria error.

En cuanto a la "utilidad" es mas que nada para poder reutilizar codigo por decir un Iterator, es una clase para poder movernos por una coleccion de datos, tu puedes crear tus clases implementando un Iterator y utilizarlos de forma correcta.
  #5 (permalink)  
Antiguo 04/07/2006, 17:03
foo
 
Fecha de Ingreso: febrero-2006
Mensajes: 278
Antigüedad: 18 años, 2 meses
Puntos: 0
Antes que nada, deberías arreglar tu teclado ya que la mayoría de las veces cambia la "k" por la "c".

Consigue algún libro o documento sobre programación orientada a objetos, de seguro te servirá para más adelante...
  #6 (permalink)  
Antiguo 05/07/2006, 21:53
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 18 años, 11 meses
Puntos: 32
La interfaz es un "contrato de implementación" entre clases, donde a diferencia de la herencia que "agrupa" clases por "lo que son", "agrupa" las clases por lo "que hacen".

Por ejemplo, en la herencia tu puedes tener una clase "padre" que se llama "Persona" y existirán clases "hijos" (por ej. Cliente, Vendedor, etc) que heredarán sus características (por eso la palabra "herencia"), manteniéndose una "relación de parentesco" ("Perro" no puede ser "hijo" de "Persona").

Nota al margen: En inglés es "interface", pero todavía no me saqué la duda si existe castellanización y si se puede decir "interfases". Hasta donde sé, solo existe "interfaz", pero si alguien lo tiene resuelto, que me avise

Para el caso de las "interfases" tu "agrupas" clases que "hacen lo mismo", y no tienen por qué mantener una relación de parentesco.

Por ejemplo, tu puedes tener una interfaz (que es similar a hacer una clase abstracta, pues solo se define "firmas" de métodos y no implementación) que se llame "ElementoPelable" y con un método "pelar". Las clases implementarán la interfaz, lo que les obliga a implementar en cada clase el método "pelar".

Y puedes "agrupar" clases que "hagan lo mismo", por ejemplo: Manzana, Pera, Banana y Multiprocesadora (un electrodoméstico que tiene la capacidad de pelar frutas).

Queda claro que entre las frutas no hay una relación directa y necesaria de parentesco (aunque podrían descender de una clase "Fruta"), pero donde rompe el esquema es la "Multiprocesadora", que es imposible desde el punto de vista de la herencia asociarla con una "Fruta".

Y bueno, ahora, la pregunta natural "y para que sirve esto?"

Para hacer polimorfismo: el patrón estratégico más importante de la POO.

Brevemente, tu puedes hacer polimorfismo apoyándote en la herencia, donde una función podrá recibir cualquier cosa que sea de tipo "Persona" (ej. pagarSueldos), pero si haces polimorfismo apoyándote en la interfaz, podrás crear una función que "pele" cualquier cosa que pueda implementar la interfaz "Pelable".

Es un concepto más abierto que hacer polimorfismo de herencia.

Se entendió? explique
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #7 (permalink)  
Antiguo 14/07/2006, 09:00
Avatar de enzoscuro  
Fecha de Ingreso: mayo-2004
Ubicación: hcda el carmen pan de azu
Mensajes: 51
Antigüedad: 19 años, 11 meses
Puntos: 0
Muy wena

Me parece muy didactica esta emplicacion, la verdad es tambien me parecen de poca ayuda la interfaces, mi aporte es que se utilizan en java para suplantar la maravillosa herencia multiple que implementaba C++ y que java elimino, luego los lenguajes que aparecieron posteriormente creyeron que esto estaba bien, los javajolicos, "no hay herencia multiple, pero tenemos interfaces", si pero el trabajo hay que hacerlo a mano..

un saludo

muy buena la explicacion
__________________
El viento sopla en el oeste...
  #8 (permalink)  
Antiguo 14/07/2006, 13:07
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 18 años, 11 meses
Puntos: 32
Nooo... otra vez se abre una escotilla en el piso que nos lleva al abismo!!!

Hubo una discusión "Megamétrica" sobre el tema de la herencia múltiple en PHP5 (que te recomiendo leer toda la discusión, y el resumen final, hecho por otra persona que sabiamente observó todo y pudo hacer un resumen en pocas palabras, cosa que hasta ahora no he podido con tan singular éxito ).

Las interfaces son para eso, para permitir polimorfismo de "cosas" que se comportan "similares" pero no necesariamente están "emparentadas".

Se puede sacar varias definiciones de distintos puntos de vista, pero lo importante es entender que no es por lo que tu dices (Herencia múltiple) y que la tendencia evolutiva (que ya es vieja) es desarrollar no "orientado a la implementación" (lo concreto, el código, lo que hacemos todos los días), pero si "orientado a la interfaz", lo cual es todo un tema de "desacoplar" tus desarrollos.

El clásico efecto de cambiar algo, y tener que tocar en todos lados. Si está todo desacoplado este efecto se reduce ostensiblemente, disminuyendo notoriamente el "costo de mantenimiento" (que es donde pasamos el 90% de nuestra vida útil como desarrolladores/programadores).

¿Quieres pasar toda tu vida manteniendo sistemas viejos? ¿o quieres poder avanzar, innovar, investigar, poder cambiar y adaptarte más rápidamente?

¿Por qué crees que estamos en la Era de los Frameworks? ¿Por qué la princesa del momento está siendo Ruby On Rails?

Piensa, piensa...
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #9 (permalink)  
Antiguo 14/07/2006, 13:23
Avatar de enzoscuro  
Fecha de Ingreso: mayo-2004
Ubicación: hcda el carmen pan de azu
Mensajes: 51
Antigüedad: 19 años, 11 meses
Puntos: 0
En el Contexto

Enrique, veo que estamos estamos hablando en contextos diferentes, yo estoy hablando de un escenario anterior 1996-1997, no el escenario actual...

lee bien y como tu dices piensa piensa

no te sulfures un saludo
__________________
El viento sopla en el oeste...
  #10 (permalink)  
Antiguo 14/07/2006, 13:32
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 18 años, 11 meses
Puntos: 32
Releo y no veo donde dices cual es el contexto, aunque igual no es lo que importa verdaderamente. Solo estaba haciendo referencias a lecturas "didácticas" de temas ya discutidos, como la "herencia múltiple" (con 52 aportes).

Y lo de "piensa, piensa" no lo dije de forma despectiva ni dando a entender que fueras "tonto" .... solo que al final puse preguntas, y te estaba presionando para que dieras una respuesta y yo ver si llegabas a la misma conclusión

Que no confunda "las negritas", no estoy "sulfurado".
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #11 (permalink)  
Antiguo 14/07/2006, 18:32
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
Cita:
Iniciado por enriqueplace
Nota al margen: En inglés es "interface", pero todavía no me saqué la duda si existe castellanización y si se puede decir "interfases". Hasta donde sé, solo existe "interfaz", pero si alguien lo tiene resuelto, que me avise
De todos modos, la traducción de "interface" es "interfaz" (no interfase... que seguramente provendría de "interphase"). En español jamás se podría alterar una palabra que utiliza "z" reemplazándola por "s" ni viceversa... son como el agua y el aceite. Lo correcto es reemplazar la "z" por "c".

Pongo ejemplos (donde no sólo pluralizamos):
VeraZ --> VeraCidad
PeZ ---> PeCes
LuZ ---> LuCes
CoSa ---> CoSita
TaZa ---> TaCita

Por lo que el plural de "interfaz" es sí o sí "interfaces". El idioma español no permite pasar de interfaz a interfases.

PD: Perdón por el off-topic, pero ya que enriqueplace planteó su duda no quise quedarme sin responder.
  #12 (permalink)  
Antiguo 24/07/2006, 12:32
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 18 años, 11 meses
Puntos: 32
Fabulosa tu respuesta y ahora que la leo y razono lo que dices, me doy cuenta que era casi obvia la respuesta.

El tema es que uno lee tantas veces "interfases" en textos en castellano (y he visto cometer el error en personas de "nivel alto"), y ante la duda he buscado en la web de la RAE, encontrando solo la palabra "interfaz" (ni "interfaces" ni "interfases").

Pensé que en muchos casos era más válido "interfaces" por su uso "inglés" ("interface"), pero ahora que lo dices, hay reglas del castellano que no se pueden romper.

Duda aclarada definitivamente, gracias.
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #13 (permalink)  
Antiguo 24/07/2006, 12:40
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 18 años, 11 meses
Puntos: 32
Perdón, ahora encontré esta entrada en el "DICCIONARIO PANHISPÁNICO DE DUDAS":

"interfaz. La voz inglesa interface, que significa, en informática, ‘conexión física y funcional entre dos aparatos o sistemas independientes’, se ha adaptado al español en la forma interfaz: «Su interfaz gráfica y capacidades de acceso a Internet facilitarán aún más el uso del PC» (Vanguardia [Esp.] 30.8.95). Su plural es interfaces (→ plural, 1g). Aunque no es infrecuente su uso en masculino, debe emplearse en femenino, ya que esta palabra incluye en su forma el sustantivo femenino faz. Con este sentido, no debe usarse la forma Marca de incorrección.interfase, que no responde ni a la pronunciación ni a la estructura semántica del étimo inglés, que se ha formado con el sustantivo face, cuyo equivalente español es faz, no fase. Tampoco se aconseja usar con este significado el término Marca de incorrección.interficie."
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #14 (permalink)  
Antiguo 26/07/2006, 09:51
 
Fecha de Ingreso: octubre-2005
Mensajes: 85
Antigüedad: 18 años, 6 meses
Puntos: 0
duda

Bueno estuve leyendo sobre un ejemplo colocado en desarrolloweb sobre interfaces y la verdad, tengo una gran duda, ahi ellos implementan una interfaz encendible, con 2 metodos ke son encender y apagar, entonces crean 2 clases que implementan esta interfaz(bombilla y coche) que tienes estos 2 metodos declarados en la interfaz con su respectivo codigo en cada clase,bueno de ahi crean una funcion llamada enciende_algo, al cual se le pasa un objeto y de acuerdo al objeto llama al metodo de su clase(bombilla o coche) al que pertence, entonces hasta ahi todo bien, el problema viene aki kuando se crea una tercera clase(llamada cd) pero que no implementa esta interfaz, entonces cuando se llama a la funcion enciende_algo y le paso el objeto que instancia a esta tercera clase, provoca un error pero no el que la pagina de desarrolloweb mencionan que es este
Fatal error: Argument 1 must implement interface encendible in c:\www\ejphp5\funcion_encender.php
- Solo me sale un error de que el metodo no esta implementado.

Ahora mi gran duda es esta, cual es la gran diferencia o que es lo que pasa si en vez de hacer ke mis 2 clases ke implementan esta interfaz (bombilla y coche) y a la vez se declara los respectivos metodos solo implemente los 2 metodos cada uno dentro de su clase sin implementar la interfaz. El proceso es el mismo, pero me pregunto para que entonces implemento esta interfaz?
Seria mejor que vean el ejemplito jejejeje....
  #15 (permalink)  
Antiguo 26/07/2006, 11:02
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Si estas siguiendo el ejemplo paso a paso, te deberia de dar ese error que describen, porque?, porque a la funcion encender, le estas diciendo que el parametro que espera es del tipo encendible, o de una clase que implemente encendible (por eso es encendible $objeto ).

Ahora este es un ejemplo muy sencillo, y si puedes cada clase crearle su metodo, pero si quieres re-utilizar codigo y mas importante trabajar en un ambiente multi-desarrollo (donde varios programadores crean diferentes clases) no te puedes poner a revisar el trabajo de todos, asi con una interface, tu sabes que el metodo u objeto que te envien, va a tener un metodo encender, o conectar, o borrar, etc.

Asi ya TU parte del codigo no falla, y solo te dedicas a hacer tus tareas.
  #16 (permalink)  
Antiguo 27/07/2006, 09:09
 
Fecha de Ingreso: octubre-2005
Mensajes: 85
Antigüedad: 18 años, 6 meses
Puntos: 0
De veras tienes razon, recien me percate que el tipo de parametro tiene que ser una clase extendida de la interfaz, muchas gracias, Dime sabes donde puedo encontrar un ejemplo mas komplejo sobre interfaces, como para ver como se re-utiliza codigo y lo mas importante trabajar en un ambiente multi-desarrollo,asi pueda experimentar esto ya ke eskucho mucho pero no he tenido la oportunidad de hacerlo, agredecere muchisimo me puedan ayudar en esto
  #17 (permalink)  
Antiguo 27/07/2006, 09:48
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Puedes leer sobre los Iterators, o Itireradores en Ingles, son como las clasicas "loops" pero aceptan cualquier dato, y usan la interface Iterator para que puedas ciclar por los datos mas facil.

Un ejemplo rapido seria esto:

Código PHP:
class alumnos implements Iterator {
    
// aqui va todo tu codigo
}

// Luego "ciclamos la clase"
while( $alumno $alumnos->next() ) {
   
// Hacer algo con $alumno

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.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 15:56.