Está en la página 1de 14

I.T.S.C.

Tcnico Superior en Desarrollo de Software

Programacin II

PROGRAMACIN ORIENTADA A OBJETOS

RESEA HISTRICA
En la siguiente imagen vemos la evolucin de los lenguajes de programacin orientados a objetos,
esto no es nuevo, sin embargo es hoy en da que este concepto o tecnologa est acaparando los
desarrollos de software debido a la gran aceptacin, implementacin y popularidad.

Comnmente se piensa que la programacin orientada a objetos es un fenmeno


relativamente reciente dentro de la ciencia de la computacin. Por el contrario, en realidad, casi
todos los conceptos principales actualmente asociados con los programas orientados a objetos,
tales como objetos, clases y jerarquas de herencia, fueron desarrollados en los aos 60 como
parte de un lenguaje llamado Simula, diseado por investigadores en el Centro de Computacin
Noruego (Norwegian Computing Center). Como el nombre lo indica, Simula fue un lenguaje
inspirado por los problemas involucrados en la simulacin de sistemas de la vida real. Sin
embargo, la importancia de estas construcciones, an para los propios desarrolladores de Simula,
fue reconocida parcialmente
En la dcada del 70 Alan Kay organiz un equipo de investigacin en Xerox PARC (Palo Alto
Research Center o Centro de Investigacin Palo Alto). Con una gran presciencia o previsin, Kay
predijo la prxima revolucin en la computacin personal que se desarrollara cerca de una
dcada ms tarde (ver, por ejemplo, su artculo de 1977 en Scientific American). Kay estaba
interesado en descubrir un lenguaje de programacin que fuera entendible para aquellos
profesionales ajenos a la computacin, para la gente comn sin ningn tipo de entrenamiento en el
uso de computadoras. Encontr en las nociones de clases y en la computacin como simulacin
una metfora que fcilmente podra llegar a ser comprendida por los usuarios principiantes, como
luego demostrara mediante una serie de experimentos dirigidos en PARC usando a los chicos
como programadores. El lenguaje de programacin desarrollado por su equipo fue llamado
Smalltalk. Este lenguaje evolucion a travs de varias revisiones durante la dcada. Un artculo
muy popular de la revista Byte de 1981 contribuy para popularizar en gran medida los conceptos
desarrollados por Kay y su equipo en Xerox.
Casi contemporneo al trabajo de Kay fue otro proyecto llevado a cabo al otro lado del continente.
Bjarne Stroustrup, un investigador de los Laboratorios Bell que haba aprendido Simula mientras
completaba su doctorado en la Universidad de Cambridge en Inglaterra, se encontraba

Prof. Rearte, Judith


1/14

I.T.S.C.
Tcnico Superior en Desarrollo de Software

Programacin II

desarrollando una extensin al lenguaje C que facilitara la creacin de objetos y clases. Esto se
transformara luego en el lenguaje C++ .
Con la difusin de informacin sobre estos y otros proyectos similares, comenz un aumento
vertiginoso de la investigacin sobre tcnicas de programacin orientada a objetos. Al momento de
producirse la primera conferencia importante sobre programacin orientada a objetos, en 1986,
hubo literalmente docenas de nuevos lenguajes de programacin compitiendo para ser aceptados.
Entre estos incluidos Eiffel, Objective-C, Actor, Object Pascal, y varios dialectos de Lisp.
En las dos dcadas desde la conferencia de OOPSLA en 1986, la programacin orientada a
objetos ha pasado de ser revolucionaria a ser el movimiento principal, y en este proceso ha
transformado gran parte de la ciencia de la computacin.
Simula: Por los aos 60, los programadores comprendieron que era necesario descomponer los
sistemas de programacin en partes pequeas ms manejables. La introduccin de Simula-67
trajo consigo la primera nocin de objetos, las clases, y una especie de herencia; por lo tanto,
Simula es un hito importante en cualquier debate sobre lenguajes de programacin OO. El
lenguaje fue diseado por OleJohan Dahl, Bjrn Myhrhaug y Kristen Nygaard en el Norwegian
Computing Center ubicado en Oslo. La primer versin del lenguaje, Simula-1, fue presentada en
1966.
Los mdulos de programacin definidos por Simula no se basaron en procedimientos, sino en
objetos fsicos tangibles. Simula tuvo una novedosa manera de plantear los objetos, en donde que
cada objeto tiene sus propios datos y comportamiento.
Smalltalk: Muchos consideran que el primer lenguaje verdaderamente orientado a objetos fue
Smalltalk, desarrollado en el Learning Research Group en Xerox's Palo Alto Research Center a
principios de los 70. En Smalltalk, todo es realmente un objeto, lo que impone el paradigma OO y
hace que sea prcticamente imposible escribir un programa en Smalltalk que no sea OO.
Smalltalk es en realidad un ambiente de programacin interactivo que interpreta cdigo sobre la
marcha (on-the-fly) lo que permite cambiar los parmetros y el cdigo de un programa mientras el
programa est corriendo.
Smalltalk fue el primero en introducir muchos otros conceptos que luego apareceran como
revolucionarios al ser implementados en otras aplicaciones, como los buscadores o exploradores
(browsers), las ventanas y los mens emergentes (pop-up menus). El ambiente se basa en una
mquina virtual, permitiendo a las aplicaciones ser migradas entre diferentes plataformas.
C++: Tiene su origen en un proyecto para simular software corriendo en un sistema distribuido.
Este simulador, de hecho escrito en Simula, es donde Bjarne Stroustrup concibi la idea de
combinar algunas de las caractersticas de Simula con la sintaxis de C. El concepto de clase en
C++ brindaba el mecanismo de encapsulamiento, que hoy por hoy es un requisito esencial de
cualquier lenguaje OO.
Aunque C brind una base slida para C++, tambin se convirti en una carga un tanto pesada. El
hecho de hacer a C++ compatible con su predecesor trajo serios inconvenientes. Aunque C++
proporciona construcciones OO, tambin es posible usar tcnicas de programacin estructurada.
Por este motivo, C++ no es considerado un lenguaje OO puro, si no un lenguaje hbrido.
Java: Los orgenes de Java se encuentran en un lenguaje que se apod Oak. Su creador decidi
que basara su lenguaje en el tan exitoso C++, pero que slo incorporara aquellas caractersticas
de C++ que parecieran valer la pena. Las caractersticas que elimin de C++ fueron la herencia
mltiple, las conversiones automticas de tipos, el uso de punteros, y el esquema de
administracin de memoria de C++. Pero el proyecto fue archivado por falta de inters en el
mercado.
Con la llegada de la Web y el surgimiento de los browsers, la gente de Sun comenz a atar cabos,
y as Oak fue rescatado de la inactividad y renombrado como Java.
C#: Microsoft respondi a la popularidad de Java produciendo una versin de Java llamada Visual
J++. Sin embargo, Microsoft se decidi por una respuesta ms integral. Usando muchas de las

Prof. Rearte, Judith


2/14

I.T.S.C.
Tcnico Superior en Desarrollo de Software

Programacin II

innovaciones que implementaba Java, Microsoft desarroll un lenguaje denominado C# que se


convirti en la base para la plataforma .NET. De igual manera que Java, C# se bas fuertemente
en los xitos y fracasos de lenguajes anteriores.

DISEO ORIENTADO A OBJETOS


La programacin orientada a objetos (POO, u OOP segn sus siglas en ingls) es un
paradigma de programacin que usa objetos en sus interacciones, para disear aplicaciones y
programas informticos.
Su uso se populariz a principios de la dcada de 1990. En la actualidad, existe una gran variedad
de lenguajes de programacin que soportan la orientacin a objetos.
Hoy en da la tecnologa orientada a objetos ya no se aplica solamente a los lenguajes de
programacin, adems se viene aplicando en el anlisis y diseo con mucho xito, al igual que en
las bases de datos. Es que para hacer una buena programacin orientada a objetos hay que
desarrollar todo el sistema aplicando esta tecnologa, de ah la importancia del anlisis y el diseo
orientado a objetos.
La programacin orientada a objetos es una de las formas
S
N
ms populares
de programar
y viene teniendo gran
acogida en el desarrollo de proyectos de software desde
los ltimos aos. Esta acogida se debe a sus grandes
capacidades y ventajas frente a las antiguas formas de
programar.

(a < b)

b = a+c

a = b+c

(b<c)

b=a+c

Tradicionalmente, la programacin fue hecha en una


manera secuencial o lineal, es decir una serie de pasos
consecutivos
con
estructuras
consecutivas
y
bifurcaciones.
Los lenguajes basados en esta forma de programacin
ofrecan ventajas al principio, pero el problema ocurre
cuando los sistemas se vuelven complejos. Estos
programas escritos al estilo espaguetti no ofrecen
flexibilidad y el mantener una gran cantidad de lneas de
cdigo en un slo bloque se vuelve una tarea complicada.

Frente a esta dificultad aparecieron los lenguajes basados en la programacin estructurada. La


idea principal de esta forma de programacin es separar las partes complejas del programa en
mdulos o segmentos que sean ejecutados conforme se requieran. De esta manera tenemos un
diseo modular, compuesto por mdulos independientes que puedan comunicarse entre s. Poco a
poco este estilo de programacin fue reemplazando al estilo espaguetti impuesto por la
programacin lineal.
Entonces, vemos que la evolucin que se fue dando en la programacin se orientaba siempre a ir
descomponiendo ms el programa. Este tipo de descomposicin conduce directamente a
la programacin orientada a objetos.
Pues la creciente tendencia de crear programas cada vez ms grandes y complejos llev a los
desarrolladores a crear una nueva forma de programar que les permita crear sistemas de niveles
empresariales y con reglas de negocios muy complejas. Para estas necesidades ya no bastaba
la programacin estructurada ni mucho menos la programacin lineal. Es as como aparece

Prof. Rearte, Judith


3/14

I.T.S.C.
Tcnico Superior en Desarrollo de Software

Programacin II

la programacin orientada a objetos (POO). La POO viene de la evolucin de la programacin


estructurada; bsicamente la POO simplifica la programacin con la nueva filosofa y nuevos
conceptos.
La POO se basa en la dividir el programa en pequeas unidades lgicas de cdigo. A estas
pequeas unidades lgicas de cdigo se les llama objetos. Los objetos son unidades
independientes que se comunican entre ellos mediante mensajes.

VENTAJAS DE UN LENGUAJE ORIENTADO A OBJETOS

Fomenta la reutilizacin y extensin del cdigo.


Permite crear sistemas ms complejos.
Relacionar el sistema al mundo real.
Facilita la creacin de programas visuales.
Construccin de prototipos
Agiliza el desarrollo de software
Facilita el trabajo en equipo
Facilita el mantenimiento del software

Lo interesante de la POO (programacin orientada a objetos) es que proporciona conceptos y


herramientas con las cuales se modela y representa el mundo real tan fielmente como sea posible.
El concepto fundamental de la programacin orientada a objetos es la clase y existen muchas de
ellas implementadas en C#, y estn listas para permitirnos crear la gran mayora de objetos que
podemos llegar a necesitar en un programa de consola, tipo Windows o tipo web. Aquellos objetos
para los cuales no existan clases podemos crearlas

Segn Alan Kay (creador de Smalltalk, a principios de los 70)


La POO est basada en el principio de diseo recursivo:
1.
Todo son objetos.
2.
Los objetos funcionan hacindose peticiones de uno a otro mediante paso de mensajes.
3.
Cada objeto tiene su propia memoria, que consta de otros objetos.
4.
Cada objeto es un ejemplar (instancia) de una clase. Una clase agrupa objetos similares.
5.
La clase es el repositorio del comportamiento asociado con un objeto
6.
Las clases estn organizadas en una estructura arbrea que se denomina jerarqua de
herencia

El contexto del problema


se ve como
objetos que interactan
entre ellos

Prof. Rearte, Judith


4/14

I.T.S.C.
Tcnico Superior en Desarrollo de Software

Programacin II

CARACTERSTICAS DE LA PROGRAMACIN ORIENTACIN A OBJETOS


Los elementos fundamentales que caractericen a un verdadero lenguaje orientado a objetos, en la
mayora de teoras, son las siguientes:

- Abstraccin
- Encapsulamiento
- Modularidad
- Herencia
- Polimorfismo

Abstraccin
La abstraccin la posibilidad de visualizar nicamente aquellos aspectos que interesen de un
todo, dejando de lado los detalles que, aunque importantes, no son de inters para un
determinado propsito.
Significa extraer las propiedades esenciales de un objeto que lo distinguen de los dems tipos de
objetos y proporciona fronteras conceptuales definidas respecto al punto de vista del observador.
Es la capacidad para encapsular y aislar la informacin de diseo y ejecucin.

Qu es ?
Y
Qu Hace ?

Una ventana estndar en cualquier entorno grfico,


como
Windows, tiene una forma rectangular y la caracterizan una barra de
ttulos, un icono que esconde un men desplegable y tres botones,
maximizar, restaurar y cerrar.
Para crear esa ventana actuan una serie de complejas acciones
que incluyen desde elementos matemticos hasta principios
electrnicos sobre procesamiento digital de grficos.
Pero, en las clases que ofrece .NET, todo eso ha sido aislado del
inters del programador, y solo se pone a su disposicin unas cuantas propiedades y mtodos que
le permiten modificar cualquier aspecto de la ventana sin tener que preocuparse de los detalles
internos. En otras palabras se ha realizado una abstraccin del mecanismo que permite construir
una ventana.

Prof. Rearte, Judith


5/14

I.T.S.C.
Tcnico Superior en Desarrollo de Software

Programacin II

Encapsulamiento
El encapsulamiento hace referencia a la proteccin que debe hacer una clase de los elementos
que la conforman, especialmente de aquellos que contienen los datos.

Cmo?

El encapsulamiento es el proceso de almacenar en un mismo compartimiento (una caja


negra) los elementos de una Abstraccin (toda la informacin relacionada con un objeto) que
constituyen su estructura y su Comportamiento. Esta informacin permanece oculta tan
tanto para los
usuarios como para otros objetos Y puede ser accedida solo mediante la ejecucin de los mtodos
adecuado.
En general una clase es una capsula blindada que protege a sus miembros del mundo exterior y
solo permite acceder a ellos mediante mecanismos
mecanismos que garanticen su adecuada modificacin o
lectura. Establecer esos mecanismos es una tarea del programador.
Ell encapsulamiento exige que todos los campos de una clase se establezcan como privados, y la
lectura o modificacin de sus valores se realice a travs de funciones, que de ser necesario
realicen en el momento justo las verificaciones del caso para asegurar que no se han producido
infracciones a la abstraccin que representa.

Modularidad
La modularidad es la propiedad, de la programacin orientada a objetos, que permite dividir una
aplicacin de software en componentes ms pequeos, generalmente llamados mdulos.
Esta divisin debe realizarse de una manera coherente y cada
c
uno de estos componentes debe
ser lo ms independiente posible tanto
tanto de la aplicacin como de los dems componentes.

Prof. Rearte, Judith


6/14

I.T.S.C.
Tcnico Superior en Desarrollo de Software

Programacin II

Es el aspecto que nos obliga a dedicar ms tiempo al diseo y ser muy cuidadosos en la forma
como se debe asumir el desarrollo de una aplicacin de software. Aunque existe una amplia
documentacin sobre el tema en libros, revistas, Internet o en las mismas ctedras universitarias,
solo la experiencia ser quin al final nos ensee la forma como debemos subdividir una
aplicacin en diferentes componentes de software, de tal manera que podamos sacar el mayor
provecho posible de los mismos. Una estrategia prctica que puede ser til en la escogencia de
una buena modularidad es no pensar que el proyecto en el cual se est trabajando actualmente es
la nica aplicacin que se va a desarrollar, sino que existirn muchas otras en el futuro con
caractersticas diferentes o semejantes, y determinar que partes de la actual me pueden ser tiles
en esas aplicaciones de software. Un buen programador, a medida que desarrolla programas,
debe ir construyendo sus propias bibliotecas de componentes de software que le puedan ser tiles
en otras aplicaciones o a otros programadores, sin necesidad de tener que recurrir a
modificaciones de su programacin.
En la vida prctica, es el programador quin debe tomar la mejor alternativa: deja las cosas como
estn, y dispone de un componente validador para programas tipo Windows, con un alto nivel de
abstraccin y encapsulamiento, o crea un componente ms genrico que le sea til en diversos
tipos de aplicaciones. Solo la prctica y el objetivo que se busque en un proyecto de software
sern quienes dicten las reglas que se deben seguir en lo que respecta a la forma como
asumamos la modularidad.

Herencia
La herencia es la caracterstica ms importante de la programacin orientada a objetos por que
permite crear clases que se derivan de otras clases y este es uno de los aspectos vitales en la
reutilizacin de componentes.
Especficamente, la herencia es la capacidad que ofrece un lenguaje de programacin de poder
crear nuevas clases a partir de clases existentes, aprovechando el cdigo de estas ltimas. La
herencia supone la existencia de una clase base y una o ms clases derivadas. Tomando la
analoga del mundo real se dice que una clase derivada hereda las caractersticas de la clase
base, agregando sus propios elementos.

En la prctica cuando un programador construye una


clase, heredando las caractersticas de otra ya existente,
lo que est haciendo es utilizar la estructura de esa clase
e incorporndola a la suya, y adicional le agrega o incluso
le quita algunas caractersticas que requiera su
desarrollo.
En la literatura sobre programacin orientada a objetos
existen muchos ejemplos didcticos para intentar explicar
la herencia, como por ejemplo que las clases Ave, Felino
y Mamfero se derivan de la superclase Animal porque
todos estos especmenes comparten caractersticas, que
se pueden abstraer en la clase base. En el desarrollo de
software lo que el programador debe hacer es identificar
todos aquellos campos que se repitan en un conjunto de
clases y con ellos formar una clase que le sirva como
base para las dems. Los elementos que se incluyeron
en la clase base, ya no ser necesario especificarlos en
las clases derivadas, trayendo como consecuencia una simplificacin sustancial en el proceso de
programacin.

Prof. Rearte, Judith


7/14

I.T.S.C.
Tcnico Superior en Desarrollo de Software

Programacin II

Para hacer ms didctica la explicacin, supongamos que en una entidad educativa se va a


sistematizar, entre otros, los datos del personal vinculado a ella. Para empezar, sabemos que
existen alumnos y docentes, cuyos datos los vamos a procesar a travs de las clases Alumno y
Docente, respectivamente.

Alumno

Docente

NombreYApellido

NombreYApellido

FechaNacimiento

FechaNacimiento

Legajo

Legajo

Curso

Horas

Tanto los alumnos como los docentes tienen elementos o datos comunes, tales como nombres,
apellidos, fecha de nacimiento y edad, y otros que no lo son. Aplicar la propiedad de la herencia en
este caso, implica redisear las clases creando una nueva clase a partir de los campos que se
encuentran repetidos en ambas. A esa clase bien podramos llamarla Persona.

Persona
NombreYApellido
FechaNacimiento
A partir de esta clase se derivan las clases Alumno y Docente con los campos que les hacen falta
a cada una de ellas, (En los diagramas UML se acostumbra a representar la herencia mediante
una flecha que va desde la clase derivada hasta la clase base. La flecha as dibujada establece
una relacin de tipo es un.)

Persona
NombreYApellido
FechaNacimiento

Alumno

Docente

Legajo

Legajo

Curso

Horas

El nuevo diseo del conjunto de clases, en este ejemplo, va a simplificar la programacin de


algunos elementos de las clases. Por ejemplo, la edad, de un estudiante o un trabajador, que se
puede calcular con base en la fecha de nacimiento, en este caso bastar con programar su clculo
una sola vez y en la clase base. Los resultados estarn disponibles tanto para los objetos que se
declaren a partir de cualquiera de las clases derivadas, como para aquellos que se definan a partir
de la misma clase Persona.
La herencia es una propiedad supremamente potente que exige especial cuidado al momento de
disear un software. Esta propiedad bien utilizada simplifica enormemente la programacin y
sobre todo permite sacar el mximo provecho a los elementos que pone a disposicin, tanto el
entorno de desarrollo, como aquellos que sea capaz de crear el ingeniero de software.

Prof. Rearte, Judith


8/14

I.T.S.C.
Tcnico Superior en Desarrollo de Software

Programacin II

Dentro de la programacin orientada a objetos existen dos tipos de herencia: simple y mltiple.
Existe herencia simple cuando una clase solo se deriva de una clase base; y herencia mltiple
cuando una clase se deriva de dos o ms clases base.

Polimorfismo
En general se dice que el polimorfismo es la
posibilidad de que una entidad tome muchas formas.
En trminos de programacin orientada a objetos, y
de forma prctica, el polimorfismo permite hacer
referencia a objetos de diferentes clases por medio de
una misma operacin, la cual se ejecuta y aplica de
acuerdo al objeto que la invoca.
Dentro de la programacin orientada a objetos,
bsicamente se trabaja relacionado con el concepto
de herencia. Si una clase base implementa una serie
de miembros (propiedades y mtodos), que pueden
ser heredados por otras clases, el polimorfismo es la
propiedad que le permite al programador,
que haga uso de las clases derivadas,
modificar el comportamiento de tales
miembros ya sea parcial o totalmente.
En otras palabras, se dice que el
polimorfismo le permite al programador, que
herede clases a partir de una clase base,
redefinir los miembros que le sean
convenientes conversiones que se ajusten a las nuevas clases.

CLASES
La clase no es ms que una plantilla de software que sirve para construir cualquier
cantidad de objetos.
Por ejemplo, existe una clase llamada Form que sirve como molde para construir cualquier
ventana que necesite una aplicacin tipo Windows. Las ventanas que nosotros observamos en la
pantalla de nuestro computador, son los objetos generados con esa plantilla. Pueden haber
muchos objetos generados con esa plantilla, pero lo que los puede hacer diferentes a unos de
otros, son los valores que se asignan a sus atributos como: alto, ancho, color, ttulo, etc.
Desde la perspectiva del lenguaje de programacin, una clase es un tipo, que al igual que
los tipos estndar, sirve para declarar variables cuya estructura es una fiel copia de ella. Estas
variables reciben el nombre de objetos y son los elementos que manipula el programador para
desarrollar su programa. En la evolucin del desarrollo de software y los lenguajes de
programacin, es posible que en el futuro tan solo se hable de tipos, en vez de clases. Sern
tantas las clases que cualquier programador podr encontrar en las redes de comunicaciones,
como Internet, que ms que preocuparse por construir un molde deber poner todo su potencial
en manipular los objetos que de l se puedan obtener, y todo se ver con la simpleza que hoy se
mira a los tipos de datos como entero, cadena de texto, booleano o byte, entre otros.
Pero, por ahora volvamos a nuestra realidad que nos exige a nosotros definir los tipos o
clases que el entorno de desarrollo no haya definido, o que siendo tantos, no sepamos que ya
existen, y que los necesitemos para nuestros programas. En C# una clase se define mediante la
palabra clave class y una sintaxis bsica que encontramos para definirla, es la siguiente:

Prof. Rearte, Judith


9/14

I.T.S.C.
Tcnico Superior en Desarrollo de Software

Programacin II

class NombreClase
{
// Miembros
}
Por ejemplo, supongamos que deseamos un componente de software para procesos matemticos
que nos permitan manipular nmeros complejos. La clase que nos permitir procesar estos
nmeros la llamaremos Complejo, y se puede definir como,
class Complejo
{
//Miembros de la clase Complejo
}
Sin embargo, las clases deben cumplir unos niveles de seguridad que exigen el manejo del control
de accesibilidad a ellas, sobre todo por parte de agentes externos al proyecto de software donde
se hayan definido. Es por esto que la definicin de cualquier clase debe ir antecedida de una
palabra clave que determina la accesibilidad que admite dicha clase. La sintaxis C# para definir
una clase es la siguiente:
[public | private | protected | internal]
class NombreClase
{
// Miembros
}
La seccin entre corchetes, que indica las palabras clave de accesibilidad, public, private,
protected, internal, que pueden utilizarse en la definicin de una clase, es opcional e indica cual es
el nivel de acceso que se va a permitir sobre la clase. Si no se especifica ningn nivel de
accesibilidad, el compilador la define por defecto como internal, lo cual significa que solo se
permite el acceso a las clases que hacen parte del mismo ensamblado. Mediante las palabras de
accesibilidad se pueden especificar los siguientes cinco niveles de proteccin para una clase:

Acceso

Seguridad

Public

No existe ninguna restriccin de acceso.

protected

Solo pueden tener acceso la clase contenedora o los


tipos derivados de esta clase

Internal

nicamente se permite el acceso al ensamblado actual.

protected
internal

El acceso est limitado al ensamblado actual o los tipos


derivados de la clase contenedora

Private

Solo se permite el acceso al tipo contenedor.

Para nombrar una clase se sugiere utilizar una cadena de caracteres que inicia con una
letra mayscula y cuyo significado es familiar para el programador. Aqu es muy importante tener
en cuanta cual es la funcionalidad bsica de la clase, para darle un nombre que resulte
significativo y fcil de recordar posteriormente. Podemos tener clases como: Complejo, Alumno,
DocumentoImpresion, RedNeuronal, ConexionBaseDatos

Prof. Rearte, Judith


10/14

I.T.S.C.
Tcnico Superior en Desarrollo de Software

Programacin II

OBJETOS
Cuando se disea y programa una aplicacin de software con el modelo de programacin
orientada a objetos, lo que se hace en la prctica es construir un conjunto de plantillas de objetos,
o lo que se conoce como clases, las cuales permiten definir variables en memoria que se conocen
con el nombre de objetos o instancias de clase.
Desde esta perspectiva, el trmino clase gana mayor significado, ya que se puede definir como
una plantilla que permite generar una clase de objetos.
Para crear un objeto de una determinada clase, se procede bsicamente en dos pasos: primero se
declara una variable con el tipo que representa la clase y luego se le asigna memoria con el
operador new. Por ejemplo, tomando la clase Complejo definida anteriormente, la siguiente lnea
crea un objeto a partir de esta plantilla:
Complejo z;
Cuando el programa ejecuta esta lnea, solo posee una direccin de memoria donde se
inicia la estructura de la variable z. Para asignarle la memoria total conforme al tamao de la
estructura que describe la clase, es necesario aplicar el operador new, as:
z = new Complejo();
A partir de aqu, el sistema conoce con exactitud la ubicacin y tamao ocupado en memoria por
la variable z y estar en condiciones de colocar en el sitio que corresponda cada uno de los datos
y dems elementos que conforman el objeto.
En C#, tanto la declaracin como la asignacin de memoria para un objeto puede hacerse en una
sola lnea de cdigo, como se muestra enseguida para nuestro ejemplo:
Complejo z = new Complejo();

EJEMPLO: ENVIAR FLORES

[De T. Budd, Introduccin a la Programacin Orientada a Objetos, cap. 1]


Considrese el problema de enviar flores a una amiga que reside en una ciudad diferente. Por
ejemplo, Juan quiere enviar flores a Ins.
Juan no puede enviarlas directamente y para ello utiliza los servicios de su florista local, asociado
a Interflora.
Juan le indica al florista (que se llama Paco) la direccin de Ins, cunto quiere gastar, el tipo de
flores que enviar y un texto para poner en la tarjeta que acompaa al ramo.
Paco contacta con una floristera en la ciudad de Ins, que se encarga de preparar el ramo de
flores y buscar el repartidor que lo entregue.
Si se piensa con detenimiento, puede haber adems otras personas involucradas en esta
transaccin. Por ejemplo, el mayorista de flores, tal vez alguien que prepare el ramo, etc.

Agentes y comunidades
Lo primero que se puede ver es que los resultados se consiguen por la interaccin de unos
agentes, que llamamos objetos.

Prof. Rearte, Judith


11/14

I.T.S.C.
Tcnico Superior en Desarrollo de Software

Programacin II

Adems, cualquier actividad no trivial requiere la interaccin de una comunidad de objetos que
trabajan juntos.
Cada objeto tiene una parte que jugar, un servicio que proporcionar a los otros miembros de la
comunidad.

Elementos de la POO - Objetos


Segn el primer principio de Alan Kay:

1. Todo son objetos.


Las acciones en POO las realizan los objetos.
Normalmente hay muchos objetos que colaboran en un escenario. Por ejemplo, D. Juan, el florista,
el que prepara el ramo, etc.
Cada objeto tiene una responsabilidad, y el resultado es el producto de la colaboracin de todos
los objetos en la solucin del problema.

Elementos de la POO Mensajes


El principio nmero 2:

2. Los objetos funcionan hacindose peticiones de uno a otro


mediante paso de mensajes.
Las acciones en POO se producen como respuesta a las peticiones de acciones, que se llaman
mensajes.
Un objeto puede aceptar un mensaje y como respuesta realizar una accin y devolver un valor.
Para empezar el proceso de enviar flores, Juan le da un mensaje al florista, que a su vez enva un
mensaje al florista en la localidad de la destinataria, que le da un mensaje al repartidor, y as
sucesivamente.

Ocultando informacin
Obsrvese que como usuario de un servicio que proporciona un objeto lo nico que se necesita
saber es el nombre de los mensajes que aceptar el objeto.
No hace falta tener ninguna idea sobre cmo se realizarn las acciones en respuesta a la peticin.
Una vez aceptado un mensaje, un objeto es responsable de llevarlo a cabo.

Elementos de la POO Receptores


Los mensajes son diferentes de las llamadas a funcin tradicionales en dos aspectos importantes:
En un mensaje hay designado un receptor que acepta el mensaje.
La interpretacin del mensaje puede ser diferente, dependiendo del receptor.

Diferentes receptores, mismo mensaje, diferentes acciones

Prof. Rearte, Judith


12/14

I.T.S.C.
Tcnico Superior en Desarrollo de Software

Programacin II

var
Paco : Florista
Carmen : Hermana
Sacamuelas : Dentista
inicio
Paco.enviaFloresA(miNovia); { funcionar}
Carmen.enviaFloresA(miNovia); {tambin funcionar}
Ken.enviaFloresA(miNovia); {probablemente no funcionar}
El mismo mensaje ocasionar acciones distintas, dependiendo de a quin vaya dirigido.

Comportamiento e interpretacin
Aunque varios objetos diferentes puedan aceptar el mismo
(comportamiento) que realizar el objeto podrn ser diferentes.

mensaje,

las

acciones

La determinacin de qu comportamiento realizar el objeto se toma en tiempo de ejecucin


(vinculacin tarda, o late binding).
El hecho de que el mismo nombre pueda significar dos operaciones completamente diferentes es
una forma de polimorfismo.

Elementos de la POO Diseo Recursivo


3. Cada objeto tiene su propia memoria, que consta de otros objetos.

Cada objeto es como un computador en miniatura, un procesador especializado en realizar una


tarea especfica.

Elementos de la POO Clases


4. Cada objeto es un ejemplar (instancia) de una clase. Una clase agrupa
objetos similares.
5. La clase es el repositorio del comportamiento asociado con un objeto.

El comportamiento I que se espera de Paco est determinado por la idea general que yo pueda
tener del comportamiento de los floristas.
Se dice que Paco es una instancia de la clase Florista.
El comportamiento est asociado con las clases, no con instancias individuales. Todos los objetos
que son instancias de una clase utilizan el mismo mtodo en respuesta a mensajes similares.

Jerarquas de categoras
Pero hay ms cosas que puedo saber sobre Paco, adems de que es un Florista. Tambin es un
Tendero, y un Humano, y un Mamfero, y muchas ms cosas.
En cada nivel de abstraccin podemos registrar cierta informacin. Esa informacin ser aplicable
a todos los niveles inferiores, ms especializados.

Prof. Rearte, Judith


13/14

I.T.S.C.
Tcnico Superior en Desarrollo de Software

Programacin II

Jerarquas de clases

Objeto
material

cosa
inanimada

Ser vivo

Animal

Dentista

Planta

Reptil

Mamfero

Ser
Humano

Perro

Tendero

Artista

Roca

Agua

Gato

Elementos de la POO Herencia


6. Las clases estn organizadas en una estructura arbrea que se denomina
jerarqua de herencia.

La informacin (datos y comportamiento) que le asociamos a un nivel de abstraccin en la


jerarqua de clases es automticamente aplicable a los niveles inferiores de la jerarqua.

Elementos de la POO Sobreescritura


Las subclases pueden alterar o sobrescribir
sobrescribir informacin heredada de las clases padre:
Todos los mamferos dan de mamar a los recin nacidos.
La herencia combinada con la sobreescritura es una de las caractersticas ms potentes de la
POO.

Computacin como simulacin


La visin de la computacin
utacin en POO es similar a crear un universo de objetos computacionales
interactuando entre s.
En definitiva, la POO es similar a la manera en que la gente piensa cmo resolver problemas en la
vida real: que sea otro agente quien haga el trabajo real

Prof. Rearte, Judith


14/14

También podría gustarte