PROGRAMACIÓN ORIENTADA A OBJETOS€¦ · CURSO .PHP PROGRAMACIÓN ORIENTADA A OBJETOS Autor: Jon Vadillo
Programación Orientada a Objetos con Java: Anexos
Transcript of Programación Orientada a Objetos con Java: Anexos
![Page 1: Programación Orientada a Objetos con Java: Anexos](https://reader031.fdocument.pub/reader031/viewer/2022012410/616a55e911a7b741a351608c/html5/thumbnails/1.jpg)
ProgramaciónProgramación Orientada a Objetos con Java: Anexos
Ingeniería del Software IICurso 2010/2011
Sergio Ilarri ArtigasSergio Ilarri [email protected]
Parte del material está extraído de JavaSun y Java Tutorial:Copyright 1994-2007 Sun Microsystems, Inc. All Rights Reserved.
![Page 2: Programación Orientada a Objetos con Java: Anexos](https://reader031.fdocument.pub/reader031/viewer/2022012410/616a55e911a7b741a351608c/html5/thumbnails/2.jpg)
Introducción
Este anexo contiene algunos otros temas importantes del lenguaje Java
Junto con el otro bloque de Junto con el otro bloque de transparencias sobre Java, se pretende d i t d ió l l j ldar una introducción al lenguaje en lugar de cubrir todos los aspectos del mismo
Por supuesto, se recomienda ampliar los conocimientos con otras fuentes yconocimientos con otras fuentes… y practicando
![Page 3: Programación Orientada a Objetos con Java: Anexos](https://reader031.fdocument.pub/reader031/viewer/2022012410/616a55e911a7b741a351608c/html5/thumbnails/3.jpg)
Índice Detallado (I)
Anexo I: Algunos Paquetes y Clases g q yde Uso Común
Clase Object Clase Object Paquetes: java.lang, java.io, java.util, java.net Manejo de Cadenas Clases NuméricasClases Numéricas Arrays
![Page 4: Programación Orientada a Objetos con Java: Anexos](https://reader031.fdocument.pub/reader031/viewer/2022012410/616a55e911a7b741a351608c/html5/thumbnails/4.jpg)
Índice Detallado (II)
Anexo II: Flujos de E/Sj / Conceptos básicos Clases básicas (paquete java io) Clases básicas (paquete java.io) Ejemplo de flujo de bytes/caracteres Flujos con buffer E/S por línea de comandosp Flujos de objetos Objetos File Objetos File
![Page 5: Programación Orientada a Objetos con Java: Anexos](https://reader031.fdocument.pub/reader031/viewer/2022012410/616a55e911a7b741a351608c/html5/thumbnails/5.jpg)
A IAnexo I:Algunos Paquetes y g q yClases de Uso Común
![Page 6: Programación Orientada a Objetos con Java: Anexos](https://reader031.fdocument.pub/reader031/viewer/2022012410/616a55e911a7b741a351608c/html5/thumbnails/6.jpg)
Clase Object (I) protected Object clone()
Interface Cloneable Interface Cloneable(no implementado por Object)
CloneNotSupportedExceptionCloneNotSupportedException Comportamiento por defecto en Object:
Copia las variables miembro
Shallow copy vs. deep copy
aCloneableObject.clone();
![Page 7: Programación Orientada a Objetos con Java: Anexos](https://reader031.fdocument.pub/reader031/viewer/2022012410/616a55e911a7b741a351608c/html5/thumbnails/7.jpg)
Clase Object (II)public class Stack implements Cloneable { private Vector items; …protected Object clone() {
try {try { Stack s = (Stack) super.clone(); s.items = (Vector) items.clone(); return s;
} t h (Cl N tS t dE ti ) {catch (CloneNotSupportedException e) {throw new InternalError();
} }}
}
![Page 8: Programación Orientada a Objetos con Java: Anexos](https://reader031.fdocument.pub/reader031/viewer/2022012410/616a55e911a7b741a351608c/html5/thumbnails/8.jpg)
Clase Object (III)
Equals
Integer one = new Integer(1), anotherOne = new Integer(1);
if (one.equals(anotherOne))
System.out.println("objects are equal");
-Compara las identidades de los objetos (implementación por defecto)-A veces, compara los contenidos-¿Qué hacer si no nos vale el equals por defecto?¿Qué hacer si no nos vale el equals por defecto?
![Page 9: Programación Orientada a Objetos con Java: Anexos](https://reader031.fdocument.pub/reader031/viewer/2022012410/616a55e911a7b741a351608c/html5/thumbnails/9.jpg)
Clase Object (IV)
hashCode (cods. no necesariamente únicos) finalize
toString toStringSystem.out.println(Thread.currentThread().toString());
Thread[main,5,main]
![Page 10: Programación Orientada a Objetos con Java: Anexos](https://reader031.fdocument.pub/reader031/viewer/2022012410/616a55e911a7b741a351608c/html5/thumbnails/10.jpg)
Clase Object (V) getClass String.class or Class.forName("String")
void PrintClassName(Object obj) { System.out.println("The Object's class is “ +
obj.getClass().getName()); }}
Obj Of(Obj bj) {Object createNewInstanceOf(Object obj) { return obj.getClass().newInstance();
}}
![Page 11: Programación Orientada a Objetos con Java: Anexos](https://reader031.fdocument.pub/reader031/viewer/2022012410/616a55e911a7b741a351608c/html5/thumbnails/11.jpg)
Clase Object (VI)
notify, notifyAll, wait
![Page 12: Programación Orientada a Objetos con Java: Anexos](https://reader031.fdocument.pub/reader031/viewer/2022012410/616a55e911a7b741a351608c/html5/thumbnails/12.jpg)
Paquete java.lang Class (metaclase)
Object (raíz de la jerarquía) Object (raíz de la jerarquía) Runtime (entorno de ejecución)
SecurityManager (políticas seguridad) SecurityManager (políticas seguridad) String
System: in out getProperties() gc() System: in, out, getProperties(), gc() Thread
Throwable (construcción de excepciones) Throwable (construcción de excepciones) ...
![Page 13: Programación Orientada a Objetos con Java: Anexos](https://reader031.fdocument.pub/reader031/viewer/2022012410/616a55e911a7b741a351608c/html5/thumbnails/13.jpg)
Paquete java.io
Tipos de streams: bytes, caracteres, con/sin buffer, acceso aleatorio, etc.
Clase File, operaciones sobre directorios
![Page 14: Programación Orientada a Objetos con Java: Anexos](https://reader031.fdocument.pub/reader031/viewer/2022012410/616a55e911a7b741a351608c/html5/thumbnails/14.jpg)
Paquete java.util
Dictionary, Hashtable, Stack, Vector Observer/Observable
Random Random StringTokenizerg Date
![Page 15: Programación Orientada a Objetos con Java: Anexos](https://reader031.fdocument.pub/reader031/viewer/2022012410/616a55e911a7b741a351608c/html5/thumbnails/15.jpg)
Paquete java.net
Sockets InetAddress
![Page 16: Programación Orientada a Objetos con Java: Anexos](https://reader031.fdocument.pub/reader031/viewer/2022012410/616a55e911a7b741a351608c/html5/thumbnails/16.jpg)
Manejo de Cadenas (I)
Clase String: cadenas estáticas (compartibles) Clase StringBuffer: cadenas dinámicaspublic class StringsDemo { p g
public static void main(String[] args) { String palindrome = "Dot saw I was Tod"; int len palindrome length();int len = palindrome.length(); StringBuffer dest = new StringBuffer(len); for (int i = (len - 1); i >= 0; i--) {
dest.append(palindrome.charAt(i)); } System.out.println(dest.toString());System.out.println(dest.toString());
} }
![Page 17: Programación Orientada a Objetos con Java: Anexos](https://reader031.fdocument.pub/reader031/viewer/2022012410/616a55e911a7b741a351608c/html5/thumbnails/17.jpg)
Manejo de Cadenas (II)
S i li d " d"String palindrome = "Dot saw I was Tod";
h [] h ll A { 'h' ' ' 'l' 'l' ' '}char[] helloArray = { 'h', 'e', 'l', 'l', 'o'};String helloString = new String(helloArray); S t t i tl (h ll St i )System.out.println(helloString);
String palindrome "Dot saw I was Tod";String palindrome = "Dot saw I was Tod"; int len = palindrome.length(); StringBuffer dest = new StringBuffer(len);StringBuffer dest = new StringBuffer(len);
![Page 18: Programación Orientada a Objetos con Java: Anexos](https://reader031.fdocument.pub/reader031/viewer/2022012410/616a55e911a7b741a351608c/html5/thumbnails/18.jpg)
Manejo de Cadenas (III)
(StringBuffer)
![Page 19: Programación Orientada a Objetos con Java: Anexos](https://reader031.fdocument.pub/reader031/viewer/2022012410/616a55e911a7b741a351608c/html5/thumbnails/19.jpg)
Manejo de Cadenas (IV)
==, != compara referenciasSi no se especifica, hasta el final de la cadena
str1.equals(str2)
![Page 20: Programación Orientada a Objetos con Java: Anexos](https://reader031.fdocument.pub/reader031/viewer/2022012410/616a55e911a7b741a351608c/html5/thumbnails/20.jpg)
Manejo de Cadenas (V)
indexOf(int/String) lastIndexOf(int/String)
indexOf(int/String int)String
indexOf(int/String, int) lastIndexOf(int/String, int)( / g, )
d( h ) append(char) insert(int, String) StringBuffer( , g) setCharAt(int, char)
![Page 21: Programación Orientada a Objetos con Java: Anexos](https://reader031.fdocument.pub/reader031/viewer/2022012410/616a55e911a7b741a351608c/html5/thumbnails/21.jpg)
Manejo de Cadenas (VI)
String toString() Object, Boolean, Integer, etc.
String valueOf( ) String.valueOf(…)System.out.println(String.valueOf(Math.PI));
Cl l Of( ) <aClass>.valueOf(…)Float pi = Float.valueOf(piStr);
+ (sobrecargado) concatena cadenas:i l (" " " i ")System.out.println("con" + cat + "enation");
![Page 22: Programación Orientada a Objetos con Java: Anexos](https://reader031.fdocument.pub/reader031/viewer/2022012410/616a55e911a7b741a351608c/html5/thumbnails/22.jpg)
Clases Numéricas
Clase abstracta
![Page 23: Programación Orientada a Objetos con Java: Anexos](https://reader031.fdocument.pub/reader031/viewer/2022012410/616a55e911a7b741a351608c/html5/thumbnails/23.jpg)
Arrays (I)
![Page 24: Programación Orientada a Objetos con Java: Anexos](https://reader031.fdocument.pub/reader031/viewer/2022012410/616a55e911a7b741a351608c/html5/thumbnails/24.jpg)
Arrays (II)public class ArrayDemo {
bli i id i (S i [] ) {public static void main(String[] args) { int[] anArray; A i t[10]
Reserva de espacioanArray = new int[10];for (int i = 0; i < anArray.length; i++) {
A [i] ianArray[i] = i; System.out.print(anArray[i] + " "); } System out println();System.out.println();
} }}
}
![Page 25: Programación Orientada a Objetos con Java: Anexos](https://reader031.fdocument.pub/reader031/viewer/2022012410/616a55e911a7b741a351608c/html5/thumbnails/25.jpg)
Arrays (III)boolean[] answers =
{ f l f l }{ true, false, true, true, false };
St i [][] t {String[][] cartoons = { {"Flintstones", "Fred", "Wilma", "Pebbles”}, {"R bbl " "B " "B tt " "B B "}{"Rubbles", "Barney", "Betty", "Bam Bam"}, {"Scooby Doo Gang", "Scooby Doo", "Shaggy}
};};
![Page 26: Programación Orientada a Objetos con Java: Anexos](https://reader031.fdocument.pub/reader031/viewer/2022012410/616a55e911a7b741a351608c/html5/thumbnails/26.jpg)
Arrays (IV)
dest: creado previamente
public static void arraycopy(Object source,public static void arraycopy(Object source, int srcIndex, Object dest, int destIndex, int length)
![Page 27: Programación Orientada a Objetos con Java: Anexos](https://reader031.fdocument.pub/reader031/viewer/2022012410/616a55e911a7b741a351608c/html5/thumbnails/27.jpg)
Arrays (V)
Si necesitamos más espaciopint[] v = new int[5];…int[] v1 = v;v = new int[20];for(int i = 0; i < 5; i++)v[i] = v1[i];
![Page 28: Programación Orientada a Objetos con Java: Anexos](https://reader031.fdocument.pub/reader031/viewer/2022012410/616a55e911a7b741a351608c/html5/thumbnails/28.jpg)
Anexo II: Flujos de E/SAnexo II: Flujos de E/S
![Page 29: Programación Orientada a Objetos con Java: Anexos](https://reader031.fdocument.pub/reader031/viewer/2022012410/616a55e911a7b741a351608c/html5/thumbnails/29.jpg)
Flujos de Entrada y de Salida
![Page 30: Programación Orientada a Objetos con Java: Anexos](https://reader031.fdocument.pub/reader031/viewer/2022012410/616a55e911a7b741a351608c/html5/thumbnails/30.jpg)
Clases Básicas en java.io
Clases abstractas
![Page 31: Programación Orientada a Objetos con Java: Anexos](https://reader031.fdocument.pub/reader031/viewer/2022012410/616a55e911a7b741a351608c/html5/thumbnails/31.jpg)
Lectura
![Page 32: Programación Orientada a Objetos con Java: Anexos](https://reader031.fdocument.pub/reader031/viewer/2022012410/616a55e911a7b741a351608c/html5/thumbnails/32.jpg)
Escritura
![Page 33: Programación Orientada a Objetos con Java: Anexos](https://reader031.fdocument.pub/reader031/viewer/2022012410/616a55e911a7b741a351608c/html5/thumbnails/33.jpg)
Ejemplo de Flujos de j p jBytespublic class CopyBytes {
public static void main(String[] args) throws IOException {FileInputStream in = null;FileInputStream in = null;FileOutputStream out = null;try {
in = new FileInputStream("xanadu.txt");out = new FileOutputStream("outagain.txt");p ( g );int c;
while ((c = in.read()) != -1) {out.write(c);
Devuelve un entero, no un byte:-1 indica “fin de flujo”
}
} finally {if (in != null) {
in close()in.close();}if (out != null) {
out.close();}
Cerrar los flujos para evitar “memory leaks”
}}
}}
![Page 34: Programación Orientada a Objetos con Java: Anexos](https://reader031.fdocument.pub/reader031/viewer/2022012410/616a55e911a7b741a351608c/html5/thumbnails/34.jpg)
Ejemplo de Flujos de j p jCaracterespublic static void main(String[] args) throws IOException {
FileReader inputStream = null;FileWriter outputStream = null;
Carácter a carácter
FileWriter outputStream = null;
try {inputStream = new FileReader("xanadu.txt");outputStream = new FileWriter("characteroutput.txt");p ( p );
int c;while ((c = inputStream.read()) != -1) {
outputStream.write(c);}
} finally {if (inputStream != null) {
inputStream.close();}}if (outputStream != null) {
outputStream.close();}
}}}
}
![Page 35: Programación Orientada a Objetos con Java: Anexos](https://reader031.fdocument.pub/reader031/viewer/2022012410/616a55e911a7b741a351608c/html5/thumbnails/35.jpg)
Ejemplo de Flujos de j p jCaracteres
Línea a líneapublic class CopyLines {
public static void main(String[] args) throws IOException {BufferedReader inputStream = null;PrintWriter outputStream = null;
Línea a línea
PrintWriter outputStream = null;try {
inputStream = new BufferedReader(new FileReader("xanadu.txt"));
outputStream = pnew PrintWriter(new FileWriter("characteroutput.txt"));
String l;while ((l = inputStream.readLine()) != null) {
outputStream.println(l);}
} finally {if (inputStream != null) {
i tSt l ()inputStream.close();}if (outputStream != null) {
outputStream.close();}}
}}
}
![Page 36: Programación Orientada a Objetos con Java: Anexos](https://reader031.fdocument.pub/reader031/viewer/2022012410/616a55e911a7b741a351608c/html5/thumbnails/36.jpg)
Flujos con BufferinputStream =
new BufferedReader(new FileReader("xanadu.txt"));outputStream =
new BufferedWriter(new FileWriter("characteroutput.txt"));
•BufferedInputStream, BufferedOutputStream:BufferedInputStream, BufferedOutputStream: •flujos de bytes con buffer
•BufferedReader BufferedWriter:•BufferedReader, BufferedWriter: •flujos de caracteres con buffer
Mét d fl sh ibilid d d t fl hMétodo flush, posibilidad de autoflush
![Page 37: Programación Orientada a Objetos con Java: Anexos](https://reader031.fdocument.pub/reader031/viewer/2022012410/616a55e911a7b741a351608c/html5/thumbnails/37.jpg)
Entrada/Salida por Línea de / pComandos Flujos estándar:
S t i System.in System.out System err
PrintStream
InputStream
System.err
Aunque uno esperaría que fueran flujos de caracteres, son flujos de bytes (por razones , j y (phistóricas)
Para usar la entrada estándar como flujo de caracteres: InputStreamReader cin = new InputStreamReader(System.in);
![Page 38: Programación Orientada a Objetos con Java: Anexos](https://reader031.fdocument.pub/reader031/viewer/2022012410/616a55e911a7b741a351608c/html5/thumbnails/38.jpg)
Ejemplo de Flujos j p jde Datos (I)static final String dataFile = "invoicedata";
static final double[] prices = { 19.99, 9.99, 15.99, 3.99, 4.99 };static final int[] units = { 12, 8, 13, 29, 50 };static final String[] descs = { "Java T-shirt",
"Java Mug""Java Mug","Duke Juggling Dolls","Java Pin","Java Key Chain" };Java Key Chain };
out = new DataOutputStream(newBufferedOutputStream(new FileOutputStream(dataFile)));
for (int i = 0; i < prices.length; i ++) {out.writeDouble(prices[i]);out.writeInt(units[i]);out writeUTF(descs[i]);out.writeUTF(descs[i]);
}
![Page 39: Programación Orientada a Objetos con Java: Anexos](https://reader031.fdocument.pub/reader031/viewer/2022012410/616a55e911a7b741a351608c/html5/thumbnails/39.jpg)
Ejemplo de Flujos j p jde Datos (II)in = new DataInputStream(new
BufferedInputStream(new FileInputStream(dataFile)));
double price;int unit;String desc;d bl t t l 0 0double total = 0.0;
while (true) {try {
price = in.readDouble();unit = in.readInt();desc = in.readUTF();System.out.format("You ordered %d units of %s at $%.2f%n",
unit, desc, price);total += unit * price;
}} catch (EOFException e) {
Forma de detectar el final de ficherocon data streams
}
![Page 40: Programación Orientada a Objetos con Java: Anexos](https://reader031.fdocument.pub/reader031/viewer/2022012410/616a55e911a7b741a351608c/html5/thumbnails/40.jpg)
Flujos de Objetos (I)
•Para clases que implementan el interface Serializable•Para clases que implementan el interface Serializable•ObjectInputStream, ObjectOutputStream•Implementan los interfaces ObjectInput y ObjectOutput,
bi t f d D t I t D t O t tsubinterfaces de DataInput y DataOutput• Por tanto, pueden contener tanto objetos como valores primitivos
![Page 41: Programación Orientada a Objetos con Java: Anexos](https://reader031.fdocument.pub/reader031/viewer/2022012410/616a55e911a7b741a351608c/html5/thumbnails/41.jpg)
Flujos de Objetos (II)Object ob = new Object();out.writeObject(ob);j ( );out.writeObject(ob);
Object ob1 = in.readObject();Object ob1 in.readObject();Object ob2 = in.readObject();
ob1 y ob2 son referencias al mismo objeto:• Un flujo sólo puede contener una copia del objeto, aunque puede contener
ú f écualquier número de referencias a él• Cuando los leamos de nuevo, ambos se referirán al mismo objeto
![Page 42: Programación Orientada a Objetos con Java: Anexos](https://reader031.fdocument.pub/reader031/viewer/2022012410/616a55e911a7b741a351608c/html5/thumbnails/42.jpg)
Objetos File
Representan nombres de fichero File a = new File("xanadu.txt");
File b = new File(".." + File.separator + "examples" + File.separator + "xanadu.txt");+ File.separator + xanadu.txt );
File.compareTo() identifica a y b como diferentes
![Page 43: Programación Orientada a Objetos con Java: Anexos](https://reader031.fdocument.pub/reader031/viewer/2022012410/616a55e911a7b741a351608c/html5/thumbnails/43.jpg)
Ejemplo de Uso de File (I)public class FileStuff {
public static void main(String args[]) throws IOException {
out.print("File system roots: ");for (File root : File.listRoots()) {
out.format("%s ", root);}}out.println();
for (String fileName : args) {out.format("%n------%nnew File(%s)%n", fileName);File f = new File(fileName);out.format("toString(): %s%n", f);out.format("exists(): %b%n", f.exists());out.format("lastModified(): %tc%n", f.lastModified());out.format("isFile(): %b%n", f.isFile());out.format("isDirectory(): %b%n", f.isDirectory());out.format("isHidden(): %b%n", f.isHidden());…
![Page 44: Programación Orientada a Objetos con Java: Anexos](https://reader031.fdocument.pub/reader031/viewer/2022012410/616a55e911a7b741a351608c/html5/thumbnails/44.jpg)
Ejemplo de Uso de File (II)…
out.format("canRead(): %b%n", f.canRead());out format("canWrite(): %b%n" f canWrite());out.format("canWrite(): %b%n", f.canWrite());out.format("canExecute(): %b%n", f.canExecute());out.format("isAbsolute(): %b%n", f.isAbsolute());out.format("length(): %d%n", f.length());
t f t(" tN () % % " f tN ())out.format("getName(): %s%n", f.getName());out.format("getPath(): %s%n", f.getPath());out.format("getAbsolutePath(): %s%n", f.getAbsolutePath());out.format("getCanonicalPath(): %s%n", f.getCanonicalPath());out.format("getParent(): %s%n", f.getParent());out.format("toURI: %s%n", f.toURI());
}}
}
Otros métodos: delete, deleteOnExit, setLastModified, renameTo, mkdir, mkdirs, etc.Métodos estáticos: createTempFile, etc.
![Page 45: Programación Orientada a Objetos con Java: Anexos](https://reader031.fdocument.pub/reader031/viewer/2022012410/616a55e911a7b741a351608c/html5/thumbnails/45.jpg)
Ejemplo: Copiar un Ficherovoid copy(File src, File dst) throws IOException {
InputStream in = new FileInputStream(src);OutputStream out = new FileOutputStream(dst);
// Transfer bytes from in to outbyte[] buf new byte[1024];byte[] buf = new byte[1024];int len;while ((len = in.read(buf)) > 0) {
out.write(buf, 0, len);out.write(buf, 0, len);}in.close();out.close();
}
![Page 46: Programación Orientada a Objetos con Java: Anexos](https://reader031.fdocument.pub/reader031/viewer/2022012410/616a55e911a7b741a351608c/html5/thumbnails/46.jpg)
Ficheros de Acceso Aleatoriotry {
File f = new File("filename");RandomAccessFile raf new RandomAccessFile(f "rw");RandomAccessFile raf = new RandomAccessFile(f, "rw");
// Read a characterchar ch = raf.readChar();
// Seek to end of fileraf.seek(f.length());
// Append to the endraf.writeChars("aString");raf.close();
} catch (IOException e) {}
Otros métodos: int skipBytes(int), void seek(long), long getFilePointer(), etc.
http://www.exampledepot.com/egs/java.io/ReadFromStdIn.html?l=rel
p y ( ), ( g), g g (),