SlideShare une entreprise Scribd logo
1  sur  10
Herencia (informática)<br />En orientación a objetos la herencia es el mecanismo fundamental para implementar la reutilización y extensibilidad del software. A través de ella los diseñadores pueden construir nuevas clases partiendo de una jerarquía de clases ya existente (comprobadas y verificadas) evitando con ello el rediseño, la modificación y verificación de la parte ya implementada. La herencia facilita la creación de objetos a partir de otros ya existentes, obteniendo características (métodos y atributos) similares a los ya existentes.<br />Es la relación entre una clase general y otra clase más especifica. Por ejemplo: Si declaramos una clase párrafo derivada de una clase texto, todos los métodos y variables asociadas con la clase texto, son automáticamente heredados por la subclase párrafo.<br />La herencia es uno de los mecanismos de la programación orientada a objetos, por medio del cual una clase se deriva de otra, llamada entonces clase base o clase padre,(a veces se le denomina superclase pero no es muy comun), de manera que extiende su funcionalidad. Una de sus funciones más importantes es la de proveer Polimorfismo y late binding.<br />Clase Abstracta<br />La herencia permite que existan clases que nunca serán instanciadas directamente. En el ejemplo anterior, una clase quot;
perroquot;
 heredaría los atributos y métodos de la clase quot;
mamíferoquot;
, así como también quot;
gatoquot;
, quot;
delfínquot;
 o cualquier otra subclase; pero, en ejecución, no habrá ningún objeto quot;
mamíferoquot;
 que no pertenezca a alguna de las subclases. En ese caso, a una clase así se la conocería como Clase Abstracta. La ausencia de instancias específicas es su única particularidad, para todo lo demás es como cualquier otra clase.<br />Herencia y ocultación de información<br />El diseñador puede definir qué variables de instancia y métodos de los objetos de una clase son visibles. En C++ y java esto se consigue con las especificaciones private, protected y public. Sólo las variables y métodos definidos como públicos en un objeto serán visibles por todos los objetos.<br />En cuanto a las subclases, que heredan las estructuras de las superclases, el diseñador puede controlar qué miembros de las superclases son visibles en las subclases. En el caso de java y C++ los especificadores de acceso (private, protected, public) de los miembros de la superclase afectan también a la herencia:<br />Private: ningún miembro privado de la superclase es visible en la subclase.<br />Protected: los miembros protegidos de la superclase son visibles en la subclase, pero no visibles para el exterior.<br />Public: los miembros públicos de la superclase siguen siendo públicos en la subclase.<br />Redefinición de métodos<br />En la clase derivada se puede redefinir algún método ya definido en la clase base. Para redefinir un método en la subclase, basta con declarar una función miembro con el mismo nombre. Si en una clase en particular se invoca a un método, y el método no está definido en la misma, es buscado automáticamente en las clases superiores. Sin embargo, si existieran dos métodos con el mismo nombre y distinto código, uno en la clase y otro en una superclase, se ejecutaría el de la clase, no el de la superclase.<br />Por lo general, siempre se puede acceder explícitamente al método de la clase superior mediante una sintaxis diferente, la cual dependerá del lenguaje de programación empleado.<br />Ventajas<br />Ayuda a los programadores a ahorrar código y tiempo, ya que si tiene una clase lista es solo de implementarla y listo todo el código de esta se resume a solo un llamado.<br />Los objetos pueden ser construidos a partir de otros similares. Para ello es necesario que exista una clase base y una jerarquía (relacionamiento) de clases.<br />La clase derivada puede heredar código y datos de la clase base, añadiendo código o modificando lo heredado.<br />Las clases que heredan propiedades de otra clase pueden servir como clase base de otras.<br />Estereotipos de herencia<br />Herencia simple: Un objeto puede extender las características de otro objeto y de ningún otro, es decir, que solo puede heredar o tomar atributos de un solo padre o de una sola clase.<br />Herencia múltiple: Un objeto puede extender las características de uno o más objetos, es decir, puede tener varios padres. En este aspecto hay discrepancias entre los diseñadores de lenguajes. Algunos de ellos han preferido no admitir la herencia múltiple por las posibles coincidencias en nombres de métodos o datos miembros. Por ejemplo C++, Python permiten herencia múltiple, mientras que Java, Ada y C# sólo permiten herencia simple.<br />Encapsulamiento (informática)<br />En programación modular, y más específicamente en programación orientada a objetos, se denomina encapsulamiento al ocultamiento del estado, es decir, de los datos miembro, de un objeto de manera que sólo se puede cambiar mediante las operaciones definidas para ese objeto.<br />Cada objeto está aislado del exterior, es un módulo natural, y la aplicación entera se reduce a un agregado o rompecabezas de objetos. El aislamiento protege a los datos asociados a un objeto contra su modificación por quien no tenga derecho a acceder a ellos, eliminando efectos secundarios e interacciones.<br />De esta forma el usuario de la clase puede obviar la implementación de los métodos y propiedades para concentrarse sólo en cómo usarlos. Por otro lado se evita que el usuario pueda cambiar su estado de maneras imprevistas e incontroladas.<br />Encapsulamiento<br />Se dice que es el empaquetado de métodos y atributos dentro de un objeto, mediante una interfaz grafica. La clave está precisamente en el envoltorio del Como se puede observar de los diagramas, las variables del objeto se localizan en el centro o núcleo del objeto. Los métodos rodean y esconden el núcleo del objeto de otros objetos en el programa. Al empaquetamiento de las variables de un objeto con la protección de sus métodos se le llama encapsulamiento. Típicamente, el encapsulamiento es utilizado para esconder detalles de la puesta en práctica no importantes de otros objetos. Entonces, los detalles de la puesta en práctica pueden cambiar en cualquier tiempo sin afectar otras partes del programa.<br />El encapsulamiento de variables y métodos en un componente de software ordenado es, todavía, una simple idea poderosa que provee dos principales beneficios a los desarrolladores de software: El encapsulamiento consiste en unir en la Clase las características y comportamientos, esto es, las variables y métodos. Es tener todo esto en una sola entidad. En los lenguajes estructurados esto era imposible. Es evidente que el encapsulamiento se logra gracias a la abstracción y el ocultamiento que veremos a continuación. La utilidad del encapsulamiento va por la facilidad para manejar la complejidad, ya que tendremos a las Clases como cajas negras donde sólo se conoce el comportamiento pero no los detalles internos, y esto es conveniente porque lo que nos interesará será conocer qué hace la Clase pero no será necesario saber cómo lo hace.<br />La encapsulación da lugar a que las clases se dividan en dos partes:<br />Interface: captura la visión externa de una clase, abarcando la abstracción del comportamiento común a los ejemplos de esa clase.<br />Implementación: comprende la representación de la abstracción, así como los mecanismos que conducen al comportamiento deseado.<br />Formas de encapsular<br />Estándar (Predeterminado)<br />Abierto : Hace que el miembro de la clase pueda ser accedido desde el exterior de la Clase y cualquier parte del programa.<br />Protegido : Solo es accesible desde la Clase y las clases que heredan (a cualquier nivel).<br />Semi cerrado : Solo es accesible desde la clase heredada<br />Cerrado : Solo es accesible desde la Clase.<br />En el encapsulamiento hay analizadores que pueden ser semánticos y sintácticos.<br />Polimorfismo (informática)<br />El polimorfismo se refiere a la capacidad para que varias clases derivadas de una antecesora utilicen un mismo método de forma diferente.<br />Por ejemplo, podemos crear dos clases distintas: Pez y Ave que heredan de la superclase Animal. La clase Animal tiene el método abstracto mover que se implementa de forma distinta en cada una de las subclases (peces y aves se mueven de forma distinta).<br />Como se mencionó anteriormente, el concepto de polimorfismo se puede aplicar tanto a funciones como a tipos de datos. Así nacen los conceptos de funciones polimórficas y tipos polimórficos. Las primeras son aquellas funciones que pueden evaluarse o ser aplicadas a diferentes tipos de datos de forma indistinta; los tipos polimórficos, por su parte, son aquellos tipos de datos que contienen al menos un elemento cuyo tipo no está especificado.<br />Clasificación<br />Se puede clasificar el polimorfismo en dos grandes clases:<br />Polimorfismo dinámico (o polimorfismo paramétrico) es aquél en el que el código no incluye ningún tipo de especificación sobre el tipo de datos sobre el que se trabaja. Así, puede ser utilizado a todo tipo de datos compatible.<br />Polimorfismo estático (o polimorfismo ad hoc) es aquél en el que los tipos a los que se aplica el polimorfismo deben ser explicitados y declarados uno por uno antes de poder ser utilizados.<br />El polimorfismo dinámico unido a la herencia es lo que en ocasiones se conoce como programación genérica.<br />También se clasifica en herencia por redefinición de métodos abstractos y por método sobrecargado. El segundo hace referencia al mismo método con diferentes parámetros.<br />Otra clasificación agrupa los polimorfismo en dos tipos: Ad-Hoc que incluye a su vez sobrecarga de operadores y coerción, Universal (inclusión o controlado por la herencia, paramétrico o genericidad).<br />Polimorfismo desde una interfaz<br />Aunque el polimorfismo es el mismo se aplique donde se aplique, el modo en que se aplica desde una interfaz puede resultar un poco más oscuro y difícil de entender. Se expone un sencillo ejemplo (en VB-NET) comentado para entender como funciona aplicado desde una interfaz, primero se escribe el código y luego se comenta el funcionamiento. Nota: para no enturbiar el código en exceso, todo lo que no se declara privado se sobreentiende público.<br />   ' Declaramos una interfaz llamada IOperar y declaramos una función llamada Operar <br />        ' que implementarán las clases deseadas:<br />   Interface IOperar<br />       Function Operar(valor1 as integer, valor2 as integer) as long<br />   End Interface<br /> <br />  ' Declaramos una clase que trabaja más alejada del usuario y que contendría funciones comunes<br />            ' para las siguiente clase, si no fueran idénticas irían en la interfaz, <br />            ' pero al caso de mostrar el polimorfismo se suponen idénticas:<br />  Class Operacion<br />      Function Calcular(clasellamante as Object) as Long <br />          ' aquí iría el código común a todas las operaciones.... que llaman a esa función<br />          ' por ejemplo recoger los 2 valores de la operación, chequear que están en el rango deseado, etc.<br /> <br />          ' se supone que la función inputValor recoge un valor de algún sitio<br />          valor1 as integer = inputValor() <br />          valor2 as integer = inputValor()<br /> <br />          op as New IOperar = clasellamante<br />          Return op.Operar(valor1,valor2) 'AQUÍ es donde se utiliza el polimorfismo.<br />      End Function<br />  End Class<br />  ' Declaramos 2 clases: Sumar y Resta que implementan la interfaz y que llaman a la clase Operacion:<br />  Class Sumar<br />      Implements IOperar<br />      Private Function Operar(valor1 as Integer, valor2 as Integer) as Long Implements IOperar.Operar<br />          Return valor1 + valor2<br />      End Function<br /> <br />      Function Calcular() as Long<br />          op as New operacion<br />          Return op.Calcular(Me) ' se está llamando a la función 'Calcular' de la clase 'Operación'<br />      End Function<br />  End Class<br />  ' segunda clase....<br />  Class Restar<br />      Implements IOperar<br />      Private Function Operar(valor1 as Integer, valor2 as Integer) as Long Implements IOperar.Operar<br />          Return valor1 - valor2<br />      End Function<br /> <br />      Function Calcular() as Long<br />          op as New operacion<br />          Return op.Calcular(Me) ' se está llamando a la función 'Calcular' de la clase 'Operación'<br />      End Function<br />  End Class<br />Analicemos ahora el código para entender el polimorfismo expuesto en la interfaz: La interfaz expone un método que puede ser implementado por las diferentes clases, normalmente relacionadas entre si. Las clases Sumar y Restar implementan la interfaz pero el método de la interfaz lo declaramos privado para evitar ser accedido libremente y además tienen un método llamado Calcular que llama a la clase Operacion donde tenemos otro método con el mismo nombre. Es esta clase última la que realiza el polimorfismo y debe fijarse como es a través de una instancia de la interfaz que llama al método operar. La interfaz sabe a qué método de qué clase llamar desde el momento que asignamos un valor a la variable OP en el método Calcular de la clase Operacion, que a su vez recibió la referencia del método Calcular desde la clase que la llama, sea está cual sea se identifica a sí misma, mediante la referencia Me ó This según el lenguaje empleado. Debe notarse que la instancia de la interfaz accede a sus métodos aunque en sus clases se hayan declarado privadas.<br />Diferencias entre polimorfismo y sobrecarga<br />El polimorfismo como se muestra en el ejemplo anterior, suele ser bastante ventajoso aplicado desde las interfaces, ya que permite crear nuevos tipos sin necesidad de tocar las clases ya existentes (imaginemos que deseamos añadir una clase Multiplicar), basta con recompilar todo el código que incluye los nuevos tipos añadidos. Si se hubiera recurrido a la sobrecarga durante el diseño exigiría retocar la clase anteriormente creada al añadir la nueva operación Multiplicar, lo que además podría suponer revisar todo el código donde se instancia a la clase.<br />La sobrecarga se da siempre dentro de una sola clase, mientras que el polimorfismo se da entre clases distintas.<br />Un método está sobrecargado si dentro de una clase existen dos o más declaraciones de dicho método con el mismo nombre pero con parámetros distintos, por lo que no hay que confundirlo con polimorfismo.<br />En definitiva: La sobrecarga se resuelve en tiempo de compilación utilizando los nombres de los métodos y los tipos de sus parámetros; el polimorfismo se resuelve en tiempo de ejecución del programa, esto es, mientras se ejecuta, en función de que clase pertenece un objeto.<br />Programación orientada a objetos<br />La programación orientada a objetos o POO (OOP según sus siglas en inglés) es un paradigma de programación que usa objetos y sus interacciones, para diseñar aplicaciones y programas informáticos. Está basado en varias técnicas, incluyendo herencia, abstracción, polimorfismo y encapsulamiento. Su uso se popularizó a principios de la década de los años 1990. En la actualidad, existe variedad de lenguajes de programación que soportan la orientación a objetos.<br />Introducción<br />Los objetos son entidades que tienen un determinado comportamiento (método) e identidad:<br />El estado está compuesto de datos, será uno o varios atributos a los que se habrán asignado unos valores concretos (datos).<br />El comportamiento está definido por los métodos o mensajes a los que sabe responder dicho objeto, es decir, qué operaciones se pueden realizar con él.<br />La identidad es una propiedad de un objeto que lo diferencia del resto, dicho con otras palabras, es su identificador (concepto análogo al de identificador de una variable o una constante).<br />Un objeto contiene toda la información que 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. A su vez, los objetos disponen de mecanismos de interacción llamados métodos, que favorecen la comunicación entre ellos. Esta comunicación favorece a su vez el cambio de estado en los propios objetos. Esta característica lleva a tratarlos como unidades indivisibles, en las que no se separa el estado y el comportamiento.<br />Los métodos (comportamiento) y atributos (estado) están estrechamente relacionados por la propiedad de conjunto. Esta propiedad destaca que una clase requiere de métodos para poder tratar los atributos con los que cuenta. El programador debe pensar indistintamente en ambos conceptos, sin separar ni darle mayor importancia a alguno de ellos. Hacerlo podría producir el hábito erróneo de crear clases contenedoras de información por un lado y clases con métodos que manejen a las primeras por el otro. De esta manera se estaría realizando una programación estructurada camuflada en un lenguaje de programación orientado a objetos.<br />La POO difiere de la programación estructurada tradicional, en la que los datos y los procedimientos están separados y sin relación, ya que lo único que se busca es el procesamiento de unos datos de entrada para obtener otros de salida. La programación estructurada anima al programador a pensar sobre todo en términos de procedimientos o funciones, y en segundo lugar en las estructuras de datos que esos procedimientos manejan. En la programación estructurada sólo se escriben funciones que procesan datos. Los programadores que emplean POO, en cambio, primero definen objetos para luego enviarles mensajes solicitándoles que realicen sus métodos por sí mismos.<br />Origen<br />Los conceptos de la programación orientada a objetos tienen origen en Simula 67, un lenguaje diseñado para hacer simulaciones, creado por Ole-Johan Dahl y Kristen Nygaard del Centro de Cómputo Noruego en Oslo. En este centro, se trabajaba en simulaciones de naves, que fueron confundidas por la explosión combinatoria de cómo las diversas cualidades de diferentes naves podían afectar unas a las otras. La 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. Fueron refinados más tarde en Smalltalk, desarrollado en Simula en Xerox PARC (cuya primera versión fue escrita sobre Basic) pero diseñado para ser un sistema completamente dinámico en el cual los objetos se podrían crear y modificar quot;
sobre la marchaquot;
 (en tiempo de ejecución) en lugar de tener un sistema basado en programas estáticos.<br />La programación orientada a objetos se fue convirtiendo en el estilo de programación dominante a mediados de los años ochenta, en gran parte debido a la influencia de C++, una extensión del lenguaje de programación C. Su dominación fue consolidada gracias al auge de las Interfaces gráficas de usuario, para las cuales la programación orientada a objetos está particularmente bien adaptada. En este caso, se habla también de programación dirigida por eventos.<br />Las características de orientación a objetos fueron agregadas a muchos lenguajes existentes durante ese tiempo, incluyendo Ada, BASIC, Lisp, Pascal, entre otros. La adición de estas características a los lenguajes que no fueron diseñados inicialmente para ellas condujo a menudo a problemas de compatibilidad y en la capacidad de mantenimiento del código. Los lenguajes orientados a objetos quot;
purosquot;
, por su parte, carecían de las características de las cuales muchos programadores habían venido a depender. Para saltar este obstáculo, se hicieron muchas tentativas para crear nuevos lenguajes basados en métodos orientados a objetos, pero permitiendo algunas características imperativas de maneras quot;
segurasquot;
. 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 aparición de Internet, y a la implementación de la máquina virtual de Java en la mayoría de navegadores. PHP en su versión 5 se ha modificado, soporta una orientación completa a objetos, cumpliendo todas las características propias de la orientación a objetos.<br />Conceptos fundamentales<br />La programación orientada a objetos es una forma de programar que trata de encontrar una solución a estos problemas. Introduce nuevos conceptos, que superan y amplían conceptos antiguos ya conocidos. Entre ellos destacan los siguientes:<br />Clase: definiciones de las propiedades y comportamiento de un tipo de objeto concreto. La instanciación es la lectura de estas definiciones y la creación de un objeto a partir de ellas.<br />Herencia: (por ejemplo, herencia de la clase C a la clase D) Es la facilidad mediante la cual la clase D hereda en ella cada uno de los atributos y operaciones de C, como si esos atributos y operaciones hubiesen sido definidos por la misma D. Por lo tanto, puede usar los mismos métodos y variables publicas declaradas en C. Los componentes registrados como quot;
privadosquot;
 (private) también se heredan, pero como no pertenecen a la clase, se mantienen escondidos al programador y sólo pueden ser accedidos a través de otros métodos públicos. Esto es así para mantener hegemónico el ideal de OOP.<br />Objeto: entidad provista de un conjunto de propiedades o atributos (datos) y de comportamiento o funcionalidad (métodos) los mismos que consecuentemente reaccionan a eventos. Se corresponde con los objetos reales del mundo que nos rodea, o a objetos internos del sistema (del programa). Es una instancia a una clase.<br />Método: Algoritmo asociado a un objeto (o a una clase de objetos), cuya ejecución se desencadena tras la recepción de un quot;
mensajequot;
. Desde el punto de vista del comportamiento, es lo que el objeto puede hacer. Un método puede producir un cambio en las propiedades del objeto, o la generación de un quot;
eventoquot;
 con un nuevo mensaje para otro objeto del sistema.<br />Evento: Es un suceso en el sistema (tal como una interacción del usuario con la máquina, o un mensaje enviado por un objeto). El sistema maneja el evento enviando el mensaje adecuado al objeto pertinente. También se puede definir como evento, a la reacción que puede desencadenar un objeto, es decir la acción que genera.<br />Mensaje: una comunicación dirigida a un objeto, que le ordena que ejecute uno de sus métodos con ciertos parámetros asociados al evento que lo generó.<br />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 esto se define como sus características predeterminadas, y cuyo valor puede ser alterado por la ejecución de algún método.<br />Estado interno: es una variable que se declara privada, que puede ser únicamente accedida y alterada por un método del objeto, y que se utiliza para indicar distintas situaciones posibles para el objeto (o clase de objetos). No es visible al programador que maneja una instancia de la clase.<br />Componentes de un objeto: atributos, identidad, relaciones y métodos.<br />Identificación de un objeto: un objeto se representa por medio de una tabla o entidad que esté compuesta por sus atributos y funciones correspondientes.<br />En comparación con un lenguaje imperativo, una quot;
variablequot;
, no es más que un contenedor interno del atributo del objeto o de un estado interno, así como la quot;
funciónquot;
 es un procedimiento interno del método del objeto.<br />Características de la POO<br />Existe un acuerdo acerca de qué características contempla la quot;
orientación a objetosquot;
, las características siguientes son las más importantes:<br />Abstracción: denota las características esenciales de un objeto, donde se capturan sus comportamientos.Cada objeto en el sistema sirve como modelo de un quot;
agentequot;
 abstracto que puede realizar trabajo, informar y cambiar su estado, y quot;
comunicarsequot;
 con otros objetos en el sistema sin revelar cómo se implementan estas características. Los procesos, las funciones o los métodos pueden también ser abstraídos y cuando lo están, una variedad de técnicas son requeridas para ampliar una abstracción.El proceso de abstracción permite seleccionar las características relevantes dentro de un conjunto e identificar comportamientos comunes para definir nuevos tipos de entidades en el mundo real. La abstracción es clave en el proceso de análisis y diseño orientado a objetos, ya que mediante ella podemos llegar a armar un conjunto de clases que permitan modelar la realidad o el problema que se quiere atacar.<br />Encapsulamiento: Significa reunir a todos los elementos que pueden considerarse pertenecientes a una misma entidad, al mismo nivel de abstracción. Esto permite aumentar la cohesión de los componentes del sistema. Algunos autores confunden este concepto con el principio de ocultación, principalmente porque se suelen emplear conjuntamente.<br />Modularidad: Se denomina Modularidad a la propiedad que permite subdividir una aplicación en partes más pequeñas (llamadas módulos), cada una de las cuales debe ser tan independiente como sea posible de la aplicación en sí y de las restantes partes. Estos módulos se pueden compilar por separado, pero tienen conexiones con otros módulos. Al igual que la encapsulación, los lenguajes soportan la Modularidad de diversas formas.<br />Principio de ocultación: Cada objeto está aislado del exterior, es un módulo natural, y cada tipo de objeto expone una interfaz a otros objetos que especifica cómo pueden interactuar con los objetos de la clase. El aislamiento protege a las propiedades de un objeto contra su modificación por quien no tenga derecho a acceder a ellas, solamente los propios métodos 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 abstracción. La aplicación entera se reduce a un agregado o rompecabezas de objetos.<br />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 invocación de un comportamiento en una referencia producirá el comportamiento correcto para el tipo real del objeto referenciado. Cuando esto ocurre en quot;
tiempo de ejecuciónquot;
, esta última característica se llama asignación tardía o asignación dinámica. Algunos lenguajes proporcionan medios más estáticos (en quot;
tiempo de compilaciónquot;
) de polimorfismo, tales como las plantillas y la sobrecarga de operadores de C++.<br />Herencia: las clases no están aisladas, sino que se relacionan entre sí, formando una jerarquía de clasificación. 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 volver a implementarlo. Esto suele hacerse habitualmente agrupando los objetos en clases y estas en árboles o enrejados que reflejan un comportamiento común. Cuando un objeto hereda de más de una clase se dice que hay herencia múltiple.<br />Recolección de basura: la recolección de basura o garbage collector es la técnica por la cual el entorno de objetos se encarga de destruir automáticamente, y por tanto desvincular la memoria asociada, los objetos que hayan quedado sin ninguna referencia a ellos. Esto significa que el programador no debe preocuparse por la asignación o liberación de memoria, ya que 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 que se extendieron para soportar el Paradigma de Programación Orientada a Objetos como C++ u Object Pascal, esta característica no existe y la memoria debe desasignarse manualmente.<br />Resumen<br />La programación orientada a objetos es un paradigma que utiliza objetos como elementos fundamentales en la construcción de la solución. Surge en los años 70. Un objeto es una abstracción de algún hecho o ente del mundo real que tiene atributos que representan sus características o propiedades y métodos que representan su comportamiento o acciones que realizan. Todas las propiedades y métodos comunes a los objetos se encapsulan o se agrupan en clases. Una clase es una plantilla o un prototipo para crear objetos, por eso se dice que los objetos son instancias de clases.<br />Lenguajes orientados a objetos<br />Simula (1967) es aceptado como el primer lenguaje que posee las características principales de un lenguaje orientado a objetos. Fue creado para hacer programas de simulación, en donde los quot;
objetosquot;
 son la representación de la información más importante. Smalltalk (1972 a 1980) es posiblemente el ejemplo canónico, y con el que gran parte de la teoría de la programación orientada a objetos se ha desarrollado.<br />Entre los lenguajes orientados a objetos se destacan los siguientes:<br />ABAP<br />ABL Lenguaje de programación de OpenEdge de Progress Software<br />ActionScript<br />ActionScript 3<br />Ada<br />C++<br />C#<br />Clarion<br />Clipper (lenguaje de programación) (Versión 5.x con librería de objetos Class(y))<br />D<br />Object Pascal (Delphi)<br />Gambas<br />Harbour<br />Eiffel<br />Java<br />JavaScript (la herencia se realiza por medio de la programación basada en prototipos)<br />Lexico (en castellano)<br />Objective-C<br />Ocaml<br />Oz<br />R<br />Perl (soporta herencia múltiple. La resolución se realiza en preorden, pero puede modificarse al algoritmo linearization C3 por medio del módulo Class::C3 en CPAN)<br />PHP (a partir de su versión 5)<br />PowerBuilder<br />Python<br />Ruby<br />Smalltalk (Entorno de objetos puro)<br />Magik ( HYPERLINK quot;
http://es.wikipedia.org/w/index.php?title=SmallWorld&action=edit&redlink=1quot;
  quot;
SmallWorld (aún no redactado)quot;
 SmallWorld)<br />Vala<br />VB.NET<br />Visual FoxPro (en su versión 6)<br />Visual Basic 6.0<br />Visual Objects<br />XBase++<br />Lenguaje DRP<br />Lenguaje de programación Scala (lenguaje usado por Twitter) http://www.scala-lang.org/page.jsp<br />Muchos de estos lenguajes de programación no son puramente orientados a objetos, sino que son híbridos que combinan la POO con otros paradigmas.<br />Al igual que C++ otros lenguajes, como OOCOBOL, OOLISP, OOPROLOG y Object REXX, han sido creados añadiendo extensiones orientadas a objetos a un lenguaje de programación clásico.<br />Un nuevo paso en la abstracción de paradigmas de programación es la Programación Orientada a Aspectos (POA). Aunque es todavía una metodología en estado de maduración, cada vez atrae a más investigadores e incluso proyectos comerciales en todo el mundo.<br />
Herencia OO
Herencia OO
Herencia OO
Herencia OO
Herencia OO
Herencia OO
Herencia OO
Herencia OO
Herencia OO

Contenu connexe

Tendances

CUESTIONARIO SOBRE PROGRAMACIÓN RELACIONADA A OBJETOS
CUESTIONARIO SOBRE PROGRAMACIÓN RELACIONADA A OBJETOSCUESTIONARIO SOBRE PROGRAMACIÓN RELACIONADA A OBJETOS
CUESTIONARIO SOBRE PROGRAMACIÓN RELACIONADA A OBJETOSLuis Miguel Gutierrez
 
Programación Orientada a Objetos
Programación Orientada a ObjetosProgramación Orientada a Objetos
Programación Orientada a ObjetosUVMVirtual
 
Conceptos básicos de programación orientada a objetos (poo)
Conceptos básicos de programación orientada a objetos (poo)Conceptos básicos de programación orientada a objetos (poo)
Conceptos básicos de programación orientada a objetos (poo)Maria Garcia
 
Curso Java Inicial 4 Poo En Java
Curso Java Inicial   4 Poo En JavaCurso Java Inicial   4 Poo En Java
Curso Java Inicial 4 Poo En JavaEmilio Aviles Avila
 
Introduccion al paradigma de la programacion orientado a objetos original
Introduccion al paradigma de la programacion orientado a objetos originalIntroduccion al paradigma de la programacion orientado a objetos original
Introduccion al paradigma de la programacion orientado a objetos originalJose Angel Rodriguez
 
Lenguaje de Programación Orientada a Objetos
Lenguaje  de  Programación  Orientada  a Objetos Lenguaje  de  Programación  Orientada  a Objetos
Lenguaje de Programación Orientada a Objetos Marielena Lujano
 
Programación Orientada a Objetos - herencia y polimorfismo
Programación Orientada a Objetos - herencia y polimorfismoProgramación Orientada a Objetos - herencia y polimorfismo
Programación Orientada a Objetos - herencia y polimorfismoAlvaro Enrique Ruano
 
Poo 3 herencia
Poo 3 herenciaPoo 3 herencia
Poo 3 herenciajlmanmons
 
Clases abstractas e interfaces en java
Clases abstractas e interfaces en java Clases abstractas e interfaces en java
Clases abstractas e interfaces en java Nathy_A
 
Programaciom avanzada orientada a objetos
Programaciom avanzada orientada a objetosProgramaciom avanzada orientada a objetos
Programaciom avanzada orientada a objetosJonathan Macías
 
Herencia y Polimorfismo
Herencia y PolimorfismoHerencia y Polimorfismo
Herencia y Polimorfismonestor_moren
 
Programacion Orientada A Objetos
Programacion Orientada A ObjetosProgramacion Orientada A Objetos
Programacion Orientada A Objetosmarly alfonso
 
conseptos basicos de la poo
conseptos basicos de la pooconseptos basicos de la poo
conseptos basicos de la poomahega261193
 
1. introduccion a la programación orientada a objeto (poo)
1.  introduccion a la programación orientada a objeto (poo)1.  introduccion a la programación orientada a objeto (poo)
1. introduccion a la programación orientada a objeto (poo)Roberto Rojas
 

Tendances (20)

CUESTIONARIO SOBRE PROGRAMACIÓN RELACIONADA A OBJETOS
CUESTIONARIO SOBRE PROGRAMACIÓN RELACIONADA A OBJETOSCUESTIONARIO SOBRE PROGRAMACIÓN RELACIONADA A OBJETOS
CUESTIONARIO SOBRE PROGRAMACIÓN RELACIONADA A OBJETOS
 
Programación Orientada a Objetos
Programación Orientada a ObjetosProgramación Orientada a Objetos
Programación Orientada a Objetos
 
Conceptos básicos de programación orientada a objetos (poo)
Conceptos básicos de programación orientada a objetos (poo)Conceptos básicos de programación orientada a objetos (poo)
Conceptos básicos de programación orientada a objetos (poo)
 
Curso Java Inicial 4 Poo En Java
Curso Java Inicial   4 Poo En JavaCurso Java Inicial   4 Poo En Java
Curso Java Inicial 4 Poo En Java
 
Tema4 herencia
Tema4 herenciaTema4 herencia
Tema4 herencia
 
Introduccion al paradigma de la programacion orientado a objetos original
Introduccion al paradigma de la programacion orientado a objetos originalIntroduccion al paradigma de la programacion orientado a objetos original
Introduccion al paradigma de la programacion orientado a objetos original
 
Herencia poo
Herencia pooHerencia poo
Herencia poo
 
Lenguaje de Programación Orientada a Objetos
Lenguaje  de  Programación  Orientada  a Objetos Lenguaje  de  Programación  Orientada  a Objetos
Lenguaje de Programación Orientada a Objetos
 
Programación Orientada a Objetos - herencia y polimorfismo
Programación Orientada a Objetos - herencia y polimorfismoProgramación Orientada a Objetos - herencia y polimorfismo
Programación Orientada a Objetos - herencia y polimorfismo
 
S2-Representación Gráfica
S2-Representación GráficaS2-Representación Gráfica
S2-Representación Gráfica
 
Poo 3 herencia
Poo 3 herenciaPoo 3 herencia
Poo 3 herencia
 
Clases abstractas e interfaces en java
Clases abstractas e interfaces en java Clases abstractas e interfaces en java
Clases abstractas e interfaces en java
 
Programaciom avanzada orientada a objetos
Programaciom avanzada orientada a objetosProgramaciom avanzada orientada a objetos
Programaciom avanzada orientada a objetos
 
Herencia y Polimorfismo
Herencia y PolimorfismoHerencia y Polimorfismo
Herencia y Polimorfismo
 
Programacion Orientada A Objetos
Programacion Orientada A ObjetosProgramacion Orientada A Objetos
Programacion Orientada A Objetos
 
Interfaces en java
Interfaces en javaInterfaces en java
Interfaces en java
 
Conceptos Basicos de POO
Conceptos Basicos de POOConceptos Basicos de POO
Conceptos Basicos de POO
 
conseptos basicos de la poo
conseptos basicos de la pooconseptos basicos de la poo
conseptos basicos de la poo
 
Herencia informatica
Herencia informaticaHerencia informatica
Herencia informatica
 
1. introduccion a la programación orientada a objeto (poo)
1.  introduccion a la programación orientada a objeto (poo)1.  introduccion a la programación orientada a objeto (poo)
1. introduccion a la programación orientada a objeto (poo)
 

En vedette

Recursos formacion etica_y_ciudadana
Recursos formacion etica_y_ciudadanaRecursos formacion etica_y_ciudadana
Recursos formacion etica_y_ciudadanaBernardita Naranjo
 
Sergio alejandro martinez ortiz microsoft power point
Sergio alejandro martinez ortiz  microsoft power pointSergio alejandro martinez ortiz  microsoft power point
Sergio alejandro martinez ortiz microsoft power pointsergiomartinez456
 
concepción del concepto de limite
concepción del concepto de limiteconcepción del concepto de limite
concepción del concepto de limiteizumorin
 
Presentación historia del concepto de limite
Presentación historia del concepto de limitePresentación historia del concepto de limite
Presentación historia del concepto de limiteizumorin
 
Description d´un ami
Description d´un amiDescription d´un ami
Description d´un aminanifuentes1
 
Trabajo gestion docuental ii oscar mora y edith sanchez
Trabajo gestion docuental ii oscar mora y edith sanchezTrabajo gestion docuental ii oscar mora y edith sanchez
Trabajo gestion docuental ii oscar mora y edith sanchezoscarmora123
 
Mysql Administracion
Mysql AdministracionMysql Administracion
Mysql AdministracionIrontec
 
2. manipulación higiénica de alimentos
2. manipulación higiénica de alimentos2. manipulación higiénica de alimentos
2. manipulación higiénica de alimentosmyelitz
 
2.manipulacion higienica de_alimentos
2.manipulacion higienica de_alimentos2.manipulacion higienica de_alimentos
2.manipulacion higienica de_alimentosma_pa
 
Contabilidad Financiera
Contabilidad FinancieraContabilidad Financiera
Contabilidad FinancieraHector Javier
 
Ajustes Curriculares En Historia
Ajustes Curriculares En HistoriaAjustes Curriculares En Historia
Ajustes Curriculares En Historiamaterialeshistoria
 
Propiedad intelectual audiovisual
Propiedad intelectual audiovisualPropiedad intelectual audiovisual
Propiedad intelectual audiovisualChac Mool
 
Historia E Popullit Shqiptar
Historia E Popullit ShqiptarHistoria E Popullit Shqiptar
Historia E Popullit Shqiptarfakete duraku
 
KepMenKeh 1983, Penetapan Lapas Menjadi Rutan
KepMenKeh 1983, Penetapan Lapas Menjadi RutanKepMenKeh 1983, Penetapan Lapas Menjadi Rutan
KepMenKeh 1983, Penetapan Lapas Menjadi Rutanrutanprabumulih
 

En vedette (20)

Recursos formacion etica_y_ciudadana
Recursos formacion etica_y_ciudadanaRecursos formacion etica_y_ciudadana
Recursos formacion etica_y_ciudadana
 
Sergio alejandro martinez ortiz microsoft power point
Sergio alejandro martinez ortiz  microsoft power pointSergio alejandro martinez ortiz  microsoft power point
Sergio alejandro martinez ortiz microsoft power point
 
concepción del concepto de limite
concepción del concepto de limiteconcepción del concepto de limite
concepción del concepto de limite
 
Layme caceres diego
Layme caceres diegoLayme caceres diego
Layme caceres diego
 
Presentación historia del concepto de limite
Presentación historia del concepto de limitePresentación historia del concepto de limite
Presentación historia del concepto de limite
 
Description d´un ami
Description d´un amiDescription d´un ami
Description d´un ami
 
Trabajo gestion docuental ii oscar mora y edith sanchez
Trabajo gestion docuental ii oscar mora y edith sanchezTrabajo gestion docuental ii oscar mora y edith sanchez
Trabajo gestion docuental ii oscar mora y edith sanchez
 
Mysql Administracion
Mysql AdministracionMysql Administracion
Mysql Administracion
 
2. manipulación higiénica de alimentos
2. manipulación higiénica de alimentos2. manipulación higiénica de alimentos
2. manipulación higiénica de alimentos
 
Contrato de compraventa
Contrato de compraventaContrato de compraventa
Contrato de compraventa
 
2.manipulacion higienica de_alimentos
2.manipulacion higienica de_alimentos2.manipulacion higienica de_alimentos
2.manipulacion higienica de_alimentos
 
Contabilidad Financiera
Contabilidad FinancieraContabilidad Financiera
Contabilidad Financiera
 
Metodologia
MetodologiaMetodologia
Metodologia
 
Upa 2011 nicolas soto, manuel vargas
Upa 2011   nicolas soto, manuel vargasUpa 2011   nicolas soto, manuel vargas
Upa 2011 nicolas soto, manuel vargas
 
Ajustes Curriculares En Historia
Ajustes Curriculares En HistoriaAjustes Curriculares En Historia
Ajustes Curriculares En Historia
 
Propiedad intelectual audiovisual
Propiedad intelectual audiovisualPropiedad intelectual audiovisual
Propiedad intelectual audiovisual
 
Historia E Popullit Shqiptar
Historia E Popullit ShqiptarHistoria E Popullit Shqiptar
Historia E Popullit Shqiptar
 
Auditoria sena
Auditoria senaAuditoria sena
Auditoria sena
 
Estación tercera
Estación terceraEstación tercera
Estación tercera
 
KepMenKeh 1983, Penetapan Lapas Menjadi Rutan
KepMenKeh 1983, Penetapan Lapas Menjadi RutanKepMenKeh 1983, Penetapan Lapas Menjadi Rutan
KepMenKeh 1983, Penetapan Lapas Menjadi Rutan
 

Similaire à Herencia OO

Mecanismos-de-abstraccion-en-Java PARA PROGRAMAR.pptx
Mecanismos-de-abstraccion-en-Java PARA PROGRAMAR.pptxMecanismos-de-abstraccion-en-Java PARA PROGRAMAR.pptx
Mecanismos-de-abstraccion-en-Java PARA PROGRAMAR.pptxjuan gonzalez
 
Programación estructurada
Programación estructuradaProgramación estructurada
Programación estructuradavnslgars
 
[ES] Programación orientada a objeto con java
[ES] Programación orientada a objeto con java[ES] Programación orientada a objeto con java
[ES] Programación orientada a objeto con javaEudris Cabrera
 
8 Mecanismos-de-abstraccion-en-Java.pptx
8 Mecanismos-de-abstraccion-en-Java.pptx8 Mecanismos-de-abstraccion-en-Java.pptx
8 Mecanismos-de-abstraccion-en-Java.pptxjuan gonzalez
 
Historia java ruben rodriguez
Historia java ruben rodriguezHistoria java ruben rodriguez
Historia java ruben rodriguezcoruniversitec
 
Daniel espinosa garzon
Daniel espinosa garzonDaniel espinosa garzon
Daniel espinosa garzonorus004
 
Conceptualizacion lenguajes de programacion
Conceptualizacion lenguajes de programacionConceptualizacion lenguajes de programacion
Conceptualizacion lenguajes de programacionorus004
 
fundamentos-de-poo.ppt 2.ppt
fundamentos-de-poo.ppt 2.pptfundamentos-de-poo.ppt 2.ppt
fundamentos-de-poo.ppt 2.pptjuan gonzalez
 
Porafolio unidad 1
Porafolio unidad 1Porafolio unidad 1
Porafolio unidad 1bchrmz
 
Porafolio unidad 1
Porafolio unidad 1Porafolio unidad 1
Porafolio unidad 1bchrmz
 
Grupo 6 - clases
Grupo 6  - clasesGrupo 6  - clases
Grupo 6 - claseszeta2015
 
Trabajo de diceño y realizacion
Trabajo de diceño y realizacionTrabajo de diceño y realizacion
Trabajo de diceño y realizacionLolyPila
 
01. MODIFICADORES DE ACCESO EN JAVA.pptx
01. MODIFICADORES DE ACCESO EN JAVA.pptx01. MODIFICADORES DE ACCESO EN JAVA.pptx
01. MODIFICADORES DE ACCESO EN JAVA.pptxJuanCarlosRomanPerez1
 

Similaire à Herencia OO (20)

Act10byme
Act10bymeAct10byme
Act10byme
 
Mecanismos-de-abstraccion-en-Java PARA PROGRAMAR.pptx
Mecanismos-de-abstraccion-en-Java PARA PROGRAMAR.pptxMecanismos-de-abstraccion-en-Java PARA PROGRAMAR.pptx
Mecanismos-de-abstraccion-en-Java PARA PROGRAMAR.pptx
 
Programación estructurada
Programación estructuradaProgramación estructurada
Programación estructurada
 
[ES] Programación orientada a objeto con java
[ES] Programación orientada a objeto con java[ES] Programación orientada a objeto con java
[ES] Programación orientada a objeto con java
 
8 Mecanismos-de-abstraccion-en-Java.pptx
8 Mecanismos-de-abstraccion-en-Java.pptx8 Mecanismos-de-abstraccion-en-Java.pptx
8 Mecanismos-de-abstraccion-en-Java.pptx
 
Conceptos poo
Conceptos pooConceptos poo
Conceptos poo
 
Historia java ruben
Historia java rubenHistoria java ruben
Historia java ruben
 
Historia java ruben rodriguez
Historia java ruben rodriguezHistoria java ruben rodriguez
Historia java ruben rodriguez
 
Poo
PooPoo
Poo
 
Daniel espinosa garzon
Daniel espinosa garzonDaniel espinosa garzon
Daniel espinosa garzon
 
Conceptualizacion lenguajes de programacion
Conceptualizacion lenguajes de programacionConceptualizacion lenguajes de programacion
Conceptualizacion lenguajes de programacion
 
fundamentos-de-poo.ppt 2.ppt
fundamentos-de-poo.ppt 2.pptfundamentos-de-poo.ppt 2.ppt
fundamentos-de-poo.ppt 2.ppt
 
Porafolio unidad 1
Porafolio unidad 1Porafolio unidad 1
Porafolio unidad 1
 
Porafolio unidad 1
Porafolio unidad 1Porafolio unidad 1
Porafolio unidad 1
 
Grupo 6 - clases
Grupo 6  - clasesGrupo 6  - clases
Grupo 6 - clases
 
Trabajo de diceño y realizacion
Trabajo de diceño y realizacionTrabajo de diceño y realizacion
Trabajo de diceño y realizacion
 
Poo sistem k.a.
Poo sistem k.a.Poo sistem k.a.
Poo sistem k.a.
 
Asignación 1 astrid c.
Asignación 1 astrid c.Asignación 1 astrid c.
Asignación 1 astrid c.
 
metodos de clases
metodos de clasesmetodos de clases
metodos de clases
 
01. MODIFICADORES DE ACCESO EN JAVA.pptx
01. MODIFICADORES DE ACCESO EN JAVA.pptx01. MODIFICADORES DE ACCESO EN JAVA.pptx
01. MODIFICADORES DE ACCESO EN JAVA.pptx
 

Dernier

DECÁGOLO DEL GENERAL ELOY ALFARO DELGADO
DECÁGOLO DEL GENERAL ELOY ALFARO DELGADODECÁGOLO DEL GENERAL ELOY ALFARO DELGADO
DECÁGOLO DEL GENERAL ELOY ALFARO DELGADOJosé Luis Palma
 
Los Nueve Principios del Desempeño de la Sostenibilidad
Los Nueve Principios del Desempeño de la SostenibilidadLos Nueve Principios del Desempeño de la Sostenibilidad
Los Nueve Principios del Desempeño de la SostenibilidadJonathanCovena1
 
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptx
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptxPPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptx
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptxOscarEduardoSanchezC
 
Tarea 5-Selección de herramientas digitales-Carol Eraso.pdf
Tarea 5-Selección de herramientas digitales-Carol Eraso.pdfTarea 5-Selección de herramientas digitales-Carol Eraso.pdf
Tarea 5-Selección de herramientas digitales-Carol Eraso.pdfCarol Andrea Eraso Guerrero
 
VOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMAL
VOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMALVOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMAL
VOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMALEDUCCUniversidadCatl
 
Mapa Mental de estrategias de articulación de las areas curriculares.pdf
Mapa Mental de estrategias de articulación de las areas curriculares.pdfMapa Mental de estrategias de articulación de las areas curriculares.pdf
Mapa Mental de estrategias de articulación de las areas curriculares.pdfvictorbeltuce
 
Fundamentos y Principios de Psicopedagogía..pdf
Fundamentos y Principios de Psicopedagogía..pdfFundamentos y Principios de Psicopedagogía..pdf
Fundamentos y Principios de Psicopedagogía..pdfsamyarrocha1
 
FICHA DE MONITOREO Y ACOMPAÑAMIENTO 2024 MINEDU
FICHA DE MONITOREO Y ACOMPAÑAMIENTO  2024 MINEDUFICHA DE MONITOREO Y ACOMPAÑAMIENTO  2024 MINEDU
FICHA DE MONITOREO Y ACOMPAÑAMIENTO 2024 MINEDUgustavorojas179704
 
PINTURA ITALIANA DEL CINQUECENTO (SIGLO XVI).ppt
PINTURA ITALIANA DEL CINQUECENTO (SIGLO XVI).pptPINTURA ITALIANA DEL CINQUECENTO (SIGLO XVI).ppt
PINTURA ITALIANA DEL CINQUECENTO (SIGLO XVI).pptAlberto Rubio
 
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...fcastellanos3
 
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARONARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFAROJosé Luis Palma
 
Plan Año Escolar Año Escolar 2023-2024. MPPE
Plan Año Escolar Año Escolar 2023-2024. MPPEPlan Año Escolar Año Escolar 2023-2024. MPPE
Plan Año Escolar Año Escolar 2023-2024. MPPELaura Chacón
 
Uses of simple past and time expressions
Uses of simple past and time expressionsUses of simple past and time expressions
Uses of simple past and time expressionsConsueloSantana3
 
periodico mural y sus partes y caracteristicas
periodico mural y sus partes y caracteristicasperiodico mural y sus partes y caracteristicas
periodico mural y sus partes y caracteristicas123yudy
 
PLANIFICACION ANUAL 2024 - INICIAL UNIDOCENTE.docx
PLANIFICACION ANUAL 2024 - INICIAL UNIDOCENTE.docxPLANIFICACION ANUAL 2024 - INICIAL UNIDOCENTE.docx
PLANIFICACION ANUAL 2024 - INICIAL UNIDOCENTE.docxJUANSIMONPACHIN
 
PPT_Formación integral y educación CRESE (1).pdf
PPT_Formación integral y educación CRESE (1).pdfPPT_Formación integral y educación CRESE (1).pdf
PPT_Formación integral y educación CRESE (1).pdfEDILIAGAMBOA
 
Metabolismo 3: Anabolismo y Fotosíntesis 2024
Metabolismo 3: Anabolismo y Fotosíntesis 2024Metabolismo 3: Anabolismo y Fotosíntesis 2024
Metabolismo 3: Anabolismo y Fotosíntesis 2024IES Vicent Andres Estelles
 
TUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJO
TUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJOTUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJO
TUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJOweislaco
 

Dernier (20)

DECÁGOLO DEL GENERAL ELOY ALFARO DELGADO
DECÁGOLO DEL GENERAL ELOY ALFARO DELGADODECÁGOLO DEL GENERAL ELOY ALFARO DELGADO
DECÁGOLO DEL GENERAL ELOY ALFARO DELGADO
 
Los Nueve Principios del Desempeño de la Sostenibilidad
Los Nueve Principios del Desempeño de la SostenibilidadLos Nueve Principios del Desempeño de la Sostenibilidad
Los Nueve Principios del Desempeño de la Sostenibilidad
 
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptx
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptxPPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptx
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptx
 
Tarea 5-Selección de herramientas digitales-Carol Eraso.pdf
Tarea 5-Selección de herramientas digitales-Carol Eraso.pdfTarea 5-Selección de herramientas digitales-Carol Eraso.pdf
Tarea 5-Selección de herramientas digitales-Carol Eraso.pdf
 
VOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMAL
VOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMALVOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMAL
VOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMAL
 
Mapa Mental de estrategias de articulación de las areas curriculares.pdf
Mapa Mental de estrategias de articulación de las areas curriculares.pdfMapa Mental de estrategias de articulación de las areas curriculares.pdf
Mapa Mental de estrategias de articulación de las areas curriculares.pdf
 
Fundamentos y Principios de Psicopedagogía..pdf
Fundamentos y Principios de Psicopedagogía..pdfFundamentos y Principios de Psicopedagogía..pdf
Fundamentos y Principios de Psicopedagogía..pdf
 
FICHA DE MONITOREO Y ACOMPAÑAMIENTO 2024 MINEDU
FICHA DE MONITOREO Y ACOMPAÑAMIENTO  2024 MINEDUFICHA DE MONITOREO Y ACOMPAÑAMIENTO  2024 MINEDU
FICHA DE MONITOREO Y ACOMPAÑAMIENTO 2024 MINEDU
 
PPTX: La luz brilla en la oscuridad.pptx
PPTX: La luz brilla en la oscuridad.pptxPPTX: La luz brilla en la oscuridad.pptx
PPTX: La luz brilla en la oscuridad.pptx
 
PINTURA ITALIANA DEL CINQUECENTO (SIGLO XVI).ppt
PINTURA ITALIANA DEL CINQUECENTO (SIGLO XVI).pptPINTURA ITALIANA DEL CINQUECENTO (SIGLO XVI).ppt
PINTURA ITALIANA DEL CINQUECENTO (SIGLO XVI).ppt
 
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
 
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARONARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
 
Plan Año Escolar Año Escolar 2023-2024. MPPE
Plan Año Escolar Año Escolar 2023-2024. MPPEPlan Año Escolar Año Escolar 2023-2024. MPPE
Plan Año Escolar Año Escolar 2023-2024. MPPE
 
Uses of simple past and time expressions
Uses of simple past and time expressionsUses of simple past and time expressions
Uses of simple past and time expressions
 
periodico mural y sus partes y caracteristicas
periodico mural y sus partes y caracteristicasperiodico mural y sus partes y caracteristicas
periodico mural y sus partes y caracteristicas
 
PLANIFICACION ANUAL 2024 - INICIAL UNIDOCENTE.docx
PLANIFICACION ANUAL 2024 - INICIAL UNIDOCENTE.docxPLANIFICACION ANUAL 2024 - INICIAL UNIDOCENTE.docx
PLANIFICACION ANUAL 2024 - INICIAL UNIDOCENTE.docx
 
PPT_Formación integral y educación CRESE (1).pdf
PPT_Formación integral y educación CRESE (1).pdfPPT_Formación integral y educación CRESE (1).pdf
PPT_Formación integral y educación CRESE (1).pdf
 
DIA INTERNACIONAL DAS FLORESTAS .
DIA INTERNACIONAL DAS FLORESTAS         .DIA INTERNACIONAL DAS FLORESTAS         .
DIA INTERNACIONAL DAS FLORESTAS .
 
Metabolismo 3: Anabolismo y Fotosíntesis 2024
Metabolismo 3: Anabolismo y Fotosíntesis 2024Metabolismo 3: Anabolismo y Fotosíntesis 2024
Metabolismo 3: Anabolismo y Fotosíntesis 2024
 
TUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJO
TUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJOTUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJO
TUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJO
 

Herencia OO

  • 1. Herencia (informática)<br />En orientación a objetos la herencia es el mecanismo fundamental para implementar la reutilización y extensibilidad del software. A través de ella los diseñadores pueden construir nuevas clases partiendo de una jerarquía de clases ya existente (comprobadas y verificadas) evitando con ello el rediseño, la modificación y verificación de la parte ya implementada. La herencia facilita la creación de objetos a partir de otros ya existentes, obteniendo características (métodos y atributos) similares a los ya existentes.<br />Es la relación entre una clase general y otra clase más especifica. Por ejemplo: Si declaramos una clase párrafo derivada de una clase texto, todos los métodos y variables asociadas con la clase texto, son automáticamente heredados por la subclase párrafo.<br />La herencia es uno de los mecanismos de la programación orientada a objetos, por medio del cual una clase se deriva de otra, llamada entonces clase base o clase padre,(a veces se le denomina superclase pero no es muy comun), de manera que extiende su funcionalidad. Una de sus funciones más importantes es la de proveer Polimorfismo y late binding.<br />Clase Abstracta<br />La herencia permite que existan clases que nunca serán instanciadas directamente. En el ejemplo anterior, una clase quot; perroquot; heredaría los atributos y métodos de la clase quot; mamíferoquot; , así como también quot; gatoquot; , quot; delfínquot; o cualquier otra subclase; pero, en ejecución, no habrá ningún objeto quot; mamíferoquot; que no pertenezca a alguna de las subclases. En ese caso, a una clase así se la conocería como Clase Abstracta. La ausencia de instancias específicas es su única particularidad, para todo lo demás es como cualquier otra clase.<br />Herencia y ocultación de información<br />El diseñador puede definir qué variables de instancia y métodos de los objetos de una clase son visibles. En C++ y java esto se consigue con las especificaciones private, protected y public. Sólo las variables y métodos definidos como públicos en un objeto serán visibles por todos los objetos.<br />En cuanto a las subclases, que heredan las estructuras de las superclases, el diseñador puede controlar qué miembros de las superclases son visibles en las subclases. En el caso de java y C++ los especificadores de acceso (private, protected, public) de los miembros de la superclase afectan también a la herencia:<br />Private: ningún miembro privado de la superclase es visible en la subclase.<br />Protected: los miembros protegidos de la superclase son visibles en la subclase, pero no visibles para el exterior.<br />Public: los miembros públicos de la superclase siguen siendo públicos en la subclase.<br />Redefinición de métodos<br />En la clase derivada se puede redefinir algún método ya definido en la clase base. Para redefinir un método en la subclase, basta con declarar una función miembro con el mismo nombre. Si en una clase en particular se invoca a un método, y el método no está definido en la misma, es buscado automáticamente en las clases superiores. Sin embargo, si existieran dos métodos con el mismo nombre y distinto código, uno en la clase y otro en una superclase, se ejecutaría el de la clase, no el de la superclase.<br />Por lo general, siempre se puede acceder explícitamente al método de la clase superior mediante una sintaxis diferente, la cual dependerá del lenguaje de programación empleado.<br />Ventajas<br />Ayuda a los programadores a ahorrar código y tiempo, ya que si tiene una clase lista es solo de implementarla y listo todo el código de esta se resume a solo un llamado.<br />Los objetos pueden ser construidos a partir de otros similares. Para ello es necesario que exista una clase base y una jerarquía (relacionamiento) de clases.<br />La clase derivada puede heredar código y datos de la clase base, añadiendo código o modificando lo heredado.<br />Las clases que heredan propiedades de otra clase pueden servir como clase base de otras.<br />Estereotipos de herencia<br />Herencia simple: Un objeto puede extender las características de otro objeto y de ningún otro, es decir, que solo puede heredar o tomar atributos de un solo padre o de una sola clase.<br />Herencia múltiple: Un objeto puede extender las características de uno o más objetos, es decir, puede tener varios padres. En este aspecto hay discrepancias entre los diseñadores de lenguajes. Algunos de ellos han preferido no admitir la herencia múltiple por las posibles coincidencias en nombres de métodos o datos miembros. Por ejemplo C++, Python permiten herencia múltiple, mientras que Java, Ada y C# sólo permiten herencia simple.<br />Encapsulamiento (informática)<br />En programación modular, y más específicamente en programación orientada a objetos, se denomina encapsulamiento al ocultamiento del estado, es decir, de los datos miembro, de un objeto de manera que sólo se puede cambiar mediante las operaciones definidas para ese objeto.<br />Cada objeto está aislado del exterior, es un módulo natural, y la aplicación entera se reduce a un agregado o rompecabezas de objetos. El aislamiento protege a los datos asociados a un objeto contra su modificación por quien no tenga derecho a acceder a ellos, eliminando efectos secundarios e interacciones.<br />De esta forma el usuario de la clase puede obviar la implementación de los métodos y propiedades para concentrarse sólo en cómo usarlos. Por otro lado se evita que el usuario pueda cambiar su estado de maneras imprevistas e incontroladas.<br />Encapsulamiento<br />Se dice que es el empaquetado de métodos y atributos dentro de un objeto, mediante una interfaz grafica. La clave está precisamente en el envoltorio del Como se puede observar de los diagramas, las variables del objeto se localizan en el centro o núcleo del objeto. Los métodos rodean y esconden el núcleo del objeto de otros objetos en el programa. Al empaquetamiento de las variables de un objeto con la protección de sus métodos se le llama encapsulamiento. Típicamente, el encapsulamiento es utilizado para esconder detalles de la puesta en práctica no importantes de otros objetos. Entonces, los detalles de la puesta en práctica pueden cambiar en cualquier tiempo sin afectar otras partes del programa.<br />El encapsulamiento de variables y métodos en un componente de software ordenado es, todavía, una simple idea poderosa que provee dos principales beneficios a los desarrolladores de software: El encapsulamiento consiste en unir en la Clase las características y comportamientos, esto es, las variables y métodos. Es tener todo esto en una sola entidad. En los lenguajes estructurados esto era imposible. Es evidente que el encapsulamiento se logra gracias a la abstracción y el ocultamiento que veremos a continuación. La utilidad del encapsulamiento va por la facilidad para manejar la complejidad, ya que tendremos a las Clases como cajas negras donde sólo se conoce el comportamiento pero no los detalles internos, y esto es conveniente porque lo que nos interesará será conocer qué hace la Clase pero no será necesario saber cómo lo hace.<br />La encapsulación da lugar a que las clases se dividan en dos partes:<br />Interface: captura la visión externa de una clase, abarcando la abstracción del comportamiento común a los ejemplos de esa clase.<br />Implementación: comprende la representación de la abstracción, así como los mecanismos que conducen al comportamiento deseado.<br />Formas de encapsular<br />Estándar (Predeterminado)<br />Abierto : Hace que el miembro de la clase pueda ser accedido desde el exterior de la Clase y cualquier parte del programa.<br />Protegido : Solo es accesible desde la Clase y las clases que heredan (a cualquier nivel).<br />Semi cerrado : Solo es accesible desde la clase heredada<br />Cerrado : Solo es accesible desde la Clase.<br />En el encapsulamiento hay analizadores que pueden ser semánticos y sintácticos.<br />Polimorfismo (informática)<br />El polimorfismo se refiere a la capacidad para que varias clases derivadas de una antecesora utilicen un mismo método de forma diferente.<br />Por ejemplo, podemos crear dos clases distintas: Pez y Ave que heredan de la superclase Animal. La clase Animal tiene el método abstracto mover que se implementa de forma distinta en cada una de las subclases (peces y aves se mueven de forma distinta).<br />Como se mencionó anteriormente, el concepto de polimorfismo se puede aplicar tanto a funciones como a tipos de datos. Así nacen los conceptos de funciones polimórficas y tipos polimórficos. Las primeras son aquellas funciones que pueden evaluarse o ser aplicadas a diferentes tipos de datos de forma indistinta; los tipos polimórficos, por su parte, son aquellos tipos de datos que contienen al menos un elemento cuyo tipo no está especificado.<br />Clasificación<br />Se puede clasificar el polimorfismo en dos grandes clases:<br />Polimorfismo dinámico (o polimorfismo paramétrico) es aquél en el que el código no incluye ningún tipo de especificación sobre el tipo de datos sobre el que se trabaja. Así, puede ser utilizado a todo tipo de datos compatible.<br />Polimorfismo estático (o polimorfismo ad hoc) es aquél en el que los tipos a los que se aplica el polimorfismo deben ser explicitados y declarados uno por uno antes de poder ser utilizados.<br />El polimorfismo dinámico unido a la herencia es lo que en ocasiones se conoce como programación genérica.<br />También se clasifica en herencia por redefinición de métodos abstractos y por método sobrecargado. El segundo hace referencia al mismo método con diferentes parámetros.<br />Otra clasificación agrupa los polimorfismo en dos tipos: Ad-Hoc que incluye a su vez sobrecarga de operadores y coerción, Universal (inclusión o controlado por la herencia, paramétrico o genericidad).<br />Polimorfismo desde una interfaz<br />Aunque el polimorfismo es el mismo se aplique donde se aplique, el modo en que se aplica desde una interfaz puede resultar un poco más oscuro y difícil de entender. Se expone un sencillo ejemplo (en VB-NET) comentado para entender como funciona aplicado desde una interfaz, primero se escribe el código y luego se comenta el funcionamiento. Nota: para no enturbiar el código en exceso, todo lo que no se declara privado se sobreentiende público.<br /> ' Declaramos una interfaz llamada IOperar y declaramos una función llamada Operar <br /> ' que implementarán las clases deseadas:<br /> Interface IOperar<br /> Function Operar(valor1 as integer, valor2 as integer) as long<br /> End Interface<br /> <br /> ' Declaramos una clase que trabaja más alejada del usuario y que contendría funciones comunes<br /> ' para las siguiente clase, si no fueran idénticas irían en la interfaz, <br /> ' pero al caso de mostrar el polimorfismo se suponen idénticas:<br /> Class Operacion<br /> Function Calcular(clasellamante as Object) as Long <br /> ' aquí iría el código común a todas las operaciones.... que llaman a esa función<br /> ' por ejemplo recoger los 2 valores de la operación, chequear que están en el rango deseado, etc.<br /> <br /> ' se supone que la función inputValor recoge un valor de algún sitio<br /> valor1 as integer = inputValor() <br /> valor2 as integer = inputValor()<br /> <br /> op as New IOperar = clasellamante<br /> Return op.Operar(valor1,valor2) 'AQUÍ es donde se utiliza el polimorfismo.<br /> End Function<br /> End Class<br /> ' Declaramos 2 clases: Sumar y Resta que implementan la interfaz y que llaman a la clase Operacion:<br /> Class Sumar<br /> Implements IOperar<br /> Private Function Operar(valor1 as Integer, valor2 as Integer) as Long Implements IOperar.Operar<br /> Return valor1 + valor2<br /> End Function<br /> <br /> Function Calcular() as Long<br /> op as New operacion<br /> Return op.Calcular(Me) ' se está llamando a la función 'Calcular' de la clase 'Operación'<br /> End Function<br /> End Class<br /> ' segunda clase....<br /> Class Restar<br /> Implements IOperar<br /> Private Function Operar(valor1 as Integer, valor2 as Integer) as Long Implements IOperar.Operar<br /> Return valor1 - valor2<br /> End Function<br /> <br /> Function Calcular() as Long<br /> op as New operacion<br /> Return op.Calcular(Me) ' se está llamando a la función 'Calcular' de la clase 'Operación'<br /> End Function<br /> End Class<br />Analicemos ahora el código para entender el polimorfismo expuesto en la interfaz: La interfaz expone un método que puede ser implementado por las diferentes clases, normalmente relacionadas entre si. Las clases Sumar y Restar implementan la interfaz pero el método de la interfaz lo declaramos privado para evitar ser accedido libremente y además tienen un método llamado Calcular que llama a la clase Operacion donde tenemos otro método con el mismo nombre. Es esta clase última la que realiza el polimorfismo y debe fijarse como es a través de una instancia de la interfaz que llama al método operar. La interfaz sabe a qué método de qué clase llamar desde el momento que asignamos un valor a la variable OP en el método Calcular de la clase Operacion, que a su vez recibió la referencia del método Calcular desde la clase que la llama, sea está cual sea se identifica a sí misma, mediante la referencia Me ó This según el lenguaje empleado. Debe notarse que la instancia de la interfaz accede a sus métodos aunque en sus clases se hayan declarado privadas.<br />Diferencias entre polimorfismo y sobrecarga<br />El polimorfismo como se muestra en el ejemplo anterior, suele ser bastante ventajoso aplicado desde las interfaces, ya que permite crear nuevos tipos sin necesidad de tocar las clases ya existentes (imaginemos que deseamos añadir una clase Multiplicar), basta con recompilar todo el código que incluye los nuevos tipos añadidos. Si se hubiera recurrido a la sobrecarga durante el diseño exigiría retocar la clase anteriormente creada al añadir la nueva operación Multiplicar, lo que además podría suponer revisar todo el código donde se instancia a la clase.<br />La sobrecarga se da siempre dentro de una sola clase, mientras que el polimorfismo se da entre clases distintas.<br />Un método está sobrecargado si dentro de una clase existen dos o más declaraciones de dicho método con el mismo nombre pero con parámetros distintos, por lo que no hay que confundirlo con polimorfismo.<br />En definitiva: La sobrecarga se resuelve en tiempo de compilación utilizando los nombres de los métodos y los tipos de sus parámetros; el polimorfismo se resuelve en tiempo de ejecución del programa, esto es, mientras se ejecuta, en función de que clase pertenece un objeto.<br />Programación orientada a objetos<br />La programación orientada a objetos o POO (OOP según sus siglas en inglés) es un paradigma de programación que usa objetos y sus interacciones, para diseñar aplicaciones y programas informáticos. Está basado en varias técnicas, incluyendo herencia, abstracción, polimorfismo y encapsulamiento. Su uso se popularizó a principios de la década de los años 1990. En la actualidad, existe variedad de lenguajes de programación que soportan la orientación a objetos.<br />Introducción<br />Los objetos son entidades que tienen un determinado comportamiento (método) e identidad:<br />El estado está compuesto de datos, será uno o varios atributos a los que se habrán asignado unos valores concretos (datos).<br />El comportamiento está definido por los métodos o mensajes a los que sabe responder dicho objeto, es decir, qué operaciones se pueden realizar con él.<br />La identidad es una propiedad de un objeto que lo diferencia del resto, dicho con otras palabras, es su identificador (concepto análogo al de identificador de una variable o una constante).<br />Un objeto contiene toda la información que 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. A su vez, los objetos disponen de mecanismos de interacción llamados métodos, que favorecen la comunicación entre ellos. Esta comunicación favorece a su vez el cambio de estado en los propios objetos. Esta característica lleva a tratarlos como unidades indivisibles, en las que no se separa el estado y el comportamiento.<br />Los métodos (comportamiento) y atributos (estado) están estrechamente relacionados por la propiedad de conjunto. Esta propiedad destaca que una clase requiere de métodos para poder tratar los atributos con los que cuenta. El programador debe pensar indistintamente en ambos conceptos, sin separar ni darle mayor importancia a alguno de ellos. Hacerlo podría producir el hábito erróneo de crear clases contenedoras de información por un lado y clases con métodos que manejen a las primeras por el otro. De esta manera se estaría realizando una programación estructurada camuflada en un lenguaje de programación orientado a objetos.<br />La POO difiere de la programación estructurada tradicional, en la que los datos y los procedimientos están separados y sin relación, ya que lo único que se busca es el procesamiento de unos datos de entrada para obtener otros de salida. La programación estructurada anima al programador a pensar sobre todo en términos de procedimientos o funciones, y en segundo lugar en las estructuras de datos que esos procedimientos manejan. En la programación estructurada sólo se escriben funciones que procesan datos. Los programadores que emplean POO, en cambio, primero definen objetos para luego enviarles mensajes solicitándoles que realicen sus métodos por sí mismos.<br />Origen<br />Los conceptos de la programación orientada a objetos tienen origen en Simula 67, un lenguaje diseñado para hacer simulaciones, creado por Ole-Johan Dahl y Kristen Nygaard del Centro de Cómputo Noruego en Oslo. En este centro, se trabajaba en simulaciones de naves, que fueron confundidas por la explosión combinatoria de cómo las diversas cualidades de diferentes naves podían afectar unas a las otras. La 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. Fueron refinados más tarde en Smalltalk, desarrollado en Simula en Xerox PARC (cuya primera versión fue escrita sobre Basic) pero diseñado para ser un sistema completamente dinámico en el cual los objetos se podrían crear y modificar quot; sobre la marchaquot; (en tiempo de ejecución) en lugar de tener un sistema basado en programas estáticos.<br />La programación orientada a objetos se fue convirtiendo en el estilo de programación dominante a mediados de los años ochenta, en gran parte debido a la influencia de C++, una extensión del lenguaje de programación C. Su dominación fue consolidada gracias al auge de las Interfaces gráficas de usuario, para las cuales la programación orientada a objetos está particularmente bien adaptada. En este caso, se habla también de programación dirigida por eventos.<br />Las características de orientación a objetos fueron agregadas a muchos lenguajes existentes durante ese tiempo, incluyendo Ada, BASIC, Lisp, Pascal, entre otros. La adición de estas características a los lenguajes que no fueron diseñados inicialmente para ellas condujo a menudo a problemas de compatibilidad y en la capacidad de mantenimiento del código. Los lenguajes orientados a objetos quot; purosquot; , por su parte, carecían de las características de las cuales muchos programadores habían venido a depender. Para saltar este obstáculo, se hicieron muchas tentativas para crear nuevos lenguajes basados en métodos orientados a objetos, pero permitiendo algunas características imperativas de maneras quot; segurasquot; . 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 aparición de Internet, y a la implementación de la máquina virtual de Java en la mayoría de navegadores. PHP en su versión 5 se ha modificado, soporta una orientación completa a objetos, cumpliendo todas las características propias de la orientación a objetos.<br />Conceptos fundamentales<br />La programación orientada a objetos es una forma de programar que trata de encontrar una solución a estos problemas. Introduce nuevos conceptos, que superan y amplían conceptos antiguos ya conocidos. Entre ellos destacan los siguientes:<br />Clase: definiciones de las propiedades y comportamiento de un tipo de objeto concreto. La instanciación es la lectura de estas definiciones y la creación de un objeto a partir de ellas.<br />Herencia: (por ejemplo, herencia de la clase C a la clase D) Es la facilidad mediante la cual la clase D hereda en ella cada uno de los atributos y operaciones de C, como si esos atributos y operaciones hubiesen sido definidos por la misma D. Por lo tanto, puede usar los mismos métodos y variables publicas declaradas en C. Los componentes registrados como quot; privadosquot; (private) también se heredan, pero como no pertenecen a la clase, se mantienen escondidos al programador y sólo pueden ser accedidos a través de otros métodos públicos. Esto es así para mantener hegemónico el ideal de OOP.<br />Objeto: entidad provista de un conjunto de propiedades o atributos (datos) y de comportamiento o funcionalidad (métodos) los mismos que consecuentemente reaccionan a eventos. Se corresponde con los objetos reales del mundo que nos rodea, o a objetos internos del sistema (del programa). Es una instancia a una clase.<br />Método: Algoritmo asociado a un objeto (o a una clase de objetos), cuya ejecución se desencadena tras la recepción de un quot; mensajequot; . Desde el punto de vista del comportamiento, es lo que el objeto puede hacer. Un método puede producir un cambio en las propiedades del objeto, o la generación de un quot; eventoquot; con un nuevo mensaje para otro objeto del sistema.<br />Evento: Es un suceso en el sistema (tal como una interacción del usuario con la máquina, o un mensaje enviado por un objeto). El sistema maneja el evento enviando el mensaje adecuado al objeto pertinente. También se puede definir como evento, a la reacción que puede desencadenar un objeto, es decir la acción que genera.<br />Mensaje: una comunicación dirigida a un objeto, que le ordena que ejecute uno de sus métodos con ciertos parámetros asociados al evento que lo generó.<br />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 esto se define como sus características predeterminadas, y cuyo valor puede ser alterado por la ejecución de algún método.<br />Estado interno: es una variable que se declara privada, que puede ser únicamente accedida y alterada por un método del objeto, y que se utiliza para indicar distintas situaciones posibles para el objeto (o clase de objetos). No es visible al programador que maneja una instancia de la clase.<br />Componentes de un objeto: atributos, identidad, relaciones y métodos.<br />Identificación de un objeto: un objeto se representa por medio de una tabla o entidad que esté compuesta por sus atributos y funciones correspondientes.<br />En comparación con un lenguaje imperativo, una quot; variablequot; , no es más que un contenedor interno del atributo del objeto o de un estado interno, así como la quot; funciónquot; es un procedimiento interno del método del objeto.<br />Características de la POO<br />Existe un acuerdo acerca de qué características contempla la quot; orientación a objetosquot; , las características siguientes son las más importantes:<br />Abstracción: denota las características esenciales de un objeto, donde se capturan sus comportamientos.Cada objeto en el sistema sirve como modelo de un quot; agentequot; abstracto que puede realizar trabajo, informar y cambiar su estado, y quot; comunicarsequot; con otros objetos en el sistema sin revelar cómo se implementan estas características. Los procesos, las funciones o los métodos pueden también ser abstraídos y cuando lo están, una variedad de técnicas son requeridas para ampliar una abstracción.El proceso de abstracción permite seleccionar las características relevantes dentro de un conjunto e identificar comportamientos comunes para definir nuevos tipos de entidades en el mundo real. La abstracción es clave en el proceso de análisis y diseño orientado a objetos, ya que mediante ella podemos llegar a armar un conjunto de clases que permitan modelar la realidad o el problema que se quiere atacar.<br />Encapsulamiento: Significa reunir a todos los elementos que pueden considerarse pertenecientes a una misma entidad, al mismo nivel de abstracción. Esto permite aumentar la cohesión de los componentes del sistema. Algunos autores confunden este concepto con el principio de ocultación, principalmente porque se suelen emplear conjuntamente.<br />Modularidad: Se denomina Modularidad a la propiedad que permite subdividir una aplicación en partes más pequeñas (llamadas módulos), cada una de las cuales debe ser tan independiente como sea posible de la aplicación en sí y de las restantes partes. Estos módulos se pueden compilar por separado, pero tienen conexiones con otros módulos. Al igual que la encapsulación, los lenguajes soportan la Modularidad de diversas formas.<br />Principio de ocultación: Cada objeto está aislado del exterior, es un módulo natural, y cada tipo de objeto expone una interfaz a otros objetos que especifica cómo pueden interactuar con los objetos de la clase. El aislamiento protege a las propiedades de un objeto contra su modificación por quien no tenga derecho a acceder a ellas, solamente los propios métodos 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 abstracción. La aplicación entera se reduce a un agregado o rompecabezas de objetos.<br />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 invocación de un comportamiento en una referencia producirá el comportamiento correcto para el tipo real del objeto referenciado. Cuando esto ocurre en quot; tiempo de ejecuciónquot; , esta última característica se llama asignación tardía o asignación dinámica. Algunos lenguajes proporcionan medios más estáticos (en quot; tiempo de compilaciónquot; ) de polimorfismo, tales como las plantillas y la sobrecarga de operadores de C++.<br />Herencia: las clases no están aisladas, sino que se relacionan entre sí, formando una jerarquía de clasificación. 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 volver a implementarlo. Esto suele hacerse habitualmente agrupando los objetos en clases y estas en árboles o enrejados que reflejan un comportamiento común. Cuando un objeto hereda de más de una clase se dice que hay herencia múltiple.<br />Recolección de basura: la recolección de basura o garbage collector es la técnica por la cual el entorno de objetos se encarga de destruir automáticamente, y por tanto desvincular la memoria asociada, los objetos que hayan quedado sin ninguna referencia a ellos. Esto significa que el programador no debe preocuparse por la asignación o liberación de memoria, ya que 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 que se extendieron para soportar el Paradigma de Programación Orientada a Objetos como C++ u Object Pascal, esta característica no existe y la memoria debe desasignarse manualmente.<br />Resumen<br />La programación orientada a objetos es un paradigma que utiliza objetos como elementos fundamentales en la construcción de la solución. Surge en los años 70. Un objeto es una abstracción de algún hecho o ente del mundo real que tiene atributos que representan sus características o propiedades y métodos que representan su comportamiento o acciones que realizan. Todas las propiedades y métodos comunes a los objetos se encapsulan o se agrupan en clases. Una clase es una plantilla o un prototipo para crear objetos, por eso se dice que los objetos son instancias de clases.<br />Lenguajes orientados a objetos<br />Simula (1967) es aceptado como el primer lenguaje que posee las características principales de un lenguaje orientado a objetos. Fue creado para hacer programas de simulación, en donde los quot; objetosquot; son la representación de la información más importante. Smalltalk (1972 a 1980) es posiblemente el ejemplo canónico, y con el que gran parte de la teoría de la programación orientada a objetos se ha desarrollado.<br />Entre los lenguajes orientados a objetos se destacan los siguientes:<br />ABAP<br />ABL Lenguaje de programación de OpenEdge de Progress Software<br />ActionScript<br />ActionScript 3<br />Ada<br />C++<br />C#<br />Clarion<br />Clipper (lenguaje de programación) (Versión 5.x con librería de objetos Class(y))<br />D<br />Object Pascal (Delphi)<br />Gambas<br />Harbour<br />Eiffel<br />Java<br />JavaScript (la herencia se realiza por medio de la programación basada en prototipos)<br />Lexico (en castellano)<br />Objective-C<br />Ocaml<br />Oz<br />R<br />Perl (soporta herencia múltiple. La resolución se realiza en preorden, pero puede modificarse al algoritmo linearization C3 por medio del módulo Class::C3 en CPAN)<br />PHP (a partir de su versión 5)<br />PowerBuilder<br />Python<br />Ruby<br />Smalltalk (Entorno de objetos puro)<br />Magik ( HYPERLINK quot; http://es.wikipedia.org/w/index.php?title=SmallWorld&action=edit&redlink=1quot; quot; SmallWorld (aún no redactado)quot; SmallWorld)<br />Vala<br />VB.NET<br />Visual FoxPro (en su versión 6)<br />Visual Basic 6.0<br />Visual Objects<br />XBase++<br />Lenguaje DRP<br />Lenguaje de programación Scala (lenguaje usado por Twitter) http://www.scala-lang.org/page.jsp<br />Muchos de estos lenguajes de programación no son puramente orientados a objetos, sino que son híbridos que combinan la POO con otros paradigmas.<br />Al igual que C++ otros lenguajes, como OOCOBOL, OOLISP, OOPROLOG y Object REXX, han sido creados añadiendo extensiones orientadas a objetos a un lenguaje de programación clásico.<br />Un nuevo paso en la abstracción de paradigmas de programación es la Programación Orientada a Aspectos (POA). Aunque es todavía una metodología en estado de maduración, cada vez atrae a más investigadores e incluso proyectos comerciales en todo el mundo.<br />