Programación orientada a objetos 1. Introducción.

Anuncio
Programación orientada a objetos
Julia de Frutos
Eduardo Fernández
Programación orientada a objetos
1. Introducción.
La programación orientada a objetos (Poo) es un paradigma de
programación más orientado a como vemos las cosas en la vida real que
otros tipos de programación (programación lógica, funcional, imperativa,...)
Este tipo de programación permite solventar algunos de los problemas
que ha tenido el desarrollo del software desde sus comienzos, como por
ejemplo la falta de portabilidad y baja reusabilidad del código, junto con la
dificultad en la modificación y desarrollo del mismo. Además es una técnica
de codificación bastante mas intuitiva que el resto.
La programación orientada a objetos tiene tres propiedades básicas:
Debe estar basado en objetos, estar basado en clases y debe de ser capaz
de mantener una herencia entre clases. La mayoría de los lenguajes
cumplen una o dos de estas propiedades pero pocos logran cumplir las tres.
En particular, la herencia.
Posteriormente veremos los conceptos objeto, clase y herencia junto
con el resto de conceptos asociadazos a la Poo.
Aprender esta técnica no es complicado, pero es una manera subjetiva
de programar que depende del desarrollador. Aunque podemos dar
diferentes soluciones a un mismo problema, no todas ellas son válidas. La
dificultad no radica en aprender esta técnica, si no en ejecutarla bien. Solo
programando bien podemos aprovechar todas las ventajas que nos ofrece la
programación orientada a objetos.
2. Origen.
Los orígenes de la programación orientada a objetos se encuentran en
Simula67. Este era un lenguaje creado para realizar simulaciones en el
Centro de Cómputo Noruego en Oslo. Sus desarrolladores fueron Ole-Johan
Dahl y Kristen Nygaard.
Se dieron cuenta de que las cualidades de las naves con las que estaban
simulando podía afectar unas a otras. Su idea fue la de agrupar diversos
tipos de naves en diversas clases de objetos. Los objetos se agrupan en
clases y estas definen sus propios datos y operaciones. Esta idea fue pulida
posteriormente en Smalltak1, desarrollado en Simula2 en Xerox PARC3.
Smalltalk: es un sistema informático que permite realizar tareas de computación mediante la
interacción con un entorno de objetos virtuales.
2
Simula: primer lenguaje de programación orientada a objetos (OOP).
1
1
Programación orientada a objetos
Julia de Frutos
Eduardo Fernández
Fue diseñado para ser un sistema completamente dinámico en el cual los
objetos se podrían crear y modificar "en marcha" en lugar de tener un
sistema basado en programas estáticos.
En los años ochenta la programación orientada a objetos adquiere un
papel dominante debido a la aparición de C++, una extensión de C que
soporta este tipo de programación. Termina consolidándose finalmente con
el auge de las Interfaces gráficas de usuario. Estas facilitan la comunicación
del usuario con el ordenador mediante un sistema de iconos, ventanas y
textos para los cuales la programación orientada a objetos está muy bien
adaptada.
Las características de esta técnica de programación fueron añadidas a
muchos lenguajes existentes tales como Ada, Basic, Fortran, Pascal y otros.
Pero estos lenguajes no se crearon para soportarlas lo que condujo a
problemas de compatibilidad y mantenimiento del código, mientras que los
lenguajes diseñados específicamente para ello carecían de las herramientas
indispensables para muchos programadores que no podían trabajar sin
ellas.
El problema era conseguir un lenguaje basado en los métodos de la
programación orientada a objetos, pero que incluyese algunas de las
características del resto de paradigmas de manera segura. El Eiffel de
Bertrand Meyer fue uno de los primeros leguajes que solventaron este
problema; aunque se encuentra en desuso debido a la gran aceptación de
Java y su maquina virtual que se encuentra implantada en la mayoría de
navegadores web.
Mas recientemente, nuevos lenguajes han apareciendo orientados a
objetos pero con un procedimiento mas metodológico, como Pitón y Ruby.
Probablemente, después de Java los lenguajes orientados a objetos mas
importantes sean Visual Basic y C# diseñados para la plataforma .NET4 de
Microsoft.
3. Conceptos básicos de POO.
 Objeto: Conjunto concreto de datos y operaciones (métodos). Se
corresponden con los objetos que nos rodean. Un ejemplo de objeto puede
ser un libro. Tiene una serie de propiedades (número de hojas, autor,
editor, ...) y unas operaciones (se puede abrir, leer, anotar, ...)
 Clase: Conjunto de las propiedades y métodos de un tipo de objeto
determinado. Podemos definir la clase libro, donde un objeto perteneciente
a esta clase sería “El Camino” de Miguel Delibes.
3
Xerox PARC: una división de investigación de Xerox Corporation, con sede en Palo Alto.
4
.NET: proyecto de Microsoft para crear una nueva plataforma que permita un desarrollo de aplicaciones
rápido. Microsoft pretende desarrollar una estrategia que sume todos sus productos, desde el Sistema
Operativo hasta sus herramientas de mercado.
2
Programación orientada a objetos
Julia de Frutos
Eduardo Fernández
 Método: Algoritmo asociado a una clase de objetos o a uno de ellos.
Se ejecutan tras recibir un "mensaje". Un método es lo que los objetos
pueden hacer. No puedo escribir con un libro, por ejemplo. Un método
puede producir un cambio en algunas de las propiedades del objeto, y/o la
generación de un "evento" junto con un mensaje que se envía a otro objeto
o así mismo. De esta forma, en el ejemplo de los libros, el método leer
generaría un mensaje dirigido al propio libro para que fuese abierto.
 Evento: Es un suceso en el sistema. El programa envía el mensaje
adecuado al objeto pertinente.
 Mensaje: Información dirigida a un objeto, el cual le dice que ejecute
uno de sus métodos con ciertos parámetros asociados al evento que lo
generó.
 Propiedad o atributo: Características de un objeto o una clase de
objetos. Permiten ver los datos asociados a un objeto desde fuera. Su valor
puede ser alterado por el evento provocado por un método
 Estado interno: Propiedad invisible de los objetos que solo se ve
afectada por un método del objeto. Se utiliza para indicar las distintas
situaciones del objeto o clases de objetos.
4. Características de la Poo.
 Abstracción:
Permite no preocuparse por los detalles de
implementación de cada tipo de dato. Estos toman el nombre de tipos de
datos abstractos (TDA), incluidos en los lenguajes Pascal, Ada, Modula-2 y
C++ entre otros. La abstracción está presente en casi todos los lenguajes
de programación actuales. Algunos ejemplos de abstracción son los ya
mencionados TDA, las estructuras de datos, los procedimientos y las
funciones.
 Encapsulamiento: Consiste en separar la implementación de los
objetos de los objetos en si. De este modo solo se puede cambiar el estado
del objeto mediante las operaciones asociadas al mismo, sin tener que
modificar su código. Así también se evita que el usuario altere su estado de
manera incontrolada.
Esta propiedad también recibe el nombre de “ocultación de la información”.
El usuario del objeto desconoce la distribución de la información dentro del
objeto y la información disponible en él. Pero gracias a los métodos
asociados a cada uno puede usarlos y manejarlos. Un ejemplo de
encapsulamiento es el circuito eléctrico de una casa. El usuario solo accede
a ciertas partes del circuito (enchufes e interruptores), aunque las partes
del circuito internas comparten información entre si.
 Polimorfismo: Es la posibilidad que ofrece la Poo de asociar a objetos
diferentes distintos métodos con el mismo nombre. Cada objeto actuará en
consecuencia según como este implementado el método. Por ejemplo, el
mensaje "+" a un objeto de tipo entero significa suma, mientras que para
un objeto de tipo cadena significaría concatenación.
3
Programación orientada a objetos
Julia de Frutos
Eduardo Fernández
Cuando esto sucede en tiempo de ejecución, hablamos de asignación tardía
o asignación dinámica. C++ tiene la posibilidad de polimorfismo en tiempo
de compilación mediante operadores.
 Herencia: las clases de objetos no están desligadas unas de otras,
sino que se relacionan entre sí, formando una jerarquía. 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.
Esto suele hacerse agrupando los objetos en clases y las clases en árboles
que reflejan un comportamiento común. Cuando un objeto pertenece a más
de una clase se llama herencia múltiple, aunque esta característica no está
soportada por algunos lenguajes como Java.
5. Diferencias con la programación imperativa5.
La programación imperativa condujo a mejoras de la técnica de
programación secuencial, tales como la programación estructurada y
"refinamientos sucesivos", los métodos modernos de diseño de software
orientado a objetos incluyen mejoras entre las que están el uso de los
patrones de diseño, diseño por contrato, y lenguajes de modelado (ej:
UML).
Las principales diferencias son:
 La POO es más moderna, es una evolución de la programación
imperativa que plasma en el diseño de una familia de lenguajes conceptos
que existían previamente con algunos nuevos.
 La POO se basa en lenguajes que soportan sintáctica y
semánticamente la unión entre los tipos abstractos de datos y sus
operaciones (a esta unión se la suele llamar clase).
 La POO incorpora en su entorno de ejecución mecanismos tales como
el polimorfismo(capacidad del código de un programa para ser utilizado con
diferentes tipos de datos) y el envío de mensajes entre objetos.
Con el tiempo se le fueron adjudicando problemas a la programación
imperativa. Esos problemas fueron haciéndose cada vez más graves y antes
de la programación orientada a objetos diversos autores encontraron
soluciones basadas en aplicar estrictas metodologías de trabajo. De esa
época son los conceptos de cohesión y acoplamiento. De esos problemas se
destacan los siguientes:
5
Apartado extraído de http://es.wikipedia.org/wiki/Orientado_a_objetos
4
Programación orientada a objetos
Julia de Frutos
Eduardo Fernández
 Modelo mental anómalo. Nuestra imagen del mundo se apoya en los
seres, a los que asignamos nombres sustantivos, mientras la programación
clásica se basa en el comportamiento, representado usualmente por verbos.
 Es difícil modificar y extender los programas, pues suele haber datos
compartidos por varios subprogramas, que introducen interacciones ocultas
entre ellos.
 Es difícil mantener los programas. Casi todos los sistemas informáticos
grandes tienen errores ocultos, que no surgen a la luz hasta después de
muchas horas de funcionamiento.
 Es difícil reutilizar los programas. Es prácticamente imposible
aprovechar en una aplicación nueva las subrutinas que se diseñaron para
otra.
 Es compleja la coordinación y organización entre programadores para
la creación de aplicaciones de media y gran envergadura.
En la programación orientada a objetos pura no deben utilizarse llamadas
de subrutinas, únicamente mensajes.
Por ello, a veces recibe el nombre de programación sin CALL, igual que la
programación estructurada se llama también programación sin GOTO.
Sin embargo, no todos los lenguajes orientados a objetos prohíben la
instrucción CALL (o su equivalente), permitiendo realizar programación
imperativa y orientada a objetos a la vez.
6. Lenguajes orientados a objetos







Ada: se usa en entornos en los que se necesita una gran seguridad y
fiabilidad, como en la defensa.
C++: está considerado como el lenguaje más potente, debido a que
permite trabajar tanto a alto como a bajo nivel, aunque obliga a
hacer casi todo manualmente, al igual que C, lo que hace difícil
aprendizaje.
C#: combina el control a bajo nivel de lenguajes como C y la
velocidad de programación de lenguajes como Visual Basic.
VB.NET: es una versión de Visual Basic destinada al desarrollo de
aplicaciones .NET. Visual Basic apareció en el año 1991 como una
evolución del QuickBasic que fabricaba Microsoft.
Clarion: está orientado a la programación de aplicaciones de bases de
datos. Es compatible con una gran cantidad de ellas incluyendo
todas las de formato SQL, ADO, y XML, además puede generar
salidas a HTML, XML, archivos de texto y PDF, entre otros.
Delphi: entorno de desarrollo de software diseñado para
programación general con especial énfasis en la programación visual.
En Delphi se utiliza como lenguaje una versión moderna de Pascal
llamada Object Pascal. Es producido por Borland. Delphi da la
posibilidad de producir archivos ejecutables para Windows,
GNU/Linux y la plataforma .NET.
Eiffel: fue creado en 1985 por Bertrand Meyer. Se centra en la
construcción de software robusto. Su lenguaje es parecido al de
Pascal.
5
Programación orientada a objetos









Julia de Frutos
Eduardo Fernández
Java: fue desarrollado por James Gosling y sus compañeros de Sun
Microsystems al inicio de la década de 1990. A diferencia de los
lenguajes de programación convencionales, Java es compilado en un
bytecode6 que es ejecutado por una máquina virtual Java. El lenguaje
toma mucha de su sintaxis de C y C++, pero tiene un modelo de
objetos mucho más simple y elimina herramientas como los punteros.
Lexico: es un lenguaje en español que busca facilitar el aprendizaje y
la enseñanza de la programación orientada a objetos. Permite
experimentar con los algoritmos diseñados sin tener que dedicar
meses a aprender un lenguaje de programación.
Objective-C: Es el principal lenguaje de programación en Mac OS X.
Mac OS X es el sistema operativo de la familia de ordenadores
Macintosh.
Ocaml: nace de la evolución del lenguaje CAML, abreviación de
Categorical Abstract Machine Language), al integrarsele la
programación con objetos.
Oz: es un lenguaje multi-paradigma. Contiene la mayoría de los
conceptos de los principales paradigmas de programación, incluyendo
programación lógica, funcional, imperativa, orientada a objetos, con
restricciones, distribuida y concurrente.
PHP: es un lenguaje de programación usado generalmente para la
creación de contenidos en webs. El nombre es el acrónimo recursivo
de "PHP: Hypertext Preprocessor", inicialmente PHP Tools, o,
Personal Home Page Tools. Se trata de un lenguaje interpretado.
PowerBuilder: herramienta de desarrollo de clase empresarial creada
por la empresa Sybase. PowerBuilder permite el desarrollo de
diferentes tipos de aplicaciones y componentes para arquitecturas
cliente/servidor, distribuídas y Web. Las aplicaciones desarrolladas
con PowerBuilder solo pueden ser ejecutadas en el sistema operativo
Microsoft Windows, aunque cierto tipo de componenetes, llamados
componentes no visuales o NVOs, y que contienen sólo lógica de
aplicación, se pueden ejecutar en otros sistemas operativos como
Unix.
Python: es un lenguaje de programación interpretado e interactivo,
capaz de ejecutarse en gran cantidad de plataformas. Creado por
Guido van Rossum en 1990, su nombre procede de la afición de su
creador por los humoristas británicos Monty Python. El principal
objetivo de este lenguaje es la facilidad, tanto de lectura, como de
diseño.
Ruby: es un lenguaje de programación interpretado de muy alto
nivel. Fue creado en Japón en el año 1993 por Yukihiro Matz
Matsumoto.
6
Bytecode: código intermedio, más abstracto que el código máquina. Habitualmente se lo trata
como a un fichero binario que contiene un programa ejecutable similar a un objeto, que es un fichero
binario que contiene código máquina producido por el compilador.
6
Programación orientada a objetos

Julia de Frutos
Eduardo Fernández
Smalltalk: es considerado como el primer de los lenguaje orientado a
objetos. Dentro de Smalltalk todo es un objeto, incluidos los números
reales o el propio entorno Smalltalk.
No todos estos lenguajes son igualmente eficaces. Existen lenguajes
como OOCOBOL, OOLISP, OOPROLOG y Object REXX que han sido
desarrollados añadiendo a sus versiones anteriores las características de la
orientación a objetos, como ya pasara con C++.
7. Conclusión.
Pese a los grandes ventajas que ofrece la programación orientada a
objetos gracias a características propias como la herencia y la
encapsulación, aun quedan problemas por solucionar. No hay un lenguaje
dominante que elimine la dependencia que existe entre unos y otros, y las
definiciones de las clases pueden resultar erróneas después de meses de
trabajo. Por otro lado, todos los elementos del programa deben de ser
vistos como objetos y la transición a este tipo de programación hace que
sea necesario el reciclaje de muchos de los programadores.
Aun así, las líneas de investigación no se detienen y empieza a hablarse
de programación orientada a aspectos (POA). Aunque es todavía un
paradigma en estado embrionario, cada vez es mas gente la que se interesa
por ella.
8. Bibliografía.
http://es.wikipedia.org/wiki/Orientado_a_objetos
http://www.monografias.com/trabajos/objetos/objetos.shtml
http://www.desarrolloweb.com/articulos/499.php
7
Descargar