<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>:<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>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><div><br></div><div>Steven</div><div><br></div></div></div></div>