sábado, 11 de marzo de 2017

PROGRAMACIÓN ORIENTADA A OBJETOS


UNIDAD 1 ARREGLOS UNIDIMENSIONALES Y MULTIDIMENSIONALES


Después de leer la información para declarar y utilizar arreglos, observa el siguiente video: 


Posteriormente observar el siguiente video para trabajar con arreglos y métodos: https://www.youtube.com/watch?v=N3autujqEc4

NOTA: Observar vídeos y hacer comentario de como consideran los ejemplos que se muestran, si son difíciles, si son complejos o están bien explicados. Recuerden que pueden hacer aportaciones en la parte de comentarios. Se agradece cualquier tipo de información que gusten compartir con el grupo y que este dentro del tema.

Sábado 11-03-2017
CONSTRUCTORES Y DESTRUCTORES






NOTA: Analizar información del tema Constructores y destructores. Realizar apunte. Se califica como actividad para el próximo sábado 25/03/2017.


REVISAR LA SIGUIENTE LIGA DONDE ENCONTRARAS EL USO DE MÉTODOS Y FUNCIONES. 
https://www.programarya.com/Cursos/Java/Funciones


Después de consultar, realiza las prácticas que tiene como ejemplos. 



This, Clases Java

Hay ocasiones en las que resulta útil referirse al objeto desde el que se está ejecutando un método. En esas ocasiones se puede usar la referencia especial de objeto this, pero cuidado, siempre dentro de un método no estático.
Esta referencia se suele usar para pasar una referencia al objeto actual como un parámetro para otros métodos. La siguiente llamada añadiría el objeto a una relación de publicaciones prestadas:
this, clases javaSe usa this cuando un atributo está oculto por una declaración de variable o parámetro. Por ejemplo:
this, clases java

En el segundo constructor titulo y autor están ocultos por los parámetros con el mismo nombre. Para garantizar que accedemos al campo adecuado en lugar de al parámetro del método, le colocamos el prefijo this


Modificadores const y static.

Const

La palabra clave const se utiliza para modificar la declaración de un campo o variable local, y especifica que el valor del campo o variable no puede cambiar durante la ejecución del programa.
La sintaxis para la declaración de una constante es:
[atributos] [modificadores]const <tipo> <declaracion> ;
Donde los atributos y los modificadores son opcionales, y declaración es una lista de declaradores separados por comas.
Una declaración toma la forma:
<identificador> = <expresiónConstante> ;
expresiónConstante es una expresión que puede ser evaluada completamente en tiempo de compilación.

static

El modificador static se utiliza para declarar que un miembro pertenece a una clase (en lugar de pertenecer a un objeto de esa clase).

Observaciones:


  1. Una constante es implícitamente un miembro static ( es un error intentar declarar un miembro como const y static )
  2. Un miembro static no puede ser referenciado a través de una instancia (objeto); en lugar de eso es referenciado a través del nombre de la clase.
  3. Mientras que una instancia de una clase contiene una copia de todos los campos instancia de la clase, sólo hay una copia de cada campo estático.

Sobrecarga de métodos y de constructores 

La firma de un método es la combinación del tipo de dato que regresa, su nombre y su lista de argumentos. 

La sobrecarga de métodos es la creación de varios métodos con el mismo nombre pero con diferentes firmas y definiciones. Java utiliza el número y tipo de argumentos para seleccionar cuál definición de método ejecutar. 

Java diferencia los métodos sobrecargados con base en el número y tipo de argumentos que tiene el método y no por el tipo que devuelve. 

También existe la sobrecarga de constructores: Cuando en una clase existen constructores múltiples, se dice que hay sobrecarga de constructores.


Les dejo este link para que puedan consultar y realizar sus prácticas con el uso de ventanas (JOptionPane)--> http://codejavu.blogspot.mx/2013/12/ejemplo-joptionpane.html
03/04/2017.





Definición: Clase base y Clase derivada

La herencia es una propiedad esencial de la Programación Orientada a Objetos que consiste en la creación de nuevas clases a partir de otras ya existentes. Este término ha sido prestado de la Biología donde afirmamos que un niño tiene la cara de su padre, que ha heredado ciertas facetas físicas o del comportamiento de sus progenitores.

La herencia es la característica fundamental que distingue un lenguaje orientado a objetos, como el C++ o Java, de otro convencional como C, BASIC, etc. Java permite heredar a las clases características y conductas de una o varias clases denominadas base. Las clases que heredan de clases base se denominan derivadas, estas a su vez pueden ser clases bases para otras clases derivadas. Se establece así una clasificación jerárquica, similar a la existente en Biología con los animales y las plantas.

La herencia ofrece una ventaja importante, permite la reutilización del código. Una vez que una clase ha sido depurada y probada, el código fuente de dicha clase no necesita modificarse. Su funcionalidad se puede cambiar derivando una nueva clase que herede la funcionalidad de la clase base y le añada otros comportamientos. Reutilizando el código existente, el programador ahorra tiempo y dinero, ya que solamente tiene que verificar la nueva conducta que proporciona la clase derivada.

La programación en los entornos gráficos, en particular Windows, con el lenguaje C++, es un ejemplo ilustrativo. Los compiladores como los de Borland y Microsoft proporcionan librerías cuyas clases describen el aspecto y la conducta de las ventanas, controles, menús, etc. Una de estas clases denominada TWindow describe el aspecto y la conducta de una ventana, tiene una función miembro denominada Paint, que no dibuja nada en el área de trabajo de la misma. Definiendo una clase derivada de TWindow, podemos redefinir en ella la función Paint para que dibuje una figura. Aprovechamos de este modo la ingente cantidad y complejidad del código necesario para crear una ventana en un entorno gráfico. Solamente, tendremos que añadir en la clase derivada el código necesario para dibujar un rectángulo, una elipse, etc.

En el lenguaje Java, todas las clases derivan implícitamente de la clase base Object, por lo que heredan las funciones miembro definidas en dicha clase. Las clases derivadas pueden redefinir algunas de estas funciones miembro como toString y definir otras nuevas.
Los programadores crean clases base:

  1. Cuando se dan cuenta que diversos tipos tienen algo en común, por ejemplo en el juego del ajedrez peones, alfiles, rey, reina, caballos y torres, son piezas del juego. Creamos, por tanto, una clase base y derivamos cada pieza individual a partir de dicha clase base.
  2. Cuando se precisa ampliar la funcionalidad de un programa sin tener que modificar el código existente.


La herencia es un mecanismo que permite la definición de una clase a partir de la definición de otra ya existente. La herencia permite compartir automáticamente métodos y datos entre clases, subclases y objetos.
La herencia está fuertemente ligada a la reutilización del código en la POO. Esto es, el código de cualquiera de las clases puede ser utilizado sin más que crear una clase derivada de ella, o bien una subclase.

Hay dos tipos de herencia: Herencia Simple y Herencia Múltiple. La primera indica que se pueden definir nuevas clases solamente a partir de una clase inicial mientras que la segunda indica que se pueden definir nuevas clases a partir de dos o más clases iniciales. Java sólo permite herencia simple.

Herencia Múltiple

Todos sabemos que la herencia es un mecanismo propio de la programación orientada a objetos POO. Nos permite crear clases a partir de otra, las cuales las unen vínculos sumamente estrechos, casi de familia. Es por ello que se llama herencia.

Si buscamos modelar nuestras clases u objetos como propios de la realidad, todos los conceptos de la orientación a objetos nos serán muy fácil de implementar mientras programamos.



La reutilización de código se refiere al comportamiento y a las técnicas que garantizan que una parte o la totalidad de un programa informático existente se pueda emplear en la construcción de otro programa. De esta forma se aprovecha el trabajo anterior, se economiza tiempo, y se reduce la redundancia.

La manera más fácil de reutilizar código es copiarlo total o parcialmente desde el programa antiguo al programa en desarrollo. Pero es trabajoso mantener múltiples copias del mismo código, por lo que en general se elimina la redundancia dejando el código reusable en un único lugar, y llamándolo desde los diferentes programas. Este proceso se conoce como abstracción. La abstracción puede verse claramente en lasbibliotecas de software, en las que se agrupan varias operaciones comunes a cierto dominio para facilitar el desarrollo de programas nuevos. Hay bibliotecas para convertir información entre diferentes formatos conocidos, acceder a dispositivos de almacenamiento externos, proporcionar una interfaz con otros programas, manipular información de manera conocida (como números, fechas, o cadenas de texto).

Para que el código existente se pueda reutilizar, debe definir alguna forma de comunicación o interfaz. Esto se puede dar por llamadas a una subrutina, a un objeto, o a una clase.

Como se ha comentado anteriormente la clase descendiente puede añadir sus propios atributos y métodos pero también puede sustituir u ocultar los heredados. En concreto:

1. Se puede declarar un nuevo atributo con el mismo identificador que uno heredado, quedando este atributo oculto. Esta técnica no es recomendable.

2. Se puede declarar un nuevo método de instancia con la misma cabecera que el de la clase ascendiente, lo que supone su sobreescritura. Por lo tanto, la sobreescritura o redefinición consiste en que métodos adicionales declarados en la clase descendiente con el mismo nombre, tipo de dato devuelto y número y tipo de parámetros sustituyen a los heredados.

3. Se puede declarar un nuevo método de clase con la misma cabecera que el de la clase ascendiente, lo que hace que éste quede oculto. Por lo tanto, los métodos de clase o estáticos (declarados como static) no pueden ser redefinidos.

4. Un método declarado con el modificador final tampoco puede ser redefinido por una clase derivada.

5. Se puede declarar un constructor de la subclase que llame al de la superclase de forma implícita o de mediante la palabra reservada super.

6. En general puede accederse a los métodos de la clase ascendiente que han sido redefinidos empleando la palabra reservada super delante del identificador del método. Este mecanismo sólo permite acceder al metodo perteneciente a la clase en el nivel inmediatamente superior de la jerarquía de clases.

Construyamos la clase Taxista.java con el siguiente código:

public class Taxista extends Persona {
private int nLicencia;
public void setNLicencia(int num){
nLicencia = num;
}
public int getLicencia(){
return nLicencia;
}
}

Y construyamos ArranqueTaxista.java:

public class ArranqueTaxista {
public static void main (String arg[]){
Taxista tax1 = new Taxista();
tax1.setNombre("Luis");
tax1.setEdad(50);
System.out.println( tax1.getNombre());
System.out.println(tax1.getEdad());
}
}

Ahora intentemos usar el constructor que existía en la clase Persona que recibia el nombre de la persona y vamos a usarlo para la clase Taxista. Para ello construyamos la clase ArranqueTaxista2.java:

public class ArranqueTaxista2 {
public static void main (String arg[]){
Taxista tax1 = new Taxista("Jose");
tax1.setEdad(50);
System.out.println( tax1.getNombre());
System.out.println(tax1.getEdad());
System.out.println(tax1.getNLicencia());
}
}

Se genera un error de compilación, debido a que los constructores no se heredan, sino que hay que definir nuestros propios constructores. Agreguemos en la clase Taxista los siguientes constructores:

public Taxista(int licencia){
super();
nLicencia = licencia;
}
public Taxista(String nombre,int licencia){
super(nombre);
nLicencia = licencia;
}

Ahora si podremos compilar y ejecutar la clase ArranqueTaxista2. La llamada al método super indica que estamos llamando a un constructor de la clase base (pensemos que un Taxista antes que Taxista es Persona y por tanto tiene sentido llamar al constructor de Persona antes que al de Taxista). 

Además gracias al número de parámetros de la llamada a super podemos especificar cuál de los constructores de la clase base queremos llamar.
En java se pueden emplear dos palabras clave: this y super. Como vimos en la unidad 1, this hace alusión a todo el objeto y super hace alusión a la parte heredada, por ello empleamos super para referenciar al constructor de la clase base.
Ahora vamos a agregar la función getNombre dentro de la clase Taxista, es decir, tenemos la misma función en Persona y en Taxista:

public String getNombre() {
return "Soy un taxista y me llamo: " + super.getNombre();
}

Compilamos Taxista y ejecutamos ArranqueTaxista2. Veremos que el mensaje que aparece en pantalla demuestra que la función getNombre llamada es la de del tipo real del objeto construido, en este caso la de la clase derivada que es Taxista.

Tambien apreciamos que para acceder al atributo nombre es necesario acceder al método getNombre de la clase base (y por ello emplear super).

En java los atributos y métodos de la clase base pueden cambiar su modificador de visibilidad dentro de la clase derivada, la siguiente tabla recoge dichos cambios:
Modificadores en la clase base:
public
private
protected
paquete

En la clase derivada se transforman en:
public
inaccesible
protected
paquete

Inaccesible significa que, a pesar de haber sido heredado, no hay permisos en la clase derivada para poder acceder a dicho elemento inaccesible, pero aún así, se pueden llamar a métodos de la clase base que si pueden acceder y modificar al elemento.
Recordemos que protected significa que es private, pero que al heredar no se hace inaccesible, es decir que desde la clase derivada se puede acceder.




La funcionalidad de una clase existente se puede extender al crear una nueva clase que se deriva de ella. La clase derivada hereda las propiedades de la clase base y es posible agregar o reemplazar métodos y propiedades según sea necesario.

En C#, el operador :, que equivale a extends e implements en Java, define la herencia e implementación de interfaces. La clase base siempre debe estar en el extremo izquierdo en la declaración de clase.

Como Java, C# no admite herencia múltiple, lo que significa que las clases no pueden heredar más de una clase. Sin embargo, se pueden utilizar interfaces para ese propósito, de la misma manera que en Java.

El código siguiente define una clase denominada CoOrds con dos variables miembro privadas x e y que representan la posición del punto. Se tiene acceso a estas variables mediante propiedades denominadas X e Y, respectivamente:

public class CoOrds
{
    private int x, y;

    public CoOrds()  // constructor
    {
        x = 0;
        y = 0;
    }

    public int X
    {
        get { return x; }
        set { x = value; }
    }

    public int Y
    {
        get { return y; }
        set { y = value; }
    }
}


Una nueva clase, denominada ColorCoOrds, hereda todos los campos y métodos de la clase base, a la cual se pueden agregar nuevos campos y métodos para proporcionar características adicionales en la clase derivada, según sea necesario. En este ejemplo, se agrega un miembro privado y descriptores de acceso para agregar color a la clase:

public class ColorCoOrds : CoOrds
{
    private System.Drawing.Color screenColor;

    public ColorCoOrds()  // constructor
    {
        screenColor = System.Drawing.Color.Red;
    }

    public System.Drawing.Color ScreenColor
    {
        get { return screenColor; }
        set { screenColor = value; }
    }
}

El constructor de la clase derivada llama implícitamente al constructor de la clase base o la superclase, en terminología de Java. En caso de herencia, se llama a todos los constructores de clase base antes que a los constructores de la clase derivada en el orden en que las clases aparecen en la jerarquía de clases.



El lenguaje java permite redefinir miembros de la clase base en las clases derivadas, pero el compilador emite una advertencia cuando detecta una redefinición. Una advertencia (warning) es un mensaje del compilador acerca de un posible problema. Sin embargo, en este caso sí se genera código ejecutable (a diferencia del mensaje de error). Redefinición de campos. El siguiente ejemplo muestra cómo reutilizar los identificadores de los campos de la clase base en una clase derivada.

Ejemplo de redefinición de las clases derivadas

// Redef.cs : Ejemplifica la redefinición de campos en clases derivadas.
class Punto{
public int x;
public int y;
}
class Punto3D : Punto{
public int x ;

public int y ;

public int z ;
}
class Principal{
public static void Main( ) {
Punto a = new Punto( ); Punto3D b = new Punto3D( );
a.x = 100 ;
a.y = 200 ;
b.x = 300 ;

b.y = 400 ;

b.z = 500 ;
}
}

INSTRUCCIONES: Realizar apunte del tema herencia y realizar práctica.
Práctica. Con el uso de herencia entre clases y objetos, realizar la programación necesaria para obtener los datos de inicio (base y altura) para calcular el área de diferentes figuras con las mismas medidas, donde utilice solo  los datos necesarios. Mostrar al usuario un menú con las diferentes figuras a calcular.
Enviar practica por correo a mas tardar el lunes 15 de mayo.


EJEMPLO DE HERENCIA CON extends

Ejemplo de herencia:




POLIMORFISMO 


En programación orientada a objetos se denomina polimorfismo a la capacidad que tienen los objetos de una clase de responder al mismo mensaje o evento en función de los parámetros utilizados durante su invocación.

Un objeto polimorfismo es una entidad que puede contener valores de diferentes tipos durante la ejecución del programa. Dicho de otra forma, el polimorfismo consiste en conseguir que un objeto de una clase se comporte como un objeto de cualquiera de sus subclases, dependiendo de la forma de llamar a los métodos de dicha clase o subclases. 

Una forma de conseguir objetos polimórficos es mediante el uso de punteros a la superclase. De esta forma podemos tener dentro de una misma estructura (arrays, listas, pilas, colas, ...) objetos de distintas subclases, haciendo que el tipo base de dichas estructuras sea un puntero a la superclase. Otros lenguajes nos dan la posibilidad de crear objetos polimórficos con el operador new. La forma de utilizarlo, por ejemplo en java, sería: 
Superclase sup = new (Subclase); 

En la práctica esto quiere decir que un puntero a un tipo puede contener varios tipos diferentes, no solo el creado. De esta forma podemos tener un puntero a un objeto de la clase Trabajador, pero este puntero puede estar apuntando a un objeto subclase de la anterior como podría ser Márketing, Ventas o Recepcionistas (todas ellas deberían ser subclase de Trabajador). 

El concepto de polimorfismo se puede aplicar tanto a funciones como a tipos de datos. Así nacen los conceptos de funciones polimórficas y tipos polimórficos. Las primeras son aquellas funciones que pueden evaluarse o ser aplicadas a diferentes tipos de datos de forma indistinta; los tipos polimórficos, por su parte, son aquellos tipos de datos que contienen al menos un elemento cuyo tipo no está especificado. 

Clasificación 

Se puede clasificar el polimorfismo en dos grandes clases: 

• Polimorfismo dinámico (o polimorfismo paramétrico) es aquél en el que el código no incluye ningún tipo de especificación sobre el tipo de datos sobre el que se trabaja. Así, puede ser utilizado a todo tipo de datos compatible. 

• Polimorfismo estático (o polimorfismo ad hoc) es aquél en el que los tipos a los que se aplica el polimorfismo deben ser explicitados y declarados uno por uno antes de poder ser utilizados. 

El polimorfismo dinámico unido a la herencia es lo que en ocasiones se conoce como programación genérica. 

También se clasifica en herencia por redefinición de métodos abstractos y por método sobrecargado. El segundo hace referencia al mismo método con diferentes parámetros.

Otra clasificación agrupa los polimorfismo en dos tipos: Ad-Hoc que incluye a su vez sobrecarga de operadores y coerción, Universal (inclusión o controlado por la herencia, paramétrico o genericidad).



REUTILIZACIÓN DE CÓDIGO


La reutilización de código se refiere al comportamiento y a las técnicas que garantizan que una parte o la totalidad de un programa informático existente se pueda emplear en la construcción de otro programa. De esta forma se aprovecha el trabajo anterior, se economiza tiempo, y se reduce la redundancia.

La manera más fácil de reutilizar código es copiarlo total o parcialmente desde el programa antiguo al programa en desarrollo. Pero es trabajoso mantener múltiples copias del mismo código, por lo que en general se elimina la redundancia dejando el código reusable en un único lugar, y llamándolo desde los diferentes programas. Este proceso se conoce como abstracción. La abstracción puede verse claramente en las bibliotecas de software en las que se agrupan varias operaciones comunes a cierto dominio para facilitar el desarrollo de programas nuevos. Hay bibliotecas para convertir información entre diferentes formatos conocidos, acceder a dispositivos de almacenamiento externos, proporcionar una interfaz con otros programas, manipular información de manera conocida (como números, fechas, o cadenas de texto).

Para que el código existente se pueda reutilizar, debe definir alguna forma de comunicación o interfaz. Esto se puede dar por llamadas a una subrutina, a un objeto, o a una clase. 

EXCEPCIONES

Exception_jarroba_diagramClass
Para el tema excepciones de la unidad 7: revisar el siguiente archivo http://www.unirioja.es/cu/jearansa/0910/archivos/EIPR_Tema05.pdf

Donde encontraran teoría correspondiente al tema y algunos ejercicios que les ayude a comprender el funcionamiento de las excepciones.

Actividad: Leer el documento y realizar las diversas prácticas contenidas en este. Entrega 17/06/2017, antes de las 14:30 hrs.

FLUJOS Y ARCHIVOS


Definición de flujos 

La información que necesita un programa para su función se obtiene mediante una entrada de datos de una fuente que puede ser de tipos muy variados: desde el teclado,  un archivo, una comunicación de red, un objeto en internet, etc. Cuando el programa genera los resultados como salida de la ejecución puede hacerlo de muy diversas maneras: en un archivo, en la pantalla, en una impresora, etc. 

En java la entrada de los datos se realiza mediante un flujo de entrada. La salida de datos realiza mediante un flujo de salida.

Un Flujo de E/S representa una fuente de entrada y un destino de salida. Un flujo puede representar muchos tipos diferentes de fuentes y destinos, incluyendo archivos de disco, dispositivos, otros programas y arreglos de memoria.

Los flujos soportan muchos tipos diferentes de datos, incluyendo bytes simples, tipos primitivos de datos, caracteres localizados, y objetos. Algunos flujos simplemente pasan datos, otros manipulan y transforman datos en formas útiles.
No importa cómo trabajan internamente; todos los flujos presentan el mismo modelo simple a los programas que los usan: un flujo es una secuencia de datos. Un programa usa un flujo de entrada para leer datos desde una fuente, o artículo a la vez.

Esquema para trabajar con los flujos de datos Entrada/Salida.

Entrada de datos (leer datos)
Salida de datos (escribir datos)
   1.      Se crea un objeto flujo de datos de lectura.
   2.      Se leen datos de él  con los métodos apropiados.
   3.      Se cierra el flujo de datos.
   1.      Se crea un objeto flujo de datos de escritura.
   2.      Se escriben datos utilizando los métodos apropiados del objeto flujo
   3.      Se cierra el flujo de datos.

TIPOS DE FLUJOS

Existen dos tipos de Flujos:

            -Los que trabajan con Bytes
            -Los  que trabajan con Caracteres

Las clases más importantes a tener en cuenta son las siguientes, donde el sangrado de las líneas indica la herencia, es decir, DataInputStream hereda de FilterInputStream que, a su vez, hereda de InputStream.


Flujos con Bytes
Flujos con caracteres

E
N
T
R   D
A   A
D   T
A   O
      S
D
E
InputStream
     ByteArrayInputStream
     FileInputStream
     FilterInputStream
          BufferedInputStream
          DataInputStream
          PushbackInputStream
     ObjectInputStream
     PidedInputStream
     SequenceInputStream
     StringBufferInputStream
Reader
     BufferedReader
          LineNumberReader
     CharArrayReader
     FilterReader
          PushbackReader
     InputStreamReader
          FileReader
     PidedReader
    StringReader

S
A
L
I   D
D  A
A  T
    O
D  S
E

OutputStream
     ByteArrayOutputStream
     FileOutputStream
     FilterOutputStream
          BufferedOutputStream
          DataOutputStream
          PrintStream
     ObjectOutputStream
     PipedOutputStream
Writer
      BufferedWriter
      CharArrayWriter
     FilterWriter
     OutputStreamWriter
          FileWriter
     PidedWriter
     PrintWriter
     StringWriter
Clasificación de archivos de texto y binarios
Los archivos de texto plano son aquellos que están compuestos únicamente por texto sin formato, solo caracteres. Estos caracteres se pueden codificar de distintos modos dependiendo de la lengua usada. Se les conoce también como archivos de texto llano o texto simple por carecer de información destinada a generar formatos y tipos de letra.
Un archivo binario es un archivo informático que contiene información de cualquier tipo, codificada en forma binaria para el propósito de almacenamiento y procesamiento de ordenadores.
Muchos formatos binarios contienen partes que pueden ser interpretados como texto. Un archivo binario que solo contiene información de tipo textual sin información sobre el formato del mismo, se dice que es un archivo de texto plano. Habitualmente se contraponen los términos archivo binario y archivo de texto de forma que los primeros no contienen solamente texto.

Operaciones básicas y tipos de acceso

Normalmente, cuando se codifica un programa, se hace con la intención de que ese programa pueda interactuar con los usuarios del mismo, es decir, que el usuario pueda pedirle que realice cosas y pueda suministrarle datos con los que se quiere que haga algo. Una vez introducidos los datos y las órdenes, se espera que el programa manipule de alguna forma esos datos para proporcionarnos una respuesta a lo solicitado.

Además, en muchas ocasiones interesa que el programa guarde los datos que se le han introducido, de forma que si el programa termina los datos no se pierdan y puedan ser recuperados en una sesión posterior. La forma más normal de hacer esto es mediante la utilización de ficheros que se guardarán en un dispositivo de memoria no volátil (normalmente un disco).

A todas estas operaciones, que constituyen un flujo de información del programa con el exterior, se les conoce como Entrada/Salida (E/S).

Existen dos tipos de E/S; la E/S estándar que se realiza con el terminal del usuario y la E/S a través de fichero, en la que se trabaja con ficheros de disco.

Todas las operaciones de E/S en Java vienen proporcionadas por el paquete estándar de la API de Java denominado java.io que incorpora interfaces, clases y excepciones para acceder a todo tipo de ficheros. En este tutorial sólo se van a dar algunas pinceladas de la potencia de este paquete.

Entrada/Salida estándar
Aquí sólo trataremos la entrada/salida que se comunica con el usuario a través de la pantalla o de la ventana del terminal.
Si creamos una applet no se utilizarán normalmente estas funciones, ya que su resultado se mostrará en la ventana del terminal y no en la ventana de la applet. La ventana de la applet es una ventana gráfica y para poder realizar una entrada o salida a través de ella será necesario utilizar el AWT.

El acceso a la entrada y salida estándar es controlado por tres objetos que se crean automáticamente al iniciar la aplicación: System.in, System.out y System.err

a) System.in
Este objeto implementa la entrada estándar (normalmente el teclado). Los métodos que nos proporciona para controlar la entrada son:

- read(): Devuelve el carácter que se ha introducido por el teclado leyéndolo del buffer de entrada y lo elimina del buffer para que en la siguiente lectura sea leído el siguiente carácter. Si no se ha introducido ningún carácter por el teclado devuelve el valor -1.

- skip(n): Ignora los n caracteres siguientes de la entrada.

b) System.out
Este objeto implementa la salida estándar. Los métodos que nos proporciona para controlar la salida son:

- print(a): Imprime a en la salida, donde a puede ser cualquier tipo básico Java ya que Java hace su conversión automática a cadena.

- println(a): Es idéntico a print(a) salvo que con println() se imprime un salto de línea al final de la impresión de a.

c) System.err
Este objeto implementa la salida en caso de error. Normalmente esta salida es la pantalla o la ventana del terminal como con System.out, pero puede ser interesante redirigirlo, por ejemplo hacia un fichero, para diferenciar claramente ambos tipos de salidas.
Las funciones que ofrece este objeto son idénticas a las proporcionadas por System.out

Ejemplos: Crear archivo
Con valores de inicio


Con valores de digitados por el usuario


Ejemplo para leer archivo:

Para poder leer el archivo, primero deben crear un archivo en bloc de notas con extención .txt, guardado en la carpeta Documentos --> NetBeansProjects --> (nombre de la carpeta donde se crea el paquete del proyecto). 

8 comentarios:

  1. Un vídeo más de arreglos con objetos
    https://www.youtube.com/watch?v=Z4k582CoCvs

    ResponderBorrar
  2. Este comentario ha sido eliminado por el autor.

    ResponderBorrar
  3. Bien explicado el tema de arreglos y ya realizando el código se comprende mucho mas.
    Gracias por el aporte.

    ResponderBorrar
  4. Son ejemplos sencillos que a la ves tienen cierto grado de dificultad, en base a la explicacion excelente y muy entendible

    ResponderBorrar
  5. Los explican de una manera que lo hacen ver sencillo a mi se me complica pero ya le voy entendiendo un poco mas gracias profa.

    ResponderBorrar
  6. https://youtu.be/NwztwM_xGgU
    Aporte Daniel Gomez

    ResponderBorrar
  7. https://www.youtube.com/watch?v=_DUSaU58GDk&feature=push-u&attr_tag=n2FFze8FnHHEVxYe-6

    ResponderBorrar