Programación Orientada a Objetos

9
Programación orientada a objetos De Wikipedia, la enciclopedia libre Saltar a navegación , búsqueda La exactitud de la información de este artículo está discutida . En la página de discusión puede consultar el debate al respecto. La Programación Orientada a Objetos (POO u OOP según siglas en inglés ) es un paradigma de programación que define los programas en términos de "clases de objetos ", objetos que son entidades que combinan estado (es decir, datos), comportamiento (esto es, procedimientos o métodos ) e identidad (propiedad del objeto que lo diferencia del resto). La programación orientada a objetos expresa un programa como un conjunto de estos objetos, que colaboran entre ellos para realizar tareas. Esto permite hacer los programas y módulos más fáciles de escribir, mantener y reutilizar. De esta forma, un objeto contiene toda la información, (los denominados atributos) que permite definirlo e identificarlo frente a otros objetos pertenecientes a otras clases (e incluso entre objetos de una misma clase, al poder tener valores bien diferenciados en sus atributos). A su vez, dispone de mecanismos de interacción (los llamados métodos) que favorecen la comunicación entre objetos (de una misma clase o de distintas), y en consecuencia, el cambio de estado en los propios objetos. Esta característica lleva a tratarlos como unidades indivisibles, en las que no se separan (ni deben separarse) información (datos) y procesamiento (métodos).

description

Programación Orientada a Objetos

Transcript of Programación Orientada a Objetos

Programacin orientada a objetos

Programacin orientada a objetos

De Wikipedia, la enciclopedia libre

Saltar a navegacin, bsqueda

La exactitud de la informacin de este artculo est discutida.En la pgina de discusin puede consultar el debate al respecto.

La Programacin Orientada a Objetos (POO u OOP segn siglas en ingls) es un paradigma de programacin que define los programas en trminos de "clases de objetos", objetos que son entidades que combinan estado (es decir, datos), comportamiento (esto es, procedimientos o mtodos) e identidad (propiedad del objeto que lo diferencia del resto). La programacin orientada a objetos expresa un programa como un conjunto de estos objetos, que colaboran entre ellos para realizar tareas. Esto permite hacer los programas y mdulos ms fciles de escribir, mantener y reutilizar.

De esta forma, un objeto contiene toda la informacin, (los denominados atributos) que permite definirlo e identificarlo frente a otros objetos pertenecientes a otras clases (e incluso entre objetos de una misma clase, al poder tener valores bien diferenciados en sus atributos). A su vez, dispone de mecanismos de interaccin (los llamados mtodos) que favorecen la comunicacin entre objetos (de una misma clase o de distintas), y en consecuencia, el cambio de estado en los propios objetos. Esta caracterstica lleva a tratarlos como unidades indivisibles, en las que no se separan (ni deben separarse) informacin (datos) y procesamiento (mtodos).

Dada esta propiedad de conjunto de una clase de objetos, que al contar con una serie de atributos definitorios, requiere de unos mtodos para poder tratarlos (lo que hace que ambos conceptos estn ntimamente entrelazados), el programador debe pensar indistintamente en ambos trminos, ya que no debe nunca separar o dar mayor importancia a los atributos en favor de los mtodos, ni viceversa. Hacerlo puede llevar al programador a seguir el hbito errneo de crear clases contenedoras de informacin por un lado y clases con mtodos que manejen esa informacin por otro (llegando a una programacin estructurada camuflada en un lenguaje de programacin orientado a objetos).

Esto difiere de los lenguajes imperativos tradicionales, en los que los datos y los procedimientos estn separados y sin relacin, ya que lo nico que se busca es el procesamiento de unos datos de entrada para obtener otros de salida. La programacin estructurada anima al programador a pensar sobre todo en trminos de procedimientos o funciones, y en segundo lugar en las estructuras de datos que esos procedimientos manejan. Los programadores de lenguajes imperativos escriben funciones y despus les pasan datos. Los programadores que emplean lenguajes orientados a objetos definen objetos con datos y mtodos y despus envan mensajes a los objetos diciendo qu realicen esos mtodos en s mismos.

Algunas personas tambin distinguen la POO sin clases, la cual es llamada a veces programacin basada en objetos.

Tabla de contenidos

[ocultar] 1 Origen

2 Diferencias con la programacin imperativa

3 La Programacin Orientada a Objetos (POO) como solucin

4 Caractersticas de la POO

5 Lenguajes orientados a objetos

[editar] OrigenLos conceptos de la programacin orientada a objetos tienen origen en Simula 67, un lenguaje diseado para hacer simulaciones, creado por Ole-Johan Dahl y Kristen Nygaard del Centro de Cmputo Noruego en Oslo. Segn se informa, la historia es que trabajaban en simulaciones de naves, y fueron confundidos por la explosin combinatoria de cmo las diversas cualidades de diversas naves podan afectar unas a las otras. La idea ocurri para agrupar los diversos tipos de naves en diversas clases de objetos, siendo responsable cada clase de objetos de definir sus propios datos y comportamiento. Fueron refinados ms tarde en Smalltalk, que fue desarrollado en Simula en Xerox PARC (y cuya primera versin fue escrita sobre Basic) pero diseado para ser un sistema completamente dinmico en el cual los objetos se podran crear y modificar "en marcha" en lugar de tener un sistema basado en programas estticos.

La programacin orientada a objetos tom posicin como la metodologa de programacin dominante a mediados de los aos ochenta, en gran parte debido a la influencia de C++ , una extensin del lenguaje de programacin C. Su dominacin fue consolidada gracias al auge de las Interfaces grficas de usuario, para los cuales la programacin orientada a objetos est particularmente bien adaptada. En este caso, se habla tambin de programacin dirigida por eventos.

Las caractersticas de orientacin a objetos fueron agregadas a muchos lenguajes existentes durante ese tiempo, incluyendo Ada, BASIC, Lisp, Pascal, y otros. La adicin de estas caractersticas a los lenguajes que no fueron diseados inicialmente para ellas condujo a menudo a problemas de compatibilidad y a la capacidad de mantenimiento del cdigo. Los lenguajes orientados a objetos "puros", por otra parte, carecan de las caractersticas de las cuales muchos programadores haban venido a depender. Para saltar este obstculo, se hicieron muchas tentativas para crear nuevos lenguajes basados en mtodos orientados a objetos, pero permitiendo algunas caractersticas imperativas de maneras "seguras". El Eiffel de Bertrand Meyer fue un temprano y moderadamente acertado lenguaje con esos objetivos pero ahora ha sido esencialmente reemplazado por Java, en gran parte debido a la aparicin de Internet, y a la implementacin de la mquina virtual de Java en la mayora de navegadores.

[editar] Diferencias con la programacin imperativaAunque la programacin imperativa (a veces llamada procedural o procedimental) condujo a mejoras de la tcnica de programacin secuencial, tales como la programacin estructurada y "refinamientos sucesivos", los mtodos modernos de diseo de software orientado a objetos incluyen mejoras entre las que estn el uso de los patrones de diseo, diseo por contrato, y lenguajes de modelado (ej: UML).

Las principales diferencias entre la programacin imperativa y la orientada a objetos son:

La programacin orientada a objetos es ms moderna, es una evolucin de la programacin imperativa que plasma en el diseo de una familia de lenguajes conceptos que existan previamente con algunos nuevos.

La programacin orientada a objetos se basa en lenguajes que soportan sintctica y semnticamente la unin entre los tipos abstractos de datos y sus operaciones (a esta unin se la suele llamar clase).

La programacin orientada a objetos incorpora en su entorno de ejecucin mecanismos tales como el polimorfismo y el envo de mensajes entre objetos.

Erroneamente se le adjudica a la programacin imperativa clsica ciertos problemas como si fueran inherentes a la misma. Esos problemas fueron hacindose cada vez ms graves y antes de la programacin orientada a objetos diversos autores (de los que podemos destacar a Jourdon) encontraron soluciones basadas en aplicar estrictas metodologas de trabajo. De esa poca son los conceptos de cohesin y acoplamiento. De esos problemas se destacan los siguientes:

Modelo mental anmalo. Nuestra imagen del mundo se apoya en los seres, a los que asignamos nombres sustantivos, mientras la programacin clsica se basa en el comportamiento, representado usualmente por verbos.

Es difcil modificar y extender los programas, pues suele haber datos compartidos por varios subprogramas, que introducen interacciones ocultas entre ellos.

Es difcil mantener los programas. Casi todos los sistemas informticos grandes tienen errores ocultos, que no surgen a la luz hasta despus de muchas horas de funcionamiento.

Es difcil reutilizar los programas. Es prcticamente imposible aprovechar en una aplicacin nueva las subrutinas que se disearon para otra.

Es compleja la coordinacin y organizacin entre programadores para la creacin de aplicaciones de media y gran envergadura.

En la programacin orientada a objetos pura no deben utilizarse llamadas de subrutinas, nicamente mensajes.

Por ello, a veces recibe el nombre de programacin sin CALL, igual que la programacin estructurada se llama tambin programacin sin GOTO.

Sin embargo, no todos los lenguajes orientados a objetos prohben la instruccin CALL (o su equivalente), permitiendo realizar programacin hbrida, imperativa y orientada a objetos a la vez.

[editar] La Programacin Orientada a Objetos (POO) como solucinLa programacin orientada a objetos es una nueva forma de programar que trata de encontrar solucin a estos problemas. Introduce nuevos conceptos, que superan y amplan conceptos antiguos ya conocidos. Entre ellos destacan los siguientes:

Objeto: entidad provista de un conjunto de propiedades o atributos (datos) y de comportamiento o funcionalidad ("mtodos"). Corresponden a los objetos reales del mundo que nos rodea, o a objetos internos del sistema (del programa).

Clase: definiciones de las propiedades y comportamiento de un tipo de objeto concreto. La instanciacin es la lectura de estas definiciones y la creacin de un objeto a partir de ellas.

Mtodo: algoritmo asociado a un objeto (o a una clase de objetos), cuya ejecucin se desencadena tras la recepcin de un "mensaje". Desde el punto de vista del comportamiento, es lo que el objeto puede hacer. Un mtodo puede producir un cambio en las propiedades del objeto, o la generacin de un "evento" con un nuevo mensaje para otro objeto del sistema.

Evento: un suceso en el sistema (tal como una interaccin del usuario con la mquina, o un mensaje enviado por un objeto). El sistema maneja el evento enviando el mensaje adecuado al objeto pertinente.

Mensaje: una comunicacin dirigida a un objeto, que le ordena que ejecute uno de sus mtodos con ciertos parmetros asociados al evento que lo gener.

Propiedad o atributo: contenedor de un tipo de datos asociados a un objeto (o a una clase de objetos), que hace los datos visibles desde fuera del objeto, y cuyo valor puede ser alterado por la ejecucin de algn mtodo.

Estado interno: es una propiedad invisible de los objetos, que puede ser nicamente accedida y alterada por un mtodo del objeto, y que se utiliza para indicar distintas situaciones posibles para el objeto (o clase de objetos).

En comparacin con un lenguaje imperativo, una "variable" no es ms que un contenedor interno del atributo del objeto o de un estado interno, as como la "funcin" es un procedimiento interno del mtodo del objeto.

[editar] Caractersticas de la POOHay un cierto desacuerdo sobre exactamente qu caractersticas de un mtodo de programacin o lenguaje le definen como "orientado a objetos", pero hay un consenso general en que las caractersticas siguientes son las ms importantes (para ms informacin, seguir los enlaces respectivos):

Abstraccin: Cada objeto en el sistema sirve como modelo de un "agente" abstracto que puede realizar trabajo, informar y cambiar su estado, y "comunicarse" con otros objetos en el sistema sin revelar cmo se implementan estas caractersticas. Los procesos, las funciones o los mtodos pueden tambin ser abstrados y cuando lo estn, una variedad de tcnicas son requeridas para ampliar una abstraccin.

Encapsulamiento: tambin llamado "ocultacin de la informacin". Cada objeto est aislado del exterior, es un mdulo natural, y cada tipo de objeto expone una interfaz a otros objetos que especifica cmo pueden interactuar con los objetos de la clase. El aislamiento protege a las propiedades de un objeto contra su modificacin por quien no tenga derecho a acceder a ellas, solamente los propios mtodos internos del objeto pueden acceder a su estado. Esto asegura que otros objetos no pueden cambiar el estado interno de un objeto de maneras inesperadas, eliminando efectos secundarios e interacciones inesperadas. Algunos lenguajes relajan esto, permitiendo un acceso directo a los datos internos del objeto de una manera controlada y limitando el grado de abstraccin. La aplicacin entera se reduce a un agregado o rompecabezas de objetos.

Polimorfismo: comportamientos diferentes, asociados a objetos distintos, pueden compartir el mismo nombre, al llamarlos por ese nombre se utilizar el comportamiento correspondiente al objeto que se est usando. O dicho de otro modo, las referencias y las colecciones de objetos pueden contener objetos de diferentes tipos, y la invocacin de un comportamiento en una referencia producir el comportamiento correcto para el tipo real del objeto referenciado. Cuando esto ocurre en "tiempo de ejecucin", esta ltima caracterstica se llama asignacin tarda o asignacin dinmica. Algunos lenguajes proporcionan medios ms estticos (en "tiempo de compilacin") de polimorfismo, tales como las plantillas y la sobrecarga de operadores de C++.

Herencia: las clases no estn aisladas, sino que se relacionan entre s, formando una jerarqua de clasificacin. 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. Estos pueden compartir (y extender) su comportamiento sin tener que reimplementar su comportamiento. Esto suele hacerse habitualmente agrupando los objetos en clases y estas en rboles o enrejados que reflejan un comportamiento comn. Cuando un objeto hereda de ms de una clase se dice que hay herencia mltiple; esta caracterstica no est soportada por algunos lenguajes (como Java).

[editar] Lenguajes orientados a objetosEntre los lenguajes orientados a objetos destacan los siguientes:

Ada

C++

C#

VB.NET

Visual FoxPro

Clarion

Delphi

Eiffel

Java

Lexico (en castellano)

Objective-C

Ocaml

Oz

Perl (soporta herencia multiple)

PHP

PowerBuilder

Python

Ruby

Smalltalk

Magik(SmallWorld)

No todos estos lenguajes de programacin son igualmente puros (avanzados) en orientacin a objetos.

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.

Obtenido de "http://es.wikipedia.org/wiki/Programaci%C3%B3n_orientada_a_objetos"