Você está na página 1de 14

PROGRAMACIN AVANZADA I

Ingeniera en Informtica
Licenciatura en Sistemas de Informacin
Profesorado en Informtica

Ao 2013

Introduccin al Paradigma Orientado a Objetos


La programacin orientada a objetos es una filosofa, un modelo de programacin, con su teora y su metodologa, que
conviene conocer y estudiar antes de nada.
Es muy importante destacar que cuando hacemos referencia a la programacin orientada a objetos no estamos hablando
de unas cuantas caractersticas nuevas aadidas a un lenguaje de programacin. Estamos hablando de una nueva forma
de pensar acerca del proceso de descomposicin de problemas y de desarrollo de soluciones de Programacin.
Un poco de historia
Los conceptos de la programacin orientada a objetos tienen origen en Simula 67, un lenguaje diseado para hacer
simulaciones, creado por Ole-Johan Dahl y Kristen Nygaard, del Centro de Cmputo Noruego en Oslo. En este centro se
trabajaba en simulaciones de naves, que fueron confundidas por la explosin combinatoria de cmo las diversas
cualidades de diferentes naves podan afectar unas a las otras. La idea surgi al agrupar los diversos tipos de naves en
diversas clases de objetos, siendo responsable cada clase de objetos de definir sus propios datos y comportamientos.
Fueron refinados ms tarde en Smalltalk, desarrollado en Simula en Xerox PARC (cuya primera versin fue escrita sobre
Basic) pero diseado para ser un sistema completamente dinmico en el cual los objetos se podran crear y modificar
"sobre la marcha" (en tiempo de ejecucin) en lugar de tener un sistema basado en programas estticos.
La programacin orientada a objetos se fue convirtiendo en el estilo de programacin dominante a mediados de los aos
ochenta, en gran parte debido a la influencia de C++, una extensin del lenguaje de programacin C. Su dominacin fue
consolidada gracias al auge de las Interfaces grficas de usuario, para las cuales la programacin orientada a objetos est
particularmente bien adaptada. En este caso, se habla tambin de programacin dirigida por eventos.
Las caractersticas de orientacin a objetos fueron agregadas a muchos lenguajes existentes durante ese tiempo,
incluyendo Ada, BASIC, Lisp y Pascal, entre otros. La adicin de estas caractersticas a los lenguajes que no fueron
diseados inicialmente para ellas condujo a menudo a problemas de compatibilidad y en la capacidad de mantenimiento
del cdigo. Los lenguajes orientados a objetos "puros", por su parte, carecan de las caractersticas de las cuales muchos
programadores haban venido a depender. Para saltar este obstculo, se hicieron muchas tentativas para crear nuevos
lenguajes basados en mtodos orientados a objetos, pero permitiendo algunas caractersticas imperativas de maneras
"seguras". El Eiffel de Bertrand Meyer fue un temprano y moderadamente acertado lenguaje con esos objetivos, pero
ahora ha sido esencialmente reemplazado por Java, en gran parte debido a la aparicin de Internet y a la implementacin
de la mquina virtual de Java en la mayora de navegadores. PHP en su versin 5 se ha modificado; soporta una
orientacin completa a objetos, cumpliendo todas las caractersticas propias de la orientacin a objetos.
Diferencias con otros paradigmas
Es importante aclarar desde un principio la diferencia que existe entre programacin orientada a objetos y un lenguaje
orientado a objetos.
Tradicionalmente, la forma de enfrentarse a esta complejidad ha sido empleando lo que llamamos programacin
estructurada, que consiste en descomponer el problema objeto de resolucin en subproblemas y ms subproblemas hasta
llegar a acciones muy simples y fciles de codificar. Se trata de descomponer el problema en acciones, en verbos. En el
ejemplo de un programa que resuelva ecuaciones de segundo grado, descomponamos el problema en las siguientes
acciones: primero, pedir el valor de los coeficientes a, b y c; despus, calcular el valor del discriminante; y por ltimo, en
funcin del signo del discriminante, calcular ninguna, una o dos races.
Como podemos ver, descomponamos el problema en acciones, en verbos; por ejemplo el verbo pedir, el verbo hallar, el
verbo comprobar, el verbo calcular
Los lenguajes de programacin tradicionales no orientados a objetos, como C, Pascal, BASIC, o Modula-2, basan su
funcionamiento en el concepto de procedimiento o funcin. Una funcin es simplemente un conjunto de instrucciones
que operan sobre unos argumentos y producen un resultado. De este modo, un programa no es ms que una sucesin de
llamadas a funciones, ya sean stas del sistema operativo, proporcionadas por el propio lenguaje, o desarrolladas por el
mismo usuario.

Pgina 1 de 14

PROGRAMACIN AVANZADA I

Ingeniera en Informtica
Licenciatura en Sistemas de Informacin
Profesorado en Informtica

Ao 2013

La programacin orientada a objetos es otra forma de descomponer problemas. Este nuevo mtodo de descomposicin es
la descomposicin en objetos; vamos a fijarnos no en lo que hay que hacer en el problema, sino en cul es el escenario
real del mismo, y vamos a intentar simular ese escenario en nuestro programa.

En el caso de los lenguajes orientados a objetos, como es el caso de C++ y Java, el elemento bsico no es la funcin, sino
un ente denominado precisamente objeto. Un objeto es la representacin en un programa de un concepto, y contiene
toda la informacin necesaria para abstraerlo: datos que describen sus atributos y operaciones que pueden realizarse
sobre los mismos.

Pgina 2 de 14

PROGRAMACIN AVANZADA I

Ingeniera en Informtica
Licenciatura en Sistemas de Informacin
Profesorado en Informtica

Ao 2013

QU ES UN OBJETO?
Existen muchas definiciones que se le ha dado al Objeto. Primero empecemos entendiendo que es un objeto del mundo
real. Un objeto del mundo real es cualquier cosa que vemos a nuestro alrededor. Digamos que para leer este artculo lo
hacemos a travs del monitor y una computadora, ambos son objetos, al igual que nuestro telfono celular, un rbol o un
automvil.
Analicemos un poco ms a un objeto del mundo real, como la computadora. No necesitamos ser expertos en hardware
para saber que una computadora est compuesta internamente por varios componentes: la tarjeta madre, el chip del
procesador, un disco duro, una tarjeta de video, y otras partes ms. El trabajo en conjunto de todos estos componentes
hace operar a una computadora.
Internamente, cada uno de estos componentes puede ser sumamente complicado y puede ser fabricado por diversas
compaas con diversos mtodos de diseo. Pero nosotros no necesitamos saber cmo trabajan cada uno de estos
componentes, como saber que hace cada uno de los chips de la tarjeta madre, o cmo funciona internamente el
procesador. Cada componente es una unidad autnoma, y todo lo que necesitamos saber de adentro es cmo interactan
entre s los componentes, saber por ejemplo si el procesador y las memorias son compatibles con la tarjeta madre, o
conocer donde se coloca la tarjeta de video. Cuando conocemos como interaccionan los componentes entre s, podremos
armar fcilmente una computadora.
Qu tiene que ver esto con la programacin? La programacin orientada a objetos trabaja de esta manera. Todo el
programa est construido en base a diferentes componentes (Objetos), cada uno tiene un rol especfico en el programa y
todos los componentes pueden comunicarse entre ellos de formas predefinidas.
Todo objeto del mundo real tiene 2 componentes: caractersticas y comportamiento.
Por ejemplo, los automviles tienen caractersticas (marca, modelo, color, velocidad mxima, etc.) y comportamiento
(frenar, acelerar, retroceder, llenar combustible, cambiar llantas, etc.).
Los Objetos de Software, al igual que los objetos del mundo real, tambin tienen caractersticas y comportamientos. Un
objeto de software mantiene sus caractersticas en una o ms "variables", e implementa su comportamiento con
"mtodos". Un mtodo es una funcin o subrutina asociada a un objeto.

Pgina 3 de 14

PROGRAMACIN AVANZADA I

Ingeniera en Informtica
Licenciatura en Sistemas de Informacin
Profesorado en Informtica

Ao 2013

Para redondear estas ideas, imaginemos que tenemos estacionado en nuestra cochera un Ford Focus color azul que corre
hasta 260 km/h. Si pasamos ese objeto del mundo real al mundo del software, tendremos un objeto Automvil con sus
caractersticas predeterminadas:
Marca = Ford
Modelo = Focus
Color = Azul
Velocidad Mxima = 260 km/h
Cuando a las caractersticas del objeto le ponemos valores decimos que el objeto tiene estados. Las variables almacenan
los estados de un objeto en un determinado momento.
Definicin terica: Un objeto es una unidad de cdigo compuesto de variables y mtodos relacionados.
Mensajes
Normalmente un nico objeto por s solo no es muy til. En general, un objeto aparece como un componente ms de un
programa o una aplicacin que contiene otros muchos objetos. Es precisamente haciendo uso de esta interaccin como
los programadores consiguen una funcionalidad de mayor orden y modelar comportamientos mucho ms
Complejos.
Un mensaje en la programacin orientada a objetos es la accin de efectuar una llamada a un mtodo, Por ejemplo,
cuando le decimos a un objeto coche que se ponga en marcha estamos pasndole el mensaje ponte en marcha.
En ocasiones, el objeto que recibe el mensaje necesita ms informacin para saber exactamente lo que tiene que hacer;
por ejemplo, cuando se desea cambiar la marcha de nuestro auto, se debe indicar la marcha a la que se quiere cambiar.
Esta informacin se pasa junto con el mensaje en forma de parmetro.
La siguiente figura muestra las tres partes que componen un mensaje:
1. El objeto al cual se manda el mensaje (TuAuto).
2. El mtodo o funcin miembro que debe ejecutar (CambiarDeMarcha).
3. Los parmetros que necesita ese mtodo (Marcha)

Pgina 4 de 14

PROGRAMACIN AVANZADA I

Ingeniera en Informtica
Licenciatura en Sistemas de Informacin
Profesorado en Informtica

Ao 2013

El objeto "T" manda el mensaje "CambiarDeMarcha" con el parmetro "Marcha" al objeto "TuAuto".
Estas tres partes del mensaje (objeto destinatario, mtodo y parmetros) son suficiente informacin para que el objeto
que recibe el mensaje ejecute el mtodo o la funcin miembro solicitada. Los mensajes proporcionan dos ventajas
importantes:
1. El comportamiento de un objeto est completamente determinado (a excepcin del acceso directo a variables
miembro pblicas) por sus mtodos, as que los mensajes representan todas las posibles interacciones que pueden
realizarse entre objetos.
2. Los objetos no necesitan formar parte del mismo proceso, ni siquiera residir en un mismo ordenador para mandarse
mensajes entre ellos (y de esta forma interactuar).
Clases
Una clase es una plantilla que define las variables y los mtodos que son comunes para todos los objetos de un cierto tipo.
Normalmente en el mundo real existen varios objetos de un mismo tipo, o como diremos enseguida, de una misma clase.
Por ejemplo, mi bicicleta es una de las muchas bicicletas que existen en el mundo. Usando la terminologa de la
programacin orientada a objetos, diremos que mi bicicleta es una instancia de la clase de objetos conocida como
bicicletas. Todas las bicicletas tienen algunos estados o atributos (color, marcha actual, cadencia actual, dos ruedas) y
algunos mtodos (cambiar de marcha, frenar) en comn. Sin embargo, el estado particular de cada bicicleta es
independiente del estado de las dems bicicletas. La particularizacin de estos atributos puede ser diferente. Es decir, una
bicicleta podr ser azul, y otra roja, pero ambas tienen en comn
el hecho de tener una variable color. De este modo podemos definir una plantilla de variables y mtodos para todas las
bicicletas. Las plantillas para crear objetos son denominadas clases.
En nuestro ejemplo, la clase bicicleta definira variables miembro comunes a todas las bicicletas, como la marcha actual, la
cadencia actual, etc. Esta clase tambin debe declarar e implementar los mtodos o funciones miembro que permiten al
ciclista cambiar de marcha, frenar, y cambiar la cadencia de pedaleo, como se muestra en la
siguiente figura:

Despus de haber creado la clase bicicleta, podemos crear cualquier nmero de objetos bicicleta a partir de la clase.
Cuando creamos una instancia de una clase, el sistema reserva suficiente memoria para el objeto con todas sus variables
miembro. Cada instancia tiene su propia copia de las variables miembro definidas en la clase.

Pgina 5 de 14

PROGRAMACIN AVANZADA I

Ingeniera en Informtica
Licenciatura en Sistemas de Informacin
Profesorado en Informtica

Ao 2013

Caractersticas de la Programacin Orientada a Objetos


Existe un acuerdo acerca de qu caractersticas contempla la "orientacin a objetos". Las caractersticas siguientes son las
ms importantes:
Abstraccin: denota las caractersticas esenciales de un objeto, donde se capturan sus comportamientos. Cada objeto en
el sistema sirve como modelo de un "agente" abstracto que puede realizar trabajo, informar y cambiar su estado, y
"comunicarse" con otros objetos en el sistema sin revelar cmo se implementan estas caractersticas. Los procesos, las
funciones o los mtodos pueden tambin ser abstrados, y, cuando lo estn, una variedad de tcnicas son requeridas para
ampliar una abstraccin. El proceso de abstraccin permite seleccionar las caractersticas relevantes dentro de un
conjunto e identificar comportamientos comunes para definir nuevos tipos de entidades en
el mundo real. La abstraccin es clave en el proceso de anlisis y diseo orientado a objetos, ya que mediante ella
podemos llegar a armar un conjunto de clases que permitan modelar la realidad o el problema que se quiere atacar.

Encapsulamiento: significa reunir todos los elementos que pueden considerarse pertenecientes a una misma entidad, al
mismo nivel de abstraccin. Esto permite aumentar la cohesin de los componentes del sistema; es decir que esto nos
permite la ocultacin de informacin permitiendo asegurar que el contenido de un objeto se pueda ocultar del mundo
exterior dejndose ver lo que cada objeto necesite hacer pblico.
Algunos autores confunden este concepto con el principio de ocultacin, principalmente porque se suelen emplear
conjuntamente.

Pgina 6 de 14

PROGRAMACIN AVANZADA I

Ingeniera en Informtica
Licenciatura en Sistemas de Informacin
Profesorado en Informtica

Ao 2013

Principio de ocultacin: cada objeto est aislado del exterior, es un mdulo natural, y cada tipo de objeto expone una
interfaz a otros objetos que especifica cmo pueden interactuar con los objetos de la clase. El aislamiento protege a las
propiedades de un objeto contra su modificacin por quien no tenga derecho a acceder a ellas; solamente los propios
mtodos internos del objeto pueden acceder a su estado. Esto asegura que otros objetos no puedan cambiar el estado
interno de un objeto de manera inesperada, eliminando efectos secundarios e
interacciones inesperadas. Algunos lenguajes relajan esto, permitiendo un acceso directo a los datos internos del objeto
de una manera controlada y limitando el grado de abstraccin. La aplicacin entera se reduce a un
agregado o rompecabezas de objetos.

Polimorfismo: comportamientos diferentes, asociados a objetos distintos, pueden compartir el mismo nombre; al
llamarlos por ese nombre se utilizar el comportamiento correspondiente al objeto que se est usando. O, dicho de otro
modo, las referencias y las colecciones de objetos pueden contener objetos de diferentes tipos, y la invocacin de un
comportamiento en una referencia producir el comportamiento correcto para el tipo real del objeto referenciado.
Cuando esto ocurre en "tiempo de ejecucin", esta ltima caracterstica se llama asignacin
tarda o asignacin dinmica.

Pgina 7 de 14

PROGRAMACIN AVANZADA I

Ingeniera en Informtica
Licenciatura en Sistemas de Informacin
Profesorado en Informtica

Ao 2013

Herencia: las clases no estn aisladas, sino que se relacionan entre s, formando una jerarqua de clasificacin.
Los objetos heredan las propiedades y el comportamiento de todas las clases a las que pertenecen. La herencia organiza y
facilita el polimorfismo y el encapsulamiento, permitiendo a los objetos ser definidos y creados como tipos especializados
de objetos preexistentes. Estos pueden compartir (y extender) su comportamiento sin tener que volver a implementarlo.
Esto suele hacerse habitualmente agrupando los objetos en clases y estas en rboles o enrejados que reflejan un
comportamiento comn.

Pgina 8 de 14

PROGRAMACIN AVANZADA I

Ingeniera en Informtica
Licenciatura en Sistemas de Informacin
Profesorado en Informtica

Ao 2013

Cuando un objeto hereda de ms de una clase se dice que hay herencia mltiple.

Pgina 9 de 14

PROGRAMACIN AVANZADA I

Ingeniera en Informtica
Licenciatura en Sistemas de Informacin
Profesorado en Informtica

Ao 2013

RELACIONES ENTRE CLASES


Las relaciones entre clases juegan un papel muy importante en el modelo de objetos. Las clases, al igual que los objetos,
no existen de modo aislado. Por esta razn existirn relaciones entre clases y entre objetos.
Las relaciones entre clases, se deben a dos razones: 1) una relacin de clases puede indicar algn tipo de comparticin 2)
una relacin entre clases puede indicar algn tipo de conexin semntica.
Los tres grandes tipos de relaciones entre clases son:

Generalizacin / especializacin (es-un)


Agregacin (todo-parte//tiene-un)
Asociacin.
RELACIN DE GENERALIZACIN / ESPECIALIZACIN
Uno de los motivos por los cuales las clases se relacionan entre ellas es el hecho de poseer propiedades comunes. Las
clases con propiedades comunes se organizan en superclases. Una superclase representa una generalizacin de las
subclases. De igual modo, una subclase de una clase dada representa una especializacin de la clase superior. La clase
derivada es-un tipo de clase de la clase base o superclase.
Una superclase representa una generalizacin de las subclases. Una subclase de la clase representa una especializacin de
la clase ascendente.
ESPECIALIZACIN GENERALIZACION
Es-un Es-un Es-un Es-un
Es-un Es-un Es-un
En el modelado orientado a objetos es til introducir clases a un cierto nivel que puede no existir en la realidad, pero que
son construcciones conceptuales tiles. Estas clases abstractas tienen como propiedad fundamental que no se pueden
crear instancias de ellas. Por ejemplo nunca crearemos instancias de vehculo sin motor, pero s de bicicleta y patinete.

Pgina 10 de 14

PROGRAMACIN AVANZADA I

Ingeniera en Informtica
Licenciatura en Sistemas de Informacin
Profesorado en Informtica

Ao 2013

RELACIN DE AGREGACIN
Una agregacin es una relacin que representa a los objetos compuestos. Un objeto es compuesto si se compone a su vez
de otros objetos. La agregacin de objetos permite describir modelos del mundo real que se componen de otros modelos,
que a su vez se componen de otros modelos.
Este es un concepto que se utiliza para expresar tipos de relaciones entre objetos parte-de (part-of) o tiene-un (has-a). El
objeto componente, tambin a veces denominado continente o contenedor, es un objeto agregado que se compone de
mltiples objetos.
Tiene-un Tiene-un
Tiene-un Tiene-un
Tiene-un

Pgina 11 de 14

PROGRAMACIN AVANZADA I

Ingeniera en Informtica
Licenciatura en Sistemas de Informacin
Profesorado en Informtica

Ao 2013

RELACIN DE COMPOSICIN
Es un tipo de Agregacin disjunta y estricta:
En este caso las partes slo existen asociadas al compuesto (Slo se accede a ellas a travs del compuesto)

Pgina 12 de 14

PROGRAMACIN AVANZADA I

Ingeniera en Informtica
Licenciatura en Sistemas de Informacin
Profesorado en Informtica

Ao 2013

ASOCIACIN
Una asociacin es una conexin entre clases, una conexin (enlace) semntica entre objetos de las clases implicadas en la
asociacin. El establecimiento de una asociacin define los roles (papeles) o dependencias entre objetos de dos clases y su
cardinalidades (multiplicidad); es decir, cuantas instancias (ejemplares) de cada clase pueden estar implicadas en una
asociacin.
Una asociacin es, normalmente, bidireccional, lo que significa que si un objeto se asocia con otros objetos, ambos
objetos se conocen entre s. Una asociacin representa que objetos de dos clases tienen un enlace entre ellos, lo que
significa por ejemplo, que ellos conocen sobre los otros, estn conectados a, para cada x hay una y, etc. La asociacin se
representa por una lnea que une a las dos clases y el nombre de la asociacin se escribe en la lnea.

Pgina 13 de 14

PROGRAMACIN AVANZADA I

Ingeniera en Informtica
Licenciatura en Sistemas de Informacin
Profesorado en Informtica

Ao 2013

DEPENDENCIA:

La dependencia de clases es un concepto de la programacin orientada a objetos que nos indica la relacin existente entre
dos clases. Como su nombre indica nos est diciendo que una clase depende de otra para realizar su funcionamiento.
Cuando trabajamos con clases es una buena prctica que una clase realice una nica funcin. De manera que las clases
que deban realizar funciones complejas estarn formadas a partir de una asociacin de diversas pequeas clases en las
que delegar cada funcionalidad en concreto.

Pgina 14 de 14

Você também pode gostar