Programación Orientada a Objetos Templates (Plantillas) en JAVA Angela C. Carrillo Ramos Templates (Plantillas) Mecanismo que permite definir clases que son parametrizadas por tipos, lo que hace estas clases polimórficas polimórficas.. Un template de Lista permite generar cualquier lista, lista, mientras que una Lista de Object es una lista de cualquier tipo de objetos.. objetos Con los templates no hay pérdida de tipos 1 Templates (Plantillas) Stack stack=new Stack(); stack.push(“la casa de la loma"); ... Iterator it=stack.iterator(); while (it.hasNext()) System.out.println(((String) System.out.println(( (String)it.next()).substring(9)); it.next()).substring(9)); Templates (Plantillas) Stack<String> stack=new Stack<String> Stack<String> Stack <String>(); (); stack.push(“la casa de la loma"); ... Iterator<String> Iterator <String> it=stack.iterator(); while (it.hasNext()) System.out.println(it.next().substring(9)); 2 Templates (Plantillas) class Sorter<Object Sorter<Object key1, key1,String String key2> { ... } Sorter<Object Sorter< Object,,Object Object> > // ilegal, Object no hereda de String Sorter<Object Sorter< Object,,String String> > // legal Sorter<String Sorter< String,,String String> > // legal, String hereda de Object Sorter<Integer Sorter< Integer,,Integer Integer> > // ilegal, Integer no hereda de String Sorter<int Sorter< int,,String String> > // ilegal, int es un tipo primitivo y no hereda de Object Templates (Plantillas) type Para indicar que el paràmetro puede ser de cualquier tipo primitivo o de una clase Los ùnicos operadores vàlidos son la asignaciòn y la igualdad. number El paràmetro puede ser de tipo : byte, char, double, float, int, long, short. Les operaciones posibles son la asignaciòn, suma, resta, multiplicaciòn, etc. 3 Templates (Plantillas) class Sum<number Sum<number Value> { abstract Value f(Value value); Value sum(Value debut,Value fin) { Value res=0; for(Value i=debut;i<=fin;i+=1) res+=f(i); return res; } } Templates (Plantillas) class Ref<Object Item> { Item items[]; Item get(int i) { if (i<0) // ilegal return “ningún valor"; } } else return items[i]; class Ref<Object Item> { Item items[]; Item get (int i) { if (i<0) // legal return (Item)(Object) “ningún valor"; else return items[i]; } } 4