Machote Trabajos2PENDIENTE

31
1 INSTITUTO TECNOLOGICO SUPERIOR P´UREPECHA INGENIERIA EN SISTEMAS COMPUTACIONALES MATERIA: PROGRAMACION LOGICA Y FUNCIONAL “INVESTIGACION” PROFESOR: ING. DANIEL PEÑA LOPEZ ALUMNO: LUIS ANTONIO JAIMES CUEVAS SEMESTRE: OCTAVO

description

programacion logica y funcional

Transcript of Machote Trabajos2PENDIENTE

Page 1: Machote Trabajos2PENDIENTE

1

INSTITUTO TECNOLOGICO SUPERIOR P´UREPECHA

INGENIERIA EN SISTEMAS COMPUTACIONALES

MATERIA:

PROGRAMACION LOGICA Y FUNCIONAL

“INVESTIGACION”

PROFESOR:

ING. DANIEL PEÑA LOPEZ

ALUMNO:

LUIS ANTONIO JAIMES CUEVAS

SEMESTRE:

OCTAVO

CHERAN, MICH. MARZO 2016

Page 2: Machote Trabajos2PENDIENTE

2

INTRODUCCION

Es importante que conozcamos los orígenes del PSP y cómo, en conjunto con TSP y CMMI, forman una disciplina organizacional que te permitirá realizar software en un menor tiempo, optimizar costos y sobre todo con calidad.

El CMMI es un producto desarrollado por el Software Engineering Institute (SEI) y se basa en la mejora continua de los procesos.

Pretende incrementar la capacidad administrativa de las organizaciones para controlar los costos, tiempos y productividad en general.

Por otra parte, el objetivo de TSP es adiestrar a los ingenieros de software en el desarrollo de equipos y llegar en menos tiempo a niveles altos de desempeño por medio de la práctica del proceso personal del software de cada uno de sus integrantes el cual nace como un acercamiento estructurado y disciplinado para el desarrollo de software proporcionando al ingeniero de software un conjunto de formularios, guías y estándares que les ayudan a estimar y planificar su trabajo.

Trabajando todo en conjunto y, de manera efectiva, es muy factible poder cumplir con todos los niveles de CMMI.

Es importante entender que PSP es una disciplina personal, sin embargo en conjunto con TSP y CMMI se pueden lograr varios beneficios para la organización.

Page 3: Machote Trabajos2PENDIENTE

3

1.3 DEFINICION DE FUNCIONES

EL concepto de función tiene su origen en el término latino functĭo. La palabra puede ser utilizada en diversos ámbitos y con distintos significados.

Por otra parte, una función matemática es la correspondencia o relación f de los elementos de un conjunto A con los elementos de un conjunto B. Una función cumple con la condición de existencia (todos los elementos de A están relacionados con los elementos de B) y con la condición de unicidad (cada elemento de A está relacionado con un único elemento de B).

En la informática, más precisamente en los lenguajes de programación, una función es un tipo de subalgoritmo que describe una secuencia de órdenes. Estas órdenes cumplen con una tarea específica de una aplicación más grande.

Las funciones se crearon para evitar tener que repetir constantemente fragmentos de código. Una función podría considerarse como una variable que encierra código dentro de sí. Por lo tanto cuando accedemos a dicha variable (la función) en realidad lo que estamos es diciendo al programa que ejecute un determinado código predefinido anteriormente.

Todos los lenguajes de programación tienen algunos elementos de formación primitivos para la descripción de los datos y de los procesos o transformaciones aplicadas a estos datos (tal como la suma de dos números o la selección de un elemento que forma parte de una colección). Estos elementos primitivos son definidos por reglas sintácticas y semánticas que describen su estructura y significado respectivamente.

FORTRAN

Las funciones en Fortran son bastante similares a las funciones matemáticas: ambas toman un conjunto de variables de entrada (parámetros) y regresan un valor de algún tipo. Al inicio de la sección se comento de los subprogramas definidas por el usuario, pero Fortran 77 tiene también funciones incorporadas.

Un ejemplo simple muestra cómo usar una función:

x = cos(pi/3.0)

En este caso la función coseno cos de 60º, asignará a la variable x el valor de 0.5 (si pi ha sido definido correctamente; Fortran 77 no tiene constantes

Page 4: Machote Trabajos2PENDIENTE

4

incorporadas). Hay varias funciones incorporadas en Fortran 77. Algunas de las más comunes son:

abs     valor absolutomin     valor mínimomax     valor máximosqrt    raíz cuadradasin     senocos     cosenotan     tangenteatan    arco tangenteexp     exponencial (natural)log     logaritmo (natural)

En general, una función siempre tiene un tipo. Varias de las funciones incorporadas mencionadas anteriormente son sin embargo genéricas. Por lo tanto en el ejemplo anterior pi y x podrían ser del tipo real o del tipo double precisión. El compilador revisará los tipos y usará la versión correcta de la función cos (real o double precisión). Desafortunadamente, Fortran no es un lenguaje polimórfico, por lo que en general, el programador debe hacer coincidir los tipos de las variables y las funciones.

Se revisa a continuación como implementar las funciones escritas por el usuario. Supongamos el siguiente problema: un meteorólogo ha estudiado los niveles de precipitación en el área de una bahía y ha obtenido un modelo (función) ll (m,t) donde ll es la cantidad de lluvia, m es el mes, y t es un parámetro escalar que depende de la localidad. Dada la fórmula para ll y el valor de t, calcular la precipitación anual.

La forma obvia de resolver el problema es escribir un ciclo que corra sobre todos los meses y sume los valores de ll. Como el cálculo del valor de ll es un subproblema independiente, es conveniente implementarlo como una función. El siguiente programa principal puede ser usado:

program lluviareal r, t, sumainteger mread (*,*) tsuma = 0.0do m = 1, 12suma = suma + ll(m, t)end dowrite (*,*) 'La precipitación Anual es ', suma, 'pulgadas'stopend

__________________________________________________________________

C

Page 5: Machote Trabajos2PENDIENTE

5

Una función es un fragmento de código que realiza una tarea bien definida. Por ejemplo, la función printf imprime por la salida estándar los argumentos que le pasamos. Al igual que esta función, existen otras funciones que realizan diversas tareas ya definidas en el estándar ANSI C y que pueden ser utilizadas por el programador. Este tipo de funciones predefinidas son denominadas funciones de biblioteca. Sin embargo, cada programador puede definir sus propias funciones de acuerdo a sus necesidades. Las funciones que define el programador son conocidas como funciones de usuario.

La utilización de funciones nos permite dividir un programa extenso en pequeños segmentos que realizan tareas concretas. Probablemente, dentro de un mismo programa se realicen  las mismas tareas varias veces, lo que se facilita mediante la utilización de funciones. . Sin embargo, es probable que ciertas funciones no sean reutilizables, pero al usarlas se mejora la legibilidad del programa.

Con el propósito de permitir un manejo eficiente de los datos, las funciones en C no se pueden anidar. En otras palabras, una función no se puede declarar dentro de otra función , por lo que todas las funciones son globales o externas, lo que hace que puedan llamarse desde cualquier parte de un programa.

Cuando se accede a una función desde un determinado punto del programa, se le puede pasar información mediante unos identificadores especiales conocidos como argumentos (también denominados parámetros). Una vez que la función procesa esta información, devuelve un valor mediante la instrucción return.

La estructura general de una función en C es la siguiente:

tipo_de_retorno nombre_de_la_función (lista_de_parámetros)

{

cuerpo_de_la_función

return expresión

}

Donde:

• tipo_de_retorno: es el tipo del valor devuelto por la función, o, en caso de que la función no devuelva valor alguno, la palabra reservada void.

• nombre_de_la_función: es el nombre o identificador asignado a la función.

• lista_de_parámetros: es la lista de declaración de los parámetros que son pasados a la función. Éstos se separan por comas. Debemos tener en cuenta que pueden existir funciones que no utilicen parámetros.

• cuerpo_de_la_función: está compuesto por un conjunto de sentencias que llevan a cabo la tarea específica para la cual ha sido creada la función.

Page 6: Machote Trabajos2PENDIENTE

6

• return expresión: mediante la palabra reservada return, se devuelve el valor de la función, en este caso representado por expresión__________________________________________________________________

C++Una función es un conjunto de líneas de código que realizan una tarea específica y puede retornar un valor. Las funciones pueden tomar parámetros que modifiquen su funcionamiento. Las funciones son utilizadas para descomponer grandes problemas en tareas simples y para implementar operaciones que son comúnmente utilizadas durante un programa y de esta manera reducir la cantidad de código. Cuando una función es invocada se le pasa el control a la misma, una vez que esta finalizó con su tarea el control es devuelto al punto desde el cual la función fue llamada.

<tipo> [clase::] <nombre> ( [Parámetros] )

{

cuerpo;

}

Ejemplo de una función

Para comenzar, vamos a considerar el caso en el cual se desea crear la función cuadrado(), que deberá devolver el cuadrado de un número real (de punto flotante), es decir, cuadrado() aceptará números de punto flotante y regresará una respuesta como número flotante.

Nota: aunque para la función que veremos el tipo de retorno coincide con el tipo de parámetro pasado, algunas veces las cosas pueden cambiar, es decir, no es obligatorio que una función reciba un parámetro de un tipo y que tenga que regresar una respuesta de dicho tipo.

// regresar el cuadrado de un número

double Cuadrado(double n)

{

return n*n;

}

__________________________________________________________________

JAVA

Page 7: Machote Trabajos2PENDIENTE

7

En Java una función es un modulo de un programa separado del cuerpo principal, que realiza una tarea específica y que puede regresar un valor a la parte principal del programa u otra función o procedimiento que la invoque.

La forma general de una función es:

tipodatoregresa Nom_fun(parametros)

{ cuerpo de instrucciones;

intruccion return;

}

El tipo especifica el tipo de valor que la función regresara utilizando la instrucción return.

Si no se especifica un tipo se asume de default que el tipo regresado es int.

La lista de parámetros formales es una lista de variables separadas por comas (,) que almacenaran los valores que reciba la función, estas variables actúan como locales dentro del cuerpo de la función.

Aunque no se ocupen parámetros los paréntesis son requeridos.

La declaración de parámetros es la especificación de cada tipo de parámetro recibido.

INSTRUCCION RETURN

Dentro del cuerpo de la función deber haber una instrucción return cuando menos, para regresar el valor, esta instrucción permite regresar datos.

Prog.java ejemplo:

import java.io.*; import javax.servlet.*;import javax.servlet.http.*;public class prog26 extends HttpServlet{ public void doPost (HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException{ int x=10;x = funcion1(x,20);PrintWriter pagina;response.setContentType("text/html");pagina = response.getWriter();pagina.println("<HTML>");pagina.println("x="+x);

Page 8: Machote Trabajos2PENDIENTE

8

pagina.println("</HTML>");pagina.close();}; // termina dopostpublic int funcion1(int a, int b){return a+b;};

public void destroy(){super.destroy();};

}// termina class

1.4 DISCIPLINA DE TIPOS

 DISCIPLINA: Es la coordinación de actitudes con las cuales se instruye para desarrollar habilidades, o para seguir un determinado código de conducta u "orden".

En los lenguajes de programación con disciplina de tipos, cada tipo representa una colección de valores (datos) similares. Una función cuyo tipo  sea A1 -> ... An -> espera n parámetros con tipos A1, ... An y devuelve un resultado de tipo R.  El conocer los tipos de las funciones ayuda a documentar los programas y a evitar errores en tiempo de ejecución.

Disciplina estática de tipos: Los programas bien tipados se pueden reconocer en tiempo de compilación, un programa bien tipado se puede utilizar sin efectuar comprobaciones de tipo en tiempo de ejecución. Estando garantizado que no se producirán errores de tipo durante el cómputo.

La programación funcional es un paradigma de programación declarativa basado en la utilización de funciones aritméticas que no maneja datos mutables o de estado. Enfatiza la aplicación de funciones, en contraste con el estilo de programación imperativa, que enfatiza los cambios de estado. La programación funcional tiene sus raíces en el cálculo lambda, un sistema formal desarrollado en los 1930s para investigar la definición de función, la aplicación de las funciones y la recursión. Muchos lenguajes de programación funcionales pueden ser vistos como elaboraciones del cálculo lambda.

Los lenguajes imperativos de cuarta generación que les dicen, en donde el programador debe decirle al sistema, mediante instrucciones muy precisas, qué queremos que haga la máquina. Así, tenemos que ver esta serie de instrucciones

Page 9: Machote Trabajos2PENDIENTE

9

como un algoritmo, una especie de receta de cocina que se debe ejecutar rigurosamente para obtener los resultados deseados.

Para ello hay lenguajes como Pascal o C, el segundo quizás el más popular en el mundo, en donde la expresividad del lenguaje permite hacer muchísimas cosas.

Los lenguajes modernos deben contar con estructuras de datos dinámicas, que permiten, en muchos casos, una manera mucho más eficiente de hacer programas y de hacer que estos convivan unos con otros dentro del mismo sistema operativo.

Por ello mismo, cuando llegan alumnos que me dicen que programan en Visual Basic, o cualquier variedad de Basic les indico que eso no califica como lenguaje, sino como un “dialecto” de “la tierra primitiva”. Y no exagero. Basic en cualquier modalidad adolece de las estructuras dinámicas asociadas a los lenguajes modernos. Sí, es cierto que Visual Basic ha incorporado algunas ideas de esta naturaleza, pero el problema es que no son estándar, sino que dependen de cada implementación. Por ende, es probable que un programa escrito en Visual Basic sea prácticamente imposible de portar a otro Basic en otra máquina, para hablar de alguna de las deficiencias. Igualmente, la incorporación de apuntadores (o punteros, como suelen decirles en los libros españoles), es bastante primitiva y de difícil uso. Aún así, la popularidad del Basic es evidente porque permite generar prototipos rápidamente, aunque no se utilicen las mejores capacidades expresivas de otros lenguajes.

Otros lenguajes han sido desarrollados para hacer aplicaciones para la Internet, para páginas web y ahí hay cientos de lenguajes de todo género. Tenemos Java, creado por Sun Microsystems, que permite programar prácticamente en cualquier plataforma pues Mac, PC, Linux, o incluso sistemas en computadoras de alto desempeño. Para ello Sun escribió –para cada plataforma– un intérprete de java, que es una máquina virtual. El intérprete está escrito para una implementación única en cada sistema operativo y por ende los programas en Java son portables de una máquina a otra. Además, la cantidad de bibliotecas de funciones para todo género de aplicaciones es extraordinaria. Se cuentan por miles y hay para todas las necesidades. Java tiene sintaxis mezclada de C y Pascal, por lo que la curva de aprendizaje es menor. Además, funciona en un “sandbox”, una especie de caja cerrada en donde la aplicación corre, impidiendo que se puedan crear virus malignos. Es quizás una de las mejores herramientas para programar en la web.

Hay otros lenguajes, como PHP, que es un sistema para generar páginas dinámicas, es decir, páginas que cambian de acuerdo a las necesidades y peticiones de los usuarios. Por ejemplo, Amazon, la tienda virtual de libros, tiene un gran sistema de bases de datos y cada usuario ve cosas diferentes de acuerdo a las peticiones y búsquedas que hacen al sistema. PHP se encarga de presentar los resultados personalizados para cada usuario. Y aunque este sistema es muy robusto y además, se lleva muy bien con MySQL, un manejador de bases de datos escrito para la web, tiene el inconveniente de que es muy poco estricto con los tipos de datos.

Page 10: Machote Trabajos2PENDIENTE

10

Así, una variable entera puede recibir un dato de punto flotante o incluso como cadena de caracteres. Eso va contra la disciplina en programación pues da pie a muchísimos errores porque las variables intercambian su propiedad inicial de ser reales, enteras, de caracteres o de cadenas de caracteres. Es difícil “debugear”, es decir, depurar los programas en PHP por este simple hecho de que las variables cambian de tipo y van contra la disciplina en programación. Y aunque es un lenguaje con muchas aplicaciones interesantes, PHP no es un buen candidato para enseñar a nadie a programar.

1.5 TIPOS DE DATOS

En lenguajes de programación un tipo de dato es un atributo de una parte de los datos que indica al ordenador (y/o al programador) algo sobre la clase de datos sobre los que se va a procesar.

En un sentido amplio, un tipo de datos define un conjunto de valores y las operaciones sobre estos valores. Casi todos los lenguajes de programación explícitamente incluyen la notación del tipo de datos, aunque lenguajes diferentes pueden usar terminología diferente. La mayor parte de los lenguajes de programación permiten al programador definir tipos de datos adicionales, normalmente combinando múltiples elementos de otros tipos y definiendo las operaciones del nuevo tipo de dato. Por ejemplo, un programador puede crear un nuevo tipo de dato llamado "Persona" que especifica que el dato interpretado como Persona incluirá un nombre y una fecha de nacimiento.

Un tipo de dato entero en computación es un tipo de dato que puede representar un subconjunto finito de los números enteros. El número mayor que puede representar depende del tamaño del espacio usado por el dato y la posibilidad (o no) de representar números negativos. Los tipos de dato entero disponibles y su tamaño dependen del lenguaje de programación usado así como la arquitectura en cuestión. Por ejemplo, si para almacenar un número entero disponemos de 4 bytes de memoria tememos que:4 Bytes = 4x8 = 32 bits Con 32 bits se pueden representar 232=4294967296 valores: Sólo positivos: del 0 al 4294967295 Positivos y negativos: del -2147483648 al 2147483647

Tipos de datos en coma flotante Se usan para representar números con partes fraccionarias. Hay dos tipos de coma flotante: float y double. El primero reserva almacenamiento para un número de precisión simple de 4 bytes y el segundo lo hace para un numero de precisión doble de 8 bytes.Tipo:float4 Bytes (32 bits)double8 Bytes (64 bits)

Page 11: Machote Trabajos2PENDIENTE

11

Tipo de dato carácter (Char)Es cualquier signo tipográfico, puede ser una letra, un número, un signo de puntuación o un espacio. Este término se usa mucho en computación.Un valor de tipo carácter es cualquier carácter que se encuentre dentro del conjunto ASCII ampliado, el cual está formado por los 128 caracteres del ASCII más los 128 caracteres especiales que presenta, en este caso, IBM.

Los valores ordinales del código ASCII ampliado se encuentran en el rango de 0 a 255. Dichos valores pueden representarse escribiendo el carácter correspondiente encerrado entre comillas simples (apóstrofos).Así, podemos escribir:'A' < 'a‘Que significa: "El valor ordinal de A es menor que el de a" o "A está antes que a"Un valor de tipo carácter (char en inglés) se guarda en un byte de memoria.La única operación (además de las relacionales) que podemos hacer con caracteres es la concatenación concatenando dos caracteres, por ejemplo 'a' y 'X' obtendríamos la cadena "aX".

Tipo de dato lógico El tipo de dato lógico o booleano es en computación aquel que puede representar valores de lógica binaria, esto es, valores que representen falso o verdadero. Se utiliza normalmente en  programación, estadística, electrónica, matemáticas (Álgebra booleana), etc...Para generar un dato o valor lógico a partir de otros tipos de datos, típicamente, se emplean los operadores relacionales (u operadores de relación), por ejemplo: 0 es igual a falso y 1 es igual a verdadero(3>2)= 1 = verdadero(7>9)= 0 = falso

Palabra reservada una palabra reservada es una palabra que tiene un significado Gramatical especial para ese lenguaje y no puede ser utilizada como un identificador en ese lenguaje.

Por ejemplo, en SQL, un usuario no puede ser llamado "group", porque la palabra group es usada para indicar que un identificador se refiere a un grupo, no a un usuario. Al tratarse de una palabra clave su uso queda restringido.Ocasionalmente la especificación de un lenguaje de programación puede tener palabras reservadas que están previstas para un posible uso en futuras versiones. En Java const y goto son palabras reservadas — no tienen significado en Java, pero tampoco pueden ser usadas como identificadores. Al reservar los términos pueden ser implementados en futuras versiones de Java, si se desea, sin que el código fuente más antiguo escrito en Java deje de funcionar.

Page 12: Machote Trabajos2PENDIENTE

12

FORTRAN

Los tipos de datos permitidos son los siguientes:

Logical: Las variables lógicas solo pueden tener dos valores verdadero y falso.

Integer: Valores enteros guardados en 4 bytes. Se indican como números sin punto decimal: 1, 2, -3, 25, etc.

Real: Valores reales guardados en 4 bytes y con 8 cifras significativas. Se indican con punto decimal, y de ser necesario el exponente de la potencia de 10 después de una E: 1., -3.1416, 6.25E-10, etc.

Doublé: Valores reales de doble precisión guardados en 8 bytes y con 16 cifras significativas, también se denotan por real (8). Se indican con punto decimal y el exponente de la potencia de 10 después de una D: 1.D0, -3.1416D0, 6.25D-10, etc. Son muy útiles en cálculos numéricos largos, donde los errores de redondeo pueden hacer que las  ultimas 4 o 5 cifras significativas de un numero real sean basura.

Cuádruple: Valores reales de cuádruple precisión guardados en 16 bytes y con 32cifras significativas, también se denotan por real (16). Se indican con punto decimal y el exponente de la potencia de 10 después de una Q: 1.Q0, -3.1416Q0, 6.25Q-10, etc.

Complex: Dos valores reales formando un par y que en operaciones matemáticasSe tratan como la parte real e imaginaria de un numero complejo: (1.,-2.), (1.0E0,-2.0E0). También existen versiones de doble y cuádruple precisión.

Character: Variables que corresponden a cadenas de caracteres. Al declarar una variable de este tipo se debe especificar cuantos caracteres puede tener. Estas variables deben estar contenidas en comillas: ’hola’, ’abcdfe’, ’Me llamo Luis’, ’128.3’, etc.

__________________________________________________________________

C

Hay dos clases de tipos de datos: tipos fundamentales y tipos derivados.

Únicamente vamos a ver los tipos de datos fundamentales.

Tipo entero: representa números enteros con o sin signo, que estarán compuestos por los dígitos del 0 al 9, pudiendo ser precedidos por los signos + o -.Algunos ejemplo de datos enteros son: 0, 23, -176, -1, etc.

Page 13: Machote Trabajos2PENDIENTE

13

Tipo real: Se emplean para representar números reales (con decimales).

Para definir datos reales se antepone la palabra reservada float al identificador de la variable.

float identificador = valor;Por ejemplo: float numero1, numero2;float numero3 = 123.43;float numero3;

Tipo carácter: Este tipo de datos se emplea para representar un carácter perteneciente a un determinado código utilizado por el ordenador (normalmente el código ASCII).

Para representar este tipo de dato se antepone la palabra reservada char al identificador de la variable.

Char identificador = ‘valor’;

Una constante tipo char se representa como un solo carácter encerrado entre comillas simples.

Tipo cadena de caracteres: una cadena de caracteres es un número de caracteres consecutivos (incluso ninguno) encerrado entre unos delimitadores determinados, que en el lenguaje C son las comillas dobles.

Para definir variables de tipo cadena, estas se definen como vectores de caracteres, esto es, anteponiendo la palabra reservadachar al identificador de la variable, y después entre corchetes la longitud máxima de cadena.Char identificador[cantidad] = “ mensaje ”;

__________________________________________________________________

C++

Los tipos de datos que maneja C++ son:

•EnterosDentro de los enteros están los tipos: short, int, long, los cuales varían en rango de acuerdo al compilador que se utilice, siendo long rango mayor y short el de menor.

•FlotantesDentro de los flotantes C++ tiene los tipos: float, double y long double donde al igual que los enteros varía el rango de cada uno de acuerdo al compilador que se utilice. De igual forma el float es el de menor rango siendo long double el de rango mayor

•CaracteresSe utiliza el tipo char. Para representar un caracter en C++ se utilizan apóstrofes.Ejemplos: ‘a’, ‘b’ , ‘5’

Page 14: Machote Trabajos2PENDIENTE

14

Para representar una cadena de caracteres se utilizan las comillas.Ejemplo: “soy una cadena”

__________________________________________________________________

JAVA

Los tipos de datos primitivos que soporta Java son:

Tipo de dato

Representación

Tamaño (Bytes)

Rango de Valores Valor por

defecto

Clase Asociada

byte Numérico Entero con signo

1 -128 a 127 0 Byte

short Numérico Entero con signo

2 -32768 a 32767 0 Short

Int Numérico Entero con signo

4 -2147483648 a 2147483647

0 Integer

long Numérico Entero con signo

8 -9223372036854775808 a 9223372036854775807

0 Long

float Numérico en Coma flotante

de precisión simple Norma

IEEE 754

4  3.4x10-38 a  3.4x1038 0.0 Float

double Numérico en Coma flotante

de precisión doble Norma

IEEE 754

8  1.8x10-308 a  1.8x10308 0.0 Double

char Carácter Unicode 2 \u0000 a \uFFFF \u0000 Character

boolean Dato lógico - true ó false false Boolean

void - - - - Void

DIFERENTES TIPOS DE PARADIGMAS DE PROGRAMACIÓN

Un paradigma de programación es una propuesta tecnológica que es adoptada por una comunidad de programadores cuyo núcleo central es incuestionable en

Page 15: Machote Trabajos2PENDIENTE

15

cuanto a que unívocamente trata de resolver uno o varios problemas claramente delimitados. La resolución de estos problemas debe suponer consecuentemente un avance significativo en al menos un parámetro que afecte a la ingeniería de software.

Tiene una estrecha relación con la formalización de determinados lenguajes en su momento de definición. Un paradigma de programación está delimitado en el tiempo en cuanto a aceptación y uso ya que nuevos paradigmas aportan nuevas o mejores soluciones que la sustituyen parcial o totalmente.

Por ejemplo:

Probablemente el paradigma de programación que actualmente es el más usado a todos los niveles es la orientación a objeto. El núcleo central de este paradigma es la unión de datos y procesamiento en una entidad llamada "objeto", relacionable a su vez con otras entidades "objeto".

Tradicionalmente datos y procesamiento se han separado en áreas diferente del diseño y la implementación de software. Esto provocó que grandes desarrollos tuvieran problemas de fiabilidad, mantenimiento, adaptación a los cambios y escalabilidad. Con la orientación a objetos y características como el encapsulado, polimorfismo o la herencia se permitió un avance significativo en el desarrollo de software a cualquier escala de producción.

La orientación a objeto parece estar ligado en sus orígenes con lenguajes como Lisp y Simula aunque el primero que acuño el título de programación orientada a objetos fue Smaltalk

Tipos de paradigmas de programación

Programación Imperativa

La programación imperativa, en contraposición a la programación declarativa es un paradigma de programación que describe la programación en términos del estado del programa y sentencias que cambian dicho estado. Los programas imperativos son un conjunto de instrucciones que le indican al computador cómo realizar una tarea.

La implementación de hardware de la mayoría de computadores es imperativa; prácticamente todo el hardware de los computadores está diseñado para ejecutar código de máquina, que es nativo al computador, escrito en una forma imperativa.

Esto se debe a que el hardware de los computadores implementa el paradigma de las Máquinas de Turing. Desde esta perspectiva de bajo nivel, el estilo del

Page 16: Machote Trabajos2PENDIENTE

16

programa está definido por los contenidos de la memoria, y las sentencias son instrucciones en el lenguaje de máquina nativo del computador (por ejemplo el lenguaje ensamblador).

Los lenguajes imperativos de alto nivel usan variables y sentencias más complejas, pero aún siguen el mismo paradigma. Las recetas y las listas de revisión de procesos, a pesar de no ser programas de computadora, son también conceptos familiares similares en estilo a la programación imperativa; cada paso es una instrucción, y el mundo físico guarda el estado (Zoom).

Los primeros lenguajes imperativos fueron los lenguajes de máquina de los computadores originales. En estos lenguajes, las instrucciones fueron muy simples, lo cual hizo la implementación de hardware fácil, pero obstruyendo la creación de programas complejos. Fortran, cuyo desarrollo fue iniciado en 1954 por John Backus en IBM, fue el primer gran lenguaje de programación en superar los obstáculos presentados por el código de máquina en la creación de programas complejos.

Programación lógica

La programación lógica consiste en la aplicación del corpus de conocimiento sobre lógica para el diseño de lenguajes de programación; no debe confundirse con la disciplina de la lógica computacional.

La programación lógica es un tipo de paradigmas de programación dentro del paradigma de programación declarativa. El resto de los subparadigmas de programación dentro de la programación declarativa son: programación funcional, programación basada en restricciones, programas DSL (de dominio específico) e híbridos. La programación lógica gira en torno al concepto de predicado, o relación entre elementos. La programación funcional se basa en el concepto de función (que no es más que una evolución de los predicados), de corte más matemático.

Programación funcional

En ciencias de la computación, la programación funcional es un paradigma de programación declarativa basado en la utilización de funciones aritméticas que no maneja datos mutables o de estado. Enfatiza la aplicación de funciones, en contraste con el estilo de programación imperativa, que enfatiza los cambios de estado. La programación funcional tiene sus raíces en el cálculo lambda, un sistema formal desarrollado en los 1930s para investigar la definición de función, la aplicación de las funciones y la recursión. Muchos lenguajes de programación funcionales pueden ser vistos como elaboraciones del cálculo lambda.

Page 17: Machote Trabajos2PENDIENTE

17

Los lenguajes de programación funcional, especialmente los que son puramente funcionales, han sido enfatizados en el ambiente académico principalmente y no tanto en el desarrollo de software comercial. Sin embargo, lenguajes de programación importantes tales como Scheme, Erlang, Objective Caml y Haskel, han sido utilizados en aplicaciones comerciales e industriales por muchas organizaciones.

La programación funcional también es utilizada en la industria a través de lenguajes de dominio específico como R (estadística), Mathematica (matemáticas simbólicas), J y K (análisis financiero), F# en Microsoft.NET y XSLT (XML). Lenguajes de uso específico usados comúnmente como SQL y Lex/Yacc, utilizan algunos elementos de programación funcional, especialmente al procesar valores mutables. Las hojas de cálculo también pueden ser consideradas lenguajes de programación funcional.

La programación funcional también puede ser desarrollada en lenguajes que no están diseñados específicamente para la programación funcional. En el caso de Perl, por ejemplo, que es un lenguaje de programación imperativo, existe un libro que describe cómo aplicar conceptos de programación funcional. JavaScript, uno de los lenguajes más ampliamente utilizados en la actualidad, también incorpora capacidades de programación funcional.

Programación declarativa

La Programación Declarativa, es un paradigma de programación que está basado en el desarrollo de programas especificando o "declarando" un conjunto de condiciones, proposiciones, afirmaciones, restricciones, ecuaciones o transformaciones que describen el problema y detallan su solución. La solución es obtenida mediante mecanismos internos de control, sin especificar exactamente cómo encontrarla (tan sólo se le indica a la computadora que es lo que se desea obtener o que es lo que se está buscando). No existen asignaciones destructivas, y las variables son utilizadas con Transparencia referencial

Programación estructurada

La programación estructurada es una forma de escribir programas de ordenador (programación de computadora) de manera clara. Para ello utiliza únicamente tres estructuras: secuencia, selección e iteración; siendo innecesario el uso de la instrucción o instrucciones de transferencia incondicional (GOTO, EXIT FUNCTION, EXIT SUB o múltiples RETURN).

Page 18: Machote Trabajos2PENDIENTE

18

Programación dirigida por eventos

La programación dirigida por eventos es un paradigma de programación en el que tanto la estructura como la ejecución de los programas van determinados por los sucesos que ocurran en el sistema, definidos por el usuario o que ellos mismos provoquen.

Para entender la programación dirigida por eventos, podemos oponerla a lo que no es: mientras en la programación secuencial (o estructurada) es el programador el que define cuál va a ser el flujo del programa, en la programación dirigida por eventos será el propio usuario —o lo que sea que esté accionando el programa— el que dirija el flujo del programa. Aunque en la programación secuencial puede haber intervención de un agente externo al programa, estas intervenciones ocurrirán cuando el programador lo haya determinado, y no en cualquier momento como puede ser en el caso de la programación dirigida por eventos.

El creador de un programa dirigido por eventos debe definir los eventos que manejarán su programa y las acciones que se realizarán al producirse cada uno de ellos, lo que se conoce como el administrador de evento. Los eventos soportados estarán determinados por el lenguaje de programación utilizado, por el sistema operativo e incluso por eventos creados por el mismo programador.

En la programación dirigida por eventos, al comenzar la ejecución del programa se llevarán a cabo las inicializaciones y demás código inicial y a continuación el programa quedará bloqueado hasta que se produzca algún evento. Cuando alguno de los eventos esperados por el programa tenga lugar, el programa pasará a ejecutar el código del correspondiente administrador de evento. Por ejemplo, si el evento consiste en que el usuario ha hecho click en el botón de play de un reproductor de películas, se ejecutará el código del administrador de evento, que será el que haga que la película se muestre por pantalla.

Un ejemplo claro lo tenemos en los sistemas de programación Léxico y Visual Basic, en los que a cada elemento del programa (objetos, controles, etcétera) se le asignan una serie de eventos que generará dicho elemento, como la pulsación de un botón del ratón sobre él o el redibujado del control.

La programación dirigida por eventos es la base de lo que llamamos interfaz de usuario, aunque puede emplearse para desarrollar interfaces entre componentes de Software como módulos del núcleo también.

En los primeros tiempos de la computación, los programas eran secuenciales, también llamados Batch. Un programa secuencial arranca, lee parámetros de entrada, procesa estos parámetros, y produce un resultado, todo de manera lineal y sin intervención del usuario mientras se ejecuta.

Con la aparición y popularización de los pc, el software empezó a ser demandado para usos alejados de los clásicos académicos y empresariales para los cuales era necesitado hasta entonces, y quedó patente que el paradigma clásico de

Page 19: Machote Trabajos2PENDIENTE

19

programación no podía responder a las nuevas necesidades de interacción con el usuario que surgieron a raíz de este hecho...

Programación modular

La programación modular es un paradigma de programación que consiste en dividir un programa en módulos o subprogramas con el fin de hacerlo más legible y manejable.

Se presenta históricamente como una evolución de la programación estructurada para solucionar problemas de programación más grandes y complejos de lo que ésta puede resolver.

Al aplicar la programación modular, un problema complejo debe ser dividido en varios subproblemas más simples, y estos a su vez en otros subproblemas más simples. Esto debe hacerse hasta obtener subproblemas lo suficientemente simples como para poder ser resueltos fácilmente con algún lenguaje de programación. Ésta técnica se llama refinamiento sucesivo, divide y vencerás ó análisis descendente (Top-Down).

Un módulo es cada una de las partes de un programa que resuelve uno de los subproblemas en que se divide el problema complejo original. Cada uno de estos módulos tiene una tarea bien definida y algunos necesitan de otros para poder operar. En caso de que un módulo necesite de otro, puede comunicarse con éste mediante una interfaz de comunicación que también debe estar bien definida.

Si bien un módulo puede entenderse como una parte de un programa en cualquiera de sus formas y variados contextos, en la práctica es común representarlos con procedimientos y funciones. Adicionalmente, también pueden considerarse módulos las librerías que pueden incluirse en un programa o, en programación orientada a objetos, la implementación de un tipo de dato abstracto.

Programación orientada a objetos

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.

Programación con restricciones

Page 20: Machote Trabajos2PENDIENTE

20

La Programación con restricciones es un paradigma de la programación en informática, donde las relaciones entre las variables son expresadas en términos de restricciones (ecuaciones). Actualmente es usada como una tecnología de software para la descripción y resolución de problemas combinatorios particularmente difíciles, especialmente en las áreas de planificación y programación de tareas (calendarización).

Este paradigma representa uno de los desarrollos más fascinantes en los lenguajes de programación desde 1990 y no es sorprendente que recientemente haya sido identificada por la ACM (Asociación de Maquinaria Computacional) como una dirección estratégica en la investigación en computación.

Se trata de un paradigma de programación basado en la especificación de un conjunto de restricciones, las cuales deben ser satisfechas por cualquier solución del problema planteado, en lugar de especificar los pasos para obtener dicha solución.

La programación con restricciones se relaciona mucho con la programación lógica y con la investigación operativa. De hecho cualquier programa lógico puede ser traducido en un programa con restricciones y viceversa. Muchas veces los programas lógicos son traducidos a programas con restricciones debido a que la solución es más eficiente que su contraparte.

La diferencia entre ambos radica principalmente en sus estilos y enfoques en el modelado del mundo. Para ciertos problemas es más natural (y por ende más simple) escribirlos como programas lógicos, mientras que en otros es más natural escribirlos como programas con restricciones.

El enfoque de la programación con restricciones se basa principalmente en buscar un estado en el cual una gran cantidad de restricciones sean satisfechas simultáneamente. Un problema se define típicamente como un estado de la realidad en el cual existe un número de variables con valor desconocido. Un programa basado en restricciones busca dichos valores para todas las variables.

Algunos dominios de aplicación de este paradigma son:

Dominios booleanos, donde solo existen restricciones del tipo verdadero/falso.

Dominios en variables enteras y racionales. Dominios lineales, donde sólo se describen y analizan funciones lineales. Dominios finitos, donde las restricciones son definidas en conjuntos finitos. Dominios mixtos, los cuales involucran dos o más de los anteriores.

Programación orientada a componentes

Page 21: Machote Trabajos2PENDIENTE

21

La programación orientada a componentes (que también es llamada basada en componentes) es una rama de la ingeniería del software, con énfasis en la descomposición de sistemas ya conformados en componentes funcionales o lógicos con interfaces bien definidas usadas para la comunicación entre componentes.

Se considera que el nivel de abstracción de los componentes es más alto que el de los objetos y por lo tanto no comparten un estado y se comunican intercambiando mensajes que contienen datos.

Programación Orientada a Aspectos

La Programación Orientada a Aspectos (POA) es un paradigma de programación relativamente reciente cuya intención es permitir una adecuada modularización de las aplicaciones y posibilitar una mejor separación de incumbencias. Gracias a la POA se pueden encapsular los diferentes conceptos que componen una aplicación en entidades bien definidas, eliminando las dependencias entre cada uno de los módulos. De esta forma se consigue razonar mejor sobre los conceptos, se elimina la dispersión del código y las implementaciones resultan más comprensibles, adaptables y reusables. Varias tecnologías con nombres diferentes se encaminan a la consecución de los mismos objetivos y así, el término POA es usado para referirse a varias tecnologías relacionadas como los métodos adaptativos, los filtros de composición, la programación orientada a sujetos o la separación multidimensional de competencias.

Page 22: Machote Trabajos2PENDIENTE

22

CONCLUSIONES

Page 23: Machote Trabajos2PENDIENTE

23

La disciplina en el proceso de desarrollo de software, es sin lugar a dudas uno de los elementos fundamentales, para tal propósito debemos comenzar a entenderla y aplicarla desde etapas muy tempranas.

Para obtener productos de calidad el ingeniero debe asumir la responsabilidad personal de la calidad de sus productos, los buenos productos no se obtienen al azar, sino son consecuencia de un esfuerzo positivo para hacer un trabajo de calidad.