| |||
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. |
| |||
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 |
| ||||
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. |
| |||
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... |
| ||||
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 |
| ||||
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... |
| ||||
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... |
| ||||
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... |
| ||||
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". |
| ||||
Cita: 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".
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 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. |
| ||||
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. |
| ||||
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." |
| |||
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.... |
| ||||
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. |
| |||
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 |
| ||||
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: |