Objetos y Clases
Como en otras áreas de la vida humana, no tiene sentido
reinventar o reconstruir todo a partir de los elementos básicos.
Hay puertas y ventanas estándares para construir casas. Los
neumáticos la misma cosa y son reusables en cualquier auto.
En software se quiere hacer lo mismo. Construir soluciones a
problemas bien definidos y luego reusar estas componentes o clases.
Al usuario de algo empaquetado no le debería interesar ni
requerir la información sobre cómo algo fue hecho,
sólo le interesan los aspectos de uso externo. Es el caso de
componentes electrónica, donde se usa la hoja de datos para el
diseño sin saber los detalles internos (cuántos
trasistores usó, en qué configuración,...)
Las clases intentan ser el empaquetado básico descrito.
Herencia: Se refiere a la clase construida a partir de otra.
Esto tiene sentido cuando ambas clases cumplen la relación
"es-un". Por ejemplo un perro es un mamífero. Luego si
tenemos una clase mamífero, podremos construir la clase perro a
partir de la otra y aprovechar todo lo ya hecho en mamífero. Si
tengo la clase ComponenteBasica, luego puedo definir la clase
Resistencia como sub-clase
o clase
derivada de ComponenteBasica.
Hay tres tipos de relaciones entre clases:
- Dependencia corresponde a relación "usa-un" Eje.: Un
amplificador usa un parlante para emitir el sonido. Un Computador usa
la red para enviar sus datos.
- Agregación corresponde a la relación
"tiene-un" Eje.: Un circuito RC tiene un condensador.
- Herencia corresponde a la relación "es-un" Eje.: un
condensador es una ComponenteBasica. Un Auto es un medio de transporte.
Un círculo es una forma geométrica.
Estas dependencias reflejan el tipo de relación o
asociación de las clases que dan forma a una solución.
Estudio de ejemplos: CalendarTest.java
Employee.java
y EmployeeTest.java
Explicar:
- Estructura para definir una clase: constructor, métodos,
datos
- Definiciones:
Un método se dice que es un mutador si su
invocación permite cambiar el estado del objeto (cambia alguno
de
sus atributos -miembros dato)
Un método se dice "accesor" si su invocación
sólo permite acceder a un objeto pero no lo modifica.
- this.
- Calificadores de acceso o visibilidad:
- public: El acceso es abierto para cualquier código que
tiene
acceso a la clase. Aquel que tiene acceso al archivo donde se encuentra.
- protected: miembro visible a cualquier clase derivada o del
mismo paquete.
- package: visible al paquete . Es el valor por defecto si lo
omitimos.
- private: miembros accesibles sólo a miembros de la misma
clase.
- Campos estáticos: Corresponden a datos de los cuales hay
sólo uno para toda la clase (no uno por objeto). Almacena el
estado de una clase y no de cada objeto en particular.
- Métodos estáticos: también usan el
calificador static y sólo pueden manipular datos
estáticos. Se invocan anteponiendo el nombre de la clase, pueden
ser invocados desde una instancia pero no es recomendable. ver StaticTest.java
- Invocación de métodos: Todas las invocaciones en
Java son por valor (no por referencia). Los tipos primitivos copian su
valor en el parámetro, luego el parámetro actual (aquel
usado en el llamdo) nunca es
modificado. Los nombre de objetos son referencias a éstos, luego
cuando tenemos un objeto como parámetro, el objeto referenciado
sí puede ser modificado. Ver ParamTest.java.
- Sobrecarga: Se refiere a que un método puede poseer varias
formas diferenciándose en sus argumentos. En Java un
método queda
entonces definido en forma única al considerar su nombre
más el
conjunto de parámetros.
- Inicialización de miembros dato de la clase: Se puede
hacer en el constructor o en su definición. Primero se ejecuta
la
definición y luego lo del constructor.
- Llamado entre constructores. Para ello se puede usar this(/*
parámetros del constructor a invocar*/); Ver ConstructorTest.java
- Packages: Son colecciones de clases. Son buenos para separar los
módulos y proyectos. Su principal razón es garantizar
unicidad de los nombres. Para poner una clase en un paquete se debe
poner el nombre del paquete antes de la definición de la clase:
package cl.utfsm.elo.elo330;
public class Employee
{
...
}
ver:
PackageTest.java
- Documentación:
- Para la clase de inmediatamente antes de la clase y ser
encerrado entre /** y */
- Para los métodos: usar los rótulos
- @param variable descripción
- @return descripción
- @throws class descripción
- Para los datos públicos: /** ...*/
- Comentarios Generales:
- @author nombre
- @version texto
- @since texto
- @see link
En este caso link puede ser: package.class#característica rotulo
como en @see cl.utfsm.elo.Employee#raiseSalary(double)
- Se pueden usar todo tipo de rótulos html incrustados.
- ¿Cómo generar la documentación?: javadoc
-d docDirectory nameOfPackage
Para un archivo en el paquete por defecto: javadoc -d docDirectory *.java
- La ruta para la búsqueda de todas las clases: CLASSPATH El compilador y el
interprete java buscan los archivos en el directorio actual. Si el
proyecto está compuesto por varias clases en diferentes
directorios, javac y java buscan las clases en los directorios
indicados
en la variable de ambiente CLASSPATH. En Linux ELO ésta se
configura con
export CLASSPATH=/home/user/classdir1:/home/user/classdir2:.
El Windows se debe fijar también esta variable de ambiente.