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

Como trabajar con clases y herencia !!?!!

Estas en el tema de Como trabajar con clases y herencia !!?!! en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Class C Extends B Class B Extends A Esto no obliga a que la herencia sea en cascada ? :S me explico... que la Clase ...
  #1 (permalink)  
Antiguo 07/10/2007, 17:49
 
Fecha de Ingreso: enero-2005
Mensajes: 149
Antigüedad: 19 años, 3 meses
Puntos: 2
Como trabajar con clases y herencia !!?!!

Class C Extends B
Class B Extends A

Esto no obliga a que la herencia sea en cascada ? :S me explico... que la Clase C Herede de B y succesivamente la clase B herede de A ?

Con esto la clase C podría acceder a miembros de la clase C B y A... Pero como conseguiríamos que una clase que no sean una de estas tres se comuniquen ?

Es decir si una clase X necesitase atributos o metodos de la clase B ¿ esto no sería imposible ? (sin herencia multiple)

Es lo que me bloquea siempre !!!

Que tendría que hacer entonces para que X pudiese trabajar con los metodos de B ? Seguir la herencia en cascada ?

Class X extends C
Class C Extends B
Class B Extends A

Entonces tanto X como C podrían acceder a los miembros de B y de las demás clases heredadas cierto ?

Pero esto en un proyecto grande... ¿ no nos llevaría a crear una gran cadena de herencia ? Donde B trabajaría con A, D con B, X con J G C y A y así todas las relaciones que la herencia, visibilidad etc permitan ?

Jejeje espero no liarles con Tanto ABCDEF...
Muchas gracias
  #2 (permalink)  
Antiguo 07/10/2007, 20:44
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: Como trabajar con clases y herencia !!?!!

No entiendo tu duda, y por lo general si necesitas heredar a tanto nivel hace pensar que tienes problemas de diseño.

La herencia esta hecha para poder usar un objeto que requiera cierta funcionalidad especifica, supon que tienes una clase ManejadorDB, pero quieres hacer una clase que por cada Query la almacene en un log, entonces heredas la clase y le agregas la funcionalidad necesaria:
Código PHP:
class ManejadorDB {
      
// muchos metodos
}

class 
ManejadorDBConLog extends ManejadorDB {
     public function 
Query$query ) {
           
$log Logger::createInstance();
           
$log->save$query );

           return 
parent::Query$query );
     }

Asi heredas la funcionalidad de la primera clase y agregas tu metodo personalizado.

Ahora si empiezas a heredar a tal nivel (aunque a nivel programacion si es posible heredar a tal grado) es porque en algun lugar de tu diseño tienes un problema de diseño ya que no deberias de heredar a tal nivel a menos que requieras comportamiento muy especifico.

Saludos.
  #3 (permalink)  
Antiguo 08/10/2007, 06:41
 
Fecha de Ingreso: enero-2005
Mensajes: 149
Antigüedad: 19 años, 3 meses
Puntos: 2
Re: Como trabajar con clases y herencia !!?!!

-------
Aham... Creo que comprendo el concepto. Entiendo bien el codigo de ejemplo que has puesto.

Lo que haces es... "extender la funcionalidad", esas palabras me han ayudado bastante, es decir sigue tratandose de bases de datos el objeto heredero. Así es de forma efectiva una extensión de la clase padre. Y para agregar funcionalidad te has hecho servir de la llamada estatica de un metodo de otra clase.

Para no haber entendido mi pregunta, que yo entiendo que puedo resultar confuso... No obstante el ejemplo es de 10.
-------
¿ Crees que una buena forma de trabajar con clases sería por ejemplo crear un directorio /libs donde contenerlas, de forma que así se pueda hacer una autocarga centralizada o localizada ?

El codigo no lo necesitaríamos para nada no ? con crear objetos e instanciar con sus miembros sería suficiente ?...
-------
Para las clases de configuración y para la conexión a db he visto que un patrón singleton puede ir bien pues solo necesitamos una instancia... Tengo ke estudiar mucho todavia sobre eso, pero hay algun patrón que se use para la carga o instancia de varias clases ?
-------

He usado los "-" para separar temas y hacerlo mas legible. Gracias de nuevo
  #4 (permalink)  
Antiguo 08/10/2007, 08:13
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: Como trabajar con clases y herencia !!?!!

Cita:
Iniciado por yoguuu Ver Mensaje
-------
Aham... Creo que comprendo el concepto. Entiendo bien el codigo de ejemplo que has puesto.

Lo que haces es... "extender la funcionalidad", esas palabras me han ayudado bastante, es decir sigue tratandose de bases de datos el objeto heredero. Así es de forma efectiva una extensión de la clase padre. Y para agregar funcionalidad te has hecho servir de la llamada estatica de un metodo de otra clase.

Para no haber entendido mi pregunta, que yo entiendo que puedo resultar confuso... No obstante el ejemplo es de 10.
-------
¿ Crees que una buena forma de trabajar con clases sería por ejemplo crear un directorio /libs donde contenerlas, de forma que así se pueda hacer una autocarga centralizada o localizada ?

El codigo no lo necesitaríamos para nada no ? con crear objetos e instanciar con sus miembros sería suficiente ?...
Asi es es una buena forma tener todos tus objetos base en una carpeta libs, y luego una carpeta que se llame application donde guardes los referentes a tu aplicacion.

Cita:
Iniciado por yoguuu Ver Mensaje
-------
Para las clases de configuración y para la conexión a db he visto que un patrón singleton puede ir bien pues solo necesitamos una instancia... Tengo ke estudiar mucho todavia sobre eso, pero hay algun patrón que se use para la carga o instancia de varias clases ?
-------

He usado los "-" para separar temas y hacerlo mas legible. Gracias de nuevo
Singleton es el mejor patron cuando las clases necesitan ser instanciadas una vez, para objetos DB es lo mejor aunque tambien a veces es necesario instanciarlas si queremos trabajar con dos bases de datos simultaneas.

Saludos.
  #5 (permalink)  
Antiguo 11/10/2007, 09:06
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 19 años
Puntos: 32
Re: Como trabajar con clases y herencia !!?!!

El problema es que estás razonando a través del código y no de los conceptos. No pienses en código, resuelve primero el diseño. La herencia es un tema conceptual, se habla de una relación de "parentesco" entre las clases, no si conviene o no para reuso de clases/código.

¿Que sugieren las "Guias de Diseño OO"?

De paso, te lo comento: las guías de diseño recomiendan que para una buena jerarquía de herencia:

- Se deben tener no más de 7 (+-2) niveles
- Las jerarquías "gordas y bajas" son síntoma de "poca especialización"
- Las jerarquías "altas y flacas" son síntoma de "excesiva especialización".

¿Si tantas recomendaciones existen para la herencia simple, que queda esperar para la herencia múltiple?

Por esas razones la mayoría de los lenguajes modernos ni se les ocurre implementar la posibilidad de permitir "herencia múltiple".
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #6 (permalink)  
Antiguo 11/10/2007, 14:39
Avatar de vanetino  
Fecha de Ingreso: diciembre-2006
Ubicación: Lima, Peru
Mensajes: 22
Antigüedad: 17 años, 4 meses
Puntos: 0
Re: Como trabajar con clases y herencia !!?!!

hola yoguuu, creo que estas mal en tu diseño, te recomiendo que leas sobre "relaciones entre clases", al parecer te falta madurar en tu diseño y por ende implementarlo en el codigo.

Saludos

Walter Meneses
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 08:24.