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

Duda sobre utilizacion de clases y métodos

Estas en el tema de Duda sobre utilizacion de clases y métodos en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Buenas, Me surge una duda existencial, si se puede llamar así... no se si la declaración de esta clase (a grandes rasgos) es correcta o ...
  #1 (permalink)  
Antiguo 10/05/2010, 13:48
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 12 años, 8 meses
Puntos: 20
Duda sobre utilizacion de clases y métodos

Buenas,

Me surge una duda existencial, si se puede llamar así... no se si la declaración de esta clase (a grandes rasgos) es correcta o no... no se si abuso de los métodos que utilizo...

Si defino la clase jugador, este puede hacer 1000 cosas.... se supone que eso son los métodos? ejemplo

Código PHP:
Ver original
  1. class jugador{
  2.     function alta_jugador($user,$datos_array)
  3.    
  4.     function editar_jugador($user,$datos_array)
  5.    
  6.     function baja_jugador($user)
  7.    
  8.     function mostrar_amigos($user)
  9.    
  10.     function mostrar_edad($user)
  11.    
  12.     function fecha_registro($user)
  13.    
  14.     function mostrar_puntuacion($user)
  15.    
  16.     function registrar_actividad($user,$actividad)
  17.    
  18.     function mostrar_historial($user)
  19.    
  20.     function retar_usuario($user1,$user2)
  21. }
  22.  
  23. //Ejemplo de uso:
  24.  
  25. $jugador=new jugador;
  26. $jugador->alta_jugador("Roder",["Gonzalez","[email protected]","315"]);
  27. $jugador->editar_jugador("Pepe",["Sanchez","[email protected]","315"]);
  28. $jugador->baja_jugador("Pepe");
  29. $jugador->mostrar_amigos("Pepe");
  30. $jugador->mostrar_edad("Pepe");
  31. $jugador->fecha_registro("Pepe");
  32. $jugador->mostrar_puntuacion("Pepe");
  33. $jugador->registrar_actividad("Pepe","Cambio su contraseña");
  34. $jugador->mostrar_historial("Pepe");
  35. $jugador->retar_usuario("Pepe","Pepa");

¿Alguna sugerencia?

Muchas gracias de antemano!
  #2 (permalink)  
Antiguo 10/05/2010, 13:56
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 11 años, 7 meses
Puntos: 2534
Respuesta: Duda sobre utilizacion de clases y métodos

de hecho, lo que haces se le llama interface.... y si, es una capa abstracta donde yacen las especificaciones posibles de una clase concreta...

deberías comenzar a leer de nuevo el manual.. ;)
http://php.net/oop
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 10/05/2010, 14:04
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 10 años, 5 meses
Puntos: 1517
Respuesta: Duda sobre utilizacion de clases y métodos

Añado ya anteriormente han explicado en este foro sobre interface, te recomiendo que leas sobre el tema.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #4 (permalink)  
Antiguo 10/05/2010, 14:49
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 13 años, 5 meses
Puntos: 2135
Respuesta: Duda sobre utilizacion de clases y métodos

Podrias romper tu clase y delegar métodos a clases especificas que se encarguen de tareas específicas, todo depende del diseño que hagas y como modeles tu UML.

Saludos.
  #5 (permalink)  
Antiguo 11/05/2010, 07:12
 
Fecha de Ingreso: agosto-2007
Mensajes: 10
Antigüedad: 12 años, 2 meses
Puntos: 0
Respuesta: Duda sobre utilizacion de clases y métodos

Ademas de lo que ya han comentado los compañeros arriba, el manejo de una clase es sinónimo de ir a una Programación Orientada a Objetos, en este sentido hay elementos a considerar para que vayas encaminado por el "camino del bien", me refiero a modificadores de acceso, notación Camel Case y otras que seguramente iras aprendiendo en el "camino del bien"...

Éxitos!
  #6 (permalink)  
Antiguo 11/05/2010, 14:45
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 12 años, 8 meses
Puntos: 20
Respuesta: Duda sobre utilizacion de clases y métodos

Cita:
Iniciado por GatorV Ver Mensaje
Podrias romper tu clase y delegar métodos a clases especificas que se encarguen de tareas específicas, todo depende del diseño que hagas y como modeles tu UML.

Saludos.
He leído sobre las interfaces y lo que son

http://www.forosdelweb.com/f68/inter...ements-670265/
http://desarrollo.dsisweb.com/2009/1...rfaces-en-php/

Ya tengo la idea, pero sin haber trabajado con ellas me resulta difícil desarrollar el tema de romper la clase, delegar métodos a clases y crear diferentes interfaces.

La idea es, si en la web el usuario puede hacer 100 cosas, creo una interface como el ejemplo anterior que se llame USUARIO y ahí defino todas las acciones que el usuario puede realizar en la web?

Luego está todos los servicios que ofrezco en la web... creo una que se llame SERVICIOS ?¿

La web pretende ser un portal de información sobre estadística de diferentes deportes.

No se cómo puedo especificar que interfaces necesito... los métodos los tengo claro. (método = todo lo que el usuario pueda hacer y la web permita hacer).

¿Alguna orientación???

Sobre UML también he leído
El diagrama UML es un diagrama general que representa al objeto con sus conexiones y propiedades a otros objetos.

http://phpsenior.blogspot.com/2006/0...ml-php5-i.html
http://www.dcc.uchile.cl/~psalinas/uml/modelo.html

Muchas gracias de antemano!
  #7 (permalink)  
Antiguo 13/05/2010, 10:17
Avatar de jahepi
Colaborador
 
Fecha de Ingreso: diciembre-2004
Ubicación: Querétaro
Mensajes: 1.124
Antigüedad: 14 años, 11 meses
Puntos: 43
Respuesta: Duda sobre utilizacion de clases y métodos

Hola Neonadi !

Cita:
Ya tengo la idea, pero sin haber trabajado con ellas me resulta difícil desarrollar el tema de romper la clase, delegar métodos a clases y crear diferentes interfaces.
Si tienes dudas sobre esos temas, échale un vistazo a los patrones para asignar responsabilidades conocidos como GRASP, aquí hay un poco de información sobre el tema: http://www.adictosaltrabajo.com/tuto...p?pagina=grasp
No sin antes leer algún buen libro de POO, de hecho EnriquePlace usuario de este foro es autor de uno muy bueno.

Un saludote !
__________________
Una contraseña es como la ropa interior. No deberías dejarlas afuera a la vista de otras personas, deberías cambiarla regularmente, y ni se te ocurra prestarla a extraños.
  #8 (permalink)  
Antiguo 13/05/2010, 15:01
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 12 años, 8 meses
Puntos: 20
Respuesta: Duda sobre utilizacion de clases y métodos

No si ya entendí el sentido de las interfaces, pero no veo como aplicarlo a mi diseño.

Ejemplo, si implemento una interface que se llame Jugador de la siguiente manera.

Código PHP:
Ver original
  1. interface Jugador {
  2.     public function alta_jugador()
  3.    
  4.     public function editar_jugador()
  5.    
  6.     public function baja_jugador()
  7.    
  8.     public function mostrar_amigos()
  9.    
  10.     public function mostrar_edad()
  11.    
  12.     public function fecha_registro()
  13.    
  14.     public function mostrar_puntuacion()
  15.    
  16.     public function registrar_actividad()
  17.    
  18.     public function mostrar_historial()
  19.    
  20.     public function retar_usuario()
  21. }

Estoy obligando a que si creo la clase jugador, y le digo que implemente la interface Jugador, esta clase, tenga definido todos los métodos que tiene la interface Jugador.
De este modo si alguien quiere utilizar todas las propiedades (yo le llamo así, o funciones de un Jugador) solo tiene que implementar la interface en la nueva clase que vaya a crear (y desde ese momento esa clase resultante será considerada hija de su padre interface Jugador), correcto? xD

De ahi lo del contrato de firmas, etc...

Vaya jaleo de nombres :P

Código PHP:
Ver original
  1. class Jugador implements Jugador{
  2.     private  $nombre;
  3.     private  $apellidos;
  4.   // etc...
  5.  
  6. public function alta_jugador(){
  7.         // codigo adecuado para insertar el jugador en la bbdd
  8.        
  9.     }
  10.  
  11. // etc...
  12.  
  13. }

Mi pregunta sería si todos los métodos que he puesto por ejemplo en la interface (de arriba) serían correctos, o alguno estaría mejor en otra interface, etc...
  #9 (permalink)  
Antiguo 14/05/2010, 14:33
 
Fecha de Ingreso: mayo-2008
Ubicación: Murcia, España
Mensajes: 313
Antigüedad: 11 años, 5 meses
Puntos: 5
Respuesta: Duda sobre utilizacion de clases y métodos

Si bien mas o menos parece que has captado qué es una interfaz, decirte que los nombres de las interfaces suelen terminar en "able", ya que, por así decirlo, dota a una clase de una determinada funcionalidad, por ejemplo: Cloneable, Searchable, Dibujable...

Refriendo a tu caso, parece que lo que necesitas es una clase abstracta, que, por así decirlo, es una clase normal con la funcionalidad de una interfaz, es decir, puedes establecer métodos que deberán ser implementados por la clase que herede. Una de las ventajas de utilizar clases abstractas reside en la reutilización de código, puedes tener una funcionalidad común para todos los jugadores e implementarla solo una vez.

No se si me estoy explicando bien, pero esto se entiende a la perfección con un ejemplo:

Código PHP:
abstract class Persona() {

      var 
$nombre;
      var 
$apellido;
      var 
$direccion;

      function 
hablar() {
            
// Esta función es común para todos los tipos de personas
      
}

      abstract function 
trabajar(); // Todas las personas trabajan, pero cada una en un puesto distinto


Código PHP:
class Secretaria extends Persona {

      function 
trabajar() {
            
// código de trabajar para secretaria
      
}

Código PHP:
class Conserje extends Persona {

      function 
trabajar() {
            
// código de trabajar para conserje
      
}

Desde las clases hijas (Conserje y Secretaria), se puede acceder también a los métodos y atributos de la clase padre (Persona) del mismo modo que si se hubieran declarado en esa misma clase con $this->nombremetodo/propiedad.

Supongo que algo sabrás sobre el ámbito de las variables, pero por si acaso, te aclaro que:
  • public -> Puede ser accedido/a desde la propia clase, las que hereden de ella y desde fuera de la clase.
  • protected -> Puede ser accedido desde la propia clase y las que hereden de ella.
  • private -> Solo pude ser accedido desde la propia clase.

No se si me he explicado muy bien, pero busca información sobre lo que te he comentado ;)
  #10 (permalink)  
Antiguo 15/05/2010, 11:42
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 14 años, 5 meses
Puntos: 32
Respuesta: Duda sobre utilizacion de clases y métodos

Que tal Neodani

Como mínimo debes cambiar el estándar de codificación, te paso un ejemplo de los cambios que haría:

Archivo Jugador.php
Código PHP:
<?php
class Jugador
{
    public function 
__construct($user,$datos_array)
    {
    }
    public function 
save()
    {
    }
    public function 
baja()
    {
    }
    public function 
mostrarAmigos()
    {
    }
    public function 
getEdad()
    {
    }
    public function 
getFechaRegistro()
    {
    }
    public function 
getPuntuacion()
    {
    }
    public function 
registroActividad($actividad)
    {
    }
    public function 
getHistorial()
    {
    }
    public function 
retarJugador($jugador)
    {

    }
}
Archivo index.php
Código PHP:
//Ejemplo de uso:
require_once 'Jugador.php';

$jugador = new Jugador("Roder",array("Gonzalez","[email protected]","315"));

$jugador->baja();
$jugador->mostrarAmigos();
$jugador->getEdad();
$jugador->getFechaRegistro();
$jugador->getPuntuacion();
$jugador->registroActividad("Cambio su contraseña");
$jugador->getHistorial();
$jugador->retarJugador(new Jugador("Pepe",array("pepe","[email protected]","315") )); 
Saludos!
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #11 (permalink)  
Antiguo 16/05/2010, 04:51
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 12 años, 8 meses
Puntos: 20
Respuesta: Duda sobre utilizacion de clases y métodos

Gracias enriqueplace, pero entonces debo entender que para el ejemplo propuesto no hace falta la utilización de interfaces ni clases abstractas? :S

Y la clase jugador para crear nuevos esta bien... pero si lo que quisiera en lugar de llamar al constructor para crear el jugador, fuese mas bien, recuperar los datos del jugador a partir del nombre de usuario de este, se podría hacer igualmente no?

Gracias
  #12 (permalink)  
Antiguo 16/05/2010, 10:28
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 14 años, 5 meses
Puntos: 32
Respuesta: Duda sobre utilizacion de clases y métodos

Que tal Neodani

No debes entender nada , simplemente te estoy dando un ejemplo de que básicamente, como empezaste a encarar el problema, bien podrías haberlo hecho por otro lado, desde la nomenclatura y sintaxis de la codificación hasta la aplicación de conceptos básicos de POO.

Ni me puse a discutir el diseño general, de ahí tendrías que hacer primero diagramas UML... al igual que haces con las bases de datos, de lo contrario, si no tienes un mapa, fácil es perderse.

Saludos!
__________________
Blog phpsenior.com Cursos a Distancia surforce.com

Etiquetas: clases, utilizacion
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 14:04.