Imperativo o por procedimientos : es considerado el ms comn y est
representado, por ejemplo, por C, BASIC o Pascal Funcional : est representado por Scheme o Haskell. Este es un caso del paradigma declarativo. Lgico : est representado por Prolog. Este es otro caso del paradigma declarativo. Declarativo : por ejemplo la programacin funcional, la programacin lgica, o la combinacin lgico-funcional. Orientado a objetos : est representado por Smalltalk, un lenguaje completamente orientado a objetos. Si bien puede seleccionarse la forma pura de estos paradigmas al momento de programar, en la prctica es habitual ue se me!clen, dando lugar a la programacin multiparadigma. "ctualmente el paradigma de programacin ms usado es el de la programacin orientada a objetos. Imperativo o por procedimientos: #a programacin imperativa, en contraposicin a la programacin declarativa es un paradigma de programacin ue describe la programacin en t$rminos del estado del programa y sentencias ue cambian dicho estado. #os programas imperativos son un conjunto de instrucciones ue le indican al computador cmo reali!ar una tarea. #a implementacin de hardware de la mayor%a de computadores es imperativa& prcticamente todo el hard'are de los computadores est dise(ado para ejecutar cdigo de mquina, ue es nativo al computador, escrito en una forma imperativa. Esto se debe a ue el hard'are de los computadores implementa el paradigma de las Mquinas de Turing. )esde esta perspectiva de bajo nivel, el estilo del programa est definido por los contenidos de la memoria, y las sentencias son instrucciones en el lenguaje de muina nativo del computador *por ejemplo el lenguaje ensamblador). #os lenguajes imperativos de alto nivel usan variables y sentencias ms complejas, pero an siguen el mismo paradigma. #as recetas y las listas de revisin de procesos, a pesar de no ser programas de computadora, son tambi$n conceptos familiares similares en estilo a la programacin imperativa& cada paso es una instruccin, y el mundo f%sico guarda el estado *+oom,. #os primeros lenguajes imperativos fueron los lenguajes de muina de los computadores originales. En estos lenguajes, las instrucciones fueron muy simples, lo cual hi!o la implementacin de hard'are fcil, pero obstruyendo la creacin de programas complejos. Fortran, cuyo desarrollo fue iniciado en 19! por "ohn #ac$us en I#M, fue el primer gran lenguaje de programacin en superar los obstculos presentados por el cdigo de muina en la creacin de programas complejos. %lgunos lenguajes imperativos& BASIC , C , ortran , Pascal , Perl , PHP , !ua , "a#a Nota: Se ha dicho que el estilo de programacin imperativa, al permitir y depender de efectos colaterales, como el uso de variables globales, dificulta notablemente la depuracin y la paralelizacin (la habilidad para dividir el trabajo en muchos hilos de ejecucin simultnea, en contraposicin a los lenguajes funcionales puros, que se basan en el c$lculo lambda en lugar de la %$&uina de 'uring! Funcional& En ciencias de la computacin, la programacin 'uncional es un paradigma de programacin declarativa basado en la utili!acin de 'unciones aritm(ticas ue no maneja datos mutables o de estado. Enfati!a la aplicacin de funciones, en contraste con el estilo de programacin imperativa, ue enfati!a los cambios de estado. #a programacin funcional tiene sus ra%ces en el clculo lambda, un sistema formal desarrollado en los -./0s para investigar la definicin de funcin, la aplicacin de las funciones y la recursin. 1uchos lenguajes de programacin funcionales pueden ser vistos como elaboraciones del clculo lambda. En la prctica, la diferencia entre una funcin matemtica y la nocin de una 2funcin2 utili!ada en la programacin imperativa es ue las funciones imperativas pueden tener efectos secundarios, al cambiar el valor de clculos reali!ados previamente. 3or esta ra!n carecen de transparencia referencial, es decir, la misma e4presin ling5%stica puede resultar en valores diferentes en diferentes momentos dependiendo del estado del programa siendo ejecutado. 6on cdigo funcional, en contraste, el valor generado por una funcin depende e4clusivamente de los argumentos alimentados a la funcin. "l eliminar los efectos secundarios se puede entender y predecir el comportamiento de un programa mucho ms fcilmente, y esta es una de las principales motivaciones para utili!ar la programacin funcional. )iagrama del funcionamiento de una subrutina. #os lenguajes de programacin funcional, especialmente los ue son puramente funcionales, han sido enfati!ados en el ambiente acad$mico principalmente y no tanto en el desarrollo de soft'are comercial. Sin embargo, lenguajes de programacin importantes tales como Scheme, Erlang, 7bjective 6aml y 8as9el, han sido utili!ados en aplicaciones comerciales e industriales por muchas organi!aciones. #a programacin funcional tambi$n es utili!ada en la industria a trav$s de lenguajes de dominio espec%fico como : *estad%stica,, 1athematica *matemticas simblicas,, ; y < *anlisis financiero,, => en 1icrosoft.?E@ y AS#@ *A1#,. #enguajes de uso espec%fico usados comnmente como SB# y #e4CDacc, utili!an algunos elementos de programacin funcional, especialmente al procesar valores mutables. #as hojas de clculo tambi$n pueden ser consideradas lenguajes de programacin funcional. #a programacin funcional tambi$n puede ser desarrollada en lenguajes ue no estn dise(ados espec%ficamente para la programacin funcional. En el caso de )erl, por ejemplo, ue es un lenguaje de programacin imperativo, e4iste un libro ue describe como aplicar conceptos de programacin funcional. "ava*cript+ uno de los lenguajes ms ampliamente utili!ados en la actualidad, tambi$n incorpora capacidades de programacin funcional. E?37:@"?6E": El objetivo es conseguir lenguajes e4presivos y matemticamente elegantes, en los ue no sea necesario bajar al nivel de la muina para describir el proceso llevado a cabo por el programa, y evitar el concepto de estado del cmputo. #a secuencia de computaciones llevadas a cabo por el programa se rige nica y e4clusivamente por la reescritura de definiciones ms amplias a otras cada ve! ms concretas y definidas, usando lo ue se denominan 2de'iniciones dirigidas2 Caractersticas: #os programas escritos en un lenguaje funcional estn constituidos nicamente por definiciones de funciones, entendiendo $stas no como subprogramas clsicos de un lenguaje imperativo, sino como funciones puramente matemticas, en las ue se verifican ciertas propiedades como la transparencia re'erencial *el significado de una e4presin depende nicamente del significado de sus sube4presiones,, y por tanto, la carencia total de e'ectos colaterales, 7tras caracter%sticas propias de estos lenguajes son la no e4istencia de asignaciones de variables y la falta de construcciones estructuradas como la secuencia o la iteracin *lo ue obliga en la prctica a ue todas las repeticiones de instrucciones se lleven a cabo por medio de 'unciones recursivas,. E4isten dos grandes categor%as de lenguajes funcionales: los funcionales puros y los hbridos. #a diferencia entre ambos estriba en ue los lenguajes funcionales h%bridos son menos dogmticos ue los puros, al admitir conceptos tomados de los lenguajes imperativos, como las secuencias de instrucciones o la asignacin de variables. En contraste, los lenguajes funcionales puros tienen una mayor potencia e4presiva, conservando a la ve! su transparencia referencial, algo ue no se cumple siempre con un lenguaje funcional h%brido. -entajas de usar un paradigma 'uncional: Entre las ventajas ue suelen citarse de usar un paradigma funcional en la programacin de computadoras, estn las siguientes: "usencia de efectos colaterales 3roceso de depuracin menos problemtico 3ruebas de unidades ms confiables 1ayor facilidad para la ejecucin concurrente .enguajes 'uncionales: Entre los lenguajes funcionales puros, cabe destacar a /as$ell y Miranda. #os lenguajes funcionales h%bridos ms conocidos son *cala+ .isp, *cheme, 0caml, *%) y *tandard M. *estos dos ltimos, descendientes del lenguaje M.,. 1rlang es otro lenguaje funcional de programacin concurrente, Mathematica permite la programacin en mltiples estilos, pero promueve la programacin funcional. 2 tambi$n es un lenguaje funcional dedicado a la estad%stica. :ecientemente 1icrosoft :esearch est trabajando en el lenguaje F3 *=uncional>,. Entre otros lenguajes ue se podr%an utili!ar para programacin funcional se podr%an incluir a )erl, pues, aunue es un lenguaje de propsito muy general, se pueden reali!ar programas usando e4clusivamente funciones definidas por el usuario& as% como )4thon, como lenguaje ue incorpora el paradigma funcional& o 2ub4 .gico& #a programacin lgica es un tipo de paradigmas de programacin dentro del paradigma de programacin declarativa. El resto de los subparadigmas de programacin dentro de la programacin declarativa son: programacin 'uncional+ programacin con restricciones+ programas )S# *de dominio espec%fico, e h%bridos. #a programacin lgica gira en torno al concepto de predicado, o relacin entre elementos. #a programacin funcional se basa en el concepto de funcin *ue no es ms ue una evolucin de los predicados,, de corte ms matemtico. :E#"6E7? 8ES@7:E6": 8istricamente, los ordenadores se han programado utili!ando lenguajes muy cercanos a las peculiaridades de la propia muina: operaciones aritm$ticas simples, instrucciones de acceso a memoria, etc. Fn programa escrito de esta manera puede ocultar totalmente su propsito a la comprensin de un ser humano, incluso uno entrenado. 8oy d%a, estos lenguajes pertenecientes al paradigma de la )rogramacin imperativa han evolucionado de manera ue ya no son tan cr%pticos. En cambio, la lgica matemtica es la manera ms sencilla, para el intelecto humano, de e4presar formalmente problemas complejos y de resolverlos mediante la aplicacin de reglas, hiptesis y teoremas. )e ah% ue el concepto de 2programacin lgica2 resulte atractivo en diversos campos donde la programacin tradicional es un fracaso. %plicacin5 #a programacin lgica encuentra su hbitat natural en aplicaciones de inteligencia artificial o relacionada: sistema e4perto Sistemas e4pertos, donde un sistema de informacin imita las recomendaciones de un e4perto sobre algn dominio de conocimiento. (emostracin autom$tica de teoremas, donde un programa genera nuevos teoremas sobre una teor%a e4istente. :econocimiento de lenguaje natural, donde un programa es capa! de comprender *con limitaciones, la informacin contenida en una e4presin ling5%stica humana. Etc. #a programacin lgica tambi$n se utili!a en aplicaciones ms 2mundanas2 pero de manera muy limitada, ya ue la programacin tradicional es ms adecuada a tareas de propsito general. Fundamentos& #a mayor%a de los lenguajes de programacin lgica se basan en la teor6a lgica de primer orden, aunue tambi$n incorporan algunos comportamientos de orden superior. En este sentido, destacan los lenguajes funcionales, ya ue se basan en el clculo lambda , ue es la nica teor%a lgica de orden superior ue es demostradamente computable *hasta el momento,. .enguajes El lenguaje de programacin lgica por e4celencia es )rolog, ue cuenta con diversas variantes. #a ms importante es la programacin lgica con restricciones *v$ase art%culo sobre programacin con restricciones,, ue posibilita la resolucin de ecuaciones lineales adems de la demostracin de hiptesis. 7eclarativo& #a 3rogramacin )eclarativa, en contraposicin a la programacin imperativa es un paradigma de programacin ue est basado en el desarrollo de programas especificando o 2declarando2 un conjunto de condiciones, proposiciones, afirmaciones, restricciones, ecuaciones o transformaciones ue describen el problema y detallan su solucin. #a solucin es obtenida mediante mecanismos internos de control, sin especificar e4actamente cmo encontrarla *tan slo se le indica a la computadora ue es lo ue se desea obtener o ue es lo ue se est buscando,. ?o e4isten asignaciones destructivas, y las variables son utili!adas con Transparencia re'erencial 7i'erencia entre imperativo 4 declarativo En la programacin imperativa se describe paso a paso un conjunto de instrucciones ue deben ejecutarse para variar el estado del programa y hallar la solucin, es decir, un algoritmo en el ue se describen los pasos necesarios para solucionar el problema. En la programacin declarativa las sentencias ue se utili!an lo ue hacen es describir el problema ue se uiere solucionar, pero no las instrucciones necesarias para solucionarlo. Esto ltimo se reali!ar mediante mecanismos internos de in'erencia de informacin a partir de la descripcin reali!ada. Tipos E4isten varios tipos de lenguajes declarativos: #os lenguajes lgicos, como Prolog. #os lenguajes algebraicos, como %aude ) S*! #os lenguajes funcionales, como Haskell -entajas Se ha dicho ue los lenguajes declarativos tienen la ventaja de ser ra!onados matemticamente, lo ue permite el uso de mecanismos matemticos para optimi!ar el rendimiento de los programas. Son fiables, elegantes y e4presivos. %lgunos lenguajes declarativos Haskell +Programacin funcional, %! +Programacin funcional, !isp +Programacin funcional, Prolog +Programacin !gica, =-3rolog *3rogramacin #gica )ifusa, 6urry *3rogramacin #gico-=uncional, 0rientado a objetos& #a programacin orientada a objetos o 377 *773 segn sus siglas en ingl$s, es un paradigma de programacin ue usa objetos y sus interacciones, para dise(ar aplicaciones y programas in'ormticos, Est basado en varias t$cnicas, incluyendo herencia+ abstraccin+ polimor'ismo 4 encapsulamiento, Su uso se populari! a principios de la d$cada de los a(os -..0. En la actualidad, e4iste variedad de lenguajes de programacin ue soportan la orientacin a objetos. Introduccin #os objetos son entidades ue tienen un determinado estado, comportamiento (mtodo) e identidad: El estado est compuesto de datos, ser uno o varios atributos a los ue se habrn asignado unos valores concretos *datos,. El comportamiento est definido por los m-todos o mensajes a los ue sabe responder dicho objeto, es decir, u$ operaciones se pueden reali!ar con $l. #a identidad es una propiedad de un objeto ue lo diferencia del resto, dicho con otras palabras, es su identificador *concepto anlogo al de identificador de una #ariable o una constante,. Fn objeto contiene toda la informacin ue permite definirlo e identificarlo frente a otros objetos pertenecientes a otras clases e incluso frente a objetos de una misma clase, al poder tener valores bien diferenciados en sus atributos. " su ve!, los objetos disponen de mecanismos de interaccin llamados m-todos, ue favorecen la comunicacin entre ellos. Esta comunicacin favorece a su ve! el cambio de estado en los propios objetos. Esta caracter%stica lleva a tratarlos como unidades indivisibles, en las ue no se separa el estado y el comportamiento. #os m(todos 8comportamiento) y atributos 8estado) estn estrechamente relacionados por la propiedad de conjunto. Esta propiedad destaca ue una clase reuiere de m$todos para poder tratar los atributos con los ue cuenta. El programador debe pensar indistintamente en ambos conceptos, sin separar ni darle mayor importancia a alguno de ellos. 8acerlo podr%a producir el hbito errneo de crear clases contenedoras de informacin por un lado y clases con m$todos ue manejen a las primeras por el otro. )e esta manera se estar%a reali!ando una programacin estructurada camu'lada en un lenguaje de programacin orientado a objetos. #a 377 difiere de la programacin estructurada tradicional, en la ue los datos y los procedimientos estn separados y sin relacin, ya ue lo nico ue se busca es el procesamiento de unos datos de entrada para obtener otros de salida. #a programacin estructurada anima al programador a pensar sobre todo en t$rminos de procedimientos o funciones, y en segundo lugar en las estructuras de datos ue esos procedimientos manejan. En la programacin estructurada solo se escriben funciones ue procesan datos. #os programadores ue emplean 377, en cambio, primero definen objetos para luego enviarles mensajes solicitndoles ue realicen sus m$todos por s% mismos. 0rigen #os conceptos de la programacin orientada a objetos tienen origen en *imula 9:, un lenguaje dise(ado para hacer simulaciones, creado por 0le;"ohan 7ahl 4 <risten =4gaard del 6entro de 6mputo ?oruego en 0slo. En este centro, se trabajaba en simulaciones de naves, ue fueron confundidas por la e4plosin combinatoria de cmo las diversas cualidades de diferentes naves pod%an afectar unas a las otras. #a idea surgi al agrupar los diversos tipos de naves en diversas clases de objetos, siendo responsable cada clase de objetos de definir sus propios datos y comportamientos. =ueron refinados ms tarde en *malltal$, desarrollado en Simula en >ero? )%2@ *cuya primera versin fue escrita sobre #asic, pero dise(ado para ser un sistema completamente dinmico en el cual los objetos se podr%an crear y modificar 2sobre la marcha2 *en tiempo de ejecucin, en lugar de tener un sistema basado en programas estticos. #a programacin orientada a objetos se fue convirtiendo en el estilo de programacin dominante a mediados de los a(os ochenta, en gran parte debido a la influencia de @AA, una e4tensin del lenguaje de programacin @. Su dominacin fue consolidada gracias al auge de las Inter'aces gr'icas de usuario+ para las cuales la programacin orientada a objetos est particularmente bien adaptada. En este caso, se habla tambi$n de programacin dirigida por eventos, #as caracter%sticas de orientacin a objetos fueron agregadas a muchos lenguajes e4istentes durante ese tiempo, incluyendo %da+ #%*I@+ .isp+ )ascal, entre otros. #a adicin de estas caracter%sticas a los lenguajes ue no fueron dise(ados inicialmente para ellas condujo a menudo a problemas de compatibilidad y en la capacidad de mantenimiento del cdigo. #os lenguajes orientados a objetos 2puros2, por su parte, carec%an de las caracter%sticas de las cuales muchos programadores hab%an venido a depender. 3ara saltar este obstculo, se hicieron muchas tentativas para crear nuevos lenguajes basados en m$todos orientados a objetos, pero permitiendo algunas caracter%sticas imperativas de maneras 2seguras2. El 1i''el de Gertrand 1eyer fue un temprano y moderadamente acertado lenguaje con esos objetivos pero ahora ha sido esencialmente reempla!ado por "ava, en gran parte debido a la aparicin de Internet+ y a la implementacin de la muina virtual de ;ava en la mayor%a de navegadores, )/) en su versin H se ha modificado, soporta una orientacin completa a objetos, cumpliendo todas las caracter%sticas propias de la orientacin a objetos. @onceptos 'undamentales #a programacin orientada a objetos es una forma de programar ue trata de encontrar una solucin a estos problemas. Entroduce nuevos conceptos, ue superan y ampl%an conceptos antiguos ya conocidos. Entre ellos destacan los siguientes: Clase : definiciones de las propiedades y comportamiento de un tipo de objeto concreto. #a instanciacin es la lectura de estas definiciones y la creacin de un objeto a partir de ellas. Herencia & *por ejemplo, herencia de la clase 6 a la clase ), Es la facilidad mediante la cual la clase ) hereda en ella cada uno de los atributos y operaciones de 6, como si esos atributos y operaciones hubiesen sido definidos por la misma ). 3or lo tanto, puede usar los mismos m$todos y variables pblicas declaradas en 6. #os componentes registrados como 2privados2 *pr%vate, tambi$n se heredan, pero como no pertenecen a la clase, se mantienen escondidos al programador y slo pueden ser accedidos a trav$s de otros m$todos pblicos. Esto es as% para mantener hegemnico el ideal de 773. .bjeto : entidad provista de un conjunto de propiedades o atributos *datos, y de comportamiento o funcionalidad *m$todos, los mismos ue consecuentemente reaccionan a eventos. Se corresponde con los objetos reales del mundo ue nos rodea, o a objetos internos del sistema *del programa,. Es una instancia a una clase. %-todo : "lgoritmo asociado a un objeto *o a una clase de objetos,, cuya ejecucin se desencadena tras la recepcin de un 2mensaje2. )esde el punto de vista del comportamiento, es lo ue el objeto puede hacer. Fn m$todo puede producir un cambio en las propiedades del objeto, o la generacin de un 2evento2 con un nuevo mensaje para otro objeto del sistema. 1vento: Es un suceso en el sistema *tal como una interaccin del usuario con la muina, o un mensaje enviado por un objeto,. El sistema maneja el evento enviando el mensaje adecuado al objeto pertinente. @ambi$n se puede definir como evento, a la reaccin ue puede desencadenar un objeto, es decir la accin ue genera. Mensaje: una comunicacin dirigida a un objeto, ue le ordena ue ejecute uno de sus m$todos con ciertos parmetros asociados al evento ue lo gener. )ropiedad o atributo: contenedor de un tipo de datos asociados a un objeto *o a una clase de objetos,, ue hace los datos visibles desde fuera del objeto y esto se define como sus caracter%sticas predeterminadas, y cuyo valor puede ser alterado por la ejecucin de algn m$todo. 1stado interno: es una variable ue se declara privada, ue puede ser nicamente accedida y alterada por un m$todo del objeto, y ue se utili!a para indicar distintas situaciones posibles para el objeto *o clase de objetos,. ?o es visible al programador ue maneja una instancia de la clase. @omponentes de un objeto: atributos, identidad, relaciones y m$todos. Identi'icacin de un objeto: un objeto se representa por medio de una tabla o entidad ue est$ compuesta por sus atributos y funciones correspondientes. En comparacin con un lenguaje imperativo, una 2variable2, no es ms ue un contenedor interno del atributo del objeto o de un estado interno, as% como la 2funcin2 es un procedimiento interno del m$todo del objeto @aracter6sticas de la )00 E4iste un acuerdo acerca de u$ caracter%sticas contempla la 2orientacin a objetos2, las caracter%sticas siguientes son las ms importantes: Abstraccin : denota las caracter%sticas esenciales de un objeto, donde se capturan sus comportamientos. 6ada objeto en el sistema sirve como modelo de un 2agente2 abstracto ue puede reali!ar trabajo, informar y cambiar su estado, y 2comunicarse2 con otros objetos en el sistema sin revelar cmo se implementan estas caracter%sticas. #os procesos, las funciones o los m$todos pueden tambi$n ser abstra%dos y cuando lo estn, una variedad de t$cnicas son reueridas para ampliar una abstraccin. El proceso de abstraccin permite seleccionar las caracter%sticas relevantes dentro de un conjunto e identificar comportamientos comunes para definir nuevos tipos de entidades en el mundo real. #a abstraccin es clave en el proceso de anlisis y dise(o orientado a objetos, ya ue mediante ella podemos llegar a armar un conjunto de clases ue permitan modelar la realidad o el problema ue se uiere atacar. /ncapsulamiento : Significa reunir a todos los elementos ue pueden considerarse pertenecientes a una misma entidad, al mismo nivel de abstraccin. Esto permite aumentar la cohesin de los componentes del sistema. "lgunos autores confunden este concepto con el principio de ocultacin, principalmente porue se suelen emplear conjuntamente. %odularidad 0 Se denomina 1odularidad a la propiedad ue permite subdividir una aplicacin en partes ms peue(as *llamadas mdulos,, cada una de las cuales debe ser tan independiente como sea posible de la aplicacin en s% y de las restantes partes. Estos mdulos se pueden compilar por separado, pero tienen cone4iones con otros mdulos. "l igual ue la encapsulacin, los lenguajes soportan la 1odularidad de diversas formas. Principio de ocultacin 0 6ada objeto est aislado del e4terior, es un mdulo natural, y cada tipo de objeto e4pone una interfaz a otros objetos ue espec%fica cmo pueden interactuar con los objetos de la clase. El aislamiento protege a las propiedades de un objeto contra su modificacin por uien no tenga derecho a acceder a ellas, solamente los propios m$todos internos del objeto pueden acceder a su estado. Esto asegura ue otros objetos no pueden cambiar el estado interno de un objeto de maneras inesperadas, eliminando efectos secundarios e interacciones inesperadas. "lgunos lenguajes relajan esto, permitiendo un acceso directo a los datos internos del objeto de una manera controlada y limitando el grado de abstraccin. #a aplicacin entera se reduce a un agregado o rompecabe1as de objetos. Polimorfismo : comportamientos diferentes, asociados a objetos distintos, pueden compartir el mismo nombre, al llamarlos por ese nombre se utili!ar el comportamiento correspondiente al objeto ue se est$ usando. 7 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. 6uando esto ocurre en 2tiempo de ejecucin2, esta ltima caracter%stica se llama asignacin tarda o asignacin dinmica. "lgunos lenguajes proporcionan medios ms estticos *en 2tiempo de compilacin2, de polimorfismo, tales como las plantillas y la sobrecarga de operadores de 6II. Herencia : las clases no estn aisladas, sino ue se relacionan entre s%, formando una jeraru%a de clasificacin. #os objetos heredan las propiedades y el comportamiento de todas las clases a las ue pertenecen. #a herencia organi!a y facilita el polimorfismo y el encapsulamiento permitiendo a los objetos ser definidos y creados como tipos especiali!ados de objetos pree4istentes. Estos pueden compartir *y e4tender, su comportamiento sin tener ue volver a implementarlo. Esto suele hacerse habitualmente agrupando los objetos en clases y estas en rboles o enrejados ue reflejan un comportamiento comn. 6uando un objeto hereda de ms de una clase se dice ue hay herencia mltiple. 2ecoleccin de basura 0 la recoleccin de basura o garbage collector es la t$cnica por la cual el entorno de objetos se encarga de destruir automticamente, y por tanto desvincular la memoria asociada, los objetos ue hayan uedado sin ninguna referencia a ellos. Esto significa ue el programador no debe preocuparse por la asignacin o liberacin de memoria, ya ue el entorno la asignar al crear un nuevo objeto y la liberar cuando nadie lo est$ usando. En la mayor%a de los lenguajes h%bridos ue se e4tendieron para soportar el 3aradigma de 3rogramacin 7rientada a 7bjetos como 6II u .bjeto Pascal, esta caracter%stica no e4iste y la memoria debe desasignarse manualmente. 2esumen #a programacin orientada a objetos es un paradigma ue utili!a objetos como elementos fundamentales en la construccin de la solucin. Surge en los a(os J0. Fn objeto es una abstraccin de algn hecho o ente del mundo real ue tiene atributos ue representan sus caracter%sticas o propiedades y m$todos ue representan su comportamiento o acciones ue reali!an. @odas las propiedades y m$todos comunes a los objetos se encapsulan o se agrupan en clases. Fna clase es una plantilla o un prototipo para crear objetos, por eso se dice ue los objetos son instancias de clases. .enguajes orientados a objetos Simula *-.KJ, es aceptado como el primer lenguaje ue posee las caracter%sticas principales de un lenguaje orientado a objetos. =ue creado para hacer programas de simulacin, en donde los 2objetos2 son la representacin de la informacin ms importante. Smalltal9 *-.JL a -.M0, es posiblemente el ejemplo cannico, y con el ue gran parte de la teor%a de la programacin orientada a objetos se ha desarrollado. Entre los lenguajes orientados a objetos se destacan los siguientes: ABAP -N S"3 #enguaje orientado a eventos, "G# #enguaje de programacin de 7penEdge de 3rogress Soft'are. ActionScript, ActionScript 3, Ada, C44, C5, Clarin, Clipper +lenguaje de programacin, *Oersin H.4 con librer%a de objetos 6lass*y,,, (, .bject Pascal +/mbarcadero (elphi,, 6ambas, Harbour, /iffel, "a#a "a#aScript *la herencia se reali!a por medio de la programacin basada en prototipos,, !e7ico *en castellano,, .bjecti#e8C, .caml, .1, 2. Perl *soporta herencia mltiple. #a resolucin se reali!a en pre orden, pero puede modificarse al algoritmo lineari1ation C3 por medio del mdulo Class00C3 en CPA9,,PHP *a partir de su versin H,, Po:erBuilder, P)thon, 2ub), Smalltalk *Entorno de objetos puro,, %agik +Small;orld,, <ala, <B.9/', <isual o7Pro *en su versin K,, <isual Basic =.>, <isual (atale7, <isual .bjects, ?Base44, !enguaje (2P !enguaje de programacin Scala +lenguaje usado por ':itter, http0@@:::.scala8lang.org@page.jsp 1uchos de estos lenguajes de programacin no son puramente orientados a objetos, sino ue son h%bridos ue combinan la 377 con otros paradigmas. "l igual ue 6II otros lenguajes, como ..C.B.!, ..!ISP, ..P2.!.6 ) .bject 2/??, han sido creados a(adiendo e4tensiones orientadas a objetos a un lenguaje de programacin clsico. Fn nuevo paso en la abstraccin de paradigmas de programacin es la Programacin .rientada a Aspectos *37",. "unue es todav%a una metodolog%a en estado de maduracin, cada ve! atrae a ms investigadores e incluso proyectos comerciales en todo el mundo.