Logo Studenta

Creando sus propias clases

¡Este material tiene más páginas!

Vista previa del material en texto

1
Ing. Marcelo Parisholon sw
Creando sus propias Clases
2
Ing. Marcelo Parisholon sw
Objetivos
Al finalizar el tema, el estudiante debe poder:
● Crear sus propias clases
● Declarar atributos y métodos para sus clases
● Utilizar la referencia this para acceder a datos de la 
instancia.
● Crear y llamar metodos sobreescritos
● Importar y crear paquetes
● Utilizar los modificadores de accesos para los miembros de 
una clase.
3
Ing. Marcelo Parisholon sw
Definiendo sus propias clases
● Sintaxis utilizada en esta sección:
* significa que puede tener 0 o mas ocurrencias de la 
linea donde esta especificada.
<description> indica que ud. debe sustituir el valor actual de esa 
parte sin mecanografiarlo.
[ ] indica que esta parte es opcional
4
Ing. Marcelo Parisholon sw
Definiendo sus propias clases
● Para definir una clase, escribiremos:
<modificador> class <nombre> {
 <declaracion de Atributos>*
 <declaracion de Constructores>*
 <declaracion de Metodos>*
 }
– donde 
● <modificador> es un modificador de accesor, que puede ser combinado con 
otros tipos de modificadores.
5
Ing. Marcelo Parisholon sw
Ejemplo
public class StudentRecord {
//Aqui agregaremos el codigo
}
– donde,
● public – significa que la clase será accesible por otras clases fuera del paquete.
● class - es la palabra reservada utilizada para crear una clase Java.
● StudentRecord – es un identificador unico que describle nuestra clase.
6
Ing. Marcelo Parisholon sw
Guia de Codificacion
● Pensar el nombre apropiado para la clase. No las llame XYZ 
or o cualquier nombre aleatorio que se le pueda ocurrir.
● Los nombres de Clases deben comenzar con una letra 
Mayuscula.
● El nombre de archivo de su clase debe tener el MISMO 
NOMBRE que el nombre de clase.
7
Ing. Marcelo Parisholon sw
Declarando Atributos
● Paras declarar un atributo para su clase utilizar:
<modificador> <tipo> <nombre> [= <valor_por_defecto>];
8
Ing. Marcelo Parisholon sw
Variables de Instancia
public class StudentRecord {
private String name;
private String address;
private int age;
private double mathGrade;
private double englishGrade;
private double scienceGrade;
private double average;
//we'll add more code here later
}
– donde,
● private aqui significa que las variables solo serán accesibles dentro de la clase. 
Otros objetos no pueden acceder a estas directamente.
9
Ing. Marcelo Parisholon sw
Guía de Codificación
● Declare todas las variables de instancia al comienzo de la 
declaración de la clase.
● Declare una variable por linea.
● Las variables de instancia deben comenzar con letra 
minúscula.
● Utilice un tipo de datos apropiado para cada variable que 
declare.
● Declare las variables de instancia como privadas para que 
solo los metodos de la clase puedan accederlas directamente. 
10
Ing. Marcelo Parisholon sw
Variables de Clase (static) 
public class StudentRecord {
//instance variables we have declared
private static int studentCount;
//we'll add more code here later
}
– Utilizamos la palabra reservada static para indicar que la 
variable es una variable estática.
11
Ing. Marcelo Parisholon sw
Declarando Metodos
● Para declarar metodos escribimos:
<modificador> <Tipo_de_retorno> <nombre>(<parametros>*) {
 <sentencias>*
}
– donde,
● <modifcador> puede indicar un numero diferente de modificadores
● <Tipo_de_retorno> puede ser cualquier tipo de datos (incluye void)
● <nombre> puede ser cualquier identificador valido
● <parametros> : <tipo_Parametro> <nombre_Parametro>[,]
12
Ing. Marcelo Parisholon sw
Metodos de Acceso
● Métodos de Acceso
– Utilizado para leer valores de nuestras variables de clase (de 
instancia o estaticas).
– Usualmente escritas como:
get<Nombre_de_la_Variable_de_Instancia> 
– Retorna un valor.
13
Ing. Marcelo Parisholon sw
Ejemplo 1
public class StudentRecord {
private String name;
public String getName(){
return name;
}
}
– donde,
● public – significa que el metodo puede ser accedido desde fuera de la clase.
● String – es el tipo de retorno del metodo. Significa que deberá retornar un valor 
del tipo String.
● getName – el nombre del metodo
● () - significa que nuestro metodo no requiere parametros.
14
Ing. Marcelo Parisholon sw
Ejemplo 2
public class StudentRecord {
private String name;
public double getAverage(){
double result = 0;
result=(mathGrade+englishGrade+scienceGrade)/3;
return result;
}
}
15
Ing. Marcelo Parisholon sw
Metodos Mutadores
● Metodos Mutador:
– Utilizado para asignar o cambiar los valores de las variables de la 
clase ( de instancia o estaticas ). 
– Usualmente escritas como:
set<Nombre_de_la_variable_de_Instancia>
16
Ing. Marcelo Parisholon sw
Ejemplo
public class StudentRecord {
private String name;
:
public void setName( String temp ){
name = temp;
}
}
– donde,
● public – significa que el método puede ser llamado desde fuera de la clase.
● void – significa que no retorna ningun valor
● setName - es el nombre del metodo
● (String temp) – parametro que utilizará dentro del metodo. 
17
Ing. Marcelo Parisholon sw
Sentencias return multiples
● Es posible tener multiples sentencias return para un método 
mientras no se encuentren en el mismo bloque.
● No solamentes es posible retornar una variable, tambien es 
posible utilizar constantes, literales o expresiones. 
18
Ing. Marcelo Parisholon sw
Ejemplo
public String getNumberInWords( int num ){
String defaultNum = "zero";
if( num == 1 ){
return "one"; //return a constant
}
else if( num == 2){
return "two"; //return a constant
}
//return a variable
return defaultNum;
}
19
Ing. Marcelo Parisholon sw
Métodos Estáticos
public class StudentRecord {
private static int studentCount;
public static int getStudentCount(){
return studentCount;
}
}
– donde,
● public- significa que el metodo puede ser invocado desde objetos desde fuera de 
la clase.
● static – significa que el metodo es estático y debe ser invocado utilizando la 
Clase ( <ClassName>.<methodName>). Por ejemplo en este caso, lo 
invocaremos utilizando StudentRecord.getStudentCount()
● int – es el tipo de retorno del metodo. Significa que el metodo debe retornar un 
valor el tipo int
● getStudentCount – es el nombre del metodo
● ()- significa que el metodo no tiene ningun parametro
20
Ing. Marcelo Parisholon sw
Guia de Codificación
● Los nombres de los metodos deben comenzar con letras 
minusculas.
● Los nombres de metodos deben ser verbos.
● Siempre provea documentación antes de la declaración del 
metodo. Podremos utilizar el estilo javadocs para esto. A 
continuacion un ejemplo.
21
Ing. Marcelo Parisholon sw
Código Fuente: Clase StudentRecord
public class StudentRecord {
private String name;
private String address;
private int age;
private double mathGrade;
private double englishGrade;
private double scienceGrade;
private double average;
private static int studentCount;
22
Ing. Marcelo Parisholon sw
Código Fuente: Clase StudentRecord
/**
 * Returns the name of the student
 */
public String getName(){
return name;
}
/**
 * Changes the name of the student
 */
public void setName( String temp ){
name = temp;
}
23
Ing. Marcelo Parisholon sw
Código Fuente: Clase StudentRecord
/**
 * Computes the average of the english, math and science
 * grades
 */
public double getAverage(){
double result = 0;
result = ( mathGrade+englishGrade+scienceGrade )/3;
return result;
}
/**
 * returns the number of instances of StudentRecords
 */
public static int getStudentCount(){
return studentCount;
}
24
Ing. Marcelo Parisholon sw
Codigo Ejemplo de uso de la clase 
StudentRecord
public class StudentRecordExample
{
public static void main( String[] args ){
//create three objects for Student record
StudentRecord annaRecord = new StudentRecord();
StudentRecord beahRecord = new StudentRecord();
StudentRecord crisRecord = new StudentRecord();
//set the name of the students
annaRecord.setName("Anna");
beahRecord.setName("Beah");
crisRecord.setName("Cris");
//printanna's name
System.out.println( annaRecord.getName() );
//print number of students
System.out.println("Count="+StudentRecord.getStudentCount());
}
}
25
Ing. Marcelo Parisholon sw
Salida del Programa
Anna
Student Count = 0
26
Ing. Marcelo Parisholon sw
Referencia “this”
● La referencia this 
– Utilizada para acceder a variables de instancia ocultadas por los 
parametros.
● Para utilizar la referencia this , ingresamos,
this.<nombre_de_la_variable_de_Instancia>
● Atencion: solo es posible acceder a variables de instancia, nunca a 
variables de clase (static).
27
Ing. Marcelo Parisholon sw
Ejemplo
public void setAge( int age ){
this.age = age; 
}
28
Ing. Marcelo Parisholon sw
SobreCarga de Métodos
● Sobrecarga de Métodos
– Permite que un metodo con el mismo nombre pero diferentes 
parametros, tener diferentes implementaciones y diferente tipo de 
retorno
– Puede ser utilizado cuando la misma operación tiene diferente 
implementación..
● Siempre recuerde que un metodo sobrecargado tiene las 
siguientes propiedades:
– Tienen el mismo nombrethe same name
– Diferentes parametros
– Los tipos de retorno pueden ser diferentes o iguales
29
Ing. Marcelo Parisholon sw
Ejemplo
public void print( String temp ){
System.out.println("Name:" + name);
System.out.println("Address:" + address);
System.out.println("Age:" + age);
}
public void print(double eGrade, double mGrade, 
double sGrade)
System.out.println("Name:" + name);
System.out.println("Math Grade:" + mGrade);
System.out.println("English Grade:" + eGrade);
System.out.println("Science Grade:" + sGrade);
}
30
Ing. Marcelo Parisholon sw
Ejemplo
public static void main( String[] args )
{
StudentRecord annaRecord = new StudentRecord();
annaRecord.setName("Anna");
annaRecord.setAddress("Philippines");
annaRecord.setAge(15);
annaRecord.setMathGrade(80);
annaRecord.setEnglishGrade(95.5);
annaRecord.setScienceGrade(100);
//overloaded methods
annaRecord.print( annaRecord.getName() );
annaRecord.print( annaRecord.getEnglishGrade(),
 annaRecord.getMathGrade(),
 annaRecord.getScienceGrade());
}
31
Ing. Marcelo Parisholon sw
Salida
● Tendremos la siguiente salida en la primer llamada al 
metodo print:
Name:Anna
Address:Philippines
Age:15
● Tendremos la siguiente salida para la segunda invocación:
Name:Anna
Math Grade:80.0
English Grade:95.5
Science Grade:100.0
32
Ing. Marcelo Parisholon sw
Constructores
● Los Constructores son importantes en la instanciación de 
objetos. Es un metodo donde se colocan las 
inicializaciones.
● Las siguientes son propiedades de un constructor:
– Los constructores tienen el mismo nombre que la clase.
– Un constructor es como un metodo ordinario, sin embargo solo 
la siguiente información puede ser colocada en la cabecera de 
un constructor:
● Modificador de Acceso ( public...), el nombre del 
constructor y los parametros si los tubiera.
– Los constructores no tienen un valor de retorno.
– No es posible llamar a un constructor directamente, solo pude 
ser invocado por el operador new durante la instanciación.
33
Ing. Marcelo Parisholon sw
Constructores
● Para declarar un constructor, escribimos,
 <modificador> <Nombre_de_Clase> (<parametros>*) {
 <sentencias>*
 }
34
Ing. Marcelo Parisholon sw
Constructor por Defecto
● El constructor por defecto
– Es un constructor sin parámetros. 
– Si la clase no especifico ningun constructor, entonces un 
constructor implicito es creado.
35
Ing. Marcelo Parisholon sw
Ejemplo
public StudentRecord()
{
//some code here
}
36
Ing. Marcelo Parisholon sw
Sobrecarga de Constructores
public StudentRecord(){
//some initialization code here
}
public StudentRecord(String temp){
this.name = temp;
}
public StudentRecord(String name, String address){
this.name = name;
this.address = address;
}
public StudentRecord(double mGrade, double eGrade, 
double sGrade){
mathGrade = mGrade;
englishGrade = eGrade;
scienceGrade = sGrade;
}
37
Ing. Marcelo Parisholon sw
Utilizando Constructores
● Para utilizar los constructores, analicemos el codigo:
public static void main( String[] args ){
//create three objects for Student record
StudentRecord annaRecord=new StudentRecord("Anna");
StudentRecord beahRecord=new StudentRecord("Beah",
"Philippines");
StudentRecord crisRecord=new StudentRecord(80,90,100);
//some code here
}
38
Ing. Marcelo Parisholon sw
Llamada de constructor “this()” 
● Las llamadas a constructores pueden ser encadenadas, 
esto significa que un constructor puede invocar a otro 
constructor. 
● Para esto utilizamos la llamada this() 
● Al que recordar algunas cosas cuando se utiliza la llamada 
al constructor this :
– Cuando es utilizada debe estar como primer sentencia de un 
constructor
– Solo puede ser utilizado en la definición de un constructor. 
Luego de la llamada puede ser seguida de cualquier instruccion 
relevante que se necesesite.
39
Ing. Marcelo Parisholon sw
Ejemplo
1: public StudentRecord(){
2: this("some string");
3: 
4: }
5: 
6: public StudentRecord(String temp){
7: this.name = temp;
8: }
9: 
10: public static void main( String[] args )
11: {
12: 
13: StudentRecord annaRecord = new StudentRecord();
14: }
40
Ing. Marcelo Parisholon sw
Paquetes
● Paquetes 
– En Java significan agrupacion de clases e interfaces en una unica 
unidad(luego se discutira el concepto de interface). 
– Esta poderosa caracteristica provee un mecanismo conveniente 
para manejar un grupo grande de clases e interfaces mientras que 
evita potenciales conflictos de nombres. 
41
Ing. Marcelo Parisholon sw
Importando Paquetes
● Para utilizar clases que se encuentran fuera del paquete en 
uso, se necesita importar los paquetes que incluyen a estas 
clases. 
● Por defecto, todos sus programas importa el paquete 
java.lang, por ello es que podemos acceder a clases como 
String e Integer dentro de nuestro programa sin haber 
importado ningun paquete.
● La sintaxis para importar paquetes es la siguiente:
import <nombre_del_paquete>;
42
Ing. Marcelo Parisholon sw
Ejemplo
import java.awt.Color;
import java.awt.*;
43
Ing. Marcelo Parisholon sw
Creacción de Paquetes
● Para crear sus propios paquetes, escriba:
package <nombre_del_paquete>;
● Los paquetes pueden estar anidados. En este caso java 
espera una estructura de directorios conteniendo las clases 
que concuerden con la jerarquia del paquete.
44
Ing. Marcelo Parisholon sw
Ejemplo
package SchoolClasses;
public class StudentRecord {
private String name;
private String address;
private int age;
:
45
Ing. Marcelo Parisholon sw
Configurando CLASSPATH
● Ahora, supongamos que colocamos el paquete 
schoolClasses bajo the C:\ directory. 
● Necesitamos configurar classpath para apuntar al directorio 
para cuando intentemos correr nuestro programa, la JVM 
sea capaz de ver donde se encuentran las clases 
almacenadas..
● Antes de discutir como configurar classpath, veremos un 
ejemplo que muestre que sucede cuando no esta 
configurado.
46
Ing. Marcelo Parisholon sw
Configurando CLASSPATH
● Supongamos que compilamos y ejecutamos la classe que 
escribimos StudentRecord, 
C:\schoolClasses>javac StudentRecord.java
C:\schoolClasses>java StudentRecord
Exception in thread "main" java.lang.NoClassDefFoundError: StudentRecord 
(wrong name: schoolClasses/StudentRecord)
 at java.lang.ClassLoader.defineClass1(Native Method)
 at java.lang.ClassLoader.defineClass(Unknown Source)
 at java.security.SecureClassLoader.defineClass(Unknown Source)
 at java.net.URLClassLoader.defineClass(Unknown Source)
 at java.net.URLClassLoader.access$100(Unknown Source)
 at java.net.URLClassLoader$1.run(Unknown Source)
 at java.security.AccessController.doPrivileged(Native Method)
 at java.net.URLClassLoader.findClass(Unknown Source)
 at java.lang.ClassLoader.loadClass(Unknown Source)
 at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
 at java.lang.ClassLoader.loadClass(UnknownSource)
 at java.lang.ClassLoader.loadClassInternal(Unknown Source)
47
Ing. Marcelo Parisholon sw
Configurando CLASSPATH
● Para configurar classpath en Windows:
C:\schoolClasses> set classpath=C:\
– donde C:\ es el directorio sonde se colocaran los paquetes.
● Luego, podemos ejecutar nuestro programa pero ahora 
ingresando,
C:\schoolClasses> java schoolClasses.StudentRecord
48
Ing. Marcelo Parisholon sw
Configurando CLASSPATH
● En sistemas basados en Unix,supongamos que las clases 
estan dituadas en el dierectorio /usr/local/myClasses, 
escribiremos,
export classpath=/usr/local/myClasses
49
Ing. Marcelo Parisholon sw
Configurando CLASSPATH
● Es posble setear classpath en cualquier lugar. Tambien es 
posible indicar mas de uno separando por ; ( en unix : ) las 
diferentes rutas de acceso. ejemplo:
set classpath=C:\myClasses;D:\;E:\MyPrograms\Java
● En sistemas basados en unix,
export classpath=/usr/local/java:/usr/myClasses
50
Ing. Marcelo Parisholon sw
Modificadores de Acceso 
● Hay cuatro diferentes modificadores de acceso en java:: 
– public
– private
– protected
– Default
● Los primeros tres son explicitos y el cuarto es implicito 
cuando no se indica el modificador.
51
Ing. Marcelo Parisholon sw
Acceso por Defecto
● Acceso por defecto
– Especifica que solo las clases del mismo paquete pueden acceder a 
las variables y metodos de la clase.
– No existe una palabra reservada para este modificador, es aplicado 
cuando el modificador de acceso no es especificado.
52
Ing. Marcelo Parisholon sw
Ejemplo
public class StudentRecord {
//default access to instance variable
int name;
//default access to method
String getName(){
return name;
}
}
53
Ing. Marcelo Parisholon sw
Acceso Publico
● Acceso Publico 
– Especifica que los miembros de clase son accesibles por cualquiera 
dendro o fuera de la clase.
– Cualquier objeto que interactue con esta clase tiene acceso a los 
miembros publicos de una clase.
– Palabra Reservada: public
54
Ing. Marcelo Parisholon sw
Ejemplo
public class StudentRecord {
//default access to instance variable
public int name;
//default access to method
public String getName(){
return name;
}
}
55
Ing. Marcelo Parisholon sw
Acceso Protegido
● Acceso Protegido
– Espeficica que los miembros de la clase son accesibles solo para 
metodos de la clase o subclases de la misma.
– Palabra Reservada: protected
56
Ing. Marcelo Parisholon sw
Ejemplo
public class StudentRecord {
//default access to instance variable
protected int name;
//default access to method
protected String getName(){
return name;
}
}
57
Ing. Marcelo Parisholon sw
Acceso Privado
● Acceso Privado
– Especifica que los miembros de clase solo pueden ser accedidos 
solamente por la clase que los ha definido. 
– Palabra Reservada: private
58
Ing. Marcelo Parisholon sw
Ejemplo
public class StudentRecord {
//default access to instance variable
private int name;
//default access to method
private String getName(){
return name;
}
}
59
Ing. Marcelo Parisholon sw
Guia de Codificación
● Las variables de instancia de una clase deberán ser 
normalmente privadas y la clase proveerá metodos de 
acceso y mutadores para dichas variables.
60
Ing. Marcelo Parisholon sw
Resumen
● Definir clases propias
● Declarar Campos (variables de instancia o clase)
● Declarar Metodos (de acceso, mutadores, estaticos)
● Retornar valores y multiples sentencias return.
● La referencia “this”
● Sobrecarga de Metodos
● Constructores (por defecto, sobrecarga, llamada “this()”l)
● Paquetes
● Modificadores de Acceso (default, public, private, protected)

Continuar navegando