<div dir="ltr"><div><div><div><div><div><div><div>Gracias a los tres por vuestras aportaciones.<br><br></div>Sí, al final estoy usando "programación pato" mezclado con algo de herencia. Qué fácil es hacer todo esto cuando usas un motor como Unity y trabajas con componentes.<br>
</div>Trabajando por componentes sí puedes por ejemplo tener una celda que sea de tipo tipo Dungeon y a la vez por ejemplo de tipo Triangular.<br></div>Pero veo que eso no puedo o no sé conseguirlo tal cual en java. Realmente todo esto tan solo para una práctica de clase, pero creo que es importante aprovechar estas ocasiones para aprender a estructura código en condiciones.<br>
<br></div>Lo que al final tengo es una clase padre Map de la que heredan los dos tipos de mapa, Dungeon y CellularAutomaton. En los diferentes métodos se diferencia cuando las celdas son triangulares, cuadradas o hexagonales.<br>
</div>Y luego tengo una clase padre Cell, de la que heredan DungeonCell y CAutomatonCell. Y también en los diferentes métodos de estas clases se va diferenciando cuando las celdas son triangulares, cuadradas o hexagonales.<br>
<br></div>Bueno, eso, muchas gracias a todos y a seguir aprendiendo.<br><br></div>Saludos !!!!<br></div><div class="gmail_extra"><br><br><div class="gmail_quote">El 27 de abril de 2014, 16:27, Davidson, Steven <span dir="ltr"><<a href="mailto:srd4121@njit.edu" target="_blank">srd4121@njit.edu</a>></span> escribió:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Hola Miguel Ángel,<div class="gmail_extra"><br><div class="gmail_quote">2014-04-27 6:18 GMT-04:00 Miguel Ángel Torres Fernández-Píñar <span dir="ltr"><<a href="mailto:miguelangeltorresfp@gmail.com" target="_blank">miguelangeltorresfp@gmail.com</a>></span>:<div>
<div class="h5"><br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr"><div><div><div><div><div><div><div><div>Buenos días.<br>

<br></div>Es que tengo un problema de herencia en java.<br></div>Algo relativo a herencia múltiple.<br><br></div>Tengo una clase padre que es Map.<br><br>
</div>De ella heredan tanto Dungeon como CellularAutomaton.<br><br></div>Pero a su vez me gustaría que cada mapa pudiera tener diferentes tipos de celdas, triangulares, cuadradas y hexagonales.<br><br></div>¿ Cómo podría organizar esto para no tener que implementar varias veces por ejemplo la clase TriangularCell ???<br>


<br></div>Supongo que en C++ es relativamente fácil porque existe herencia múltiple con lo que un mapa podría heredar por ejemplo de Dungeon y a su vez de TriangularCell.<br></div></div></blockquote><div><br></div></div>
</div><div>Bueno, Francisco se me ha adelantado con el tema de las interfaces en Java. Sin embargo, quiero agregar al tema del diseño de clases.</div>
<div><br></div><div>Por lo que tengo entendido, tienes diferentes tipos de mapas que a su vez describen diferentes tipos de celdas. Si es así, creo que deberías usar herencia y composición. Por ejemplo,</div><div><br></div>

<div><div>public class Cell<br>{</div><div>  ...<br>}</div></div><div><br></div><div>public class Map<br>{</div><div>  private Cell cell;<br>  ...<br>}</div><div><br></div><div>Y luego, puedes definir los diferentes "tipos" de cada concepto:</div>

<div><br></div><div><div><div>public class TriangularCell extends Cell<br>{</div><div>  ...<br>}</div></div></div><div><br></div><div><div><div>public class RectangularCell extends Cell<br>{</div><div>  ...<br>}</div></div>

</div><div><br></div><div><div><div>public class HexagonalCell extends Cell<br>{</div><div>  ...<br>}</div></div></div><div><br></div><div><div>public class Dungeon extends Map<br>{</div><div>  ...<br>}</div></div><div><br>

</div><div><div><div>public class CellularAutomaton extends Map<br>{</div><div>  ...<br>}</div></div></div><div><br></div><div><br></div><div>La otra forma es usando genéricos (plantillas en C++). Por ejemplo,</div><div>
<br>
</div><div><div><div>public class Map<T><br>{</div><div>  private T cell;</div><div>  ...<br>}</div></div></div><div><br></div><div>Y así podemos crear varias jerarquías de clases relacionadas por un tipo de celda. Por ejemplo,</div>

<div><br></div><div>Map<RectangularCell> rectMap;</div><div>Map<HexagonalCell> hexMap;<br></div><div>...</div><div><br></div><div><br></div><div>Por último, quizá te sea útil usar "programación pato" en la que cada clase define el "tipo". Por ejemplo,</div>

<div><br></div><div><div><div>public class Map<br>{</div><div>  private Dungeon dungeon;</div><div><div>  private CellularAutomaton ca;</div></div><div><br></div><div>  public Dungeon getDungeon()  { ... }</div><div>  public CellularAutomaton getCellularAutomaton()  { ... }</div>

<div>  ...</div><div>}</div></div></div><div><br></div><div>Si internamente el objeto 'Map' es una mazmorra, entonces 'getDungeon()' retornará un objeto 'Dungeon' mientras que 'getCellularAutomaton()' retornaría 'null'. Asimismo, si el objeto representa un autómata celular, entonces 'getCellularAutomaton()' retornaría tal objeto mientras que 'getDungeon()' retornaría 'null'.</div>

<div><br></div><div><br></div><div>Espero que todo esto te sirva.</div><span class="HOEnZb"><font color="#888888"><div><br></div><div>Steven</div><div><br></div></font></span></div></div></div>
<br>_______________________________________________<br>
Lista de correo Cconclase <a href="mailto:Cconclase@listas.conclase.net">Cconclase@listas.conclase.net</a><br>
<a href="http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net" target="_blank">http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net</a><br>
Bajas: <a href="http://listas.conclase.net/index.php?gid=2&mnu=FAQ" target="_blank">http://listas.conclase.net/index.php?gid=2&mnu=FAQ</a><br></blockquote></div><br></div>