Sei sulla pagina 1di 16

La programación orientada a objetos

Ricardo Peña Marí

Departamento de Sistemas Informáticos y Computación


Universidad Complutense de Madrid

Master en formación de profesorado de Secundaria – Informática


curso 2009-2010

R. Peña (SIC-UCM) Programación orientada a objetos Master Secundaria 09-10 1 / 16


Lecturas recomendadas

• “De Euclides a Java: Historia de los algoritmos y de los lenguajes de


programación”. Ricardo Peña. Cap. 8. Ed. Nivola (Colección Ciencia Abierta),
2006.
• “A brief history of computing”, Gerard Regan, Cap. 3, Springer 2008.

R. Peña (SIC-UCM) Programación orientada a objetos Master Secundaria 09-10 2 / 16


Simula 67

• Se trata de un lenguaje de la década de los 60 que incorporó por primera vez


las ideas de lo que hoy se conoce como la programación orientada a objetos
(en adelante, POO).
• Sus creadores fueron los investigadores noruegos Kristen Nygaard y Ole
Johan Dahl del Centro Noruego de Computación en Oslo, y su desarrollo se
extendió desde 1962 a 1967.
• El objetivo inicial era definir un lenguaje de propósito específico para
aplicaciones de simulación.
• Realizaron una primera versión en 1964 que se llamó Simula I y que incluía
algunos conceptos innovadores con respecto a ALGOL 60, tales como la
gestión dinámica de memoria y primitivas para la concurrencia.
• Tuvo mucho éxito entre los usuarios norteamericanos porque mejoraba a
otros lenguajes existentes en esa época, específicos para la simulación, como
eran SIMSCRIPT y GPSS.

R. Peña (SIC-UCM) Programación orientada a objetos Master Secundaria 09-10 3 / 16


Simula 67 (2)
• En 1965, y ante el éxito obtenido por su primera versión, sus autores pensaron en
una segunda. Hoare y Wirth influyeron en las últimas fases de diseño a través de sus
relaciones con Nygaard y Dahl y de una estancia en Oslo a principios de 1968.
• Habían detectado una serie de insuficiencias en el lenguaje:
1 Las entidades proceso y estación, útiles en simulación, eran entes dinámicos
que se creaban y destruían a lo largo de una ejecución. La estructura de
bloques, heredada de ALGOL 60, era un obstáculo para este fin.
2 Cada entidad tenía asociadas un conjunto de variables y un conjunto de
operaciones que las manipulaban. El texto del programa no reflejaba
claramente esta relación.
3 El código de muchas entidades era bastante semejante, pero el lenguaje no
proporcionaba mecanismos para reutilizar las partes comunes.
• El primer hallazgo de Nygaard y Dahl fue la distinción entre una clase de entidades
—un texto suministrado por el programador— y los objetos que se derivan de ella
—ejemplares creados y destruidos dinámicamente durante una ejecución.
• Una clase en Simula 67 consiste en una colección de procedimientos y un conjunto
de declaraciones de variables. Si A es un objeto de una clase C y X es una de las
variables o atributos de la clase C , A . X representa el atributo X del objeto A.
R. Peña (SIC-UCM) Programación orientada a objetos Master Secundaria 09-10 4 / 16
Simula 67 (y 3)
• Introdujeron un tipo de datos “referencia a un objeto” que permitía que una misma
variable designara objetos distintos en distintos momentos. Este tipo no era otra
cosa que el tipo puntero.
• Esta noción de clase fue enriquecida en lenguajes posteriores con la idea de
ocultamiento, dando lugar al concepto de objeto encapsulado que hoy conocemos.
• La clase de Simula 67 puede verse como precursora a la vez de las clases de la POO
actual y de los tipos abstractos de datos de los lenguajes de los 70.
• El segundo hallazgo fue el concepto de subclase, cuyo objetivo era ahorrar
declaraciones cuando el comportamiento de una entidad era parecido al de otra.
• Podríamos definir una clase vehículo que declarase los atributos comunes a todos
los tipos de vehículo. Después, definiríamos una subclase distinta para cada tipo, en
la que se declararían los atributos específicos de cada una. Así, tendríamos
subclases para camiones, bicicletas, etc.
• En términos de implementación, al crear un objeto de una subclase B de otra A se
genera una estructura con dos niveles: un registro contiene las variables específicas
de B, otro contiene las variables de A y se crea un puntero del primero al segundo.
• Este mecanismo se denomina actualmente herencia y es una de las características
distintivas de la POO frente a otros paradigmas de programación.
R. Peña (SIC-UCM) Programación orientada a objetos Master Secundaria 09-10 5 / 16
Smalltalk

• El siguiente hito de la historia de la POO, y en realidad el que le dio categoría de


paradigma con características propias, fue el lenguaje Smalltalk.
• Su creador fue Alan Kay, del Centro de Investigación en Palo Alto de Xerox
Corporation.
• También en este caso la gestación fue larga y trabajosa, desde una primera versión
en 1971 hasta la versión pública de 1982.
• De padre fisiólogo y madre música, Kay desarrolló su interés por los computadores
bastante tarde y de un modo fortuito. Estudió matemáticas y biología en la
universidad de Utah (EE.UU.), se dedicó a la música, y acabó en la Fuerza Aérea,
donde aprendió a programar. En 1967 empezó un doctorado en su universidad,
donde conoció dos desarrollos que influirían en el diseño de Smalltalk:
1 El sistema Sketchpad (Ivan Sutherland, 1963), primer sistema gráfico
interactivo de la historia.
2 El lenguaje Simula 67, cuyo compilador hubo de estudiar para hacerlo
funcionar en una IBM 1108.

R. Peña (SIC-UCM) Programación orientada a objetos Master Secundaria 09-10 6 / 16


Smalltalk (2)

• Fue el contacto con Simula el que le hizo concebir la idea de objeto, a la vez como
un ente autocontenido dotado de unos comportamientos específicos y de un estado
privado, y como un ejemplar o concreción de una clase de objetos.
• Para referirse a la noción de objeto utiliza el símil de una célula que intercambia
señales con su entorno y cuya membrana le protege de dicho entorno.
• Al igual que todas las células comparten unos comportamientos básicos pero
también pueden tener comportamientos específicos que diferencian a unas de otras,
una clase de objetos define los comportamientos comunes y puede especializarse en
distintas subclases que describen, cada una, los comportamientos añadidos.
• Su tesis doctoral, La máquina reactiva, versaba sobre su visión de un computador
personal, del tamaño de un portátil actual, y dotado de potentes gráficos
interactivos para comunicarse con el usuario, en una época en que las capacidades
de las máquinas eran muy limitadas y sus volúmenes inmensos.
• Marchó a California, pasó dos años en la Universidad de Stanford trabajando en
proyectos de inteligencia artificial, y entró después en el laboratorio Palo Alto
Research Center de Xerox Corporation, donde completó la primera versión de
Smalltalk en 1971.

R. Peña (SIC-UCM) Programación orientada a objetos Master Secundaria 09-10 7 / 16


Smalltalk (3)
• Guiado por el objetivo de que la interfaz fuera lo más intuitiva posible, ideó
representaciones gráficas para muchos de los objetos.
• Para él “todo” eran objetos. Así, los ficheros, los documentos, los periféricos, etc,
tenían una representación en la pantalla en forma de iconos gráficos.
• Las pantallas limitadas a caracteres eran insuficientes para su propósito. Dotó a sus
computadores de pantallas gráficas basadas en píxeles y dedicó un procesador
exclusivamente a la tarea de gobernar los gráficos de la pantalla.
• Los convenios actuales de ventanas solapadas que pueden desplazarse, ampliarse,
minimizarse, etc. son obra suya y de su equipo.
• Crearon así un “lenguaje” muy intuitivo de convenciones gráficas para comunicarse
con el ordenador.
• Así, no solo alumbraron un nuevo paradigma de programación, sino que fueron los
padres de los numerosos sistemas operativos basados en ventanas gráficas e iconos
que hicieron furor a partir de 1985.
• Sus superiores de Xerox no supieron ver la revolución que suponía este tipo de
sistemas y no apoyaron sus trabajos adecuadamente. Parte de su equipo, y más
tarde él mismo, se marcharon a la empresa Apple, entonces incipiente, y aplicaron
sus ideas al desarrollo de los primeros ordenadores personales Macintosh.
R. Peña (SIC-UCM) Programación orientada a objetos Master Secundaria 09-10 8 / 16
Innovaciones e impacto de Smalltalk

• Creador de la terminología y conceptos actuales: clase, ejemplar (instance), objeto,


método, atributo, mensaje, clases abstractas, redefinición de métodos, vinculación
dinámica, . . .
• Librería predefinida de más de 70 clases y subclases organizadas jerárquicamente.
Clase Object como superclase de toda la jerarquía.
• Los tipos de datos numéricos y las estructuras de datos conocidas aparecen
organizados en dicha jerarquía.
• Concepción de la tarea de programación como la de reutilizar y extender la
jerarquía con nuevas subclases y métodos.
• Compilación al código de bytes de una máquina abstracta interpretada, lo que dio
gran portabilidad al lenguaje. Recolector de basura.
• A partir de Smalltalk y de su filosofía asociada —todo son objetos, librería, entorno
gráfico— se produce un interés muy grande por el paradigma y la POO se difunde
ampliamente en entornos industriales.
• Muchos libros sobre ingeniería del software de los 80 y los 90 asumen el paradigma
y hablan de construcción, diseño y modelización “orientados a objetos”.

R. Peña (SIC-UCM) Programación orientada a objetos Master Secundaria 09-10 9 / 16


C++
• Quizás el lenguaje orientado a objetos que más usuarios ha tenido. Fue diseñado
por Bjarne Stroustrup y apoyado posteriormente por su organización, los
laboratorios Bell de AT&T.
• Su desarrollo se extiende desde 1979 hasta 1992. Tomó ideas de Simula 67, ya que
su intención era unir las características orientadas a objetos de Simula con la
eficiencia de C. Más adelante incorporó ideas de Ada, de ML y de Smalltalk.
• Deseaba mejorar la comprobación estática de tipos de C para hacerlo más seguro.
Antes de C++, desarrolló un lenguaje preprocesado al que llamó “C con clases”.
• Generó para él una librería de clases que fue el embrión de la futura librería de C++.
• Para mejorar la eficiencia permitió algunos objetos no apuntados por punteros.
También dejó el manejo de la memoria dinámica en manos del programador como
en C, renunciando a un recolector automático de basura.
• C++ no es exactamente un superconjunto de C, sino que tiene algunas
incompatibilidades con este.
• Dentro de este enfoque pragmático, tampoco quiso que C++ fuese un lenguaje
totalmente encerrado en su entorno al estilo de Simula o de Smalltalk, sino que
pudiera llamarse desde C++ a programas escritos en otros lenguajes y viceversa.
Según su autor, esta fue una de las razones de su éxito.
R. Peña (SIC-UCM) Programación orientada a objetos Master Secundaria 09-10 10 / 16
Características e impacto de C++
• La versión 1.0 de C++ (1983) añadía sobre C con clases, la posibilidad de
funciones virtuales y de operaciones sobrecargadas definidas por el programador.
Una función virtual es una operación cuyo tipo se define en una clase pero no se
implementa en ella, sino que lo hace en sus subclases.
• Siguieron las versiones 1.1 (1986), 1.2 (1987) y 2.0 (1988). En ellas se añadieron
las clases abstractas, los llamados miembros estáticos y la herencia múltiple, que es
la posibilidad de que una subclase lo sea de más de una clase.
• En 1990 se inició la estandarización por ANSI e ISO y su autor incluyó dos
facilidades más: las plantillas y el tratamiento de excepciones.
• Las plantillas son clases genéricas al estilo de Ada, que tienen una o más clases
como parámetros. Gracias a las plantillas, se pueden definir en C++ las estructuras
de datos y los algoritmos de forma genérica.
• El lenguaje se difundió rápidamente en todos los entornos que utilizaban C. Los
usuarios lo aceptaron como una mejora en cuanto a seguridad y a modularidad pero
que, sin embargo, les permitía la misma flexibilidad que C.
• Dado su carácter de casi-superconjunto, muchos programas C fueron adaptados con
facilidad a C++. Hacia 1986, la comunidad de usuarios alcanzaba ya varios miles.

R. Peña (SIC-UCM) Programación orientada a objetos Master Secundaria 09-10 11 / 16


Una clase en C++

R. Peña (SIC-UCM) Programación orientada a objetos Master Secundaria 09-10 12 / 16


Java
• La década de los 90 ha visto nacer otro lenguaje orientado a objetos, Java, que se
ha extendido como la pólvora y que ha reemplazado en muchas empresas a C++.
• El éxito de Java está ligado en gran parte a su asociación con Internet ya que todos
los navegadores incluyen un intérprete de la máquina virtual de Java.
• Su origen se sitúa en un proyecto secreto iniciado por Sun Microsystems en 1991,
cuyo objetivo era desarrollar controladores para aparatos de consumo doméstico.
• Necesitaban un lenguaje que se ejecutara en plataformas con variados procesadores,
pocos recursos de memoria, sin disco duro, y cuyo código pudiera viajar por cable.
Unos primeros intentos con C++ les convencieron de que este era un lenguaje
demasiado voluminoso.
• James Gosling fue el líder del grupo y el que diseñó el lenguaje, al que llamó Oak.
Tomó de C++ y de Smalltalk las facilidades que consideró más apropiadas.
• Las compañías de TV por cable no se mostraron muy interesadas por la nueva
tectología. Entonces Sun inició la búsqueda de nuevos clientes.
• En 1993, el National Center for Supercomputing Applications lanzó el primer
navegador al estilo actual (Mosaic). El grupo de Gosling lo clonó en Oak y le añadió
posibilidades de animación: Incluyeron pequeños programas Oak —a los que hoy
llamamos applets— dentro del texto de las páginas HTML. Le llamaron WebRunner.
R. Peña (SIC-UCM) Programación orientada a objetos Master Secundaria 09-10 13 / 16
Java (2)
• En una presentación a comienzos de 1995, WebRunner causó una honda impresión:
internet no sería ya un mero almacén de textos pasivos, sino una colección de
informaciones activas, con todas las posibilidades de animación gráfica e interacción.
• En algún momento de ese año, Sun decidió patentar el lenguaje y se encontró con
que el nombre Oak ya estaba ocupado. Rápidamente decidieron cambiarlo a Java,
nombre relacionado con la marca de café consumida por el grupo.
• En mayo de 1995, Sun presentó públicamente Java en el congreso anual SunWorld,
en el que la recién creada empresa Netscape presentaba su navegador, que para
entonces ya estaba revolucionando la red.
• El director de la oficina científica de Sun y el vicepresidente de Netscape llegaron a
un entendimiento comercial: los navegadores de Netscape incluirían la máquina
abstracta de Java y ejecutarían animaciones mediante applets incrustados en el
código HTML.
• La tecnología independiente de la plataforma de Java y los navegadores de internet,
parecían hechos el uno para el otro. En palabras de Gosling “fue una increible
casualidad” que se encontraran mutuamente en el mismo preciso momento histórico.
• A partir de ese anuncio, y de la decisión de Sun de difundir libremente el código de
la máquina abstracta y del compilador del lenguaje, Java se expandió con aún
mayor rapidez que C++.
R. Peña (SIC-UCM) Programación orientada a objetos Master Secundaria 09-10 14 / 16
Características de Java

• El estilo sintáctico, la decisión de comprobar estáticamente los tipos y la


introducción de funciones sobrecargadas están tomadas de C++.
• El ser interpretado, la máquina abstracta, la introducción de un recolector
automático de basura, la obligación de que todos los objetos sean apuntados por
punteros y la herencia simple, están tomados de Smalltalk.
• Java tiene también métodos abstractos (equivalentes a las funciones virtuales de
C++), clases abstractas (las que tienen algún método abstracto) y clases interfaz
(las que tien todos sus métodos abstractos).
• Incorpora como novedad los métodos finales (no pueden ser redefinidos en las
subclases) y las clases finales (no pueden tener subclases).
• La innovación principal fue definir tipos de datos independientes de cualquier
plataforma. En Java hay, por ejemplo, cuatro tipos de enteros denominados
respectivamente byte, short, int y long. Su tamaño ha de ser necesariamente de 8,
16, 32 y 64 bits. Toda plataforma ha de soportar estos tipos, bien directamente, o
bien simulándolos por software. Esta decisión asegura que los programas se
ejecutarán exactamente igual en todas las máquinas.

R. Peña (SIC-UCM) Programación orientada a objetos Master Secundaria 09-10 15 / 16


Una clase en Java
// Clase para manipular fechas
public class Fecha
{
// Construye una fecha por defecto, si no se dan parametros
public Fecha ( )
{ dia = 1; mes = 1; anno = 2000 }
// Construye una fecha concreta
public Fecha (int d, int m, int a)
{ dia = d; mes = m; anno = a }
public boolean MayorQue (Fecha f2)
{ return anno > f2.anno ||
anno == f2.anno && (mes > f2.mes ||
mes == f2.mes && dia > f2.dia);
}
// Atributos privados de la clase
private int dia;
private int mes;
private int anno;
}
R. Peña (SIC-UCM) Programación orientada a objetos Master Secundaria 09-10 16 / 16

Potrebbero piacerti anche