Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Programacin II
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.
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
I.T.S.C.
Tcnico Superior en Desarrollo de Software
Programacin II
(a < b)
b = a+c
a = b+c
(b<c)
b=a+c
I.T.S.C.
Tcnico Superior en Desarrollo de Software
Programacin II
I.T.S.C.
Tcnico Superior en Desarrollo de Software
Programacin II
- 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 ?
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?
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.
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.
I.T.S.C.
Tcnico Superior en Desarrollo de Software
Programacin II
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
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:
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
protected
Internal
protected
internal
Private
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
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();
Agentes y comunidades
Lo primero que se puede ver es que los resultados se consiguen por la interaccin de unos
agentes, que llamamos objetos.
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.
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.
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
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.
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