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

Interface y clases abstractas

Estas en el tema de Interface y clases abstractas en el foro de Frameworks y PHP orientado a objetos en Foros del Web. He estado leyendo sobre lo que son las interface y las clases abstractas y en principio lo entiendo bien (o eso creo :P ) pero, ...
  #1 (permalink)  
Antiguo 02/07/2011, 05:32
Avatar de OsSk4R  
Fecha de Ingreso: octubre-2006
Ubicación: $this->home
Mensajes: 824
Antigüedad: 18 años, 1 mes
Puntos: 74
Interface y clases abstractas

He estado leyendo sobre lo que son las interface y las clases abstractas y en principio lo entiendo bien (o eso creo :P ) pero, me ha surgido una duda y es que no se cual es la verdadera diferencia entre una y otra.

Cuando se define una interfaz, se declara una serie de métodos pero sin desarrollar, o sea, sin especificar ningun codigo...

Código PHP:
Ver original
  1. interface Web {
  2.        public function getTitulo();
  3. }


Luego, las clases que implementan esa interface seran las encargadas de proporcionar un codigo a los metodos que contiene esa interface.

Código PHP:
Ver original
  1. class pagina_Web implements Web
  2. {
  3.     public function getTitulo()
  4.     {
  5.         return $this->titulo;
  6.     }
  7. }

Conclusion: Una interface no permite crear el cuerpo de ninguna funcion, dejando esta tarea a las clases que la implementan.

Hasta aquí, todo entendible, la duda empieza en la utilizacion de una clase abstracta.

Las clases abstractas permiten definir funciones completas que pueden heredarse.
O sea, que en vez de usar el ejemplo anterior, podria a ver hecho directamente así:

Código PHP:
Ver original
  1. abstract class Web
  2. {
  3.      public function getTitulo()
  4.     {
  5.         return $this->titulo;
  6.     }
  7.     abstract public function otra_cosa();
  8. }

En primer lugar os pregunto:
1 - ¿Es correcto mi conocimiento de inteface y clases abstractas? o por el contrario ¿entendí mal el concepto?

2 - ¿Cuando utilizo uno y cuando utilizo el otro?

En fin, son muchos conceptos que acabo de aprender y tengo que ir asimiliando

Saludos, muchas gracias
  #2 (permalink)  
Antiguo 02/07/2011, 06:19
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 16 años, 3 meses
Puntos: 1532
Respuesta: Interface y clases abstractas

la diferencia es simple, las clases abstractas si te permiten definir código, las interfaces solo te permiten definir la interfaz de acceso o los miembros para que objetos diferentes se comporten igual, como ArrayAccess que te permite usar cualquier objeto como si se tratase de un array, sin que este herede de array directamente

además las clases abstractas no puedes instanciarlas directamente, por ejemplo en symfony existe sfPager que define la estructura de un paginador por defecto, pero no podemos usarlo porque nuestro proyecto puede depender del ORM Propel o Doctrine, en la cual usamos sfDoctrinePager o sfPropelPager respectivamente que heredan de la clase abstracta.
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #3 (permalink)  
Antiguo 02/07/2011, 16:35
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 7 meses
Puntos: 292
Respuesta: Interface y clases abstractas

Cita:
Las clases abstractas permiten definir funciones completas que pueden heredarse.
DEBEN heredarse. No podes instanciar......por ende, el unico camino es la herencia!
__________________
Salu2!
  #4 (permalink)  
Antiguo 04/07/2011, 10:25
Avatar de _ssx  
Fecha de Ingreso: mayo-2003
Ubicación: mX
Mensajes: 683
Antigüedad: 21 años, 6 meses
Puntos: 60
Respuesta: Interface y clases abstractas

Cuando las dejes de ver como funciones, te daras cuenta que el poder de la interfaz es puramente como lo dice su nombre "ser una interfaz" o llamado contrato de implementación..

Si no miras la ventaja que tienes a nivel polimorfismo NO estas viendo NADA, la clase abstracta es un concepto más de herencia, la interface es de usar un comportamiento especifico y asegurar que TODOs los objetos que usen esa interface cumplan un contrato y puedas olvidarte de que tipo de objeto es.
__________________
Escribe tu código de forma que refleje, y saque a relucir,lo mejor de tu carácter personal
www.oscararzola.com/blog
Principios de un programador
  #5 (permalink)  
Antiguo 05/07/2011, 09:12
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: Interface y clases abstractas

También ver que las interfaces son una parte clave, cuando estas programando en POO, y quieres hacer Dependency Inyection, que es una de las mejores formas de diseñar tus sistemas, ya que estas desacoplando cada objeto de tu sistema y dejando que la interfaz sea el contrato bajo que las clases trabajan.

Etiquetas: clases, interface
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 16:27.