Basándome en tu implementación, no en la que yo haría:
- Sobre la clase "Jugador":
Todo jugador tiene un "rol" (de qué juega).Estos "roles" tienen que estar definidos en algún sitio.Para mí, un buen sitio es la propia clase "Jugador":
Código PHP:
Ver originalclass Jugador{
const ROLE_BASE=1;
const ROLE_ALERO=2;
const ROLE_PIVOT=3;
protected $nombre;
protected $estatura;
protected $role;
function __construct( $nombre, $estatura, $role )
{
$this->role=$role;
.....
}
function is($role)
{
return $this->role == $role;
}
El método "isAlero" que hay en las distintas clases, desaparece.Cada jugador debe saber de qué juega.Por lo tanto, los métodos relacionados con la posición, están en la clase jugador, no en las derivadas.
Código PHP:
Ver original$isAlero=$jugador->is(Jugador::ROLE_ALERO);
Cualquier jugador puede tener "Puntos","Asistencias" o "Rebotes", independientemente de su rol .Por lo tanto, el método de estar en la clase "Jugador", no en sus derivadas:
Código PHP:
Ver originalvar $puntos:
var $rebotes;
var $asistencias;
function setStats($puntos, $rebotes, $asistencias)
{
$this->puntos=$puntos;
$this->rebotes=$rebotes;
$this->asistencias=$asistencias;
}
( Que sea un método aparte significa que se crea un problema: este método debe ser llamado antes de realizar operaciones sobre el jugador.Esto es debido al muy muy pobre ejercicio que se ha planteado...)
Por lo tanto, dado cómo se ha planteado el ejercicio, qué es lo único que es propio de cada clase derivada de jugador? Su rol:
Código PHP:
Ver originalclass Alero extends Jugador
{
function __construct($nombre, $estatura)
{
parent::__construct($nombre,$estatura,Jugador::ROLE_ALERO);
}
}
Y así, todos los tipos de jugador.
La clase Equipo no tiene complejidad en lo que se refiere a OOP.
OOP consiste en asignar responsabilidades.Saber qué clase tiene sentido que tenga una responsabilidad.Lo importante no es el código, sino ver cosas como que, si todo Jugador tiene una función en el equipo, qué función es esa, lo debe saber la clase Jugador.Si todo jugador puede hacer puntos, rebotes o asistencias, esto significa que son métodos de la clase Jugador.
Por otro lado, si esto es un examen, de OOP, realmente es desastroso como ejercicio.El planteamiento es
muy malo en lo que respecta a
OOP. Un jugador
no tiene asistencias, ni puntos, ni rebotes.Un
Equipo no tiene "puntos medios de los aleros".Un
Equipo no tiene 5 integrantes.
Un
Equipo tiene una
Plantilla de
Jugadores, los cuales juegan
Partidos, los cuales tienen su propia
PlantillaPartido (jugadores existentes en la plantilla, cuando se jugó ese partido),donde se producen unas
EstadisticasEquipoPartido, que contienen unas
EstadisticasJugadorPartido.
Los puntos los hace un Jugador, en un cierto partido (o competición, o...).No es algo propio del jugador.Por lo tanto, tampoco la media de puntos es una propiedad de "Equipo".
Seguramente el modelo es más complejo, pero creo que lo anterior es una aproximación que describe lo que quiero decir.
Supongo que el ejercicio se ha sobre-simplificado para el examen.Pero, el resultado es que se pide una solución que
viola los principios de la OOP, para evaluar OOP. Esto no va de cómo es la sintaxis de "class", o "private" o "protected".Esto va de saber que un Equipo, no tiene "PuntosMedios".