3.1 DEFINICION DE UNA CLASE.
En programación orientada a objetos, una clase es una construcción que se
utiliza como un modelo (o plantilla) para crear objetos de ese tipo, el
modelo describe el estado y contiene el comportamiento que todos los objetos
creados a partir de esa clase tendrán. Una clase por lo general representa un
sustantivo, como una persona, lugar o cosa, es el modelo de un concepto dentro
de un programa de computadora y encapsula el comportamiento a través de
secciones de código reutilizables llamadas métodos.
La sintaxis típica de una clase es:
3.2
DECLARACION DE CLASES.
Una clase es un proyecto o prototipo que
se puede utilizar para crear muchos objetos. La implementación de una clase
comprende dos componentes: la declaración y el cuerpo de la clase.
DeclaraciónDeLaClase {
CuerpoDeLaClase
}
Como mínimo, la declaración de una clase
debe contener la palabra clave class y el nombre de la clase
que está definiendo. Así la declaración más sencilla de una clase se parecería
a esto.
class NombredeClase {
. . .
}
Por ejemplo, esta clase declara una
nueva clase llamada NumeroImaginario.
class NumeroImaginario {
. . .
}
Los nombres de las clases deben ser un
identificador legal de Java y, por convención, deben empezar por una letra
mayúscula. Muchas veces, todo lo que se necesitará será una declaración mínima.
Sin embargo, la declaración de una clase puede decir más cosas sobre la clase.
Más especificamente, dentro de la declaración de la clase se puede.
- declarar cual es la superclase de la
clase.
- listar los interfaces implementados por
la clase
- declarar si la clase es pública,
abstracta o final
3.3
MIEMBROS DE UNA CLASE.
Las clases y tienen miembros que
representan sus datos y comportamiento. Los miembros de una clase incluyen
todos los miembros declarados en la clase, junto con todos los miembros declarados
en todas las clases de su jerarquía de herencia.
· - CAMPO: Los campos son
variables declaradas en el ámbito de clase. Un campo puede ser un tipo
numérico integrado o una instancia de otra clase. Por ejemplo, una clase
de calendario puede tener un campo con la fecha actual.
· - CONSTANTES: Las
constantes son campos o propiedades cuyo valor se establece en tiempo de
compilación y no se puede cambiar.
· - PROPIEDADES: Las
propiedades son métodos de una clase a los que se obtiene acceso como si fueran
campos de esa clase. Una propiedad puede proporcionar protección a un
campo de clase con el fin de evitar que se cambie sin el conocimiento del
objeto.
· - METODOS: Los métodos
definen las acciones que una clase puede realizar. Los métodos pueden
aceptar parámetros que proporcionan datos de entrada y devolver datos de salida
a través de parámetros. Los métodos también pueden devolver un valor
directamente, sin usar ningún parámetro.
· - EVENTOS: Los eventos
proporcionan a otros objetos notificaciones sobre lo que ocurre, como clics en
botones o la realización correcta de un método. Los eventos se definen y
desencadenan mediante delegados.
· - OPERADORES: Los
operadores sobrecargados se consideran miembros de clase. Si se sobrecarga
un operador, se define como método estático público en una clase. Los
operadores predefinidos (+, *, <, etc.) no se
consideran miembros.
· - INDIZADORES: Los
indizadores permiten indizar un objeto de manera similar a como se hace con las
matrices.
· - CONSTRUCTORES: Los
constructores son métodos a los que se llama cuando el objeto se crea por
primera vez. Se usan a menudo para inicializar los datos de un objeto.
· - DESTRUCTORES: En C#,
los destructores se usan en raras ocasiones. Son métodos a los que llama
el motor de ejecución del runtime cuando el objeto está a punto de quitarse de
la memoria. Generalmente se utilizan para asegurarse de que los recursos
que se deben liberar se controlan apropiadamente.
· - TIPOS ANIDADOS: Los
tipos anidados son tipos declarados dentro de otro tipo. Los tipos
anidados se usan a menudo para describir objetos utilizados únicamente por los
tipos que los contienen.
3.4
AMBITO REFERENTE A UNA CLASE.
El ámbito es el contexto que tiene un
nombre dentro de un programa, determina en qué partes del programa una entidad
puede ser usada.
Esto sirve para que se pueda volver a
definir una variable con un mismo nombre en diferentes partes del programa sin
que hayan conflictos entre ellos.
Si una variable es declarada dentro de
un bloque (método/función/procedimiento), ésta será válida solo dentro de ese
bloque y se destruirá al terminar el bloque. Adicionalmente, la variable no
podrá verse ni usarse fuera del bloque (en el exterior del bloque). La variable
dentro del bloque es una variable local y solo tiene alcance dentro del bloque
que se creó y sus bloques hijos, pero no en bloques hermanos ni padres, una
variable definida fuera de cualquier bloque es una variable global y cualquier
bloque puede acceder a ella y modificarla.
En el caso de programación orientada a
objetos (POO), una variable global dentro de una clase es llamada variable de
instancia, y cada objeto creado con esa clase tiene una. Adicionalmente existen
variables globales que son comunes a un todos los objetos creados con una clase
y son llamadas variables de clase.
Hay dos tipos de alcances, el estático
que también es llamado lexicográfico, donde el alcance se determina en tiempo
de compilación, mientras que las variables de alcance dinámico se verificara en
el hilo de ejecución.
3.5
ESPECIFICADORES DE ACCESO.
En una definición de clase, un
especificador de acceso se utiliza para controlar la visibilidad de los
miembros de una clase fuera del ámbito de la clase.
Los miembros de una clase pueden ser
públicos, privados o protegidos. Las palabras reservadas public, private y protected se
utilizan para controlar el modo de acceso a la clase.
Dentro de una declaración de clase, cada
una de estas palabras se puede utilizar para preceder a una o más declaraciones
de los miembros de una clase:
- Acceso protegido. Los miembros
protegidos significan que sólo se puede acceder a ellos por funciones miembro
dentro de la misma clase y por funciones miembro de clases derivadas de esta
clase.
- Acceso público. Los
miembros públicos son accesibles por cualquier parte del programa.
- Acceso privado. Los
miembros privados sólo pueden ser utilizados por las funciones miembro de la
clase y las funciones amigas de la clase.
3.6
CREACION DE OBJETOS.
Una clase es una plantilla que define
los datos y los métodos del objeto. Un objeto es una instancia de una
clase. Se puede crear muchas instancias de una clase .La creación de una
instancia se conoce como instanciación.
Clase Circulo
Nota: una clase puede tener muchos
objetos diferentes.
Una vez que se define una clase,
el nombre de la clase se convierte en nuevo tipo de dato y se
utiliza tanto como declarar una variable de ese tipo, como para crear objeto
del mismo. La sintaxis para declarar un objeto es:
NombreClase nombreObjeto;
Ejemplo
Circulo miCirculo; //declara la variable
mi circulo
La variable miCirculo es una instancia
de la clase Circulo .La creación de un objeto de una clase se llama
creación de una instancia de la clase. Un objeto es similar a una variable que
tiene un tipo de clase. La creación de variables de un tipo de dato primitivo
se realiza simplemente declarándolas, esta operación crea la variable y
le asigna espacio en memoria.
1.- Creación de la clase.
Una variable de tipo clase es una
variable referencia, que puede contener la dirección de en memoria (o
referencia) de un objeto de la clase o null para una referencia no valida. La
declaración de un objeto simplemente asocia el objeto con una clase, haciendo
al objeto una instancia de esa clase. La declaración no crear el objeto.
Para crear realmente miCirculo (objeto de la clase Circulo) se necesita
utilizar el operador new con el
objeto de indicar a la computadora que cree un objeto miCirculo y asigne
espacio de memoria para ella.
La sintaxis para crear un objeto es:
nombreObjeto = new
NombreClase();
Ejemplo
La siguiente sentencia crea un objeto,
miCirculo, y le asigna memoria:
miCirculo = new Circulo();
Declaración e Instanciación
Se puede combinar la declaración y
la instanciación en una sola sentencia con la siguiente sintaxis:
NombreClase nombreObjeto = new
NombreClase();
Ejemplo
Creación e instanciación de miCirculo en
una etapa:
Circulo miCirculo = new Circulo();
3.7
PUNTERO THIS.
El this es un puntero (C++) o
referencia (Java) al objeto.
El programador no lo crea ni lo
inicializa. Cuando se llama a una función miembro, el código oculto genera el
this con la dirección del objeto y lo pasa como parámetro, en Java, sólo se
puede usar this dentro del cuerpo de la definición de un método
de instancia, nunca en el cuerpo de un método de clase.
USO
DEL THIS.
public
class Circulo {
static int numCirculos = 0;
public static final double
PI=3.14159265358979323846;
public double x, y, r;
public Circulo(double x, double
y, double r) {
this.x = x;
this.y = y;
this.r = r;
numCirculos++;
}
public Circulo(double r) { this(0.0,
0.0, r); }
public Circulo(Circulo c) { this(c.x,
c.y, c.r); }
public Circulo() { this(0.0,
0.0, 1.0); }
public double Perimetro() {return
2.0 * PI * r;}
public double Area() {return
PI * r * r;}
}
3.8
CONSTRUCTORES Y DESTRUCTORES.
CONSTRUCTOR
Un constructor es un método especial
de una clase que se llama automáticamente siempre que se declara un objeto de
esa clase; su función es inicializar el objeto y sirve para asegurarnos que los
objetos siempre contengan valores válidos.
Cuando se crea un objeto en Java se realizan las siguientes operaciones de forma automática:
1. Se
asigna memoria para el objeto.
2. Se
inicializan los atributos de ese objeto con los valores predeterminados por el
sistema.
3. Se
llama al constructor de la clase que puede ser uno entre varios.
El
constructor de una clase tiene las siguientes características:
· * Tiene el mismo nombre que la clase a la que
pertenece.
· * En una clase puede haber varios constructores con el
mismo nombre y distinto número de argumentos (se puede sobrecargar)
· * No se hereda.
· * No puede devolver ningún valor (incluyendo void).
· * Debe declararse público (salvo casos excepcionales)
para que pueda ser invocado desde cualquier parte donde se desee crear un
objeto de su clase.
INVOCAR UN
METODO CONSTRUCTOR
Un constructor se invoca cuando se crea un objeto
de la clase mediante el operador new; si es necesario invocarlo en otras
situaciones, la llamada a un constructor solo puede realizarse desde dentro de
otro constructor de su misma clase y debe ser siempre la primera instrucción.
Si tenemos varios métodos constructores en la
clase, podemos llamar a un constructor desde otro utilizando this.
Por ejemplo, si en el constructor con parámetros de
la clase Fecha fuese necesario llamar al constructor sin parámetros de la misma
clase escribimos:
public Fecha(int d, int m, int a) {
this(); // llamada al constructor sin parámetros
dia = d;
……….
}
DESTRUCTOR
Un destructor es un método cuyo objetivo
es el de eliminar toda la memoria que ocupo un objeto, en Java no es necesaria
la definición de destructores, pues el mismo lenguaje se encarga de la eliminación
y liberación de la memoria ocupada por un objeto, esto se realiza cada vez que
un objeto pierde todas sus referencias.
Existen dos tipos de destructores, según
se declaran, pueden ser públicos o privados.
· * PUBLICOS: se llama
desde cualquier parte del programa para destruir el objeto.
· * PRIVADO: no se
permite la destrucción del objeto por parte del usuario.
3.9
CLASES PREDEFINIDAS.
Uno de los puntos fuertes de Java es la
gran cantidad de clases predefinidas que posee, dichas clases pueden ser
utilizadas por los programadores sin necesidad de reinventar la rueda.
- CLASES CONTENEDORAS O
WRAPPERS
En Java existen una serie de clases
predefinidas equivalentes a los tipos primitivos denominadas wrappers, clases
contenedoras o envoltorios, el identificador de cada una de estas clases es el
mismo que el del tipo primitivo correspondiente pero con la letra inicial en
mayúsculas (salvo int - Integer y char - Character). Cada una de estas clases
declaran un conjunto de métodos de gran utilidad; el uso de estas clases puede
ser especialmente interesante para realizar determinadas operaciones mediante
los métodos que implementan.
- OBJETOS DE LA CLASE
CHARACTER
La clase predefinida Character permite
trabajar con instancias a las que se les puede asociar un único carácter
Unicode. Esta clase incluye un conjunto de métodos que facilitan la
manipulación de datos de tipo primitivo char.
El siguiente código muestra como crear
referencias e instancias de la clase Character:
Character
a1;
a1 =
new Character('A');
Character
a2 = new Character('B');
-
OBJETOS DE LA CLASE
STRING
String es una clase predefinida y
especial de Java definida en la librería o paquete java.lang y orientada a
manejar cadenas constantes de caracteres. Una instancia de la clase String es
inmutable, es decir, una vez que se ha creado y se le ha asignado un valor,
éste no puede modificarse (añadiendo, eliminando o cambiando caracteres). El
siguiente código muestra diferentes ejemplos de creación de referencias e
instancias de la clase String:
String cortesia = new
String("Buenos dias");
// O bien, al ser una clase muy habitual
en la forma abreviada:
String saludo = "Hola";
// O tambien:
String
despedida;
despedida
= "Adios";
3.10
DEFINICION, CREACION Y REUTILIZACION DE PAQUETES/LIBRERIAS.
Los paquetes Java agrupan las clases en
librerías (bibliotecas). Los paquetes Java se utilizan de forma similar a como
se utilizan las librerías en C++, sólo que en Java se agrupan clases y/o
interfaces.
En los paquetes las clases son únicas,
comparadas con las de otros paquetes, y permiten controlar el acceso; esto es,
los paquetes proporcionan una forma de ocultar clases, evitando que otros
programas o paquetes accedan a clases que son de uso exclusivo de una
aplicación determinada.
Los paquetes se declaran utilizando la
palabra reservada package seguida del nombre del paquete. Esta
sentencia debe estar al comienzo del fichero fuente, concretamente debe ser la
primera sentencia ejecutable del código Java, excluyendo, los comentarios y
espacios en blanco. Por ejemplo:
package figuras;
public class Circulo {
. . .
}
En este caso, el nombre del paquete es figuras.
La clase Circulo se considera como parte del paquete. La
inclusión de nuevas clases en el paquete es simple, se ha de colocar la misma
sentencia al comienzo de los ficheros que contengan la declaración de las
clases. Cada uno de los ficheros que contengan clases pertenecientes a un mismo
paquete, deben incluir la misma sentencia package, y solamente
puede haber una sentencia package por fichero. La sentencia package colocada
el comienzo de un fichero fuente afectará a todas las clases que se declaren en
ese fichero, se pueden referenciar paquetes precediendo con su nombre la clase
que se quiere usar. También se puede usar la palabra reservada import,
si se van a colocar múltiples referencias a un mismo paquete.
La sentencia import se
utiliza para incluir una lista de paquetes en los que buscar una clase
determinada, y su sintaxis es:
import nombre_paquete.Nombre_Clase;
Esta sentencia, o grupo de ellas, deben
aparecer antes de cualquier declaración de clase en el código fuente.
3.11
MANEJO DE EXCEPCIONES.
El manejo de excepciones es una técnica de programación que
permite al programador controlar los errores ocasionados durante la ejecución
del programa.
El manejo de excepciones ayuda al
programador a remover el código para manejo de errores de la línea principal de
ejecución, además se puede elegir entre manejar todas las excepciones, las de
cierto tipo o de las de grupos relacionados, esto hace que la probabilidad de
pasar por alto los errores se reduzca y a la vez hace los programas más
robustos. Pero es importante utilizar un lenguaje de programación que soporte
este manejo, de lo contrario el procesamiento de errores no estará incluido y
hará el programa más vulnerable. Este manejo está diseñado para procesar
errores que ocurren cuando se ejecuta una instrucción, algunos ejemplos son:
desbordamiento aritmético, división entre cero, parámetros inválidos de método
y asignación fallida en la memoria. Sin embargo, no está diseñado para procesar
problemas con eventos independientes al programa como son pulsar una tecla o
clic al mouse.
Las excepciones se dividen en
verificadas y no verificadas. Es importante esta división porque el compilador
implementa requerimientos de atrapar o declarar para las verificadas lo que
hará que se detecten las excepciones automáticamente y de acuerdo al lenguaje
de programación utilizado se utilizará un método para corregirlas. Sin embargo
para las no verificadas se producirá un error indicando que deben atraparse y
declararse. Por eso el programador debe pensar en los problemas que pueden ocurrir
cuando se llama a un método y definir excepciones para verificarse cuando sean
importantes.