You are on page 1of 32

MANUAL DE PRCTICAS POO

Nombre de la asignatura: Programacin Orientada a Objetos.


Carrera: Ingeniera en Sistemas Computacionales
Clave de la asignatura: SCD-1020
(Crditos) SATCA1: 2 - 3 5

OBJETIVO(S) GENERAL(ES) DEL CURSO (competencias especficas a desarrollar en el


curso)
Disear e implementar objetos de programacin que permitan resolver situaciones reales y de
ingeniera
APORTACIN AL PERFIL DEL EGRESADO
Esta asignatura aporta al perfil del Ingeniero en Sistemas Computacionales la capacidad de
analizar, desarrollar, implementar y administrar software de aplicacin orientado a objetos,
cumpliendo con estndares de calidad, con el fin de apoyar la productividad y competitividad de las
organizaciones.
TEMARIO
Unidad 1 Introduccin al paradigma de la programacin orientado a objetos.
1.1 Elementos del modelo de objetos: clases, objetos, abstraccin, modularidad, encapsulamiento,
herencia y polimorfismo.
1.2 Lenguaje de modelado unificado: diagrama de clases.
Unidad 2 Clases y objetos.
2.1 Declaracin de clases: atributos, mtodos, encapsulamiento.
2.2 Instanciacin de una clase.
2.3 Referencia al objeto actual.
2.4 Mtodos: declaracin, mensajes, paso de parmetros, retorno de valores.
2.5 Constructores y destructores: declaracin, uso y aplicaciones.
2.6 Sobrecarga de mtodos.
2.7 Sobrecarga de operadores: Concepto y utilidad, operadores unarios y binarios.
Unidad 3 Herencia.
3.1 Definicin: clase base, clase derivada.
3.2 Clasificacin: herencia simple, herencia mltiple.
3.3 Reutilizacin de miembros heredados.
3.4 Referencia al objeto de la clase base.
3.5 Constructores y destructores en clases derivadas.
3.6 Redefinicin de mtodos en clases derivadas.
Unidad 4 Polimorfismo.
4.1 Definicin.
4.2 Clases abstractas: definicin, mtodos abstractos, implementacin de clases abstractas,
modelado de clases abstractas.
4.3 Interfaces: definicin, implementacin de interfaces, herencia de interfaces.
JOS RIGOBERTO HERNNDEZ ALBURQUERQUE

MANUAL DE PRCTICAS POO

4.4 Variables polimrficas (plantillas): definicin, uso y aplicaciones.


4.5 Reutilizacin de cdigo.
Unidad 5 Excepciones.
5.1 Definicin.
5.2 Tipos de excepciones.
5.3 Propagacin de excepciones.
5.4 Gestin de excepciones: manejo de excepciones, lanzamiento de excepciones.
5.5 Creacin y manejo de excepciones definidas por el usuario.
Unidad 6 Flujos y Archivos.
6.1 Definicin.
6.2 Clasificacin: Archivos de texto y binarios.
6.3 Operaciones bsicas y tipos de acceso.
6.4 Manejo de objetos persistentes.
FUENTES DE INFORMACIN
1. Taylor David. Object Orient informations systems, planning and implementations. Canada: Wiley.
1992.
2. Larman Craig. UML y patrones introduccin al anlisis y diseo orientado a objetos. Mxico:
Pretince Hall. 1999.
3. Winblad, Ann L. Edwards, Samuel R. Software orientado a objetos. USA: Addison. Wesley/ Daz
Santos. 1993.
4. Fco. Javier Ceballos. Java 2 Curso de Programacin. Alfaomega.
5. Agustn Froufe. Java 2 Manual de usuario y tutorial. Alfaomega.
6. Laura Lemay, Rogers Cadenhead. Aprendiendo JAVA 2 en 21 das. Prentice
Hall.
7. Herbert Schildt. Fundamentos de Programacin en Java 2. McGrawHil.
8. J Deitel y Deitel. Como programar en Java. Prentice Hall.
9. Stephen R. Davis. Aprenda Java Ya. McGrawHill.
10. Kris Jamsa Ph D. Java Ahora!. McGrawHill.
11. Francisco Charte Ojeda. Visual C# .NET. ANAYA MULTIMEDIA
12. Kingsley-Hughes, Kathie; Kingsley-Hughes, Adrian. C# 2005. ANAYAMULTIMEDIA
13. Ceballos Francisco Javier.Enciclopedia de Microsoft Visual C#. 2 Edicin
14. El lenguaje de programacin C#.Fco. Javier Ceballos Sierra. Editorial Ra-ma.
15. Tom Archer. A fondo C#. McGRAW-HILL/INTERAMERICANA DE ESPAA, S.A.U.
Unidad 1 Introduccin al paradigma de la programacin orientado a objetos.
1.1 Elementos del modelo de objetos: clases,
encapsulamiento, herencia y polimorfismo.

objetos, abstraccin, modularidad,

Objeto
El termino objeto tiene el mismo significado que un nombre o una frase nominal. Es una persona,
un lugar o una cosa. Ejemplos de objetos en el mundo real son: persona, tabla, computadora,
avin, vuelo de avin, diccionario, ciudad o la capa de ozono. La mayora de los objetos del mundo
real tienen atributos (caractersticas que los describen). Por ejemplo, los atributos de una persona
incluyen el nombre, la edad, el sexo, la fecha de nacimiento, la direccin, etc. Los objetos tienen
atributos, y ellos a su vez, comportamiento. El comportamiento (Behavior) es el conjunto de cosas
que puede hacer un objeto, por ejemplo, una persona puede estudiar, caminar, trabajar, etc. En
sntesis, se puede decir que los objetos conocen cosas y hacen cosas. Las cosas que un objeto
conoce son sus atributos; las cosas que puede hacer un objeto son su comportamiento.
JOS RIGOBERTO HERNNDEZ ALBURQUERQUE

MANUAL DE PRCTICAS POO

Clase
Una clase es una caracterizacin abstracta de un conjunto de objetos; todos los objetos similares
pertenecen a una clase determinada. Por ejemplo, un conjunto de objetos tales como cuadrados,
tringulos, crculos, lneas, etc. Pertenecen a una clase figura. De modo ms formal, una clase
define variables (datos) y mtodos (operaciones) comunes a un conjunto de objetos. En realidad,
una clase es un prototipo o generador de un conjunto de objetos.
Por ejemplo, si diseamos una clase crculo que convierte a un crculo en un tipo abstracto de dato,
la clase no proporciona mtodos (funciones) tales como dibujar, mover, ampliar, contraer, borrar,
etc. Se pueden utilizar estos mtodos para manipular objetos crculo de todas las formas
esperadas. Los mtodos son todo lo que se necesita conocer sobre la clase crculo.
La clase es el bloque de construccin fundamental de un lenguaje de programacin orientada a
objetos. Una clase es un tipo abstracto de datos junto con un conjunto de transformaciones
permitidas de dicho tipo abstracto de datos. (Un tipo de dato es abstracto si las operaciones de alto
nivel adecuadas a los tipos de datos estn aisladas de los detalles de la implementacin asociados
con el tipo de datos)

Abstraccin

La abstraccin consiste en captar las caractersticas esenciales de un objeto, as como su


comportamiento. Por ejemplo, los automviles, Qu caractersticas podemos abstraer de los
automviles? O lo que es lo mismo Qu caractersticas semejantes tienen todos los automviles?
Todos tendrn una marca, un modelo, nmero de chasis, peso, llantas, puertas, ventanas, etc. Y en
cuanto a su comportamiento todos los automviles podrn acelerar, frenar, retroceder, etc.

En los lenguajes de programacin orientada a objetos, el concepto de Clase es la representacin y


el mecanismo por el cual se gestionan las abstracciones.

Por ejemplo, en Java tenemos:

public class Automovil {


// variables
// mtodos
}

Modularidad

JOS RIGOBERTO HERNNDEZ ALBURQUERQUE

MANUAL DE PRCTICAS POO

La modularidad es la propiedad que permite dividir una aplicacin en partes ms pequeas


(llamadas mdulos ), cada una de las cuales debe ser tan independiente como sea posible de la
aplicacin en si y de las restantes partes.
Encapsulamiento

El encapsulamiento consiste en unir en la Clase las caractersticas y comportamientos, esto es, las
variables y mtodos. Es tener todo esto es una sola entidad. En los lenguajes estructurados esto
era imposible. Es evidente que el encapsulamiento se logra gracias a la abstraccin.

La utilidad del encapsulamiento va por la facilidad para manejar la complejidad, ya que tendremos
a las Clases como cajas negras donde slo se conoce el comportamiento pero no los detalles
internos, y esto es conveniente porque nos interesar conocer qu hace la Clase pero no ser
necesario saber cmo lo hace.

Herencia
La herencia es uno de los conceptos ms cruciales en la POO. La herencia bsicamente consiste
en que una clase puede heredar sus variables y mtodos a varias subclases (la clase que hereda
es llamada superclase o clase padre). Esto significa que una subclase, aparte de los atributos y
mtodos propios, tiene incorporados los atributos y mtodos heredados de la superclase. De esta
manera se crea una jerarqua de herencia.

Por ejemplo, imaginemos que estamos haciendo el anlisis de un Sistema para una tienda que
vende y repara equipos celulares.

En el grfico vemos 2 Clases ms que posiblemente necesitemos para crear nuestro Sistema.
Esas 2 Clases nuevas se construirn a partir de la Clase Celular existente. De esa forma utilizamos
el comportamiento de la SuperClase.
En general, podemos tener una gran jerarqua de Clases tal y como vemos en el siguiente grfico:
JOS RIGOBERTO HERNNDEZ ALBURQUERQUE

MANUAL DE PRCTICAS POO

Polimorfismo
El polimorfismo se presenta cuando se ha creado objetos que pertenecen a clases que han sido
derivadas de otras clases. En otras palabras, el polimorfismo aparece en las clases derivadas.
Tambin se dice que el polimorfismo es la propiedad que indica literalmente, la posibilidad de que
una entidad tome muchas formas, en trminos prcticos el polimorfismo permite referirse a objetos
de clases distintas mediante el mismo elemento del programa y realizar la misma operacin de
diferentes formas, segn sea el objeto que se referencia en ese momento. Por ejemplo cuando se
describe la clase mamferos se puede observar que la operacin comer es una operacin
fundamental en la vida de los mamferos, de modo que cada tipo de mamferos debe poder realizar
la operacin o funcin de comer. Por otra parte, una vaca o una cabra que pasta en el campo, un
nio que se come un bombn o caramelo y un len que devora a otro animal, son diferentes
formas que utilizan los distintos mamferos para realizar la misma accin.
1.2 Lenguaje de modelado unificado: diagrama de clases.
Un lenguaje de modelado es una notacin grfica para describir el diseo de software. As mismo,
el lenguaje incluye reglas para diferenciar entre dibujos correctos e incorrectos. Estas reglas son
las que hacen a UML un lenguaje de modelado en vez de solo un montn de smbolos para dibujar.
Cuando una persona construye una casa no levanta muros conforme se le ocurre. Ms bien, lo
hace con la ayuda de planos bien detallados.
El propsito de UML es proveer los planos para el mundo del software.
Los creadores de UML, conjuntaron tres lenguajes de modelado que competan entre s, de ah la
U(nificado) de UML
Un modelo es una abstraccin de algo, con la finalidad de comprenderlo, antes de construirlo, ya
que un modelo omite los detalles no esenciales, es ms sencillo manejarlos, que manejar la
entidad original.
Esta tcnica es trilateral, ya que toma en cuenta tres puntos de vista: modelo de objetos, modelo
dinmico y modelo funcional.
a) El modelo de objetos. El modelo de objetos es el modelo ms importante, ya que en l se
identifican las clases dentro del sistema junto con sus relaciones, as como sus atributos y
operaciones, lo que representa la estructura esttica del sistema. El modelo de objetos se
representa mediante un diagrama de clases.

JOS RIGOBERTO HERNNDEZ ALBURQUERQUE

MANUAL DE PRCTICAS POO

b) El modelo dinmico. Representa los aspectos temporales de comportamiento "de control" del
sistema, mediante la secuencia de operaciones en el tiempo.
c) El modelo funcional. Representa los aspectos transformacionales "de funcin" del sistema,
mediante la transformacin de valores de los datos. Se representa mediante un diagrama de flujo.
Cada modelo describe un aspecto del sistema pero contiene referencias a los dems modelos. Lo
cual indica que los tres no son totalmente independientes.
Los pasos para construir el modelo de objetos son los siguientes:
1. Identificacin de objetos y/o clases.
2. Crear un diccionario de datos.
3. Identificacin de las asociaciones y agregaciones entre los objetos.
4. Identificacin de atributos y enlaces.
5. Organizacin y simplificacin de las clases empleando herencia.
6. Verificacin de las vas de acceso necesarias para llevar a cabo las probables consultas.
7. Realizar las iteraciones necesarias para el refinamiento del modelo.
8. Agrupar las clases en mdulos.
Modelo de objetos = Diagrama de modelo de objetos + diccionario de datos.
4.3. Representacin grfica del diseo
El diagrama de clase describe los tipos de objetos que hay en el sistema y las diversas clases de
relaciones estticas que existen entre ellos.
Hay dos tipos de relaciones estticas principales:

Asociaciones (por ejemplo, un cliente pude rentar diversos videos)

Subtipos (una enfermera es un tipo de persona)

Los diagramas de clase tambin muestran los atributos y operaciones de una clase y las
restricciones a que se ven sujetos, segn la forma en que se conectan los objetos.
Los diversos mtodos OO utilizan terminologas diferentes (y con frecuencia antagnicas) para
estos conceptos.

JOS RIGOBERTO HERNNDEZ ALBURQUERQUE

MANUAL DE PRCTICAS POO

Modelar relaciones entre sus clases


Dependencia
Relacin (ms dbil que una asociacin) que muestra la relacin entre un cliente y el proveedor del
servicio utilizado por un cliente.

Cliente: es el objeto que solicita el servicio Servidor: es el objeto que provee el servicio
solicitado

Grficamente, la dependencia se muestra con una lnea discontinua con una punta de flecha que
apunta del cliente al proveedor.
Ejemplo: resolucin de una ecuacin de segundo grado.
Para resolver una ecuacin de segundo grado hemos de recurrir a la funcin sqrt de la clase
Match para calcular una raz cuadrada.

JOS RIGOBERTO HERNNDEZ ALBURQUERQUE

MANUAL DE PRCTICAS POO

Nota: La clase Match es una clase degenerada que no tiene estado. Es, simplemente una
coleccin de funciones de clculo matemtico

Para resolver una ecuacin de segundo grado hemos de recurrir a la funcin sqrt de la clase
Match para calcular una raz cuadrada.
Nota: La clase Match es una clase degenerada que no tiene estado. Es, simplemente una
coleccin de funciones de clculo matemtico
Asociacin
Es una relacin estructural que describe una conexin entre objetos

Graficamente, se muestra como una lnea contnua que une las clases relacionadas entre s.
Aunque las asociaciones suelen ser bidireccionales (se pueden recorrer en ambos sentidos), en
ocasiones es deseable hacerlas unidireccionales (restringir su navegacin en un solo sentido).
Grficamente, cuando la navegacin es unidireccional, la lnea termina en una punta de flecha que
indica el sentido de la asociacin.

JOS RIGOBERTO HERNNDEZ ALBURQUERQUE

MANUAL DE PRCTICAS POO

Unidad 2 Clases y objetos.


2.1 Declaracin de clases: atributos, mtodos, encapsulamiento.
La programacin orientada a objetos se basa en la programacin de clases; a diferencia de la
programacin estructurada, que est centrada en las funciones.
Una clase es un molde del que luego se pueden crear mltiples objetos, con similares
caractersticas.
Una clase es una plantilla (molde), que define atributos (variables) y mtodos (funciones)
La clase define los atributos y mtodos comunes a los objetos de ese tipo, pero luego, cada objeto
tendr sus propios valores y compartirn las mismas funciones.
Debemos crear una clase antes de poder crear objetos (instancias) de esa clase. Al crear un objeto
de una clase, se dice que se crea una instancia de la clase o un objeto propiamente dicho.
La estructura de una clase es:
class [nombre de la clase] {
[atributos o variables de la clase]
[mtodos o funciones de la clase]
[main]
}
Problema 1:
Confeccionar una clase que permita carga el nombre y la edad de una persona. Mostrar los datos
cargados. Imprimir un mensaje si es mayor de edad (edad>=18)
Programa Persona

JOS RIGOBERTO HERNNDEZ ALBURQUERQUE

MANUAL DE PRCTICAS POO

2.2 Instanciacin de una clase.


Una vez que se tiene definida la clase a partir de la cual se crearn los objetos se est en la
posibilidad de instanciar los objetos requeridos.
Por ejemplo, para una clase Usuario podemos crear un objeto de la siguiente manera:
Usuario usr1; //usr1 es una variable del tipo Usuario
usr1 = new Usuario();
La primera lnea corresponde a la declaracin del objeto, es decir, se declara una variable del tipo
de objeto deseado.
La segunda lnea corresponde a la iniciacin del objeto.
El operador new
El operador new crea una instancia de una clase asignando la cantidad de memoria necesaria de
acuerdo al tipo de objeto. El operador new se utiliza en conjunto con un constructor. El operador
new regresa una referencia a un nuevo objeto.
Problema 2:
Desarrollar un programa que cargue los lados de un tringulo e implemente los siguientes
mtodos: inicializar los atributos, imprimir el valor del lado mayor y otro mtodo que muestre si es
equiltero o no.
Programa Tringulo
2.3 Referencia al objeto actual.
Para crear un objeto se deben realizar dos operaciones:
-

Declaracin
Instanciacin

Declaracin de un objeto
En la declaracin se crea la referencia al objeto, de forma similar a cmo se declara una variable
de un tipo primitivo.
La referencia se utiliza para manejar el objeto.
La sintaxis general para declarar un objeto en Java es:
NombreClase referenciaObjeto;
Por ejemplo, para crear un objeto de la clase Persona creamos su referencia as:
Persona p;
La referencia tiene como misin almacenar la direccin de memoria del objeto. En este momento la
referencia p almacena una direccin de memoria nula (null).
Problema 3:
JOS RIGOBERTO HERNNDEZ ALBURQUERQUE

1
0

MANUAL DE PRCTICAS POO

Desarrollar una clase que represente un punto en el plano y tenga los siguientes mtodos: cargar
los valores de x e y, imprimir en que cuadrante se encuentra dicho punto (concepto matemtico,
primer cuadrante si x e y son positivas, si x<0 e y>0 segundo cuadrante, etc.)
Programa Punto
2.4 Mtodos: declaracin, mensajes, paso de parmetros, retorno de valores.

Cuando uno plantea una clase en lugar de especificar todo el algoritmo en un nico mtodo,
dividimos todas las responsabilidades de las clase en un conjunto de mtodos.

Un mtodo hemos visto que tiene la siguiente sintaxis:

public void [nombre del mtodo]() {


[algoritmo]
}

Veremos que hay varios tipos de mtodos:


Mtodos con parmetros.
Un mtodo puede tener parmetros:

public void [nombre del mtodo]([parmetros]) {


[algoritmo]
}

Los parmetros los podemos imaginar como variables locales al mtodo, pero su valor se inicializa
con datos que llegan cuando lo llamamos.

Problema 4:

Confeccionar una clase que permita ingresar valores enteros por teclado y nos muestre la tabla de
multiplicar de dicho valor. Finalizar el programa al ingresar el -1.

JOS RIGOBERTO HERNNDEZ ALBURQUERQUE

1
1

MANUAL DE PRCTICAS POO

Programa TablaMultiplicar

Mtodos que retornan un dato

Un mtodo puede retornar un dato:

public [tipo de dato] [nombre del mtodo]([parmetros]) {


[algoritmo]
return [tipo de dato]
}

Cuando un mtodo retorna un dato en vez de indicar la palabra clave void previo al nombre del
mtodo indicamos el tipo de dato que retorna. Luego dentro del algoritmo en el momento que
queremos que finalice el mismo y retorne el dato empleamos la palabra clave return con el valor
respectivo.

Problema 5:

Confeccionar una clase que permita ingresar tres valores por teclado. Luego mostrar el mayor y el
menor.

Programa MayorMenor
2.5 Constructores y destructores: declaracin, uso y aplicaciones.
En Java podemos definir un mtodo que se ejecute inicialmente y en forma automtica. Este
mtodo se lo llama constructor.
El constructor tiene las siguientes caractersticas:

Tiene el mismo nombre de la clase.


Es el primer mtodo que se ejecuta.
Se ejecuta en forma automtica.
No puede retornar datos.
Se ejecuta una nica vez.
Un constructor tiene por objetivo inicializar atributos.

JOS RIGOBERTO HERNNDEZ ALBURQUERQUE

1
2

MANUAL DE PRCTICAS POO

Problema 6:
Se desea guardar los sueldos de 5 operarios en un vector. Realizar la creacin y carga del vector
en el constructor.
Programa Operarios
Problema 7:
Confeccionar una clase que represente un empleado. Definir como atributos su nombre y su
sueldo. En el constructor cargar los atributos y luego en otro mtodo imprimir sus datos y por ltimo
uno que imprima un mensaje si debe pagar impuestos (si el sueldo supera a 3000)
Programa EmpleadoFabrica
Problema 8:
Implementar la clase operaciones. Se deben cargar dos valores enteros en el constructor, calcular
su suma, resta, multiplicacin y divisin, cada una en un mtodo, imprimir dichos resultados.
Programa OperacionesCalculo
El destructor:
El destructor se utiliza para destruir una instancia de una clase y liberar memoria. En Java no hay
destructores, ya que la liberacin de memoria es llevada a cabo por el Garbage Collector cuando
las instancias de los objetos quedan desreferenciadas.
2.6 Sobrecarga de mtodos.
Un mtodo sobrecargado se utiliza para reutilizar el nombre de un mtodo pero con diferentes
argumentos (opcionalmente un tipo diferente de retorno). Las reglas para sobrecargar un mtodo
son las siguientes:

Los mtodos sobrecargados deben cambiar la lista de argumentos


Pueden cambiar el tipo de retorno
Pueden cambiar el modificador de acceso
Pueden declarar nuevas o ms amplias excepciones
Un mtodo puede ser sobrecargado en la misma clase o en una subclase

Veamos un mtodo que se desea sobrecargar:


Public void cambiarTamao(int tamao, String nombre, float patron){
}
Los siguientes mtodos son sobrecargas legales del mtodo cambiarTamao():
Public void cambiarTamao(int tamao, String nombre){
}
Public int cambiarTamao(int tamao, float patrn){
}

JOS RIGOBERTO HERNNDEZ ALBURQUERQUE

1
3

MANUAL DE PRCTICAS POO

Public void cambiarTamao(float patrn, String nombre) throws IOExceptions{


}
Cmo invocar un mtodo sobre cargado:
Lo que define que mtodo es el que se va a llamar son los argumentos que se envan al mismo
durante la llamada. Si se invoca a un mtodo con un String como argumento, se ejecutar el
mtodo que tome un String como argumento, si se manda llamar al mismo mtodo pero con un
float como argumento, se ejecutar el mtodo que tome un float como argumento y as
sucesivamente. Si se invoca a un mtodo con un argumento que no es definido e ninguna de las
versiones sobrecargadas entonces el compilador arrojar un mensaje de error.
Ejemplo de una clase con un mtodo sobre cargado:
Programa Sobrecarga
Las palabras reservadas this y super
La palabra reservada this permite especificar que la variable que seala (y la seala haciendo
this.nombreVariable) es de la misma clase en la que se usa.
La palabra reservada super sirve para indicar que una variable o un mtodo es de la superclase
(herencia ).
Programa Usuario4
2.7 Sobrecarga de operadores: Concepto y utilidad, operadores unarios y binarios.
La sobrecarga de operadores es la capacidad para transformar los operadores de un lenguaje
como por ejemplo el +, -, etc.
Cuando se dice transformar se refiere a que los operandos que entran en juego no tienen que ser
los que admite el lenguaje por defecto. Mediante esta tcnica podemos sumar dos objetos creados
por nosotros o un objeto y un entero, en vez de limitarnos a sumar nmeros enteros o reales, por
ejemplo.
Sorprendentemente java no lo incorpora.
A la hora de hablar de operadores vamos a distinguir entre dos tipos, los unarios y los binarios. Los
unarios son aquellos que solo requieren un operando, por ejemplo a++, en este caso el operando
es 'a' y el operador '++'. Los operadores binarios son aquellos que necesitan dos operadores, por
ejemplo a+c , ahora el operador es '+' y los operandos 'a' y 'c'. Es importante esta distincin ya que
la programacin se har de forma diferente.
Los operadores que podemos sobrecargar son los unarios, +, -, !, ~, ++, --; y los binarios +, -, *, /,
%, &, |, ^, <<, >>. Es importante decir que los operadores de comparacin, ==, !=, <, >, <=, >=, se
pueden sobrecargar pero con la condicin que siempre se sobrecargue el complementario, es
decir, si sobrecargamos el == debemos sobrecargar el !=
Unidad 3 Herencia.
JOS RIGOBERTO HERNNDEZ ALBURQUERQUE

1
4

MANUAL DE PRCTICAS POO

3.1 Definicin: clase base, clase derivada.


La herencia significa que se pueden crear nuevas clases partiendo de clases existentes, que
tendrn todos los atributos y los mtodos de su 'superclase' o 'clase padre' y adems se le podrn
aadir otros atributos y mtodos propios.
Clase padre
Clase de la que desciende o deriva una clase. Las clases hijas (descendientes) heredan
(incorporan) automticamente los atributos y mtodos de la la clase padre.
Subclase
Clase descendiente de otra. Hereda automticamente los atributos y mtodos de su superclase. Es
una especializacin de otra clase. Admiten la definicin de nuevos atributos y mtodos para
aumentar la especializacin de la clase.

Ejercicio de Herencia resuelto:

La empresa informtica IPM Tech necesita llevar un registro de todos sus empleados que se
encuentran en la oficina central, para eso ha creado un diagrama de clases que debe incluir lo
siguiente:
1) Empleado
Atributos:
- nombre: tipo cadena (Debe ser nombre y apellido)
- cedula: tipo cadena
- edad : entero (Rango entre 18 y 45 aos)
- casado: boolean
- salario: tipo numrico doble
Mtodos:
- Constructor con y sin parmetros de entrada
- Mtodo que permita mostrar la clasificacin segn la edad de acuerdo al siguiente algoritmo:
Si edad es menor o igual a 21, Principiante
Si edad es >=22 y <=35, Intermedio
Si edad es >35, Senior.- Imprimir los datos del empleado por pantalla (utilizar salto de lnea \n para separar los atributos.
- Un mtodo que permita aumentar el salario en un porcentaje que sera pasado como parmetro al
mtodo.
2. Programador (Especializacin de Empleado). Clase que hereda de Empleado todos los
atributos y mtodos.
- Atributos:

JOS RIGOBERTO HERNNDEZ ALBURQUERQUE

1
5

MANUAL DE PRCTICAS POO

- lineasDeCodigoPorHora : tipo entero


- lenguajeDominante: tipo cadena
- Mtodos:
- Constructor con y sin parmetros de entrada.
SOLUCION:
Primero debe definirse la clase Empleado con los atributos sealados en el examen, se definen los
mtodos con las acciones pertinentes. Posteriormente se define la clase Programador como hija de
la clase Empleado, con sus atributos y mtodos correspondientes. Cuando se hace referencia a la
clase padre se antepone al atributo la palabra super. La palabra this sirve para referenciar el objeto
actual.
Programa Empleado
3.2 Clasificacin: herencia simple, herencia mltiple.
Hay dos tipos de herencia: Herencia Simple y Herencia Mltiple. 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 ms clases iniciales. Java slo permite herencia
simple.
Herencia Simple

Herencia Mltiple

3.3 Reutilizacin de miembros heredados.


La reutilizacin de cdigo se refiere al comportamiento y a las tcnicas que garantizan que una
parte o la totalidad de un programa informtico existente se pueda emplear en la construccin de
otro programa. De esta forma se aprovecha el trabajo anterior, se economiza tiempo, y se reduce la
redundancia.
La manera ms fcil de reutilizar cdigo es copiarlo total o parcialmente desde el programa antiguo
al programa en desarrollo. Pero es trabajoso mantener mltiples copias del mismo cdigo, por lo
JOS RIGOBERTO HERNNDEZ ALBURQUERQUE

1
6

MANUAL DE PRCTICAS POO

que en general se elimina la redundancia dejando el cdigo reusable en un nico lugar, y


llamndolo desde los diferentes programas. Este proceso se conoce como abstraccin. La
abstraccin 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 informacin entre diferentes formatos conocidos, acceder a dispositivos
de almacenamiento externos, proporcionar una interfaz con otros programas, manipular
informacin de manera conocida (como nmeros, fechas, o cadenas de texto).
Programa Vehculo
abstract (palabra clave).
Una clase abstracta es aquella que posee al menos un mtodo abstracto. Un mtodo abstracto es
aqul que est declarado, pero que no posee implementacin alguna (es decir no tiene cuerpo).
Est incompleto. Debido a esta carencia, es imposible declarar objetos de una clase abstracta.
Para qu sirve entonces una clase abstracta? Una clase abstracta sirve para establecer un marco
de trabajo que deben cumplir todas las clases que hereden de ella. Las clases que heredan de ella
s deben dotar de una implementacin a los mtodos abstractos del padre. Si no lo hacen,
automticamente se convierten tambin en abstractas. Tambin es posible definir una clase
abstracta sin que posea mtodos abstractos.
3.4 Referencia al objeto de la clase base
Consideremos las figuras planas cerradas como el rectngulo, y el crculo. Tales figuras comparten
caractersticas comunes como es la posicin de la figura, de su centro, y el rea de la figura,
aunque el procedimiento para calcular dicha rea sea completamente distinto. Podemos por tanto,
disear una jerarqua de clases, tal que la clase base denominada Figura, tenga las caractersticas
comunes y cada clase derivada las especficas.
La clase Figura es la que contiene las caractersticas comunes a dichas figuras concretas por
tanto, no tiene forma ni tiene rea. Esto lo expresamos declarando Figura como una clase
abstracta, declarando la funcin miembro rea abstract.
Las clases abstractas solamente se pueden usar como clases base para otras clases. No se
pueden crear objetos pertenecientes a una clase abstracta. Sin embargo, se pueden declarar
variables de dichas clases.
En el juego del ajedrez podemos definir una clase base denominada Pieza, con las caractersticas
comunes a todas las piezas, como es su posicin en el tablero, y derivar de ella las caractersticas
especficas de cada pieza particular. As pues, la clase Pieza ser una clase abstracta con una
funcin abstract denominada mover, y cada tipo de pieza definir dicha funcin de acuerdo a las
reglas de su movimiento sobre el tablero.
La clase Figura
La definicin de la clase abstracta Figura, contiene la posicin x e y de la figura particular, de su
centro, y la funcin rea, que se va a definir en las clases derivadas para calcular el rea de cada
figura en particular.

JOS RIGOBERTO HERNNDEZ ALBURQUERQUE

1
7

MANUAL DE PRCTICAS POO

El modificador de acceso protected


El modificador de acceso protected es una combinacin de los accesos que proporcionan los
modificadores public y private. protected proporciona acceso pblico para las clases derivadas y
acceso privado (prohibido) para el resto de clases.

Por ejemplo, si en la clase Empleado definimos:

class Empleado {
protected int sueldo;
...
}
Dado que un Ejecutivo es un Empleado, entonces desde la clase Ejecutivo se puede acceder al
dato miembro sueldo, mientras que si se declara private no.
Programa Figura
3.5 Constructores y destructores en clases derivadas.

Constructores en clases derivadas.

Al instanciar objetos de clases derivadas se inicia una cadena de invocaciones a constructores en


las cuales el constructor de la clase derivada, antes de realizar sus propias tareas, invoca (ya sea
implcita o explcitamente) al constructor de su clase base. Similarmente, si la clase base fue
derivada de otra clase, el constructor de la clase base debe invocar al constructor de la clase
ubicada en el siguiente nivel superior de la jerarqua, y as sucesivamente. El ltimo constructor
invocado en la cadena es el constructor de la clase Object, cuyo cuerpo se ejecuta primero. El
cuerpo del constructor de la clase derivada se ejecuta al final. El constructor de cada clase base
inicializa las variables de instancia que el objeto de la clase derivada hereda.

Destructores en clases derivadas.

Cuando remueve de la memoria un objeto de una clase derivada, el recolector de basura invoca al
destructor del objeto. Esto inicia una cadena de invocaciones a destructores, en donde el
destructor de la clase derivada y los destructores de las clases bases directas e indirectas se
ejecutan en orden inverso al que se ejecutaron los constructores, esto es, primero se ejecuta el
JOS RIGOBERTO HERNNDEZ ALBURQUERQUE

1
8

MANUAL DE PRCTICAS POO

destructor de la clase derivada y al final se ejecuta el destructor de la clase base ubicada en el


nivel superior de la jerarqua. La ejecucin de los destructores debe liberar todos los recursos que
el objeto adquiri, antes de que el recolector de basura reclame la memoria de ese objeto.

Cuando el recolector de basura invoca al destructor de un objeto de una clase derivada, ese
destructor realiza su tarea y despus invoca al destructor de la clase base. El proceso se repite
hasta que se invoca al destructor de la clase Object.

3.6 Redefinicin de mtodos en clases derivadas.


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

// Redef.cs : Ejemplifica la redefinicin 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 ;

JOS RIGOBERTO HERNNDEZ ALBURQUERQUE

1
9

MANUAL DE PRCTICAS POO

b.z = 500 ;
}
}
Unidad 4 Polimorfismo
4.1 Definicin.
El polimorfismo consiste en obtener un mismo mtodo con diferentes funciones, es decir,
suponiendo que tengamos una clase Saludo con el mtodo Saludo el cual sera su constructor,
pero en este caso tendramos varios constructores pero siempre siguiendo las reglas de
independencia en cuestin a los parmetros de cada constructor para que as puedan diferenciarse
uno de otro, sin embargo cada uno tendr diferentes procesos internos en s mismo.
Programa Saludo
4.2 Clases abstractas: definicin, mtodos abstractos, implementacin de clases abstractas,
modelado de clases abstractas.
Una clase que declara la existencia de mtodos pero no la implementacin de dichos mtodos (o
sea, las llaves { } y las sentencias entre ellas), se considera una clase abstracta.
Una clase abstracta puede contener mtodos no-abstractos pero al menos uno de los mtodos
debe ser declarado abstracto.
Para declarar una clase o un metodo como abstractos, se utiliza la palabra reservada abstract.
abstract class Drawing
{
abstract void miMetodo(int var1, int var2);
String miOtroMetodo( ){ ... }
}
4.3 Interfaces: definicin, implementacin de interfaces, herencia de interfaces.
Una interface es una variante de una clase abstracta con la condicin de que todos sus mtodos
deben ser asbtractos. Si la interface va a tener atributos, stos deben llevar las palabras
reservadas static final y con un valor inicial ya que funcionan como constantes por lo que, por
convencin, su nombre va en maysculas.
interface Nomina
{
public static final String EMPRESA = "Patito, S. A.";
public void detalleDeEmpleado(Nomina obj);
}
Una clase implementa una o ms interfaces (separadas con comas ",") con la palabra reservada
implements. Con el uso de interfaces se puede "simular" la herencia mltiple que Java no soporta.
class Empleado implements Nomina
{
...
JOS RIGOBERTO HERNNDEZ ALBURQUERQUE

2
0

MANUAL DE PRCTICAS POO

}
En este ejemplo, la clase Empleado tiene una clase padre llamada Object (implcitamente) e
implementa a la interface Nomina, quedando el diagrama de clases de la siguiente manera:

La clase que implementa una interface tiene dos opciones:


1) Implementar todos los mtodos de la interface.
2) Implementar slo algunos de los mtodos de la interface pero esa clase debe ser una clase
abstracta (debe declararse con la palabra abstract).
4.4 Variables polimrficas (plantillas): definicin, uso y aplicaciones.
En Java, las variables que contienen objetos son variables polimrficas. El trmino polimrfico
(literalmente: muchas formas) se refiere al hecho de que una misma variable puede contener
objetos de diferentes tipos (del tipo declarado o de cualquier subtipo del tipo declarado). El
polimorfismo aparece en los lenguajes orientados a objetos en numerosos contextos, las variables
polimrficas constituyen justamente un primer ejemplo.
4.5 Reutilizacin de cdigo
Lo primero que se les viene a la cabeza a los estudiantes cuando se les menciona la reutilizacin
del cdigo es el famoso copiar y pegar, lo cual es una de las practicas que ms encarece el
desarrollo de software. Como todo en Java, el problema se resuelve con las clases. Para reutilizar
el cdigo creamos nuevas clases pero, en lugar de partir de cero, partimos de clases, relacionadas
con nuestra clase, que han sido ya creadas y depuradas.
Una forma de hacer esto es crear objetos de nuestras clases existentes dentro de la nueva clase.
Esto se conoce como composicin porque la nueva clase est compuesta de objetos de clases
existentes. Estamos reutilizando la funcionalidad del cdigo, y no la forma.
Otra forma es crear una nueva clase como un tipo de una clase ya existente. Tomamos la forma de
la clase existente y aadimos cdigo a la nueva, sin modificar la clase existente. Esta forma de
crear nuevos objetos se llamada herencia, y lo que hacemos es extender la clase en la que nos
basamos para crear la nueva.
Composicin:
Recordemos que la forma para determinar cundo usar composicin es cuando podemos decir que
nuestra nueva clase tiene un elemento de otro tipo de objetos, por ejemplo un cronmetro tiene:
horas, minutos y segundos, es decir que una clase Cronometro est compuesta por otras clases
llamadas: Horas, Minutos y Segundos.

JOS RIGOBERTO HERNNDEZ ALBURQUERQUE

2
1

MANUAL DE PRCTICAS POO

Unidad 5 Excepciones.
5.1 Definicin.
Las excepciones son el mecanismo por el cual pueden controlarse en un programa Java las
condiciones de error que se producen. Estas condiciones de error pueden ser errores en la lgica
del programa como un ndice de un array fuera de su rango, una divisin por cero o errores
disparados por los propios objetos que denuncian algn tipo de estado no previsto, o condicin que
no pueden manejar.
La idea general es que cuando un objeto encuentra una condicin que no sabe manejar crea y
dispara una excepcin que deber ser capturada por el que le llam o por alguien ms arriba en la
pila de llamadas. Las excepciones son objetos que contienen informacin del error que se ha
producido y que heredan de la clase Throwable o de la clase Exception. Si nadie captura la
excepcin interviene un manejador por defecto que normalmente imprime informacin que ayuda a
encontrar quin produjo la excepcin.
5.2 Tipos de excepciones.
En Java, todas las excepciones estan consideradas en el de rbol de excepciones que se deriva de
la clase Throwable. Existen dos subclases directas de Throwable: Error y Exception. En la figura se
observa parte de la jerarqua de clases derivada de Throwable:

La clase Error est relacionada con errores de la mquina virtual de Java y no el cdigo,
generalmente estos errores no dependen del programador por lo que no debe preocuparse por
tratarlos.
En la clase Exception se encuentran las excepciones RuntimeException, producidas por errores de
programacin. El compilador de Java obliga a corregirlas.
En resumen las excepciones son generadas de tres formas diferentes:
1) La mquina Virtual de Java puede generar una excepcin como producto de un error interno
que est fuera de su control. Estas excepciones generalmente no pueden ser manejadas por el
programa.
2) Excepciones estndar: Son excepciones que deben ser manipuladas, se producen cuando se
ejecuta una divisin por cero o se trata de acceder a un arreglo con un ndice fuera de lmites son
generadas por errores en el cdigo del programa

JOS RIGOBERTO HERNNDEZ ALBURQUERQUE

2
2

MANUAL DE PRCTICAS POO

3) El programador puede generar una excepcin manualmente utilizando la estructura throw. Sin
importar cmo se produjo la excepcin, se maneja de la misma forma.
5.3 Propagacin de excepciones.
Las instrucciones que tenemos dentro de un bloque try a menudo contienen llamadas a mtodos
que a su vez pueden realizar llamadas a otros mtodos y as sucesivamente. Cualquiera de los
mtodos llamados puede provocar una excepcin y cualquiera de los mtodos puede, o no, tratarla
(con bloques catch).
Una excepcin no tratada en un bloque se propaga hacia el bloque llamante. Este mecanismo de
propagacin contina mientras no se trate la excepcin o se llegue al mtodo de nivel superior. Si
la excepcin no se trata en el mtodo de nivel superior, se imprime un mensaje de error por
consola.
5.4 Gestin de excepciones: manejo de excepciones, lanzamiento de excepciones.
Cuando se produce un error en un mtodo, este crea un objeto 'exception' el cual contiene
informacin sobre la excepcin como el tipo de excepcin y el estado del programa al presentarse
el problema. El sistema de ejecucin es el responsable de buscar algn bloque de cdigo que
maneje la excepcin. En la terminologa de java, al hecho de crear una objeto exception y
manejarlo por el sistema de ejecucin se le conoce como lanzar una excepcin (throwing an
exception).
Bloque try/catch
El ncleo del manejo de excepciones son los bloques try y catch. A continuacin se muestra la
forma general del manejo de bloques de excepcin try/catch:

Cuando un segmento de cdigo lanza una excepcin, esta es atrapada por su correspondiente
manejador catch. En un mismo bloque de instrucciones se puede generar ms de una excepcin,
por lo que puede haber ms de un bloque catch asociado a un solo try. La ejecucin de catch no es
como llamar a una funcin, es decir, despus de ejecutar catch la ejecucin del programa no
regresa a donde se gener la excepcin, sino que el flujo del programa contina despus del
bloque catch

El siguiente programa genera una excepcin al momento de su ejecucin:

JOS RIGOBERTO HERNNDEZ ALBURQUERQUE

2
3

MANUAL DE PRCTICAS POO

La excepcin generada es:

Agregando el cdigo para el manejo de la excepcin al mismo programa tenemos:

Ahora al producirse la excepcin sigue las acciones especificadas en el bloque catch, es este caso,
la accin consiste en mandar un mensaje.
Programa PruebaExcepcionCorregida (es el de arriba)
Vamos a crear un programa que divida dos nmeros. Supongamos que los nmeros se introducen
n dos controles de edicion. Se obtiene el texto de cada uno de los controles de edicin que se
guardan en dos strings. En esta situacin se pueden producir dos excepciones
NumberFormatException, si se introducen caracteres no numricos y ArithmeticException si se
divide entre cero.
Programa ExcepcionApp
5.5 Creacin y manejo de excepciones definidas por el usuario.
Las excepciones definidas por el usuario permiten que el programador manipule los errores de la
aplicacin para mostrar respuestas personalizadas. Crear estas funciones permite que una
aplicacin sea ms sencilla de comprender y fcil de usar.
Las excepciones predefinidas cubren las situaciones de error ms habituales con las que nos
podemos encontrar, relacionadas con el propio lenguaje y el hardware.
JOS RIGOBERTO HERNNDEZ ALBURQUERQUE

2
4

MANUAL DE PRCTICAS POO

Imaginemos una aplicacin informtica que controla la utilizacin de los columpios de esqus. Los
pases de acceso dispondrn de un cdigo de barras que los identifica. En ciertas ocasiones nos
encontraremos con situaciones anmalas:
1. Cdigo de barras ilegible
2. Cdigo de barras no valido (pase caducado)
3. Cdigo de barras utilizado en otro columpio en un periodo de tiempo demasiado breve
Ninguna de las situaciones anteriores se puede detectar utilizando excepciones predefinidas
porque su naturaleza est estrechamente relacionada con los detalles de la aplicacin, por lo que
tendremos que hacer uso de excepciones definidas por nosotros mismos.
En POO lo ms adecuado es que las excepciones sean objetos, por lo que en Java definiremos las
excepciones como clases. Nuestras clases de excepcin en general heredaran de la clase
Exception
En las clases que creemos a partir de Excepction, incluiremos al menos el constructor vaco y otro
que contenga un String como argumento. Este String se inicializa automticamente con el nombre
de la clase; la inicializacin se realiza en la super clase Throwable. El texto que pongamos al
hacer unos del segundo constructor se aadir al nombre de la clase insertado en la super clase.
Programa ExPropia
Unidad 6 Flujos y Archivos.
6.1 Definicin
En java la entrada de los datos se realiza mediante un flujo de entrada. Ej: el teclado, un archivo,
una comunicacin de red, un objeto de internet, etc.
La salida de datos se realiza mediante un flujo de salida. Ej: Un archivo, en pantalla, en una
impresora, etc.
Lectura de Datos con BufferedReader
En Java existen dos maneras bsicas para la lectura o introduccin de datos por medio
del teclado, stas son utilizando el mtodo BufferedReader o utilizando un objeto de la
clase Scanner.
BufferedReader
Para utilizar el mtodo BufferedReader debemos importar los paquetes:

BufferedReader
InputStreamReader
IOException

Esto es porque necesitamos crear un objeto del tipo BufferedReader el cual recibe como parmetro
un objeto de la clase InputStreamReader. El uso del BufferedReader requiere forzosamente del
manejo de excepciones por ello tambin es necesario importar la clase IOException.
Declaracin del objeto BufferedReader:

JOS RIGOBERTO HERNNDEZ ALBURQUERQUE

2
5

MANUAL DE PRCTICAS POO

BufferedReader br = new BufferedReader (new InputStreamReader (System.in));


Lectura y almacenado en una variable:
dato = br.readLine();
BufferedReader.readLine()

Lee una lnea de texto hasta que encuentra un carcter de salto de lnea (\n) y retorno de carro (\r).

Sintaxis:

String readLine()

Programa SumarDatosTeclado

6.2 Clasificacin: Archivos de texto y binarios.


Los archivos de texto plano son aquellos que estn compuestos nicamente por texto sin formato,
solo caracteres. estos caracteres se pueden codificar de distintos modos dependiendo de la lengua
usada. Se les conoce tambin como archivos de texto llano o texto simple por carecer de
informacin destinada a generar formatos y tipos de letra.
Un archivo binario es un archivo informtico que contiene informacin de cualquier tipo, codificada
en forma binaria para el propsito de almacenamiento y procesamiento de ordenadores.
Muchos formatos binarios contienen partes que pueden ser interpretados como texto. Un archivo
binario que solo contiene informacin de tipo textual sin informacin sobre el formato del mismo, se
dice que es un archivo de texto plano. Habitualmente se contraponen los trminos archivo binario y
archivo de texto de forma que los primeros no contienen solamente texto.

JOS RIGOBERTO HERNNDEZ ALBURQUERQUE

2
6

MANUAL DE PRCTICAS POO

6.3 Operaciones bsicas y tipos de acceso.


Normalmente, cuando se codifica un programa, se hace con la intencin 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.
Adems, 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 sesin posterior. La forma ms normal de hacer esto es mediante la utilizacin de ficheros
que se guardarn en un dispositivo de memoria no voltil (normalmente un disco).
A todas estas operaciones, que constituyen un flujo de informacin del programa con el exterior, se
les conoce como Entrada/Salida (E/S).
Existen dos tipos de E/S; la E/S estndar que se realiza con el terminal del usuario y la E/S a
travs de fichero, en la que se trabaja con ficheros de disco.
Todas las operaciones de E/S en Java vienen proporcionadas por el paquete estndar de la API de
Java denominado java.io que incorpora interfaces, clases y excepciones para acceder a todo tipo
de ficheros.
Entrada/Salida estndar
El acceso a la entrada y salida estndar es controlado por tres objetos que se crean
automticamente al iniciar la aplicacin: System.in, System.out y System.err
a.) System.in
Este objeto implementa la entrada estndar (normalmente el teclado). Los mtodos que nos
proporciona para controlar la entrada son:
JOS RIGOBERTO HERNNDEZ ALBURQUERQUE

2
7

MANUAL DE PRCTICAS POO

read(): Devuelve el carcter que se ha introducido por el teclado leyndolo del buffer de
entrada y lo elimina del buffer para que en la siguiente lectura sea ledo el siguiente
carcter. Si no se ha introducido ningn carcter 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 estndar. Los mtodos que nos proporciona para controlar la
salida son:

print(a): Imprime a en la salida, donde a puede ser cualquier tipo bsico Java ya que Java
hace su conversin automtica a cadena.

println(a): Es idntico a print(a) salvo que con println() se imprime un salto de lnea al final
de la impresin 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 idnticas a las proporcionadas por System.out.
Ejemplo
A continuacin vemos un ejemplo del uso de estas funciones que acepta texto hasta que se pulsa
el retorno de carro e informa del nmero de caracteres introducidos.
Programa CuentaCaracteres
Entrada/Salida por fichero
Tipos de ficheros
En Java es posible utilizar dos tipos de ficheros (de texto o binarios) y dos tipos de acceso a los
ficheros (secuencial o aleatorio).
Los ficheros de texto estn compuestos de caracteres legibles, mientras que los binarios pueden
almacenar cualquier tipo de datos (int, float, boolean,...).
Una lectura secuencial implica tener que acceder a un elemento antes de acceder al siguiente, es
decir, de una manera lineal (sin saltos). Sin embargo los ficheros de acceso aleatorio permiten
acceder a sus datos de una forma aleatoria, esto es indicando una determinada posicin desde la
que leer/escribir.
Slo vamos a tratar las tres principales:

FileOutputStream: Fichero de salida de texto. Representa ficheros de texto para escritura a


los que se accede de forma secuencial.
JOS RIGOBERTO HERNNDEZ ALBURQUERQUE

2
8

MANUAL DE PRCTICAS POO

FileInputStream: Fichero de entrada de texto. Representa ficheros de texto de slo lectura


a los que se accede de forma secuencial.

RandomAccessFile: Fichero de entrada o salida binario con acceso aleatorio. Es la base


para crear los objetos de tipo fichero de acceso aleatorio. Estos ficheros permiten multitud de
operaciones; saltar hacia delante y hacia atrs para leer la informacin que necesitemos en cada
momento, e incluso leer o escribir partes del fichero sin necesidad de cerrarlo y volverlo a abrir en
un modo distinto.
Generalidades
Para tratar con un fichero siempre hay que actuar de la misma manera:
1. Se abre el fichero. Para ello hay que crear un objeto de la clase correspondiente al tipo de
fichero que vamos a manejar, y el tipo de acceso que vamos a utilizar:
TipoDeFichero obj = new TipoDeFichero( ruta );
Donde ruta es la ruta de disco en que se encuentra el fichero o un descriptor de fichero vlido. Este
formato es vlido, excepto para los objetos de la clase RandomAccessFile(acceso aleatorio), para
los que se ha de instanciar de la siguiente forma:
RandomAccessFile obj = new RandomAccessFile( ruta, modo );
Donde modo es una cadena de texto que indica el modo en que se desea abrir el fichero; "r" para
slo lectura o "rw" para lectura y escritura.
2. Se utiliza el fichero. Para ello cada clase presenta diferentes mtodos de acceso para escribir o
leer en el fichero.
3. Gestin de excepciones (opcional, pero recomendada) Se puede observar que todos los
mtodos que utilicen clases de este paquete deben tener en su definicin una clusulathrows
IOException. Los mtodos de estas clases pueden lanzar excepciones de esta clase (o sus hijas)
en el transcurso de su ejecucin, y dichas excepciones deben de ser capturadas y debidamente
gestionadas para evitar problemas.
4. Se cierra el fichero y se destruye el objeto. Para cerrar un fichero lo que hay que hacer es
destruir el objeto. Esto se puede realizar de dos formas, dejando que sea el recolector de basura
de Java el que lo destruya cuando no lo necesite (no se recomienda) o destruyendo el objeto
explcitamente mediante el uso del procedimiento close() del objeto:
obj.close()
La clase FileOutputStream
Mediante los objetos de esta clase escribimos en ficheros de texto de forma secuencial.
Presenta el mtodo write() para la escritura en el fichero. Presenta varios formatos:

int write( int c ): Escribe el carcter en el fichero.


int write( byte a[] ): Escribe el contenido del vector en el fichero.

JOS RIGOBERTO HERNNDEZ ALBURQUERQUE

2
9

MANUAL DE PRCTICAS POO

int write( byte a[], int off, int len ): Escribe len caracteres del vector a en el fichero,
comenzando desde la posicin off.
La clase FileInputStream
Mediante los objetos de esta clase leemos de ficheros de texto de forma secuencial.
Presenta el mtodo read() para la lectura del fichero. Este mtodo se puede invocar de varias
formas.
int read(): Devuelve el siguiente carcter del fichero.
int read( byte a[] ): Llena el vector a con los caracteres ledos del fichero. Devuelve la longitud del
vector que se ha llenado si se realiz con xito o 1 si no haba suficientes caracteres en el fichero
para llenar el vector.
int read( byte a[], int off, int len ): Lee len caracteres del fichero, insertndolos en el vector a.
Todos ellos devuelven -1 si se ha llegado al final del fichero (momento de cerrarle).
El siguiente ejemplo muestra el fichero de texto "/carta.txt" en pantalla:
Programa CrearCarta
La clase RandomAccessFile
Mediante los objetos de esta clase utilizamos ficheros binarios mediante un acceso aleatorio, tanto
para lectura como para escritura. En estos ficheros hay un ndice que nos dice en qu posicin del
fichero nos encontramos, y con el que se puede trabajar para posicionarse en el fichero.
Mtodos de desplazamiento
Cuenta con una serie de funciones para realizar el desplazamiento del puntero del fichero. Hay que
tener en cuenta que cualquier lectura o escritura de datos se realizar a partir de la posicin actual
del puntero del fichero.
long getFilePointer();Devuelve la posicin actual del puntero del fichero.
void seek( long l ); Coloca el puntero del fichero en la posicin indicada por l. Un fichero siempre
empieza en la posicin 0.
int skipBytes( int n ); Intenta saltar n bytes desde la posicin actual.
long length(); Devuelve la longitud del fichero.
void setLength( long l); Establece a l el tamao de este fichero.
FileDescriptor getFD(); Devuelve el descriptor de este fichero.
Mtodos de escritura
La escritura del fichero se realiza con una funcin que depende el tipo de datos que se desee
escribir.

JOS RIGOBERTO HERNNDEZ ALBURQUERQUE

3
0

MANUAL DE PRCTICAS POO

void write( byte b[], int ini, int len ); Escribe len caracteres del vector b.
void write( int i ); Escribe la parte baja de i (un byte) en el flujo.
void writeBoolean( boolean b ); Escribe el boolean b como un byte.
void writeByte( int i ); Escribe i como un byte.
void writeBytes( String s ); Escribe la cadena s tratada como bytes, no caracteres.
void writeChar( int i ); Escribe i como 1 byte.
void writeChars( String s ); Escribe la cadena s.
void writeDouble( double d ); Convierte d a long y le escribe como 8 bytes.
void writeFloat( float f ); Convierte f a entero y le escribe como 4 bytes.
void writeInt( int i ); Escribe i como 4 bytes.
void writeLong( long v ); Escribe v como 8 bytes.
void writeShort( int i ); Escribe i como 2 bytes.
void writeUTF( String s ); Escribe la cadena s utilizando la codificacin UTF-8.
Los mtodos que escriben nmeros de ms de un byte escriben el primero su parte alta.
Mtodos de lectura
La lectura del fichero se realiza con una funcin que depende del tipo de datos que queremos leer.
boolean readBoolean(); Lee un byte y devuelve false si vale 0 o true sino.
byte readByte(); Lee y devuelve un byte.
char readChar(); Lee y devuelve un caracter.
double readDouble(); Lee 8 bytes, y devuelve un double.
float readFloat(); Lee 4 bytes, y devuelve un float.
void readFully( byte b[] ); Lee bytes del fichero y los almacena en un vector b.
void readFully( byte b[], int ini, int len ); Lee len bytes del fichero y los almacena en un vector b.
int readInt(); Lee 4 bytes, y devuelve un int.
long readLong(); Lee 8 bytes, y devuelve un long.
short readShort(); Lee 2 bytes, y devuelve un short.
int readUnsignedByte(); Lee 1 byte, y devuelve un valor de 0 a 255.
int readUnsignedShort(); Lee 2 bytes, y devuelve un valor de 0 a 65535.
String readUTF(); Lee una cadena codificada con el formato UTF-8.
int skipBytes(int n); Salta n bytes del fichero.
Si no es posible la lectura devuelven 1.
6.4 Manejo de objetos persistentes
Conceptos sobre persistencia de objetos
Es la capacidad del programador para conseguir que sus datos sobrevivan a la ejecucin del
proceso que los creo, de forma que puedan ser reutilizados en otro proceso.

Es la capacidad de un lenguaje de programacin para almacenar y recuperar el estado de los


objetos de forma que sobrevivan a los procesos que los manipulan.
Persistencia: Nos referimos como datos persistentes a aquellos que son utilizados por una
aplicacin y cuya existencia debe mantenerse ms all del ciclo de vida de la aplicacin. Ejemplo:
crear una clase Cliente, utilizarla y guardarla (persistirla) en memoria no voltil.
JOS RIGOBERTO HERNNDEZ ALBURQUERQUE

3
1

MANUAL DE PRCTICAS POO

Muchas aplicaciones Java necesitan tratar con datos persistentes. En la mayora de los casos, esto
significa encararse con una base de datos relacional, posiblemente un base de datos obsoleta (o
antigua) o un Sistema de Manejo de Bases de Datos (DBMS) estndar industrial.

JOS RIGOBERTO HERNNDEZ ALBURQUERQUE

3
2

You might also like