Ver Mensaje Individual
  #1 (permalink)  
Antiguo 20/02/2009, 19:36
Avatar de argy
argy
 
Fecha de Ingreso: octubre-2007
Ubicación: Longitud 75º Latitud 18º Sur
Mensajes: 614
Antigüedad: 16 años, 6 meses
Puntos: 18
Problema con Interface

Hola, revisando viejos mis viejos archivos deJAVA(que seguí de manera autodidacta) encontré un diagrama de clases(que por cierto es básico), cuando implementé en java no tuve ningún problema, así que ahora tengo la curiosidad de implementarlo en php5 , la descripción es la siguiente:
• La interfaz Parlanchin tiene el operador habla();
• La clase abstracta Animal implementa la operación habla() de la interfaz.
• La clase perro y gato heredan de la clase animal, implementando cada uno la operación habla() a su manera.
• La clase Reloj es abstracta.
• la clase Cucu implementa la interfaz Parlanchin y hereda de la clase Reloj.
(disculpen pero no me es posible adjuntar el diagrama)

La generación de códigos para php5 por ArgoUML es la siguiente (he recortado algunos códigos y documentación generados, que no tienen tanta relevancia para este post).
interface.Parlanchin.php
<?php
interface Parlanchin
{
public function habla();
}
?>
class.Animal.php
<?php
require_once('interface.Parlanchin.php');
abstract class Animal implements Parlanchin
{
public function habla()
{ }
}
?>
class.Gato.php
<?php
require_once('class.Animal.php');
class Gato extends Animal
{
public function habla()
{
return "Miau";
}
}
?>
class.Perro.php
<?php
require_once('class.Animal.php');
class Perro extends Animal
{
public function habla()
{
return "Guau";
}
}
?>
class.Reloj.php
<?php
abstract class Reloj
{
}
?>
class.Cucu.php
<?php
require_once('class.Reloj.php');
require_once('interface.Parlanchin.php');
class Cucu extends Reloj implements Parlanchin
{
public function habla()
{
return "Cucú cucú …";
}
}
?>
Y la clase aplicativo es esta.
class.Aplicativo.php
<?php
require_once('interface.Parlanchin.php');
require_once('class.Gato.php');
require_once('class.Cucu.php');
class Aplicativo
{
public static function hazleHablar( Parlanchin $sujeto)
{
$sujeto.habla();
}
public static function main()
{
self::hazleHablar(new Gato());
self::hazleHablar(new Cucu());
}
}
$instanciar= Aplicativo::main();
echo $instanciar;
?>
El detalle es en ésta última ya que me dice que la función habla no está definido( esto es en la función hazleHablar() de la última clase).
Fatal error: Call to undefined function habla()

La otra consulta es ¿es necesario que mi última clase(class.Aplicativo.php) esté en el diagrama de clases? Si fuera así ¿Qué tipo de relación habría con las otras clases?, ya que en Java no era necesario.
__________________
Software libre para un mundo libre.

Eventualmente en el foro.