You are on page 1of 12

Fundamentos de Programación – II Semestre 2016

Carrera: Licenciatura en Ingeniería de Sistemas de Información - Grupo:
2IF111

CLASES
INTRODUCCIÓN
Hasta este momento hemos utilizado las clases como forma de realizar
nuestros programas Java. También se han examinado métodos que sirven para
realizar acciones determinadas a las que se les asigna un nombre. Ahora
trataremos las clases como un nuevo tipo de dato cuyas variables serán
referencias a objetos. Una clase es un tipo de dato que contiene código
(métodos) y datos. Una clase permite encapsular todo el código y los datos
necesarios para gestionar un tipo específico de un elemento de programa.
¿Qué son las clases?
Las clases son estructuras o plantillas que sirven para definir un objeto. En una
clase Java, se pueden utilizar datos para describir propiedades y métodos
que definen su comportamiento. Una clase de un objeto contiene una
colección de métodos y definiciones de datos. Si se diseña una clase que
representa a un cliente, no se ha creado un objeto. Un objeto es una
instancia de la clase Cliente y, por consiguiente, puede, naturalmente, haber
muchos objetos de la clase Cliente. La creación de una variable específica de
un tipo particular de clase se conoce como instanciación (creación de
instancias) de esa clase.
Una clase describe la constitución de un objeto y sirve como plantilla para
construir objetos, especificando la interfaz pública de un objeto. Una clase
tiene un nombre y especifica los miembros que pertenecen a la clase, que
pueden ser campos (datos) y métodos (procedimientos). Una vez que se
define una clase, el nombre de la clase se convierte en un nuevo tipo de dato y
se utiliza para:
• Declarar variables de ese tipo
• Crear objetos de ese tipo

DEFINICIÓN DE UNA CLASE
Antes de que un programa pueda crear objetos de cualquier clase, la clase
debe ser definida. La definición de una clase significa que se debe dar a la
misma un nombre, darle nombre a los elementos que almacenan sus datos y
describir los métodos que realizarán las acciones consideradas en los objetos.
Las definiciones o especificaciones no son código de programa ejecutable.
Se utilizan para asignar almacenamiento a los valores de los atributos usados
por el programa y reconocer los métodos que utilizará el programa.

Cecilia G. de Beitia

Página 25

Por lo dicho. Si se omite. Cecilia G. a menos que sean privados en la clase madre o. una clase no puede ser final y abstract a la vez (ya que la clase abstract requiere descendientes…) extends La instrucción extends indica de qué clase desciende la nuestra. o por diseño de la aplicación. Es. solamente puede ser utilizada por clases del mismo paquete. Si no lo es. como Integer o Float. abstract: es una clase que puede tener herederas. pero no puede ser instanciada. la clase Number es una clase abstracta que representa cualquier tipo de números (y sus métodos no están implementados: son abstractos). sus métodos son los mismos que los de la clase madre y pueden utilizarse en forma transparente. a menos que los redefinamos.Fundamentos de Programación – II Semestre 2016 Carrera: Licenciatura en Ingeniería de Sistemas de Información . esto significa que hereda sus atributos y sus métodos (es decir que. abstracta (como la clase Number definida en java. protegidos o propios del paquete). sí implementan los métodos de la madre Number. final: es aquella que no puede tener clases que la hereden. y se pueden instanciar. para subclases de otros paquetes. ¿Para qué sirve? Para modelar conceptos.Grupo: 2IF111 Formato Los elementos que están encerrados entre corchetes son opcionales y se describen así: public: significa que puede ser usada por cualquier clase en cualquier paquete. las clases descendientes de ésta. Por ejemplo. Cuando una clase desciende de otra. literalmente. Java asume que desciende de la superclase Object. de Beitia Página 26 .lang). Esto se utiliza básicamente por razones de seguridad (para que una clase no pueda ser reemplazada por otra que la herede).

es una clase que no implementa sus métodos sino que deja a cargo la implementación a otras clases. esto no es en realidad herencia múltiple ya que una clase no puede heredar atributos ni métodos de una interface. y= y_. Si bien diferentes clases pueden implementar las mismas interfaces. // coordenada y public Punto(int x_. } public Punto() { x = y = 0. interface Una interface. y las clases que implementan una interface pueden no estar ni siquiera relacionadas entre sí. Son útiles para generar relaciones entre clases que de otro modo no están relacionadas (haciendo que implementen los mismos métodos).Grupo: 2IF111 implements Una interface es una clase que declara sus métodos pero no los implementa. Las interfaces pueden. Ejemplo: Definición de una clase llamada Punto que contiene las coordenadas x. class Punto { private int x. Todos sus métodos son por definición abstractos y sus atributos son finales (aunque esto no se indica en el cuerpo de la interface). asimismo. como se dijo.Fundamentos de Programación – II Semestre 2016 Carrera: Licenciatura en Ingeniería de Sistemas de Información . por lo tanto. cuando una clase implementa una o más interfaces. debe contener la implementación de todos los métodos (con las mismas listas de parámetros) de dichas interfaces. de Beitia // Constructor sin argumentos // devuelve el valor de x Página 27 . int y_) // constructor { x= x_. descender de otras interfaces pero no de otras clases. y a la vez descender de otras clases. obligándolas a implementar los mismos métodos y. a comportarse de forma similar en cuanto a su interface con otras clases y subclases. o para distribuir paquetes de clases indicando la estructura de la interface pero no las clases individuales (objetos anónimos). Esto sirve para dar un ascendiente común a varias clases. // coordenada x private int y. y de un punto en un plano. } public int leerX() { Cecilia G.

Así. } public int leerY() { return y. } // devuelve el valor de y void fijarX(int valorX) { x= valorX. no tienen tipo de retorno y pueden estar sobrecargados.Fundamentos de Programación – II Semestre 2016 Carrera: Licenciatura en Ingeniería de Sistemas de Información . éstos tienen el mismo nombre que el de la clase.1).Grupo: 2IF111 return x. } } // establece el valor de y La definición de una clase no reserva espacio de memoria. un objeto de la clase Punto: new Punto(2. El operador de acceso a un miembro (.1). Objetos de clases Una vez que una clase ha sido definida. El operador new crea el objeto y devuelve una referencia al objeto creado. que fija su coordenada x además visualiza su coordenada x. Las siguientes sentencias. Por ejemplo: Punto p = new Punto(2.) selecciona un miembro individual de un objeto de la clase. asignan su referencia a p. se ha creado un objeto inicializando a las coordenadas (2. Formato para crear un objeto: NombreClase([argumentos_constructor]). } // establece el valor de x void fijary(int valorY) { y= valorY. crean un objeto Punto. denominada un objeto de la clase. Cecilia G. Formato para definir una referencia: NombreClase varReferencia. son los constructores. varReferencia = new Toda clase tiene uno o más métodos para inicializar el objeto cuando es creado. por ejemplo. El objeto permanecerá vivo siempre que esté referenciado por una variable de la clase que es instancia. de Beitia Página 28 . un programa puede contener una instancia de la clase.Esta referencia se asigna a una variable del tipo de la clase.1). Un objeto se crea con el operador new aplicado a un constructor de la clase. El almacenamiento se asigna cuando se crea un objeto de una clase (instancia de una clase).

El operador de acceso (. se utiliza con los nombres de los métodos y variables instancia para especificar que son miembros de un objeto. Cada miembro de la clase está precedido del especificador de acceso que le corresponde. Punto p1 = new Punto(2. // . private y protected. a continuación. situando Cecilia G.Fundamentos de Programación – II Semestre 2016 Carrera: Licenciatura en Ingeniería de Sistemas de Información . respectivamente.out.Grupo: 2IF111 Punto p. . y el objeto originalmente apuntado por o referenciado por p1 se libera: Punto p = new Punto(1. p= new Punto().fijarX(100) . son public. El mecanismo principal para ocultar datos es ponerlos en una clase y hacerlos privados. A los datos o métodos privados sólo se puede acceder desde dentro de la clase. . Se utilizan diferentes especificadores de acceso para controlar el acceso a los miembros de la clase. Por el contrario. con lo que tanto p como p1 referencian al mismo objeto. la referencia p es asignada a p1.). que significa que a determinados datos del interior de una clase no se puede acceder por métodos externos a la clase.leerX()). Acceso a miembros de la clase: Encapsulamiento Un principio fundamental en programación orientada a objetos es la ocultación de la información. p1 = p. p. System. -1). Por ejemplo: el siguiente código crea dos objetos Punto y sus referencias se asignan a p y p1. En Java. es posible crear dos o más referencias a objetos con la misma clase. de Beitia Página 29 . los datos o métodos públicos son accesibles desde el exterior de la clase. Se utiliza el formato general siguiente en definiciones de la clase.println(“Coordenada x es “ + p. -3).

Si public o private no se utilizar. Private El nivel de acceso más restrictivo es private. por defecto. las clases. // miembros privados protected declaración miembro protegido. Un modificador que se aplica a un método se llama modificador de método. // miembros protegidos public declaración miembro público. Un miembro privado sólo es accesible en la clase en que está definido. 2. Cecilia G.Fundamentos de Programación – II Semestre 2016 Carrera: Licenciatura en Ingeniería de Sistemas de Información . Un modificador que se puede aplicar a una clase se llama modificador de clase. seguidas por los métodos (este orden no es obligatorio). Un modificador que se puede aplicar a un campo dato se llama modificador de datos. Formato class NombreClase { private declaración miembro privado. // miembros públicos } Modificadores de acceso Modificado r Clase Métod o Datos Comentario (por defecto) √ √ √ Una clase. En realidad define los métodos y los datos a los que sólo se puede acceder dentro de la clase en que están definidos. El modificador private sólo se aplica a variables o a métodos. método o dato es visible a todos los programas de cualquier paquete private √ √ Un método o dato es sólo visible en esta clase protected √ √ Un método o dato es visible en este paquete y en las subclases de esta clase Notas: 1. de Beitia Página 30 . método o dato es visible en este paquete public √ √ √ Una clase. pero no por las subclases. métodos y datos son accesibles por cualquier clase del mismo paquete. Se utiliza este nivel de acceso para declarar los miembros que se deben utilizar sólo en la clase.Grupo: 2IF111 primero las variables instancia.

ExternaDemo.metodoPrivado(). La clase DemoPrivado contiene dos miembros privados: una variable y un método.datoPrivado = 100. El código del interior de la clase DemoPrivado puede inspeccionar o modificar la variable datoPrivado y puede invocar al método metodoPrivado.out. no puede acceder a los miembros de DemoPrivado.datoPrivado = 100. Otra clase externa. class DemoPrivado { private int datoPrivado. // No legal } } 3. pero no lo puede hacer ningún código perteneciente a otra clase. private void metodoPrivado() { System. se utiliza la palabra reservada private en su declaración.Grupo: 2IF111 El objetivo de private es proteger la información contenida en variables para evitar que al ser accedido por un “extraño” pongan al objeto en estado inconsistente o bien para proteger a métodos que si se invocan desde el exterior puedan cambiar el estado del objeto o el programa en que se está ejecutando. de Beitia Página 31 .java:6: datoPrivado has private access in DemoPrivado d. // No legal ^ D:\IISemestre2011\JAVA\ ExternaDemo. class ExternaDemo { void metodoAcceso() { DemoPrivado d = new DemoPrivado().println ("Es un método privado"). } } Funcionamiento 1. d.metodoPrivado(). los miembros privados son como secretos que no se difunden a “extraños”. // No legal ^ 2 errors Cecilia G.Fundamentos de Programación – II Semestre 2016 Carrera: Licenciatura en Ingeniería de Sistemas de Información . Para declarar un miembro privado.java:7: metodoPrivado() has private access in DemoPrivado d. 2. // No legal d. De hecho. Cuando una clase intenta acceder a una variable a la que no tiene acceso el compilador imprime un mensaje de error similar al siguiente: D:\IISemestre2011\JAVA\ExternaDemo.

protected void metodoProtegido() { System. d. Los miembros protegidos se declaran con la palabra reservada protected.DemoProtegido. las subclases y las clases del mismo paquete.out. Las subclases externas del paquete de la superclase también tienen acceso a los miembros protegidos pero a través de una referencia al objeto: package demoBis.Fundamentos de Programación – II Semestre 2016 Carrera: Licenciatura en Ingeniería de Sistemas de Información . } } Funcionamiento 1. Consideremos la clase DemoProtegido que se declara dentro de un paquete denominado Demo y que tiene una variable y un método protegidos. ya que la clase está en el mismo paquete que DemoProtegido. 2. La clase OtraDemo puede acceder legalmente a la variable datoProtegido e invocar al método metodoProtegido: package demo. Si OtraDemo fuera una subclase de DemoProtegido este código sería también legal. // legal } } No se producen errores en la compilación. accedan a los miembros.datoProtegido = 100. // legal d. pero no por “extraños”. package demo.Grupo: 2IF111 protected El especificador protected permite que la propia clase. La clase OtraDemo es del paquete demo. de Beitia Página 32 . public class OtraDemo { void metodoAcceso() { DemoProtegido d = new DemoProtegido(). class Nueva extends DemoProtegido { Cecilia G. public class DemoProtegido { protected int datoProtegido. 3. e incluso por amigos. pero no es subclase de DemoProtegido.println ("Es un método protegido"). import demo. Los miembros protegidos son como los “secretos familiares” compartidos por familiares.metodoProtegido().

Nueva n) { d.datoProtegido = 100. Cecilia G.datoProtegido = 100. métodos y datos de modo tal que todos los programas pueden acceder a ellos.println ("Es un método público").Fundamentos de Programación – II Semestre 2016 Carrera: Licenciatura en Ingeniería de Sistemas de Información .datoProtegido = 100. Por ejemplo: package Negocios.out. Se declara a un miembro público utilizando la palabra reservada public. // legal d. // legal } } Se puede acceder a los miembros protegidos a través de un objeto de la clase Nueva.java:9: metodoProtegido() protected access in demo. } } CONSTRUCTORES Un constructor es un método miembro de propósito específico que s ejecuta automáticamente cuando se crea un objeto de una clase.DemoProtegido d. pero no a través de un objeto de la clase DemoProtegido que no sería válido.DemoProtegido d. Al compilar el programa se producen los siguientes errores: D:\IISemestre2011\JAVA\Nueva. public class ENegocios { public int cantidad. void operar() { System.metodoProtegido().Grupo: 2IF111 void metodoAcceso (DemoProtegido d. Un constructor sirve para inicializar los miembros dato o variables instancia de una clase. // no legal n. Los miembros se declaran públicos sólo si este acceso no puede producir resultados no deseables si un “extraño” a ellos lo utiliza. // no legal ^ 2 errors protected has public El especificador de acceso public es aquel que define las clases.java:7: datoProtegido has access in demo. // no legal ^ D:\IISemestre2011\JAVA\Nueva. de Beitia Página 33 .metodoProtegido(). // no legal n.metodoProtegido().

y=0. Un constructor por defecto normalmente inicializa los miembros dato asignándoles valores por defecto. invoca al constructor de la clase pasándole los parámetros con valores especificados para inicializarlo y la referencia al objeto se asigna a objRect. private int y.75). private int superior. Puede tener cero o más parámetros 3. superior = sr.25. private int inferior.75. Cuando se define un constructor no se puede especificar un valor de retorno. public class Punto { private int x. se inicializa x. Constructor por defecto Un constructor que no tiene parámetros se llama constructor por defecto.y en cero. La clase Rectangulo tiene un constructor con cuatro (4) parámetros: public class Rectangulo { private int izdo. El constructor tiene el mismo nombre de la clase 2.Grupo: 2IF111 Reglas 1. dcha = d.Fundamentos de Programación – II Semestre 2016 Carrera: Licenciatura en Ingeniería de Sistemas de Información . // Constructor public Rectangulo(int iz. si tiene parámetros se pasan los valores de los parámetros al constructor utilizando una sintaxis similar a una llamada normal del método: Rectangulo objRect = new Rectangulo(25. inferior = inf. } // Definiciones de otros métodos miembro } Cuando se define un objeto. int d. int sr. Esta definición crea una instancia del objeto Rectangulo. se aplica el operador new al constructor que se desee. int inf) { izdo = iz. de Beitia Página 34 . private int dcha. ni incluso void (un constructor nunca devuelve un valor). public Punto() // Constructor por defecto { x=0. En la clase Punto. } } Cecilia G.

Constructores sobrecargados Al igual que se puede sobrecargar un método de una clase. float . Tal constructor inicializa las variables instancia de tipo numérico (int. protected Punto p. se puede también sobrecargar el constructor de la clase. .Grupo: 2IF111 Cuando se crea un objeto Punto. Cecilia G. En el siguiente ejemplo se define la clase Ventaja.y = 0 O bien dentro de un método void funcDemoConstructorD() { Punto pt. no tiene definido un constructor. p a null. las variables x. String h. no sería posible crear: Rectangulo objetoRect = new Rectangulo(). con independencia de cuántos constructores hayan sido definidos. de Beitia Página 35 . De hecho los constructores sobrecargados son bastante frecuentes. En ese caso si se omite un constructor sin parámetros no será posible utilizar el constructor por defecto. public class Ventaja { private int x. private double r. sus miembros dato se inicializan a cero (0). aunque con características especiales. . // métodos de clase } al crear un objeto: Ventaja objV = new Ventaja(). // p1. otro con un argumento de tipo cadena y el tercero con tres argumentos. // Llamada al constructor } Regla: Java crea automáticamente un constructor por defecto cuando no existen otros constructores. r se inicializan a cero (0) y las referencias h.) a cero. Si recordamos la clase Rectangulo que sólo tiene un constructor con cuatro (4) parámetros. Es importante señalar que se debe tener cuidado con la escritura de una clase con sólo un constructor con argumentos. proporcionan medios alternativos para inicializar objetos nuevos de una clase. p1. las variables de tipo boolean a false y las referencias a null. Punto p1 = new Punto().Fundamentos de Programación – II Semestre 2016 Carrera: Licenciatura en Ingeniería de Sistemas de Información . ya que es otro método. un constructor por defecto. pt = new Punto(). En el siguiente ejemplo la clase EquipoSonido se define con tres constructores.x = 0. Un constructor se ejecuta sólo cuando se crea un objeto.

private int numCd. de Beitia Página 36 . System. // define tres referencias rt = new EquipoSonido(). } } La instanciación o creación de un objeto EquipoSonido puede hacerse llamando a cualquier constructor: EquipoSonido rt. private int voltios. System. // Llamada al constructor por defecto gt = new EquipoSonido("AAAAAAAA"). voltios = v. ht = new EquipoSonido("BBBBBBBB".println ("Constructor con argumento cadena"). private String marca. } public EquipoSonido(String mt) { marca = mt. int p.out.. } public EquipoSonido(String mt.out. System. public EquipoSonido() // Constructor por defecto { marca = "Sin marca". potencia = p.println ("Constructor por defecto").println ("Constructor con tres argumentos"). } public double factura() { . ht.out. 35. int v) { marca = mt. Cecilia G. 220). numCd = 20..Fundamentos de Programación – II Semestre 2016 Carrera: Licenciatura en Ingeniería de Sistemas de Información .Grupo: 2IF111 public class EquipoSonido { private int potencia. gt.