Vous êtes sur la page 1sur 20
captruo Las clases son el nicleo de Java, Son la construccién légica sobre a que se basa el lenguaje Java, definen la forma y naturaleza de un objeto, y constituyen los fundamentos de la programacién orientada 2 ‘objetos. Cualquier concepto que quiera implementarse en un programa Java debe ser encapsulado dentro de una clase. Este capitulo esta dedicado a las clases y la forma como se deben utilizar, en capitulos posteriores veremos aspectos mas avanzados de este importante tema, Temas de desarrollar: 8.1. Clases Vs. Objetos 8.2. Definicién de una Clase 8.3. Declaracién de Objetos ~ Definicién de Variables o Campos 5 Definicién de Métodes 8,6- Ocultando los Datos 8.7- Sobrecarga 8.8- Constructores Una clase es una representacién de un tipo de objeto en particular, y define un nuevo tipo de dato. Las clases se utlizan para crear objetos de ese tipo de clase en particular, esto es, crear objetos que incorporen todos los componentes especificados dentro de la clas. Una clase esta conformada basicamente por atributos y operaciones, los atributos representan los datos de la clase y se implementan meciante variables, las operaciones se implementan a través de los ‘métodos, los atributos se deben manipular solamente a través de los métodos. ‘Empleado ~coaig rowers suelo = fchatnereso * creartvo ( ) + gettorire () ++ setsusio () * ganeracesn ( ) ++ Operation! () Figura 8.1 Ejemplo de una case ulizando notaclén UML Las clases son la base de le Programacién Orlentada a Objetos (POO), y sus caracteristicas mas importantes son: ~ Encapsulacién Las clases pueden ser declaradas como paiblicas (public) y como package (accesibies sblo para otras clases del package). Los atributos miembros y los métodos pueden ser public, private, protected y package. De esta forma se puede controlar el acceso y evitar un uso inadecuado. Herencia z Una clase puede derivar de otra (extends), yen ese caso hereda todos sus atributos y operaciones. Una clase derivada puede aftadir nuevos atributos y operaciones y/o redefinir os atributos y operaciones heredados. ~ Polimorfismo % Los objetos de distintas clases pertenecientes a una misma jerarquia o que implementan una misma Interfase pueden tratarse de una forma general e individualizada, al mismo tiempo. Esto faciits la programacién y el mantenimiento del cédigo. ara utilizar una clase debe instanciarse, esto se realiza con el operador new, por ejemplo, supongamos que tenemos Ia clase Ventana: Para crear un objeto o instancia de esta clase tenemos dos alternativas, la primera en la misma linea de declaracién, tal como se ilustra a continuacion: Para acceder a los componentes (variable © campos, y métodos) de un objeto debemos utilizar el ~ ‘operador punto (.}, por ejemplo para modificar la posicién de la ventana seria de la siguiente manera: Para ejecutar el método pintar la Instruccién es la siguiente: Para resumir, podemos afirmar que una clase es la definicién de un tipo de objeto, y esta compuesta por atributos y operaciones; mientras que el objeto es la instanciacién de una clase, y esta compuesto por variables 0 campos, y métodos. Por ejemplo si queremos definr la clase Empleado, la instruccién es: Es Importante recordar que el nombre del archivo debe ser igual al nombre de la clase seguido de java, ten este caso debe ser Empleado java. Como se explico en la seccién 8.1 para crear los objetos se debe utilizar el operador new. OPERADOR: NEW Eloperador new crea el objeto, esto quiere decir que asigna memoria el objeto. Para utilizar el operador new tenemos dos sintaxls. Sintaxis 1 Instruccién arti Articulo artt; null att art! = new Articulol); —— nombre precio Figura 8.2 Instanciacisn de una clase (Creacién de un objeto. ASIGNACION DE OBJETOS ‘Cuando creamos un objeto internamente existe un puntero, al que no tenemos accese, pero cuando asignamos objetos lo que realmente estamos asignando son las direcciones de memoria donde estan definidos os objetos, tal como se llustra en la Figura 8.3. Articulo artt = new Articulo(); Articulo art2 = artt; artt — = Se Figura 8.3 Asignacién de objetos. ‘8.4. DEFINICION DE VARIABLES 0 CAMPOS Sintaxis [Tipo_Acceso] Tipo nombre; El Tipo_Acceso puede ser: public indica que se puede acceder al campo desde cualquier programa, También es accesible por clases derivadas (subclases) protected | Indica que solo se puede acceder al campo desde métodos de la misma clase y clases derivadas (subclases) private Trdica que solo se puede acceder al campo desde métodos de la misma clase. | SS aac ) d JIIVIIIIIID » YIVIIAIIIID J J ‘Cuando no se especifica el Tipo_Acceso el acceso al campo es permitido por métodos de la misma clase y desde clases que se encuentran en el mismo paquete. Ejemplo 8.1 Como ejemplo ilustrativo tenemos la clase Articulo que tiene definido 3 atributos, ‘Articulo + ei i fe pec Figura 8.4 Clase Articulo La implementacién de esta case se llustra @ continuacién: Articulo.java Esta clase define un nuevo tipo de dato constituido por tres campos, en el siguiente programa se ilustra como se debe usar la clase Articulo. Compilacién y ejecucién: na2n100\cap8>javac progOe0l java [enter] C:\javadn100\cap8>Java progoBot [Enter] 100-Televsor-500.0, 200-Piancha-80.0 100-Televisor-500.0 ‘Se deduce de este resultado que tanto artt y art3 apuntan al mismo objeto. ‘8.5 DEFINICION DE METODOS sintanis [Tipo_Acceso} Tipo_Dato nombre_método( lista_de_parametros ) { 1] Cuerpo del método; uy ElTipo_Acceso puede ser: accesible por clases derivadas (subclases). ‘public Indica que se puede acceder al método desde cualquier programa. También es derivadas (subclases) protected Indice que solo se puede acceder al método desde de la misma clase y clases, private [indica que solo se puecle acceder al método desde de la misma clase, Cuando no se especifica el Tipo_Acceso el acceso al método es permitido desde la misma clase y desde clases que se encuentran en el mismo paquete. E1Tipo_Dato determina el tipo de dato que retorna el método, puede ser cualquier tipo vido, incluso los tipos de clases creados por usted, Siel método no retorna ningun valor se debe especificar void. Los parémetros se especifican de la siguiente manera: tipo perametrot, tipo2 parametro2, ... Los parémetros son variables que reciben los valores de los argumentas que se pasan al método cuando este es invocado. Si el métado no tiene parémetros, la lista de pardmetros estard vacia. Los métodos que retornan un tipo diferente a void, deben retornar un valor a la instruccién que realiza la llamada mediante la instruccién return utlizando la siguiente sinta : retuim sxpresiény ‘expresin representa el valor que retorna el método, ee «> Ejemplo 8.2 = En el siguiente ejemplo se ilustra el uso de métodas, para eso se a definido una clase de nombre ~Caleuladora que tiene definido dos atributos publicos nt yn2,y dos operaciones suma()y producto). ‘aletladora lent lene [sums () l+proaucis¢) d J Figura 8.5 Clase Operacién ) ‘A continuacién Ia implementacién de la clase: YIIIIIID JddIDIDID)99 ) JIIDVI ) 2 yi yL oR tmcuneDeemoctamaconine Compilacién y ejecucién: ) Como se puede apreciar en el ejemplo, después de asignarlos datos, invocando alos métodos tenemos — acceso al resultado esperado. Ejemplo 8.3 my En el siguiente ejemplo tenemos una segunda versién de la clase Calculadora, donde las operaciones ‘tienen parémetros, tal como se ilustra en la Figura 8.6. Caleuladora + suma (Cina (2) - }+ producio (in) nt, fn} 2) Figura 8.6 Clase Calculadoraversi6n 2. A continuacién la implementacion de la clase: eacuiadorazjava SSS El programa que ilustra el uso de la clase Calculadora2 es el siguiente: prog0803.java Eas Sama ‘System.out pritin’nt = * +2); ‘System.out printin(*n2 =" +); ‘System.out prntin("Suma = * +0bj.suma(a,b)); ‘System.out printin(*Producto = * +0bj.producto(a,)); } Compilacién y ejecucién Ci\javazn100\cap8>javac prog0803 java Center] 12-8 ‘Suma = 23 Producto = 120 En este caso os valores con los que debe operar el método se pasan como pardmetros.. '8.6.- OCULTANDO LOS DATOS Uno de los fundamentos de la programacin orientada a objetos es que el usuario solo debe tener ‘acceso a los datos que le son de su interés, y del modo que le corresponde, por ejemplo solo lectura, solo escritura, 0 ambos. Para conseguir esto se debe implementar los atributos como privades, y se debe Implementar métodos para acceder a ellos, existe un esténdar para definir este método, por ejemplo y sil atributo es nombre, los métados son: setNombre | Este método permite asignar una valor al atributo. ‘getNombre | Este método permite leer el valor del atributo, Como puede apreciar existen dos prefijs, el prefijo set que se utiliza para asignar un valor al atributo vel prefiio get para leer el valor del atributo, de esta manera podemos seleccionar si se implementa e| metodo set, get, o ambos, y restringir el nivel de acceso alos datos. tra posiblidad que nos da la implementacién de estos métodos es de poder agregar funcionalidad {que puede servir para verifcar por ejemplo siel dato que se esta signando es correcto ono. ro umeunebemnocmaMaconsa Ejemplo 8.4 En el siguiente ejemplo se ilustra el uso de métodos para acceder alos campos de un objeto, la definicién de la clase de jlustra en la Figura 8.7. “Articulo2 aa + nombre > precast prevent + satcadign (in] aCadigo ) + satonbre (hl sombre ) + serprecosta ( fr] acacia ) getCodign ( ) + gatvorére ¢ ) + geerecaste ( ) ++ getraventa () Figura 8.7 Clase Articulo2. La implementacién de la clase Articulo2 se llustra a continuacién: [ Articulo2.java ee) d PXVIFIAIIIIIIDIIIIIIID J +7) Compilacién y ejecucién: Como se puede apreciar el precio de venta se calcula de manera automética cuando establecemos el precio de costo, esto debido a que utlizamos un método para asignar el precio de costo, por otro lado €! precio de venta solo puede ser lefdo (solo lectural, mas no existe manera alguna de cambiar su valor, a menos que cambiemos el precio de costo. Lasobrecarga permite defini doso més métodos que comparten el mismo nombre, perola declaracién de sus parémetros debe ser diferente. Esta es una de las caracteristicas muy importante de la POO, y por o tanto también de Java. Cuando se invoca a un método sobrecargado, Java utiliza el tipo y/o ndmerd'de pardmetros como ‘tuia para determinar a que versién del método sobrecargado debe llamar. Por lo tanto, los métodos sobrecargados deben ser diferentes en el tipo y/o nlimero de parémetros. Ejemplo 8.5 En este ejemplo ilustraremos el uso de la sobrecarga, para lo cual implementaremos una clase que ppermita convertir a String un numero, dependiendo el tipo de numero se ejecutard el método que le corresponde. |+convert(n: long): String convent float): Sting | +convertin: double): String | Figura 8.8 Case MyConvert con una func sobrecargada. La clase que se utlizaré para esta demostracién es MyConvert, tal como se aprecia en la Figura 8.8, ‘tenemos el método convert sobrecargado. ‘A continuacién tenemos la implementacién de la clase MyConvert: ) PIII IVI) >.) »>d)) El programa que ilustra el uso de esta clase es el siguients En este caso al invocar al método convert con datos de diferentes tipos, internamente se ejecutard el _método que corresponde segiin el tipo de dato del pardmetro que le pasamos. Los constructores permiten inicializar un objeto inmediatamente después de su creacién, tienen el ‘mismo nombre que la clase donde se encuentra y sintdcticamente son similares de los métodos. Sintaxis Eleonstructor se invoca cuando creamos el objeto, junto con el operador new. los constructoes tienen el mismo nombre de la case, yno tienen tipo, esto debido a que retornan el ‘mismo tipo de a clas, el objetivo principal de un constructor es iniilizarel estado interno de objet. Ejemplo 8.6 En este ejemplo crearemos una clase de nombre Empleado, que tiene un constructor que inicializa sus atributos. Empleade: [-nombre: String |-suelda: double LLedad: int +Empleado( ) -+getNombre{ ): String] |+getSueldo( ) double [+neté deol): int Figura 8.9 Clase Empleado con un constructor A continuacién tenemos la implementacién de la clase Empleado, aqu' puede apreciar que el constructor tiene el mismo nombre que la clase. PIIIIDIIIIDYD ) PIPIVIIDIID dd) » 29) E! programa que ilustra el uso de esta clase es el siguiente, puede notar que el constructor se invoca Junto con el operador new. Compilacién y ejecucién: CONSTRUCTORES CON PARAMETROS Los constructores pueden resultar mas itiles si tienen parémetros, en nuestro ejemplo de la clase Empleado, resulta que no todos los empleados se llaman Claudia, el Ejemplo 8.7 ilustra el uso de constructores con parémetros. 78 umvcunsebsenocmamaconsnvn Ejemplo 8.7 El siguiente ejemplo ilustra el uso de constructores con-pardmetros, la clase utlizada es Empleados. Empleadot [-nombre: Sting |-sueldo: double [edad int [+Empleada(nombre: Sting, sueldo: double, edad inty | +aetNomere( ): String |*9etSueldot ) double |+pettdadl )int Figura 8.10 Clase Empleadot con un constructor con parémetros. ‘Acontinuacién tenemos la implementacién de la clase Empleadot. El constructor de esta clase permite iniialzar los objetos con diferentes datos, asi podemos tener un ‘objeto para cada empleado. Seeman El programa que ilustra el uso de esta clase es el siguiente: Puede notar que el constructor se invoca junto con el operador new y es en esa Instruccién que se le ppasa los datos para que inicialice el objeto. Compilacién y ejecucion: Podemos concluir que cada vex que se crea un objeto se puede inicialzar con datos diferentes que correspondan a distintes empleados. SOBRECARGA DE CONSTRUCTORES Al igual que los métodos, los constructores también pueden ser sobrecargados, esto quiere decir, que podemos tener diferentes constructores dependiendo de los datos de los que disponemos. Ejemplo 8.8 En este ejemplo se ilustra como construir clases con constructores sobrecargados, la clase que se utiliza es Empleado2, en esta clase tenemos cuatro versiones del constructor, tal como se aprecia en la Figura 8.21. [nombre Sig, |suelda.covsle [eae int feEmpleacaombre Srna, suet: doce eed [sEmpleado{ nombre Stina, sueco: dole) [sEmpleacodomtce: Sono edad), }-Ermplescoz(nomtre: Sting) lrgehNorbre() Sg lsgetsueio()couble getEded Figura 8.11 Clase Empleado2 con constructor sobrecargado. re PcuneepROMRCoNAVA Los datos de un empleado son: nombre, sueldo y edad, cuando falta elsueldo se asumeun sueldo base ‘que esta definido en SUELDO_BASE, y cuando falta la edad se asume cero. ‘A continuacién tenemos la implementacién de la clase Empleado2: i ) VIII)? ) III ¥ PIIIIIIDD A>VIIIYD a) PAV J ey) El programa ilustrativo para el uso de esta clase es: Del resultado obtenido podemos deducir que a Ricardo se le asigno el sueldo base debido que no se le ‘especifico su sueldo al momento de crear el objeto, en el caso de Sergio solo se especifco su nombre, por lo tanto se le asigno el sueldo base y edad cero.

Vous aimerez peut-être aussi