Lección 2


Subject: java: Leccion #2
Date: Fri, 28 Jun 1996 17:46:04 -0500
From: "Angel Huamani Mejia" 
Organization: Univ. Peruana de Ciencias Aplicadas
To: java@rcp.net.pe

Que tal, amigos de la Lista.

Bueno, aqui estamos nuevamente, antes de nada disculparnos por la
demora en la entrega de esta leccion, en realidad hemos tenido una serie de
contratiempos y cruzes  con el proyecto Multimedia que estamos
desarrollando ademas por los motivos explicados en el correo de
Victor. Todo esto nos impidio cumplir con  ustedes.

Sin mas demora aqui tienen la leccion #2, cualquier consulta por favor, con toda
confianza estamos para ayudarlos.

LosInstructores.

Angel Huamani Mejia     / ahuamani@beta.upc.edu.pe
Victor Anorga Zavala    / vanorga@beta.upc.edu.pe

====================Leccion #2=========================

TECNOLOGIA DE OBJETOS
---------------------

La tecnologia de objetos es una coleccion de analisis, diseno y
metodologias de programacion.

Para que un lenguaje de programacion sea considerado "Orientado a
Objetos" debe soportar minimo cuatro caracteristicas importantes.

Encapsulation
Esto es el lenguaje debera implementar informacion escondida y modular

Polymorphism
En un mensaje enviado a diferentes objetos, el efecto dependera de la
naturaleza del objeto que haya recibido el mensaje.

Inheritance
La herencia hace que se pueden definir clases nuevas y conductas
basadas en clases existentes para re-usar codigo.

Dinamic Binding
Los objetos podrian venir desde cualquier sitio, a traves de la red,
entonces es necesario enviar mensajes a los objetos sin tener conocimiento del
tipo de
objeto al momento de  escribir el codigo, la encuadernacion dinamica provee un
maximo de
flexibilidad mientras un  programa esta en ejecucion.

QUE SON LOS OBJETOS
-------------------
Los objetos son modelos de programacion, con los cuales se pueden
crear botones, listas, menus, etc, en las aplicaciones de software.

En la programacion e implementacion de un objeto los estados
se guardan como variables, las cuales son privadas para los
objetos, a menos que en la creacion se especifiquen como publicas,
las variables son inaccesibles desde fuera de los objetos.

Las conductas de los objetos estan definidos en los Metodos,
los metodos se encargan de modificar las variables para cambiar
los estados o crear nuevos objetos.

COMO CREAR OBJETOS
------------------
En Java, se puede crear un objeto al crear una instancia de una
clase, Cuando una clase es llamada para crear un objeto, se dice entonces que el
objeto es una instancia de la clase.

Por ejemplo:

new Rectangle(x,y,width,height);

new Rectangle(0,0,60,100);

Aqui Rentangle(0,0,60,100), es una llamada al constructor para la
clase Rectangle. Los constructor son metodos especiales provistos en cada clase 
JAVA, que permiten  a los programadores crear e inicializar objetos de este
tipo.

En este caso (new) muestra como inicializar el nuevo objeto  Rectangle,
para ser localizado en el origen (0,0), con un ancho de 60 y un alto de 100.

Un Constructor es un metodo invocado automaticamente, cuando la
instancia de una clase es creada los constructores utilizan los mismos
nombres que las clases y son  usados para inicializar
las variables de los objetos recientemente creados.

Como ya mencionamos los constructores tienen el mismo nombre que la
clase, y una clase puede  tener cualquier numero de constructores con el mismo
nombre, estos se  diferencian por el numero y tipo de argumentos.

Por ejemplo la clase: java.awt.Rectangle tiene los siguientes
constructors,  los cuales se diferencian por los argumentos.

Rectangle()
Rectangle(int x,int y,int width,int height)
Rectangle(int width,int height)
Rectangle(Point p,Dimension d)
Rectangle(Point p)
Rectangle(Dimension d)

mas adelante trataremos acerca de la clase Rectangle.

COMO USAR LOS OBJETOS
---------------------

Una vez creado el objeto, por ejemplo el Rectangulo, necesitamos
moverlo por la pantalla de la computadora es decir imaginemos 2 variables x,y
que definen la posicion del objeto, las cuales van cambiando esto originara el
movimiento de nuestro rentangulo.

Si recordamos un poco, la clase Rectangle, tiene 2 variables x,y que
definen la posicion del objeto Rectangle y ademas tiene un metodo, llamado
move(), el cual permite mover el  rectangulo: move(int x,int y)

REFERENCIA A VARIABLES DE LOS OBJETOS
-------------------------------------

Se puede hacer referencia a las variables de los objetos de la
siguiente manera:

        Referencia_del_objeto.variable

Esto permite ver o modificar las variables de los objetos, por
ejemplo en el caso de la clase Rectangle, si cuadro es la referencia al objeto y
(x,y) las variables  entonces con:
        cuadro.x
        cuadro.y

pueden ser usadas para hacer referencia a las variables del objeto,
en la sentencias y expresiones en JAVA.

Para cambiar los valores de x,y podemos usar lo siguiente:

        cuadro.x = 10;  /// x ahora tiene el valor 10
        cuadro.y = 20;  /// y ahora tiene el valor 20

No olvidemos que la clase Rectangle, tiene otras 2 variables
(Width,Height)

        cuadro.width
        cuadro.Height

Entonces si se nos pide calcular el area del rectangulo, tendriamos:

        area = cuadro.Width * cuadro.Height;

LLAMADA A LOS METODOS DE LOS OBJETOS
------------------------------------

Para hecer referencia a los Metodos de un Objetos se coloca la
referencia del objeto  separada por un punto con el metodo y los argumentos
necesarios  encerrados entre parentesis si no hubiese argumentos los parentesis 
deberan ir vacios :

        Referencia_al_objeto.nombre_del_metodo(argumentos);
        o
        Referencia_al_objeto.nombre_del_metodo();

Por ejemplo, para mover el rectangulo, necesitamos hacer uso del
metodo move(), se acuerdan lo mencionamos hace unos momentos (lineas arriba)
y lo hacemos de la  siguiente manera:

        cuadro.move(10,20);

Esta instruccion llama al metodo move, con 2 valores enteros 10 y 20
pasados como parametros, para que el objeto referenciado como cuadro, se mueva
segun las  coordenadas x,y.
Las llamadas a los metodos,son tambien conocidas como Mensajes.

RECOLECTOR DE BASURA
--------------------

Otros lenguajes de programacion orientado a objetos, requieren que se
guarde la pista de los objetos que se han venido creando para mas adelante si no
se usan tengan que destruirlos, esto trae como consecuencia realizar un trabajo 
tedioso y con posibilidad de cometer muchos errores.
En JAVA, no es necesario preocuparse de los objetos que se van creando ya que si
existe un objeto en tiempo de ejecucion que ya ha dejado de usarse JAVA lo
elimina, este proceso es conocido como el Recolector de Basura.

El Recolector de Basura se ejecuta en prioridad baja, dependiendo de
la situacion y del sistema en el que se este ejecutando Java, puede correr
sincronizada o desincronizadamente.

Se ejecuta sincronizadamente cuando el sistema corre fuera de memoria
o en respuesta a un requerimiento de un programa Java.
Se ejecuta desincronizadamente cuando el sistema es (osioso), es
decir tiene ratos libres entre tarea y tarea, como (Windows 95).

QUE SON LOS METODOS
-------------------

En conclusion los metodos son usados en la programacion orientada a
objetos para  referirse a un procedimiento o una funcion.

QUE SON LAS CLASES
------------------

Las clases representan el modelo clasico de la programacion orientada
a objetos.
Ellas soportan abstraccion de datos y la implementacion dada a los
datos. En Java, cada  nueva clase crea un nuevo tipo.

En conclusion una clase es una coleccion de datos y metodos. Los
datos y los metodos juntos usualmente  sirven para definir el contenido
y las capacidades de algunos tipos  de objetos.

Ejemplo de la estructura de una clase:

class Nonbre_de_clase {
              . . .
              Declaracion de variables
              . . .
              Declaracion de metodos
              . . .
          }

  public class Circle{

        public double x, y;                   // las coordenadas del centro
        public double r;                      // el radio

    // metodos que retornan la circunsferencia y el area de circulo.

        public double circumference() {return 2 * 3.14159 * r;}

        public double area() {return 3.14159 * r * r;}
  }

Obs:
mas adelante explicaremos acerca del ambito de las clases y los
tipos de datos por ahora este ejemplo tiene la intencion de mostrarle como esta
organizada una clase.

LOS OBJETOS SON INSTANCIAS DE LAS CLASES
-----------------------------------------

Ahora que hemos definido parcialmente la clase Circle, haremos
algunas cosas con esta.
Nosotros no podemos hacer nada con la propia clase Circle.
Necesitamos una instancia de la clase, un simple objeto de tipo Circle.

Al definir la clase Circle en Java nosotros hemos creado un nuevo
tipo de dato y por  lo tanto podemos declarar variables de ese tipo por ejemplo:

  Circle c;

Pero esta variable c es simplemente un nombre que se refiere a un
objeto Circle, esta (la variable)  todavia no es un objeto. En java todos los
objetos deben ser creados
dinamicamente.
Esto es casi siempre hecho con la palabra new :

  Circle c;
  c = new Circle();

Ahora hemos creado una instancia de nuestra clase Circle (un objeto
circle) y tenemos asignado este a la variable c, la cual es de tipo  Circle.

MANEJANDO DATOS DE OBJETOS :
----------------------------
Ahora que hemos creado un objeto podemos usar sus campos de datos. La
siguiente sintaxis le debe ser familiar a los programadores de C :

  Circle c = new Circle();

// inicializamos nuestro circulo para tener centro (2,2) y radio  1.0.

  c.x = 2.0;
  c.y = 2.0;
  c.r = 1.0;

USANDO LOS METODOS DEL OBJETO :
-------------------------------

Aqui comienzan a tornarse interesantes las cosas. Para acceder al
metodo de un objeto usamos la misma sintaxis que si accedieramos a los datos de
un objeto :

  Circle c = new Circle();
  double a;
  c.r = 2.5;
  a = c.area();

Chequea la ultima linea, nosotros no decimos :

  a = area(c);
  sino
  a = c.area();

Esta es la razon por la que se llama programacion orientada al
objeto, es decir el objeto es el foco aqui y no la llamada a la funcion. Este es
probablemente el mecanismo simple mas importante de el paradigma
orientado a objetos.

SUBCLASES, SUPERCLASES Y HERENCIA
---------------------------------

Para crear una nueva clase, el programador debe basar esta en una
clase existente. La nueva clase es derivada de la clase existente. La clase
derivada es tambien llamada una subclase de la otra, la cual es  conocida como
la superclase. La derivacion de clases es transitiva : si B es  una subclase de 
A,
y C es una subclase de B, entonces C es una subclase  de A.

Para declarar que una clase es subclase de otra, se debera indicar lo
siguiente:

          class MouseEvent extends Event {
              . . .
          }

Para crear una subclase se debe incluir la clausula (extends) en la
declaracion de la clase esta declaracion por ejemplo, indica que la clase
mouseEvent, es una  subclase de la clase Event.
Una subclase hereda variables y metodos de la superclase, la herencia
es uno de los paradigmas mas potentes de la programacion orientada a objetos.

SOBREESCRIBIENDO METODOS :
--------------------------

Cuando una clase define un metodo usando el mismo nombre, retorna
tipos y argumentos como un metodo en la superclase, el metodo en la clase
sobreescribe el metodo en la superclase. Cuando el metodo es invocado
en la clase la nueva definicion del metodo es llamada, no la antigua
definicion que esta en la superclase.

La tecnica de sobreescribir metodos es importante en la programacion
orientada al objeto. Supongamos que definimos una subclase Elipse de
nuestra clase Circle y definimos nuestras propias versiones de las funciones
area y
circunsferencia para Elipse puesto que las que heredamos de la clase
Circle no se aplican para elipses.

Cabe resaltar que esto no debe confundirse con la sobrecarga de
metodos que significa tener varios metodos con el mismo nombre dentro de una
clase, pero diferenciados por los argumentos de cada uno.

[ Home Page | Lugares Internesantes | Indice de las lecciones ]


© 1996 Descarado Software Limited Co..
Si quieres comentarme algo, hazlo
en Jose Arcos ó en mi dirección de FidoNet 2:346/207.68
1