Foros del Web » Programando para Internet » PHP »

Duda sobre herencia en clase abstracta

Estas en el tema de Duda sobre herencia en clase abstracta en el foro de PHP en Foros del Web. holas estuve destripando un cms y me tope con una clase abstracta y me surgio una duda, busque en google y encontre un ejemplo similar ...
  #1 (permalink)  
Antiguo 25/09/2010, 23:59
 
Fecha de Ingreso: septiembre-2009
Mensajes: 54
Antigüedad: 15 años, 3 meses
Puntos: 0
Duda sobre herencia en clase abstracta

holas estuve destripando un cms y me tope con una clase abstracta y me surgio una duda, busque en google y encontre un ejemplo similar al que genero mi duda y es como este ejemplo

Aqui hay una clase abstracta y lo demas se entiende (la funcionalidad de los metodos es lo que menos importa)

Código PHP:
abstract class Vehiculo
{
  public 
$potencia;
  public 
$peso;

  function 
__construct($potencia,$peso)
  {
    
$this->potencia $potencia;
    
$this->peso $peso;

    return 
true;

  }

  function 
relacionPesoPotencia()
  {
    if (
$this->potencia>0)
    {
      return (
$this->peso/$this->potencia);
    }

    return -
1//aqui una duda extra, por que "-1" y no "0" ??.. no es lo mismo?
  
}

  abstract function 
aceleracionAproximada();


Y aqui otra clase que hereda de la clase abstracta

Código PHP:
class Moto extends Vehiculo
{

  function 
__construct($potencia,$peso)
  {
    
$this->potencia $potencia;
    
$this->peso $peso;

    return 
true;
  }

  function 
aceleracionAproximada()
  {
     
$coeficienteTransmision 3.0;

     
$t $this->peso 771.73 / (2.0 $this->potencia 735);
     
$t $t $coeficienteTransmision;
     return 
$t;
  }

Bueno como dije arriba la funcionalidad de los metodos es lo de menos, pero mi duda aqui es:
¿Porque la clase Moto hace un "$this->potencia" y "$this->peso" si nunca inicio ese atributo??.. osea nunca hizo un

public $potencia;
public $peso;

Entonces pense , debe ser un atributo que heredo de la clase abstracta "Vehiculo" .. entonces si es asi por que no usa

parent::$potencia
parent::$peso

esa duda me tiene confundido.. alguien podria explicarme?? esto es lo que veo en las clases de un cms que estoy analizando..
y aprovechando la oportunidad.. siempre veo que hacen un return -1 no seria lo mismo y mejor hacer return 0 ??

PD: ese ejemplo lo saque de aqui http://www.epsilon-eridani.com/cubic/ap/cubic.php/pag/PHP5---Clases-abstractas-72.html

Última edición por Enfermin; 26/09/2010 a las 00:02 Razón: :P
  #2 (permalink)  
Antiguo 26/09/2010, 00:41
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Duda sobre herencia en clase abstracta

Eso es porque en la herencia los atributos públicos y protegidos (public / protected) son heredados automáticamente, los atributos privados no son heredados, y el usar parent:: es por si en la clase hija sobreescribes el atributo y quieres leer el atributo de la clase padre.

Saludos.

PD. Los atributos y métodos públicos y protegidos son los heradados.
  #3 (permalink)  
Antiguo 26/09/2010, 06:42
 
Fecha de Ingreso: septiembre-2009
Mensajes: 54
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: Duda sobre herencia en clase abstracta

Cita:
Iniciado por GatorV Ver Mensaje
Eso es porque en la herencia los atributos públicos y protegidos (public / protected) son heredados automáticamente, los atributos privados no son heredados, y el usar parent:: es por si en la clase hija sobreescribes el atributo y quieres leer el atributo de la clase padre.

Saludos.

PD. Los atributos y métodos públicos y protegidos son los heradados.
"Son heredados automaticamernte" ahora si entiendo ese detalle no lo habia leido en ningun concepto de clases abstractas, a veces a los libros les falta explicar cositas como esas pero fundamentales pero ahora ya me quedo todo claro, muchas gracias y ya pueden cerrar el tema

Saludos.
  #4 (permalink)  
Antiguo 26/09/2010, 09:23
Avatar de _ssx  
Fecha de Ingreso: mayo-2003
Ubicación: mX
Mensajes: 683
Antigüedad: 21 años, 7 meses
Puntos: 60
Respuesta: Duda sobre herencia en clase abstracta

Con respecto a

Código PHP:
return -
La razón es meramente matematica ya que la división que hace en la operación puede resultar en un 0 entonces en la operación como esta permitido obtener 0 como resultado o algun otro numero el resultado negativo o "falso" debe de ser menor a 0
__________________
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 26/09/2010, 11:59
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Duda sobre herencia en clase abstracta

Solo mencionar que no solo es en las clases abstractas, también en cualquier clase, el único detalle es en una clase, método o atributo que este definido como final. Este no te permitirá cambiarlo en las clases que heredes.

Saludos.
  #6 (permalink)  
Antiguo 27/09/2010, 08:27
 
Fecha de Ingreso: septiembre-2009
Mensajes: 54
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: Duda sobre herencia en clase abstracta

Cita:
Iniciado por _ssx Ver Mensaje
Con respecto a

Código PHP:
return -
La razón es meramente matematica ya que la división que hace en la operación puede resultar en un 0 entonces en la operación como esta permitido obtener 0 como resultado o algun otro numero el resultado negativo o "falso" debe de ser menor a 0
Ah bueno jeje esa idea no se me paso por la cabeza, debe ser porque siempre odie la matematica.. yo creia que -1 equivalia a 0 pero ya aclaraste esa duda

Cita:
Iniciado por GatorV Ver Mensaje
Solo mencionar que no solo es en las clases abstractas, también en cualquier clase, el único detalle es en una clase, método o atributo que este definido como final. Este no te permitirá cambiarlo en las clases que heredes.

Saludos.
todo ya va teniendo mas sentido, veo que debo seguir leendo mas conceptos, tambien creia que la unica forma de acceder a un atributo o metodo padre era usando parent

Agradezco a los dos por sus respuestas, me ayudaron muchisimo

Etiquetas: clase, herencia
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 13:12.