jueves, 4 de agosto de 2011

Preserve Whole Object exception

He tratado de realizar variaciones sobre la posibilidad que se apunta en "sourcemaking.com":
[motivation] "Passing in the required object causes a dependency between the required object and the called object. If this going to mess up your dependency structure, don't use Preserve Whole Object".
Como excepción a la aplicación de preserve whole object<-making methods caller sympler.
para ello he usado un código inventado por mi a bote pronto, sobre la gestión de una película y la contabilidad de sus gastos quedando el código de la forma siguiente:
se puede descargar el archivo de moonEdit para ver como he llegado a ese código y consideraciones preserver whole object exception
class peliculaDeMiedo
{
main
Camara camara = new Camara(4);
integer Plano = 6;
integer escena = 8;
integer litrosSangre= 44;
String [] actores = [hulbrainer -> datosHulbrainer, kevincosnerjose ->datosKevincosnerjose, avaganer->datosAvaganer];
Vampiro dragucula = new Vampiro(camara,plano,escena,actores[hulbrainer]);
...
...
ElementosPelicula elementosUsados = new ElementosPeliculaMiedo(camara,plano,escena,litrosSangre);
Double pagaDia = new ContableMiedo().dameLaPagaStaff(elementosUsados);
}

class ElementosPelicula
class ElementosPeliculaAmor extends ElementosPelicula
class ElementosPeliculaMiedo extends ElementosPelicula


class Camara
{
Camara(integer camara)
{
un monton de peticiones a otros metodos, consultas a servicios y logaritmos nepericonianos;
this.ordenDeLaCamara=camara;
}
Double calculaCosteAnual()
{
un monton de calculos y de historias que miran el precio de la camara , depreciacion , duracion de la lampara y lo que te de la gana
}
}

class Vampiro
Vampiro (Camara CamaraEnfocada, integer PlanoPelicula, integer escena,Actor actor)
{
sus cosas
}

class Contable
{
Contable()
{
se hacer cositas con los números
}
public Double damePagaStaff (elementosPelicula elementos)
{
Double consteCamara = elementos.camara.calcilaCosteAnual()/365;
double gastoExtraPelicula = calculaGastoProducto(elementos);
etc etc....
return unapasta;
}
private abstract double calculaGastoProducto(ElementosPelicula elementos);
}

class ContableMiedo extends Contable
calculaGastoProducto(elementos)
{
return elementos.litrosSangre*getPrecioMercadoEuros();
}

class ContableAmor extends Contable
calculaGastoProducto(elementos)
{
return elementos.kilosCebolla*getPrecioMercadoEuros();
}


class peliculaDeAmor
{
main
Camara camara = new Camara(4);
integer Plano = 6;
integer escena = 8;
integer kilosCebolla= 4;
String [] actores = [hulbrainer -> datosHulbrainer, kevincosnerjose ->datosKevincosnerjose, avaganer->datosAvaganer];
...
...
ElementosPelicula elementosUsados = new ElementosPeliculaAmor(camara,plano,escena,kilosCebolla)
Double pagaDia = new ContableAmor().dameLaPagaStaff(elementosUsados);
}

No hay comentarios:

Publicar un comentario