Clases La programación orientada a objetos utiliza clases para

Anuncio
Clases
La programación orientada a objetos utiliza clases para encapsular (envolver, esconder)
datos (atributos) y métodos (comportamientos).
Por ejemplo, el estéreo de un auto encapsula todos los atributos y comportamientos que
le permiten al conductor del auto seleccionar una estación de radio, o reproducir CDs.
Las compañías que fabrican autos no fabrican los estéreos, sino que los compran y simplemente los conectan en el tablero de cada auto. Los componentes del radio están encapsulados en su caja.
El encapsulamiento permite a los objetos ocultar su implementación de otros objetos; a
este principio se le conoce como ocultamiento de información. Aunque los objetos pueden comunicarse entre sí, a través de interfaces bien definidas (de la misma forma que
la interfaz de un conductor para un auto incluye un volante, pedal del acelerador, pedal
del freno y palanca de velocidad), no están conscientes de cómo se implementan otros
objetos (de la misma forma que el conductor no conoce cómo están implementados los
mecanismos del volante, motor, freno y transmisión). Por lo general los detalles de implementación se ocultan dentro de los mismos objetos.
Implementación de un tipo de dato abstracto con una clase
Las clases en Java facilitan la creación ADTs (tipos de datos abstractos), los cuales
ocultan su implementación a los clientes (o usuarios de la clase). Un problema en los
lenguajes de programación por procedimientos es que el código cliente a menudo depende de los detalles de implementación de los datos utilizados en el código. Esta dependencia tal vez requiera reescribir el código cliente, si la implementación de los datos
cambia. Los ADTs eliminan este problema al proporcionar interfaces (conjuntos de
métodos ofrecidos por las clases) independientes de la implementación a sus clientes. Es
posible para el creador de una clase cambiar la implementación interna de esa clase sin
afectar a los clientes de esa clase.
Una Clase: define un grupo de objetos que tienen propiedades similares y se comportan
de manera similar.
Características de las clases: es una plantilla o modelo que define los atributos y
métodos comunes a todos los objetos de un cierto tipo.
Clase: Implementación de un tipo de dato.
Una clase sirve tanto de módulo como de tipo.
• Tipo: Descripción de un conjunto de objetos
(equipados con ciertas operaciones)
• Módulo: Unidad de descomposición del software.
Definición de una clase
Para definir una clase en Java se utiliza la palabra reservada class, seguida del
nombre de la clase (un identificador).
Ejemplo vamos a definir una clase Chipero
Cuerpo de una clase
El cuerpo de una clase contiene dos secciones:
1. Declaración de sus atributos.
2. Definición de sus métodos.
Los límites de la clase se marcan con { }
Declaración de atributos
Los atributos se declaran dentro de las llaves de apertura y cierre de la declaración de la clase. Se declaran igual que las variables locales de un método.
Cuando se realiza una instancia o se crea un objeto de una clase se reservará en memoria un espacio para un conjunto de datos con el que se definen las variables de una clase. A este conjunto de variables se le denomina variables de instancia
Métodos
Ya hemos aprendido a definir distintos tipos de métodos de Java.
En nuestra clase Chipero vamos a definir dos métodos
1. venderChipa(), este método va ser un método con parámetro, a través
del parámetro se le indica la cantidad de chipa a vender
2. rendirSaldo(), este método retorna valor, es decir, la cantidad de chipa
que sobró.
Constructores
Las clases pueden implementar un método especial llamado constructor. Un
constructor es un método que inicializa un objeto inmediatamente después de su creación. De esta forma nos evitamos el tener que inicializar las variables explícitamente
para su inicialización
El constructor tiene exactamente el mismo nombre de la clase que lo implementa. Una vez definido, se llamará automáticamente al constructor al crear el objeto de
esa clase (al utilizar el operador new)
El constructor no devuelve ningún tipo. Su misión es inicializar las variables de
instancia de un nuevo objeto haciendo que el objeto sea utilizable inmediatamente; reservando memoria para sus variables, iniciando sus valores
Constructor por defecto
Java por defecto crea automáticamente un constructor sin parámetros para cualquier clase que definamos.
Ejemplo:
Entonces al crear un objeto de la clase Chipero
Creamos un objeto juan, pero sin inicializar sus variables de instancia (nombre, cantChipa), por lo tanto si invocamos el método juan.venderChipa(12), no se podría realizar
la operación de venta, porque aún no se ha inicializado sus variables de instancia
Si la clase no tiene ningún constructor, se utiliza un constructor por defecto que no inicializará las variables de instancia de sus objetos.
Constructores definidos por el usuario
Java nos permite definir constructores para especificar cómo han de inicializarse los
objetos al crearlo. Entonces podemos definir un constructor para inicializar las variables
de instancia de una clase, en vez de hacerlo en la propia declaración de las variables de
instancia.
Constructores con parámetros:
En cuanto definimos un constructor, ya no podemos utilizar el constructor por defecto
de la clase (el constructor que Java ha creado automáticamente si no especificamos ninguno).
Ejemplo:
Ahora deberá ser así:
Importante: Para facilitarnos la creación de objetos, Java nos permite definir
varios constructores para una misma clase (siempre y cuando tengan parámetros diferentes).
Referencia this
Uno de los usos de la palabra reservada this se da cuando una variable local de un
método tiene el mismo nombre (por ejemplo: nombre de la clase Chipero) que una variable de instancia de la clase, por lo que el método no se puede referir a la variable de
instancia como nombre; esto haría referencia en realidad a la variable local.
Para evitar este inconveniente, se podría haber cambiado el nombre de la variable local
a nombreChipero. Sin embargo, ya que tenemos la palabra reservada this que hace referencia siempre al objeto que actualmente está ejecutando el método, podemos utilizar
para indicar de forma no ambigua que un identificador se refiere a una variable de instancia, simplemente añadimos “this” al identificador, como se muestra, en la siguiente
línea de código:
Control de acceso a los miembros de una clase
Las clases pueden proteger sus métodos y variables de instancia del acceso por parte de
otros objetos.
Como una regla general, vamos a hacer que todas las variables de instancia sean privadas (private) y la mayoría de nuestros métodos públicos (public).
Ejemplo: para que no ocurra esto chipero1.cantChipa = 30, este procedimiento modifica el valor de la variable de instancia cantChipa.
Para evitar este inconveniente debemos proteger nuestras variables de instancia.
Ejemplo:
Control de acceso a los miembros
Los modificadores de acceso public y private controlan el acceso a los atributos y los
métodos de una clase. El principal propósito de los métodos public es presentar a los
clientes de la clase una vista de los servicios que la clase proporciona (la interfaz pública de la clase). Los clientes de la clase no necesitan preocuparse acerca de cómo la clase realiza sus tareas. Por esta razón, las variables y métodos private de una clase (los
detalles de implementación de la clase) no son directamente accesibles para los clientes
de una clase. Al proceso de restringir al acceso a los miembros de una clase mediante la
palabra reservada private se le conoce como ocultamiento de información.
Los atributos o métodos declarados con el modificador de acceso private pueden ser
utilizados solamente por los métodos de la clase en la que están declarados.
Ejemplo:
Observaciones:
• Si los miembros de una clase son privados quiere decir que no se puede acceder a ellos desde el exterior de la clase.
• Todas las variables de instancia de una clase deben mantenerse como private. Cuando sea necesario, proporcione métodos public para cambiar los valores de las variables de instancia private y para recuperar sus valores. Esta
arquitectura ayuda a ocultar la implementación de una clase de sus clientes,
lo cual mejora la capacidad de modificación de los programas.
• Al hacer que las variables de instancia de una clase sean private y que los
métodos de la clase sean public se facilita la depuración, ya que los problemas con la manipulación de los datos se localizan en los métodos de la clase.
• El conjunto de métodos public de una clase se conoce como la interfaz
pública de la clase.
• Los valores de las variables de instancia de un objeto constituyen su estado
• La clases = atributos + métodos
Descargar