Está en la página 1de 17

UNIDAD I: CONCEPTOS BSICOS DEL PARADIGMA DE OBJETOS Contenidos de la unidad

Concepto de programa en orientacin a objetos. Objetos. Mensajes. Mtodos. Relaciones de conocimiento entre objetos. Clases.

Objetivos de la unidad
Entender el concepto de objeto. Entender la diferencia entre objeto y clase. Aprender a utilizar los elementos bsicos del lenguaje Java.

Unpabimodal

Programacin Orientada a Objetos

Introduccin: Por qu orientacin a objetos?


La construccin de software implica mapear la realidad en un modelo abstracto. Qu es un modelo? Una de las tcnicas ms importantes para crear, entender y manejar sistemas complejos es la abstraccin. Abstraccin es la supresin u ocultamiento de algunos detalles de un proceso o artefacto, para entender ms claramente otros aspectos, detalles o estructuras. Mediante la abstraccin se construye un modelo del sistema actual. Las metodologas tradicionales no son adecuadas para modelar el mundo. La orientacin a objetos reduce la brecha (gap) semntica entre el mundo real y el mundo de los modelos.

Realidad

Brecha semntica

Modelo de objetos unAuto unaPersona unAvion unaTortuga

Las tcnicas de orientacin a objetos permiten: Construir software ms fcil de entender al reducir la brecha semntica entre el mundo de los problemas y el mundo de los modelos. Construir software fcilmente modificable y extensible. Construir software reusable

Unpabimodal

Programacin Orientada a Objetos

Qu es un programa en el paradigma de objetos?


Un programa en el paradigma de orientacin a objetos es una red de objetos que interactan o cooperan entre s envindose mensajes. Cada objeto provee un servicio o ejecuta alguna accin que ser usada por los dems miembros de la comunidad.

c
Disear un programa orientado a objetos es semejante a organizar una comunidad de individuos. Cada miembro de la comunidad tiene asignadas determinadas responsabilidades. El objetivo de la comunidad se logra con el trabajo de cada miembro y las interacciones entre cada uno de ellos. Un objeto enva un mensaje a otro objeto responsable de la accin. El mensaje representa un requerimiento para ejecutar esa accin. El objeto que recibe el mensaje se denomina objeto receptor. En respuesta a ese mensaje el objeto receptor ejecutar algn mtodo para satisfacer el requerimiento.

Mensaje
Emisor del mensaje nombre y argumentos Receptor del mensaje

En el siguiente ejemplo el objeto objetoEmisor enva al objeto 2 el mensaje sqrt (para que ste devuelva su raz cuadrada). El objeto 2 encuentra el mtodo apropiado para resolver el mensaje y le devuelve como respuesta el objeto 1.41.

Unpabimodal

Programacin Orientada a Objetos

sqrt

2
objetoEmisor mtodo sqrt
1.41

Qu es un objeto?
Un objeto representa una abstraccin del mundo real. Puede representar un objeto fsico o conceptual. Por ejemplo: un cliente de un banco - una cuenta bancaria - la cola del banco.

unaPersona unAuto unaTortuga unAvion unaCuentaBancaria

Un objeto es una entidad que tiene un conjunto de responsabilidades y que encapsula un estado interno. Las responsabilidades o servicios que realiza el objeto describen el comportamiento del objeto.

servicios

estado interno

Unpabimodal

El conjunto de mensajes que un objeto sabe responder determina su protocolo. El protocolo de un objeto define las reglas que los dems objetos deben seguir para comunicarse con l. Los protocolos representan contratos entre los objetos que envan los mensajes y los objetos que responden. Tanto el emisor como el receptor tienen su responsabilidad y deben estar bien establecidas ambas partes del contrato.

Programacin Orientada a Objetos

Relaciones de conocimiento entre objetos.


Para que un objeto pueda enviar mensajes a otro lo tiene que conocer. Una vez que se conocen ambos objetos son colaboradores. Hay colaboradores que son habituales (permanentes) dado que siempre colaboran con un objeto dado, mientras que hay otros que colaboran con el objeto slo para resolver una determinada tarea. Los colaboradores habituales se llaman colaboradores internos ya que forman parte de la implementacin o estado interno del objeto. Un objeto define en su estado interno los nombres de sus objetos colaboradores y mediante ese nombre les puede enviar mensajes. Por ejemplo, un objeto automvil conoce su nmero de patente, adems tiene un motor, un tanque de combustible y adems pertenece a un determinado propietario. sto significa que los objetos nmero de patente, motor, tanque de combustible y propietario son colaboradores del objeto automvil. Por lo tanto, el objeto automvil deber definir en su estado interno los nombres que le va a dar a estos colaboradores. Algunos de estos colaboradores representan caractersticas propias del objeto (por ejemplo, el nmero de patente), otros representan partes del objeto (por ejemplo, el motor y el tanque de combustible) mientras que otros representan otros objetos cooperantes (el propietario del automvil). Un objeto presenta externamente un protocolo formado por todos los mensajes que sabe responder, e internamente una implementacin formada por los mtodos y los nombres que ese objeto le da a sus colaboradores ms habituales.

mensajes

mtodos

variables internas

Encapsulamiento.
Como dijimos anteriormente, los objetos pueden tener un estado interno que, en trminos de implementacin, est formado por variables de estado que capturan el conocimiento del objeto. Por ejemplo, una cuenta bancaria conoce su saldo y su titular. Esto significa que el objeto cuenta bancaria tendr en su estado interno una variable que referencie al objeto titular y otra variable que represente a su saldo. El estado interno de un objeto est encapsulado. El encapsulamiento del objeto significa que no es posible acceder a las variables de estado desde el exterior del objeto. Sabemos que lo nico que pueden hacer los objetos entre s es enviarse mensajes, por lo tanto, slo puede ser posible obtener el valor de una variable de estado envindole al objeto el mensaje correspondiente. El encapsulamiento asegura que cualquier cambio que ocurra en el estado interno de un objeto es producto de la ejecucin de uno de sus mtodos, sin ninguna otra posibilidad. La nica posibilidad de que un objeto enve un mensaje a otro es porque existe una relacin de conocimiento entre ellos. Por ejemplo, una cuenta bancaria conoce a su titular.

Unpabimodal

Programacin Orientada a Objetos

Mtodo.
Es la implementacin del comportamiento del objeto. El protocolo dice qu hace un objeto; el mtodo dice cmo lo hace. Cuando un objeto recibe un mensaje, ejecuta la operacin requerida ejecutando un mtodo. sto involucra el envo de mensajes a otros objetos con los que colabora. Los mtodos son siempre parte de la implementacin o representacin privada de un objeto. Nunca pertenecen a la parte pblica.

Ejemplo.
Queremos construir una aplicacin para automatizar el manejo de cuentas bancarias. Habr objetos que surgen naturalmente observando el mundo real. Por ejemplo: cajero automtico, caja de ahorro, cliente, etc.
1234/5 Anala Pires

1234/5 2224/7 2224/7

1234/5 Juan Perez

1234/5
Asfghj fghfhgf

Pedro Toledo

El siguiente podra ser el modelo de objetos inicial de la aplicacin: Concentrmonos por el momento solamente en los objetos cajaDeAhorro.

unaCajaDeAhorro

unaColeccionDeCuentas
Unpabimodal

unaCajaDeAhorro

unCajeroAutomtico

unaCuentaCorriente

Programacin Orientada a Objetos

Para modelar las cajas de ahorro debemos describir: 1. En primer lugar, el comportamiento de la caja de ahorro (los mensajes que puede responder). Debemos preguntarnos: Para qu sirve una caja de ahorro? Qu servicios debe proveer? Qu comportamiento tiene? Esto es lo ms importante desde la perspectiva de la orientacin a objetos, cmo est implementado el objeto es secundario. Definimos al objeto con el comportamiento ms relevante del mismo, que lo distingue de otros objetos. Lo que tiene que saber hacer una caja de ahorro bsicamente es depositar y extraer dinero. Tambin consultar el saldo. Seguramente stas no sern las nicas cosas que har una caja de ahorro pero s son las ms importantes desde el punto de vista del negocio del banco. Por lo tanto, hemos definido los mensajes que entiende una caja de ahorro: depositar extraer -obtenerSaldo 2. Luego describiremos el conocimiento que encapsulan las cajas de ahorro. Para sto debemos preguntarnos: Qu necesita saber el objeto caja de ahorro para llevar a cabo los servicios que provee? Cuando un objeto caja de ahorro recibe mensajes extraer y depositar debe tener almacenado el saldo en alguna variable de modo que se pueda incrementar o decrementar con cada movimiento. Es decir, debe tener una variable saldo en su estado interno. Dado que en un banco existirn muchas cuentas, las mismas se distinguen mediante un nmero de cuenta, que ser especfico para cada cuenta. Por lo tanto, el objeto caja de ahorro tendr una variable nroCuenta como parte de su estado interno. La caja de ahorro tiene un titular que es la persona duea de esa caja de ahorro. El objeto caja de ahorro tendr entonces una variable que llamaremos titular que referenciar a un objeto cliente. Este objeto cliente es un colaborador del objeto caja de ahorro y ste lo conoce y le puede enviar mensajes a travs de la variable titular. Las variables saldo y nroCuenta referenciarn a objetos numricos que tambin son colaboradores del objeto caja de ahorro, al igual que el objeto cliente. Hemos definido entonces las variables internas que encapsula un objeto caja de ahorro: saldo - nroCuenta titular

mensajes mtodos depositar(monto)


depositar(m) depositar: m saldo:= saldo = saldo + m extraer(m) extraer: m saldo if (saldo >m > m) saldo = :saldo -m ifTrue [saldo:= saldo- m] obtenerSaldo () ^saldo return saldo

variables internas numero titular titular saldo saldo

2345/6

extraer(monto)

obtenerSaldo()

Unpabimodal

unaCajaDeAhorro

10

Es

Programacin Orientada a Objetos

importante notar que las variables mantienen referencias (punteros) a objetos. Un puntero es una variable que contiene la direccin donde se encuentra un objeto en la memoria. Los punteros no se manejan explcitamente; cuando el objeto caja de ahorro necesite enviarle un mensaje al objeto cliente lo har a travs de la variable titular. Profundizaremos sto ms adelante.

DEFINICIN DE MTODOS USO DE LA VARIABLE THIS


Volviendo a la aplicacin del avin del Prctico 1, pediremos al avin que dibuje en su recorrido un rectngulo de base 20 y altura 30 mediante el siguiente cdigo: tango01.oeste(); tango01. ir(20); tango01. norte(); tango01. ir(30); tango01.este(); tango01. ir( 20); tango01. sur(); tango01. ir(30) Ahora, supongamos que queremos que el avin dibuje nuevamente el mismo rectngulo. La nica manera de lograrlo es copiar y pegar todo el cdigo para ejecutarlo nuevamente. sto no es bueno porque es muy probable que introduzcamos errores de programacin, por ejemplo, olvidarnos una lnea al copiar y pegar. Tengamos en cuenta tambin que hasta ahora trabajamos con un solo avin, pero en la aplicacin podran existir muchos de ellos (todos con el mismo comportamiento). Si quisiramos que otro avin distinto tambin dibuje el rectngulo sera muy engorroso, ya que no slo deberamos copiar y pegar sino tambin cambiar en cada expresin el nombre del objeto. Si el robot referenciado fuera tango02 entonces la secuencia de expresiones sera: tango02. oeste(); tango02. ir(20); tango02. norte(); tango02. ir(30); tango02. este(); tango02. ir(20); tango02. sur(); tango02. ir(30). Para solucionar este problema, es posible definir una secuencia de mensajes y asignarle un nombre. De esta manera, sera posible enviar al objeto esta secuencia de mensajes como si fuera un nico mensaje. Esta secuencia de mensajes con nombre la llamamos mtodo. Por ejemplo, podramos definir un nuevo mtodo llamado rectngulo, de modo tal que podramos enviarle a ambos objetos avin (tango01 y tango02) el mensaje rectngulo, del siguiente modo: tango01. rectngulo().

Unpabimodal

Programacin Orientada a Objetos

tango02. rectngulo(). Veamos cmo sera la implementacin del mtodo rectngulo:

rectngulo
/* Permite que el avin que recibe el mensaje dibuje durante su recorrido un rectngulo de base 20 y altura 30 */ this.oeste(); this.ir(20); this.norte(). this.ir(30); this.este(); this.ir(20); this.sur(); this.ir(30); Como vemos, existe una diferencia entre el cdigo del mtodo con respecto al anterior: la variable tango01 o tango02 que referencian al objeto avin no est incluida en el mtodo, sino que es reemplazada por la variable this. Tengamos en cuenta que el mtodo representa una secuencia de expresiones que pueden enviarse a cualquier avin: es por eso que no debemos atar el cdigo a un avin especfico. Dentro de un mtodo, this referencia al objeto que recibe el mensaje. Cuando se evala la expresin tango01.rectngulo, la variable this en el mtodo rectngulo hace referencia al avin tango01. Del mismo modo, cuando se evala la expresin tango02. rectngulo, la variable this dentro del mtodo referenciar al avin tango02.

Unpabimodal

Programacin Orientada a Objetos

Qu es una clase?
Siguiendo con el ejemplo de la aplicacin bancaria, debemos tener en cuenta que, seguramente tendremos, no una caja de ahorro, sino muchas, quizs miles. Cada una de ellas se comportar como el objeto caja de ahorro de nuestro ejemplo, y todas tendrn la misma estructura interna. Es decir, todas las cajas de ahorro del banco sabrn depositar, extraer y devolver el saldo; adems, internamente tendrn un saldo, un titular y un nmero de cuenta. Lo que s variar entre todas ellas son los datos especficos de cada una: cada cuenta tendr un nmero, un titular y un saldo especficos. Por lo tanto, no tendra sentido describir para cada objeto caja de ahorro su comportamiento o su estructura. Se realiza entonces una abstraccin describiendo todo aquello que es comn a todos los objetos caja de ahorro (el comportamiento y la estructura). Se define as la clase CajaDeAhorro. Una clase define las caractersticas comunes de objetos que comparten un mismo comportamiento. Una clase contiene la descripcin de las caractersticas comunes de todos los objetos que pertenecen a ella. En particular, la especificacin del comportamiento la definicin de la estructura interna la implementacin de los mtodos Cuando un objeto recibe un mensaje busca en su clase el mtodo asociado y lo ejecuta. Tengamos en cuenta que, si bien anteriormente dibujamos los mtodos en los objetos, en realidad, se encuentran en la clase. Por lo tanto, cuando diseamos o programamos definimos clases. Dado que la clase CajaDeAhorro contiene la especificacin de los objetos cajaDeAhorro, la clase permitir crear nuevos objetos de su clase. Todos los objetos que se crean a partir de una determinada clase se denominan instancias de esa clase. As, un objeto cajaDeAhorro es instancia de la clase CajaDeAhorro, mesa es una instancia de la clase String, 2 es una instancia de la clase Integer. El protocolo que define una clase para sus instancias se denomina protocolo de instancia. En definitiva, podemos pensar en una clase como si fuera: un repositorio de cdigo: ya que en ella especificamos los mensajes con sus mtodos correspondientes. una fbrica de objetos: ya que una clase crear objetos que respondan a su especificacin. Cada fbrica (o clase) genera productos ( u objetos) de una nica clase. Ejemplos: la clase CajaDeAhorro producir cajas de ahorro la clase Menu producir menes para interfaces de usuario Todos los objetos son instancias de una clase dada.

Unpabimodal

Programacin Orientada a Objetos

10

Diagrama de clase

norte()

sur() brushUp brushUp()

posicion direccion batera tanque

tanque() ir() : brushDown()

Avin
Cmo crear instancias?
Una vez creada la clase podemos obtener una instancia enviando a la clase el mensaje new. La expresin new Avion(); permite obtener un objeto de clase Avion. La expresin new CajaDeAhorro(); permite obtener un objeto de clase CajaDeAhorro. unaCajaDeAhorro = new CajaDeAhorro(); unaCajaDeAhorro.depositar(100); La variable temporal unaCajaDeAhorro permite referenciar al objeto creado. A travs de ese nombre enviamos mensajes al objeto. Recordemos que las variables en Java deben declararse y asignarles el tipo de dato correspondiente. Por lo tanto, las expresiones quedaran de la siguiente manera:

CajaDeAhorro unaCajaDeAhorro = new CajaDeAhorro(); unaCajaDeAhorro.depositar(100);

Cmo crear una clase?


Para poder crear y usar objetos debemos primero crear la clase. El siguiente cdigo permite crear la clase Perro: public class Perro {

Unpabimodal

private int tamao; private String nombre; private String alimento;

Variables de instancia

Programacin Orientada a Objetos

11

public void ladrar() { System.out.println(Guau! Guau!); } public String getNombre() { return nombre } public void setNombre(String nom) { nombre = nom; } Mtodos

} El modificador public significa que la clase es accesible pblicamente. Para probar la clase creada deberemos crear otra clase. En este caso, crearemos una aplicacin Java, es decir, una clase que contenga un mtodo main. Es en este mtodo main donde el programa comienza su ejecucin. public class TestPerro { public static void main (String[ ] args) { Perro brisa = new Perro(); brisa.ladrar(); Perro gandul = new Perro(); gandul.ladrar(); } }

Cmo crear mtodos?


Un mtodo consiste bsicamente de: un encabezamiento y una secuencia de expresiones. El encabezado tiene la siguiente forma: <control de acceso><tipo del valor devuelto><nombre del mtodo><parmetros> Control de acceso puede ser public, private o protected. Un mtodo privado slo puede ser invocado por mtodos de la misma clase. Un mtodo pblico puede ser invocado por un mtodo de cualquier otra clase. El acceso protegido lo analizaremos ms tarde. Veamos algunos ejemplos:

Unpabimodal

Mtodo de la clase Avin public void cuadrado( lado){ /* El avin que recibe el mensaje dibuja un cuadrado */ this.dejarTraza(); this.este(); this.ir(lado);

Programacin Orientada a Objetos

12

this.sur(); this.ir(lado); this.oeste(); this.ir(lado); this.norte(); this.ir(lado); } Mtodos de la clase CajaDeAhorro public void depositar (unMonto){ /* Deposita unMonto en la caja de ahorro que recibe el mensaje */ saldo = saldo + unMonto } public int obtenerSaldo() { /* Devuelve el saldo de la cuenta que recibe el mensaje */ return saldo }

Mtodos accessors
Slo los objetos pueden acceder a sus variables de instancia. No es posible pedirle a otro objeto que devuelva su variable de instancia del siguiente modo: unAuto = new Auto(); unAuto. color Slo podemos obtener esa informacin envindole un mensaje al objeto: unAuto.obtenerColor() Del mismo modo, si quisiramos dar al auto un color determinado, necesitaramos enviar al objeto un mensaje como el siguiente: unAuto. ponerColor(rojo) Para que las expresiones anteriores funcionen, es decir, para lograr que los objetos auto entiendan los mensajes obtenerColor y ponerColor: deberemos definir en su clase los mtodos correspondientes: public String obtenerColor() { /* Devuelve el color del auto que recibe el mensaje */ return color }

public void ponerColor(unString) { /* Coloca al auto un color al auto que recibe el mensaje */ color = unString

Unpabimodal

} Estos mtodos se denominan getters (en el caso de obtenerColor) y setters (ponerColor:) o, en general, accesors porque nos permiten acceder a los valores de las variables de instancia. Los getters son mtodos que permiten acceder a las variables de instancia. Los setters son mtodos que permiten setear o dar un valor a las variables de instancia.

Programacin Orientada a Objetos

13

Los programadores Java utilizan para los accesors los mismos nombres que las variables de instancia anteponindoles los prefijos get y set. Por ejemplo, los mtodos accesors para la variable de instancia color de la clase Auto seran getColor() y setColor() public String getColor() { /* Devuelve el color del auto que recibe el mensaje */ return color } public void setColor(unString) { /* Coloca al auto un color al auto que recibe el mensaje */ color = unString } public int getPatente() { /* Devuelve la patente del auto que recibe el mensaje */ return patente } public void setPatente(unNumero) { /* Coloca unNumero como patente del auto que recibe el mensaje */ patente = unNumero

getColor() setColor() getPatente()

color marca patente

getMarca() setMarca() setPatente()

Auto
Cmo crear instancias inicializadas?
Como dijimos antes, podemos crear una instancia (objeto) de una clase utilizando new. Por ejemplo, en Java podemos crear un objeto auto mediante la siguiente expresin: new Auto();

Unpabimodal

En realidad lo que estamos haciendo es invocar al constructor de la clase Auto. El constructor contiene el cdigo que se ejecuta cuando se instancia un objeto. Es decir, contiene cdigo que permite inicializar el objeto creado. Si no especificamos ningn constructor para la clase, el compilador definir uno por defecto. El constructor por defecto para la clase Auto es el siguiente:

Programacin Orientada a Objetos

14

public Auto() { // cdigo del constructor } Podramos definir el siguiente constructor: public Auto() { color = rojo; marca = Ford; } Este constructor nos es til slo en el caso que el desarrollador conozca de antemano que el color de los objetos Auto ser rojo y la marca Ford. Para el caso en que se quiera permitir al programador que usa la clase Auto que decida qu color y marca asignar al objeto Auto, podramos definir un mtodo setter setColor() y otro setMarca()

public class Auto { String color; String marca; public void setColor(String col) { color = col; } public void setMarca(String m) { marca = m } }

public class UsarAuto { public static void main(String [] args) { Auto a = new Auto(); a.setColor(rojo); a.setMarca(Ford); } } El problema con esta solucin es que el programador est obligado a usar 3 sentencias, en este caso, para crear una instancia inicializada (una para crear el objeto auto, otra para asignarle el color, y otra para asignarle la marca). Podemos solucionar sto creando un constructor:

Unpabimodal

public class Auto { String color; String marca;

public Auto(String col, mar) {

Programacin Orientada a Objetos

15

color = col; marca = mar; } }

public class UsarAuto { public static void main(String [] args) { Auto a = new Auto(rojo,Ford); } }

Si queremos que los usuarios de la clase Auto tengan dos opciones para crear un auto (una en la que ellos provean el color y la marca, y otra en la que obtengan un auto por defecto, sin especificar color ni marca), podemos hacerlo especificando dos constructores: public Auto { String color; String marca;

public Auto() { color = rojo; marca = Ford; }

public Auto(String col, mar) { color = col; marca = mar; } }

public class UsarAuto { public static void main(String [] args) { // Obtiene el auto por defecto Auto unAuto = new Auto();

Unpabimodal

// Obtiene un auto color verde y marca Toyota Auto otroAuto = new Auto(verde, Toyota); } }

Programacin Orientada a Objetos

16

Si existe ms de un constructor en una clase, los constructores estn sobrecargados (overloaded).

Recordar que, al contrario de lo que ocurre con los mtodos, los constructores no incluyen en su encabezado el tipo de retorno.

Unpabimodal

Programacin Orientada a Objetos

17

También podría gustarte