SEMANA 12 A 17

PROGRAMACIÓN MODULAR

La programación modular se define como aquélla que afronta la solución de un problema descomponiéndolo en subproblemas más simples, y estos a su vez se resuelven mediante un algoritmo o módulo más o menos independiente del resto.

Ventajas de la programación modular
  • Facilita la comprensión del problema y su resolución escalonada

  • Aumenta la claridad y legibilidad de los programas

  • Permite que varios programadores trabajen en el mismo problema a la vez, puesto que cada uno puede trabajar en uno o varios módulos de manera bastante independiente

  • Reduce el tiempo de desarrollo, reutilizando módulos previamente desarrollados Mejora la fiabilidad de los programas, porque es más sencillo diseñar y depurar módulos pequeños que programas enormes Facilita el mantenimiento de los programas
Resumiendo, es posible afirmar sin temor a fallar que es virtualmente imposible escribir un programa de grandes dimensiones si no procedemos a dividirlo en fragmentos más pequeños, abarcables por nuestro pobre intelecto humano.

Hay que tener muy presente que la programación modular y la estructurada no son técnicas incompatibles, sino más bien complementarias.

La mayoría de los programas que se desarrollan con lenguajes estructurados son, de hecho, estructurados y modulares al mismo tiempo.

Desarrollar programas de forma modular

Significa que pueden identificarse las principales tareas a realizar por el programa y que se pueden diseñar y probar procedimientos individuales para estas tareas. Por ejemplo:

¿Qué transacciones se le hacen a una cuenta de ahorros?

Transacciones:
  • Depósito (cheque y efectivo)

  • Intereses

  • Retiro

  • Estado de cuenta

  • Cambio de libreta

Tiempo de vida de los datos

Según el lugar donde son declaradas puede haber dos tipos de variables.



  • Globales : las variables permanecen activas durante todo el programa. Se crean al iniciarse éste y se destruyen de la memoria al finalizar. Pueden ser utilizadas en cualquier procedimiento o función.

  • Locales : las variables son creadas cuando el programa llega a la función o procedimiento en la que están definidas. Al finalizar la función o el procedimiento, desaparecen de la memoria
Si dos variables, una global y una local, tienen el mismo nombre, la local prevalecerá sobre la global dentro del módulo en que ha sido declarada.

Dos variables locales pueden tener el mismo nombre siempre que estén declaradas en funciones o procedimientos diferentes.


Parámetros Formales

Es un tipo especial de variables en un procedimiento a los que se pueden pasar valores desde el exterior del procedimiento. Se declaran en la cabecera del procedimiento. Ejemplos:

1. Uso de variables globales en procedimientos o funciones.

Algoritmo global var x:entero

Inicio

x ¬0cambiar

escribir (x)

fin

Módulo cambiar

inicio

x ¬1

fin


La variable X está definida como global, por lo tanto la salida será 1.

2. Uso de variables locales.

Algoritmo local

var x:entero

Inicio

x ¬0

cambiar

escribir (x)

fin

Módulo cambiar

var x:entero

inicio

x ¬1

fin

Como x es local, no tiene efecto en el programa, por lo tanto la salida será 0.

3. Variables locales y globales.

Programa en Borland C++

/* Variables globales y locales. */

#include stdio.h int num1=1;

main()

/* Escribe dos cifras */

{

int num2=10;

printf("%d\n",num1);

printf("%d\n",num2);

}


Parámetros por Valor

Son los parámetros que pueden recibir valores pero que no pueden devolverlos.

Es una variable global que se conecta con una variable local mediante el envío de su valor, después de lo cual ya no hay relación. Lo que le sucede a la variable local no afectará a la global.

Cuando un parámetro actual se pasa por valor, el subprograma hace una copia del valor de éste en una posición de memoria idéntica en tamaño pero distinta en ubicación a la del parámetro actual y la asigna al parámetro formal correspondiente. Como el subprograma trabaja a partir de sus parámetros formales, si durante la ejecución se modifica el valor de un parámetro formal correspondiente a un paso por valor, el contenido de la posición de memoria del parámetro actual no se verá alterado. Ejemplo:

Algoritmo parámetro valor

var x: entero

Inicio

x = 0

cambiar(x)

escribir(X)

Fin


Módulo cambiar (y:entero)

inicio

y ¬1

fin

Salida 0


Parámetros por Variable

Son los que pueden recibir y devolver valores. Son variables globales que se conectan con una local a través de su contenido; al establecerse dicha conexión las variables se convierten en sinónimos, lo que afecte a la variable local le sucederá a la variable global. Ejemplo:

Algoritmo parámetro variable

var x:entero

Inicio

x ¬0

cambiar (x)

escribir (x)

Fin


Módulo cambiar (var y:entero)

inicio

y ¬1

fin

Salida: x =1


PROCEDIMIENTOS Son subprogramas, es decir, módulos que forman parte de un programa y realizan una tarea específica. Un procedimiento puede tener sus propias variables que se declaran en la sección var del propio procedimiento. Estas se llaman variables locales. La casilla de memoria para estas variables se crea cada vez que el procedimiento es llamado y se borran al salir del mismo. Asi, las variables locales para un procedimiento sólo se pueden usar en el cuerpo del procedimiento y no en el cuerpo principal del programa.

FUNCIONES La función es una estructura autónoma similar a los módulos. La diferencia radica en que la función se usa para devolver un solo valor de un tipo de dato simple a su punto de referencia. La función se relaciona especificando su nombre en una expresión, como si fuera una variable ordinaria de tipo simple. Las funciones se dividen en estándares y definidas por el usuario.
  • Estándar : Son funciones proporcionadas por cualquier lenguaje de programación de alto nivel, y se dividen en aritméticas y alfabéticas.
  • Definidas por el usuario : son funciones que puede definirlas el programador con el propósito de ejecutar alguna función específica, y que por lo general se usan cuando se trata de hacer algún cálculo que será requerido en varias ocasiones en la parte principal del algoritmo. Ejemplos:

Función factorial (n:entero):

entero var i,

factorial:entero

inicio

si n <=1 entonces

factorial <-- 1

sino

factorial <-- 1

desde i = 1 hasta n hacer

factorial <-- factorial * 1

fin_desde

fin_si fin

Evaluar la función f = x! / (y!(x-y)!)

Algoritmo hallarf

var x,y:entero

f:real

inicio

leer (x,y)

f <-- factorial (x)/(factorial (y)* factorial (x-y))

escribir ("El valor de f es:", f)

fin


Semejanzas entre Procedimientos y Funciones.

La definición de ambos aparece en la sección de subprogramas de la parte de declaraciones de un programa y en ambos casos consiste en una cabecera, una parte de declaraciones una parte de instrucciones.

Ambos son unidades de programa independientes. Los parámetros, constantes y variables declarados en una función o procedimiento son locales a la función o al procedimiento, solamente son accesibles dentro del subprograma.

Cuando se llama a una función o a un procedimiento, el número de los parámetros reales debe ser el mismo que el número de los parámetros formales y los tipos de los parámetros reales deben coincidir con los tipos de los correspondientes parámetros formales, con una excepción: se puede asociar un parámetro real de tipo entero con un parámetro formal por valor de tipo real.

Diferencias entre Procedimientos y Funciones.

Mientras que a un procedimiento se le llama mediante una instrucción de llamada a procedimiento, a una función se la llama usando su nombre en una expresión.

Puesto que se debe asociar un valor al número de una función, también se le debe asociar un tipo. Por tanto, la cabecera de una función debe incluir un identificador de tipo que especifique el tipo del resultado. Sin embargo, no se asocia ningún valor con el nombre de un procedimiento y, por tanto, tampoco ningún tipo.

Las funciones normalmente devuelven un único valor a la unidad de programa que la llama. Los procedimientos suelen devolver más de un valor, o pueden no devolver ninguno si solamente realizan alguna tarea, como una operación de salida.

En los procedimientos, los valores se devuelven a través de parámetros por variable, pero el valor de una función se devuelve mediante la asignación al nombre de la función de dicho valor en la parte de instrucciones de la definición de la función

PROGRAMACION ORIENTADA A OBJETOS
La programación orientada a objetos (POO) es una técnica o estilo de programación que utiliza objetos como bloque esencial de construcción.
Un programa orientado a objetos es una colección de clases. Necesita de una función principal que cree objetos y comience la ejecución mediante la invocación de sus funciones o métodos.

En primer lugar, se crean los objetos.

Segundo, los mensajes se envían desde unos objetos y se reciben en otros a medida que el programa se ejecuta.

Tercero, se borran los objetos cuando ya no son necesarios y se recupera la memoria ocupada por ellos.

Los objetos son tipos de datos abstractos (TDA) definidos por el programador. En realidad son unidades que contienen datos y funciones que operan sobre esos datos. A los objetos también se les conoce como instancias de clase.

A los elementos de un objeto se les conoce como miembros (datos miembros yfunciones miembro).

Ejemplos de objetosventanas, iconos, arreglos, pilas, colas, árboles binarios, números complejos.

Los datos de un objetos están ocultos y solamente a través de sus funciones pueden ser accesados.

Todos los campos miembros y funciones están completamente en el interior del objeto y son ocultos desde el exterior, lo que significa que están encapsulados.

A las funciones de un objeto también se les conoce como métodos y a los datos como variables.

CARACTERISTICAS
  • Los diseñadores definen nuevas clases (o tipos) de objetos.

  • Los objetos poseen una serie de operaciones asociadas a ellos.

  • Las operaciones tienden a ser genéricas, es decir, operan sobre múltiples tipos de datos.

  • Las clases o tipos de objetos comparten componentes comunes mediante mecanismos de herencia.

Pero no hay un acuerdo aceptado por todo el mundo respecto a cuáles son las características que definen la POO, pero al menos todos concuerdan en estas tres:


Abstracción Un buen ejemplo de abstracción es el cuerpo humano, aunque el cuerpo es una unidad, está dividido en lo que conocemos por sistemas (el sistema respiratorio, el sistema linfático, cardiovascular, etc., etc.).

Estos sistemas, a su vez están compuestos por otros más pequeños: los órganos, y así sucesivamente. La abstracción nos permite dividir nuestro programa en distintos objetos que se agrupan para formar cosas más complejas.

Básicamente la abstracción es la capacidad de separar los elementos (al menos mentalmente) para poder verlos de forma singular. Como cuando describimos el cuerpo humano y decimos cabeza, brazo(s), pierna(s), etc.

Encapsulación: También conocida como ocultamiento .

La encapsulación se encarga de mantener ocultos los procesos internos que necesita para hacer lo que sea que haga, dándole al programador acceso sólo a lo que necesita . Esto da dos ventajas iniciales:
Lo que hace el usuario puede ser controlado internamente (incluso sus errores), evitando que todo colapse por una intervención indeseada.

La segunda ventaja es que, al hacer que la mayor parte del código esté oculto , puedes hacer cambios y/o mejoras sin que eso afecte el modo como los usuarios van a utilizar tu código. Sólo tienes que mantener igual la forma de acceder a él. Por cierto, estas puertas de acceso que se dan a los usuarios son lo que se conoce como interfaz .

Herencia: La herencia es la capacidad que tiene una clase de derivar las propiedades y métodos de otra. Por ejemplo: Decimos que una gallina es un ave ; esto quiere decir que las gallinas tienen características comunes con otras aves (pico, plumas, etc.), es decir que la gallina hereda las características comunes de todas las aves. Pero además, resulta que un ave es un animal , lo que significa que también comparte características comunes al caballo, el perro, el hombre y cualquier otra cosa que pueda ser clasificada como animal.

La herencia nos permite, entre otras cosas, evitar tener que escribir el mismo código una y otra vez, puesto que al definir que una categoría pertenece a otra, automáticamente estamos atribuyéndoles las características generales de la primera, sin tener que definirlas de nuevo.
Polimorfismo:
El término de polimorfismo define la capacidad de que más de un objeto puedan crearse usando la misma clase de base para lograr dos conceptos de objetos diferentes, en este caso podemos citar el típico ejemplo de los teléfonos, los cuales se basan en un teléfono base, con la capacidad de hacer ring y tener un auricular, para luego obtener un teléfono digital, inalámbrico, con botonera de marcado y también, tomando la misma base, construir un teléfono analógico y con disco de marcado.


Ventajas de la programación orientada a objetos


  • Flexibilidad. Si partimos del hecho que mediante la definición de clases establecemos módulos independientes, a partir de los cuales podemos definir nuevas clases, entonces podemos pensar en estos módulos como bloques con los cuales podemos construir diferentes programas.

  • Reusabilidad. Una vez que hemos definido a la entidad persona para utilizarla en una aplicación de negocios, por mencionar un ejemplo, y deseamos construir a continuación una aplicación, digamos de deportes, en donde requerimos definir a la misma entidad persona, no es deseable volver a escribir la definición para la entidad persona. Por medio de la reusabilidad podemos utilizar una clase definida previamente en las aplicaciones que nos sea conveniente. Es claro que la flexibilidad con la que se definió la clase va a ser fundamental para su reutilización.

  • Mantenibilidad. Las clases que conforman una aplicación, vistas como módulos independientes entre sí, son fáciles de mantener sin afectar a los demás componentes de la aplicación.

  • Extensibilidad. Gracias a la modularidad y a la herencia una aplicación diseñada bajo el paradigma de la orientación a objetos puede ser fácilmente extensible para cubrir necesidades de crecimiento de la aplicación.

Desventajas de la POO

A pesar de que las ventajas de la programación orientada a objetos superan a las limitaciones de la misma, podemos encontrar algunas características no deseables en ésta.



  • Limitaciones para el programador. No obstante que la tecnología orientada a objetos no es nueva, un gran porcentaje de programadores no están familiarizados con los conceptos de dicha tecnología. En otras palabras, la lógica de la programación estructurada sigue siendo predominante en la mayoría de los desarrolladores de software, después de haber revisado de forma breve los principios de la programación orientada a objetos, nos es claro que en ésta se requiere una lógica de pensamiento totalmente diferente a la lógica comúnmente utilizada para la programación estructurada.

  • Tamaño excesivo en las aplicaciones resultantes. La gran mayoría de los equipos de computo cuentan con capacidades tanto de almacenamiento como de memoria lo suficientemente buena como para ejecutar la mayoría de las aplicaciones que puedan desarrollarse con la tecnología orientada a objetos, sin embargo existen casos en los que lo anterior no se cumple.

  • Una de las desventajas de la programación orientada a objetos es que cuando se heredan clases a partir de clases existentes se heredan de forma implícita todos los miembros de dicha clase aun cuando no todos se necesiten, lo que produce aplicaciones muy grandes que no siempre encajan en los sistemas con los que se disponga.

  • Velocidad de ejecución. Esto tiene que ver, en cierto modo, con el punto anterior, unaaplicación innecesariamente pesada en muchas ocasiones es más lenta de ejecutar que una aplicación conformada únicamente por los módulos necesarios.

QUE ES UN OBJETO Objeto es el concepto clave de la Programación Orientada a Objetos, la idea de objeto es similar a la del mundo real, un objeto puede ser una silla, una mesa. Tu perro es un objeto.


Los objetos tienen dos características: Un estado y un comportamiento. Fijate que por ejemplo tu perro tiene un estado: nombre, color, raza, altura, etc. y un comportamiento: ladrar, cavar pozo, llorar, dormir, comer, etc.


Un auto es un objeto. También tiene un estado: Cantidad de puertas, color, tamaño, etc. y un comportamiento: acelerar, frenar, subir cambio, bajar cambio, girar izq., girar der., etc.


Entonces podemos definir a un objeto en POO, como un conjunto de datos y funciones relacionadas. A las funciones de los objetos, tales como acelerar en el caso del auto, de aquí en más las llamaremos métodos, a los datos los llamaremos atributos.


Los objetos en programación, son modelados observando objetos del mundo real, por ejemplo implementamos el objeto "perro" dentro de nuestro programa definiendo los atributos y métodos del objeto perro real.

Un ejemplo mas complicado de un objeto podría ser el siguiente:

Objeto: Cuenta bancaria

Atributos: tipo, titular, saldo.

Métodos: Depositar, Extraer.

Aquí se ve la necesidad de que el atributo "saldo" sea solo accesible a través de los métodos "Depositar" y "Extraer" por una cuestión de seguridad, encapsulamiento y para evitar comportamientos indeseados.

QUE ES UNA CLASE Una clase es algo abstracto que define la "forma" del objeto, se podría hablar de la clase como el molde de los objetos.


En el mundo real existen objetos del mismo tipo, por ejemplo tu bicicleta es solo una mas de todas las bicicletas del mundo. Entonces diríamos que tu bicicleta es una instancia de la clase "Bicicleta". Todas las bicicletas tienen los atributos: color, cantidad de cambios, dueño y métodos: acelerar, frenar, pasar cambio, volver cambio.

Las fabricas de bicicletas utilizan moldes para producir sus productos en serie, de la misma forma en POO utilizaremos la clase bicicleta (molde) para producir sus instancias (objetos).

Los objetos son instancias de clases. Ejemplo: Podríamos tener la clase Perro, una instancia de esta clase podría ser el objeto perro llamado "Chicho". La clase Perro especificaría que todos los perros tendrían un nombre, color de pelo, una altura. Mientras que la instancia "Chicho" contendrá valores específicos para cada uno de estos atributos.

Podemos definir a una clase como una plantilla que define variables y métodos comunes para todos los objetos de cierto tipo.

Existe un lenguaje de modelado llamado UML mediante el cual podemos representar gráficamente todo un sistema orientado a objetos utilizando rectángulos, líneas y otro tipo de símbolos gráficos.

MENSAJES Un objeto por si solo no tiene mucho significado. Ejemplo: el objeto "bicicleta" no tiene mucho sentido si no interactúa con un objeto "persona" que pedalee.

La interacción entre objetos se produce mediante mensajes. Los mensajes son llamados a métodos de un objeto en particular.

Podemos decir que el objeto persona envía el mensaje "girar a la izquierda" al objeto bicicleta.

Los mensajes pueden contener parámetros. Por ejemplo teniendo un método en la clase bicicleta llamado "Girar" que recibe como parámetro la dirección (derecha o izquierda).

Un mensaje esta compuesto por los siguientes tres elementos:

El objeto destino, hacia el cual el mensaje es enviado
El nombre del método a llamar
Los parámetros solicitados por el método


Beneficios de los mensajes Como todo lo que un objeto puede hacer esta expresado mediante métodos, el envío de mensajes soporta todas las posibles interacciones entre objetos.

Para enviar o recibir mensajes, los objetos no necesitan formar parte del mismo proceso, ni siquiera de la misma máquina.


DIRIJASE A LA SIGUIENTE URL: http://d.scribd.com/docs/26qa9w41d4jir6du417f.pdf

En esta página usted verá la estructura de la programación orientada a objetos mediante un ejemplo el cuál está desarrollado en Visual basic.Net.

No hay comentarios:

Publicar un comentario