TÉCNICAS DE
PROGRAMACIÓN
Lenguaje Java
Daniel Finol
Daniel Finol
1
Clase No-Genérica
class NonGen {
Object ob;
NonGen(Object o) {
ob = o;
}
Object getob() {
return ob;
}
void showType() {
System.out.println("Type of ob is " +
ob.getClass().getName());
}
}
Daniel Finol
Clase No-Genérica
public class NonGenDemo {
public static void main(String args[]) {
NonGen integerObject;
integerObject = new NonGen(88);
integerObject.showType();
int v = (Integer) integerObject.getob();
System.out.println("value: " + v);
NonGen strOb = new NonGen("Non-Generics Test");
strOb.showType();
String str = (String) strOb.getob();
System.out.println("value: " + str);
integerObject = strOb;
v = (Integer) integerObject.getob();
}
}
Daniel Finol
Clase Genérica
class Gen<T> {
T ob; // declare an object of type T
Gen(T o) {
ob = o;
}
T getob() {
return ob;
}
void showType() {
System.out.println("Type of T is " +
ob.getClass().getName());
}
}
Daniel Finol
Demo: Clase Genérica
public class GenDemo {
public static void main(String args[]) {
Gen<Integer> iOb;
iOb = new Gen<Integer>(88);
iOb.showType();
int v = iOb.getob();
System.out.println("value: " + v);
System.out.println();
Gen<String> strOb = new Gen<String>("Generics
Test");
strOb.showType();
}
}
String str = strOb.getob();
System.out.println("value: " + str);
Daniel Finol
Clase Genérica: Dos Argumentos de Tipo
class TwoGen<T, V> {
T ob1;
V ob2;
TwoGen(T o1, V o2) {
ob1 = o1;
ob2 = o2;
}
void showTypes() {
System.out.println("Type of T is " + ob1.getClass().getName());
System.out.println("Type of V is " + ob2.getClass().getName());
}
T getob1() {
return ob1;
}
V getob2() {
return ob2;
}
}
public class SimpGen {
public static void main(String args[]) {
TwoGen<Integer, String> tgObj = new TwoGen<Integer, String>(
88, "Generics");
tgObj.showTypes();
int v = tgObj.getob1();
System.out.println("value: " + v);
String str = tgObj.getob2();
System.out.println("value: " + str);
Daniel Finol
}}
Clase Genérica: Argumento Acotado
class Stats<T extends Number> {
T[] nums;
Stats(T[] o) {
nums = o;
}
double average() {
double sum = 0.0;
for (int i = 0; i < nums.length; i++)
sum += nums[i].doubleValue();
}
}
return sum / nums.length;
public class BoundsDemo {
public static void main(String args[]) {
Integer inums[] = { 1, 2, 3, 4, 5 };
Stats<Integer> iob = new Stats<Integer>(inums);
double v = iob.average();
System.out.println("iob average is " + v);
}}
Double dnums[] = { 1.1, 2.2, 3.3, 4.4, 5.5 };
Stats<Double> dob = new Stats<Double>(dnums);
double w = dob.average();
System.out.println("dob average is " + w);
Daniel Finol
Método Genérico
public class GenMethDemo {
// Determine if an object is in an array.
static <T, V extends T> boolean isIn(T x, V[] y)
{
for(int i=0; i < y.length; i++)
if(x.equals(y[i])) return true;
}
return false;
Daniel Finol
Interfaz Genérica
public class GenIFDemo {
public static void main(String args[]) {
Integer inums[] = {3, 6, 2, 8, 6 };
Character chs[] = {'b', 'r', 'p', 'w' };
MyClass<Integer> iob = new MyClass<Integer>(i
nums);
MyClass<Character> cob = new MyClass<Characte
r>(chs);
System.out.println("Max value in inums: " + i
ob.max());
System.out.println("Min value in inums: " + i
ob.min());
System.out.println("Max value in chs: " + cob
.max());
System.out.println("Min value in chs: " + cob
.min());
}
}
Daniel Finol
Interfaz Genérica
interface MinMax<T extends Comparable<T>> {
T min();
T max();
}
class MyClass<T extends Comparable<T>> implements MinMax<T> {
T[] vals;
MyClass(T[] o) { vals = o; }
public T min() {
T v = vals[0];
for(int i=1; i < vals.length; i++)
if(vals[i].compareTo(v) < 0) v = vals[i];
}
return v;
public T max() {
T v = vals[0];
for(int i=1; i < vals.length; i++)
if(vals[i].compareTo(v) > 0) v = vals[i];
}
}
return v;
Daniel Finol
Constructor Genérico
class GenCons {
private double val;
<T extends Number> GenCons(T arg) {
val = arg.doubleValue();
}
}
void showval() {
System.out.println("val: " + val);
}
public class GenConsDemo {
public static void main(String args[]) {
GenCons test = new GenCons(100);
GenCons test2 = new GenCons(123.5F);
}
}
test.showval();
test2.showval();
Daniel Finol
EJERCICIOS
Daniel Finol
12
Dado el siguiente código responda las siguientes preguntas:
class A implements IA {
public int i;
private int j;
protected int k;
public int met1() {}
private int met2() {}
protected int met3() {}
abstract public int met4();
}
class C extends A {}
class B extends A implements IB {}
interface IA {
public int met1();
}
interface IB {
public int metX();
}//Fin código pregunta 1
Daniel Finol
a) Indique cuáles sentencias producen error de compilación:
1) A a = new A();
2) A a = new IA();
3) A a = new B();
4) A a = new C();
5) B a = new A();
6) C c = new C();
b) Si a, b y c son variables ya correctamente inicializadas y cuyos tipos son
A, B y C, marque
con una X las sentencias1 que producen error de compilación:
1) System.out.println(b.i);
2) System.out.println(c.j);
3) System.out.println(c.k);
4) b.metX();
5) c.met1();
6) b.met2();
c) Indique todos los métodos que debe implementar la clase B.
d) Indique todos los métodos que debe implementar la clase C.
Daniel Finol
Escriba una función getBit(long p, int i) que
retorne el valor del i-ésimo bit de p
Daniel Finol
Implemente la interfaz Pila con una clase
PilaCaracteres que represente una pila
‘estática’ (es decir, de tamaño constante, nodinámica), a través de un arreglo de Character
cuyo tamaño se proveerá en el constructor.
Debe lanzar excepciones apropiadas si la pila
está vacía o llena
interface Pila<T> {
public T pop();
public void push(T o);
}
Daniel Finol
Daniel Finol
¿Cuáles métodos está obligada a implementar Clase1?
(abstractos)
Daniel Finol
Daniel Finol
Daniel Finol
Daniel Finol
Daniel Finol
¿Qué se imprime cuando “algunMetodoEstatico”
produce excepción?
¿Cuando no hay excepción?
Daniel Finol
Daniel Finol
Daniel Finol
Daniel Finol
Daniel Finol
¿Cuáles líneas añaden exactamente un objeto para el recolector de basura?
¿Cuál es el objeto más popular?
¿Cuántas y cuáles son sus referencias?
Daniel Finol
¿Cómo podemos crear una clase de manera que
sólo UNA instancia de ella se pueda crear, y
cuando se quiera usar una instancia de esa
clase siempre usará esa única instancia?
Daniel Finol
¿Cuáles compilan?
Daniel Finol
Descargar

public class