Vous êtes sur la page 1sur 8

TEMA 2. La Estructura Esttica.

Las Clases
Introduccin .......................................................................................................... 2
Clases vs. Objetos. ................................................................................................ 2
Las Clases ............................................................................................................. 2
Mdulo y Tipo .................................................................................................. 2
Un sistema de Tipos Uniforme ............................................................................. 3
Punto ................................................................................................................. 3
Caractersticas ................................................................................................... 3
Atributos y rutinas ............................................................................................ 3
Acceso Uniforme .............................................................................................. 4
Definicin de la Clase ....................................................................................... 5
Estilo orientado a Objetos ..................................................................................... 5
Instancia Actual ................................................................................................ 5
Clientes y Proveedores ..................................................................................... 6
Llamar a una caracterstica ............................................................................... 6
Principio de Receptor nico.............................................................................. 7
Llamadas Calificadas y No Calificadas ............................................................ 7
Ocultacin de Informacin. .................................................................................. 7
Modificadores de Acceso ................................................................................. 8
Como se ejecuta algo en OO ................................................................................ 8

Introduccin
En este captulo, estudiaremos las tcnicas fundamentales del anlisis, el diseo
y la programacin orientada a objetos.
Los bloques bsicos de la construccin son las clases.

Clases vs. Objetos.


Errneamente se suele pensar que los objetos son el eje central de la
programacin orientada a objetos. La humanidad siempre ha tenido objetos, incluso
desde la primera lnea de cdigo que ha existido. En cambio, los objetos son tiles para
describir la ejecucin de un sistema Orientado a Objetos.
Las clases son un elemento de software, un tipo abstracto de dato equipado con
una implementacin que puede ser parcial o total. Un Tipo de Datos Abstracto es un
conjunto de objetos definido por la lista de operaciones o caractersticas que se pueden
aplicar a estos objetos y por las propiedades de estas operaciones. Los objetos son una
instancia de una clase que puede ser representada en la memoria de un ordenador y
manipulada por un sistema software, y como tal son un objeto representa un elemento
particular de esa clase.
Imaginemos la clase Punto. Esta clase est representada por dos caractersticas:
x e y. Una instancia de esta clase sera un punto cuya caracterstica x fuera 2 e y cuyo
valor fuera 5.
Las clases pueden ser efectivas si la implementacin es total, y diferidas o
abstractas si la implementacin es parcial.
Imaginemos ahora el caso de un Libro, desde el punto de vista del trmino
lingstico. Como tal, un libro tiene sus propias caractersticas individuales: puede ser
nuevo, tener algo escrito, etc. pero tiene una caractersticas bsicas como puede ser: el
ttulo, la editorial, el autor que se aplican a cada ejemplar. Por ejemplo: Programacin
en VB.NET, de la editorial Mc-GrawHill, y cuyo autor es Javier Ceballos. Este conjunto
de propiedades no definen a un objeto, sino a una clase de objetos, que tambin
llamaremos un tipo.
Siguiendo con el mismo ejemplo, denominaremos a la clase que definen una
clase de objetos Pvbnet. Con esta clase definimos un cierto molde para crear objetos de
esta clase. A estos objetos credos con este molde, los denominaremos instancias de la
clase.
Definimos ahora puramente el concepto de clase: Texto Software. Es un proceso
esttico, y que existe independientemente de cualquier ejecucin. Un objeto derivado de
esa clase es una estructura de datos creada dinmicamente que existe slo en memoria
del PC durante la ejecucin del sistema.

Las Clases
Una vez comprendida la diferencia entre clase y objeto, vamos a intentar
comprender la importancia de las clases en la POO. Para entender el enfoque orientado
a objetos, es necesario comprender que las clases desempean dos papeles por separado:
mdulo y tipo.

Mdulo y Tipo
Todo LP incluye siempre alguna facilidad modular y algn sistema de tipos.

Un mdulo 1 es una unidad de descomposicin del software. Como tal es un


concepto sintctico, puesto que la descomposicin del software en mdulos, slo afecta
a la escritura del software, no a lo que el software pueda hacer. De hecho, es posible
escribir un software en un lenguaje cualquiera, y crearlo de manera modular, o no
hacerlo. O incluso, podemos coger un cdigo fuente, y agrupar todos los mdulos en un
nico programa principal. En cualquiera de las dos situaciones, seguiramos teniendo un
sistema con el mismo significado.
Un tipo es una descripcin esttica de ciertos objetos dinmicos: los diferentes
elementos de datos que sern procesados durante la ejecucin del sistema software.
Una clase por lo tanto es un mdulo de descomposicin de software y adems es
un tipo

Un sistema de Tipos Uniforme


Una propiedad fundamental de la Orientacin a Objetos, es que Todos los
objetos son instancias de alguna clase, incluyendo los tipos predefinidos Integer,
double, boolean.
Las ventajas que ofrece un sistema de tipos uniforme son:
-

Siempre es ms simple si slo hay una manera de manejar los objetos.

Describir los tipos bsicos como un TAD y por tanto como clases es simple
y natural: definir la clase Integer con caractersticas que abarquen
operaciones de suma u operaciones como menor igual

Al definir los tipos bsicos como clases, se les permite participar en todos los
campos de la Orientacin a Objetos. En caso contrario, deberamos controlar
diferentes limitaciones y casos especiales.

Punto
Veremos ahora el estudio de un ejemplo sencillo.
Para ello, pensemos en la nocin de Punto.

Caractersticas
En el ejemplo que estamos tratando, para caracterizar un Punto se necesitarn
cuatro funciones de consulta: x, y, (rho) y (theta). La funci
n x da la abscisa de un
punto (coordenada horizontal), y da la ordenada del punto (coordenada vertical) , es la
distancia al origen y esngulo
el
con el eje hjorizontal. X e y representan la
coordenadas cartesianas, mientras que (rho) y (theta) son las coordenadas polares.

Atributos y rutinas
Para un tipo abstracto de dato como Punto est caracterizado por un conjunto de
funciones que describen las operaciones aplicables a las instancias de un TAD. En las
clases las funciones se traducen en caractersticas.

Un mtodo de construccin de software es modular, si ayuda a los diseadores a producir


sistemas de software a partir de elementos autnomos interconectados mediante una estructura simple y
coherente

En el ejemplo del punto, hay dos representaciones comunes para los puntos:
cartesiana y polares. Si nos centramos en la representacin cartesiana, cada instancia de
la clase, tendr dos campos que representan la x y la y.
Sin embargo, para obtener (rho) y (theta), se requiere de algunoslculos.
c
Para calcular (rho) tendremos que hacerz lacuadrada
ra
de la suma de sus
componentes, y para (theta) calcularemos el arctg(y/x) para x distinto de 0.
En este ejemplo, vemos la necesidad de dos tipos/clases de caractersticas.
-

Algunas caractersticas se representarn mediante espacio: asociando un


cierto elemento de informacin a cada instancia de la clase, lo que
denominaremos atributos.

Algunas caractersticas se representarn en el tiempo, es decir: definiendo un


cierto clculo aplicable a todas las instancias de la clase. stas se llamarn
rutinas.

Hay una discusin adicional que afecta exclusivamente a las rutinas. Si estas
rutinas proporcionan algn resultado, las denominaremos funciones. En este caso, las
rutinas seran aquellas que calculan la representacin polar.

Acceso Uniforme
Axioma: Todos los servicios ofrecidos por un mtodo deben estar disponibles
a travs de una notacin uniforme sin importar si estn implementados a travs de
almacenamiento o de clculo.
En muchos casos, debera ser posible manipular los objetos, por ejemplo p1 sin
tener que preocuparse sobre si la representacin interna del punto p1 es cartesiana o
polar. Desde este punto nos hacemos una pregunta Es apropiado distinguir entre
atributos y funciones?
La respuesta la tendremos dependiendo de a quien pertenezca el punto de vista.
Si lo vemos desde el punto de vista del proveedor, o persona que ha creado la clase
punto, o desde el punto de vista del cliente, o persona que ha creado una clase que
utiliza la clase Punto.
Para el proveedor la distincin entre atributos y funciones es necesaria y
significativa, puesto que en algunos casos se puede querer implementar una
caracterstica por almacenamiento y en otros por clculo, y esta decisin se debe reflejar
en alguna parte. Lo que sera errneo, sera forzar a los clientes a tener en cuenta esta
diferencia. Si se est accediendo a p1 es deseable poder obtener su x o sin tener que
saber la forma en que estn implementadas estas consulta.
El principio establece que el cliente debe ser capaz de acceder a una propiedad
de un objeto usando una nica notacin, sin que importe si la propiedad est
implementada por memoria o por clculo. Seguiremos este principio para denotar ms
adelante la invocacin de una caracterstica x para p1 que ser: p1.x, ya sea para acceder
a un campo de un objeto como si se ejecuta una rutina.

Definicin de la Clase
Veamos ahora un ejemplo concreto en Java.
package eliminar;
public class Punto
{
private int x;
private int y;
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
public double rho()
{
return java.lang.Math.sqrt(x^2 + y^2);
}
public void trasladar(int a, int b)
{
x+=a;
y+=b;
}
}

Estilo orientado a Objetos


Estudiemos ahora partes ms concretas de la clase Punto.

Instancia Actual
En el cdigo de la rutina trasladar, parece sencillo lo que hace: traslada las
coordenadas del punto p1 su abscisa y su ordenada segn el valor de a y b. Pero si nos
fijamos con detenimiento, no se ha indicado a que punto nos estamos refiriendo en
concreto. A que x y a que y le estamos sumando a y b?.
Para responder a esta pregunta diremos que el cdigo de una clase, describe las
propiedades y el comportamiento de los objetos de un cierto tipo. Lo que
formalmente llamaremos la instancia actual de la clase. En algn momento quiz sea
necesario referirse a la instancia de una clase usando la palabra clase this.
Un ejemplo de cuando puede ser necesario this, puede ser el siguiente:
imaginemos que queremos controlar que cuando se llame a la rutina distancia, el
argumento punto al que se quiere trasladar sea distinto al de la instancia actual. En el
caso que fuera igual, el resultado de distancia sera 0. Veamos ahora el cdigo que
quedara:

public double distancia(Punto p)


{
double res = 0;
if (p != this)
{
res = Math.Sqrt((X - p.X) ^ 2) + ((Y - p.Y) ^ 2);
}
return res;
}

Clientes y Proveedores
Hay dos formas de utilizar la clase Punto. Una es heredar de ella, y otra es ser un
cliente de punto. La forma ms simple de ser un cliente de Punto es declarar una
entidad del tipo correspondiente.
Sea P una clase. Una clase C que contenga una definicin de la forma
Pnom, se dice que es un cliente de P. Se dice entonces que P es un proveedor de
C.
Hay que tener en cuenta que en esta definicin nom puede ser tanto un atributo o
funcin de C o una entidad local o un argumento de una rutina de C.
package eliminar;
public class Graficos
{
private Punto p;
public Punto getP() {
return p;
}
public void setP(Punto p) {
this.p = p;
}
public void rutina ()
{
p.trasladar(1, 3);
}
}

Antes de que se ejecute la accin de Rutina, el atributo P tendr un valor que


denota una cierta instancia de la clase Punto.
En este ejemplo, se dice que P1 est conectado al objeto Graficos que se
instancie.

Llamar a una caracterstica


La instruccin que aparece en el mtodo Rutina es la invocacin o llamada a una
caracterstica. En la ejecucin de un sistema OO, todos las operaciones se llevan a cabo
invocando a ciertas caractersticas sobre ciertos objetos.
Esta llamada en particular significa: aplicar a P1, la caracterstica de trasladar
de la clase Punto, con los argumentos 1 y 3 que se corresponden con a y b en la
declaracin. Generalmente, una llamada a una caracterstica aparecer como una de las
siguientes formas:

x.f
x.f(u,v)
En llamadas de este tipo, x, se denomina receptor de la llamada, y es una
entidad o expresin que en tiempo de ejecucin estar conectada con un objeto.

Principio de Receptor nico.


En cualquier lenguaje de programacin podramos escribir la llamada a la rutina
trasladar, invocndola de manera tradicional, de tal forma que traslade un cierto punto
de la manera siguiente:
Trasladar (p1, 4, 5);
En cambio, en el paradigma de la OO, esta simetra no existe. Se escoge un
cierto objeto(p1) como receptor relegando a los dems argumentos a tomar un papel
secundario. Esta forma de hacer que todas las llamadas sean relativas a un nico objeto
es un aspecto fundamental del estilo orientado a objetos.

Llamadas Calificadas y No Calificadas


Anteriormente se dijo que todo mtodo orientado a objetos, se basa en llamadas
a caractersticas. Una consecuencia de esta regla, es que la OO contiene ms llamadas
de las que se puede apreciar a primer vista. Hasta ahora, las llamadas que hemos visto
han sido del tipo x.f o x.f(u,v,).
Estas llamadas, emplean la notacin punto (.) y se denominan calificadas,
porque el receptor de la llamada se identifica explcitamente, x que en los dos formas
aparece antes del punto.
En cambio, otras llamadas no son explcitas porque su receptor es implcito.
Imginemos que queremos un procedimiento transformar que traslada y escala un punto.
En el cdigo de la rutina, tenemos llamadas a trasladar y escalar, y a diferencia
de las anteriores, estas no muestran un receptor explcito. Se dice entonces que son
llamadas no calificadas.
En este caso, el receptor sera la instancia actual. Cuando el procedimiento
trasformar se aplica a un cierto receptor, su cuerpo llama a trasladar y escalar al mismo
receptor.
Hasta ahora, las llamadas que hemos visto, son llamadas a rutinas. Lo mismo se
aplica a los atributos, aunque la presencia de llamadas es quizs menos obvia. En la
rutina trasladar se observ la instruccin: x=x+a, x representando a la instancia actual.
Otra forma de expresar esta propiedad es que x es realmente una llamada a una
caracterstica.
De forma general, cualquier instruccin ser de la forma f o f(u,v.-..) es de echo
una forma no calificada,

Ocultacin de Informacin.
Las clases que hasta ahora habamos definido, tenan sus caractersticas
exportadas a todos los posibles clientes. Como es lgico esto no es siempre aceptable.

Modificadores de Acceso
Por defecto, en java cuando declaramos una propiedad, tienen el modificador
default o sin modificador y por lo tanto estn disponibles para todos los clientes que
pertenezcan al paquete.
int x; /*Este atributo es visible por los clientes del mismo paquete.*/
En Java existen diferentes modificadores de acceso: public, private, protected, y
[default]. Pasamos a detallar cada uno de ellos:
Accesibilidad
declarada

Significado

public

Acceso no restringido. Cualquier cliente puede tener acceso a


esa clase

private

Acceso limitado nicamente a la definicin de la propia clase

protected

Acceso limitado a la clase, y a cualquiera que herede de ella.

[default]

Sin ningn modificador. Acceso limitado a aquellos clientes que


no pertenezcan al paquete.

Como se ejecuta algo en OO


La ejecucin de un software orientado a objetos consta de dos pasos:
-

Creacin de un cierto objeto, denominado raz a efectos de la ejecucin

Aplicar un cierto procedimiento de creacin sobre ese objeto.

Para obtener un cdigo ejecutable se deben ensamblar las clases para formar
sistemas. Para crearlo se necesitan tres elementos:
-

Un conjunto de clases del sistema

Seleccin de cual es la clase principal o clase raz

Indicacin de cuales son los procedimientos de creacin de la clase raz.

Vous aimerez peut-être aussi