LENGUAJE DE PROGRAMACIÓN II CONCEPTOS BÁSICOS DE PROGRAMACIÓN ORIENTADA A OBJETOS • Razones fundamentales que están influyendo en la importancia de la POO Algunas de las causas que están influyendo considerablemente en el notable desarrollo de las técnicas orientadas a objetos son: • La OO (orientación a objetos) es especialmente adecuada para realizar determinadas aplicaciones, sobre todo realización de prototipos y simulación de programas • Los mecanismos de encapsulación de POO soportan un alto grado de reutilización de código, que se incrementa por sus mecanismos de herencia. • En el entorno de la base de datos, la OO se adjunta bien a los modelos semánticos de datos para solucionar las limitaciones de los modelos tradicionales. • Aumento espectacular de los lenguajes de programación orientados a objetos. • Interfaces de usuarios gráficos (por iconos) y visuales. Las interfaces de usuarios de una aplicación manipulan la entrada y salida del usuario. Por consiguiente, su función principal es la comunicación con el usuario final. • Objeto Los objetos son entidades que se pueden distinguir de manera clara y definida, ejemplos de un objeto pueden ser una persona, un libro, un botón de orden. • Estructura interna de un objeto: La estructura interna de un objeto está compuesta por tres elementos fundamentales como son: ♦ Propiedades: Son las características observables de un objeto. Las propiedades se reconocen porque describen un aspecto del objeto que podemos medir con una escala establecida previamente. A cada propiedad se le debe asignar un valor el cual permite identificar de manera única al objeto. ♦ Métodos: Se define como un conjunto de acciones que un objeto puede realizar para conseguir un propósito. Los métodos representan la parte viva e interesante de un objeto y se emplean habitualmente para modificar las propiedades del objeto. Al modificar cualquiera de las propiedades del objeto se altera su apariencia y se genera un cambio que el usuario de la aplicación puede percibir. ♦ Eventos: Todos los objetos se relacionan con el mundo que los rodea, esto significa que ningún objeto está aislado y siempre recibe el influjo de otros objetos. Los eventos son los estímulos que un objeto ejerce sobre otro • Estado de un objeto: El estado de un objeto es la apariencia que el objeto presenta al usuario, y depende del valor que tenga sus propiedades. Un cambio de estado se logra alterando al menos una de las propiedades del objeto. • Clases: Los objetos están organizados en familias claramente delimitadas. Una familia se reconoce porque reúne un 1 grupo de objetos que heredan elementos entre sí. El modelo de programación visual, al igual que la naturaleza, organiza los objetos en clases (familias), así una clase es el conjunto de objetos que pertenecen a una misma familia. Por ejemplo Madonna, Michael Jackson, Prince y Dire Straits son objetos de una clase cantantes de rock, sin embargo personas específicas con nombres específicos son miembros de esa clase si poseen ciertas características comunes. El modelo de programación visual permite así organizar las familias de objetos en un orden jerárquico. • Herencia: Un objeto es heredero de otro cuando posee todas sus propiedades y todos sus métodos y reconoce todos sus eventos, aunque pueda disfrutar de propiedades, métodos y eventos adicionales. Se define la herencia como la característica que tienen los objetos de derivarse unos de otros. Por otra parte la herencia supone una clase base y una jerarquía de clases que contienen las clases derivadas de la clase base, así las clases derivadas pueden heredar las propiedades y métodos de una clase base, añadiendo sus propios métodos y propiedades, incluso cambiar aquellos elementos de la clase base que necesiten sean diferentes. • Tipos de Herencia: Existen dos tipos de herencia ♦ Herencia Simple: En esta jerarquía cada clase tiene como máximo una sola superclase. La herencia simple permite que una clase herede las propiedades y métodos de su superclase en una cadena jerárquica. ♦ Herencia múltiple: Una malla o retícula consta de clases, cada una de las cuales pueden tener dos o más superclases inmediatas. Una herencia múltiple es aquella en la que cada clase puede heredar las propiedades y métodos de cualquier número de clases. • Encapsulamiento: Un objeto está separado del medio que lo rodea por algún tipo de envoltura. Esta separación es la que determina la unidad del objeto, es decir, lo convierte en algo independiente. La envoltura oculta los detalles relacionados con la construcción interior del objeto, esto significa que sólo conocemos del objeto aquello que es revelado por sus métodos. Se llama encapsulamiento a la propiedad que tienen los objetos de ocultar detalles internos, así se permite asegurar que el contenido de la información de un objeto este oculta al mundo exterior (Por ejemplo un objeto A no conoce lo que hace un objeto B y viceversa). Por otra parte el programador que construye un objeto tiene acceso a todas sus partes: propiedades, métodos y definición de eventos. El programador que utiliza un objeto solamente tiene acceso a sus propiedades y métodos (si estos son públicos) y a la programación de los eventos que han sido definidos para el objeto. Algunos métodos y propiedades en un objeto son privados, es decir, útiles únicamente dentro del objeto y desconocidos por quien utiliza el objeto, los restantes métodos y propiedades son públicos, t los programadores los emplean para cambiar el estado del objeto. • Comunicación entre objetos (mensajes) El mensaje es esencialmente una orden que se envía a un objeto para indicarle que realice alguna acción. También se define mensaje como la información completa que un objeto emisor transmite hacia un objeto receptor. Un mensaje contiene tres elementos: el objeto receptor, el tipo de evento y los datos necesarios para el receptor. 2 Mensaje Cuando se produce un evento, el objeto receptor sabe cuál es el objeto emisor, qué evento se produjo y el valor de los datos asociados con dicho evento. • Polimorfismo: El polimorfismo se presenta cuando se ha creado objetos que pertenecen a clases que han sido derivadas de otras clases. En otras palabras, el polimorfismo aparece en las clases derivadas. También se dice que el polimorfismo es la propiedad que indica literalmente, la posibilidad de que una entidad tome muchas formas, en términos prácticos el polimorfismo permite referirse a objetos de clases distintas mediante el mismo elemento de programa y realizar la misma operación de diferentes formas, según sea el objeto que se referencia en ese momento. Por ejemplo cuando se describe la clase mamíferos se puede observar que la operación comer es una operación fundamental en la vida de los mamíferos, de modo que cada tipo de mamíferos debe poder realizar la operación o función comer. Por otra parte, una vaca o una cabra que pasta en el campo, un niño que se come un bombón o caramelo y un león que devora a otro animal, son diferentes formas que utilizan los distintos mamíferos para realizar la misma función (comer). • Objetos compuestos: Una de las características que hacen a los objetos ser muy potentes es que pueden contener otros objetos. Los objetos que contienen otros objetos se denominan objetos compuestos. Esta característica ofrece dos ventajas importantes: ♦ Los objetos contenidos pueden cambiar en tamaño y composición, sin afectar al objeto compuesto que los contiene, esto hace que el mantenimiento de sistemas complejos de objetos anidados sea más sencillo. ♦ Los objetos contenidos están libres para participar en cualquier número de objetos compuestos, en lugar de estar bloqueados en un único objeto compuesto. 12. Reutilización con orientación a objetos: Reutilización o reutilizabilidad es la propiedad por la que software desarrollado puede ser utilizado cuantas veces sea necesario en más de un programa. Así por ejemplo, si se necesita una función que calcule el cuadrado o el cubo de un número, se puede crear una función que realice la tarea que el programa necesite. Las ventajas de la reutilización son evidentes, el ahorro de tiempo es sin duda una de las ventajas más considerables y otra es la facilidad para intercambiar software desarrollado por diferentes programadores. 13. Objetos y reutilización: La programación orientada a objeto proporciona el marco idóneo para la reutilización de las clases. Los conceptos de encapsulamiento y herencia son las bases que facilitan la reutilización. Un programador puede utilizar una clase existente y sin modificarla, añadirle nuevas características y datos. Esta operación se consigue derivando una clase a partir de la clase base existente, la nueva clase hereda las propiedades de la antigua, pero se pueden añadir nuevas propiedades. Por ejemplo, suponga que se escribe una clase Menú que crea una sistema menú (barras de desplazamiento, cuadros de diálogos, botones, etc.), con el tiempo, aunque la clase funciona bien, se observa que sería interesante que las leyendas de las opciones de los menús parpadearán o cambiarán el color. Para realizar esta tarea se diseña una clase derivada de menú que añada las nuevas propiedades de parpadeo o cambio de color La facilidad para reutilizar clases y en consecuencia objetos es una de las propiedades fundamentales que 3 justifican el uso de la programación orientada a objeto. Por esta razón los sistemas y en particular los lenguajes orientados a objetos suelen venir provistos de un conjunto (biblioteca) de clases predefinidas que permiten ahorrar tiempo y esfuerzo en el desarrollo de cualquier aplicación. 14. Constructor: Los constructores son métodos o funciones que existen dentro de todos los objetos, y que se activan solamente en el momento de la creación del objeto. Los constructores sirven para definir los valores iniciales de las propiedades del objeto. También se dice que un constructor es una operación que crea un objeto y/o inicializa su estado. 15. Destructor: El destructor es un método que se activa cuando el objeto desaparece. El destructor es único y sirve para que un objeto ejecute una acción (o grupo de acciones) antes de terminar su ciclo vital. Normalmente loa objetos dejan de existir cuando salen de su ámbito (entorno) en donde fueron creados. Los destructores son importantes porque se activas automáticamente, y eximen al programador de la tarea de liberar los recursos tomados por el objeto, ya que normalmente esta es la tarea ejecutada por el destructor. Emisor Mensaje Receptor Objeto receptor + evento + datos 4