Sie sind auf Seite 1von 12

Historia de la Programacin

Gottfried Wilheml von Leibniz (1646-1716), quien aprendi matemticas de


forma autodidacta (mtodo no aconsejable en programacin) construy una
mquina similar a la de Pascal, aunque algo ms compleja, poda dividir, multiplicar
y resolver races cuadradas.
Pero quien realmente influy en el diseo de los primeros computadores
fue Charles Babbage (1793-1871). Con la colaboracin de la hija de Lord
Byron, Lady Ada Countess of Lovelace (1815-1852), a la que debe su nombre el
lenguaje ADA creado por el DoD (Departamento de defensa de Estados Unidos) en
los aos 70. Babbage dise y construy la "mquina diferencial" para el clculo de
polinomios. Ms tarde dise la "mquina analitica" de propsito general, capaz de
resolver cualquier operacin matemtica. Muri sin poder terminarla, debido al
escepticismo de sus patrocinadores y a que la tecnologa de la poca no era lo
suficientemente avanzada. Un equipo del Museo de las Ciencias de Londres, en
1991, consigui construir la mquina analtica de Babbage, totalmente funcional,
siguiendo sus dibujos y especificaciones.

Un hito importante en la historia de la informtica fueron las tarjetas perforadas


como medio para "alimentar" los computadores. Lady Ada Lovelace propuso la
utilizacin de las tarjetas perforadas en la mquina de Babbage. Para que se
enteren todos esos machistas desaprensivos, el primer programador/a fue una
mujer. En 1880 el censo en Estados Unidos tard ms de 7 aos en realizarse. Es
obvio que los datos no eran muy actualizados. Un asistente de la oficina del censo
llamado Herman Hollerit (1860-1929) desarroll un sistema para automatizar la
pesada tarea del censo. Mediante tarjetas perforadas y un sistema de circuitos
elctricos, capaz de leer unas 60 tarjetas por minuto realiz el censo de 1890 en 3
aos ahorrando tiempo y dinero. Ms tarde fund la Tabulating Machine Company y
en 1924 tras alguna que otra fusin naci la Internacional Bussines Machines, IBM.
Os suena ?

Las computadoras de hoy en da se sustentan en la lgica matemtica basada en


unsistema binario. Dicho sistema se implementa sobre dispositivos electrnicos
que permiten, o no, pasar la corriente, con lo que se consiguen los 2 estados
binarios: 0 y 1. A mediados del siglo XX, cuando se empezaron a construir las
primeras computadoras digitales, se utilizaban tubos de vaco para implementar los
2 estados binarios, pero cmo aparecieron estos conceptos ? Alan Mathison
Turing (1912-1954) dise una calculadora universal para resolver cualquier
problema, la "mquina de Turing". Tuvo mucha influencia en el desarrollo de la
lgica matemtica. En 1937 hizo una de sus primeras contribuciones a la lgica
matemtica y en 1943 plasm sus ideas en una computadora que utilizaba tubos de
vaco. George Boole (1815-1864) tambin contribuy al algebra binaria y a los
sistemas de circuitos de computadora, de hecho, en su honor fue bautizada el
lgebra booleana.
La primera computadora digital electrnica patentada fue obra de John Vincent
Atanasoff (1903-1995). Conocedor de las inventos de Pascal y Babbage, y
ayudado por Clifford Berry (1918-1963), construy el Atanasoff Berry Computer
(ABC). El ABC se desarroll entre 1937 y 1942. Consista en una calculadora
electrnica que utilizaba tubos de vaco y estaba basada en el sistema binario
(sistema numrico en el que se combinan los valores verdadero y falso, o 0 y 1).
Entre 1939 y 1944, Howard Aiken (1900-1973) de la universidad de Harvard en
colaboracin con IBM desarroll el Mark 1. Era una computadora electromecnica
de 16 metros de largo y ms de dos de alto. Tena 700.000 elementos mviles y
varios centenares de kilmetros de cables. Poda realizar las cuatro operaciones
bsicas y trabajar con informacin almacenada en forma de tablas.
Por desgracia, los avances tecnolgicos suelen producirse gracias a los militares que
se aprovechan de la ciencia para perfeccionar sus armas. En la Moore School de la
Universidad de Pensilvania se estaba trabajando en un proyecto militar para realizar
unas tablas de tiro para armas balsticas. Los clculos eran enormes y se tardaban
semanas en realizarlos. Parece ser que John W. Mauchly (1907-1980), quien
diriga el departamento de fsica del Ursine College de Filadelfia vivi en casa de
Atanasoff durante cuatro das a partir del 13 de Junio de 1941, lo que seguramente
aprovech para conocer las ideas de Atanasoff.
Junto a John Presper Eckert (1919-1995), Mauchly desarroll una computadora
electrnica completamente operacional a gran escala, para acelerar los complicados
clculos del proyecto militar de la universidad Moore. Se termin en 1946 y se
llam Electronic Numerical Integrator And Computer (ENIAC). El ENIAC tena
18.000 tubos electrnicos integrados en un volumen de 84 metros cbicos. Pesaba
unas 30 toneladas y consuma alrededor de 100.000 vatios. Su capacidad de clculo

era de 5.000 operaciones por segundo, aunque tena que programarse


manualmente conectndola a 3 tableros que contenan ms de 6000 interruptores.
Cargar un programa poda ser una tarea de varios das. El calor dispado por
semejante monstruo deba ser importante, y se necesitaba una instalacin de aire
acondicionado. En definitiva, un ordenador porttil... ms o menos.
Puede que no os suene, pero quien conozca de "los entresijos de la informtica"
seguro
que
considera
importante
nombrar
a Johann
Ludwig
Von
Neumann (1903-1957), genio de las matemticas, quien tuvo el honor de asistir a
las clases de Albert Einstein en la universidad de Berln. Autor de trabajos de lgica
simblica, matemtica pura y aplicada, fsica y tecnologa, public un artculo
acerca del almacenamiento de los programas, en 1945. Propona que los programas
se guardaran en memoria al igual que los datos, en forma binaria. Esto tuvo como
consecuencia el aumento de velocidad de los clculos y la ausencia de errores
producidos por fallos mecnicos al programar la mquina mediante cables.
En cuanto a la aparicin de los lenguajes de programacin, el archiconocido COBOL,
que tantos problemas caus con el "efecto 2000", fue el primer lenguaje en el que
no haba que programar directamente en cdigo binario, y fue Grace Murray
Hoper en 1952, una oficial de la Marina de Estados Unidos desarroll el primer
compilador, un programa que puede traducir enunciados parecidos al ingls en un
cdigo binario comprensible para la maquina llamado COBOL (COmmon BusinessOriented Languaje).
A partir de ah, los avances han sido vertiginosos.
La utilizacin del transistor en las computadoras en 1958, sustituyendo los
tubos de vaco
La aparicin del circuito integrado de mano de Jack Kilby, tambin en 1958
La miniaturizacin de un circuito electrnico en un chip de silicio en 1961
El primer microprocesador, el 4004 de Intel, en 1971
Gary Kildall crea el sistema operativo CP/M en 1973
IBM comercializa el primer PC en 1980
Recordando a los primeros tiempos del ENIAC, con enormes computadores, en
1998 se termin el proyecto Blue Pacific. La "maquinita" tiene la nada despreciable
cantidad de 5856 procesadores que en conjunto tienen una velocidad de 3'9
teraflops, 2'6 Terabytes de memoria, ocupa 2400 metros cuadrados y tiene un peso
de 47 toneladas. Se utiliza para la simulacin de explosiones nucleares, y "ha
salido" por unos 13000 millones de pesetas... baratito.
Hay muchos ms personajes que intervienen en la historia y que han realizado
grandes aportaciones, pero no es cuestin de extenderse.

El Objeto
El objeto es la entidad en torno a la cual gira la POO. Un objeto es un ejemplar
concreto de una clase, como por ejemplo el curso de metodologa de la

programacin es un curso concreto dentro de todos los tipos de cursos que pueden
existir. Un objeto pertenece a una clase, por lo tanto dispondr de los atributos
(datos) y operaciones (mtodos) de la clase a la que pertenece. Un objeto responde
al comportamiento definido por las operaciones de la clase a la que pertenece. Es
decir, si la clase coche dispone del atributo color y del mtodo arrancar, un coche
concreto tendr un color, y podr arrancar, exclusivamente.

Un objeto se puede ver como una "cpsula" de datos y algoritmos que trabajan
sobre esos datos. Un objeto no puede acceder directamente a sus datos (atributos).
Los atributos son slo accesibles desde la implementacin de los mtodos de una
clase. Un objeto no puede "manipular" sus propios datos, para ello estn los
mtodos de la clase de dicho objeto: el comportamiento (mtodos) de un objeto
puede variar el valor (estado) de sus datos (atributos). Por ejemplo, nunca
debemos hacer lo siguiente: miCoche.color := 'rojo'. Para esto definiremos mtodos
que
actualicen
el
valor
de
los
atributos
de
un
objeto,
por
ejemplo: miCoche.ponerColor('rojo').
En la POO, un objeto no es algo "eterno", se instancian (crean) y se destruyen.
Una vez que se haya instanciado un objeto puede recibir mensajes. Los objetos
pueden instanciarse de forma esttica o de forma dinmica (recordar estos
conceptos de captulos anteriores). Un objeto esttico comienza su existencia una
vez es declarado (instanciacin de objetos estticos), sin embargo, un objeto
dinmico no comienza su existencia al ser declarado, sino al recibir un espacio de
memoria (instanciacin dinmica de objetos). Por ejemplo:

Los objetos "se declararn" como atributos de las clases, en las clasulas var de los
mtodos o en la lista de parmetros de los mtodos. El nico objeto que debe ser
"declarado" en el programa principal ser el de la clase raz de toda la jerarqua de
clases (por cuestiones del lenguaje Pascal orientado a objetos). Los objetos
estticos existen durante la ejecucin del programa. Los objetos dinmicos existen
mientras no sean destruidos (liberacin de la memoria del objeto), mediante la
sentencia dispose.
Tras ser instanciado, un objeto consta de los atributos de la clase a la que
pertenece, y puede recibir mensajes. Dicho objeto determinar a qu mtodo de su
clase corresponde dicho mensaje. Un objeto no podr recibir mensajes
correspondientes a mtodos de una clase a la qe no pertenezca. Por ejemplo:

La Clase
Una clase es una descripcin de datos y operaciones que describen el
comportamiento de cierto tipo de elementos. Por lo tanto, para que pueda haber
objetos, antes deben haberse definido las clases a las que pertenecern dichos
objetos. No tiene sentido un objeto sin una clase, ya que el objeto tiene los
atributos de la clase a la que pertenece, y recibe mensajes correspondientes a
mtodos de la clase a la que pertenece.
Una clase se divide en una parte pblica y en una parte privada. El nombre de la
clase debe ser nico. Antes de continuar, recordar cmo era una librera (UNIT) en
Pascal. Tiene una parte donde se declaran las cabeceras de los subprogramas
(ineterface) que prodrn usarse desde los ficheros que usen la librera, y otra parte
donde se implementan dichos subprogramas (implementation).
Parte pblica
Describe a qu operaciones responden los objetos de una clase (cmo se
comportan los objetos). En esta parte de la clase se declaran las cabeceras de
los mtodos de la clase que podrn ser "invocados" por los objetos. Es decir, si un
mtodo se declara en la parte pblica, podr ser "invocado" por un objeto de dicha
clase, de lo contrario no podr ser "invocado" por un objeto. Es la parte "visible" de
la clase, la interfaz de la clase.
Parte privada
Describe los datos de la clase y cmo las operaciones manipulan dichos datos. Esta
parte de la clase es donde se oculta (encapsula) la informacin de la clase: datos e
implementacin de mtodos declarados o no en la parte pblica de la clase. Es una
parte "no visible", cada objeto de una determinada clase tiene sus atributos (datos)
y sus mtodos.

Abstraccin

Podramos definir la abstraccin como la "accin de aislar mentalmente o considerar


por separado las cualidades de un objeto, considerar un objeto en su esencia".
Qu quiere decir esta definicin? A travs de la abstraccin conseguimos
extraer las cualidades principales sin detenernos en los detalles.
Conseguimos a partir de un tema determinado, generalizar y obtener una visin
global del tema. Cuando montamos un ordenador ensamblamos los componentes
necesarios para construir el ordenador. Utilizamos una placa base, un disco duro,
memoria, etc. Manejamos estos dispositivos a un nivel funcional. Es decir,
abstraemos las funciones de cada dispositivo para trabajar con ellos. En ningn
momento nos paramos a pensar cmo funcionan internamente o de cuntos
condensadores y transistores est compuesto.
La abstraccin es una herramienta muy potente en programacin, pues reduce
considerablemente el trabajo de implementacin y aumenta la portabilidad del
cdigo. La programacin orientada a objetos aporta elementos para abstraer el
problema en dos sentidos:

Por un lado nos permite referirnos a objetos para representar la


realidad,describiendo el problema en trminos del problema en lugar
de en trminos de la solucin. En un programa de gestin comercial,
tendremos el objeto cliente o el objeto factura, que no son ms que
representaciones de otros objetos en el espacio del problema.

La clave de la programacin orientada a objetos est en abstraer los


mtodos y los datos comunes a un conjunto de objetos y agruparlos en una
clase. Gracias a este nivel de abstraccin, aadir o eliminar un objeto nuevo
supondr muy poco esfuerzo.

Herencia
La herencia es un mecanismo exigido a cualquier lenguaje que pretenda ser
orientado a objetos. Consideraremos la herencia como la transmisin de los
mtodos y atributos de una clase a otra. Gracias a la herencia se pueden
establecerjerarquas entre clases. Establecer una jerarqua es un proceso
subjetivo, que depende del programador y de los matices de apreciacin de cada
uno.
La herencia nos permite definir una jerarqua en la que existirn clases
padre yclases hijo, pudindo ser una clase padre de otra clase, e hijo de otra
clase a la vez. No deben definirse jerarquas de herencia en la que una clase sea
padre e hijo de la misma clase. Existen 2 tipos de herencia: La herencia simple y
la herencia mltiple. En la herencia simple una clase slo puede tener una clase
padre, en la herencia mltiple, una clase puede tener ms de una clase padre. Por
ejemplo:
En la siguiente figura se muestra una jerarqua de clases, con herencia simple de 2
clases vertebrado e invertebrado, que heredan de la clase serVivo.

En la siguiente figura se muestra una jerarqua de clases, con herencia mltiple de


1 clase hispano-argentino, que hereda de las clases espaol y argentino.

Cuando una clase hereda de otra, la clase padre "transmite" todos sus atributos y
mtodos a la clase hija.
Clase abstracta
Al construir una jerarqua de herencia puede darse el caso de que ciertas
operaciones de la clase padre no pueden ser completadas por diferentes motivos, o
que dichas operaciones se hagan de una forma diferente en cada clase hija. Por
ejemplo, en una clase serVivo existir un mtodo comer, pero ese mtodo ser
diferente en una clase hija perro (los perros comen con la boca), y en una clase
hija pjaro, ya que los pjaros comen con el pico (salvo una mutacin extraa...).
Por lo tanto, una clase ser abstracta si tiene algn mtodo diferido, es decir,
declarado pero no definido. No podr instanciarse ningn objeto de una clase
abstracta.
Redefinicin de mtodos
Una clase hija de una clase abstracta puede redefinir los mtodos diferidos de su
clase padre abstracta.

Nota: Una clase hija de una clase abstracta no tiene porqu redefinir
los mtodos diferidos de la clase padre, podra ser una clase nieta de
la clase abstracta la que hiciera la redefinicin. Lo que es obligatorio es
redefinir un mtodo diferido en alguna clase descendiente de una
clase abstracta.
El mtodo debe redefinirse con los mismos parmetros que el mtodo diferido, de
lo contrario se estara definiendo otro mtodo (sobrecarga). Es aqu donde aparece
el concepto de super. Esta palabra reservada hace referencia a un mtodo
perteneciente a la clase padre de la clase del objeto en cuestin.

Polimorfismo
Concepto de polimorfismo
Esta caracterstica permite definir distintos comportamientos para un mtodo
dependiendo de la clase sobre la que se realize la implementacin. En todo
momento tenemos un nico medio de acceso, sin embargo se podr acceder a
mtodos distintos.
Veamos el siguiente ejemplo, en el que se define una clase forma de la que se
heredan las clases crculo y cuadrado.

La clase forma define los mtodos dibujar y borrar. En la definicin de estos


mtodos se implementar el cdigo comn a todos los objetos de la clase. Sin
embargo cuando definamos las clases hijas, crculo y cuadrado, ser necesario
modificar estos mtodos para adaptarlos a las nuevas subclases. El mtodo de la
clase padre implementa aquellas acciones comunes. Las clases hijas aaden las
operaciones particulares que necesiten. Cuando utilicemos los mtodos de la clase
forma no tendremos que hacer distincin entre cuadrados y crculos. Gracias al
polimorfismo se ejecutar el mtodo adecuado en funcin de la subclase a la que
pertenezca el objeto.
En la declaracin de una clase estamos definiendo el conjunto de mtodos y
campos que son accesibles desde fuera de una clase o lo que a menudo se
denominacontrato de la clase. Este contrato determina cual va a ser la
funcionalidad de la clase. Pero cuando extendemos una clase para crear otra

estamos ampliando este contrato aadiendo mas funcionalidades. Por tanto cuando
creamos esa nueva clase hacemos uso de dos mecanismos. Por un lado
la herencia para reutilizar las partes comunes de la super-clase. Y por otro
el polimorfismo, es decir el cambio en la forma en la que se implementa el
contrato de la superclase. Como vemos al escribir una subclase podemos
sobreescribir el contrato aadiendo nuevas funcionalidades, pero no cambiarlo.
A la hora de implementar el polimorfismo tendremos dos mecanismos de los que
echar mano para sobreescribir una clase: reemplazar la implementacin de un
mtodo o aadir funcionalidades a un mtodo.
Continuando
con
el
ejemplo
de Publicacion,
habamos
definido
subclases Libro yRevista, vamos a ver cmo se implementan estas subclases:

dos

La superclase Publicacion implementaba un mtodo llamado toString() que devolva


una cadena compuesta en base al identificador, ttulo y autor de una publicacin. Al
sobreescribir el mtodo se utiliza el cdigo de la superclase y se aade a la cadena
el nmero de pginas.
Veamos ahora como afecta la sobrescritura a la subclase Revista:

En este caso vemos como se reemplaza completamente la implementacin dada por


la super-clase para el mtodo toString(). Normalmente las revistas no son firmadas
por un nico autor, por tanto es un campo que no vamos a utilizar. Es necesario
reescribir completamente el mtodo y aadirle la periodicidad de la revista, campo
que s es importante en este tipo de publicaciones.

Ventajas de la
Programacin Orientada
a Objetos
Vamos a ver las ventajas ms importantes de la programacin orientada a objetos:
Reusabilidad. Cuando hemos diseado adecuadamente las clases, se pueden usar en
distintas partes del programa y en numerosos proyectos.
Mantenibilidad. Debido a las sencillez para abstraer el problema, los programas
orientados a objetos son ms sencillos de leer y comprender, pues nos permiten ocultar
detalles de implementacin dejando visibles slo aquellos detalles ms relevantes.
Modificabilidad. La facilidad de aadir, suprimir o modificar nuevos objetos nos permite
hacer modificaciones de una forma muy sencilla.
Fiabilidad. Al dividir el problema en partes ms pequeas podemos probarlas de manera
independiente y aislar mucho ms fcilmente los posibles errores que puedan surgir.
La programacin orientada a objetos presenta tambin algunas desventajas como pueden ser:
Cambio en la forma de pensar de la programacin tradicional a la orientada a objetos.
La ejecucin de programas orientados a objetos es ms lenta.
La necesidad de utilizar bibliotecas de clases obliga a su aprendizaje y entrenamiento.

Lenguajes Orientados a Objetos


Simula (1967) es aceptado como el primer lenguaje que posee las caractersticas
principales de un lenguaje orientado a objetos. Fue creado para hacer programas
de simulacin, en donde los "objetos" son la representacin de la informacin ms
importante. Smalltalk (1972 a 1980) es posiblemente el ejemplo cannico, y con el
que gran parte de la teora de la programacin orientada a objetos se ha
desarrollado.
Entre los lenguajes orientados a objetos se destacan los siguientes:
ABAP
ABL Lenguaje de programacin de OpenEdge de Progress Software
ActionScript
ActionScript 3
Ada

C++
C#
Clarion
Clipper (lenguaje de programacin) (Versin 5.x con librera de objetos
Class(y))
D
Object Pascal (Delphi)
Gambas
Harbour
Eiffel
Java
JavaScript (la herencia se realiza por medio de la programacin basada en
prototipos)
Lexico (en castellano)
Objective-C
Ocaml
Oz
R
Perl (soporta herencia mltiple. La resolucin se realiza en preorden, pero
puede
modificarse
al
algoritmo linearization
C3 por
medio
del
mdulo Class::C3 en CPAN)
PHP (a partir de su versin 5)
PowerBuilder
Python
Ruby
Smalltalk (Proyecto investigativo. Influenci a Java.)
Magik (SmallWorld)
Vala

VB.NET
Visual FoxPro (en su versin 6)
Visual Basic 6.0
Visual Objects
XBase++
Lenguaje DRP
Lenguaje
de
programacin
por Twitter) http://www.scala-lang.org/page.jsp

Scala (lenguaje usado

Muchos de estos lenguajes de programacin no son puramente orientados a


objetos, sino que son hbridos que combinan la POO con otros paradigmas.
Al igual que C++ otros lenguajes, como OOCOBOL, OOLISP, OOPROLOG y Object
REXX, han sido creados aadiendo extensiones orientadas a objetos a un lenguaje
de programacin clsico.
Un nuevo paso en la abstraccin de paradigmas de programacin es
la Programacin Orientada a Aspectos (POA). Aunque es todava una metodologa
en estado de maduracin, cada vez atrae a ms investigadores e incluso proyectos
comerciales en todo el mundo.

Das könnte Ihnen auch gefallen