Título: Duda POO Publicado por: Camilo2001 en 8 Mayo 2017, 01:43 am Hola manola. Recién empecé a programar orientado a objetos en python (estoy aprendiendo por mi cuenta). Estoy tratando de hacer un juego de cartas. El problema es que quiero crear una clase "Efecto", y desde esa clase instanciar los distintos efectos del juego. El problema es que cada efecto tiene que tener un metodo "usar" (que seria el que ejecuta el codigo caracteristico de cada uno) distinto al resto de los efectos. Busque por internet pero no encontre si se puede o como hacer para una vez instanciado el efecto modificarle los metodos. Se puede crear una clase para cada efecto, pero no deja de ser eso: una clase, y no un objeto, por lo que no se si seria correcto. Gracias desde ya :P
Título: Re: Duda POO Publicado por: engel lex en 8 Mayo 2017, 01:51 am creas la clase efecto con usar... luego creas una clase "jugador" o "mundo", que contenga cada efecto, la clase efecto, debería representar un solo efecto, luego una clase padre, representaría varios efectos creando un objeto por cada efecto
Título: Re: Duda POO Publicado por: Camilo2001 en 8 Mayo 2017, 02:13 am :o :o Entonces te referís a crear una clase "Efecto" padre, después de esa clase heredar a una clase especifica para cada efecto y desde esa clase instanciar?
Título: Re: Duda POO Publicado por: engel lex en 8 Mayo 2017, 03:08 am no, no la heredas...
Código: clase efecto{ Título: Re: Duda POO Publicado por: Serapis en 8 Mayo 2017, 04:10 am Lo que describes es lo que se llama una interfaz.
Una interfaz, recoge por lo general solo los nombres de los métodos que contiene el objeto... (la firma, sin contener código en su interior). Luego hay que implementar la interfaz. Cada clase que implementa una interfaz hereda pues todos sus miembros, pero al implmenetarlos, cada uno puede hacerlo de forma distinta (incluso algunos pueden tener el mismo código para determinados métodos). Si hay un comportamiento por defecto, para uno o varios métodos, entonces ese comportamiento puede estar descrito (escrito el código), en la propia interfaz y desde la clase que la implementa, si no tiene un comportamiento distinto a la de la interfaz (el comportamiento por defecto), entonces para ese método se invoca a la interfaz). ... pero ojo, la interfaz no debe retener métodos privados, ya que si no serían sobrescritos por clases diferentes y no sería algo deseable (cuando es deseable suele ser en casos en los que actúa como un servidor y admite que diferentes 'componentes' (objetos), puedan modificarlo y los demás puedan aceptarlo (pero esto es algo muy distinto a lo que tú buscas)). Código: Interfaz Planta --------------------------------- Código: Clase Amapola implementa Planta Otra planta, podría tener una floración diferente, pero en cambio la propiedad Hojas no tenga diferente contenido de la anterior pero cada cual debe guardar ese dato sobre sí mismo... La propiedad Raiz, sobre todas tendrán raíz, pero es un modo dever como se delega en la interfaz cuando algo es común. Algunos lenguajes no permiten a un interfaz nada más que definir su composición, no admitiendo código alguno. Quizás en vez de implementar directamente una planta u otra, si uno va a implementar 8pongamos) cientos de plantas, es seguro que mucha funcionalidad va ser equivalente en un muchas plantas, entonces es cuendo se puedne implementar sólo determinadas ramas de plantas (por ejemplo acuáticas, cereales, legumbres, tuberculo, arbol, etc...) y luego las diferencias entre las diferentes plantas heredarlas de la clase padre.... (por ejemplo: trigo, centeno, maíz, heredarla de la clase cereal, que podría mantener una característica 'espigas' que en la interfaz podría ser algo más abstracto, partiendo de la propiedad Fruto, que podría ser una enumeración desde "no tiene" hasta el resto "grano de espiga", "grano de vaina", "fruta fresca", "fruto seco", etc... Título: Re: Duda POO Publicado por: Serapis en 8 Mayo 2017, 16:58 pm Ten en cuenta que la herencia está más enfocada a la reutilización de código. Una interfaz se vale del mecanismo del paradigma de la POO, llamado Polimorfismo, cuyo objetivo principal es tener un comportamiento diferente, para los mismos métodos. El polimorfismo, no deja de ser una herencia, pero si no es bien entendido se desaprovecha su potencial, y bien entendido se hace herencias más sencillas y útiles.
|