Programación Orientada a Objetos

Programación Orientada a
Objetos
Interfaces, Contenedores y
Casting
Angela C. Carrillo Ramos
Interface
Define un tipo con un contrato abstracto
Una interface puede heredar de otras
interfaces
interface Y extends Z{
}
// La clase que implemente Y debe
implementar los métodos de Y y de Z
1
Interface
Interface nomInterface{
nomInterface{
… //firmas de métodos y constantes
}
class nomClase implements nomInterface{
…
}
Interface
x = new nomInterface();
nomInterface x;
ERROR!!!
No es una instancia. Válido!!!
x= new nomClase();
nomClase implementa
nomInterface. Válido!!!
2
Ejemplo
Interface Iterator{…}
Class Vector implements Iterator{…}
x = new Iterator();
//Error!!!
Iterator x;
x= new Vector()
Vector();; // Pueden invocarse los
métodos cuyas firmas estén descritas en
Iterator.. No métodos propios y definidos
Iterator
únicamente en Vector
Vector..
Colecciones
También llamadas Contenedores
Permiten almacenar y organizar
objetos de forma útil para un acceso
eficiente..
eficiente
Almacenan objetos de tipo Object
Paquete:: java.
Paquete
java.util
Son interfaces que heredan de la
interface “Collection”
3
Contenedores
Collection: add, remove, size, iterator
Collection:
Set:: Contenedor sin elementos
Set
repetidos
SortedSet:: Es un Set cuyos
SortedSet
elementos están ordenados
List:: Colección cuyos elementos
List
permanecen en un orden particular
…
Contenedores
Iterator: Interface que devuelve
Iterator:
elementos de una colección, de uno
en uno
public boolean hasNext()
public Object next()
public void remove
4
Contenedores
public void eliminaCadenasLargas
(Collection col, int longMax){
Iterator it = col.iterator();
while (it.hasNext()){
String cad = (String) it.next();
if (cad.length() > longMax)
it.remove();
}
Contenedores
ListIterator
Extiende Iterator con métodos como
hasPrevious y previous
ListIterator it = list.listIterator(list.size());
while (it.hasPrevious()){
Object obj = it.previous();
// utilizar el objeto
}
5
Contenedores
Interface List
Extiende Collection
Va de la posición 0 a la list.size
Al adicionar un elemento, queda al final
de la lista
Si se elimina un elemento, se comprime
la lista
Contenedores
Interface List
public boolean get (int indice)
public boolean set (int ind, Object elem)
public boolean add (int ind, Object elem)
public boolean remove (int indice)
public int indexOf (Object elem)
public int lastIndexOf (Object elem)
public List subList(int min, int max)
public ListIterator listIterator(int indice)
public ListIterator listIterator()
6
Contenedores
ArrayList
Lista que almacena los elementos en
un arreglo
public ArrayList()
public ArrayList(int capacidadInicial)
public ArrayList(Collection col)
public void trimToSize()
public void ensureCapacity (int
capacidadMin)
Contenedores
Vector
public Vector (int capIni, int incremento)
public Vector (int capIni)
public Vector ()
public Vector(Collection col)
public final void addElement(Object elem)
public final void insertElementAt(Object
elem, int indice)
public final void setElementAt (Object
elem, int indice)
7
Contenedores
Vector
public final void removeElementAt (int
indice)
public final boolean removeElement
(Object elem)
public final void removeAllElements()
public final Object elementAt(int indice)
public final int indexOf(Object elem, int
indice)
Contenedores
Vector
public final int lastIndexOf (Object elem, int
index)
public final Object firstElement()
public final Object lastElement()
public final int capacity()
8
¿Cómo almacenar y recuperar un
elemento?
Clase obj1, obj2=new Clase();
Vector v = new Vector();
Para almacenar:
v.addElement(objeto);
Para recuperar:
obj1= (Clase) v.elementAt(pos);
Para saber de qué tipo es:
if (obj1 instanceOf Clase)
If (v.elementAt(pos) instanceOf Clase)
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
9
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));
10
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
igualdad..
number
El parámetro puede ser de tipo : byte, char,
double, float, int, long, short.
short.
Les operaciones posibles son la asignación,
suma, resta, multiplicación, etc
etc..
11
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;
}
}
12