Lab. nº1 - Universidad de La Serena

Anuncio
Programación
Laboratorio nº1
Dr. Eric Jeltsch F.
Objetivo: Empezar a programar con Java, bajo el paradigma Orientado a Objeto.
Un típico y clásico problema que bien puede ser considerado en algún curso que no
necesariamente es de orientación a objeto, pero es para ir tomando confianza con la
compilación, ejecución e incorporación de librerías externas en programas Java.
1) Escribir un programa que calcule la serie: ex= 1 + x/1! + x2/2!+ x3/3!+.....,
para un valor dado, para tal efecto, se calcularán y sumarán términos sucesivos de la
serie, hasta que el último término sumado sea menor o igual que una constante de
error predeterminada (por ejemplo 1e-7). Para conseguir ese objetivo, deberá
construir un método que tenga el siguiente prototipo static double expo(float
x); y cuya salida sea el valor aproximado de ex. Además como es costumbre, deberá
testear este programa con una clase principal, la cual invoca a expo() y comprueba
que para x=1 el resultado es e.
Nota: Para aprender a usar clases externas, es que se pide que use en la codificación de
su programa la clase Leer.java, sobre todo para el ingreso de datos.
Conceptos básicos de la Programación Orientada a Objetos (POO)
-
Variable primitiva, no hay objetos!!
class miLong{
public static void main ( String[] args )
long valor;
valor = 18234;
System.out.println( valor );
}
}
-
{
Variable referenciada, por ejemplo String tiene objetos!!
class miString0{
public static void main ( String[] args ){
String str;
str = new String( "Hola" );
System.out.println( str );
}
}
-
Ambas situaciones (Variable primitiva y referenciada.)
class miString2{
public static void main ( String[] args ){
String str;
long valor;
str = new String( "Hola" );
valor = 32912;
System.out.println( str );
System.out.println( valor );
}
}
Note que:
1. Cada vez que un operador new es usado, un nuevo objeto se crea.
2. Cada vez que un objeto es creado, existe una referencia a él.
__________________________________________________________________________
Escuela Ingeniería en Computación, Universidad de La Serena
Programación
Laboratorio nº1
Dr. Eric Jeltsch F.
3. Ésta referencia es almacenada en una variable.
4. Después, la referencia a la variable es usada para encontrar el objeto.
5. Si otra referencia es almacenada en la variable, ella reemplaza la referencia previa.
6. Si ninguna variable referencia a un objeto, se dice que existe "garbage". La palabra
"garbage" (basura) es el termino correcto usado en ciencias de la computación para referirse
a objetos que no tienen referencia.
-
Sintaxis de la definición de una clase
class Nombre_Clase {
//Descripción de las variables, métodos y constructores que inicializan el
//nuevo objeto.
}
//Una forma didáctica es separarla en tres secciones:
class Nombre_Clase
{
// Descripción de las variables.
// Descripción de los constructores.
// Descripción de los métodos.
}
-
Sintaxis de la definición de un constructor
classNombre( lista_parametros )
{
// Declaraciones usualmente usan las variables de la clase y los
//parametros en lista_parametros.
}
Note que:
1.- Ningún tipo return está al frente de classNombre.
2.- No existe declaración return en el cuerpo del constructor.
3.- El constructor debe tener el mismo nombre de la clase.
4.- lista_parametros es una lista de valores y sus tipos son de acuerdo al constructor.
5.- Es correcto si la lista_parámetros es vacía.
6.- Una clase a menudo tiene varios constructores con diferentes parámetros.
-
Sintaxis de la definición de un método
returnTipo Nombre_Metodo( Lista de parametros )
{
// Java declaraciones
return returnValor;
}
Note que:
returnTipo es el tipo de valor que el método usa para llamar al método. Su método puede
return valores. Por ejemplo, length() de la clase String returns un tipo int. return es usado
por el método para devolver un valor a su llamada. Si Ud. desea un método que no devuelva
valor a su llamada, use el tipo de return void. El return puede ser omitido; pues el método
automáticamente devolverá un valor tras su ejecución.
__________________________________________________________________________
Escuela Ingeniería en Computación, Universidad de La Serena
Programación
Laboratorio nº1
Dr. Eric Jeltsch F.
Ejemplo Básico
//definición de la clase
class HolaObjeto {
// definición del método
void saludo()
{
System.out.println("Hola desde un objeto!");
}
}
//clase testeadora
class HolaTest
{
public static void main ( String[] args )
HolaObjeto
miObjeto = new HolaObjeto();
miObjeto.saludo();
}
}
-
{
Características de la Clase
-public, es un modificador que contiene la clase y que permite que el objeto así definido
pueda ser accedido por métodos de cualquier clase.
-abstract, define un método o clase abstracta.
-final, especifica que una clase no podrá tener herederos (es decir no puede tener subclases),
ó en términos de variable será solo una constante, o en términos de método que no podrá ser
reemplazado.
-
Atributos de la clase (public, protected, private, static, final,
transient, volatile)
-public , es un atributo que es visible para toda otra clase. Ahora tal vez es posible entender
por qué main() siempre está precedido por el especificador public, ya que es llamado por
código que está fuera del programa, es decir por el interprete de Java.
-protected , este atributo es visible inclusive para clases que heredan de la actual, así como
clases del mismo paquete.
-private, este atributo es solamente visible al interior de la clase declarada.
-static, la validez de este atributo es en toda la clase, es decir todo objeto de esa clase
comparte los mismos atributos.
-final, este atributo se refiere a una constante, y puede según su inicialización no ser
cambiada.
-volatile, especifica que el valor de una variable puede cambiar de forma asíncronica, por lo
que el compilador no debe intentar optimarla.
2) La POO sugiere separar las implementaciones en archivos .class,
fundamentalmente para reutilizar y mantener dichas clases, bajo este requerimiento
se pide:
Diseñar una clase que se llame miFecha, que debe almacenar una fecha, (día: entre 1 y (29,
30 o 31), mes entre (1 y 12), y año sea mayor, o igual que 1582. Parece lógico pensar que la
estructura de dato de un objeto fecha va a estar formada por los atributos día, mes y año,
(para implementar la clase use la clase Leer.java).
__________________________________________________________________________
Escuela Ingeniería en Computación, Universidad de La Serena
Programación
Laboratorio nº1
Dr. Eric Jeltsch F.
Por otra parte, las operaciones sobre estos objetos tendrán que permitir asignar una fecha, de
manera que debería contener esta clase un método1, asignarFecha(), (este método debería
tener la clase GregorianCalendar para obtener una fecha de un objeto existente) en
método2, obtenerFecha(), y verificar si la fecha que se quiere asignar es correcta, que
debería hacerlo otro método3, llamado fechaCorrecta().
Estos tres métodos formarán la interfaz pública.
Por otra parte, si el día corresponde a Febrero, el método fechaCorrecta() necesitará
comprobar si el año es "bisiesto", para lo cual deberá añadir un método bisiesto(). Ya
que un usuario NO necesita acceder a este método, declárelo protegido, con la intención de
que en el futuro, sí pueda ser accedido desde una subclase.
Con todos estos datos, está en condiciones de implementar la clase miFecha. Resumiendo,
la funcionalidad de esta clase está soportada por los atributos privado día, mes y año, y por
los métodos asignarFecha(), obtenerFecha(), fechaCorrecta() y bisiesto().
Para concluir falta construir una clase principal que testee la clase miFecha. Para tal efecto,
escribir una aplicación TestearFecha que usa la clase miFecha. Recordar que cada vez que
se entregue una fecha el programa deberá verificar si ella es correcta, de otra manera,
continua hasta que satisfaga los rangos que deben ser anunciados a los usuarios.
Por último no olvidar la robustez y la optimización de códigos, fundamentales en un buen
programador.
Una visualización del resultado se puede apreciar en la figura siguiente.
Actividad 3:
__________________________________________________________________________
Escuela Ingeniería en Computación, Universidad de La Serena
Descargar