22021p1s0506

 

Subtemas: Programación Orientada a Eventos.

Una vez comprendida las características y propiedades de lo que POO. (Programación Orientada a Objetos). Le presentamos un programa de fácil aprendizaje para poner en práctica nuestros conocimientos y que se encuentra al alcance de estudiantes con ganas de aprender a programar.

Todas las aplicaciones creadas en un lenguaje de programación orientado a objetos serán por defecto un programa orientado a evento. Es un programa orientado a eventos, porque cuando este es cargado o ejecutado solo espera a que el usuario realice alguna acción sobre uno de los objetos que posee, por ejemplo, la calculadora de Windows espera a que el usuario haga clic (Evento Click) con el Mouse sobre uno de los botones de comando que contienen los números para luego ponerlo en la caja de texto, o bien, espera a que el usuario pulse un número (Evento KeyPress) desde el teclado para ponerlo en la caja de texto.



Los programas o paquetes de programas que utilizamos con frecuencia en Windows son programas orientados a eventos.

Elementos de una aplicación en Windows

Los elementos principales de una aplicación de Windows son: formularios, controles, procedimientos, métodos, objetos y eventos. Cada uno de estos elementos juega un papel muy importante en una aplicación de Windows.




En los siguientes enlaces podrás acceder a más información: 

TAREA
Investiga y elabora un organizador gráfico sobre la programación orientada a eventos y elementos de aplicación en Windows.


Tema: Programación Orientada a Objetos

Concepto. - La programación Orientada a objetos se define como un paradigma de la programación, una manera de programar específica, donde se organiza el código en unidades denominadas clases, de las cuales se crean objetos que se relacionan entre sí para conseguir los objetivos de las aplicaciones.

La programación Orientada a objetos (POO) es una forma especial de programar, más cercana

a como expresaríamos las cosas en la vida real que otros tipos de programación.

Subtema: Elementos.

La programación orientada a objetos o POO consiste básicamente en el manejo de clases organizadas para generar un programa, estas tienen atributos básicos y pueden generar objetos con métodos y atributos específicos. Pero observamos varios términos como Clases, Objetos, atributos y métodos, a continuación, explicaremos cada uno de ellos y su relación.

ATRIBUTO:

Los atributos son las propiedades o estados de un elemento Clase u objeto, los atributos se declaran como variables del elemento y ayudan a estructurar el objeto de la clase.

MÉTODO:

Los métodos son el conjunto de funciones que pueden tener los elementos de un POO clase u objeto, pueden ser funciones aritméticas, comparación, medición, etc. Estos métodos pueden ser privados o públicos. Una clase en POO es una plantilla para la creación de objetos, esta plantilla es un elemento genérico o básico que tiene las características generales, comportamientos, atributos del objeto que se quiera crear.

Tipos de Programación

  • Programación No Estructurada
  • Programación Estructurada
  • Programación Modular
  • Programación Orientada a Objetos

Objeto

El objeto es la entidad en torno a la cual gira la POO. Un objeto es un ejemplar concreto de una clase, como por ejemplo el curso de metodología de la programación es un curso concreto dentro de todos los tipos de cursos que pueden existir. Un objeto pertenece a una clase, por lo tanto dispondrá de los atributos (datos) y operaciones (métodos) de la clase a la que pertenece. Un objeto responde al comportamiento definido por las operaciones de la clase a la que pertenece. Es decir, si la clase coche dispone del atributo color y del método arrancar, un coche concreto tendrá un color, y podrá arrancar, exclusivamente.

objeto 1

Un objeto se puede ver como una “cápsula” de datos y algoritmos que trabajan sobre esos datos. Un objeto no puede acceder directamente a sus datos (atributos). Los atributos son sólo accesibles desde la implementación de los métodos de una clase. Un objeto no puede “manipular” sus propios datos, para ello están los métodos de la clase de dicho objeto: el comportamiento (métodos) de un objeto puede variar el valor (estado) de sus datos (atributos). Por ejemplo, nunca debemos hacer lo siguiente: miCoche.color := ‘rojo’. Para esto definiremos métodos que actualicen el valor de los atributos de un objeto, por ejemplo: miCoche.ponerColor(‘rojo’).

En la POO, un objeto no es algo “eterno”, se instancian (crean) y se destruyen. Una vez que se haya instanciado un objeto puede recibir mensajes. Los objetos pueden instanciarse de forma estática o de forma dinámica (recordar estos conceptos de capítulos anteriores). Un objeto estático comienza su existencia una vez es declarado (instanciación de objetos estáticos), sin embargo, un objeto dinámico no comienza su existencia al ser declarado, sino al recibir un espacio de memoria (instanciación dinámica de objetos).

Los objetos “se declararán” como atributos de las clases, en las claúsulas var de los métodos o en la lista de parámetros de los métodos. El único objeto que debe ser “declarado” en el programa principal será el de la clase raíz de toda la jerarquía de clases (por cuestiones del lenguaje Pascal orientado a objetos). Los objetos estáticos existen durante la ejecución del programa. Los objetos dinámicos existen mientras no sean destruidos (liberación de la memoria del objeto), mediante la sentencia dispose.

Tras ser instanciado, un objeto consta de los atributos de la clase a la que pertenece, y puede recibir mensajes. Dicho objeto determinará a qué método de su clase corresponde dicho mensaje. Un objeto no podrá recibir mensajes correspondientes a métodos de una clase a la qe no pertenezca. Por ejemplo:

objeto 2

Clase

Una clase es una descripción de datos y operaciones que describen el comportamiento de cierto tipo de elementos. Por lo tanto, para que pueda haber objetos, antes deben haberse definido las clases a las que pertenecerán dichos objetos. No tiene sentido un objeto sin una clase, ya que el objeto tiene los atributos de la clase a la que pertenece, y recibe mensajes correspondientes a métodos de la clase a la que pertenece.

Una clase se divide en una parte pública y en una parte privada. El nombre de la clase debe ser único. Antes de continuar, recordar cómo era una librería (UNIT) en Pascal. Tiene una parte donde se declaran las cabeceras de los subprogramas (ineterface) que prodrán usarse desde los ficheros que usen la librería, y otra parte donde se implementan dichos subprogramas (implementation).

Parte pública

Describe a qué operaciones responden los objetos de una clase (cómo se comportan los objetos). En esta parte de la clase se declaran las cabeceras de los métodos de la clase que podrán ser “invocados” por los objetos. Es decir, si un método se declara en la parte pública, podrá ser “invocado” por un objeto de dicha clase, de lo contrario no podrá ser “invocado” por un objeto. Es la parte “visible” de la clase, la interfaz de la clase.

Parte privada

Describe los datos de la clase y cómo las operaciones manipulan dichos datos. Esta parte de la clase es donde se oculta (encapsula) la información de la clase: datos e implementación de métodos declarados o no en la parte pública de la clase. Es una parte “no visible”, cada objeto de una determinada clase tiene sus atributos (datos) y sus métodos.

Abstracción

Podríamos definir la abstracción como la “acción de aislar mentalmente o considerar por separado las cualidades de un objeto, considerar un objeto en su esencia”. ¿Qué quiere decir esta definición? A través de la abstracción conseguimos extraer las cualidades principales sin detenernos en los detalles. Conseguimos a partir de un tema determinado, generalizar y obtener una visión global del tema. Cuando montamos un ordenador ensamblamos los componentes necesarios para construir el ordenador. Utilizamos una placa base, un disco duro, memoria, etc. Manejamos estos dispositivos a un nivel funcional. Es decir, abstraemos las funciones de cada dispositivo para trabajar con ellos. En ningún momento nos paramos a pensar cómo funcionan internamente o de cuántos condensadores y transistores está compuesto.

La abstracción es una herramienta muy potente en programación, pues reduce considerablemente el trabajo de implementación y aumenta la portabilidad del código. La programación orientada a objetos aporta elementos para abstraer el problema en dos sentidos:

Por un lado nos permite referirnos a objetos para representar la realidad, describiendo el problema en términos del problema en lugar de en términos de la solución. En un programa de gestión comercial, tendremos el objeto cliente o el objeto factura, que no son más que representaciones de otros objetos en el espacio del problema.
La clave de la programación orientada a objetos está en abstraer los métodos y los datos comunes a un conjunto de objetos y agruparlos en una clase. Gracias a este nivel de abstracción, añadir o eliminar un objeto nuevo supondrá muy poco esfuerzo.

Herencia

La herencia es un mecanismo exigido a cualquier lenguaje que pretenda ser orientado a objetos. Consideraremos la herencia como la transmisión de los métodos y atributos de una clase a otra. Gracias a la herencia se pueden establecer jerarquías entre clases. Establecer una jerarquía es un proceso subjetivo, que depende del programador y de los matices de apreciación de cada uno.

La herencia nos permite definir una jerarquía en la que existirán clases padre y clases hijo, pudiéndo ser una clase padre de otra clase, e hijo de otra clase a la vez. No deben definirse jerarquías de herencia en la que una clase sea padre e hijo de la misma clase. Existen 2 tipos de herencia: La herencia simple y la herencia múltiple. En la herencia simple una clase sólo puede tener una clase padre, en la herencia múltiple, una clase puede tener más de una clase padre. Por ejemplo:

En la siguiente figura se muestra una jerarquía de clases, con herencia simple de 2 clases vertebrado e invertebrado, que heredan de la clase serVivo.

herencia 1

En la siguiente figura se muestra una jerarquía de clases, con herencia múltiple de 1 clase hispano-argentino, que hereda de las clases español y argentino.

herencia 2

Cuando una clase hereda de otra, la clase padre “transmite” todos sus atributos y métodos a la clase hija.

Clase abstracta

Al construir una jerarquía de herencia puede darse el caso de que ciertas operaciones de la clase padre no pueden ser completadas por diferentes motivos, o que dichas operaciones se hagan de una forma diferente en cada clase hija. Por ejemplo, en una clase serVivo existirá un método comer, pero ese método será diferente en una clase hija perro (los perros comen con la boca), y en una clase hija pájaro, ya que los pájaros comen con el pico (salvo una mutación extraña…). Por lo tanto, una clase será abstracta si tiene algún método diferido, es decir, declarado pero no definido. No podrá instanciarse ningún objeto de una clase abstracta.

Redefinición de métodos

Una clase hija de una clase abstracta puede redefinir los métodos diferidos de su clase padre abstracta.

Nota: Una clase hija de una clase abstracta no tiene porqué redefinir los métodos diferidos de la clase padre, podría ser una clase nieta de la clase abstracta la que hiciera la redefinición. Lo que es obligatorio es redefinir un método diferido en alguna clase descendiente de una clase abstracta.

El método debe redefinirse con los mismos parámetros que el método diferido, de lo contrario se estaría definiendo otro método (sobrecarga). Es aquí donde aparece el concepto de super. Esta palabra reservada hace referencia a un método perteneciente a la clase padre de la clase del objeto en cuestión.

Polimorfismo

Esta característica permite definir distintos comportamientos para un método dependiendo de la clase sobre la que se realize la implementación. En todo momento tenemos un único medio de acceso, sin embargo se podrá acceder a métodos distintos.

Veamos el siguiente ejemplo, en el que se define una clase forma de la que se heredan las clases círculo y cuadrado.

polimorfismo 1

La clase forma define los métodos dibujar y borrar. En la definición de estos métodos se implementará el código común a todos los objetos de la clase. Sin embargo cuando definamos las clases hijas, círculo y cuadrado, será necesario modificar estos métodos para adaptarlos a las nuevas subclases. El método de la clase padre implementa aquellas acciones comunes. Las clases hijas añaden las operaciones particulares que necesiten. Cuando utilicemos los métodos de la clase forma no tendremos que hacer distinción entre cuadrados y círculos. Gracias al polimorfismo se ejecutará el método adecuado en función de la subclase a la que pertenezca el objeto.

En la declaración de una clase estamos definiendo el conjunto de métodos y campos que son accesibles desde fuera de una clase o lo que a menudo se denomina contrato de la clase. Este contrato determina cual va a ser la funcionalidad de la clase. Pero cuando extendemos una clase para crear otra estamos ampliando este contrato añadiendo mas funcionalidades. Por tanto cuando creamos esa nueva clase hacemos uso de dos mecanismos. Por un lado la herencia para reutilizar las partes comunes de la super-clase. Y por otro el polimorfismo, es decir el cambio en la forma en la que se implementa el contrato de la superclase. Como vemos al escribir una subclase podemos sobreescribir el contrato añadiendo nuevas funcionalidades, pero no cambiarlo.

A la hora de implementar el polimorfismo tendremos dos mecanismos de los que echar mano para sobreescribir una clase: reemplazar la implementación de un método o añadir funcionalidades a un método.

Continuando con el ejemplo de Publicacion, habíamos definido dos subclases Libro y Revista, vamos a ver cómo se implementan estas subclases:

polimorfismo 2

La superclase Publicacion implementaba un método llamado toString() que devolvía una cadena compuesta en base al identificador, título y autor de una publicación. Al sobreescribir el método se utiliza el código de la superclase y se añade a la cadena el número de páginas.

Veamos ahora como afecta la sobrescritura a la subclase Revista:

polimorfismo 3

En este caso vemos como se reemplaza completamente la implementación dada por la super-clase para el método toString(). Normalmente las revistas no son firmadas por un único autor, por tanto es un campo que no vamos a utilizar. Es necesario reescribir completamente el método y añadirle la periodicidad de la revista, campo que sí es importante en este tipo de publicaciones.

Ventajas de la POO

Vamos a ver las ventajas más importantes de la programación orientada a objetos:

  • Reusabilidad. Cuando hemos diseñado adecuadamente las clases, se pueden usar en distintas partes del programa y en numerosos proyectos.
  • Mantenibilidad. Debido a las sencillez para abstraer el problema, los programas orientados a objetos son más sencillos de leer y comprender, pues nos permiten ocultar detalles de implementación dejando visibles sólo aquellos detalles más relevantes.
  • Modificabilidad. La facilidad de añadir, suprimir o modificar nuevos objetos nos permite hacer modificaciones de una forma muy sencilla.
  • Fiabilidad. Al dividir el problema en partes más pequeñas podemos probarlas de manera independiente y aislar mucho más fácilmente los posibles errores que puedan surgir.

Desventajas de la POO

La programación orientada a objetos presenta también algunas desventajas como pueden ser:

  • Cambio en la forma de pensar de la programación tradicional a la orientada a objetos.
  • La ejecución de programas orientados a objetos es más lenta.
  • La necesidad de utilizar bibliotecas de clases obliga a su aprendizaje y entrenamiento.

Lenguajes de Programación OO

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 “objetos” 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.


Para realizar el trabajo revise el siguiente enlace:

Amplia tus conocimientos ingresando a los siguientes enlaces: 


TAREA

Explica con tus propias palabras qué es la programación orientada a objetos y para qué sirve.

Realiza un cuadro comparativo sobre Visual Basic y Microsoft Access

No hay comentarios:

Publicar un comentario

Publicaciones Populares

Con la tecnología de Blogger.

Publicaciones recientes

Cursos - Mario Cobo Barona 2020