Ver Mensaje Individual
  #1 (permalink)  
Antiguo 02/07/2011, 05:32
Avatar de OsSk4R
OsSk4R
 
Fecha de Ingreso: octubre-2006
Ubicación: $this->home
Mensajes: 824
Antigüedad: 17 años, 6 meses
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