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

Ayuda manejo PHP OOP respecto a Java

Estas en el tema de Ayuda manejo PHP OOP respecto a Java en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Bueno señores, primero que todo me gustaría presentarme ya que soy totalmente nuevo en este foro, soy estudiante de ingeniería de sistemas y voy en ...
  #1 (permalink)  
Antiguo 05/10/2009, 22:29
 
Fecha de Ingreso: junio-2009
Mensajes: 14
Antigüedad: 14 años, 10 meses
Puntos: 0
Ayuda manejo PHP OOP respecto a Java

Bueno señores, primero que todo me gustaría presentarme ya que soy totalmente nuevo en este foro, soy estudiante de ingeniería de sistemas y voy en 4 semestre. Hasta ahora mi formación se ha basado en Java (y uno que otro tropiezo en C++) y he decidido aprender PHP para poder practicar algo de creación de software en la empresa donde mi padre trabaja.

Ahora bien, tomé el curso de PHP que se encuentra en Lynda.com ("PHP & MySQL Essentials" y "PHP & MySQL beyond the basics") y ya tengo muchos conceptos claros de cómo funciona PHP, como trabaja sobre el servidor, su orientación a Objetos etc.

Mi gran duda surje cuando intento implementar conceptos que he tenido presentes en mi formación y trabajo con JAVA a PHP.

El primero de ellos es la implementación de métodos estáticos. Cuando debo considerar que debo crear un método estático? No se supone que la creación de objetos debe ser únicamente con la instanciación de ellos con el constructor, o lo usamos debido a que no es posible la sobrecarga en PHP?

El segundo es la delegación de responsabilidades. En el curso nos indicaban que métodos generales de acceso a la base de datos podían ser generalizados para las clases, pero no debería tener el manejador de bases de datos aparte (claro, todo esto tratando de usar el MVC).

Tercero: no hay forma de delegar la construcción de la "interfaz" al javascript? sólo lo puedo usar cuando el usuario realiza alguna operación simple sobre el entorno?

Bueno, perdonen un poco el tema de las preguntas pero creo que son debido a al cambiarme al "paradigma" de la programación web.

Saludos
xlxScorpioxlx
  #2 (permalink)  
Antiguo 06/10/2009, 08:40
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
Respuesta: Ayuda manejo PHP OOP respecto a Java

Cita:
Iniciado por xlxScorpioxlx Ver Mensaje
El primero de ellos es la implementación de métodos estáticos. Cuando debo considerar que debo crear un método estático? No se supone que la creación de objetos debe ser únicamente con la instanciación de ellos con el constructor, o lo usamos debido a que no es posible la sobrecarga en PHP?
Los métodos estáticos son eso, estáticos por lo que no se crean y siempre tienen la misma ejecución dependiendo de los parámetros, se usan cuando no es necesario instanciar una copia de la clase y solo se necesita utilizar el método, es como declarar una función simple, por ejemplo si tienes una clase que se llame Math y un método Add, sería más trabajo instanciar el objeto Math y llamar al método Add a mejor declarar Add como estático y mandarlo llamar directamente.

El crear el objeto siempre es a travez de constructor, no hay otra forma, aunque sí puedes instanciar un objeto en un método estatico y luego regresar esa instancia, pero siempre se ejecuta el constructor al instanciar un objeto.

La sobrecarga como en Java no es posible, pero sí es posible hacerla, PHP dispone de la función get_func_args() que te devuelve los parámetros con los que fue llamada una función y puedes simular una sobrecarga.

Cita:
Iniciado por xlxScorpioxlx Ver Mensaje
El segundo es la delegación de responsabilidades. En el curso nos indicaban que métodos generales de acceso a la base de datos podían ser generalizados para las clases, pero no debería tener el manejador de bases de datos aparte (claro, todo esto tratando de usar el MVC).
La delegación de responsabilidades es un concepto más de diseño del sistema que una restricción, tu puedes diseñar el sistema como lo hayas planteado inclusive incrustando la capa de acceso en la lógica (mala idea), pero PHP no te restringe de ninguna forma, usa la forma que más te convenga y conozcas.

Cita:
Iniciado por xlxScorpioxlx Ver Mensaje
Tercero: no hay forma de delegar la construcción de la "interfaz" al javascript? sólo lo puedo usar cuando el usuario realiza alguna operación simple sobre el entorno?
PHP como sabes se ejecuta en el servidor, por lo que la tarea de la interfaz no se mete en nada, tu puedes diseñar la interfaz como más te parezca, ya sea Javascript, HTML, CSS, o inclusive otras tecnologicas como Flash, Flex, inclusive tecnologias para el escritorio como GTK, o WinForms.

Saludos.
  #3 (permalink)  
Antiguo 06/10/2009, 20:13
 
Fecha de Ingreso: junio-2009
Mensajes: 14
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: Ayuda manejo PHP OOP respecto a Java

Entonces, entiendo que los métodos estáticos se usan para eso, para poder ser llamados sin necesidad de instanciar una clase (por así decirlo, usarlo como librería), ahora, respecto a lo del "constructor" (ya que realmente no es un constructor) estático, cómo funciona?

Es decir, digamos que tengo el cosntructor que recibe varios parámetros para sus atributos, y lo que quiero es sobrecargarlo, pero debido a que php no soporta sobrecarga, utilizo el método estático, hasta donde tengo entendido, para poder instanciar un objeto desde el método estático, utilizo "self", esta palabra llama al constructor que yo he definido en la clase, o el constructor por defecto de las clases? (algo así como el constructor por defecto de la clase padre OBJECT de la cuál heredan todos los objetos en JAVA).

Saludos
xlxScorpioxlx
  #4 (permalink)  
Antiguo 07/10/2009, 09:00
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
Respuesta: Ayuda manejo PHP OOP respecto a Java

Los métodos estaticos son igual que en Java, sirven para poder hacer uso de algún método sin necesidad de instanciar todo el objeto.

Como te comento si quieres imitar la sobrecarga no importa si es estatico o no, PHP dispone de una función que te regresa los "n" elementos que le mandes llamar a una función, ve este ejemplo:
Código PHP:
Ver original
  1. class Demo
  2. {
  3.         public function __construct() {
  4.                   var_dump(func_get_args());
  5.         }
  6. }
  7.  
  8. $d1 = new Demo('a', 'b', 'c');
  9. $d2 = new Demo(array(1, 2, 3, 4), 'foo', 'bar');
  10. $d3 = new Demo('foo', new Demo('bar', new Demo('baz')));

Saludos.
  #5 (permalink)  
Antiguo 09/10/2009, 06:31
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 19 años
Puntos: 32
Respuesta: Ayuda manejo PHP OOP respecto a Java

Que tal xlxScorpioxlx

Un detalle que tienes que tomar en cuenta, ya que vienes de Java, y que la mayoría de los desarrolladores PHP no toma en cuenta (por culpa de la falta de experiencia en POO en otros lenguajes que no sean PHP):

En Java es necesario incluir (importar) clases o paquetes para tener acceso a ellos, en PHP es distinto, con que lo incluyas en un solo archivo (por ejemplo una clase de Persistencia) esta queda disponible en todos los demás fuentes que agregues, ya que PHP "suma" todos los fuentes como uno solo y luego lo ejecuta.

Pero, para mantener un diseño "consistente", deberíamos hacer lo que hace Java, incluir en cada archivo la o las clases que necesitamos, para que estas cuando sean reusadas no fallen por falta de clases.

De ahí la razón de usar require_once siempre cuando trabajemos con objetos, ya que gracias al efecto "PHP", si lo hacemos sin el "_once" tendremos un error del compilador por "clase redefinida".

No quería dejar de comentarlo, ya que vienes de Java y vas hacia PHP, aprovechemos para que hagas las cosas bien desde el arranque

Saludos!
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
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 00:24.