Está en la página 1de 36

Clases

Clases

 Las clases son la base de Java y de la programación orientada al objeto.


 Las clases definen un nuevo tipo de datos.
 Una vez que se define una clase, se pueden crear objetos de esa clase.
 Una clase es una plantilla de un objeto y contiene básicamente datos y
código.
 Un objeto es una instancia de una clase.
 Una clase de define con el keyword class.
Clases

 La forma más básica de una clase puede definirse como:


Clases

 Los datos definidos dentro de una clase se denominan variables de


instancia. Cada variable está asociada a una instancia de la clase.
 El código está contenido dentro de los métodos.
 Tanto los datos, como los métodos se denominan miembros.
Clases

 En este caso crearemos una clase denominada Box.


 Esta declaración no existe físicamente, sólo es una plantilla.

 Para crear una instancia de Box se utiliza:

Box mybox = new Box(); // create a Box object called mybox


Clases

 Cada instancia contiene sus propios miembros.


 Para acceder a cada uno se utiliza el operador .

mybox.width = 100;
Clases

Volume is 3000.0
Clases

Volume is 3000.0
Volume is 162.0
Objetos

Box mybox; // declare reference to object


mybox = new Box(); // allocate a Box object
Objetos

 La creación de objetos se hace en 2 pasos:


 Declaración de una variable del tipo de la clase. No contiene un objeto, sino
que almacena una referencia a un objeto.
 Creación de una copia física del objeto y asignación a la variable. Esta
creación se realiza mediante new().

Box mybox; // declare reference to object


mybox = new Box(); // allocate a Box object
Objetos

 El operador new() localiza memoria de forma dinámica y automática y


tiene la forma:

class-var = new classname( );

 classname() define el constructor de la clase y corresponde al método


que se ejecuta en el momento de creación de un objeto.
 La clase Box() anterior no tiene definido un constructor, por lo que Java
proporciona un constructor por defecto.
Objetos

 Notar que no necesitamos construir datos primitivos, como int, ya que


Java los trata diferente haciendo la ejecución más eficiente al reducir el
overhead.
 new() localiza memoria para el objeto cuando el código se ejecuta, por
lo que se pueden crear tantos objetos como sea necesario, lo que puede
terminar agotando la memoria.
 Java destruye estos objetos cuando no se utilizan más, es decir, libera la
memoria localizada para ellos.
Objetos

 La asignación en estos casos se comporta diferente a lo que ocurre con


los datos primitivos, por ejemplo en:

Box b1 = new Box();


Box b2 = b1;

 se podría pensar que b2 es una copia de b1, y que por lo tanto son
referencias a 2 objetos distintos.
Objetos

 Pero lo que ocurre, es que b1 y b2 son referencias al mismo objeto.


Métodos

 La forma general de un método es:

type name(parameter-list) {
// body of method
}

 donde type especifica el tipo de dato retornado por el método, que


incluso puede ser una clase definida por nosotros.
 Si este método no retorna nada, type es void.
Métodos

 parameter-list es una secuencia de pares tipo identificador, separados


por coma.
 Los parámetros son esencialmente una serie de datos entregados al
método para realizar su operación.
 Si el método no acepta parámetros, parameter-list estará vacía.
Métodos

 Si un método tiene un retorno distinto a void, este método debe incluir la


sentencia:

return value;

 Como se ha vistos anteriormente, si el método tiene un retorno del tipo


void, se puede terminar anticipadamente su ejecución con:

return;
Métodos
Métodos

 Notar que cada llamada a mybox1.volume() y mybox2.volume() se


ejecuta para cada objeto de forma independiente, utilizando sus datos
internos.
 Notar que estos datos persisten mientras exista el objeto, ya que son
miembros de él.
 Los métodos reciben el control desde el método que los llama, y lo
ceden una vez que terminan de ejecutarse.
 Los métodos deben diseñarse con el fin de reutilizar código lo máximo
posible, así las mejoras en un algoritmo se realizan en una parte del
código.
Métodos
Métodos

 Como se ve en el ejemplo, el retorno de mybox1.volume() y


mybox2.volumen() se almacenan en vol.
 El tipo de retorno declarado debe ser compatible con el valor retornado.
 El tipo retornado debe ser compatible con la variable donde se
almacenarán.
Métodos

 Ciertos métodos requieren parámetros, como en el siguiente ejemplo:

int x, y;
x = square(5); // x equals 25
x = square(9); // x equals 81
y = 2;
x = square(y); // x equals 4
Métodos

 Existe una diferencia en la definición de parámetro y argumento:


 Un parámetro es una variable definida dentro del método que recibe el valor
cuando se llama. En square(i) corresponde a i.
 Un argumento es el valor que se le entrega a un método cuando se invoca,
por ejemplo en square(9), el argumento es 9.
 Esto tiene implicancias importantes con respecto al ámbito de las
variables.
Métodos

 La documentación de Oracle respecto a Java indica lo siguiente:

When the method or constructor is invoked, the values of the


actual argument expressions initialize newly created parameter
variables, each of the declared type, before execution of the
body of the method or constructor. The Identifier that appears in
the FormalParameter may be used as a simple name in the body
of the method or constructor to refer to the formal parameter.
Métodos

 El acceso a las variables desde el exterior, como se ha hecho hasta


ahora, es propenso a errores debido a que es posible setear, o no,
alguna variable de forma errónea.
 La mejor estrategia es definir métodos que seteen estas variables, donde
se puede definir incluso una lógica de revisión.
Métodos
Constructores

 En el programa visto, el método setDim() inicializa las variables del objeto


creado, sin embargo es posible realizar esto mediante un constructor.
 Un constructor inicializa un objeto durante su creación y es similar a un
método.
 Cuando se crea un objeto, se ejecuta el constructor antes que el
operador new retorne.
 El constructor se caracteriza por:
 Tiene el mismo nombre de la clase
 No tiene retorno definido, ni siquiera void.
Constructores
Constructores

 El operador new tiene se utiliza como:

class-var = new classname( );

 Lo que ejecuta el constructor de classname.


 El constructor puede ser el que nosotros definimos, y si no existe, se
ejecuta el constructor por defecto.
Constructores

 El constructor por defecto inicializa los variables miembro de la siguiente


manera:
 0 para valores numéricos
 null para referencias
 false para booleanos
 Este constructor es algunas veces lo único que se necesita.
 Los constructores también pueden ser patametrizados.
Constructores
Sentencia this

 La sentencia this se refiere al objeto propiamente tal y puede usarse en


cualquier parte.
 Dependiendo del contexto, this puede ser redundante, como en el
siguiente ejemplo:
Sentencia this

 No es posible nombrar 2 variables de la misma forma en un método o


como miembros.
 Sin embargo, si se nombran igual una variable en un método y una
variable miembro, la variable miembro termina oculta y no se puede
acceder directamente.
Sentencia this

 Esta variable oculta se puede acceder mediante this.

 En algunos programas se prefiere evitar el uso de this, nombrando siempre las


variables de forma distintas.
 Otros programas utilizan this por claridad.
 Es finalmente una materia de gusto.
Otro ejemplo
Otro ejemplo

Stack in mystack1: Stack in mystack2:


9 19
8 18
7 17
6 16
5 15
4 14
3 13
2 12
1 11
0 10

También podría gustarte