Descarga la aplicación para disfrutar aún más
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)
Compartir