Upload
dangthu
View
237
Download
0
Embed Size (px)
Citation preview
Introducción a java
1 Aurelio López Ovando
UNIDAD 1.- INTRODUCCIÓN A JAVA Historia de java Creado por Sun Microsystems Inc. en 1990, como un proyecto para desarrollar un sistema que controlara
electrodomésticos. Se pretendía crear un hardware polivalente, con un Sistema Operativo eficiente (SunOS) y un
lenguaje de desarrollo denominado Oak (roble), el proyecto finalizó en 1992 y debido a su alto costo en relación a
otros proyectos del mismo tipo que ya existían, fue declarado como un fracaso.
En 1995 el proyecto fue retomado y gracias a una acertada decisión de distribuir libremente el lenguaje por
Internet, se popularizó lográndose que una gran cantidad de programadores lo depuraran y terminaran perfilar
según lo que ellos necesitaban, se añadieron numerosas clases.
El nombre del lenguaje tuvo que ser cambiado ya que existía otro lenguaje llamado Oak. Se buscaban un nombre
que evocara la esencia de la tecnología (viveza, animación, rapidez, interactividad…). Java fue elegido de entre
muchísimas propuestas. No es un acrónimo, sino mas bien un nombre inspirado en lago que a muchos
programadores les gusta beber en grandes cantidades: una taza de café (Java en argot Inglés americano). De esta
forma, Sun lanzó las primeras versiones de Java a principios de 1995.
Debido a la explosión tecnológica de estos últimos años Java ha desarrollado soluciones personalizadas para cada
ámbito tecnológico, agrupando cada uno de esos ámbitos en una edición distinta:
o J2SE (Java 2 Stantard Edition)
o J2EE (Java 2 Enterprise Edition)
o J2ME (Java 2 Micro Edition)
Funcionamiento de Java Fuente Java : archivo .java
o Archivo utilizado durante la fase de programación. o El único archivo realmente inteligible para el programador.
Byte-Code Java : archivo .class o Código objeto destinado a ser ejecutado en toda Maquina Virtual de Java o Procede de la compilación del código fuente
Maquina Virtual Java o Interprete de java convirtiendo el código a un lenguaje entendible para la máquina, ejecuta el Byte-
Code Java.
Visión general y elementos básicos del lenguaje
En Java, prácticamente todo son clases (objetos). El lenguaje obliga a la programación orientada a objetos y no
permite la posibilidad de programar mediante ninguna otra técnica que no sea ésta. Por esta razón, un
programa estará formado por uno o varios archivos fuente y en cada uno de ellos tendrá definida una o varias
clases.
El lenguaje Java, distingue entre mayúsculas y minúsculas, por lo que es importante transcribirlo literalmente.
También hay que comentar que en el nombre del archivo fuente también se hace distinción entre mayúsculas
y minúsculas a la hora de compilarlo, aunque el sistema operativo empleado no haga esta distinción. La
extensión del mismo debe ser .java
Introducción a java
2 Aurelio López Ovando
1.- Programa que imprime el mensaje "Hola mundo" en pantalla. Objetivo: Comenzar a familiarizarse con el entorno de java
Como guardarlo.
Como compilar y ejecutar.
Función principal main
Comentarios
Un archivo fuente puede contener más de una clase, pero sólo una puede ser public. El nombre del archivo fuente
debe coincidir con el de la clase public. Una aplicación está constituida por varias clases, cada una realiza funciones
particulares, permitiendo construir aplicaciones con gran modularidad e independencia entre clases. La aplicación se
ejecuta por medio del nombre de la clase que contiene la función main().
2.- Programa que muestra un mensaje en pantalla utilizando una clase diferente.
Objetivo: Familiarizarse con la declaración de otras clases.
Definir una clase.
Crear una clase.
Invocar una clase.
3.- Declarar una clase que imprima los datos del curso: Escuela, nombre del curso, nombre del instructor.
class hola { public static void main(String arg[]) { System.out.println("Hola mundo"); } }
class saludo { public void saludar() { System.out.println("Hola mundo..."); } } class hola_2 { public static void main(String arg[]) { saludo x = new saludo(); x.saludar(); } }
import java.io.*; class curso { public void imprime_datos() { System.out.println("CURSO: Java "); System.out.println("INSTITUCION: ITESSCAM"); System.out.println("INSTRUCTOR: Aurelio Lopez Ovando"); } } class datos_curso { public static void main(String arg[])throws IOException { curso Curso = new curso(); Curso.imprime_datos(); } }
Introducción a java
3 Aurelio López Ovando
Tipos de datos Tipos de dato simples: Pueden utilizarse directamente en un programa, sin necesidad del uso de clases (POO).
Tipos de datos referenciales: Son las clases, en las que se basa la programación orientada a objetos. Se les
llama referencias porque en realidad lo que se almacena en los mismos son punteros a zonas de memoria
donde se encuentran almacenadas las estructuras de datos que los soportan. Dentro de este grupo se
encuentran las clases (objetos) y también se incluyen las interfaces, los vectores y los Strings.
Declaración de variables
La declaración de una variable contiene el nombre (identificador de la variable) y el tipo de dato al que pertenece. El ámbito de la variable depende de la localización en el programa donde es declarada. Las variables pueden ser inicializadas en el momento de su declaración, siempre que el valor que se les asigne coincida con el tipo de dato de la variable.
Identificadores
Los identificadores son los nombres que se les da a las variables, clases, interfaces, atributos y métodos de un programa.
Reglas para la creación de identificadores:
1. Java hace distinción entre mayúsculas y minúsculas, por lo tanto, nombres o identificadores como var1, Var1 y
VAR1 son distintos.
2. Pueden estar formados por cualquiera de los caracteres del código Unicode, por lo tanto, se pueden declarar
variables con el nombre: añoDeCreación, raïm, etc. (se acabó la época de los nombres de variable como
ano_de_creacion), aunque eso sí, el primer carácter no puede ser un dígito numérico y no pueden utilizarse
espacios en blanco ni símbolos coincidentes con operadores.
3. La longitud máxima de los identificadores es prácticamente ilimitada.
4. No puede ser una palabra reservada del lenguaje ni los valores lógicos true o false.
5. No pueden ser iguales a otro identificador declarado en el mismo ámbito.
6. Por convenio, los nombres de las variables y los métodos deberían empezar por una letra minúscula y los de
las clases por mayúscula. Además, si el identificador está formado por varias palabras la primera se escribe en
minúsculas (excepto para las clases) y el resto de palabras se hace empezar por mayúscula (por ejemplo:
añoDeCreación). Estas reglas no son obligatorias, pero son convenientes ya que ayudan al proceso de
codificación de un programa, así como a su legibilidad. Es más sencillo distinguir entre clases y métodos o
variables.
TIPO DESCRIPCIÓN LONG. RANGO
byte byte 1 byte - 128 … 127
short entero corto 2 bytes - 32.768 … 32.767
int entero 4 bytes - 2.147.483.648 … 2.147.483.647
long entero largo 8 bytes
-9.223.372.036.854.775.808… 9.223.372.036.854.775.807
float
real en coma flotante
32 bits 3,4*10-38 … 3,4*1038
double
real en coma flotante
64 bits 1,7*10-308 … 1,7*10308
char carácter 2 bytes 0 … 65.535
boolean lógico 1 bit true / false
Introducción a java
4 Aurelio López Ovando
4.- Declarar dos variables numéricas y mostrar la suma de estas dos variables
Objetivo: Empezar a declarar variables.
Utilizar los tipos de datos conscientemente.
Inicializar variables.
Alcance de las variables.
Imprimir el contenido de una variable.
Operadores aritméticos:
Operador Formato Descripción
- op1 - op2 -op1
Resta aritmética de dos operandos. Cambio de signo
* op1 * op2 Multiplicación de dos operandos.
% op1 % op2 Resto de la división entera ( o módulo)
++ op1++ ++op1
Incremento unitario
-- op1-- -- op1
Decremento unitario
/ op1 / op2 División entera de dos operandos.
+ op1 + op2 Suma aritmética de dos operandos.
Operadores relacionales:
Operador Formato Descripción
> op1 > op2 Devuelve true (cierto) si op1 es mayor que op2
< op1 < op2 Devuelve true (cierto) si op1 es menor que op2
>= op1 >= op2 Devuelve true (cierto) si op1 es mayor o igual que op2
<= op1<= op2 Devuelve true (cierto) si op1 es menor o igual que op2
== op1 == op2 Devuelve true (cierto) si op1 es igual a op2
!= op1 != op2 Devuelve true (cierto) si op1 es distinto de op2
Operadores lógicos:
Operador Formato Descripción
&& op1 && op2 Y lógico. Devuelve true (cierto) si son ciertos op1 y op2
|| op1 || op2 O lógico. Devuelve true (cierto) si son ciertos op1 o op2
! ! op1 Negación lógica. Devuelve true (cierto) si es false op1.
class operaciones { public void resultado() { int n1=8, n2=10; int s = n1+n2; System.out.println("La suma es: " + s); } } class suma { public static void main(String arg[]) { operaciones x = new operaciones(); x.resultado(); } }
Introducción a java
5 Aurelio López Ovando
Operadores de asignación: El operador de asignación es el símbolo igual ( = ).
op1 = Expresión
Asigna el resultado de evaluar la expresión de la derecha a op1.
Además del operador de asignación existen unas abreviaturas cuando el operando que aparece a la izquierda del
símbolo de asignación también aparece a la derecha del mismo:
Operador Formato Equivalencia
+= op1 += op2 op1 = op1 + op2
-= op1 -= op2 op1 = op1 - op2
*= op1 *= op2 op1 = op1 * op2
/= op1 /= op2 op1 = op1 / op2
%= op1 %= op2 op1 = op1 % op2
Precedencia de operadores:
5.- Programa que pida el nombre de una persona y lo salude por su nombre.
Objetivo: Aprender a introducir datos
desde el teclado.
Como incluir una biblioteca
Biblioteca io.
Como leer datos desde el
teclado.
El operador de asignación =
Manejo de errores.
Modificar el programa para
que lea datos de
distintos tipos.
El método String readLine() perteneciente a BufferReader lee todos los caracteres hasta encontrar un '\n' o '\r' y los
devuelve como un String (sin incluir '\n' ni '\r'). Este método también puede lanzar java.io.IOException.System.in es
un objeto de la clase InputStream. BufferedReader pide un Reader en el constructor. El puente de unión necesario lo
dará InputStreamReader, que acepta un InputStream como argumento del constructor y es una clase derivada de
Reader.
Operadores postfijos [] . (paréntesis)
Operadores unarios ++expr --expr -expr
Creación o conversión de tipo new (tipo)expr
Multiplicación y división * / %
Suma y resta + -
Relacionales < > <= >=
Igualdad y desigualdad == !=
AND lógico &&
OR lógico ||
Asignación = += -= *= /= %=
import java.io.*; class persona { public void get_name()throws IOException { String nombre; BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); System.out.print("Como te llamas? "); nombre = in.readLine(); System.out.println("Hola " + nombre); } } class pide_datos { public static void main(String arg[])throws IOException { persona x = new persona(); x.get_name(); } }
Introducción a java
6 Aurelio López Ovando
6.- Preguntar los datos de una persona (nombre, edad, estatura).
Leer diferentes tipos de datos.
Conversores con String.
Imprimir los datos en pantalla.
7.- Programa que pida un número y determine si es par o impar
Objetivo: Entender el uso de condiciones.
Una condición evalúa una expresión como verdadero o falsa. Puede contener o no un bloque de código
dependiendo del número de líneas que tenga.
Explicar el operador %
import java.io.*; class persona { public void get_name()throws IOException { String nombre; int edad; float estatura; BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); System.out.print("Como te llamas? "); nombre = in.readLine(); System.out.println("Hola " + nombre); System.out.print("Que edad tiene? "); edad = Integer.parseInt(in.readLine()); System.out.print("Tu estatura? "); estatura = Float.parseFloat(in.readLine()); System.out.println("Edad: " + edad); System.out.println("Estatura: " + estatura); System.out.println("Adios " + nombre); } } class pide_datos { public static void main(String arg[])throws IOException { persona x = new persona(); x.get_name(); }
import java.io.*; class test_par { public void is_par()throws IOException { int nume; BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); System.out.print("Teclea un numero: "); nume = Integer.parseInt(in.readLine()); if(nume % 2 ==0) System.out.println("Es par..."); else System.out.println("No es par"); } } class par { public static void main(String arg[])throws IOException { test_par x = new test_par(); x.is_par(); } }
Introducción a java
7 Aurelio López Ovando
8 .- Determinar en base a un promedio se un alumno es acreedor de una beca, para ser acreedor de una beca se debe cumplir con un promedio general mayor de 9.0 y no haber tenido ninguna falta durante el ciclo escolar.
Condiciones anidadas
Operadores lógicos
Bloques de código
CONVERSIONES En muchas ocasiones hay que transformar una variable de un tipo a otro, por ejemplo de int a double, o de float a
long. La conversión entre tipos primitivos se realiza de modo automático (conversiones implícitas), estas conversiones
se hacen al mezclar variables de distintos tipos en expresiones matemáticas o al ejecutar sentencias de asignación en
las que el miembro izquierdo tiene un tipo distinto (más amplio) que el resultado de evaluar el miembro derecho.
Las conversiones de un tipo de mayor a otro de menor precisión requieren una orden explícita del programador, pues
son conversiones inseguras que pueden dar lugar a errores (por ejemplo, para pasar a short un número almacenado
como int, hay que estar seguro de que puede ser representado con el número de cifras binarias de short). A estas
conversiones explícitas de tipo se les llama cast. El cast se hace poniendo el tipo al que se desea transformar entre
paréntesis, por ejemplo, long result;
result = (long) (a/(b+c));
import java.io.*; class becado { public void becalo()throws IOException { float prom; int faltas; BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); System.out.print("Promedio del alumno: "); prom = Float.parseFloat(in.readLine()); System.out.print("Numero de faltas en el ciclo escolar: "); faltas = Integer.parseInt(in.readLine()); if(prom > 9.0 && faltas == 0) { System.out.println("El alumnos puede ser becado"); System.out.println("Favor de iniciar los trámites correspondientes."); } else { System.out.println("El alumno no puede ser becado"); if(prom<=9.0) System.out.println("El promedio no es suficiente..."); if(faltas>0) System.out.println("Ha tenido faltas..."); } } } class beca { public static void main(String arg[])throws IOException { becado x = new becado(); x.becalo(); } }
Introducción a java
8 Aurelio López Ovando
9.- A un trabajador se le paga 80.00 por hora de trabajo, su jornada normal de trabajo a la semana debe ser de 40 horas, si hace mas de ese número cada hora extra se le pagará una bonificación de $20.00 por cada hora extra, hacer un programa que en base al número de horas trabajadas determine cuanto se le debe pagar a un trabajador.
Mostrar las conversiones implícitas y explicitas
Ciclos
Son estructuras de repetición. Bloques de instrucciones que se repiten un número de veces mientras se cumpla una
condición o hasta que se cumpla una condición.
Existen tres construcciones para estas estructuras de repetición:
Bucle for.
Bucle do-while.
Bucle while.
Ciclo for
Como regla general puede decirse que se utilizará el ciclo for cuando se conozca de antemano el número exacto de
veces que ha de repetirse un determinado bloque de instrucciones.
for (inicialización ; condición ; incremento)
bloque instrucciones
Ciclo do … while
Se utilizará el ciclo do-while cuando no se conoce exactamente el número de veces que se ejecutará el bucle pero se
sabe que por lo menos se ha de ejecutar una.
Ciclo do-while.
do
bloque instrucciones
while (Expresión);
import java.io.*; class salario { public void calcular()throws IOException { int ht,he=0; float the,th,tp; BufferedReader dat = new BufferedReader(new InputStreamReader(System.in)); System.out.print("Horas trabajadas: "); ht = Integer.parseInt(dat.readLine()); if(ht>40) he = ht - 40; th = (float)(ht * 80.00); the = (float)(he * 20.00); tp = th + the; System.out.println("Total a pagar: " + tp); } } class jornada_trabajo { public static void main(String arg[])throws IOException { salario Salario = new salario(); Salario.calcular(); } }
Introducción a java
9 Aurelio López Ovando
Ciclo while
Se utilizará el bucle while-do cuando es posible que no deba ejecutarse ninguna vez.
while (Expresión)
bloque instrucciones
8.- Mostrar los primeros 50 números naturales Ciclo for
Objetivo: Aprender a utilizar los ciclos
Explicar las 3 partes del ciclo for
El ciclo for es finito
Puede tener un bloque de código.
El ciclo for también puede ser decreciente
Ciclo do…while
Entra por lo menos una vez al ciclo
Después de entrar al ciclo examina la condición.
El usuario puede controlar la condición
class ciclo_1 { public void muestra() { int i; for(i=0;i<=50;i++) System.out.println(i); } } class muestra_50 { public static void main(String arg[]) { ciclo_1 x = new ciclo_1(); System.out.println("Los primeros 50 numeros son: "); x.muestra(); } }
public void muestra() { int i; for(i=50;i>0;i--) System.out.println(i); } }
class ciclo_1 { public void muestra() { int i=0; do { System.out.println(i); i++; } while(i<=50); } } class muestra_50dw { public static void main(String arg[]) { ciclo_1 x = new ciclo_1(); System.out.println("Los primeros 50 numeros son: "); x.muestra(); } }
Introducción a java
10 Aurelio López Ovando
Ciclo while
Es controlado por una condición.
Antes de entrar al ciclo examinan la condición.
El usuario puede controlar la condición.
class ciclo_1 { public void muestra() { int i=0; while(i<=50) { System.out.println(i); i++; } } } class muestra_50w { public static void main(String arg[]) { ciclo_1 x = new ciclo_1(); System.out.println("Los primeros 50 numeros son: "); x.muestra(); } }
Introducción a java
11 Aurelio López Ovando
Ejercicios propuestos:
A) Se necesita saber el promedio de un alumno en una materia en la que se califican tres cosas:
1. Examen escrito. 2. Entrega de proyecto. 3. Participación en clase.
Se debe pedir el valor correspondiente a cada calificación y dar como salida el promedio de estas calificaciones.
B) En un casa de apuestas los jugadores tienen acciones las cuales pueden apostar, cada acción se cotiza en $10,000, en una jornada participan 5 jugadores, cada uno de ellos puede apostar una determinada cantidad de acciones, al finalizar la jornada se debe saber quien apostó mas y quien apostó menos. Como dato de entrada se pide el número de acciones que apuesta cada jugador.
C) Los usuarios de una página web, al momento de registrarse, se les pide registrar también una clave numérica para poder ingresar posteriormente a la página. La clave de acceso debe tener exactamente tres cifras. Hacer un programa que valide que la clave que teclea el usuario realmente tenga tres cifras, si el número tecleado no es de tres cifras marcar el error y volver a pedirlo hasta que tenga tres cifras.
D) Modificar el anterior de tal manera que después de leer la clave, determine si el número es capicúa, es decir, que tenga el mismo valor leído al revés. Por ejemplo: 656, 333, 121…
E) Escribir un programa que permita el ingreso de un número natural n y que calcule n! exhibiendo el resultado. Por ejemplo: 5! = 5 x 4 x 3 x 2 = 120
F) Lo mismo pero para la sucesión de Fibonacci. Por ejemplo: Serie Fibonacci de 7 = 1, 1, 2, 3, 5, 8, 13 (Es decir la sucesión tiene 7 números)
G) Contar los números enteros positivos introducidos por teclado. El algoritmo debe terminar cuando se
lea un número negativo o cero.
Introducción a java
12 Aurelio López Ovando
UNIDAD 2.- ATRIBUTOS Y MÉTODOS Clases Una clase es una representación de un objeto de la vida real, está definida mediante código que determinan sus
características y las operaciones que puede realizar, a las características se llaman atributos y a las operaciones
métodos.
Por ejemplo: Si pensamos en una persona y pretendemos definir una clase, debemos pensar que una persona tiene
muchas características: color de cabello, estatura, nombre, edad, etc., y que las acciones que puede hacer esta
personas son variadas, se debe elegir cuidadosamente, dependiendo de lo que el programa necesite, las
características que definirán en una clase,
Ejemplo de una clase llamada persona
Atributos Los atributos sirven, en principio, para almacenar valores de los objetos que se instancian a partir de una clase. La sintaxis general es la siguiente: [modificador de ámbito] [static] [final] tipo nombreAtributo
Modificador de ámbito: Especifican la forma en que puede accederse a los mismos desde otras clases.
o Prívate.- El modificador de ámbito private es el más restrictivo de todos. Todo atributo private es visible
únicamente dentro de la clase en la que se declara. No existe ninguna forma de acceder al mismo si no es
a través de algún método (no private) que devuelva o modifique su valor.
o public.- El modificador de ámbito public es el menos restrictivo de todos. Un atributo public será visible en
cualquier clase que desee acceder a él, simplemente anteponiendo el nombre de la clase.
o protected.- Los atributos protected pueden ser accedidos por las clases del mismo paquete (package) y
por las subclases del mismo paquete, pero no pueden ser accedidas por subclases de otro paquete,
aunque sí pueden ser accedidas las variables protected heredadas de la primera clase.
o El ámbito por defecto.- Los atributos que no llevan ningún modificador de ámbito pueden ser accedidos
desde las clases del mismo paquete, pero no desde otros paquetes.
Atributos:
Nombre
Edad
Estatura
peso
Métodos:
Correr
Hablar
Dormir
Pensar
Introducción a java
13 Aurelio López Ovando
1.- Programa que declare una clase que guarde los datos de un alumno de un curso de java.
Objetivo: Aprender a definir atributos utilizando modificadores de ámbito.
Intentar leer os atributos desde main.
Modificar los atributos a public y leerlos desde main.
Que modificador de ámbito es mas recomendable
2.- Programa que calcule el total a pagar de la compra de artículo menos un 10% de descuento.
import java.io.*; class Alumno { private String matricula, nombre, carr; public void leer_datos()throws IOException { BufferedReader dat = new BufferedReader(new InputStreamReader(System.in)); System.out.print("Matricula: "); matricula = dat.readLine(); System.out.print("Nombre: "); nombre = dat.readLine(); System.out.print("Carrera: "); carr = dat.readLine(); } } class curso_java { public static void main(String arg[])throws IOException { Alumno al = new Alumno(); al.leer_datos(); } }
import java.io.*; class Articulo { private String articulo; private float precio, subtotal, total, descuento=0f; private int cantidad; public void vender()throws IOException { BufferedReader dat = new BufferedReader(new InputStreamReader(System.in)); System.out.print("Articulo: "); articulo = dat.readLine(); System.out.print("Precio: "); precio = Float.parseFloat(dat.readLine()); System.out.print("Cantidad: "); cantidad = Integer.parseInt(dat.readLine()); subtotal = precio * cantidad; descuento = (float)(subtotal * 0.10); total = subtotal - descuento; System.out.println("Subtotal: " + subtotal); System.out.println("Descuento: " + descuento); System.out.println("Total a pagar: " + total); } }
class venta { public static void main(String arg[])throws IOException { Articulo articulo = new Articulo(); articulo.vender(); } }
Introducción a java
14 Aurelio López Ovando
Atributos final La palabra reservada final calificando a un atributo o variable sirve para declarar constantes, no se permite la
modificación de su valor. El valor de un atributo final debe ser asignado en la declaración del mismo, cualquier intento
de modificar su valor generará error por parte del compilador.
Modificando el programa anterior utilizando un atributo final, podemos utilizar el descuento del 10% como un valor
constante.
Intentar leer o modificar de algún modo el valor de desc
Atributos static Llamados también atributos de clase, son variables miembro únicas para toda la clase y que existen aunque no se haya
creado ningún objeto de la clase, suelen utilizarse para definir variables que sólo tienen sentido para toda la clase (por
ejemplo, un contador de objetos creados).
Las variables de clase son lo más parecido que Java tiene a las variables globales, existe una sola copia de la variable
para todos los objetos de su clase, si no se les da valor en la declaración, las variables miembro static se inicializan con
los valores por defecto para los tipos primitivos (false para boolean, el carácter nulo para char y cero para los tipos
numéricos), y con null si es una referencia.
import java.io.*; class Articulo { private String articulo; private float precio, subtotal, total, descuento=0f; private int cantidad; private final double desc = 0.10; public void vender()throws IOException { BufferedReader dat = new BufferedReader(new InputStreamReader(System.in)); System.out.print("Articulo: "); articulo = dat.readLine(); System.out.print("Precio: "); precio = Float.parseFloat(dat.readLine()); System.out.print("Cantidad: "); cantidad = Integer.parseInt(dat.readLine()); subtotal = precio * cantidad; descuento = (float)(subtotal * desc); total = subtotal - descuento; System.out.println("Subtotal: " + subtotal); System.out.println("Descuento: " + descuento); System.out.println("Total a pagar: " + total); } } class Venta_final { public static void main(String arg[])throws IOException { Articulo articulo = new Articulo(); articulo.vender(); } }
Introducción a java
15 Aurelio López Ovando
Modificando el programa anterior, agregamos una propiedad que controle el número de venta (Una especie de folio),
las ventas estarán controladas por un ciclo.
Lo interesante de este programa es observar como la variable num_venta es común para cada ocasión que la clase es creada, para ser mas claro, al crear una clase todos los atributos pierden su valor, se vuelven a inicializar, a excepción num_venta que al ser static siempre conserva su valor, no importa cuantas instancias de esta clase se creen.
import java.io.*; class Articulo { private String articulo; private float precio, subtotal, total, descuento=0f; private int cantidad; final double desc = 0.10; static int num_venta = 0; public void vender()throws IOException { BufferedReader dat = new BufferedReader(new InputStreamReader(System.in)); num_venta++; System.out.println("Numero de venta: " + num_venta); System.out.print("Articulo: "); articulo = dat.readLine(); System.out.print("Precio: "); precio = Float.parseFloat(dat.readLine()); System.out.print("Cantidad: "); cantidad = Integer.parseInt(dat.readLine()); subtotal = precio * cantidad; descuento = (float)(subtotal * desc); total = subtotal - descuento; System.out.println("Subtotal: " + subtotal); System.out.println("Descuento: " + descuento); System.out.println("Total a pagar: " + total); } } class Venta_static { public static void main(String arg[])throws IOException { int resp=0; BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); do { Articulo articulo = new Articulo(); articulo.vender(); System.out.print("Si desea realizar otra venta presiones 0 "); resp = Integer.parseInt(in.readLine()); } while(resp==0); } }
Introducción a java
16 Aurelio López Ovando
Métodos Los métodos son funciones definidas dentro de una clase. Indican acciones u operaciones a realizar en la clase.
La sintaxis general para crear un método es la siguiente:
Modificador de ámbito Valor devuelto Nombre del método ( Lista de parámetros)
Cuerpo del método Sintaxis general de los métodos:
Declaración de método
{
Cuerpo del método
}
El cuerpo del método contiene la implementación del mismo y se codifica entre llaves. Dentro del mismo pueden
declararse variables locales.
Modificadores de ámbito Funcionan exactamente igual que para los atributos, pueden ser public, private, protect o por defecto.
Valor devuelto Un método es una función, y como tal debe retornar un valor, el valor de retorno puede ser un valor de un tipo
primitivo o una referencia, en cualquier caso no puede haber más que un único valor de retorno (que puede ser un
objeto o un array). El valor devuelto se especifica por medio de la palabra reservada return, si el tipo de dato devuelto
del método ha sido declarado void, entonces únicamente se sale del cuerpo del método mediante sin la instrucción
return; Si en la declaración de la cabecera del método se ha declarado un tipo de dato devuelto por el mismo,
entonces se devolverá el valor correspondiente al método mediante return seguido de una expresión cuyo resultado
es del mismo tipo que el declarado.
Referencia a atributos de método ante la ambigüedad: Si existen en un método variables locales o parámetros con el mismo nombre de atributos de la clase, éstos
últimos quedan ocultados dentro del cuerpo del método. Para hacer referencia a los atributos del método en
lugar de las variables locales o parámetros, se les antepone la palabra reservada this seguida de un punto (.),
que identifica al objeto actual.
Introducción a java
17 Aurelio López Ovando
Modificando nuevamente el programa de la venta, utilizaremos ahora dos métodos, uno público y uno privado
Explicar: o Porque se declara público o
privado.
o Valor de retorno
Lista de parámetros La lista de parámetros consiste en una serie de variables, separadas por comas y declarando el tipo al que pertenecen.
Aunque existan varios parámetros pertenecientes al mismo tipo o clase, no pueden declararse abreviadamente, como
ocurre con las variables locales y los atributos, indicando el tipo y a continuación la lista de parámetros separados por
comas. La declaración de un parámetro puede ir antecedida, como ocurre con las variables locales, por la palabra
reservada final. En ese caso, el valor de dicho parámetro no podrá ser modificado en el cuerpo del método.
Los parámetros de un método pueden ser de dos tipos:
import java.io.*; class Articulo { private String articulo; private float precio, subtotal, total, descuento=0f; private int cantidad; private void imprimir_nota() { System.out.println("Subtotal: " + subtotal); System.out.println("Descuento: " + descuento); System.out.println("Total a pagar: " + total_pagar()); } private float total_pagar() { total = subtotal - descuento; return total; } public void vender()throws IOException { BufferedReader dat = new BufferedReader(new InputStreamReader(System.in)); System.out.print("Articulo: "); articulo = dat.readLine(); System.out.print("Precio: "); precio = Float.parseFloat(dat.readLine()); System.out.print("Cantidad: "); cantidad = Integer.parseInt(dat.readLine()); subtotal = precio * cantidad; descuento = (float)(subtotal * 0.10); imprimir_nota(); } } class Metodos_venta { public static void main(String arg[])throws IOException { Articulo articulo = new Articulo(); articulo.vender(); } }
Introducción a java
18 Aurelio López Ovando
o Variables de tipo simple de datos: En este caso, el paso de parámetros se realiza siempre por valor. Es
decir, el valor del parámetro de llamada no puede ser modificado en el cuerpo del método (El método
trabaja con una copia del valor utilizado en la llamada).
o Variables de tipo objeto (referencias): En este caso, lo que realmente se pasa al método es un puntero al
objeto y, por lo tanto, el valor del parámetro de llamada sí que puede ser modificado dentro del método
(El método trabaja directamente con el valor utilizado en la llamada), a no ser que se anteponga la
palabra reservada final.
Una vez más modificando el programa
de la venta podemos utilizar métodos
con parámetros.
Argume
ntos A un programa escrito en Java también se le pueden pasar parámetros en la línea de comandos. Estos parámetros se
especifican en el método main() del programa, donde siempre hay que declarar un vector de Strings.
import java.io.*; class Articulo { private String articulo; private float precio, subtotal, total, descuento=0f; private int cantidad; private void imprimir_nota(float st, float desc) { System.out.println("Subtotal: " + st); System.out.println("Descuento: " + desc); System.out.println("Total a pagar: " + total_pagar(st,desc)); } private float total_pagar(float st, float desc) { total = st - desc; return total; } public void vender()throws IOException { BufferedReader dat = new BufferedReader(new InputStreamReader(System.in)); System.out.print("Articulo: "); articulo = dat.readLine(); System.out.print("Precio: "); precio = Float.parseFloat(dat.readLine()); System.out.print("Cantidad: "); cantidad = Integer.parseInt(dat.readLine()); subtotal = precio * cantidad; descuento = (float)(subtotal * 0.10); imprimir_nota(subtotal,descuento); } }
class Param_venta { public static void main(String arg[])throws IOException { Articulo articulo = new Articulo(); articulo.vender(); } }
Introducción a java
19 Aurelio López Ovando
En Java, los vectores son objetos, con todas las ventajas que ello implica. Así, se puede acceder en tiempo de ejecución
al número de elementos del vector (número de argumentos) mediante el atributo público length. Si se intenta acceder
a un elemento del vector más allá del límite, se genera una excepción.
2.- Programa que desde la línea de comandos se le envíe un nombre, el programa debe saludar ofrecer un saludo al
nombre de la persona enviado.
o El programa al momento de ejecutarse debe ser de esta forma:
Java Saludar aureliux
o El resultado de salida debe ser esto:
Hola aureliux
String arg[]
Es un arreglo de Strings que puede recibir como parámetros el
programa, se le pueden enviar muchos parámetros y se irán
almacenando a partir de la posición 0.
Si necesitamos enviarle como parámetro un nombre que esté muy largo, se debe enviar entre comillas, por ejemplo: si necesitas enviarle el nombre Aurelio López Ovando, lo tomaría como 3 parámetros diferentes, es decir:
arg[0] = Aurelio arg[1] = López arg[2] = Ovando
Para corregir esto y que todo el nombre sea un solo parámetro debemos enviarlo: “Aurelio López Ovando”, así sólo
arg[0]=Aurelio López Ovando.
arg es un vector de Strings, así que todo lo que reciba será tratado como cadenas, el problema de esto viene cuando
necesitamos hacer operaciones matemáticas, ya que sobre un string no es posible hacerlo, entonces debemos antes
que nada hacer las operaciones de conversión.
Integer.parseInt() convierte de cadena a entero Float.parseFloatI() convierte de cadena a flotante
Y auxiliarnos en las demás instrucciones de conversión que nos brinda java.
Si necesitamos saber cuantos parámetros se están enviando podemos utilizar la instrucción length que devuelve el
número de elementos guardados en el vector y de esta forma validar que no se genere ninguna excepción, si se desea
utilizar mas elementos de los que se enviaron también se genera otra excepción, es decir si yo envío tres parámetros y
pretendo leer un cuarto que no existe, el compilador genera este error.
3.- Programa que reciba como parámetro 3 números y devuelva el promedio de ellos.
class SaludaPersona { public void saludar(String nombre) { System.out.println("Hola " + nombre); } } class Saludar { public static void main(String arg[]) { SaludaPersona saludo = new SaludaPersona(); saludo.saludar(arg[0]); } }
Introducción a java
20 Aurelio López Ovando
Antes de empezar se valida que se hayan enviado los tres parámetros que se necesitan. Primero se hacen las conversiones y después se envían los parámetros. Pero también se puede hacer un solo paso sin necesidad de declarar variables.
Se podría hacer las conversiones de manera directa, para no hacerlo por separado…
Ejercicios propuestos
class Promedio { public void prom(int n1,int n2,int n3) { System.out.println("El promedio es: " + (n1+n2+n3)/3); } } class PromedioArg { public static void main(String arg[]) { int n1,n2,n3; if(arg.length==3) { Promedio promedio = new Promedio(); n1=Integer.parseInt(arg[0]); n2=Integer.parseInt(arg[1]); n3=Integer.parseInt(arg[2]); promedio.prom(n1,n2,n3); } else System.out.pintln(“ERROR en numero de parámetros”); } }
promedio.prom(Integer.parseInt(arg[0]),Integer.parseInt(arg[1]),Integer.parseInt(arg[2]));
Introducción a java
21 Aurelio López Ovando
A. Algoritmo de Euclides
Euclides, muchos siglos atrás, pensó un algoritmo para hallar el m.c.d. entre dos números enteros, basándose
en una simple observación:
Ejemplo:
(Cada uno de los términos es el resto de dividir entre sí los dos anteriores y seleccionar el mayor y el
menor)
Escribir un programa, que dados dos números enteros m y n, halle el m.c.d entre m y n.
B. Ordenar fracciones
Escribir un programa que admita como entrada un entero n positivo y luego n fracciones y que permita
resolver los problemas siguientes exhibiendo los correspondientes resultados:
o Ordenar de mayor a menor las fracciones ingresadas.
o Calcular la suma de las n fracciones, expresándola como una fracción irreducible.
UNIDAD 3.- CONSTRUCTORES Y DESTRUCTORES
m=5, n=9 m=12, n=8 m=9, n=32 9 – 5 = 4
5 – 4 = 1
4 – 1 = 3
3 – 1 = 2
2 – 1 = 1
12 – 8 = 4
8 – 4 = 4
32 – 9 = 23
23 – 9 = 14
14 – 9 = 5
9 – 5 = 4
5 – 4 = 1
4 – 1 = 3
3 – 1 = 2
2 – 1 = 1
Introducción a java
22 Aurelio López Ovando
Constructor Un punto clave de la Programación Orientada Objetos es el evitar información incorrecta por no haber sido
correctamente inicializadas las variables, java no permite variables miembro que no estén inicializadas, las inicializa
siempre con valores por defecto.
El segundo paso en la inicialización correcta de objetos es el uso de constructores. Un constructor es un método que
se llama automáticamente cada vez que se crea un objeto de una clase. La principal misión del constructor es reservar
memoria e inicializar las variables miembro de la clase, los constructores no tienen valor de retorno (ni siquiera void) y
su nombre es el mismo que el de la clase, su argumento implícito es el objeto que se está creando.
Constructor por defecto
Hasta ahora hemos utilizado constructores por defecto, se dan cuando
creamos la clase sin establecer explícitamente un constructor, java
inicializa a todos los atributos con valores por defecto.
En todos los ejemplos anteriores a esta unidad se han creado clases sin
establecer constructores explícitos.
Constructor sin argumentos
Se llama constructor sin argumentos al constructor que no tiene argumentos. El programador debe proporcionar en el
código valores iniciales adecuados para todas las variables miembro, no se le envía parámetros para incializar los
atributos
Creamos a una persona con datos determinados, pero al crear a otras
personas estas también van a tener los mismos datos, asi que el
constructor por defecto no siempre puede funcionar.
Constructor con argumentos
class Persona { public Persona() { System.out.println("Persona creada"); } } class Constructores1 { public static void main(String arg[]) { Persona persona = new Persona(); } }
class Persona { private String nombre, sexo; private float estatura; private int edad; public Persona() { nombre="Aureliux"; estatura = 1.60f; edad=29; sexo=”Masculino”; } } class Constructores1 { public static void main(String arg[]) { Persona persona = new Persona(); } }
nombre: Aureliux estatura: 1.60
edad: 29 sexo: Masculino
Introducción a java
23 Aurelio López Ovando
Son constructores que reciben parámetros que se utilizarán para inicializar los atributos de la clase, cuando se cree la
clase se puede enviar los valores, asi cada vez que creemos una clase nueva se le puede enviar valores diferentes.
Si al constructor le enviamos parámetros,
tenemos la opción de inicializar con nuevos datos
los atributos de la nueva clase.
En este
Al igual que los demás métodos de una clase, los constructores pueden tener también los modificadores de acceso
public, private, protected y package. Si un constructor es private, ninguna otra clase puede crear un objeto de esa
clase. En este caso, puede haber métodos public y static (factory methods) que llamen al constructor y devuelvan un
objeto de esa clase.
Constructor múltiple o sobrecargado
Ofrece la posibilidad de inicializar la clase de diferentes maneras, se puede declarar varias veces el mismo constructor
con parámetros diferentes, a esto se le llama sobrecarga.
1.- En una civilización muy avanzada en el futuro, se pude seleccionar las características de los hijos que una pareja
quiere tener, se tienen tres paquetes de diferentes precios:
a) Color de piel, ojos, tipo de cabello.
b) Las mismas que las anteriores y le aumentamos una habilidad deportiva.
c) Todas las anteriores y aumentamos una habilidad cultural.
Hacer un programa que permita a una pareja mostrar los paquetes disponibles con ejemplos de características de los
niños, cuando la clase se cree avisar que se ha creado.
class Persona { private String nombre,sexo; private float estatura; private int edad; public Persona(String nomb, float est, int ed, String sex) { nombre=nomb; estatura = est; edad=ed; sexo=sex; System.out.println("Hemos creado a " + nombre); } } class Constructores1 { public static void main(String arg[]) { Persona persona = new Persona("Aureliux",1.60f,29,"Masculino"); Persona persona2 = new Persona("Pucca",1.58f,25,"Femenino"); } }
nombre: Pucca estatura: 1.58
edad: 25 sexo: Femenino
nombre: Aureliux estatura: 1.60
edad: 29 sexo: Masculino
Introducción a java
24 Aurelio López Ovando
Se tiene 3 constructores, cada uno
recibe diferente cantidad de
parámetros lo cual hace diferente
uno de otro.
No es necesario utilizar todos los
constructores, se pueden
declarar, pero si no hay necesidad
de utilizarlos no estamos
obliglados a hecerlo
En este ejemplo se crearon tres
objetos diferentes, cada uno
inicializado con constructores
diferentes.
Destructores
En Java no hay destructores, el sistema se ocupa automáticamente de liberar la memoria de los objetos que ya han
perdido la referencia, esto es, objetos que ya no tienen ningún nombre que permita acceder a ellos. A esta
característica de Java se le llama garbage collection (recogida de basura), que se ejecuta regularmente para liberar la
memoria asignada a objetos que ya no se necesitan. A pesar de ello hay que declarar un método de la siguiente forma:
import java.io.*;
class Paquete
{
private String ojos, piel, cabello, deporte, cultura;
public Paquete(String o, String p, String c)
{
ojos=o;
piel=p;
cabello=c;
System.out.println("Creado el paquete a...");
}
public Paquete(String o, String p, String c, String d)
{
ojos=o;
piel=p;
cabello=c;
deporte=d;
System.out.println("Creado el paquete b...");
}
public Paquete(String o, String p, String c, String d, String cu)
{
ojos=o;
piel=p;
cabello=c;
deporte=d;
cultura=cu;
System.out.println("Creado el paquete c...");
}
}
class Hijos
{
public static void main(String arg[])throws IOException
{
int opcion;
System.out.println("Tenemos tres paquetes de muestra: ");
Paquete paqueteA=new Paquete("Negros","Morena","Rizado");
Paquete paqueteB=new Paquete("Rubio","Moren claro","Lacio","Futbol");
Paquete paqueteC=new Paquete("Castaño","Blanca","Lacio","Atletismol","Musica");
}
}
Introducción a java
25 Aurelio López Ovando
protected void finalize()
{
}
Se trata de un finalizador el cual es un método que se llama automáticamente cuando se va a destruir un objeto
(antes de que la memoria sea liberada de modo automático por el sistema), se utilizan para ciertas operaciones de
terminación distintas de liberar memoria. Es un método de objeto (no static), sin valor de retorno (void), sin
argumentos y que siempre se llama finalize().
En Java es normal que varias variables de tipo referencia apunten al mismo objeto. java lleva internamente un
contador de cuántas referencias hay sobre cada objeto. El objeto podrá ser borrado cuando el número de referencias
sea cero, una forma de hacer que un objeto quede sin referencia es cambiar ésta a null, haciendo por ejemplo:
ObjetoRef = null;
En Java no se sabe exactamente cuándo se va a activar el garbage collector. Si no falta memoria es posible que no se
llegue a activar en ningún momento. No es pues conveniente confiar en él para la realización de otras tareas más
críticas. Se puede llamar explícitamente al garbage collector con el método System.gc().
2.- Programa que cree a una persona y al terminar que la memoria utilizada para esta operación sea liberada (destruir los datos de la persona)
Este programa maneja las tres operaciones
básicas:
1.- Crear el objeto mediante un constructor.
2.- Eliminar las referencias del objeto agregándole
el valor null.
3.- Destruir el objeto creado para liberar la
memoria, invocando al método finalize.
class Persona { private String nombre,sexo; private float estatura; private int edad; public Persona(String nomb, float est, int ed, String sex) { nombre=nomb; estatura = est; edad=ed; sexo=sex; System.out.println("Hemos creado a " + nombre); } protected void finalize() { System.out.println("Hemos destruido a " + nombre); } } class Destructor { public static void main(String arg[]) { Persona persona = new Persona("Aureliux",1.60f,29,"Masculino"); persona = null; System.gc(); } }
Introducción a java
26 Aurelio López Ovando
Ejercicios propuestos
Importante en cada uno utilizar constructores y destructores.
A) Crear una clase que desde la línea de comandos pueda inicializarse, la clase corresponde a un coche,
al comprador le interesa definir:
o Marca o Color o Numero de puertas
La clase debe registrar en un método aparte el proceso de la venta donde se debe establecer cuando se dio de
enganche y cuanto se resta por el coche, al finalizar la venta se debe liberar la memoria de los datos utilizados.
B) Un autobús de la línea ATS realiza su recorrido de Calkiní a Campeche, en el trayecto sólo hace paradas en las
terminales de Hecelchakán y Tenabo, cuando sube un pasajero el conductor debe emitir su boleto el cual debe
tener los siguientes datos:
o Origen
o Destino
o Tipo
o Precio
Cada lugar tiene una clave de tres dígitos: Calikini = 120, Hechechakan=130, Tenabo=140, Campeche=150, la
tarifa de boleto es: Calkiní – Campeche = 30.00 (esta es la ruta mas larga), el precio por cada poblado es de
$10.00.
Hacer un programa que emita los boletos a los pasajeros mientras el autobús esté viajando.