70 likes | 227 Views
Genericidad. Una clase genérica encapsula una estructura y brinda un conjunto de servicios cuya implementación no depende del tipo de las componentes. Genericidad. Matriz. Elemento [] [] m. <<constructores>> Matriz ( fMax,cMax : entero) <<comandos>> establecerElem ( f,c : entero,
E N D
Genericidad Una clase genérica encapsula una estructura y brinda un conjunto de servicios cuya implementación no depende del tipo de las componentes.
Genericidad Matriz Elemento [] [] m <<constructores>> Matriz (fMax,cMax : entero) <<comandos>> establecerElem (f,c : entero, elem : Elemento ) copy(m : Matriz) invertirFilas(f1,f2:entero) Asume que la posición es válida Asume que se verificó que f1 y f2 son válidas
Genericidad Matriz Elemento [] [] m Retorna verdadero sí y solo sí En cada fila todos los elementos mantienen referencias a un mismo objeto <<consultas>> existePos(f,c : entero) : boolean obtenerNFil () : entero obtenerNCol () : entero obtenerElem (f,c : entero) : Elemento clone() :Matriz equals(m:Matriz): boolean esRayada() : boolean todosNeutros():boolean Retorna verdadero sí y solo sí cada elemento cumple la propiedad esNeutro
Genericidad publicvoidinvertirFilas (int f1,int f2){ invertirElem (f1,f2,obtenerNCol()-1); } privatevoidinvertirElem(intf1,int f2,int c){ if (c>=0){ invertirDos(f1,f2,c); invertirElem(f1,f2,c-1); } } privatevoidinvertirDos(int f1,int f2, int c){ Elemento e = m[f1,c]; m[f1,c] = m[f2,c]; m[f2,c] = e; }
Genericidad publicbooleanesRayada (){ returnesRay (obtenerNFil()-1); } privatebooleanesRay(int f){ boolean es = true; if (f>=0) es = todosIguales(f,obtenerNCol()-1) && esRay (f-1); return es; } privatevoidtodosIguales(intf,int c){ boolean es = true; if(c>0) es = m[f,c]==m[f,c-1] && todosIguales(f,c-1); return es; }
Genericidad publicbooleantodosNeutros (){ returntodosNeu (obtenerNFil()-1); } privatebooleantodosNeu(int f){ boolean es = true; if (f>=0) es = filaNeutros(f,obtenerNCol()-1) && todosNeu (f-1); return es; } privatevoidfilaNeutros(intf,int c){ boolean es = true; if(c>=0) es = m[f,c].esNeutro() && filaNeutros(f,c-1); return es; }
Genericidad abstractclass Elemento { abstractpublicbooleanesNeutro(); } class Pixel extends Elemento { privateintr,b,g; … publicbooleanesNeutro(){ return r==b& b==g; } } classRacional extendsElemento { privateintnum,den; … publicbooleanesNeutro(){ returnnum==0; } }