[C con Clase] Buenos días a tod en s........ Alguien controla algo de java ???

Davidson, Steven srd4121 en njit.edu
Dom Abr 27 16:27:33 CEST 2014


Hola Miguel Ángel,

2014-04-27 6:18 GMT-04:00 Miguel Ángel Torres Fernández-Píñar <
miguelangeltorresfp en gmail.com>:

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

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.

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,

public class Cell
{
  ...
}

public class Map
{
  private Cell cell;
  ...
}

Y luego, puedes definir los diferentes "tipos" de cada concepto:

public class TriangularCell extends Cell
{
  ...
}

public class RectangularCell extends Cell
{
  ...
}

public class HexagonalCell extends Cell
{
  ...
}

public class Dungeon extends Map
{
  ...
}

public class CellularAutomaton extends Map
{
  ...
}


La otra forma es usando genéricos (plantillas en C++). Por ejemplo,

public class Map<T>
{
  private T cell;
  ...
}

Y así podemos crear varias jerarquías de clases relacionadas por un tipo de
celda. Por ejemplo,

Map<RectangularCell> rectMap;
Map<HexagonalCell> hexMap;
...


Por último, quizá te sea útil usar "programación pato" en la que cada clase
define el "tipo". Por ejemplo,

public class Map
{
  private Dungeon dungeon;
  private CellularAutomaton ca;

  public Dungeon getDungeon()  { ... }
  public CellularAutomaton getCellularAutomaton()  { ... }
  ...
}

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'.


Espero que todo esto te sirva.

Steven
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20140427/e1f94051/attachment.html>


Más información sobre la lista de distribución Cconclase