100% encontró este documento útil (1 voto)
211 vistas252 páginas

Tecnicas de Programacion

Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
100% encontró este documento útil (1 voto)
211 vistas252 páginas

Tecnicas de Programacion

Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 252

TÉCNICAS

DE
PROGRAMACIÓN

Martín Gustavo Salcedo Quiñones


Martín Gustavo Salcedo Quiñones

El docente, Martín Gustavo Salcedo


Quiñones egresado de la Escuela
Profesional de Ingeniería de Computa-
ción y Sistemas, de la Universidad
Privada Antenor Orrego, con título
profesional de Ingeniero Informático y
de Sistemas emitido por la Universi-
dad Particular de Chiclayo, con maes-
tría en Tecnologías de Información y
Comunicaciones de la Universidad
Católica Los Ángeles de Chimbote,
con experiencia en un inicio de la
profesión en proyectos informáticos y
en el ámbito de la docencia por más de
20 años en instituciones de nivel
superior.
Martín Gustavo Salcedo Quiñones

TÉCNICAS DE
PROGRAMACIÓN
TÉCNICAS DE PROGRAMACIÓN
Martín Gustavo Salcedo Quiñones

© Ing. Martín Gustavo Salcedo Quiñones


© Universidad Católica Los Ángeles de Chimbote
Jr. Tumbes S/N, L8, Centro Comercial Financiero, Chimbote, Ancash - Perú
Telf.: (043) 327846

Editado por:
Universidad Católica Los Ángeles de Chimbote
Jr. Tumbes S/N, L8, Centro Comercial Financiero, Chimbote, Ancash - Perú
Telf: (51-043) 327846
www.uladech.edu.pe

Primera edición digital, enero 2021.


ISBN: 978-612-4308-32-1
Prohibida su reproducción total o parcial de esta obra sin la autorización
escrita de los titulares del copyright.
Impreso en Perú / Printed in Perú

Diagramación digital:
Ediciones Carolina (Trujillo).

Libro digital disponible en:


http://repositorio.uladech.edu.pe/handle/123456789/19892
DEDICATORIA

A Dios Todopoderoso, a la madre


Santísima Virgen María, a mi amada
esposa, por su apoyo y compresión que
me brinda cada día para alcanzar nuevos
retos, tanto en lo profesional como en lo
personal y a mi hijo con el amor de
siempre Gabriel Salcedo Vejarano, a
quien siempre protegeré y cuidaré para
verlo como una persona de buenos
valores y capaz de enfrentar al mundo.
Contenido

Introducción 11

Capítulo I
USO Y CREACIÓN DE MÉTODOS, ATRIBUTOS,
RELACIONES ENTRE CLASES Y MODIFICADORES
DE ACCESO

1. MÉTODOS DE CLASES DE JAVA


1.1. Estructura de una aplicación de Java sencilla 15
1.2. La clase BufferedReader para entrada de datos 16
1.3. La clase Math 17
1.4. La clase Integer 18
1.5. La clase Character 19
1.6. La clase Float 20
1.7. La clase Double 21
1.8. Clase String 21
1.9. Programas resueltos en Java usando NetBeans 30

2. CREACIÓN DE MÉTODOS ESTÁTICOS


2.1. ¿Qué son los métodos? 37
2.2. Invocación de métodos estáticos creados en una clase
aparte 39
2.3. Duración y alcance de un identificador 40
2.4. Programas resueltos en Java usando NetBeans 42

3. RECURSIVIDAD Y SOBRECARGA DE MÉTODOS


3.1. ¿Qué es recursividad? 49

TÉCNICAS DE PROGRAMACIÓN | 7
CONTENIDO

3.2. Recursividad vs Iteración 49


3.3. Sobrecarga de métodos 51
3.4. Programas resueltos en Java usando NetBeans 54

4. ARREGLOS UNIDIMENSIONALES EN MÉTODOS


4.1. ¿Qué son arreglos? 65
4.2. Declaración de un arreglo unidimensional o vector 66
4.3. Creación de un arreglo unidimensional o vector 66
4.4. Inicialización de un arreglo unidimensional o vector 66
4.5. ¿Cómo acceder a los datos almacenados en el arreglo? 67
4.6. Referencias a arreglos unidimensionales 68
4.7. Creación de métodos con uso de arreglos 69
4.8. Programas resueltos en Java usando NetBeans 71

5. ESTRUCTURA DE UNA CLASE: ATRIBUTOS Y


MÉTODOS
5.1. ¿Qué es una clase? 83
5.2. Estructura de una clase 83
5.3. Programas resueltos en Java usando NetBeans 88

6. RELACIONES ENTRE CLASES


6.1. Uso de clases relacionadas 101
6.2. Diagramando clases relacionadas 101
6.3. Arreglo de objetos 107
6.4. Programas resueltos en Java usando NetBeans 108

7. MODIFICADORES DE ACCESO A LOS MIEMBROS DE


UNA CLASE
7.1. ¿Qué son modificadores de acceso? 121
7.2. Tipos de modificadores 121
7.3. Palabras reservadas para uso de variables 128
7.4. Programas resueltos en Java usando NetBeans 130

AUTOEVALUACIÓN 141

8 | MARTÍN GUSTAVO SALCEDO QUIÑONES


CONTENIDO

Capítulo II
HERENCIA, CLASES ABSTRACTAS, INTERFACES,
POLIMORFISMO, PAQUETES Y EXCEPCIONES

8. MÉTODOS CONSTRUCTORES Y LA REFERENCIA


THIS
8.1. ¿Qué son métodos constructores? 145
8.2. Características de los métodos constructores 145
8.3. Sobrecarga de métodos constructores 146
8.4. Uso de la referencia this 147
8.5. Programas resueltos en Java usando NetBeans 148

9. HERENCIA DE CLASES
9.1 ¿Qué es herencia de clases? 155
9.2. Modificador de acceso protected 157
9.3. Objetos de la superclase y objetos de subclase 157
9.4. Programas resueltos en Java usando NetBeans 160

10. CLASES ABSTRACTAS


10.1. ¿Qué son clases abstractas? 173
10.2. Características de las clases abstractas 174
10.3. Programas resueltos en Java usando NetBeans 177

11. INTERFACES Y HERENCIA MÚLTIPLE


11.1. ¿Qué son interfaces? 185
11.2. Declaración de una interface en Java 185
11.3. Referencias a interfaces 191
11.4. Uso de constantes en interfaces 191
11.5. Herencia múltiple 192
11.6. Programas resueltos en Java usando NetBeans 192

12. POLIMORFISMO
12.1. ¿Qué es polimorfismo? 203
12.2. Tipos de polimorfismo 212

TÉCNICAS DE PROGRAMACIÓN | 9
CONTENIDO

12.3. Programas resueltos en Java usando NetBeans 213

13. PAQUETES Y EXCEPCIONES


13.1. ¿Qué es un paquete? 223
13.2. La claúsula import 224
13.3. Paquetes existentes en Java 226
13.4. Los nombres de los paquetes 226
13.5. Manejo de Excepciones 226
13.6. Tipos de Excepciones 229
13.7. Programas resueltos en Java usando NetBeans 229

14. DESARROLLO DE UN PROYECTO


14.1. PROYECTO: TIENDA 235

AUTOEVALUACIÓN 247

REFERENCIAS BIBLIOGRÁFICAS 250

10 | MARTÍN GUSTAVO SALCEDO QUIÑONES


Introducción

Estimado estudiante:
La asignatura Técnicas de Programación se ubica en el II ciclo
según el plan de estudios de la Escuela Profesional de Ingeniería de
Sistemas, facultad de Ingeniería de la Universidad Católica Los Ánge-
les de Chimbote. El curso está desarrollado para que el estudiante logre
la competencia de elaborar aplicaciones a nivel de consola usando la
programación orientado al objeto y como lenguaje de programación
Java a través de la utilización del entorno de desarrollo Netbeans.
Este curso de Técnicas de Programación es de suma importancia
en la línea de la programación ya que sienta las bases para el logro de
desarrollar sistemas informáticos y por estrategia pedagógica se ha
dividido en dos unidades de aprendizaje, las misma que contienen los
temas necesarios para programar pensando en objetos.
La primera unidad, contiene el uso de los métodos de las prin-
cipales clases de Java, la creación y uso de los métodos estáticos,
recursividad de métodos, uso de arreglos en métodos, creación de
clases y sus miembros (atributos y métodos) y posterior instancia de
objetos, utilización de relaciones de clases y uso de modificadores de
nivel de acceso a los miembros de una clase.
La segunda unidad, contiene el uso del operador o palabra
reservada this y manejo de métodos constructores, herencia de cla-
ses, clases abstractas, interfaces, polimorfismo, paquetes y uso de
excepciones y finalmente el desarrollo de una proyecto o aplicación
que abarque lo mayoría de los temas mencionados anteriormente.

Ing. Martín Gustavo Salcedo Quiñones

TÉCNICAS DE PROGRAMACIÓN | 11
Capítulo I

USO Y CREACIÓN DE MÉTODOS,


ATRIBUTOS, RELACIONES
ENTRE CLASES Y
MODIFICADORES DE ACCESO
1. MÉTODOS DE CLASES DE JAVA

1.1. Estructura de una aplicación de Java sencilla

Hacer una aplicación sencilla usando el lenguaje de programa-


ción Java implica definir una clase y dentro de ella establecer un
método principal llamado main. El compilador de Java busca a éste
método y procede a ejecutar las instrucciones.
La clase que contenga al método principal main debe tener el
nivel de acceso público. El nombre de la clase debe ser el mismo al
nombre del archivo creado para la programación, este archivo tiene la
extensión java. En el ejemplo anterior al colocar public class Hola
ULADECH se está declarando la clase pública llamada
HolaULADECH. Por lo tanto, el archivo de tener como nombre
HolaULADECH.java. En el método main con la instrucción
System.out.println (“! Hola ULADECH!”) se logra imprimir el
mensaje ¡Hola ULADECH!
Para compilar un programa de Java se realiza lo siguiente
C:\Program Files\Java\jdk1.8.0_131\bin>javac HolaULADECH.java <Intro>

TÉCNICAS DE PROGRAMACIÓN | 15
MÉTODOS DE CLASES DE JAVA

Un programa en Java tiene ciertas características tales como:


- Cada sentencia o instrucción en un programa escrito en Java
se escribe comúnmente en minúsculas
- El caracter de punto y coma (;) se utiliza para indicar la termi-
nación de una instrucción con la posibilidad de hacer otra
instrucción.
- Un grupo bloque de instrucciones es un conjunto de senten-
cias y/o declaraciones de Java que tienen al inicio y al final el
uso de llaves {}
Por ejemplo para comenzar a definir la clase se comienza con
el uso de una llave abierta { y termina con una llave cerrada }.
Así mismo, el método main inicia con un { y termina con
una}. El uso de los bloques de instrucciones en un programa
de Java es importante para señalar el grupo de instrucciones
que se va a ejecutar.

1.2. La clase BufferedReader para entrada de datos


Todo programa tiene entrada y salida de datos. Para la entrada de
datos se podría usar el método readLine y para la salida de datos se
podría usar el método println. Para esto será necesario usar System.in
para ingreso de datos y System.out para mostrar resultados o mensa-
jes. Cuando se ingresa datos toma el formato de tipo String y según la
necesidad se podrá hacer conversiones en caso se pretenda hacer uso
del dato ingresado en un tipo de dato diferente a lo ingresado. A conti-
nuación, un ejemplo que permite imprimir la expresión “El resultado
es “unido al contenido de la variable de memoria R”.
 System.out.println(“El resultado es “+R);
La manera de realizar un ingreso de dato en una sola lines es
definiendo una variable de memoria de tipo String, donde el método
readLine lee el dato hasta el final de la línea. Luego de pulsar Enter el
dato ingresado se almacena en la variable de memoria de tipo String.
El método readLine pertenece a la clase BufferedReader y en el

16 | MARTÍN GUSTAVO SALCEDO QUIÑONES


MÉTODOS DE CLASES DE JAVA

momento de la creación o instancia de un objeto es necesario de


InputStreamReader que a su vez se crea con System.in. Por ejemplo:
BufferedReader leer = new BufferedReader (new InputStreamReader(System.in));
String nombre;
System.out.println(“Introduzca un nombre: “);
nombre = in.readLine();

Se puede apreciar en el ejemplo anterior que se crea un objeto


denominado leer de tipo BufferedReader y se hace instanciando de
InputStreamReader y de System.in lo que logra que el objeto leer
tenga la capacidad de leer datos. Se declara una variable de memoria
llamada nombre de tipo String, se imprime la expresión “Introduzca
un nombre: “y luego se procede al ingreso del dato desde el teclado y
una vez pulsado la tecla Enter se almacena el dato ingresado en la
variable de memoria nombre.

1.3. La clase Math


La clase Math representa la librería matemática de Java. Contie-
ne una lista grande de métodos estáticos para realizar una serie de
cálculos que para ser usados no habrá necesidad de instanciar objetos
a partir de esta clase pública llamada Math.
Math tiene una referencia a las dos constantes más utilizadas en
matemática con una precisión de 15 decimales (suficiente para la
mayoría de los mortales). Si ejecutamos:
System.out.println("e = " + Math.E);
System.out.println("pi = " + Math.PI);
veremos:
e = 2.718281828459045
pi = 3.141592653589793

Los métodos estáticos más conocidos y usados que tiene la clase


Math son:

TÉCNICAS DE PROGRAMACIÓN | 17
MÉTODOS DE CLASES DE JAVA

Método de la clase Math Para qué sirve


Math. abs( x ) Para calcular el valor absoluto de x
Math. sin( double ) Para calcular el seno de un ángulo expresado en radianes
Math. cos( double ) Para calcular el coseno de un ángulo en radianes
Math. tan( double ) Para calcular la tangente de un ángulo en radianes
Math. sqrt( double ) Para calcular la raíz cuadrada de un número.
Math. pow( a,b ) Para calcular la potencia dado la base a y el exponente b
Math. round( x ) Para obtener el valor del número redondeado al entero
Math. random() Para obtener un número aleatorio entre 0 y 1
Math. max( a,b ) Para obtener el número mayor de dos números
Math. min( a,b ) Para obtener el número menor de dos números

1.4. La clase Integer


Cada tipo de dato numérico tiene su propia clase. Así el tipo int
tiene el objeto Integer. Se han codificado muchos métodos útiles
dentro de la clase Integer, pero lo más usados son:
· String Integer.toString(int i,int base );
· String Integer.toString(int i );
 Por ejemplo:
 int valor=48;
 String cadena;
 cadena=Integer.toString(valor); //no colocarle base se asume que es
base 10

· int I.parseInt( String s,int base );


· int I.parseInt( String s );
Por ejemplo:
 String dato=”30”;
 int valor;
 valor=Integer.parseInt(dato); //no colocarle base se asume que es base
10

18 | MARTÍN GUSTAVO SALCEDO QUIÑONES


MÉTODOS DE CLASES DE JAVA

1.5. La clase Character


El trabajo con caracteres implica hacer uso de muchas funciones
que lleven hacer comprobaciones y traslación de datos. Las funcio-
nes la podemos encontrar en la clase Character. Esta clase permite
crear instancias de objetos al contrario de la clase Math donde sus
métodos se pueden usar de manera directa.
Declaraciones
La primera sentencia creará una variable de tipo carácter y la segunda
declarará un objeto Character:
char c;
Character C;

Comprobaciones booleanas
Character.isLowerCase(c) //devuelve verdadero si el character está en
minúscula
Character.isUpperCase(c) //devuelve verdadero si el character está en
mayúscula
Character.isDigit(c) // devuelve verdadero si el carácter es un dígito numérico
Character.isSpace(c) //devuelve verdadero si el character es un espacio y
falso todo lo contrario
A partir de la variable objeto Character C, no se podría hacer
C.isUpperCase(), porque la variable C no ha sido instanciado con el
predicado new. Instanciarlo permitirá hacer uso de los métodos de la
clase Character
Traslaciones de caracteres
char c1 = Character.toLowerCase( c ); //lo pone en minúscula el contenido
de c y lo almacena en c1
char c2 = Character.toUpperCase( c ); //lo pone en mayúscula el
contenido de c y lo almacena en c2

Traslaciones de carácter/dígito
int i = Character.digit( c,base ); //toma el contenido de c y devuelve el
número para ser almacenado en i

TÉCNICAS DE PROGRAMACIÓN | 19
MÉTODOS DE CLASES DE JAVA

char c = Character.forDigit( i,base ); //toma el contenido de i y devuelve


el caracter para la variable c

Métodos de la clase Character


C = new Character( 'A' ); //crea el objeto C asignando el carácter A a un
atributo
char c = C.charValue(); //devuelve el dato como character y lo almacena en
la variable c
String s = C.toString(); //devuelve el dato como cadena de caracteres y es
almacenado en s

1.6. La clase Float


Cada tipo de dato numérico tiene su propia Clase y por lo tanto
se podría crear objetos. El tipo de dato primitivo float tiene la clase
Float que a su vez contiene muchos métodos para diferentes usos
Declaraciones
La primera instrucción creará una variable de tipo float y la segunda
declara un objeto Float:
float f;
Float F;

Conversiones de Clase/Cadena
String s = Float.toString( f ); //toma el contenido de f y lo convierte a String y
lo almacena en s
f = Float.valueOf( "3.14" ); //toma el dato de cadena “3.14”, lo convierte a
float y lo almacena en f

Comprobaciones
boolean b = Float.isNaN( f );
boolean b = Float.isInfinite( f );
El método isNaN() comprueba si f es un No-Número . Un ejem-
plo de no-número es raiz cuadrada de -2. El método isInfinite() eva-
lúa si un número específico es infinitamente grande en magnitud
devolviendo verdadero.

20 | MARTÍN GUSTAVO SALCEDO QUIÑONES


MÉTODOS DE CLASES DE JAVA

1.7. La clase Double


Cada tipo de dato numérico tiene su propia Clase y por lo tanto
se podría crear objetos. El tipo de dato primitivo double tiene la clase
Double que a su vez contiene muchos métodos para diferentes usos.

Declaraciones
La primera instrucción creará una variable double y la segunda un
objeto Double:
double d;
Double D;

Métodos más usados en Double


boolean D.equals(); //evalúa la igualdad de dos datos y devuelve verdadero
si lo son
String D.toString(); //devuelve el dato como cadena de caracteres
int D.intValue(); //devuelve el dato como valor numérico entero (tipo int)
long D.longValue(); //devuelve el dato como valor numérico entero largo
(tipo long)
float D.floatValue(); //devuelve el dato como valor numérico de tipo flotante
double D.doubleValue(); //devuelve el dato como valor numérico de tipo
double
Double V.valueOf( String s ); //toma el contenido de s y devuelve el dato
como double

1.8. Clase String


La clase String almacena un conjunto de caracteres, siendo estos
caracteres tratados como una unidad. La cadena de caracteres puede
contener letras, dígitos numéricos, caracteres especiales y otros. En
Java una cadena de caracteres es un objeto instanciado de la clase
String. La secuencia de caracteres se escribe entre comillas.
Un objeto creado a partir de la clase String, tiene como finalidad
encapsular un dato tipo cadena de caracteres, haciendo que
internamente se materialice en un array de char (1)

TÉCNICAS DE PROGRAMACIÓN | 21
MÉTODOS DE CLASES DE JAVA

Por ejemplo:
“Computación”, “Java es fácil”, “Viva el Perú”, “ULADECH 2020”

Los métodos más utilizados son:


cadena.length(): El método length devuelve el número total de
caracteres de una cadena.
Ejemplo:
String nombre = “Martín”;
int n;
n = cadena.length();
System.out.println(“El nombre “+ nombre + “tiene “+ n + ”caracteres”);

Devolverá el mensaje El nombre Martín tiene 6 caracteres

cadena1.equals(cadena2): El método equals devuelve verdadero si


las dos cadenas son iguales y false en caso contrario.
Ejemplo:
String nombre1 = “Maria”;
String nombre2 = “Mariano”;
if (nombre1.equals(nombre2))
 System.out.println(“Los nombres son iguales”);
else
 System.out.println(“Los nombres no son iguales”);

Devolverá el mensaje Los nombres no son iguales

cadena1.equalsIgnoreCase(cadena2): El método equalsIgnoreCase


no toma en cuenta la diferencia entre letras mayúsculas y minúsculas
de cada String al realizar la comparación.
Ejemplo:
String nombre1=”Mariano”;
String nombre2=”MARIANO”;

22 | MARTÍN GUSTAVO SALCEDO QUIÑONES


MÉTODOS DE CLASES DE JAVA

if(nombre1.equalsIgnoreCase(nombre2))
 System.out.println(“Los nombres son iguales”);
else
 System.out.println(“Los nombres no son iguales”);

Devolverá el mensaje Los nombres son iguales

cadena1.compareTo(cadena2) : El método compareTo retorna un


numero entero que permite evaluar lo siguiente:
devuelve un valor > 0, si la cadena1 es mayor que la cadena2
devuelve un valor = 0, si la cadena1 es igual a la cadena2
devuelve un valor < 0, si lacadena1 es menor que la cadena2
Este método implica una comparación lexicográfica en función a los
códigos que tiene los caracteres según la tabla ASCII, es decir,
compara caracter por caracter.
Ejemplo:
String dato1=”Mar”;
String dato2=”Mary”;
if(dato1.compareTo(dato2)>0)
 System.out.println(“El dato1 es mayor que el dato2”)
else
 if(dato1.comparaTo(dato2)<0)
  System.out.println(“El dato 1 es menor que el dato2”);
 else
 System.out.println(“El dato 1 es igual al dato2”);

Devolverá el mensaje El dato1 es menor que el dato2

¿Por qué?
Compara los primeros caracteres “M” == “M” y sigue adelante
Luego compara los segundos caracteres “a” == ”a” y sigue adelante

TÉCNICAS DE PROGRAMACIÓN | 23
MÉTODOS DE CLASES DE JAVA

Posteriormente los terceros caracteres “r” == “r” y sigue adelante.


La variable dato1 ya no tiene más caracteres para comparar, en cambio
la variable dato2 le queda aún el carácter “y” lo que hace a éste último
mayor al dato1, es decir, el dato1 es menor al dato2.

c a d e n a 1 . c o m p a re To I g n o re C a s e ( c a d e n a 2 ) : E l m é t o d o
compareToIgnoreCase ignora la diferencia existente entre letras
mayúsculas y minúsculas al momento de realizar la comparación de
la cadena 1 con la cadena2.
Ejemplo:
String dato1=”mariano”;
String dato2=”Mariana”;
if(dato1.compareToIgnoreCase(dato2)>0)
 System.out.println(“El dato1 es mayor que el dato2”)
else
 if(dato1.comparaToIgnoreCase(dato2)<0)
  System.out.println(“El dato 1 es menor que el dato2”);
 else
  System.out.println(“El dato 1 es igual al dato2”);

Devolverá el mensaje El dato1 es mayor que el dato2

cadena.charAt(indice) : El método charAt retorna el carácter de la


cadena según el valor del indice.
Ejemplo:
String nombre = “Felipe”;
Char x;
X=nombre.charAt(3); // x toma el valor del carácter i.
Los índices de una cadena de caracteres inician en 0.

cadena.toUpperCase() : El método tiene la finalidad de convertir la


cadena en letras mayúsculas

24 | MARTÍN GUSTAVO SALCEDO QUIÑONES


MÉTODOS DE CLASES DE JAVA

Ejemplo:
String nombre=”Fernando”;
String nom=nombre.toUpperCase();
System.out.println(nom);

Devolverá el mensaje FERNANDO

cadena.toLowerCase() : El método tiene la finalidad de convertir la


cadena en letras minúsculas
Ejemplo:
String nombre=”FERNANDO”;
String nom=nombre.toLowerCase();
System.out.println(nom);

Devolverá el mensaje fernando

cadena.trim() : El método tiene la finalidad de eliminar los espacios


al inicio y al final de la cadena de caracteres.
Ejemplo:
String dato1=” Luis ”;
String dato2=dato1.trim();
System.out.println(Sin uso de trim: ”+dato1);
System.out.println(Con uso de trim: ”+dato2);

Imprimirá los mensajes Sin uso de trim: Luis


Con uso de trim: Luis

cadena1.startsWith(cadena2): Evalúa si la cadena1 inicia con la


cadena2 devolviendo el valor de verdadero.
Ejemplo:
String nombre1= “Maria”;
String nombre2= “Mariano”;

TÉCNICAS DE PROGRAMACIÓN | 25
MÉTODOS DE CLASES DE JAVA

if(nombre2.starsWith(nombre1))
 System.out.println(nombre2+” comienza con “+nombre1);
else
 System.out.println(nombre2+” no comienza con “+nombre1);

Imprimirá el mensaje Mariano comienza con Maria

cadena1.endsWith(cadena2) : El método evalúa si la cadena1


termina con cadena2 y si es así devuelve verdadero.
Ejemplo:
String nombre1= “Computadora”;
String nombre2= “dora”;
if(nombre1.endsWith(nombre2))
 System.out.println(nombre1+” finaliza con “+nombre2);
else
 System.out.println(nombre1+” no finaliza con “+nombre2);

Imprimirá el mensaje Computadora finaliza con dora

cadena.indexOf(caracter) : El método retorna el índice de la primera


ocurrencia del carácter.
Ejemplo:
String cadena=”ULADECH es el mejor”;
int posicion=cadena.indexOf(“e”);
System.out.println(“La expresión “+cadena+” la letra e se encuentra
en la posición “+posicion);

Imprimirá el mensaje La expresión ULADECH es el mejor la letra e se


encuentra en la posición 8

cadena.indexOf(carácter,posicion): El método retorna el índice de la


primera ocurrencia del carácter, comenzando la búsqueda a partir de
lo que se indica en posición.

26 | MARTÍN GUSTAVO SALCEDO QUIÑONES


MÉTODOS DE CLASES DE JAVA

Ejemplo:
String cadena=”ULADECH es el mejor”;
int indice=cadena.indexOf(“e”,9);
System.out.println(“La expresión “+cadena+” la letra e se encuentra
en la posición “+indice);

Imprimirá el mensaje La expresión ULADECH es el mejor la letra e se


encuentra en la posición 11

cadena1.indexOf(cadena2): El método retorna el índice de la


primera ocurrencia de la cadena2 en cadena1.
Ejemplo:
String cadena=”ULADECH es el mejor”;
int indice=cadena.indexOf(“es”);
System.out.println(“La expresión “+cadena+” la expresión es se
encuentra en la posición “+indice);

Imprimirá el mensaje La expresión ULADECH es el mejor la expresión es se


encuentra en la posición 8

cadena1.indexOf(cadena2,posición): El método retorna el índice de


la primera ocurrencia de la cadena2 en cadena1, iniciando la
búsqueda a partir de posición cadena1.
Ejemplo:
String cadena=”ULADECH es el mejor”;
int indice=cadena.indexOf(“el”;10);
System.out.println(“La expresión “+cadena+” la expresión es se
encuentra en la posición “+indice);

Imprimirá el mensaje La expresión ULADECH es el mejor la expresión el se


encuentra en la posición 11

cadena.lastIndexOf(caracter) : El método retorna el índice de la


última ocurrencia del carácter.
Ejemplo:

TÉCNICAS DE PROGRAMACIÓN | 27
MÉTODOS DE CLASES DE JAVA

String cadena=”ULADECH es el mejor”;


int posicion=cadena.indexOf(“e”);
System.out.println(“La expresión “+cadena+” la última letra e se
encuentra en la posición “+posicion);

Imprimirá el mensaje La expresión ULADECH es el mejor la última letra e se


encuentra en la posición 15

cadena.lastIndexOf(carácter,posicion) : El método retorna el índice


de la última ocurrencia del caracter , iniciando la búsqueda a partir de
lo que indica posición.
Ejemplo:
String cadena=”Viva el Peru”;
int indice=cadena.indexOf(“e”,5);
System.out.println(“La expresión “+cadena+” la última letra e se
encuentra en la posición “+indice);

Imprimirá el mensaje La expresión Viva el Peru la letra e se encuentra en la


posición 9

cadena1.lastIndexOf(cadena2): devuelve el índice de la última


ocurrencia de cadena2 en cadena1.
Ejemplo:
String cadena=”ULADECH es el mejor”;
int indice=cadena.indexOf(“me”);
System.out.println(“La expresión “+cadena+” la última expresión me
se encuentra en la posición “+indice);

Imprimirá el mensaje La expresión ULADECH es el mejor la última


expresión es se encuentra en la posición 14

cadena1.lastIndexOf(cadena2, posición): El método retorna el


índice de la última ocurrencia de la cadena2 en cadena1, iniciando la
búsqueda a partir de lo indica posición.

28 | MARTÍN GUSTAVO SALCEDO QUIÑONES


MÉTODOS DE CLASES DE JAVA

Ejemplo:
String cadena=”ULADECH CATÓLICA”;
int indice=cadena.indexOf(“CA”;10);
System.out.println(“La expresión “+cadena+” la última expresión es
se encuentra en la posición “+indice);

Imprimirá el mensaje La expresión ULADECH CATÓLICA la última expresión CA se


encuentra en la posición 14

cadena.substring(indice) : El método retorna una subcadena con los


caracteres que se inician en indice e incluye todos los caracteres
siguientes hasta la finalización de la cadena.
Ejemplo:
String dato=”COMPUTADORA”;
String extrae=dato.substring(dato,7);
System.out.println(extre);

Imprimirá el mensaje DORA

cadena.substring(indiceInicial, indiceFinal) : El método retorna una


subcadena con los caracteres formados a partir de la posición que
indica el indiceInicial incluyendo todos los caracteres hasta el
IndiceFinal-1.
Ejemplo:
String dato=”ULADECH Católica”;
String extrae=dato.substring(3,7);
System.out.println(extrae);

Imprimirá el mensaje DECH

String.valueOf(): Convierte tipos de datos primitivos a cadenas. La


clase String posee métodos sobrecargados llamdos valueOf para
soportar cada uno de los tipos primitivos de Java.

TÉCNICAS DE PROGRAMACIÓN | 29
MÉTODOS DE CLASES DE JAVA

Ejemplo:
String cad1 = String.valueOf(12);
String cad2 = String.valueOf(true);
String cad3 = String.valueOf('T');
String cad4 = String.valueOf(12.9867);

1.9. Programas resueltos en Java usando NetBeans

1) Hacer un programa para calcular el área de un triángulo dada la


base y la altura

Interpretación de la programación:
Al usar import.java.io.*; importamos el paquete io (input output) que
permitirá luego para el ingreso y salida de datos. Tenemos la clase
AreaTriangulo que tienen al método estático llamado main que al
colocar (String args[]) indica que no hay argumento alguno para el
método y al colocar throws IOException son nuestra indicación al
compilador de que estamos conscientes del hecho de que puede
ocurrir una excepción (intercepción de error) de entrada/salida
cuando el programa intente leer del teclado y que deliberadamente
estamos haciendo caso omiso de tales excepciones de entrada/salida
en nuestro programa. Luego se declara las variables base, altura y

30 | MARTÍN GUSTAVO SALCEDO QUIÑONES


MÉTODOS DE CLASES DE JAVA

area de tipo double. Posteriormente se declara la variable in del tipo


BufferedReader y se crea el objeto in con el operador new usando el
método constructor BufferedReader, la misma que usa el
InputStreamReader, clase o interfaz que permite la lectura de
entrada a través del teclado, es decir, la variable objeto in es la
permitirá luego lograr ingresar datos. Luego con el método print
usado a partir de System.out permite imprimir una expresión como
por ejemplo “Ingrese la base del triángulo:”. En la línea de la
programación base= Double.parseDouble(in.readLine()); se busca el
ingreso de un dato que se lee con el método readLine() a partir del
objeto in previamente creado. Dado que el dato ingresado es de tipo
String o cadena es necesario la conversión a un dato del tipo de la
variable que almacenará dicho dato, por lo que es necesario usar un
método de conversión como es el caso de parseDouble() que hace que
el dato ingresado sea convertido al tipo de dato Double y luego
asignado a la variable base. Lo mismo se hace con respecto a la
variable altura. En la variable área se hace el cálculo del área del
triángulo para luego imprimir el área del triángulo con la instrucción
System.out.println("El area del triangulo es : "+area); donde se
observa el uso del método println() que permite imprimir una
expresión y luego la impresión continuará en la siguiente línea.
Observa dentro del paréntesis el uso del operador + que se usa como
concatenación (no como operador de suma), es decir, imprime la
expresión “El área del triángulo es” con el contenido de la variable
área.

Ejecución del programa:

TÉCNICAS DE PROGRAMACIÓN | 31
MÉTODOS DE CLASES DE JAVA

2) Calcular el perímetro, el área y la diagonal de un rectángulo si se


ingresan los lados.

Interpretación de la programación:
La novedad en la segunda aplicación es el uso del método pow() que
permite calcular la potencia dado la base y el exponente, así por
ejemplo Math.pow(lado1,2) calcula el cuadrado del contenido de la
variable lado1. Con el método sqrt() se logra calcular la raíz cuadrada
de un número, así por ejemplo Math.sqrt(4) calcula la raíz cuadrada
de 4. Tanto el método pow y el método sqrt son métodos estáticos de
la clase Math lo que permite usarlos directamente de la clase.

Ejecución del programa:

32 | MARTÍN GUSTAVO SALCEDO QUIÑONES


MÉTODOS DE CLASES DE JAVA

3) Se desea calcular el salario neto de un trabajador, permitiendo el


ingreso del nombre, las horas trabajadas y precio por hora. Se
debe tener en cuenta el pago de impuestos que es 10 por ciento
sobre el salario bruto.

Ejecución del programa:

4) Hacer un programa para convertir metros a pies y pulgadas.


1 metro = 39.37 pulgadas 1 metro = 3.2 pies

TÉCNICAS DE PROGRAMACIÓN | 33
MÉTODOS DE CLASES DE JAVA

Ejecución del programa:

5) Ingresa una oración y visualiza la cantidad de palabras que hay


en dicha oración.

Ejecución del programa:

6) Ingresar una letra entre a y e y reportar el mensaje de acuerdo a:


a excelente
b bueno
c regular
d malo
e pésimo

34 | MARTÍN GUSTAVO SALCEDO QUIÑONES


MÉTODOS DE CLASES DE JAVA

Ejecución del programa:

TÉCNICAS DE PROGRAMACIÓN | 35
2. CREACIÓN DE MÉTODOS
ESTÁTICOS

2.1. ¿Qué son los métodos?


Los métodos en java permiten modularizar sus programas, es
decir, permiten crear sub programas que cada una hagan algo
específico. Todas las variables declaradas dentro de los métodos son
variables locales, inclusive los parámetros que definen al método. Un
método puede invocar la ejecución de otro método. La sintaxis para
declarar un método es la siguiente:

tipo_de_valor_retorno nombre_del_método ( lista_de_parámetros)


{
 Declaraciones e instrucciones
}

Donde:
tipo_de_valor_retorno: Es el tipo de valor que el método retornará
una vez ejecutado las instrucciones elaboradas en el método. Si el
método no retorna valor significa que dicho método deberá ser
declarado como void.
nombre_del_método: Es cualquier expresión válida que permita
identificar al método.
lista_de_parámetros: Es una lista de argumentos o parámetros que
deberán ser separadas por comas donde se establecerán las

TÉCNICAS DE PROGRAMACIÓN | 37
CREACIÓN DE MÉTODOS ESTÁTICOS

declaraciones de las variables que usará al método. Puede existir


métodos que no tenga parámetro alguno.
El cuerpo del método es el conjunto de declaraciones e
instrucciones que constituyen la lógica del método, es decir, lo que va
a ejecutar. Durante la ejecución de una aplicación el programa
encuentra una llamada a un método, se procede a la ejecución del
método para luego retornar a la siguiente instrucción de donde se
invocó al método. El método puede devolver algún valor esto puede
llevar que dicho valor será recibido por una variable. Por ejemplo, si
se desea calcular la suma de los primeros n números enteros. Se
podría definir el siguiente método:

int sumaenteros(int n)
{
 int i, suma=0;
 for(i=1;i<=n;i++)
 {
  suma=suma+i;
 }
 return suma;
}

El tipo de retorno del método sumaenteros es de tipo entero


teniendo como único parámetro la variable n. El cuerpo de
instrucciones del método comienza declarando dos variables de
memoria i y suma, esta última se inicializa con 0. La sentencia
repetitiva for con la variable i genera los números enteros y con la
variable suma va acumulando en cada interacción. Al final lo
calculado en la variable de memoria suma es el valor de retorno del
método. Supongamos que deseamos un método para mostrar el
mensaje “ULADECH Católica es lo máximo”. Se podría definir el
método de la siguiente manera:

38 | MARTÍN GUSTAVO SALCEDO QUIÑONES


CREACIÓN DE MÉTODOS ESTÁTICOS

void mostrarMensaje()
{
 System.out.println(“ULADECH Católica es lo máximo”);
}
En este caso el método mostrarMensaje no devuelve un valor, es
por eso que el tipo de retorno a colocar es void. Lo único que ejecuta
el método es mostrar un mensaje.

2.2. Invocación de métodos estáticos creados en una clase aparte


Si una clase tiene varios métodos estáticos pueden ser llamados o
invocados de la siguiente manera: NombreClase.nombreMetodo, tal
como se hace con los métodos de la clase Math, por ejemplo si uno
desea calcular la raiz cuadrada se debe escribir Math.sqrt(x) y se desea
calcular la potencia se debe escribir Math.pow(x,n). Es importante
indicar que la clase que contiene los métodos estáticos puede estar
dentro del mismo archivo con extensión de java o puede estar en un
archivo de extensión de java aparte. Para un mejor manejo es mejor que
pertenezcan las clases en el mismo paquete. A continuación, un
ejemplo:

TÉCNICAS DE PROGRAMACIÓN | 39
CREACIÓN DE MÉTODOS ESTÁTICOS

De la figura anterior la clase Aritmetica contiene 4 métodos


estáticos de las operaciones básicas de la aritmética. La clase
Cálculos Aritméticos, en el método main se solicita el ingreso de dos
números enteros y luego se imprime los resultados de las 4
operaciones aritméticas. Se puede apreciar que para hacer uso del
método suma2numeros se debe anteponer la clase Aritmética dado
que dicho método no pertenece a la clase Cálculos Aritméticos. El
nombre de la clase que contiene al método main viene ser el nombre
del archivo de extensión java.

2.3. Duración y alcance de un identicador


Un identificador o variable de memoria su duración está
determinada a la existencia en la memoria del computador. En
cambio, el alcance está determinado a la porción de un programa al
que se puede hacer referencia el uso de dicha variable de memoria.
Un método puede tener variables de variables locales que
pueden ser los parámetros que después del nombre del método y
dentro de paréntesis y de aquellas variables que son declaradas o
definidas dentro de la implementación del método. Las variables
dentro de un método tienen duración automática dado que existen
para el bloque donde se las definió y termina destruyéndose al
término de la ejecución del bloque.

40 | MARTÍN GUSTAVO SALCEDO QUIÑONES


CREACIÓN DE MÉTODOS ESTÁTICOS

En la programación en Java se puede tener variables y métodos


de duración estática que existen desde el momento en que la clase es
invocada en el programa y se carga en memoria están disponibles
para ser ejecutados hasta que la aplicación culmine en su ejecución.
Las variables de duración estática ocupan un espacio de
almacenamiento desde el momento que se cargan en memoria. En
Java se hace uso de la palabra reservada static.
Los alcances de las variables de memoria o identificadores son
de alcance de bloque de alcance de clase. Una variable declarada o
definida afuera de todos los métodos tiene alcance de clase y puede
ser utilizadas en cualquier método, en cambio las variables
declaradas al principio de la implementación del método tienen
alcance de bloque, lo mismo sucede con los parámetros del
método.

Por ejemplo:

public class Matricula


{
 private String nombre;
 private static int pagoxcredito=50;

 public static double pago(int numerocreditos)


 {
  return pagoxcredito*numerocreditos
 }
}

Las variables de memoria nombre y pagoxcredito tienen alcance


de clase, en cambio la variable numerocreditos tiene alcance de
bloque.

TÉCNICAS DE PROGRAMACIÓN | 41
CREACIÓN DE MÉTODOS ESTÁTICOS

2.4. Programas resueltos en Java usando NetBeans


1) Hacer un programa para calcular el factorial de un número.

Interpretación de la programación:
Se tiene el método factorial que tiene un solo parámetro de tipo entero
llamado n y que devuelve o retorna un valor de tipo entero. Este
método declara dos variables de tipo entero i y f, éste último con un
valor inicial de 1 para que el cálculo de sucesivas multiplicaciones no
se perjudique. El método factorial es un método estático por lo que no
será necesario crear o instanciar un objeto (recuerda que para
instanciar un objeto se usa el operador new). En el método main se
inicia con crear el objeto leer del tipo BufferedReader (para lectura
de datos), luego se declara una variable n de tipo n (recuerda que esta
variable no es el mismo del parámetro del método factorial ya que se
declara en otro método). A través de la sentencia repetitiva do se
busca validar el ingreso del valor para la variable n que debe ser un
valor positivo, si es negativo volverá a solicitar el ingreso de otro
valor para la variable n. Finalmente la instrucción
System.out.println("el Factorial de “+n+” es: "+factorial(n));
imprimirá el factorial de n haciendo uso del método factorial.

42 | MARTÍN GUSTAVO SALCEDO QUIÑONES


CREACIÓN DE MÉTODOS ESTÁTICOS

Ejecución del programa:

2) Calcular el Máximo Común Divisor de dos números enteros.

Interpretación de la programación:
El método estático mcd posee dos parámetros a y b que servirá para
almacenar los datos numéricos enteros, de los cuales se aplicará el

TÉCNICAS DE PROGRAMACIÓN | 43
CREACIÓN DE MÉTODOS ESTÁTICOS

máximo común divisor. La variable de memoria d se inicializa en 2


para comenzar a sacar la mitad de los datos. La variable de memoria p
almacenará el valor calculado cada vez que el divisor d es común para
ambos datos se procederá a multiplicar con el valor que contenga la
variable p. En la sentencia repetitiva la variable de memoria d se irá
incrementándose en la medida que no se tenga un divisor común para
ambos números enteros. En el método main luego de crear el objeto
de lectura de datos leer, se procede a declarar las variables de
memoria n1, n2 y m. Las variables de memoria n1 y n2 sirven para
almacenar los datos ingresados, en esta ocasión existe una validación
que consiste en asegurar que los números ingresados sean positivos y
esto se logra con la sentencia repetitiva while. En la variable de
memoria m almacena el valor de retorno del método estático mcd al
indicar los dos números al método a través de n1 y n2. Finalmente se
muestra el cálculo del máximo común divisor de los dos números
enteros.
Ejecución del programa:

3) Elaborar un programa para reportar todos los divisores de un


número entero N

44 | MARTÍN GUSTAVO SALCEDO QUIÑONES


CREACIÓN DE MÉTODOS ESTÁTICOS

Interpretación de la programación:
El método estático mensaje imprime una expresión en línea según el
contenido de la variable de memoria m, como no retorna valor alguno
el método se le antepone a su nombre la palabra void. El método
estático reporteDivisores evalúa los posibles divisores desde del
valor 1 hasta el valor del número del cual se esta sacando los
divisores, para esto es necesario hacer uso de una sentencia repetitiva
como for que evalúa cada posible divisor y si cumple que no hay
residuo imprime el divisor seguido de un espacio para el posible
siguiente divisor. Este método reporteDivisores como no retorna
valor alguno se hace uso de la expresión void antes del nombre del
método. Finalmente, en el método estático main, que significa
principal, se alista la variable objeto leer para lectura de datos, se pide
el ingreso del número, validando que sea un número entero positivo y
luego se hace uso del método reporteDivisores dando como valor al
parámetro lo que almacena la variable num.
Ejecución del programa:

TÉCNICAS DE PROGRAMACIÓN | 45
CREACIÓN DE MÉTODOS ESTÁTICOS

4) Programa para ingresar un número y se reporte si es primo

Ejecución del programa:

5) Crea una clase llamada Matematicas que contenga los métodos


estáticos esPrimo para evaluar si un número es primo o no lo es,
factorial para calcular el factorial de un número, mcd para
calcular el máximo común divisor de dos números y
reporteDivisores para listar los divisores de un número. Luego
realiza operaciones usando los métodos antes mencionados.

46 | MARTÍN GUSTAVO SALCEDO QUIÑONES


CREACIÓN DE MÉTODOS ESTÁTICOS

TÉCNICAS DE PROGRAMACIÓN | 47
CREACIÓN DE MÉTODOS ESTÁTICOS

Ejecución del programa:

48 | MARTÍN GUSTAVO SALCEDO QUIÑONES


3. RECURSIVIDAD Y SOBRECARGA
DE MÉTODOS

3.1. ¿Qué es recursividad?


La recursividad en un método consiste cuando el mismo
método se invoca a sí mismo después de alguna evaluación de
alguna instrucción. Esta instrucción comúnmente es una sentencia
selectiva que luego de evaluar culmina la ejecución del método o
retorna un resultado que involucra una nueva ejecución del
método. Esta forma de programar con métodos recursivos implica
que un problema complejo sea dividido en varias partes hasta
lograr la solución.
 La recursividad del método termine sucede cuando se agota
toda posibilidad de continuar, lo cual implica que en algún momento
se debe de dejar de invocar al método recursivo para que éste deje de
seguir ejecutándose. El uso de los métodos recursivos evita el uso de
las sentencias repetitivas, estas últimas muy usadas en aquellos
métodos que son iterativos.
En la recursividad de métodos se presenta la sentencia selectiva
como la instrucción que invocará la ejecución del método recursivo o
la terminación del mismo.

3.2. Recursividad vs Iteración


La recursividad y la iteración hacen de alguna estructura de
control. Mientras la iteración utiliza una estructura de control
repetitiva con la presencia de las llamadas sentencias de repetición

TÉCNICAS DE PROGRAMACIÓN | 49
RECURSIVIDAD Y SOBRECARGA DE MÉTODOS

(for y while) en cambio la recursión es una estructura de selección


dado que se evalúa una expresión lógica y se decide la repetición de la
ejecución del método o la terminación del mismo.
Tanto la forma de programar con iteración como la recursión
implican hacer repeticiones de instrucciones. El uso de la iteración
emplea de forma explícita una estructura de repetición mientras que
la recursión ejecuta la repetición a través de métodos. La iteración
como la recursión en algún momento debe culminar de seguir
ejecutándose; la iteración termina cuando ya no se puede cumplir con
la condición para continuar con el bucle; la recursión termina cuando
se deja de invocar al método recursivo.

Por ejemplo:
public static int sumaParesRecursivo(int n)
{
 if(n ==0)
  return 0;
 else
  return n*2+sumaParesRecursivo(n-1);
}

Este método sumaParesRecursivo es un método recursivo porque a


través de una sentencia de selección if se evalúa el valor del parámetro
n. Suponiendo que el valor de n es 4 entonces lo que se desea es sumar
los cuatro primeros números pares que vendría ser 2, 4, 6, y 8. El uso del
método sumaParesRecursivo donde n es 4 haría que en el if sea falso
dando como retorno n*2+sumaParesRecursivo(n-1), que es lo mismo,
4*2+sumaParesRecursivo(3), entonces sería 8 + la ejecución de nuevo
del método. En la segunda invocación del método if sigue siendo falso
lo hace un retorno de 3*2+sumaParesRecursivo(3-1), es decir,
6+sumaParesRecursivo(2). El método se ejecuta por tercera vez y
nuevamente la instrucción if es falso lo que ocasiona un retorno de
2*2+sumaParesRecursivo(2-1), es decir, 4+sumaParesRecursivos(1).

50 | MARTÍN GUSTAVO SALCEDO QUIÑONES


RECURSIVIDAD Y SOBRECARGA DE MÉTODOS

El método se ejecuta por cuarta vez y nuevamente la instrucción if es


falso lo que permite un retorno de 1*2+sumaParesRecursivo(1-1), es
decir, 2+sumaParesRecursivo(0). El método se ejecuta por quinta
vez y es aquí donde la sentencia if recién se hace verdadero dando
como retorno el valor de 0. Esto todo quiere decir que el método
recursivo suma de la siguiente manera: 8+6+4+2+0, dando como
resultado final 20.

public static int sumaParesIterativo(int n)


{
 int par=0, i, sumapares=0;
 for(i=1;i<=n;i++)
 {
  par=par+2;
  sumapares=sumapares+par;
 }
return sumaPares;
}

Este método sumaParesIterativo es un método iterativo porque repite


una o más instrucciones a través de una sentencia repetitiva. En el
ejemplo anterior se puede apreciar que las variables de memoria par y
sumapares se inicializan en cero. Dentro de la sentencia repetitiva for la
primera instrucción par=par+2 permite la generación de los pares, cada
par se genera en cada iteración, luego la variable sumapares acumula la
suma de los pares que se van generando (sumapares=sumapares+par;).
Sólo basta con la invocación del método una sola vez para que calcule la
suma de los primeros n números pares.

3.3. Sobrecarga de métodos


Java permite definir varios métodos con el mismo nombre en
tanto dichos métodos tengan diferentes juegos de parámetros (con

TÉCNICAS DE PROGRAMACIÓN | 51
RECURSIVIDAD Y SOBRECARGA DE MÉTODOS

base en el número y el orden de los parámetros). Esto se denomina


sobrecarga de métodos. Cuando se invoca un método sobrecargado,
el compilador de Java selecciona el método adecuado examinando el
número, los tipos y el orden de los argumentos en la llamada. La
sobrecarga de métodos suele utilizarse para crear varios métodos con
el mismo nombre que realizan tareas similares, pero sobre datos de
diferentes tipos.

Por ejemplo:

import java.io.*;
public class sobrecargaMetodos{

public static int cuadrado(int n)


 {
return n*n;
}

public static float cuadrado(float n)


{
  return n*n;
}

 public static double cuadrado(double n)


 {
  return n*n;
}

52 | MARTÍN GUSTAVO SALCEDO QUIÑONES


RECURSIVIDAD Y SOBRECARGA DE MÉTODOS

public static void main(String args[]) throws IOException


 {
  int a=4;
  float b=8.2f;
  double c=14.5;
  System.out.println("El cuadrado de "+a+ " es :
"+cuadrado(a));
  System.out.println("El cuadrado de "+b+" es :
"+cuadrado(b));
  System.out.println("El cuadrado de "+c+" es :
"+cuadrado(c));
 }
}

La clase sobrecargaMetodos tiene 4 métodos, de los cuales 3 de


ellos tienen el mismo nombre cuadrado. El primer método cuadrado
definido en la clase sobrecargaMetodos tiene como parámetro una
variable de tipo entero y el valor de retorno es también de tipo de dato
entero. Este método el compilador de Java lo usa cuando se desea
calcular el cuadrado de un número entero. El segundo método
cuadrado mencionado en la clase el parámetro es de tipo float y el
valor de retorno es de tipo float. El compilador de Java usa este
método cuando el cálculo tiene como número un valor de tipo
flotante. El tercer método cuadrado tiene como parámetro una
variable de tipo double y el valor de retorno también es de tipo
double. El compilador de Java usa este método cuando se desea
calcular el cuadrado de un número de tipo real (double).
En el método main (principal) se inicializa 3 variables de
memoria a, b y c recibiendo el primero un valor de 4 (dato entero), el
segundo el valor de 8.2f (dato flotante) y el tercero el valor de 14.5
(dato real). Finalmente se imprime el cuadrado de cada uno de los 3

TÉCNICAS DE PROGRAMACIÓN | 53
RECURSIVIDAD Y SOBRECARGA DE MÉTODOS

valores teniendo en cuenta que la invocación del método cuadrado, el


compilador de Java usa el método apropiado para el cálculo que este
caso usa el primer método cuadrado para calcular el cuadrado de 4, el
segundo método cuadrado para el cálculo del cuadrado de 8.2f y el
tercer método cuadrado para el cálculo del cuadrado de 14.5

3.4. Programas resueltos en Java usando NetBeans


1) Elaborar una aplicación que permita calcular el factorial de un
número.

Interpretación de la programación:
El método recursivo llamado factorial tiene un parámetro de tipo
entero llamado n. Se evalúa su valor si es igual cero usando la
sentencia IF, si es falso se retorna el valor de n multiplicado con lo
que retornará el método factorial al darle el valor de n disminuido
en 1.

54 | MARTÍN GUSTAVO SALCEDO QUIÑONES


RECURSIVIDAD Y SOBRECARGA DE MÉTODOS

Retorna 24
factorial(4)

Retorna 6
4 * factorial(4-1)
Llamada 1
Retorna 2
3 * factorial(3-1)
Llamada 2
Retorna 1
2 * factorial(2-1)
Llamada 3
1 * factorial(1-1)
Llamada 4

En la figura se observa el método factorial calcula el factorial de


4. En la primera llamada retorna 4 * factorial(4-1), el factorial(4-1)
en la segunda llamada del método retorna 3 * factorial(3-1), en la
tercera llamada del método retorna 2 * factorial(2-1) y en la cuarta
llamada del método retorna 1* factorial(1-1). El factorial de 0 retorna
1 y con la multiplicación con 1 devuelve 1; el factorial de (2-1) con la
multiplicación de 2 retorna 2; el factorial de (3-1) con la
multiplicación con 3 retorna el valor de 6 y el factorial de (4-1) con la
multiplicación de 4 retorna el valor de 4.
En el método main se crea el objeto br de tipo BufferedReader
(para lectura de datos), luego se declara la variable num de tipo
entero. A través de la sentencia repetitiva se pide el ingreso del
número para la variable num y si es un valor negativo se volverá a
solicitar nuevamente el ingreso de dicho número. Finalmente, a
través del método println se muestra el cálculo del método recursivo
factorial teniendo como valor de entrada el contenido de la variable
num.

TÉCNICAS DE PROGRAMACIÓN | 55
RECURSIVIDAD Y SOBRECARGA DE MÉTODOS

Ejecución del programa:

2) Calcular la potencia de un número elevado a la n en forma


recursiva. Considere que el número sea de tipo real y n sea un
número entero positivo. Use recursividad.

Interpretación de la programación:
El programa está compuesto por tres métodos estáticos: el primero
llamado mensaje que es un método no recursivo, el segundo llamado
potencia que es un método recursivo y el tercero llamado main
(principal) que hace uso de los dos métodos anteriores. El método
recursivo llamado método evalúa a través de una sentencia de
selección if si el exponente es 0 y si no lo es entonces retorna el valor
de la base x multiplicado por la ejecución nuevamente del método

56 | MARTÍN GUSTAVO SALCEDO QUIÑONES


RECURSIVIDAD Y SOBRECARGA DE MÉTODOS

llamado potencia donde se mantiene el valor de la base x y el


exponente se disminuye en 1. El valor del exponente en algún
momento llega a ser 0 y devuelve el valor de 1. En el método main se
define la variable objeto de lectura llamado leer, se declara las
variables de memoria n de tipo entero y num de tipo real. Se hace una
validación para que el valor que reciba la variable de memoria n sea
mayor de 0 y esto se logra a través de la sentencia repetitiva do while.
Finalmente se imprime la potencia del numero elevado al valor de la
variable de memoria n.

Ejecución del programa:

3) Elabora un programa que permita calcular el sueldo de un


trabajador administrativo o de un docente de una institución
educativa. Un administrativo tiene un sueldo base y se le
descuenta por los días que ha faltado y por la cantidad de
minutos de tardanza. Por cada día de falta se le descuenta el 3%
de su sueldo base y 0.50 soles por cada minuto de tardanza. El
empleado docente se le paga por cada hora trabajada y solo se le
descuenta por un seguro que es 12% de sueldo. Calcula el sueldo
neto de un administrativo o docente. Hacer uso de métodos
sobrecargados

TÉCNICAS DE PROGRAMACIÓN | 57
RECURSIVIDAD Y SOBRECARGA DE MÉTODOS

Interpretación de la programación:
En este programa se crea dos métodos de lectura de datos, uno para
leer un dato de tipo entero y otro método para leer dato de tipo real.
Además, se tiene dos métodos con el mismo nombre llamados
sueldoNeto (sobrecarga de métodos), el primero con tres parámetros
para calcular el sueldo neto de un administrativo y el segundo con dos
parámetros para calcular el sueldo neto de un docente. En el método
main, se solicita primero indicar si el trabajador es de tipo

58 | MARTÍN GUSTAVO SALCEDO QUIÑONES


RECURSIVIDAD Y SOBRECARGA DE MÉTODOS

administrativo o docente, según lo indicado se procede a solicitar los


demás datos. Finalmente se hace del método sobrecargado
sueldoNeto para mostrar el resultado monto neto a recibir del
trabajador.
Ejecución del programa:

4) Hacer un programa para que reporte los n términos de la serie de


Fibonacci usando recursividad.

TÉCNICAS DE PROGRAMACIÓN | 59
RECURSIVIDAD Y SOBRECARGA DE MÉTODOS

Ejecución del programa:

5) Programa para calcular el máximo común divisor de dos


números.

60 | MARTÍN GUSTAVO SALCEDO QUIÑONES


RECURSIVIDAD Y SOBRECARGA DE MÉTODOS

Ejecución del programa:

6) Elabore un programa para reportar un numero al revés. Hacer uso


de recursividad.

TÉCNICAS DE PROGRAMACIÓN | 61
RECURSIVIDAD Y SOBRECARGA DE MÉTODOS

Ejecución del programa:

7) Desarrolle un programa para convertir un número de base 10 a


base b (que b se encuentre entre 2 y 9). Hacer uso de
recursividad.

62 | MARTÍN GUSTAVO SALCEDO QUIÑONES


RECURSIVIDAD Y SOBRECARGA DE MÉTODOS

Ejecución del programa:

TÉCNICAS DE PROGRAMACIÓN | 63
4. ARREGLOS UNIDIMENSIONALES
EN MÉTODOS

4.1. ¿Qué son arreglos?


Un arreglo es una estructura de datos capaz de almacenar un
grupo de datos, es una variable de memoria compuesta de varios
elementos esperando de ser llenados de datos del mismo tipo. Estos
elementos dentro de la estructura poseen una posición denominada
índice, vale decir que cada elemento del arreglo guarda un dato y
tiene un índice que es un número correlativo que va desde 0. Para
referirnos a un elemento del arreglo se debe indicar tanto el nombre
como el índice.

Por ejemplo:

numeros 45 38 12 56 42
índice 0 1 2 4 5

Un elemento del arreglo es numeros[1] que contiene el valor


numérico de 38. El tamaño del arreglo numeros es de 5, por lo tanto,
tiene 5 elementos que desde elemento numros[0] hasta el elemento
numeros[4]. Los arreglos de Java comienzan siempre con el elemento
con índice 0.

TÉCNICAS DE PROGRAMACIÓN | 65
ARREGLOS UNIDIMENSIONALES EN MÉTODOS

4.2. Declaración de un arreglo unidimensional o vector


En el lenguaje de programación de java existen 2 formas de
declarar arreglos.
<tipo de dato> variable[];
ó
<tipo de dato> []variable;

Por ejemplo, si se desea declarar un arreglo para números enteros, se


procede hacerlo de la siguiente manera:
int numeros[]; ó int []numeros;

4.3. Creación de un arreglo unidimensional o vector


Una vez declarado un arreglo, se tiene que crearlo. Para la
creación se usa la palabra clave new seguida del tipo de dato y del
tamaño del arreglo que debe estar dentro de los corchetes.
Por ejemplo:
numeros = new int[50]; // se está creando un arreglo de 50
elementos enteros

También se puede declarar y crear un arreglo en una sola


instrucción.
Por ejemplo:
double promedios[] = new double[30];
Se está declarando y creando el arreglo promedios de tamaño 30
elementos para datos de tipo double.

4.4. Inicialización de un arreglo unidimensional o vector


En el lenguaje de programación Java se pueden inicializar
arreglos al declararlos, es decir, se puede crear arreglos con valores o
datos iniciales. Cuando se indica datos iniciales dentro de la
declaración de un arreglo, Java procede internamente a hacer uso del

66 | MARTÍN GUSTAVO SALCEDO QUIÑONES


ARREGLOS UNIDIMENSIONALES EN MÉTODOS

operador new definiendo el tamaño del arreglo de manera


automática. Se debe hacer uso de llaves { } para listar los datos.

Ejemplo:
int numeros [] = { 1, 2, 3, 4, 5};
boolean arreglo[] = { true, false, true, true};
String meses[] = { “Enero”, ”Febrero”, ”Marzo”, ”Abril”,
”Mayo”, “Junio”};

4.5. ¿Cómo acceder a los datos almacenados en el arreglo?


Cada dato colocado en un arreglo se conoce como elemento del
arreglo. Para acceder al contendido de un elemento de un arreglo
especifique el nombre del arreglo con el índice del elemento entre
corchetes [].
Ejemplo:
int numeros = { 12, 20, 80, 70, 90 };
for(int indice = 0; indice < 5 ; indice++)
 System.out.println(numeros[indice]);
En este ejemplo el tamaño del arreglo es 5. En el lenguaje de
programación Java el índice del primer elemento del arreglo es cero y
la última posición es el tamaño del arreglo menso 1, es decir, un
arreglo de tamaño 5 el índice va desde 0 hasta 4. Debido a esto, para
iterar con todos los elementos del arreglo, el programa debe barrer
con todos los elementos que se puede lograr cuando se use una
sentencia repetitiva.
En el lenguaje de programación Java un arreglo es un objeto.
Siendo un objeto puede tener métodos y propiedades. La propiedad
length (longitud) contiene el tamaño del arreglo. La propiedad length
es de solo lectura, dado que el tamaño del arreglo se define en el
momento de la creación.

TÉCNICAS DE PROGRAMACIÓN | 67
ARREGLOS UNIDIMENSIONALES EN MÉTODOS

Por ejemplo: El siguiente código de programación muestra la


forma de usar la propiedad length dentro de una sentencia for que
itera con todos los elementos del arreglo.

int numeros[] = {30, 20, 50, 70, 40};

for(indice = 0; indice<numeros.length; indice++)


 System.out.println(numeros[indice]);

4.6. Referencias a arreglos unidimensionales


El lenguaje de programación de Java usa referencias para
apuntar hacia otros arreglos.
Por ejemplo:
Las siguientes instrucciones utilizan la referencia arreglo para
acceder a dos arreglos distintos.

import java.io.*;
public class ReferenciandoArreglos{
public static void main(String args[])
{
int pares[] = {2, 4, 6, 8,10};
int impares[] = {1, 3, 5, 7, 9, 11};
int arreglo[];

arreglo=pares;
System.out.println("Primer Arreglo de Numeros Pares");

A
for(int i=0;i<arreglo.length;i++)
System.out.println(arreglo[i]); 1

68 | MARTÍN GUSTAVO SALCEDO QUIÑONES


ARREGLOS UNIDIMENSIONALES EN MÉTODOS

arreglo=impares;
System.out.println(”SegundoArreglo de Números Impares");

B
for(int i=0;i<arreglo.length;i++)
System.out.println(arreglo[i]);
}
}

En la parte A la instrucción arreglo=pares; se aplica lo que es


referencia, es decir, el vector llamado arreglo se define con todos los
datos que tiene el arreglo par, es por ello que cuando se usa la
sentencia for, imprime los datos del arreglo pares. En la parte B la
instrucción arreglo=impares; al ejecutarse deja de contener los
valores del arreglo pares y ahora contiene los valores del arreglo
impares. Con la sentencia for se busca imprimir el contenido del
arreglo y esta vez será con los datos que tiene los arreglos impares.

4.7. Creación de métodos con uso de arreglos


Siendo los arreglos variables de memoria capaz de almacenar
muchos datos, pueden ser parámetros o valor de retorno de los
métodos.
Por ejemplo, si deseo elaborar un método que dado el valor de la
variable de memoria n que indica la generación de los primeros n
números pares y se desea guardarlos en un arreglo, este arreglo debe
ser el valor de retorno del método.
public static int [] generacionPares(int n)
{
 int par=0, i;
 int pares[]=new int[n];
 for(i=0;i<n;i++)
 {

TÉCNICAS DE PROGRAMACIÓN | 69
ARREGLOS UNIDIMENSIONALES EN MÉTODOS

  par=par+2;
  pares[i]=par;
 }
 return pares;
}

En este método se procede a la creación del arreglo de pares de


tamaño n. Con la sentencia for se genera los pares en cada iteración y
se asigna en el elemento correspondiente del arreglo el par generado.
El método retorna el arreglo llamado pares con el contenido de los
pares generados.

Otro ejemplo con uso de arreglo en métodos puede ser encontrar la


suma de los números contendidos en un arreglo numérico real.

public static double sumaNúmeros(double x[ ])


{
 int i, total=x.length;
 double suma=0.0;
 for(i=0;i<total;i++)
  suma=suma+x[i];
 return suma;
}

El método sumaNúmeros el parámetro x[] es un arreglo de tipo real,


con la propiedad length se obtiene el tamaño y con la sentencia for se
barre con todos los elementos del arreglo x sumando de forma
acumulativa en la variable de memoria suma. Finalmente, lo
acumulado en la variable suma será lo que retorne el método
sumaNúmeros.

70 | MARTÍN GUSTAVO SALCEDO QUIÑONES


ARREGLOS UNIDIMENSIONALES EN MÉTODOS

4.8. Programas resueltos en Java usando NetBeans

1) Elaborar un programa para ingresar n datos numéricos reales en


un arreglo y los muestre en la pantalla, además reportar el mayor,
el menor y el promedio.

TÉCNICAS DE PROGRAMACIÓN | 71
ARREGLOS UNIDIMENSIONALES EN MÉTODOS

Interpretación de la programación:
En el método main se inicia creando el objeto leer del tipo
BuffreredReader, luego se declara variables de memoria de tipo
double. Se aprecia la variable numeros[] que es una arreglo o vector
que todavía no se define el tamaño o el número de elementos. Luego se
declara dos variables enteras n, i. A través de la sentencia repetitiva se
valida el valor de n dentro de un rango de 1 a 100, es decir, no se acepta
un valor menor o igual a 0 ni un número mayor de 100. Posteriormente
se crea el arreglo números con la instrucción números=new double[n];
ya que se define el tamaño del arreglo números con el valor de la
variable n. A continuación, se usa la sentencia for que permite leer los
datos para cada elemento del arreglo, la misma va desde un valor de 0
hasta i<n, es decir, si n es igual a 10 entonces la variable i irá desde 0
hasta 9. En cada interacción solicitará el ingreso de un número, la
misma que se almacenará en el elemento correspondiente del arreglo.
Cabe señalar que el objeto leer con su método readLine() lee el dato
como cadena (String) entonces existe la necesidad de hacer la
conversión, para ello se usa el método parseDouble de la clase Double
que permite convertir el dato ingresado en valor numérico double.
Luego se imprime los valores ingresados usando nuevamente la
sentencia for. Para el cálculo del mayor y menor número ingresados en
el arreglo vector se inicializa las variables con la instrucción
mayor=números[0], menor=números[0]; donde la variable mayor y la
variable menor recibe el valor del primer elemento del arreglo x. A
continuación, con la sentencia for se recorre por cada elemento del
arreglo números desde el segundo elemento hasta el último elemento
del arreglo. En cada interacción se usa la sentencia IF para evaluar si el
elemento es mayor a la variable mayor, si es verdadero se cambia el
valor contenido en la variable mayor por el valor del elemento en
evaluación, si es falso se cambia el valor del contenido en la variable
menor. Posteriormente a través de otra sentencia for se procede a
realizar la suma de todos los números contenidos en el arreglo y se va
acumulando en la variable suma, que previamente se inicializó con el
valor de cero. A continuación, se calcula el promedio y se muestra los
resultados obtenidos.

72 | MARTÍN GUSTAVO SALCEDO QUIÑONES


ARREGLOS UNIDIMENSIONALES EN MÉTODOS

Ejecución del programa:

2) Del programa anterior aplicar la creación de métodos estáticos.

TÉCNICAS DE PROGRAMACIÓN | 73
ARREGLOS UNIDIMENSIONALES EN MÉTODOS

74 | MARTÍN GUSTAVO SALCEDO QUIÑONES


ARREGLOS UNIDIMENSIONALES EN MÉTODOS

Interpretación de la programación:
El programa tenía un solo método main y ahora tiene 8 métodos
estáticos más. Se establece un método mensaje para imprimir cualquier
expresión de cadena de caracteres, el método leerDatoEntero() sirve
para la lectura de un dato de tipo entero, el método leerDatoReal() sirve
para la lectura de un dato de tipo real, el método leerDatosArreglo()
sirve para el llenado de un arreglo de tipo double, el método
mostrarDatosArreglo() sirve para imprimir los datos almacenados en
un arreglo de tipo double, el método mayorNumeroArreglo() permite
calcular el número mayor de los números almacenados en el arreglo, el
método menorNumeroArreglo() permite calcular el número menor de
los números guardados en el arreglo y el método
sumaNumerosArreglo() permite calcular la suma de todos los números
almacenados en el arreglo de tipo double.

Ejecutando el programa usando estos métodos se obtiene los mismos


resultados:

3) Programa para ingresar n valores reales en un arreglo y luego


invierta los datos del arreglo.

TÉCNICAS DE PROGRAMACIÓN | 75
ARREGLOS UNIDIMENSIONALES EN MÉTODOS

76 | MARTÍN GUSTAVO SALCEDO QUIÑONES


ARREGLOS UNIDIMENSIONALES EN MÉTODOS

Interpretación de la programación:
La novedad en esta programación es el método arregloInvertido()
dado que busca invertir los valores del arreglo haciendo que el último
valor ubicado en el último elemento del arreglo sea el primero, En el
proceso de cambio de datos es necesario el uso de la variable
temporal temp para salvar el dato a mover y luego colocar en la
posición correspondiente. Los demás métodos se han usado de
manera similar en el programa anterior.

Ejecución del programa:

4) Elaborar un programa que permite el ingreso de datos numéricos


reales en 2 vectores de n elementos cada uno y luego listar el
producto escalar de ellos

TÉCNICAS DE PROGRAMACIÓN | 77
ARREGLOS UNIDIMENSIONALES EN MÉTODOS

78 | MARTÍN GUSTAVO SALCEDO QUIÑONES


ARREGLOS UNIDIMENSIONALES EN MÉTODOS

Ejecución del programa:

5) Elaborar un programa que permita el ingreso de n nombres en un


arreglo y luego ingresar un nombre cualquiera y buscar si este se
encuentra en el arreglo ingresado.

TÉCNICAS DE PROGRAMACIÓN | 79
ARREGLOS UNIDIMENSIONALES EN MÉTODOS

80 | MARTÍN GUSTAVO SALCEDO QUIÑONES


ARREGLOS UNIDIMENSIONALES EN MÉTODOS

Ejecución del programa:

TÉCNICAS DE PROGRAMACIÓN | 81
5. ESTRUCTURA DE UNA CLASE:
ATRIBUTOS Y MÉTODOS

5.1. ¿Qué es una clase?


Una clase es un molde o una plantilla donde se establece los
atributos (estado) y los métodos (comportamiento) comunes a todos
los objetos que mantienen las mimas características. Las clases son la
base a partir del cual permiten crear o instanciar objetos donde
comúnmente los atributos reciben los datos o valores que permitirán
procesar y generar resultados. Los objetos al contener los datos en los
atributos permiten aplicar la programación orientado al objeto. Una
clase posee un nombre es un conjunto de datos y de instrucciones
(métodos) que actúa sobre los datos. Una clase también se define
como un tipo abstracto de dato compuesto por atributos y métodos,
donde los atributos hacen referencia a las características del concepto
abstraído y los métodos hacen referencia al comportamiento de dicho
concepto (2).

5.2. Estructura de una clase


Una clase contiene datos, estos pueden ser de tipos primitivos o
referencias y los métodos. La sintaxis general para la declaración de
una clase es:
modificadores class nombre_clase {
declaraciones_de_atributos y métodos ;
}

TÉCNICAS DE PROGRAMACIÓN | 83
ESTRUCTURA DE UNA CLASE: ATRIBUTOS Y MÉTODOS

Los modificadores o niveles de acceso son palabras clave que


afecta el alcance de una clase. Por ejemplo, se crea la clase
Rectángulo con los atributos base y altura y se desea calcular el área,
perímetro y diagonal del Rectángulo. A continuación, el diagrama de
la clase Rectángulo.

Rectangulo
base: double
altura: double
Rectangulo()
setBase(): void
setAltura(): void
getBase(): double
getAltura(): double
area(): double
perímetro(): double
diagonal(): double
toString(): String

Definido los atributos y métodos se proceden a crear el código en


Java para la clase Rectángulo.

import java.io.*;
class Rectángulo
{
private double base;
private double altura;

public Rectángulo(double b, double h)


{
  base = b;
altura=h;
}

84 | MARTÍN GUSTAVO SALCEDO QUIÑONES


ESTRUCTURA DE UNA CLASE: ATRIBUTOS Y MÉTODOS

public void setBase(double b)


 {
  base=b;
 }

public void setAltura(double h)
 {
  altura=h;
 }

public double getBase()


 {
  return base;
 }

public double getAltura()


 {
  return altura;
 }

public double área ()
 {
  return base*altura;
 }

 public double perímetro()


 {
  return 2*base+2*altura;
 }

TÉCNICAS DE PROGRAMACIÓN | 85
ESTRUCTURA DE UNA CLASE: ATRIBUTOS Y MÉTODOS

 public double diagonal()


 {
  return Math.sqrt(Math.pow(base,2)+Math.pow(altura,2));
 }

 public String toString()


 {
  return "base = "+base+" "+altura;
 }
}

La clase Rectángulo tiene 2 atributos base y altura los cuales


son privados esto quiere decir que estas 2 variables son visibles
dentro de la clase Rectángulo. El primer método que se ha
implementado o definido la programación es el constructor, este
método tiene como nombre igual a la clase, no retorna ningún valor y
es de acceso público. Permite dar valores iniciales a los atributos del
nuevo objeto. Es utilizado al momento de crear el objeto. Los
atributos base y altura son de acceso privados, y si hay necesidad de
cambiar los valores de los atributos se crean los métodos
setBase(double b) y setAltura(double h) y si se desea obtener los
valores de los atributos creamos los métodos getBase() y getAltura().
Además se han creado los métodos area(), perímetro() y diagonal()
que permiten calcular el area, perímetro y diagonal del rectángulo
usando en la implementación los atributos de la clase. En el método
toString() se crea una cadena de texto con la información guardado en
los atributos de la clase.

public class pruebaRectangulo{


public static void main(String args[]) throws IOException
{
 BufferedReader leer = new BufferedReader(new
InputStreamReader(System.in));

86 | MARTÍN GUSTAVO SALCEDO QUIÑONES


ESTRUCTURA DE UNA CLASE: ATRIBUTOS Y MÉTODOS

 double b, h;
 Rectangulo R;
 System.out.print("Ingrese el valor de la base : ");
 b=Double.parseDouble(br.readLine());
 System.out.print("Ingrese el valor de la altura : ");
 h=Double.parseDouble(br.readLine());
 R = new Rectangulo(b,h);
 System.out.println("Rectangulo : "+R);
 System.out.println("Area : "+R.area());
 System.out.println(“Perimetro : “+R.perimetro());
 System.out.println("Diagonal : "+R.diagonal());
}
}

Dentro del método main de la clase Prueba Rectángulo se ha


declarado dos variables de tipo primitivo double b y h y una variable
R que es de tipo Rectángulo. Al colocar Rectangulo R; se está
declarando a R como una variable objeto de la Clase Rectángulo. La
declaración no crea nuevos objetos. En la declaración (Rectángulo R)
se declara una variable llamada R la cual será usada para referirnos a
un objeto Rectángulo. La referencia está vacía. Una referencia vacía
es conocida como referencia nula. Al colocar R = new
Rectángulo(3,4); con el operador new creamos un objeto de la clase
Rectángulo. El operador new instancia una clase asignando memoria
para el nuevo objeto. El operador new requiere una llamada a un
constructor de la clase a instanciar. El constructor inicializa el nuevo
objeto. El operador new retorna una referencia al objeto creado. Una
vez creado el objeto para poder llamar a sus métodos usamos lo
siguiente objeto nombre de Método. Por ejemplo para calcular el área
usamos R.area(), para calcular el perímetro R.perímetro() y para
calcular la diagonal R.diagonal (). Al escribir System.out.println
(“Rectángulo: “+R); en realidad se está llamando tácitamente al
método toString de la clase R.

TÉCNICAS DE PROGRAMACIÓN | 87
ESTRUCTURA DE UNA CLASE: ATRIBUTOS Y MÉTODOS

Si se desea modificar el atributo base del Objeto se debe usar el


método setBase por ejemplo si después de crear el objeto queremos
que base tenga el valor 10, se colocaría la siguiente instrucción:
R.setBase(10); lo mismo se hace si se quiere modificar la altura. Si se
desea saber el valor de algún atributo del objeto se usa los métodos
get, por ejemplo, si quisiera imprimir el valor de la base del objeto R
se tendría que escribir lo siguiente:

System.out.println(“La base es: “+R.getBase());

5.3. Programas resueltos en Java usando NetBeans


1) Crea la clase Cilindro con los atributos radio y altura de tipo
numérico real, que permita calcular el área y el volumen del
cilindro.
Los atributos y métodos de la clase Cilindro se describe a
continuación:

Cilindro
radio: double
altura: double
Cilindro()
setRadio(): void
setAltura(): void
getRadio(): double
getAltura(): double
area(): double
volumen(): double
toString(): String

Definido los atributos y métodos se proceden a crear el código en


Java para la clase Cilindro y para la clase ProbandoCilindro.

88 | MARTÍN GUSTAVO SALCEDO QUIÑONES


ESTRUCTURA DE UNA CLASE: ATRIBUTOS Y MÉTODOS

TÉCNICAS DE PROGRAMACIÓN | 89
ESTRUCTURA DE UNA CLASE: ATRIBUTOS Y MÉTODOS

Interpretación de la programación:
Se crea clase Cilindro con los atributos radio y altura de tipo double.
Luego se crea el método constructor Cilindro que permite establecer
los valores de los dos atributos a través de los parámetros r y a. Luego
se construye los métodos setRadio() y setAltura() que permite
cambiar el valor del atributo radio y altura respectivamente. Con los
métodos getRadio() y getAltura() se obtiene el contenido del
atributo radio y altura respectivamente. Con los métodos area() y
volumen() se calcula el área y el volumen del cilindro. El método
toString() permite imprimir el radio y la altura del cilindro según el
contenido de los atributos.
Con la clase ProbandoCilindro, se tiene el método mensaje para
imprimir una cadena de texto y el método leerDatoReal para la
lectura de datos de tipo real. En el método main, se declara las
variables de memoria r y h de tipo double y se declara la variable C
del tipo de la clase Cilindro. Se ingresa los valores del radio y de la
altura. Luego en la instrucción C = new Cilindro(r,h); se crea el objeto
C (que previamente había sido declarado Cilindro C;) haciendo uso
del método constructor Cilindro pasando los valores ingresados del
radio y la altura a través de las variables de memoria r y h. A
continuación, con la instrucción mensaje("Cilindro : "+C+"\n"); se
imprime la expresión “Cilindro:” con lo programado en el método
toString(), es decir, es lo mismo colocar C que colocar C.toString().
Finalmente se imprime el área y el volumen del cilindro usando los
métodos no estáticos area() y volumen() invocados desde el objeto
C.
Ejecución del programa:

90 | MARTÍN GUSTAVO SALCEDO QUIÑONES


ESTRUCTURA DE UNA CLASE: ATRIBUTOS Y MÉTODOS

2) Crear una clase Producto que tenga los atributos nombre, stock y
preciounitario, que permita calcular el inventario (stock *
preciounitario). Desarrollar un programa que permita el ingreso
de n productos para luego listar los datos con su respectivo
inventario e indica el nombre del producto de mayor inventario.
Hacer uso de arreglos.

TÉCNICAS DE PROGRAMACIÓN | 91
ESTRUCTURA DE UNA CLASE: ATRIBUTOS Y MÉTODOS

92 | MARTÍN GUSTAVO SALCEDO QUIÑONES


ESTRUCTURA DE UNA CLASE: ATRIBUTOS Y MÉTODOS

Interpretación de la programación:
Se define la clase Producto con sus tres atributos nombre, stock y
precio unitario. Luego se crea el método constructor con tres
parámetros para definir los valores de los atributos cuando sea usado
en un proceso de creación de objeto. También se crea los métodos de
set y get para cada atributo y el método inventario para el cálculo del
stock por el precio unitario. En la clase Probando Producto se crea
varios métodos estáticos: el método mensaje que ayuda a imprimir
texto, los métodos de lectura para dato de tipo entero y real, el método
listarProductos está diseñado para imprimir los datos almacenados
en los arreglos, el método producto Mayor Inventario que se encarga
de obtener el producto de mayor inventario y por último se tiene al
método main que solicitará la cantidad de productos a ingresar, se
ingresa los datos y posteriormente se hace listado de lo ingresado y se
muestra el nombre del producto de mayor inventario.

TÉCNICAS DE PROGRAMACIÓN | 93
ESTRUCTURA DE UNA CLASE: ATRIBUTOS Y MÉTODOS

Ejecución del programa:

3) Crea la clase Alumno con los atributos nombre, nota1 y nota2 y


con métodos que permita calcular el promedio y la condición
académica de aprobado o desaprobado.

94 | MARTÍN GUSTAVO SALCEDO QUIÑONES


ESTRUCTURA DE UNA CLASE: ATRIBUTOS Y MÉTODOS

TÉCNICAS DE PROGRAMACIÓN | 95
ESTRUCTURA DE UNA CLASE: ATRIBUTOS Y MÉTODOS

Ejecución del programa:

4) Crea la clase Trabajador con los atributos nombre, precio Hora y


horas Trabajadas y con métodos que calcule salario bruto, los
impuestos (12.8% del Salario Bruto) y el salario Neto, que viene
ser el salario bruto menos los impuestos.

96 | MARTÍN GUSTAVO SALCEDO QUIÑONES


ESTRUCTURA DE UNA CLASE: ATRIBUTOS Y MÉTODOS

TÉCNICAS DE PROGRAMACIÓN | 97
ESTRUCTURA DE UNA CLASE: ATRIBUTOS Y MÉTODOS

Ejecución del programa:

5) Crea la clase Móvil que contenga los atributos velocidad Inicial,


aceleración y tiempo. Usando métodos calcula la distancia
recorrida por un móvil.

98 | MARTÍN GUSTAVO SALCEDO QUIÑONES


ESTRUCTURA DE UNA CLASE: ATRIBUTOS Y MÉTODOS

Ejecución del programa:

TÉCNICAS DE PROGRAMACIÓN | 99
6. RELACIONES ENTRE CLASES

6.1. Uso de clases relacionadas


Un grupo de objetos aislados tiene poca capacidad para resolver
un problema real dado que muchas veces hacer consultas de datos se
hace a partir de la información que guarda varios objetos. En una apli-
cación o programa los objetos intercambian información y tienen
alguna relación entre sus datos. A nivel de diseño de clases se distin-
gue 5 tipos de relaciones básicas entre clases de objetos: dependen-
cia, asociación, agregación, composición y herencia, siendo la aso-
ciación la relación más importante y del cual se usa más. La relación
de tipo asociación es la relación entre dos clases a partir de algún atri-
buto en común que los ligue y mantenga una comunicación de datos
al momento de ser utilizados a nivel de objetos. La relación de clases
se establece las cardinalidades en los extremos.

6.2. Diagramando clases relacionadas


Se tiene el siguiente diagrama de clases:
Categoria Producto
codcategoria : int 1 codproducto : int
descripción : String nombre : String
Categoria() stock : int
setCodCategoria() : void preciounitario : double
getCodCategoria : int 0..* codcategoria : int

Producto()
setCodProducto(): void
getCodProducto(): int

TÉCNICAS DE PROGRAMACIÓN | 101


RELACIONES ENTRE CLASES

Estas dos clases Categoría y Producto existe una relación cuya


cardinalidad consiste en que cada categoría puede estar en ninguna o
en muchos productos. Por ejemplo, en una bodega se ofrece
productos comestibles y productos de limpieza. Si se desea crear
objetos de las clases Categoría y Producto y se desea presentar a nivel
gráfico podría ser así:

Objeto: C1 (creado a partir de la clase Categoría)

1 Bebidas

Objeto: C2 (creado a partir de la clase Categoría)

2 Lácteos

Objeto: C3 (creado a partir de la clase Categoría)

3 Condimentos

Objeto: P1 (creado a partir de la clase Producto)


1 Leche evaporada Gloria 50 3.40 2

Objeto: P2 (creado a partir de la clase Producto)


2 Cocacola 2 litros 30 5.60 1

Objeto: P3 (creado a partir de la clase Producto)


3 Yogurt Laive 1 litro 40 5.50 2

Con lo graficado se observa la presencia de 3 objetos de la clase


Categoría y 3 objetos de la clase de Producto. Se tiene las categorías
Bebidas, Lácteos y Condimentos con los códigos de categoría 1, 2 y 3
respectivamente. Los productos Leche evaporada Gloria y Yogurt
Laive 1 litro es de la categoría Lácteos (código de categoría para
Lácteos es 2) y el producto Cocacola 2 litros es de la categoría

102 | MARTÍN GUSTAVO SALCEDO QUIÑONES


RELACIONES ENTRE CLASES

Bebidas (código de categoría para Bebidas es 1). No hay por el


momento ningún producto de la categoría condimentos. Justamente
esto es lo que indica la cardinalidad 1 ------- 0…* se interpreta que
una categoría puede tener 0 productos como es el caso de la categoría
condimentos o puede tener 1 o más productos como es el caso de las
categorías Bebidas y Lácteos (* representa 1 o más). Cabe señalar
que el primer atributo de la clase Categoría y el último atributo de la
clase Producto es la que establece la relación entre las clases.

Implementando las clases en programación de Java sería:

class Categoría

{
 private int codcategoria;
 private String descripción;

 public Categoria(int codcat, String des)


 {
  codcategoria = codcat;
  descripción = des;
 }

 public void setCodCategoria(int codcat)


{
 codcategoria =codcat
}

public int getCodCategoria()


{
 return codcategoria;
}

TÉCNICAS DE PROGRAMACIÓN | 103


RELACIONES ENTRE CLASES

.
.
.
}

class Producto
{
 private int codproducto;
 private String nombre;
 private int stock;
 private double preciounitario;
 private int codcategoria;

 public Producto(int codpro, String nom, int s, double pu,


int codcat)
 {
  codproducto = codpro;
  nombre = nom;
  stock = s;
  preciounitario = pu;
  codcategoria = codcat;
 }

 public void setCodProducto(int codpro)


{
  codproducto = codpro;
 }

 public int getCodProducto()


 {

104 | MARTÍN GUSTAVO SALCEDO QUIÑONES


RELACIONES ENTRE CLASES

  return codproducto;
 }
 .
 .
 .
}

Para implementar estas dos clases y poder manejar los datos


expresados anteriormente n forma gráfica (3 objetos de la clase
Categoría y 3 objetos de la clase de Producto) se debe programar lo
siguiente:

public class ProbandoCategoriaProducto


{
 public static void main(String args[])throws IOException
 {
  BufferedReader leer=new BufferedReader(new
InputStreamReader(System.in));
  Categoria C1, C2, C3;
  Producto P1, P2, P3;
  int codcat, codpro, s;
  String des, nom;
  double pu;
  System.out.print(“Codigo de Categoria: “);
  codcat = Integer.parseInt(leer.readLine());
  System.out.print(“Descripción de la Categoria: “);
  des=leer.readLine();
  C1=new Categoria(codcat, des);
  System.out.print(“Codigo de Categoria: “);
  codcat = Integer.parseInt(leer.readLine());
  System.out.print(“Descripción de la Categoria: “);

TÉCNICAS DE PROGRAMACIÓN | 105


RELACIONES ENTRE CLASES

  des=leer.readLine();
  C2=new Categoria(codcat, des);
  System.out.print(“Codigo de Categoria: “);
  codcat = Integer.parseInt(leer.readLine());
  System.out.print(“Descripción de la Categoria: “);
  des=leer.readLine();
  C3=new Categoria(codcat, des);
  System.out.print(“Codigo de Producto: “);
  codpro = Integer.parseInt(leer.readLine());
  System.out.print(“Nombre del Producto: “);
  nom=leer.readLine();
  System.out.print(“Stock del Producto: “);
  s = Integer.parseInt(leer.readLine());
  System.out.print(“Precio del Producto: “);
  pu = Double.parseDouble(leer.readLine());
  System.out.print(“Codigo de Categoria: “);
  codcat = Integer.parseInt(leer.readLine());
  P1=new Producto(codpro, nom, s, pu, codcat);
  System.out.print(“Codigo de Producto: “);
  codpro = Integer.parseInt(leer.readLine());
  System.out.print(“Nombre del Producto: “);
  nom=leer.readLine();
  System.out.print(“Stock del Producto: “);
  s = Integer.parseInt(leer.readLine());
  System.out.print(“Precio del Producto: “);
  pu = Double.parseDouble(leer.readLine());
  System.out.print(“Codigo de Categoria: “);
  codcat = Integer.parseInt(leer.readLine());
  P2=new Producto(codpro, nom, s, pu, codcat);
  System.out.print(“Codigo de Producto: “);

106 | MARTÍN GUSTAVO SALCEDO QUIÑONES


RELACIONES ENTRE CLASES

  codpro = Integer.parseInt(leer.readLine());
  System.out.print(“Nombre del Producto: “);
  nom=leer.readLine();
  System.out.print(“Stock del Producto: “);
  s = Integer.parseInt(leer.readLine());
  System.out.print(“Precio del Producto: “);
  pu = Double.parseDouble(leer.readLine());
  System.out.print(“Codigo de Categoria: “);
  codcat = Integer.parseInt(leer.readLine());
  P3=new Producto(codpro, nom, s, pu, codcat);
}
}

Resulta trabajoso ir creando variables de objetos en la programación


según la necesidad lo que hace que el código de la programación se
extienda y se haga a la medida, es por ello la necesidad de manejar los
objetos dentro de arreglos.

6.3. Arreglo de objetos


La clase una vez definida y programada está lista para la creación de
objetos. Un arreglo es una estructura de datos que a través de sus
elementos guarda datos. Se pretende hacer que cada elemento del
arreglo sea un objeto.

Arreglo: categorías

1 Bebidas 2 Lácteos 3 Condimentos

0 1 2

En Java se declara y se crea el arreglo:


Categoría categorías [] = new Categoría[3];

TÉCNICAS DE PROGRAMACIÓN | 107


RELACIONES ENTRE CLASES

El arreglo categorías sus elementos tienen la estructura de la clase


Categoría. Esta clase tiene dos atributos cod categoría y descripción,
esto hace que cada elemento puede almacenar dos datos debido a los
dos atributos. Una manera de almacenar los datos en el arreglo es:

Categoría C = new Categoría(1,”Bebidas”);


Categorías [0]=C;

Se crea un objeto de la clase Categorías haciendo uso del método


constructor dando como valores iniciales a los atributos 1 y Bebidas.
El objeto C al tener los atributos con valores al momento de hacer
mención de un elemento del arreglo se lo logra almacenar dicho
objeto C en el elemento categorías [0].

6.4. Programas resueltos en Java usando NetBeans


1) Crear un programa que permita el ingreso de varias categorías y
varios productos haciendo uso de las clases Categoría (atributos:
codcategoría, descripción) y Producto (atributos: codproducto,
nombre, stock, precio unitario, codcategoría). Luego muestre un
listado de los productos y el producto de mayor stock.

108 | MARTÍN GUSTAVO SALCEDO QUIÑONES


RELACIONES ENTRE CLASES

TÉCNICAS DE PROGRAMACIÓN | 109


RELACIONES ENTRE CLASES

110 | MARTÍN GUSTAVO SALCEDO QUIÑONES


RELACIONES ENTRE CLASES

TÉCNICAS DE PROGRAMACIÓN | 111


RELACIONES ENTRE CLASES

Interpretación de la programación:
La programación se inicia con la creación de las clases Categoría y
Producto con sus atributos y métodos. En la clase Usando Categoría
Producto se define varios métodos, uno denominado imprime que
sirve para imprimir una cadena de texto, otro denominado ler
DatoEntero para la lectura de un valor numérico entero, otro
denominado ler Dato Real para la lectura de un valor numérico real,
otro denominado leerDatoTexto para la lectura de un dato de tipo
cadena de texto, otro llamado buscaCategoria que consiste en buscar
la descripción de la categoría dado el valor del código de la categoría
y otro método llamado productoMayorStock que retorna el nombre
del producto de mayor stock. En estos dos últimos métodos se hace
uso de los métodos get como por ejemplo getCategoria() para obtener
el código de la categoría del elemento especificado del arreglo. En el
método main, después de declarar variables de memoria se pide el
ingreso de la cantidad de categoría a almacenar como también la
cantidad de productos a ingresar, se procede al ingreso de los datos en
ambos arreglos con la ayuda de la sentencia repetitiva for donde
además se crea objetos de la clase Categoría y de la Clase Producto
que sirven para el llenado de cada elemento del arreglo. Luego se
hace un listado de los productos mostrando en lugar del código de
categoría la descripción de la categoría. Finalmente se muestra el
producto de mayor stock.

Ejecución del programa:

112 | MARTÍN GUSTAVO SALCEDO QUIÑONES


RELACIONES ENTRE CLASES

2) Crear la clase Facultad con los atricutos codigofac y nombre.


También crear la clase EscuelaProfesional con los atributos
codigoesc, nombre, facultad. Lugo procede a ingresar los datos
de dos escuelas profesionales.

TÉCNICAS DE PROGRAMACIÓN | 113


RELACIONES ENTRE CLASES

Interpretación de la programación:
La aplicación se inicia con la creación de la clase Facultad y la clase
EscuelaProfesional. La novedad en esta programación está en el ter-
cer atributo de la clase EscuelaProfesional es de tipo clase Facultad,
esta otra forma de relacionar una clase con otra. En el método cons-
tructor EscuelaProfesional, el tercer parámetro que es f es de tipo
Facultad. El método toString establece una cadena de texto que indi-
ca el nombre de la escuela profesional y a qué facultad pertenece. En
la clase RelacionFacultadEscuela se establece los métodos imprime
y leerDatoTexto. En el método main se solicita el ingreso de datos de
dos escuelas profesionales indicando a qué facultad pertenece y ter-
mina con la impresión de los datos ingresados.

114 | MARTÍN GUSTAVO SALCEDO QUIÑONES


RELACIONES ENTRE CLASES

Ejecución del programa:

3) Crear una aplicación que permita registrar datos de artefactos a


partir del diseño de dos clases: Marca (atributos: codmarca,
nombre) y Artefacto (atributos: codartefacto, descripción,
precio, codmarca). Luego listar los artefactos y posteriormente
dado el nombre de la marca listar los artefactos de la marca
indicada.

Crear el archivo LecturaDatos.java que contenga:

TÉCNICAS DE PROGRAMACIÓN | 115


RELACIONES ENTRE CLASES

Crear el archivo Marca.java que contenga:

Crear el archivo Artefacto.java que contenga

116 | MARTÍN GUSTAVO SALCEDO QUIÑONES


RELACIONES ENTRE CLASES

Crear el archivo TiendaArtefactos que contenga:

TÉCNICAS DE PROGRAMACIÓN | 117


RELACIONES ENTRE CLASES

118 | MARTÍN GUSTAVO SALCEDO QUIÑONES


RELACIONES ENTRE CLASES

Interpretación de la programación:
Esta es la primera aplicación donde el código de la programación es
distribuido en varios archivos de extensión java, es decir, en varias
clases. Se crea una clase LecturaDatos para programar métodos que
permiten la lectura de datos desde el teclado. Luego, se crea las clases
Marca y Artefacto con los atributos indicados en el enunciado y
finalmente se tiene la clase TiendaArtefactos que solicita el ingreso
de una cantidad de marcas y de artefactos para luego listar los
artefactos y posteriormente, se pide el ingreso del nombre de una
marca para luego mostrar los artefactos de la marca indicado.

Ejecución del programa:

TÉCNICAS DE PROGRAMACIÓN | 119


7. MODIFICADORES DE ACCESO A
LOS MIEMBROS DE UNA CLASE

7.1. ¿Qué son modicadores de acceso?


Los modificadores de acceso son palabras reservadas del
lenguaje de programación Java que define la forma de cómo acceder
a las clases y a los componentes de las mismas, es decir, determinan
desde qué clases se puede acceder a un determinado miembro de la
clase o de la clase misma.

7.2. Tipos de modicadores


En Java se tiene 4 tipos: public, private, protected y default,
este último no tiene ninguna palabra clave asociada. Por lo tanto, si
no especificamos ningún modificador de acceso se utiliza el nivel
de acceso por defecto, que consiste en que la clase o miembro de la
clase puede ser accedido sólo desde las clases que pertenezcan al
paquete.

7.2.1. Modicador public


El modificador de acceso public permite acceder a cualquier
clase o miembro de una clase desde cualquier clase. Las clases, los
atributos y métodos que hagan uso de public serán accesibles de
cualquier lugar de la aplicación programada.

Por ejemplo:

TÉCNICAS DE PROGRAMACIÓN | 121


MODIFICADORES DE ACCESO A LOS MIEMBROS DE UNA CLASE

package p01;
public class Matematicas
i{
 public int suma(int x,int y)
 {
  return x+y;
 }

 public int resta(int x, int y)


 {
  return x-y;
 }
}

En el programa anterior que define la clase pública Matematicas


con la palabra reservada public y los métodos suma y resta también
tienen un nivel de acceso public. Esta clase Matematicas se encuentra
en el paquete denominado p01.

package p02;

import java.io.*;
import paquete01.Matematicas;

public class Operaciones {

public static void mensaje(String m)


{
System.out.print(m);
}

122 | MARTÍN GUSTAVO SALCEDO QUIÑONES


MODIFICADORES DE ACCESO A LOS MIEMBROS DE UNA CLASE

public static int leerDatoEntero()throws IOException


{
BufferedReader leer = new BufferedReader(new
InputStreamReader(System.in));
return Integer.parseInt(leer.readLine());
}

public static void main(String args[])throws IOException


{
int n1, n2;
mensaje("Ingrese el primer número : ");
n1=leerDatoEntero();
mensaje("Ingrese el segundo número : ");
n2=leerDatoEntero();
Matematicas M=new Matemáticas();
mensaje("La suma de los números es : "+M.suma(n1, n2)+"\n");
mensaje("La resta de los números es : "+M.resta(n1, n2)+"\n");
}
}

La clase pública Operaciones se encuentra dentro del paquete


denominado paquete02, al momento de hacer uso de instrucción:
import p01.Matematicas; esto permite hacer uso de la clase
Matematicas que se encuentra en el paquete p01 dado que esta clase
es pública. En la instrucción Matematicas M=new Matematicas(); se
puede crear un objeto M de la clase Matematica que está en el otro
paquete llamado p01.

TÉCNICAS DE PROGRAMACIÓN | 123


MODIFICADORES DE ACCESO A LOS MIEMBROS DE UNA CLASE

7.2.2. Modicador private


El modificador private tiene bastante restricción y sólo permite a
los miembros de la clase que se pueda usar dentro de la clase donde se
define, es decir, se puede acceder desde la clase donde fueron
declarados o creados. Cualquier otra clase que esté dentro de un
paquete no podrá acceder a los miembros o elementos privados de
otra clase del mismo paquete. Cabe señalar que las clases y las
interfases no se pueden dar un nivel de acceso de tipo private.
Por ejemplo:

package p01;
class A
{
 private void imprime(String m)
 {
  System.out.println(m);
 }
}

public class B
{
 public static void main(String args[])
{
  A objeto=new A();
  //tratando de acceder al metodo privado imprime que está en A
  Objeto.imprime(“Esto es fácil”);
 }
}

124 | MARTÍN GUSTAVO SALCEDO QUIÑONES


MODIFICADORES DE ACCESO A LOS MIEMBROS DE UNA CLASE

Al momento de ejecutar el programa presenta un error en la ins-


trucción objeto.imprime(“ Esto es fácil”); debido a que el método
imprime es de acceso privado en la clase A y solo puede ser usado
dentro de la clase A y no puede compartir el método imprime a la
clase B y a ninguna clase distinta de A. Para que ejecute correctamen-
te el programa anterior el método imprime debe ser public.

7.2.3. Modicador protected


El modificador protected consiste en que los atributos y métodos
declarados dentro de la clase son accesible dentro del mismo paquete
y desde otra clase que haya sido extendido o heredada de la clase que
contiene a los elementos de acceso protected, es decir, que una
subclase puede estar en otro paquete y tiene la posibilidad de hacer
uso de atributos y métodos de nivel de acceso protected de un clase
que esté en otro paquete. Por ejemplo:

package p01;
public class A
{
 protected void imprime(String m)
{
 System.out.println(m);
 }
}

package p02;
import p01.*;
public class B extends A
{

TÉCNICAS DE PROGRAMACIÓN | 125


MODIFICADORES DE ACCESO A LOS MIEMBROS DE UNA CLASE

 public static void main(String args[])


 {
  B objeto=new B();
  objeto.imprime(“Haciendo uso del modificador
protected”);
 }
}

Se crea un método imprime en la clase A de nivel de acceso


protected. Tener en cuenta que la clase A está en el paquete p01. En el
paquete p02 se importa la clase A del paquete p01 con la instrucción
import p01.*; la clase B es extendido de A a través del uso de la
palabra reservada extend, esto quiere decir que la clase B recibe de A
el método imprime y lo hace como suyo. Es por esto que luego de
crear el objeto a partir de la clase B se puede escribir la instrucción
objeto.imprime(“Haciendo uso del modificador protected”);

7.2.4. Modicador default


El modificador default es cuando no especificas ninguna
expresión al momento de crear la clase o los miembros de una clase.
La característica más importante es que pueden ser accedidos dentro
un mismo paquete. Por ejemplo:
package p01;
class A
{
 void imprime(String m)
 {
  System.out.println(m);
 }
}

126 | MARTÍN GUSTAVO SALCEDO QUIÑONES


MODIFICADORES DE ACCESO A LOS MIEMBROS DE UNA CLASE

package p02;
public class B
{
 public static void main(String args[])
{
 A objeto=new A();
 objeto.imprime(“Esto no funciona”);
 }
}

La clase A tiene nivel de acceso default dado que no se


especifica expresión alguna antes de la palabra class y se encuentra
en el paquete p01. Se pretende en el paquete p02 hacer uso del
método imprime que también tiene de nivel acceso default. El
programa al momento de ser ejecutado no podrá hacer por el simple
hecho de que se quiere usar cuando se tiene programado en dos
paquetes distintos.
Los distintos modificadores de acceso quedan resumidos en la
siguiente tabla:

Nivel de Acceso Clase Paquete Subclase Todos


Public ü ü ü ü
protected ü ü ü x
default ü ü x x
private ü x x x

TÉCNICAS DE PROGRAMACIÓN | 127


MODIFICADORES DE ACCESO A LOS MIEMBROS DE UNA CLASE

7.3. Palabras reservadas para uso de variables


7.3.1. Static
La palabra reserva static no es para crear datos contantes sino
para hacer que los miembros de una clase sólo pertenezcan a la clase
y no ser usadas en las instancias de la clase. Esto quiere decir que si
los miembros de una clase son todos static no es necesario crear un
objeto para poder acceder a los atributos y métodos de la clase. El
método main que busca el compilador de Java es de tipo static y no se
necesita crear un objeto para su ejecución. Por ejemplo, crea una
clase A en un archivo A.java de la siguiente manera:

package p01;
public class A
{
 static int cuenta=0;
 public A()
 {
  cuenta=cuenta+1;
 }
}

Se puede apreciar que el atributo cuenta es de tipo entero y es


static con un valor inicial de 0. En el método constructor A() la
variable o atributo cuenta se incrementa en 1, esto quiere decir que
cada vez que se cree un objeto a partir de la clase A el valor del
atributo se incrementará en 1. Luego procede a crear la clase
UsandoA de la siguiente manera:

package p01;
public class B
{

128 | MARTÍN GUSTAVO SALCEDO QUIÑONES


MODIFICADORES DE ACCESO A LOS MIEMBROS DE UNA CLASE

 public static void main(String args[])


{
  A objeto1 = new A();
  A objeto2 = new A();
  System.out.println(“Se ha creado
“+objeto1.cuenta+” objetos”);
 }
}

En la clase B, en el método main se crea dos objetos y si se desea


imprimir el contenido del atributo cuenta devolverá el valor de 2
dado que se han creado 2 objetos. Da lo mismo colocar en la
programación objeto1.cuenta que poner objeto2.cuenta como
también A.cuenta

7.3.2. Final
Una variable o atributo, método o clase no se podrá modificar su
contenido. Si un atributo o variable se le coloca la palabra reservada
final no se puede asignarle otro valor. Si una clase se le pone la
palabra reservada final no podrá extender la clase, es decir, no podrá
dar herencia a una nueva clase. Si a un método se le crea con la
palabra reservada final no se podrá sobrescribir sobre él. Por
ejemplo, lo que se programa a continuación no funcionaría.

public class UsandoFinal


{
 public static void main(String args[])
{
  final String mensaje = ”Perú es una linda tierra”;
  mensaje = “Trujillo es la ciudad de la eterna
primavera”;
 }
}

TÉCNICAS DE PROGRAMACIÓN | 129


MODIFICADORES DE ACCESO A LOS MIEMBROS DE UNA CLASE

Este programa no funcionaría porque se pretende cambiar el


contenido del mensaje. Lo que viene a continuación si funcionaría.

public class UsandoFinal


{
 public static void main(String args[])
{
 String nuevomensaje;
  final String mensaje = ”Perú es una linda tierra”;
  nuevomensaje = mensaje + “ y de gente muy linda”;
 }
}

7.4. Programas resueltos en Java usando NetBeans

1) Crear una clase Trabajador que haga uso del modificador static y
luego crea dos objetos de la clase Trabajador.

Se usa la programación hecha en la clase LecturaDatos que se


encuentra en el paquete Capitulo_I.Sesion_06

130 | MARTÍN GUSTAVO SALCEDO QUIÑONES


MODIFICADORES DE ACCESO A LOS MIEMBROS DE UNA CLASE

En el archivo Trabajador.java se programa lo siguiente:

En el archivo ProbandoTrabajador se programa lo siguiente:

TÉCNICAS DE PROGRAMACIÓN | 131


MODIFICADORES DE ACCESO A LOS MIEMBROS DE UNA CLASE

Interpretación de la programación:
En la clase Trabajador se hace uso de un atributo private static y un
método public static. El atributo contador se inicializa con un valor
igual cero. Este atributo va contando el número de Objetos de la Clase
Trabajador en la medida en que se van creando los objetos, es decir, se
va incrementando en el constructor cada vez que se crea un objeto. Para
saber en un momento dado cuántos objetos de la clase Trabajador se ha
creado basta con ejecutar el método estático getContador() que
devuelve el valor de la variable contador. Un método definido con static
no puede acceder a miembros de una clase que no usa la palabra
reservada static. La aplicación hace uso de 3 clases: la clase
LecturaDatos que tiene los métodos para leer desde el teclado, la clase
Trabajador donde se declara el atributo contador como entero y como
estáticos y los atributos nombres y apellidos, aparte de los métodos set y
get y el método toString. La tercera clase es ProbandoTrabajador que en
la línea 4 de la programación se importa el paquete que contiene a la
clase LecturaDatos para ser usado en el método main. En la medida que
se crea un objeto a partir de la clase Trabajador la variable entera y
estática llamada contador se incrementa en 1.

132 | MARTÍN GUSTAVO SALCEDO QUIÑONES


MODIFICADORES DE ACCESO A LOS MIEMBROS DE UNA CLASE

Ejecución del programa:

2) Crea una clase llamada Articulo con los atributos: codarticulo,


descripcion, cantidad y preciounitario. Crea un programa que
permita el ingreso de n artículos donde el código de articulo se
genere a partir de una variable estática. Además se muestre el
listado de los artículos ordenados por de mayor a menor con
respecto al precio unitario.

La programación para la clase Articulo es como sigue.

TÉCNICAS DE PROGRAMACIÓN | 133


MODIFICADORES DE ACCESO A LOS MIEMBROS DE UNA CLASE

La programación de la clase UsandoArtículo es como sigue

134 | MARTÍN GUSTAVO SALCEDO QUIÑONES


MODIFICADORES DE ACCESO A LOS MIEMBROS DE UNA CLASE

Interpretación de la programación:
Se crea la clase Articulo con los atributos indicados en el enunciado. Fue
necesario crear una variable estática entera llamada cuenta para ir
generando los nuevos códigos de los artículos en la medida que se iba
creando más artículos. En la programación de la clase UsandoArtículo
en la línea 4 se importa el paquete que contiene la clase LecturaDatos.

TÉCNICAS DE PROGRAMACIÓN | 135


MODIFICADORES DE ACCESO A LOS MIEMBROS DE UNA CLASE

Se vio la necesidad de crear un método para el llenado del arreglo de n


artículos y otro método para la ordenación de mayor a menor con
respecto al precio unitario para luego listar los datos de todos los
artículos. Para la ordenación de los datos se hace del método de la
burbuja.

Ejecución del programa:

3) Crea una clase para manejar algunas figuras geométricas y calcula


el área y el perímetro del cuadrado, rectángulo y del triángulo.
Hacer uso de métodos estáticos y métodos no estáticos.
Respuesta con métodos estáticos:

136 | MARTÍN GUSTAVO SALCEDO QUIÑONES


MODIFICADORES DE ACCESO A LOS MIEMBROS DE UNA CLASE

TÉCNICAS DE PROGRAMACIÓN | 137


MODIFICADORES DE ACCESO A LOS MIEMBROS DE UNA CLASE

Ejecución del programa con métodos estáticos:

Respuesta con métodos no estáticos:

138 | MARTÍN GUSTAVO SALCEDO QUIÑONES


MODIFICADORES DE ACCESO A LOS MIEMBROS DE UNA CLASE

Ejecución del programa con métodos no estáticos

TÉCNICAS DE PROGRAMACIÓN | 139


AUTOEVALUACIÓN

a) Responde a las siguientes preguntas:


1. Clase que pertenece al paquete java.io y permite hacer lectura
de datos desde el teclado: ___________________
2. Método que permite calcular la potencia dado la base y el
exponente: ______________
3. Método que devuelve el número de caracteres o la longitud de
caracteres de una cadena de texto: ___________________
4. Método que permite evaluar si una cadena 1 es igual a una
cadena 2 sin importar las mayúsculas o minúsculas: ________
5. Los métodos que no retornan valor usan la instrucción return
(verdadero o falso): _____________
6. Una clase tiene como miembros atributos y métodos
(verdadero o falso): _________________
7. Para crear o instanciar un objeto de la clase Rectángulo se debe
escribir: _____________________________________
8. Los elementos o miembros que sólo pueden ser accedidos
dentro una clase, pertenecen al nivel de acceso ____________
9. Modificador que permite que un miembro pertenezca a la clase
y no a un objeto es: ____________________
10. Las relaciones entre clases permiten conocer las asociaciones
existentes entre ellos (verdadero o falso): _______________

TÉCNICAS DE PROGRAMACIÓN | 141


AUTOEVALUACIÓN

b) Desarrolla las siguientes aplicaciones:


1. Construye una aplicación que permita el ingreso de una
cantidad de segundos y muestre su equivalencia en días, horas,
minutos y segundos. Posteriormente construye una aplicación
que permita ingresar una cantidad de soles y muestre su
equivalencia en billetes de 200 soles, de 100 soles, 50 soles, 20
soles, 10 soles y en monedas de 5 soles, 2 soles y de 1 sol.
2. Construye una aplicación que permita el ingreso de una
cantidad de segundos y muestre su equivalencia en días, horas,
minutos y segundos. Esta vez lo haces creando un método.
3. Construye una aplicación que permita sumar los digitos de un
numero entero usando recursividad de métodos.
4. Construye una aplicación que permita el ingreso de 5 números
en un vector A y 5 números en un vector B. Luego coloque
todos los números tanto del vector A y del vector B en un vector
C. Finalmente muestre la suma y el promedio de todos los
números.
5. Construye una aplicación que permita crear la clase Trapecio
con los atributos con base mayor, base menor y la altura. Luego
calcula el perímetro y el área del trapecio.
6. Construye una aplicación que permita crear la clase Marca con
los atributos codigomar y nombremar. También crear la clase
Bus con los atributos codigobus, nroasientos, nroejes y
nropisos. Luego proceder a ingresar datos en Marca y en Bus y
posteriormente visualizar los datos de los buses ingresados.
Hacer uso de arreglos.

142 | MARTÍN GUSTAVO SALCEDO QUIÑONES


Capítulo II

HERENCIA, CLASES
ABSTRACTAS, INTERFACES,
POLIMORFISMO, PAQUETES
Y EXCEPCIONES
8. MÉTODOS CONSTRUCTORES
Y LA REFERENCIA THIS

8.1. ¿Qué son métodos constructores?


Toda clase tiene al menos un método constructor declarado de
manera explícita o implícita. Es utilizado para la creación de los
objetos y comúnmente establece los valores iniciales de los atributos
al momento de instanciar el objeto. Los métodos constructores
pueden tener parámetros y si una clase no especifica un método
constructor el compilador de Java le adiciona uno de acceso público
sin parámetros y cuya implementación no contiene instrucción de
programación alguna.

8.2. Características de los métodos constructores


Los métodos constructores tienen las siguientes características:
a) Un método constructor debe ser declarado con nivel de acceso
público, en otros casos que amerite se podría cambiar el nivel de
acceso.
b) Un método constructor siempre tiene el mismo nombre de la
clase a la que pertenece.
c) Un método constructor no retorna valor alguno y no necesita
hacer uso de la palabra reservada void.
d) Un método constructor no puede ser heredado.

TÉCNICAS DE PROGRAMACIÓN | 145


MÉTODOS CONSTRUCTORES Y LA REFERENCIA THIS

Por ejemplo:
public class Operaciones
{
 private int número1;
 private int número2;

 public Operaciones()
 {
  número1=0;
  número2=0;
 }
}

En la clase Operaciones se establece dos atributos numero1 y


numero2 de tipo entero. En el método constructor se inicializa con
el valor de 0 a los dos atributos.

8.3. Sobrecarga de métodos constructores


En una clase pude existir más de un método constructor, con o
sin parámetros. Si hay más de un método constructor con parámetros
deberán diferenciarse en cantidad de parámetros o en la declaración
de tipo de dichos parámetros. Por ejemplo:
public class Operaciones
{
 private int número1;
 private int número2;

 public Operaciones()
 {
  número1=0;
  número2=0;
 }

146 | MARTÍN GUSTAVO SALCEDO QUIÑONES


MÉTODOS CONSTRUCTORES Y LA REFERENCIA THIS

 public Operaciones(int x, int y)


{
 número1=x;
 número2=y;
}
}

En este programa existe en la clase Operaciones dos métodos


constructores uno sin parámetros que inicializa a 0 a los atributos y el
otro con dos parámetros que establece un valor inicial según los
valores de los parámetros.

8.4. Uso de la referencia this


Cuando se pretende hacer uso de los métodos puede surgir la
necesidad de dar valores iniciales a los atributos perteneciente a la
clase. Por ejemplo:

public class Marca


{
 private int codmarca;
 private String nombre;

 public Marca(int codmarca, String nombre)


 {
  this.codmarca=codmarca;
  this.nombre=nombre;
 }
 …
 …
}

TÉCNICAS DE PROGRAMACIÓN | 147


MÉTODOS CONSTRUCTORES Y LA REFERENCIA THIS

En el programa anterior, dentro del constructor Marca se desea


asignar valores a los atributos de la clase, sin embargo, dentro del
constructor se define como parámetros de entrada los mismos
nombres como se han definido los atributos. Para tener acceso a los
atributos de la clase Marca se utiliza la referencia this. Cuando se usa
this se está haciendo referencia al atributo de la clase y la omisión
implica que se está usando el parámetro.

8.5. Programas resueltos en Java usando NetBeans


1) Se desea crear una clase llamada Camisa que haga uso de un
método constructor y la referencia this y pueda ser usado en otra
clase para realizar un pedido, el mismo que puede ser pagado al
contado o al crédito. Al contado hay un descuento del 10% y al
crédito un incremento del 5% del precio total pagadero en 2
cuotas.

148 | MARTÍN GUSTAVO SALCEDO QUIÑONES


MÉTODOS CONSTRUCTORES Y LA REFERENCIA THIS

En la clase PedidoCamisas se programa lo siguiente.

TÉCNICAS DE PROGRAMACIÓN | 149


MÉTODOS CONSTRUCTORES Y LA REFERENCIA THIS

Interpretación de la programación
La clase camisa tiene cuatro atributos referido a la descripción, talla,
stock y precio. El método constructor Camisa hace usa de referencia
this. Se crea los métodos set y get y se adiciona los métodos toString,
preciodescontado y precioaumntado para luego ser usado en la clase
PedidoCamisas. En esta última clase hace uso de la clase
LecturaDatos que se encuentra en el paquete Capítulo I. Sesión_06.
En el método main se ingresa los datos de una camisa y luego se
solicita la cantidad de pedido y la forma de pago para finalmente
mostrar al final el precio total del pedido y en caso la forma de pago es
al crédito se visualiza el monto de la cuota.
Ejecución del programa:

150 | MARTÍN GUSTAVO SALCEDO QUIÑONES


MÉTODOS CONSTRUCTORES Y LA REFERENCIA THIS

2) Crea una aplicación que permita calcular el área y el perimetro


de una cuadrado, rectángulo y del triángulo. Hacer uso de
métodos constructores sobrecargados y de la referencia this.

TÉCNICAS DE PROGRAMACIÓN | 151


MÉTODOS CONSTRUCTORES Y LA REFERENCIA THIS

En la clase UsandoFigura se programa lo siguiente:

152 | MARTÍN GUSTAVO SALCEDO QUIÑONES


MÉTODOS CONSTRUCTORES Y LA REFERENCIA THIS

Interpretación de la programación
En la clase Figura se crea tres métodos constructores, el primero sólo
usa uno de los tres atributos y está diseñado para la figura del cuadrado.
El segundo método constructor usa dos atributos y está creado para la
figura del rectángulo. El tercer método constructor usa tres atributos y
está diseñado para la figura del triángulo. Se crea tres métodos para el
cálculo del área y tres métodos para el cálculo de los perímetros. Tam-
bién está los métodos set y get de cada uno de los atributos.
En la clase UsandoFigura se importa nuevamente la clase LecturaDatos
que se encuentra en el paquete Capítulo_I.Sesión_06. En el método
main se procede a solicitar la figura geométrica a usar para los cálculos
y según la figura seleccionada se solicita el ingreso de los valores de los
lados. Finalmente se muestra el cálculo del área y del perímetro de la
figura. En el caso del triángulo se hace una validación en caso que los
datos ingresados de los tres lados no lleguen a formar un triángulo.
Ejecución del programa:

TÉCNICAS DE PROGRAMACIÓN | 153


MÉTODOS CONSTRUCTORES Y LA REFERENCIA THIS

154 | MARTÍN GUSTAVO SALCEDO QUIÑONES


9. HERENCIA DE CLASES

9.1. ¿Qué es herencia de clases?


La herencia de clases es la extensión de una clase, es decir, una
nueva clase hereda los atributos y métodos de una clase superior
denominada comúnmente superclase. La nueva clase creada se le
denomina subclase. El lenguaje de programación no reconoce la
herencia múltiple, es decir, no es posible que una clase herede de
varias clases, lo que si permite es el uso de interfaces para lograr una
herencia múltiple. Una subclase, llamada también clase hija,
generalmente tiene sus propios atributos y métodos, por lo que una
subclase maneja más atributos y métodos de una superclase. Una
subclase representa un grupo pequeño de objetos dado que los
atributos y métodos son más específicos. Cuando se crea un objeto de
la subclase se tiene los atributos y métodos de la superclase más los
propios atributos y métodos de la subclase.
La herencia es la base implica la reutilización del código.
Cuando una clase se extiende de una clase padre, esta hereda todos
los miembros y métodos de su antecesor. también es posible redefinir
(override) los miembros para adaptarlos a la nueva clase o
ampliarlos. en general, todas las subclases no solo adoptan las
variables y métodos de las superclases, sino que los modifican. (3)
Por ejemplo:
class Empleado
{

TÉCNICAS DE PROGRAMACIÓN | 155


HERENCIA DE CLASES

 protected String apellidos;


 protected String nombres;

 public Empleado(String ape, String nom)


{
 apellidos=ape;
 nombres=nom;
}


}

class Administrativo extends Empleado


{
 private double sueldobasico;

 public Administrativo(String ape, String nom, double sb)
{
  super(ape,nom);
  sueldobasico=sb;
 }
}

En el programa anterior se tiene la clase Empleado que tiene dos


atributos: apellidos y nombres y el método constructor define los
valores iniciales de los atributos según los parámetros ape y nom.
Esta clase puede tener otros métodos más. En la clase Administrativo
es la subclase siendo la clase Empleado la superclase. En Java se usa
la palabra reservada extends para indicar el uso de herencia. En esta
clase Administrativo se indica un solo atributo denominado

156 | MARTÍN GUSTAVO SALCEDO QUIÑONES


HERENCIA DE CLASES

sueldobasico y en el método constructor el número de parámetros


considera tres parámetros para dar valores a los dos atributos
heredados de la clase Empleado, es por ello que en el método
constructor de la clase Administrativo se hace en la primera
instrucción del método super para invocar la ejecución del método
constructor de la superclase por lo que es necesario indicar los
parámetros ape y nom.
Con las clases se puede crear una jerarquía, una clase
Universitario puede heredar de la clase Estudiante y este a su vez
heredar de la clase Persona. La clase Universitario hereda los
atributos de la clase Estudiante y de las que heredó de Persona. En la
medida que se vayan creando más subclases en una jerarquía estas se
vuelven cada vez más especializadas.

9.2. Modicador de acceso protected


Los miembros de una clase que hacen uso del modificador de
acceso protected están accesibles para los métodos de la superclase,
para los métodos de la subclase y para los métodos de aquellas clases
que pertenezcan al mismo paquete.

9.3. Objetos de la superclase y objetos de subclase


Se puede crear objetos de la superclase y objetos de la subclase.
Los objetos de la subclase tienen definitivamente las características
de la superclase, así por ejemplo si se crea una clase llamado
Cuadrado que tiene un solo atributo que vendría ser lado, se puede
construir un método para definir el área del cuadrado. Luego, se
puede crear una clase llamada PrismaCuadrangular que herede de la
clase Cuadrado y haciendo uso del método de área del cuadrado se
puede construir el área del prisma cuadrangular.

import java.io.*;
class Cuadrado
{
 protected double lado;

TÉCNICAS DE PROGRAMACIÓN | 157


HERENCIA DE CLASES

 public Cuadrado(double lado)


{
  this.lado=lado;
 }
 public void setLado(double la)
 {
  lado=la;
 }
 public double getLado()
 {
  return lado;
 }
 public double área()
 {
  return lado*lado;
 }
}

class PrismaCuadrangular extends Cuadrado


{
 protected double altura;

 public PrismaCuadrangular(double la, double h)


 {
  super(la, h);
  altura=h;
 }
 public void setAltura(double h)
 {
  altura=h;

158 | MARTÍN GUSTAVO SALCEDO QUIÑONES


HERENCIA DE CLASES

 }
 public double getAltura()
 {
  return altura;
 }
 public double areaPrisma()
 {
  return super.área()*2+altura*lado*4;
 }
}

public class UsandoPrismaCuadrangular


{
 public static main(String args[])throws IOException
 {
  Cuadrado C=new Cuadrado(5);
  System.out.println(“El área del cuadrado es “+C.area());
  PrismaCuadrangular P=new PrismaRectangular(5, 7);
  System.out.println(“El área de la base del prisma es
“+P.area());
  System.out.println(“El área total del prisma es
“+P.areaPrisma());
 }
}

En el método main de la clase UsandoPrismaCuadrangular se


define un objeto C creado a partir de la clase Cuadrado dando como
valor 5 por defecto para el atributo lado. Se imprime el área del
cuadrado y luego se crea el objeto P creado a partir de la clase
PrismaRectangular dando como valores por defecto 5 y 7 para los
atributos lado y altura y posteriormente se imprime el área de la base
del prisma y el área total del mismo.

TÉCNICAS DE PROGRAMACIÓN | 159


HERENCIA DE CLASES

9.4. Programas resueltos en Java usando NetBeans


1) Crea una clase Punto con los atributos x, y de tipo de dato
numérico real. A partir de la clase Punto se debe crear la clase
Circulo con el atributo radio y en donde se debe tener el método
de área. Elabora un programa que permita hacer uso de las clases
Punto y Circulo para calcular el área de un círculo específico.
Tener en cuenta el siguiente diagrama de clases:

Punto
x: double
y: double
Punto()
setX() : void
getX() : double

toString(): String

Circulo
radio: double
Circulo()
setRadio() : void
getRadio() : double
área() : double

160 | MARTÍN GUSTAVO SALCEDO QUIÑONES


HERENCIA DE CLASES

TÉCNICAS DE PROGRAMACIÓN | 161


HERENCIA DE CLASES

Interpretación de la programación
La clase Circulo hereda de la clase Punto que en código de Java se
escribe
 Class Círculo extends Punto
La palabra reservada extends significa extendido que es lo mismo
heredado, es decir, la clase Circulo hereda de la clase Punto todos sus
atributos y métodos, siempre y cuando ninguno de los miembros de la
clase Punto tenga nivel de acceso tipo private. Los métodos
constructores de la clase Circulo puede invocar a los métodos
constructores de la clase Punto. Para poder invocar al constructor de
la clase Punto se hace uso el método o referencia super. La subclase
puede nuevamente implementar un método heredado de la
superclase, es decir, se puede sobrescribir lo realizado y se necesita
tomar algo programado en la superclase se le invoca con la referencia
super. En el método toString de la clase Circulo se muestra en el
retorno super.toString() lo que significa que invoca la ejecución del
método toString de la clase Punto.

162 | MARTÍN GUSTAVO SALCEDO QUIÑONES


HERENCIA DE CLASES

Ejecución del programa:

2) Crea una clase vehículo con los atributos placa, marca, nroejes y
tipocombustible. A partir de la clase Vehiculo se crea la clase Bus
con los atributos propios nroasientos y tiposervicio y la clase
Carga con el único atributo propio denominado capacidad.
Elabora un programa que permita el ingreso de datos de un bus o
de un vehículo de carga. Tener en cuenta el siguiente diagrama
de clases:

Vehículo
placa : String
marca : String
nroejes : int
tipocombustible : String
Vehiculo ()

Bus Carga
nroasientos : int capacidad : int
tiposervicio : String
Bus() Carga()
… …

TÉCNICAS DE PROGRAMACIÓN | 163


HERENCIA DE CLASES

164 | MARTÍN GUSTAVO SALCEDO QUIÑONES


HERENCIA DE CLASES

TÉCNICAS DE PROGRAMACIÓN | 165


HERENCIA DE CLASES

Interpretación de la programación
En el programa se aprecia que la clase Bus y la clase Carga hereda de
la clase Vehículo. Esta vez se establece en las subclases y en la
superclase el uso del método toString. En este método se hace uso del
método toString de la clase Vehículo logrando obtener una cadena de
texto con los datos de los atributos obtenidos de la superclase y de la
subclase. En la clase HerenciaBusCarga en el método main se solicita
el ingreso de los datos ya sea del vehículo Bus o del vehículo Carga,
se instancia un objeto de la clase Bus o de clase Carga y se muestra
luego los datos ingresados.

166 | MARTÍN GUSTAVO SALCEDO QUIÑONES


HERENCIA DE CLASES

Ejecución del programa:

3) Crea una aplicación que permita realizar la planilla de trabajado-


res administrativos o trabajadores docentes. Los administrativos
tienen un sueldo básico, pueden tener minutos de tardanza (se
descuenta 0.50 soles por minuto) y días de falta (se aplica un
descuento igual a los días de falta por sueldo básico entre 30).
Aplica herencia de clases, arreglo de objetos para ingresar datos
de varios trabajadores y lista los datos indicando el sueldo neto
de cada trabajador. Tener en cuenta el siguiente diagrama de
clases:
Empleado
codempleado : int
apellidos : String
nombres : String
teléfono : String
Empleado ()

Administrativo Docente
sueldobasico : double horastrabajadas : int
minutostardanza : int pagoxhora : double
diasfalta : int
Administrativo() Docente()
… …
sueldoNeto() : double sueldoNeto() : double

TÉCNICAS DE PROGRAMACIÓN | 167


HERENCIA DE CLASES

168 | MARTÍN GUSTAVO SALCEDO QUIÑONES


HERENCIA DE CLASES

TÉCNICAS DE PROGRAMACIÓN | 169


HERENCIA DE CLASES

170 | MARTÍN GUSTAVO SALCEDO QUIÑONES


HERENCIA DE CLASES

TÉCNICAS DE PROGRAMACIÓN | 171


HERENCIA DE CLASES

Interpretación de la programación
En el programa se aprecia que las clases Administrativo y Docente
hereda los atributos y métodos de la clase Empleado. El método
sueldoNeto tienen implementación diferente por la naturaleza de
cálculo de los sueldos de los administrativos y de los docentes. En la
clase HerenciaAdministrativoDocente se establece métodos para
leer datos para los arreglos de objetos definidos con las clases
Administrativo y Docente y los métodos para listar los datos
ingresados mostrando los sueldos netos de todos los trabajadores.

Ejecución del programa:

172 | MARTÍN GUSTAVO SALCEDO QUIÑONES


10. CLASES ABSTRACTAS

10.1. ¿Qué son clases abstractas?


Java proporciona un tipo especial de clase, denominada clase
abstracta, que es una forma de ayudar a la jerarquización de clases
basadas en métodos comunes. Una clase abstracta permite colocar
los nombres de los métodos comunes en una sola clase (sin tener que
escribir el código que los implemente). Después, al crear nuevas
clases, éstas pueden heredar de una clase abstracta que contiene todos
los métodos definidos en la clase abstracta. Un método abstracto
define qué debe hacerse, pero no indica cómo hacerlo. Para definir un
método abstracto se debe anteponer la palabra abstract al momento
de la definición, y colocar el carácter ';' en vez de la apertura y cierre
de llaves. (4)

Por ejemplo:

En el diagrama de clases siguiente la clase Empleado es una clase


abstracta porque tiene un método abstracto llamado sueldoNeto(), es
decir, que el método sueldoNeto() en la clase abstrcta Empleado no
está implementado (no está programado). En el diagrama se
distingue la clase abstracta y el método abstracto escrito con letra
cursiva.

TÉCNICAS DE PROGRAMACIÓN | 173


CLASES ABSTRACTAS

Empleado
codempleado : int
apellidos : String
nombres : String
Empleado ()

sueldoNeto():double

Administrativo Docente
sueldobasico : double horastrabajadas : int
minutostardanza : int pagoxhora : double
diasfalta : int
Administrativo() Docente()
… …
sueldoNeto() : double sueldoNeto() : double

10.2. Características de las clases abstractas


Los métodos abstractos tienen una estructura que muestra el
nombre del método seguido de una lista de parámetros. No contiene
el código o la programación que implementa el método. Estos méto-
dos se implementan en las clases derivadas. Las características de las
clases abstractas son:
· Las clases que contienen métodos abstractos se conocen
como clases abstractas. Basta que exista un método abstracto
para que la clase sea una clase abstracta.
· Las clases abstractas pueden contener una mezcla de méto-
dos abstractos y no abstractos (métodos concretos). Los méto-
dos concretos contienen la instrumentación del método.

174 | MARTÍN GUSTAVO SALCEDO QUIÑONES


CLASES ABSTRACTAS

· Un aplicación o programa no puede crear instancias de una


clase abstracta de forma directa, pero se puede crear instan-
cias de las subclases cuya clase superclase es una clase abs-
tracta.
· Cualquier subclase que herede de una clase abstracta debe
proceder a la implementación de todos los métodos abstrac-
tos. Basta que un método abstracto no se implementado en la
subclase, esta quedará como clase abstracta.

En base al diagrama de clases anterior la implementación de la


clase Empleado sería:

abstract class Empleado


{
protected int codempleado;
protected String apellido;
protected String nombre;
protected String telefono;

public Empleado(int codempleado, String apellido, String


nombre,String telefono)
{
  this.codempleado = codempleado;
this.apellido = apellido;
this.nombre = nombre;
this.telefono = telefono;
}
public void setCodempleado(int codempleado)
{
this.codempleado = codempleado;
}
 public int getCodempleado()

TÉCNICAS DE PROGRAMACIÓN | 175


CLASES ABSTRACTAS

{
  return codempleado;
 }
 ...
 public abstract double sueldoNeto();
}

El método sueldoNeto() es un método abstracto y por lo tanto no


esta implementado. Este método hace que la clase Empleado sea una
clase abstracta. A continuación, se hace uso de herencias de clase
donde la clase abstracta Empleado es la superclase.

class Administrativo extends Empleado


{
private double sueldobasico;
private int minutostardanza;
private int diasfalta;

public Administrativo(double sueldobasico, int


minutostardanza, int diasfalta, int codempleado,
String apellido, String nombre, String telefono) {
super(codempleado, apellido, nombre, telefono);
this.sueldobasico = sueldobasico;
this.minutostardanza = minutostardanza;
this.diasfalta = diasfalta;
 }
public void setSueldobasico(double sueldobasico) {
this.sueldobasico = sueldobasico;
 }
public void setMinutostardanza(int minutostardanza) {
this.minutostardanza = minutostardanza;
 }

176 | MARTÍN GUSTAVO SALCEDO QUIÑONES


CLASES ABSTRACTAS

 public void setDiasfalta(int diasfalta) {


  this.diasfalta = diasfalta;
 }
public double getSueldobasico() {
  return sueldobasico;
 }
public int getMinutostardanza() {
  return minutostardanza;
 }
 public int getDiasfalta() {
  return diasfalta;
 }
 public double sueldoNeto()
 {
  return sueldobasico - 0.5*minutostardanza -
diasfalta*sueldobasico/30;
 }
}
La clase Administrativo hereda de la clase abstracta Empleado,
donde el método sueldoNeto() es implementado con lo cual la clase
Administrativa se pude usar para crear o instanciar objetos. El mismo
modo se trabaja con la clase Docente donde el método sueldoNeto()
debe ser implementado.

10.3. Programas resueltos en Java usando NetBeans

1) Se tiene el siguiente diagrama de clases.


Construye una aplicación que permita calcular el perímetro y el
área del rectángulo y del círculo.

TÉCNICAS DE PROGRAMACIÓN | 177


CLASES ABSTRACTAS

Figura_Geometrica
x : int
y : String
Figura_Geometrica()

perimetro():double
area(): double

Circulo Rectangulo
radio : double lado1 : double
lado2 : double
Circulo() Rectangulo()
… …
perimetro() : double perimetro() : double
area(): double area() : double

178 | MARTÍN GUSTAVO SALCEDO QUIÑONES


CLASES ABSTRACTAS

TÉCNICAS DE PROGRAMACIÓN | 179


CLASES ABSTRACTAS

Interpretación de la programación
En el programa se tiene la clase abstracta FuguraGeometrica con dos
métodos abstractos llamados perímetro y área. La clase Circulo y
Rectángulo heredan de la clase abstracta FiguraGeometrica y se
procede a implementar los métodos abstractos de acuerdo a los
cálculos de las figuras geométricas.
En la clase UsoFigurasGeomtricas se solicita el ingreso del tipo de
figura geométrica (Circulo o Rectáingulo) y según lo seleccionado se
solicita los datos para proceder a crear los objetos y mostrar los
resultados invocando a los métodos implementados en la clase
Circulo y Rectángulo.
Ejecución del programa:

2) Elabora una aplicación que permita el cálculo del área y


volumen de una esfera y el área de la base, el área lateral, el área
total y el volumen de un cilindro aplicando clase abstracta en su
implementación.

180 | MARTÍN GUSTAVO SALCEDO QUIÑONES


CLASES ABSTRACTAS

FiguraCirculo
radio : double
FiguraCirculo()

area():double
volumen(): double

Esfera Cilindro
altura : double
Esfera() Cilindro()
… …
area() : double areaBase() : double
volumen(): double areaLateral() : double
area() : double
volumen() : double

TÉCNICAS DE PROGRAMACIÓN | 181


CLASES ABSTRACTAS

182 | MARTÍN GUSTAVO SALCEDO QUIÑONES


CLASES ABSTRACTAS

Interpretación de la programación
En el programa se tiene la clase abstracta FiguraCirculo con los dos
métodos abstractos área y volumen. En la clase abstracta
FiguraCirculo se define el atributo radio. En la subclase Esfera se
implementa los métodos área y volumen y no se define ningún
atributo, por lo tanto, el método constructor de la clase Esfera invoca
al método constructor de la clase abstracta FIguraCirculo. En la
subclase Cilindro se implementa los métodos área y volumen, pero
antes se encuentra implementado el método areaBase y areaLateral,
eta programación define las instrucciones de los métodos área y
volumen del cilindro. En la clase UsoEsferaCilindro se solicita
primero el tipo de figura geométrica (esfera o cilindro) y se procede a
solicitar los datos como el radio y en el caso del cilindro se pide
adicionalmente el valor de la altura. Se instancia el objeto respectivo
y se muestra los reultados.

TÉCNICAS DE PROGRAMACIÓN | 183


CLASES ABSTRACTAS

Ejecución de la programación:

184 | MARTÍN GUSTAVO SALCEDO QUIÑONES


11. INTERFACES Y HERENCIA
MÚLTIPLE

11.1. ¿Qué son interfaces?


Las clases abstractas para que sean como tal basta que uno de los
métodos de la clase sea abstracto. En el lenguaje de programación de
Java una interface es aquella en que todos sus métodos son
abstractos, es decir, se podría decir que es una clase abstracta pura.
Los métodos de la interface se establece los nombres, los argumentos
o parámetros y el tipo de retorno dejando para después la
implementación de dichos métodos. Las interfaces también pueden
tener atributos pero deben ser declarados con static o final. Por lo
tanto, una interface establece un protocolo o modelo a seguir en la
estructura de una jerarquía de clases.

11.2. Declaración de una interface en Java


En Java una interface se utiliza la palabra reservada interface en
lugar de colocar la expresión class. Se puede declarar con el
modificador de acceso public o sin él, donde todos sus métodos
siempre deben ser public. Una vez declarado o definido la interface,
para ser utilizado en una clase se debe usar la palabra reservada
implements, esta clase implementada a partir de la interface debe ser
implementado los métodos provenientes de la interface. Una clase
puede hacer uso de uno o varios interfaces en el momento de la
implementación si existe la necesidad de hacerlo.

TÉCNICAS DE PROGRAMACIÓN | 185


INTERFACES Y HERENCIA MÚLTIPLE

La sintaxis de una interface se define:


interface nombre_interface
{
tipo_retorno nombre_metodo (argumentos o parámetros) ;
...
}

Por ejemplo:

interface GeneraNumeros
{
int siguienteNumero();
void comienza();
void comenzarEn(int n);
}

class NumerosPares implements GeneraNumeros


{
int dato;

public NumerosPares()
 {
  dato=0;
 }

 public int siguienteNumero()


 {
  dato=dato+2;
  return dato;
 }

186 | MARTÍN GUSTAVO SALCEDO QUIÑONES


INTERFACES Y HERENCIA MÚLTIPLE

 public void comienza()


 {
  dato=0;
 }

 public void comenzarEn(int n)


 {
  dato=n;
  if(n%2==1)
 dato--;
 }
}

La interface GeneraNumeros establece tres métodos siguienteNumero,


comienza y comenzarEn. Sólo el primer método retornará el número
que genere cuando este sea implementado en la clase que use esta
interface. El método comenzarEn tiene un parámetro para recibir el
numero a tomar en cuenta para realizar la generación de los números.
La clase NumerosPares implementa cada uno de los métodos
colocando el nivel de acceso public. En el método constructor se
inicializa en 0 al atributo dato, en el método siguienteNumero se genera
el siguiente número sumando más 2 y en el método comenzarEn es para
definir el valor inicial del atributo dato, en caso este valor es impar se
disminuye en 1 para poder luego generar los pares. A continuación, la
clase NumerosImpares que tiene una programación similar a la clase
NumerosPares.

class NumerosImpares implements GeneraNumeros


{
int dato;

TÉCNICAS DE PROGRAMACIÓN | 187


INTERFACES Y HERENCIA MÚLTIPLE

public NumerosImpares()
{
dato=-1;
}

public int siguienteNumero()


{
dato=dato+2;
return dato;
}

public void comienza()


{
dato=-1;
}

public void comenzarEn(int n)


{
dato=n;
if(n%2==0)
dato--;
}
}

Si se desea implementar el método main para hacer uso de las


clases mencionadas anteriormente y creadas a partir de la interface
GeneraNumeros puede ser de la siguiente manera:

188 | MARTÍN GUSTAVO SALCEDO QUIÑONES


INTERFACES Y HERENCIA MÚLTIPLE

public class Generacion_Pares_Impares {

public static void main(String args[])throws IOException


{
BufferedReader leer = new BufferedReader(new
InputStreamReader(System.in));
int n, tipo, i, vi;
System.out.print("¿Generación de pares o impares? (1:Pares,
2:Impares): ");
tipo=Integer.parseInt(leer.readLine());
if(tipo==1)
{
System.out.print("Indique cuanto numeros pares desea
generar desde cero: ");
n=Integer.parseInt(leer.readLine());
NumerosPares NP=new NumerosPares();
System.out.println("Los primeros "+n+" numeros pares
son:");
for(i=1;i<=n;i++)
{
System.out.print(NP.siguienteNumero()+" ");
}
System.out.println("");
System.out.print("Indique despues de que numero desea se
genere los pares: ");
vi=Integer.parseInt(leer.readLine());
System.out.print("Indique cuanto numeros pares desea
generar desde "+vi+": ");
n=Integer.parseInt(leer.readLine());
NP.comenzarEn(vi);
System.out.println("Los "+n+" numeros pares generados

TÉCNICAS DE PROGRAMACIÓN | 189


INTERFACES Y HERENCIA MÚLTIPLE

despues de "+vi+" son:");


for(i=1;i<=n;i++)
{
System.out.print(NP.siguienteNumero()+" ");
}
System.out.println("");
}
if(tipo==2)
{
System.out.print("Indique cuanto numeros impares desea
generar desde cero: ");
n=Integer.parseInt(leer.readLine());
NumerosImpares NI=new NumerosImpares();
System.out.println("Los primeros "+n+" numeros impares
son:");
for(i=1;i<=n;i++)
{
System.out.print(NI.siguienteNumero()+" ");
}
System.out.println("");
System.out.print("Indique despues de que numero desea se
genere los impares: ");
vi=Integer.parseInt(leer.readLine());
System.out.print("Indique cuanto numeros impares desea
generar desde "+vi+": ");
n=Integer.parseInt(leer.readLine());
NI.comenzarEn(vi);
System.out.println("Los "+n+" numeros impares generados
despues de "+vi+" son:");
for(i=1;i<=n;i++)
{

190 | MARTÍN GUSTAVO SALCEDO QUIÑONES


INTERFACES Y HERENCIA MÚLTIPLE

System.out.print(NI.siguienteNumero()+" ");
}
System.out.println("");
}
}
}

11.3. Referencias a interfaces


Se puede crear referencias a interfaces, pero lo que no puede
crear son instancias de las interfaces. Una referencia a una interface
puede recibir lo definido de un objeto, este objeto debe ser implemen-
tado de la interface.

Por ejemplo:

int n;
GeneraNumeros numero=new NumeroPares();
n=numero.siguienteNumero();

GeneraNumeros números=GeneraNumeros(); //no se puede


instanciar (Error)

11.4. Uso de constantes en interfaces


Las interfaces pueden tener atributos o miembros datos que
todos sean static o final, pues las interfaces al no poder ser
instanciadas es una buena forma de definir grupos de constantes para
luego ser utilizados en las aplicaciones.

Por ejemplo:

public interface Meses {


int ENERO = 1 , FEBRERO = 2, MARZO = 3, ABRIL = 4,

TÉCNICAS DE PROGRAMACIÓN | 191


INTERFACES Y HERENCIA MÚLTIPLE

MAYO = 5, JUNIO = 6, JULIO = 7, AGOSTO = 8,


SETIEMBRE = 9, OCTUBRE = 10, NOVIEMBRE = 11,
DICIEMBRE = 12;

String NOMBRES_MESES []= { " " , "Enero" , "Febrero" ,


"Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto",
"Setiembre", "Octubre", "Noviembre", "Diciembre" };

}

Al momento de usarlo en una aplicación se puede escribir:


System.out.println(“Mes de
“+Meses.NOMBRES_MESES[NOVIEMBRE]);

11.5. Herencia múltiple


Una clase sólo puede heredar de una clase, pero puede hacer uso
en su implementación a partir de uno o varias interfaces, a esto es lo
que se denomina herencia múltiple. Hay aplicaciones que son útiles
la herencia a partir de una clase y de interfaces permitiendo dar
soluciones a ciertos requerimientos de los usuarios.

11.6. Programas resueltos en Java usando NetBeans

1) Elabora una aplicación usando interface para calcular el área de


y el perímetro del cuadrado, del rectángulo y del triángulo.

Para dar solución a esta aplicación se tiene el siguiente diagrama


de clases donde Figura es la interfaz y los métodos no
implementados son área y perímetro.

192 | MARTÍN GUSTAVO SALCEDO QUIÑONES


INTERFACES Y HERENCIA MÚLTIPLE

Figura

area() : double
perimetro() : double

Cuadrado Rectangulo Triangulo


lado : double lado1 : double lado1 : double
lado2 : double lado2 : double
area() : double area() : double area() : double
perímetro(): double perímetro: double perímetro : double

La programación en Java es la siguiente:

TÉCNICAS DE PROGRAMACIÓN | 193


INTERFACES Y HERENCIA MÚLTIPLE

194 | MARTÍN GUSTAVO SALCEDO QUIÑONES


INTERFACES Y HERENCIA MÚLTIPLE

TÉCNICAS DE PROGRAMACIÓN | 195


INTERFACES Y HERENCIA MÚLTIPLE

Interpretación de la programación
La interface Figura tiene dos métodos no implementados llamados
area y perímetro. La clase Cuadrado se implementa de Figura,
establece un atributo llamado lado, define los métodos constructores,
getter y setter y se implementa los métodos área y perímetro que
fueron declarados en la interface Figura. De la misma manera se
trabaja con la clase Rectangulo y Triangulo. En el método main se
solicita elegir la figura geométrica a calcular el área y el perímetro,
luego se ingresa los datos para los atributos, se instancia el objeto
respectivo (C para cuadrado, R para rectángulo o T para triangulo).
Finalmente se imprime los resultados invocando a los métodos área y
perímetro a partir del objeto instanciado.
Ejecución de la programación:

196 | MARTÍN GUSTAVO SALCEDO QUIÑONES


INTERFACES Y HERENCIA MÚLTIPLE

2) Elabora una aplicación que permita determinar los estados de un


material bibliográfico que son: disponible, prestado y en repara-
ción a través del uso de una interface. Crear las clases a partir del
siguiente diagrama.

MaterialBibliografico Prestamo

codigo : String
titulo :String
aniopublicacion : int
estado : int

MaterialBibliografico() prestado()
… disponible()
enReparacion()

Libro Revista

editorial nropublicacion: int

prestado() prestado()
disponible() disponible()
enReparacion() enReparacion()

La programación en Java es la siguiente:

TÉCNICAS DE PROGRAMACIÓN | 197


INTERFACES Y HERENCIA MÚLTIPLE

198 | MARTÍN GUSTAVO SALCEDO QUIÑONES


INTERFACES Y HERENCIA MÚLTIPLE

TÉCNICAS DE PROGRAMACIÓN | 199


INTERFACES Y HERENCIA MÚLTIPLE

Interpretación de la programación
En esta aplicación se está usando el concepto de herencia múltiple. Se
crea una superclase llamada MaterialBibliografico y una interface
Préstamo que sirven para aplicar lo que se ha definido como herencia
múltiple. La clase revista y la clase Libro hereda de la clase
MaterialBibliográfico y se implementa de la interface Préstamo. Los
métodos denominados prestado, disponible y enReparación se
implementa en las subclases Libro y Revista. En el método main se
hace uso de las subclases instanciado el objeto respectivo, luego de
solicitar el ingreso del tipo de material bibliográfico como la
indicación de prestar o devolver dicho material.

200 | MARTÍN GUSTAVO SALCEDO QUIÑONES


INTERFACES Y HERENCIA MÚLTIPLE

Ejecución de la programación:

TÉCNICAS DE PROGRAMACIÓN | 201


12. POLIMORFISMO

12.1. ¿Qué es polimorsmo?


El polimorfismo es la capacidad que tienen los objetos en usar
valores y comportamientos de diferentes tipos logrado ejecutar
operaciones definidas en otras clases. Se pueden implementar
programas que procesen o ejecuten objetos de aquellas clases creadas a
partir de una jerarquía. Cuando las clases pertenecen a una jerarquía
entonces se proceder a ejecutar lo definido en sus valores y operaciones
(métodos) en la misma estructura de la clase. Por ejemplo, se tiene la
clase abstracta Empleado que tiene el método abstracto ingresos. A
continuación, se tiene la programación de la clase abstracta Empleado

import java.io.*;

abstract class Empleado


{
protected String apellidos;
protected String nombres;

public Empleado(String ape, String nom)


{
  apellidos=ape;
  nombres=nom;
}

TÉCNICAS DE PROGRAMACIÓN | 203


POLIMORFISMO

public void setApellidos(String ape)


 {
  apellidos=ape;
 }

 public void setNombres(String nom)


 {
  nombres = nom;
 }

 public String getApellidos()


 {
  return apellidos;
 }

 public String getNombres()


 {
  return nombres;
 }

 abstract double ingresos();


}

A partir de la clase abstracta Empleado se aplica herencia para crear


las clases Gerente, EmpleadoGanaComision, EmpleadoXTarea y
EmpleadoPorHora.

class Gerente extends Empleado


{
 public double salario;

 public Gerente(String ape, String nom, double s)


 {
  super(ape,nom);
  salario=s;

204 | MARTÍN GUSTAVO SALCEDO QUIÑONES


POLIMORFISMO

 }

 public void setSalario(double s)


 {
  salario=s;
 }

 public double getSalario()


 {
  return salario;
 }

 public double ingresos()


 {
  return salario;
 }

 public String toString()


 {
  return "El gerente se llama "+nombres+"
"+apellidos;
 }
}

class EmpleadoGanaComision extends Empleado


{
 private double salarioBasico;
 private double comisionXProducto;
 private int cantidadProductos;

 public EmpleadoGanaComision(String ape, String nom,


double sb, double comision, int cantpro)
 {
  super(ape,nom);
  salarioBasico=sb;

TÉCNICAS DE PROGRAMACIÓN | 205


POLIMORFISMO

  comisionXProducto=comision;
  cantidadProductos=cantpro;
 }

 public void setSalarioBasico(double sb)


 {
  salarioBasico=sb;
 }

 public void setComisionXProducto(double comision)


 {
  comisionXProducto=comision;
 }

 public void setCantidadProductos(int cantpro)


 {
  cantidadProductos=cantpro;
 }

 public double getSalarioBasico()


 {
  return salarioBasico;
 }

 public double getComisionXProducto()


 {
  return comisionXProducto;
 }

 public int getCantidad()


 {
  return cantidadProductos;
 }

 public double ingresos()

206 | MARTÍN GUSTAVO SALCEDO QUIÑONES


POLIMORFISMO

 {
  return salarioBasico+
comisionXProducto*cantidadProductos;
 }

 public String toString()


 {
  return "Empleado que gana por Comision se llama
"+nombres+" "+apellidos;
 }
}

class EmpleadoXTarea extends Empleado{


 private double salarioXTareaCumplida;
 private int cantidadTarea;

 public EmpleadoXTarea(String ape, String nom, double st,


int cant)
 {
  super(ape,nom);
  salarioXTareaCumplida=st;
  cantidadTarea=cant;
 }

 public void setSalarioXTareaCumplida(double st)


 {
  salarioXTareaCumplida = st;
 }

 public void setCantidadTarea(int cant)


 {
  cantidadTarea=cant;
 }

 public double getSalarioXTareaCumplida()


 {

TÉCNICAS DE PROGRAMACIÓN | 207


POLIMORFISMO

  return salarioXTareaCumplida;
 }

 public double getCantidadTarea()


 {
  return cantidadTarea;
 }

 public double ingresos()


 {
  return salarioXTareaCumplida*cantidadTarea;
 }

 public String toString()


 {
  return "Empleado por cumplimiento de Tareas se
llama "+nombres+" "+apellidos;
 }
}

class EmpleadoPorHora extends Empleado


{
 protected double pagoPorHora;
 protected double horasTrabajadas;

 public EmpleadoPorHora(String ape, String nom, double


ph, double ht)
 {
  super(ape,nom);
  pagoPorHora= ph;
  horasTrabajadas=ht;
 }

 public void setPagoPorHora(double sh)


 {
  pagoPorHora=sh;

208 | MARTÍN GUSTAVO SALCEDO QUIÑONES


POLIMORFISMO

 }

 public void setHorasTrabajadas(double ht)


 {
  horasTrabajadas=ht;
 }

 public double getPagoPorHora()


 {
  return pagoPorHora;
 }

 public double getHorasTrabajadas()


 {
  return horasTrabajadas;
 }

 public double ingresos()


 {
  return pagoPorHora*horasTrabajadas;
 }

 public String toString()


 {
  return "Empleado que gana por horas se llama
"+apellidos+" "+nombres;
 }
}

Con las subclases creadas a partir de la clase abstracta Empleado se


procede a crear la clase UsandoEmpleado que tiene al método
estático main

public class UsandoEmpleado{


 public static void imprimir(String m)
 {

TÉCNICAS DE PROGRAMACIÓN | 209


POLIMORFISMO

  System.out.print(m);
 }

 public static void main(String args[])


 {
  BufferedReader leer=new BufferedReader(new
InputStreamReader (System.in));
String ape,nom;
int c, ch;
  double salario, sb, comision, ph, st;
  Empleado E;
  imprimir("==========================\n");
  imprimir(" DATOS DE EMPLEADO - GERENTE\n");
  imprimir("==========================\n");
imprimir("Ingrese el apellido: ");
ape=leer.readLine();
imprimir("Ingrese el nombre: ");
nom=leer.readLine();
imprimir("Ingrese el salario: ");
salario=Double.parseDouble(leer.readLine());
Gerente G = new Gerente(ape, nom, salario);
  imprimir("==========================\n");
  imprimir(" DATOS DE EMPLEADO QUE GANA POR
COMISION\n");
  imprimir("==========================\n");
  imprimir("Ingrese el apellido: ");
  ape=leer.readLine();
  imprimir("Ingrese el nombre: ");
  nom=leer.readLine();
  imprimir("Ingrese el salario básico: ");
  sb=Double.parseDouble(leer.readLine());
  imprimir("Ingrese la comisión por producto: ");
  comision=Double.parseDouble(leer.readLine());
  imprimir("Ingrese la cantidad de productos
vendidos: ");
  c=Integer.parseInt(leer.readLine());

210 | MARTÍN GUSTAVO SALCEDO QUIÑONES


POLIMORFISMO

  EmpleadoGanaComision C=new
EmpleadoGanaComision(ape,nom,sb,comision,c);
  imprimir("==========================\n");
imprimir(" DATOS DE EMPLEADO QUE GANA POR
TAREAS\n");
imprimir("==========================\n");
imprimir("Ingrese el apellido: ");
ape=leer.readLine();
imprimir("Ingrese el nombre: ");
  nom=leer.readLine();
  imprimir("Ingrese el salario por tarea cumplida: ");
  st=Double.parseDouble(leer.readLine());
  imprimir("Ingrese la cantidad de tareas realizadas: ");
  c=Integer.parseInt(leer.readLine());
  EmpleadoXTarea T=new
EmpleadoXTarea(ape,nom,st,c);
  imprimir("==========================\n");
  imprimir(" DATOS DE EMPLEADO QUE GANA POR
HORAS\n");
  imprimir("==========================\n");
  imprimir("Ingrese el apellido: ");
  ape=leer.readLine();
  imprimir("Ingrese el nombre: ");
  nom=leer.readLine();
  imprimir("Ingrese el pago por hora: ");
  ph=Double.parseDouble(leer.readLine());
  imprimir("Ingrese la cantidad de horas trabajadas: ");
  ch=Integer.parseInt(leer.readLine());
  EmpleadoPorHora H=new
EmpleadoPorHora(ape,nom,ph,ch);

  E = G;
  imprimir(E.toString() + " y percibe " + E.ingresos()+"\n");

  E = C;
  imprimir(E.toString() + " y percibe " + E.ingresos()+"\n");

TÉCNICAS DE PROGRAMACIÓN | 211


POLIMORFISMO

  E = T;
  imprimir(E.toString() + " y percibe " + E.ingresos()+"\n");

  E = H;
  imprimir(E.toString() + " y percibe " + E.ingresos()+"\n");
 }
}

En la línea de programación E = G; la referencia E declarada a


partir de la clase abstracta Empleado recibe al objeto G de la subclase
Gerente, aquí se presenta un comportamiento polimórfico. La
instrucción E.toString() invoca a la ejecución del método toString()
del objeto al que E hace referencia, es decir, se ejecuta el método
toString() de la clase Gerente. La instrucción E.ingresos() solicita la
ejecución del método ingresos del objeto al que E hace referencia y
por lo tanto ejecuta lo definido en la clase Gerente. Luego, en la
instrucción o línea de programación E = C; E hace referencia al
objeto C que fue creado a partir de la clase EmpleadoGanaComision
por lo que E puede hacer uso de los métodos ingresos y toString.

12.2. Tipos de polimorsmo


Existen varios tipos de polimorfismo tales como:
a) Polimorfismo de asignación, que consiste en que una variable
hace referencia a más de un tipo de clase, tal como el ejemplo
anterior que se trató de la clase abstracta Empleado y se creó las
subclases para luego en el método main se haga uso de
referencias.
b) Polimorfismo de sobrecarga, donde dos o más funciones tienen
el mismo nombre, pero la lita de argumentos es distinta.
c) Polimorfismo de inclusión, que consiste en redefinir un método
por completo en su implementación por lo que será distinto su
funcionamiento en la superclase como en la subclase.

212 | MARTÍN GUSTAVO SALCEDO QUIÑONES


POLIMORFISMO

12.3. Programas resueltos en Java usando NetBeans


1) Crea una aplicación que permita calcular el área y el volumen de
un cilindro y de una esfera aplicando sobreescritura de métodos,
clase abstracta, herencia y polimorfismo.

TÉCNICAS DE PROGRAMACIÓN | 213


POLIMORFISMO

214 | MARTÍN GUSTAVO SALCEDO QUIÑONES


POLIMORFISMO

TÉCNICAS DE PROGRAMACIÓN | 215


POLIMORFISMO

Interpretación de la programación
La clase abstracta FiguraGeo define 3 métodos: área, volumen y
obtenerNombre, este último es el método abstracto. A partir de la
clase abstracta FiguraGeo se crea por herencia las clases Punto,
Circulo, Cilindro y Esfera. Se establece una jerarquía de clases que se
aprecia cuando la clase Punto hereda de FiguraGeo, la clase Cilindro
hereda de Punto y la clase Cilindro hereda de la clase Circulo. Los
métodos de area y volumen se implementan en las subclases y se
implementa el método obtenerNombre. La clase Esfera hereda de la
clase Circulo. Luego, al momento de hacer uso de las clases antes
mencionadas en el método main se procede a solicitar las
coordenadas de un punto, luego el valor de un radio y la altura de un
cilindro. Se crea los objetos P, C, CI y E a partir de los datos
ingresados. El polimorfismo se aprecia desde el momento que se crea
una arreglo Figuras[] de tamaño 4 a partir de la clase abstracta
FiguraGeo y luego cada elemento del arreglo recibe los objetos P, C,
CI y E, haciendo que el arreglo haga referencias a cada uno de los
objetos antes mencionado. A través de una sentencia repetitiva for se
procede a mostrar información de cada figura usando los métodos
implementados dado que el arreglo hace referencia a cada objeto
teniendo un comportamiento polimórfico.
Ejecución de la programación:

216 | MARTÍN GUSTAVO SALCEDO QUIÑONES


POLIMORFISMO

2) Crea una aplicación que permita calcular el perímetro y el área


de polígonos como el cuadrado, rectángulo y triángulo
aplicando clase abstracta, herencia de clases y polimorfismo.

TÉCNICAS DE PROGRAMACIÓN | 217


POLIMORFISMO

218 | MARTÍN GUSTAVO SALCEDO QUIÑONES


POLIMORFISMO

TÉCNICAS DE PROGRAMACIÓN | 219


POLIMORFISMO

220 | MARTÍN GUSTAVO SALCEDO QUIÑONES


POLIMORFISMO

TÉCNICAS DE PROGRAMACIÓN | 221


POLIMORFISMO

Interpretación de la programación
La clase abstracta Polígono tiene 3 métodos abstractos:
obtenerNombre, perímetro y área. A partir de la clase Polígono se aplica
herencia para crear las subclases Cuadrado, Rectángulo y Triangulo
donde se implementa los métodos abstractos definidos en la clase
abstracta Polígono. La clase Usando Polígono se crea varios métodos
estáticos, uno de ellos es el método leerTipoPoligono donde se
implementa la selección de tipo de polígono y según el tipo se invoca a
métodos como leerCuadrado, leerRectángulo y leerTríangulo. En la
clase UsandoPoligono se crea un arreglo estático llamado polígonos a
partir de la clase Polígono y una variable de memoria entera estática
cuenta con valor inicial 0. El programa está elaborado para poder
ingresar los datos de 20 polígonos distintos. El programa culmina en
mostrar los datos del perímetro y el área de los polígonos ingresados
donde se aprecia el uso del polimorfismo.

Ejecución del programa:

222 | MARTÍN GUSTAVO SALCEDO QUIÑONES


13. PAQUETES Y EXCEPCIONES

13.1. ¿Qué es un paquete?


Un paquete es la agrupación de clases que tienen alguna
afinidad. En otros lenguajes de programación lo tienen bajo el
nombre de librerías. Cuando se define una clase, esta debe pertenecer
a un paquete. La implementación de la clase puede hacer uso de la
implementación de otras clases del mismo paquete o de otros
paquetes. Toda clase tiene un nombre y debe ser único dentro del
paquete, pudiendo existir dos clases del mismo nombre siempre y
cuando se encuentren en paquetes distintos.
La clausula package se logra indicar el paquete donde la clase
pertenece, siendo la sintaxis:
package <nombre del paquete>;
Cuando se hace uso de la clausula package, esta debe ser la
primera sentencia en la elaboración de un programa. Por ejemplo:
package mipaquete;
class Aritmetica {
}

Aquí se puede apreciar que la clase Aritmetica pertenece al


paquete mipaquete. El uso de la cláusula package es opcional, el
hecho de no usarlo implica que la clase pertenece a un paquete por
defecto que no tiene nombre.

TÉCNICAS DE PROGRAMACIÓN | 223


PAQUETES Y EXCEPCIONES

13.2. La claúsula import


En un paquete si existe la clase A y la clase B y se desea hacer la
implementación de la clase C en el mismo paquete, en la
programación de la clase C se puede usar lo programado en la clase A
y la clase B dado que todo se está implementando en un único
paquete. Por ejemplo:

package Matematica;
...
class Cilindro {
Circulo circulo;
...
}

En el paquete Matemática se desea implementar la clase


Cilindro, donde se declara una variable a partir de la clase Circulo.
Para hacer uso de esta clase sin ningún problema se debe tener
implementado la clase Circulo en el paquete Matemática. En caso
que la clase Cilindro se define en otro paquete entonces se debe usar
la cláusula import. Siguiendo el ejemplo anterior la cláusula import
se puede usar de la siguiente manera:

package Geometría;
class Círculo {
private int radio;
public Círculo(int r)
{
 radio=r;
}
}

Ahora para hacer uso de la clase Círculo en la clase Cilindro


se debe escribir lo siguiente:

224 | MARTÍN GUSTAVO SALCEDO QUIÑONES


PAQUETES Y EXCEPCIONES

package Matematica;

import Geometria.*;

class Cilindro {
Circulo circulo;
...
}

Con la cláusula import Geometría.*; se puede hacer uso de todos


las clases e interfaces del paquete y también de sus miembros. Si la
intención es sólo usar la clase Circulo entonces se puede colocar la
siguiente declaración: import Geométria.Círculo;
En la programación con paquetes es posible acceder menciona-
do el nombre del paquete seguido de la clase que se desea usar así, por
ejemplo
package Matemática;

class Cilindro {
Geometria.Círculo círculo;
...
}
Sin embargo, si no se usa la cláusula import es necesario
especificar el nombre del package cada vez que se desee usar la clase
Circulo. La cláusula import se puede hacer uso en un mismo
programa varias veces. Se usa después de la declaración de la palabra
reservada package y antes de la definición de las clases. El
compilador de Java cuando no encuentra la clase en el mismo paquete
o paquete actual busca en los paquetes indicados a través de import.
Hacer uso de import no implica copiar código hacia el nuevo
programa sino más bien una extensión del programa actual hacia
aquellas clases o interfaces que se encuentran en otros paquetes.

TÉCNICAS DE PROGRAMACIÓN | 225


PAQUETES Y EXCEPCIONES

13.3. Paquetes existentes en Java


En el lenguaje de programación de Java existe paquetes que
tienen definidos muchas clases o interfaces que son de utilidad en
muchas aplicaciones. Los paquetes más usados son:
a) java.awt, provee de clases para la construcción de interfaces
gráficas, es decir, para aplicaciones visuales.
b) java.swing, proporciona al igual del paquete awt las clases o
interfaces para la elaboración de aplicaciones visuales.
c) java.io, proporciona de clases e interfaces para el manejo de
datos de entrada y salida en las aplicaciones
d) java.net, proporciona todas las clases para el trabajo en red.
e) Java.uitl, es el paquete para determinar la forma de leer los
datos a partir de lo indicado en las instrucciones del
programa.

13.4. Los nombres de los paquetes


Los paquetes se les puede nombrar con nombres compuestos,
los mismos que pueden ser separados por puntos, así por ejemplo
mispaqutes.Matematicas.Geometria, esto se interpreta que el
subpaquete Geometria está dentro del subpaquete Matematicas y esta
a su vez al paquete mispaquetes. Es así que se establece una jerarquía
a nivel de paquetes.
Los paquetes establecen una ruta física donde se encuentra las
clases que una vez compilado se genera los archivos de extensión class,
asi por ejemplo si tengo un paquete llamado Acceso y dentro de ella una
clase llamada Operaciones, deberá existir después de una compilación
el archivo Operaciones.class dentro de una carpeta Acceso. Además, si
una clase no es declarada con modificador de acceso public solo puede
ser utilizada por clases que pertenezcan al mismo paquete.

13.5. Manejo de Excepciones


Los programas es un conjunto de instrucciones que siguen una
lógica de ejecución, pero durante esta ejecución puede presentarse

226 | MARTÍN GUSTAVO SALCEDO QUIÑONES


PAQUETES Y EXCEPCIONES

errores que no lo ocasionan dichas instrucciones sino por diversos


factores, como por ejemplo un dato mal ingresado por el usuario. Si
ocurre un error el programa dejará de ejecutar y mostrará el error no
pudiendo tener la posibilidad de corregir lo ingresado. Es por ello que
se necesita interceptar el error para tener la opción de corregir y que el
programa prosiga en la ejecución. Esto se puede lograr en el lenguaje
de programación de Java a través del uso de excepciones.
La excepción se puede entender como un suceso excepcional y
como suceso vendría ser un evento que sucede durante la ejecución
del programa ocasionando el normal desarrollo de las instrucciones.
Cuando sucede el error el lenguaje de programación Java crea un
objeto de tipo exception y lo maneja aparte del flujo normal de
instrucciones del programa. El objeto de tipo exception maneja
información sobre el error ocurrido y puede ser tratado a nivel de
programación a través de un catch. En el catch se establece el tipo de
excepción y se programa para ese tipo de excepción. Puede existir
muchas excepciones y por lo tanto debe haber muchos catch. Cuando
ocurre el error y detecta la excepción ocurrida recurre al catch
correspondiente, ejecuta lo programado y vuelve a la siguiente
instrucción de donde se lanzó la excepción. En el caso que el error
ocurrido no tiene el programa apropiado para dicha excepción
entonces el programa se detiene y no puede continuar con la
ejecución de las instrucciones.

import Capitulo_I.Sesion_06.LecturaDatos;
import java.io.*;

public class Excepcion_Aritmetica


{
public static void imprimir(String m)
{
System.out.print(m);
}

TÉCNICAS DE PROGRAMACIÓN | 227


PAQUETES Y EXCEPCIONES

public static void main(String args[])throws IOException


{
int a, b;
imprimir("==========================\n");
imprimir(" OPERACIONES BASICAS\n");
imprimir("==========================\n");
try
{
imprimir("Ingrese el primer numero: ");
a=LecturaDatos.leerDatoEntero();
imprimir("Ingrese el segundo numero: ");
b=LecturaDatos.leerDatoEntero();
imprimir("La suma de los dos numeros es: "+(a+b)+"\n");
imprimir("La resta de los dos numeros es: "+(a-b)+"\n");
imprimir("La multiplicacion de los dos numeros es:
"+(a*b)+"\n");
imprimir("La division de los dos numeros es: "+(a/b)+"\n");
}
catch(ArithmeticException e)
{
imprimir("No se puede dividir entre CERO\n");
}
}
}
En el programa anterior se solicita el ingreso de dos números
enteros y en caso que el segundo número es CERO entonces ocurrirá
un error en la línea de instrucción siguiente:
Imprimir ("La division de los dos numeros es: "+(a/b)+"\n");
La división entre cero no es posible, por lo que esta instrucción
lanzará una excepción y será capturada por catch con el tipo de
excepción ArithmeticException que imprimirá un mensaje indicado
que no se puede dividir entre cero.

228 | MARTÍN GUSTAVO SALCEDO QUIÑONES


PAQUETES Y EXCEPCIONES

13.6. Tipos de Excepciones


Hay muchas excepciones en Java y así tenemos, por ejemplo:
a) ArithmeticException, excepción que se crea a partir de un
error aritmético como es el caso de la división entre cero.
b) NumberFormatException, excepción que se dispara cuando
ocurre un error que vaya en contra al tipo de dato como por
ejemplo se debe ingresar un dato entero para una variable
entera y resulta que el usuario ingresa un número real.
c) NullPointerException, ocurre cuando se declara una variable
y no se crea el objeto y por lo tanto no contiene nada la
variable.
d) IOException, para capturar errores provenientes de la
entrada y salida de datos en la ejecución del programa.
e) SQLException, proporciona información acerca de los
errores ocasionados a partir de la conexión y acceso a la base
de datos.
f) ArrayIndexOutOfBoundsException, se dispara esta
excepción cuando se hace uso de índice incorrecto de un
arreglo.

13.7. Programas resueltos en Java usando NetBeans


1. Crea una aplicación que permita el ingreso de dos números
enteros y se proceda a mostrar el resulto de las cuatro
operaciones de la aritmética. Hacer uso de excepciones en el
cálculo de la división y en el ingreso de los datos.

TÉCNICAS DE PROGRAMACIÓN | 229


PAQUETES Y EXCEPCIONES

Interpretación de la programación
La clase Excepcion_Aritmetica pertenece al paquete
Capitulo_II.Sesion_13 y para esta aplicación se está importando la
clase LecturaDatos que se encuentra en el paquete
CapituloI.Sesion_06. En el método main se hace uso del bloque try{
…} que permite proteger las instrucciones ante el posible error que
pueda cometer el usuario de la aplicación. Las instrucciones en el
bloque try una vez que se inicia la ejecución del programa y se
presente algún error dispara una excepción que deberá ser
recepcionada por un catch que ejecuta lo programado. En este
programa se ha establecido el uso de dos excepciones para cuando el
usuario cometa el error de ingresar un dato no adecuado como por

230 | MARTÍN GUSTAVO SALCEDO QUIÑONES


PAQUETES Y EXCEPCIONES

ejemplo un número con decimales cuando debe ingresar un entero.


También está programado cuando el usuario ingrese como segundo
número un cero y éste sea usado en la división. No se pude dividir un
numero cualquiera entre cero.
Ejecución del programa:

2. Crea una aplicación que permita el ingreso de datos de


Artefactos como el código, la descripción, el tipo, el stock y el
precio unitario usando un arreglo de objetos. Para el ingreso de
datos validar los datos numéricos con excepciones y luego listar
los datos ingresados.

TÉCNICAS DE PROGRAMACIÓN | 231


PAQUETES Y EXCEPCIONES

232 | MARTÍN GUSTAVO SALCEDO QUIÑONES


PAQUETES Y EXCEPCIONES

TÉCNICAS DE PROGRAMACIÓN | 233


PAQUETES Y EXCEPCIONES

Interpretación de la programación
La clase Artefacto contiene los atributos codartefacto, descripcion,
tipoartefacto, stock y preciounitario. Además, tiene el método
constructor y los métodos set y get para dar y obtener los datos a cada
uno de los atributos. En la clase Excepcion_Arreglo, en el método main
inicia con la solicitud de cuántos artefactos se van ingresar. A partir de
este dato se crea el arreglo de objetos artefactos a partir de la clase
Artefacto. Luego se procede al ingreso de datos de cada artefacto
usando excepciones como por ejemplo en el caso del ingreso del código
de artefacto se valida el ingreso de un, valor numérico entero para lo
cual se hace uso de la excepción general denominada Exception
programado en el catch. Existe una variable booleana verifica que
permite manejar mejor el ingreso de datos. Al final se crea un objeto A, a
partir de la clase Artefacto y con los datos ingresados del artefacto y
posteriormente, se invoca la ejecución del método listarArtefactos que
visualiza todos los datos de los artefactos.
Ejecución del programa:

234 | MARTÍN GUSTAVO SALCEDO QUIÑONES


14. DESARROLLO DE UN
PROYECTO

El desarrollo de un proyecto es necesario comprender los


requerimientos de lo que se desea implementar. El caso a desarrollar
es un pequeño sistema de Tienda.

14.1. PROYECTO: TIENDA


Este proyecto desarrollado una parte con programación en Java
usando el entorno de desarrollo NetBeans consta de 5 archivos de
extensión java:
Almacen.java
DetallePedido.java
Pedido.java
Producto.java
Sistema_Tienda.java

Hace uso clases, atributos y métodos como también de arreglos,


relaciones de clases, arreglos de objetos entre otras cosas. Queda por
implementar el registro de pedidos y el listado de pedidos, estando
implementado la creación de almacenes, el registro de los datos de
los productos, la modificación de datos del producto y el listado de
productos.

TÉCNICAS DE PROGRAMACIÓN | 235


DESARROLLO DE UN PROYECTO

Sistema_Tienda.java contiene:

236 | MARTÍN GUSTAVO SALCEDO QUIÑONES


DESARROLLO DE UN PROYECTO

TÉCNICAS DE PROGRAMACIÓN | 237


DESARROLLO DE UN PROYECTO

En el archivo Sistema_Tienda,java se inicia con la visualización de


un menú principal, el mismo que una vez se seleccione una opción
puede llevar a mostrar otro menú. Por ejemplo, si se elige la opción 1
que es adicionar un almacén sólo le solicitará el nombre del almacén,
pero si selecciona la opción 2 que es Mantenimiento de Productos
muestra otro menú con opciones para el ingreso de un nuevo
producto o para modificar los datos de un producto ya ingresado. En
este programa se puede apreciar comentarios de las instrucciones
donde se puede evidenciar el uso de variables de objeto creado a
partir de clases y el uso de arreglos de objetos.

238 | MARTÍN GUSTAVO SALCEDO QUIÑONES


DESARROLLO DE UN PROYECTO

Almacen.java contiene:

TÉCNICAS DE PROGRAMACIÓN | 239


DESARROLLO DE UN PROYECTO

La clase Almacén tiene como atributos nombre, nroproductos y


productos, este último es definido a partir de la clase Producto y creado
con 100 elementos en el método constructor. Además, la clase Almacén
se tiene el método adicionarProducto, el método buscarProducto,
buscarProductoXcod y el método modificarProducto, estos métodos
sirven para ingresar y modificar los datos de productos.

240 | MARTÍN GUSTAVO SALCEDO QUIÑONES


DESARROLLO DE UN PROYECTO

Producto.java contiene:

TÉCNICAS DE PROGRAMACIÓN | 241


DESARROLLO DE UN PROYECTO

En la clase Producto contiene los atributos codpro, nombre, precio y


stock. Se determina como métodos al método constructor, métodos
de set y get de cada uno de los atributos y el método de cálculo
inventario. Además, se establece la implementación del método
toString.

Pedido.java contiene:

242 | MARTÍN GUSTAVO SALCEDO QUIÑONES


DESARROLLO DE UN PROYECTO

DetallePedido.java contiene:

TÉCNICAS DE PROGRAMACIÓN | 243


DESARROLLO DE UN PROYECTO

Ejecución de lo programado:
Ingresando el nombre de un almacén luego de seleccionar la opción1
del menú principal.

244 | MARTÍN GUSTAVO SALCEDO QUIÑONES


DESARROLLO DE UN PROYECTO

Selecciona la opción 2 para mantenimiento de productos y luego


adiciona productos.

TÉCNICAS DE PROGRAMACIÓN | 245


DESARROLLO DE UN PROYECTO

Selecciona la opción 3 y luego lista los productos ingresados.

246 | MARTÍN GUSTAVO SALCEDO QUIÑONES


AUTOEVALUACIÓN
a) Responde a las siguientes preguntas:
1. Usando herencia de clases se logra heredar los atributos y
métodos de una superclase. (verdadero o falso): __________
2. Los miembros protected de una superclase sólo están
accesibles para los métodos de la superclase, los métodos de las
subclases y los métodos de otras clases del mismo paquete
(verdadero falso): __________________
3. Se le denomina clase abstracta pura cuando todos sus métodos
son abstractos, este concepto se refiere a: ________________
4. Se puede escribir programas que procesen genéricamente
objetos de todas las clases existentes en una jerarquía, se refiere
a ______________
5. Agrupación de clases afines se les denomina paquetes
(verdadero o falso): _______________________
6. Es un evento que ocurre durante la ejecución de un programa
que interrumpe el flujo normal de las sentencias: ___________
7. Dos clases con el mismo nombre en dos paquetes distintos no
pueden coexistir e incluso no pueden usadas en el mismo
programa (verdadero o falso): _______________________
8. Controla un único aspecto dentro de un programa, como puede
ser supervisar la entrada en un determinado periférico o
controlar toda la entrada / salida del disco se denomina:
________________________
9. Muestra una lista de excepciones que te propone Java y la
manera como se debe interpretarlos al momento que se muestre
en la ejecución de un programa.

TÉCNICAS DE PROGRAMACIÓN | 247


AUTOEVALUACIÓN

b) Desarrolla las siguientes aplicaciones:


1. Crea una clase denominada FigurasGeometricas y calcula el
área y el perímetro del cuadrado, rectángulo y del triángulo.
Hacerlo con métodos constructores sobrecargados y el
operador this.
2. Crea una clase denominada Curso con los atributos codigocur y
nombrecur. Luego aplica herencia y crea la clase
Curso_Extension a partir de la clase Curso con los atributos
horas_clase y costocur. También crea la clase Curso_Carrera
con los atributos nombrecarrera y ciclo. Luego crea objetos a
partir de las subclases
3. Una empresa vende equipos celulares, que puede ser utilizados
únicamente para CLARO o para MOVISTAR. Se desea tener
información de la marca, el modelo y el costo del equipo.
Además, se puede adquirir adicionalmente el chip teniendo un
descuento del 10% del costo del chip si es comprado
conjuntamente con el celular. Por la compra de cualquier
equipo, el cliente puede adquirir un seguro de pérdida o robo
pagando el 15% del costo del equipo. El pago por el equipo
celular puede ser en efectivo o con tarjeta. Si el pago es con
tarjeta se incrementa el costo del equipo en un 2%. Utiliza una
programación usando clases abstracta y herencia para calcular
el precio del equipo y el monto del pago del seguro en caso
decidiera acogerse. Usar clase abstracta.
4, Aplicando polimorfismo, implementar los atributos, métodos
(con las validaciones correspondientes) y constructores de las
siguientes clases con sus atributos indicados entre paréntesis:
Figura (símbolo), Rectángulo (filas: entero >1, columnas:
entero>1), Triángulo (filas: entero>1) y Rombo (filas: entero>2
e impar). Crear el método dibujar para cada caso. Crear la clase
TestFiguras, que pruebe los métodos y constructores
implementados. Como ejemplo de la ejecución del método
dibujar para cada objeto creado, en caso que se haya asignado

248 | MARTÍN GUSTAVO SALCEDO QUIÑONES


AUTOEVALUACIÓN

como símbolo de la figura al asterisco (*) y los valores para las


filas y columnas indicados a continuación, se tendría:
Objeto Rectángulo: Filas=2 Columnas=6
******
******
Objeto Triángulo: Filas=3
*
***
*****
Objeto Rombo: Filas=7
*
***
*****
*******
*****
***
*

TÉCNICAS DE PROGRAMACIÓN | 249


REFERENCIAS BIBLIOGRÁFICAS

1. Blasco F. Programación orientada a objetos en Java [En Línea].


Ediciones de la U, 2019 [consultado 16 Nov 2020]. Disponible en:
https://elibro.net/es/ereader/uladech/127125?page=172
2. Flórez Fernández H.A. Programación orientada a objetos usando java
[En Línea]. Bogotá: Ecoe Ediciones, 2012 [consultado 24 Nov 2020].
Disponible en: https://elibro.net/es/ereader/uladech/69236?page=43
3. Moreno Pérez J. Programación orientada a objetos [En Línea]. RA-MA
Editorial, 2015 [consultado 17 Nov 2020]. Disponible en:
https://elibro.net/es/ereader/uladech/106461?page=91
4. García Llinás L.F. Todo lo básico que debería saber: sobre
programación orientada a objetos en Java [En Línea]. Bogotá:
Ediciones de la U, 2010 [consultado 17 Nov 2020]. Disponible en:
https://elibro.net/es/ereader/uladech/69813?page=108

250 | MARTÍN GUSTAVO SALCEDO QUIÑONES


TÉCNICAS DE PROGRAMACIÓN
es una publicación del
Fondo Editorial de la Universidad Católica
Los Ángeles de Chimbote, Perú
FONDO EDITORIAL DE LA UNIVERSIDAD CATÓLICA
LOS ÁNGELES DE CHIMBOTE

También podría gustarte