Download apuntes de la unidad 2.1 matp-02

Document related concepts

Caml wikipedia , lookup

Rust (lenguaje de programación) wikipedia , lookup

Haskell wikipedia , lookup

Scheme wikipedia , lookup

Polimorfismo (informática) wikipedia , lookup

Transcript
A)
¿Qué es la programación
funcional?
B) Diagrama
C) características
En ciencias de la computación,
la programación funcional es
un paradigma de
programación declarativa basado en
la utilización defunciones
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.
D) Lenguajes
funcionales
Los programas escritos en un
lenguaje funcional están constituidos
únicamente por definiciones de
funciones, entendiendo éstas no
como subprogramas clásicos de un
lenguaje imperativo, sino como
funciones puramente matemáticas,
en las que se verifican ciertas
propiedades como la transparencia
referencial (el significado de una
expresión depende únicamente del
significado de sus sub expresiones),
y por tanto, la carencia total
de efectos colaterales.
Otras características propias de
estos lenguajes son la no existencia
de asignaciones de variables y la
falta
de
construcciones
estructuradas como la secuencia o la
iteración (lo que obliga en la práctica
a que todas las repeticiones de
instrucciones se lleven a cabo por
medio de funciones recursivas).
Lenguaje Hope
• El lenguaje funcional Hope
puede considerarse como una
notación para escribir programas
en forma de expresiones
funcionales. • Una expresión
puede estar constituida por un
conjunto de símbolos básicos
como: -,+, >, (, 2,
Lenguaje F#
E)
El título de este artículo se muestra
incorrectamente
debido
a limitaciones técnicas. El título
correcto es F#.
PROGRAMACION
FUNCIONAL
RECURSIVIDAD
Programación
recursividad
F# (pronunciado F
Sharp)
es
un lenguaje de programación multi
1
paradigma de código
abierto, para
la plataforma .NET, que conjunta
la programación funcional con las
disciplinas imperativa y orientada a
objetos.
funcional
CON
con
Un tipo indica un conjunto de valores
que tienen el mismo significado
genérico
o
propósito
(aunque
algunos tipos, como los tipos de
datos abstractos y tipos de datos
función, tal vez no representen
valores en el programa que se está
ejecutando).
Técnica de programación recursiva:
Ves la forma en la cual se especifica
un proceso basado en su propia
definición. Siendo un poco más
precisos, y para evitar el aparente
círculo sin fin en esta definición:
Un problema que pueda ser definido
en función de su tamaño, sea este N,
pueda ser dividido en instancias más
pequeñas (< N) del mismo problema
y se conozca la solución explícita a
las instancias más simples.
1
Lenguaje CAMEL
Camel Case es un estilo de escritura
que se aplica a frases o palabras
compuestas. El nombre se debe a que
las mayúsculas a lo largo de una
palabra en Camel Case se asemejan a
las jorobas de un camello. El nombre
Camel Case se podría traducir como
Mayúsculas/Minúsculas Camello. El
término case se traduce como "caja
tipográfica", que a su vez implica si
una letra es mayúscula o minúscula y
tiene su origen en la disposición de
los tipos móviles en casilleros o
cajas.
modelos de evaluación:
sistema de tipos:
EJEMPLO:
Lisp (o LISP) es una familia
de lenguajes de
programación de computadora de
tipo multi paradigma con una
larga historia y una sintaxis
completamente entre paréntesis.
Evaluación es el proceso sistemático
de recolección y análisis de datos con
la finalidad de determinar si es que, y
hasta qué punto, unos objetivos han
sido o están siendo logrados. La
información resultante se pone al
servicio de la toma de decisiones.
clases de tipos:
El sistema de tipos de Haskell posee
una característica que lo distingue de
otros lenguajes de programación. El
tipo de polimorfismo del que hemos
tratado hasta ahora es denominado
polimorfismo paramétrico. Existe otro
tipo de polimorfismo llamado ad hoc o
sobrecarga. Estos son algunos
ejemplos de polimorfismo ad hoc
Ves una descripción informal1 de alto
nivel de un algoritmo informático de
programación, compacto e informal,
que utiliza las convenciones
estructurales de un lenguaje de
programación pero que está diseñado
para la lectura humana en lugar de la
lectura mediante máquina, y con
independencia de cualquier otro
lenguaje de programación.
PRÁCTICA 8 unidad 2.1
Unidad de Aprendizaje:
Práctica: 8
Programación en pseudocódigo con técnicas de lenguajes de programación
Calcula el valor factorial de un número utilizando función factorial
Propósito de la práctica:
Elaborará un programa en pseudocódigo mediante una llamada a función
para la obtención del valor factorial de un número.
Escenario:
Laboratorio de informática
Escribe el siguiente pseudocódigo en Word, lo conviertes a su algoritmo y en la prueba de escritorio, de acuerdo
a la definición de factorial de un número y del ejemplo, realiza en la calculadora de tu equipo los siguientes
factoriales y los anotas en el recuadro
//Pseudocódigo de la función factorial recursiva
//función factorial recursiva
FACTORIAL (X):
Inicio_ factorial
Si X=0
Entonces
FACTORIAL =1
Si no
FACTORIAL = X* FACTORIAL (X-1)
Fin_si
Fin_factorial
//programa que obtiene valores del factorial (X)
Inicio
leer el número (X)
mientras haya_números
si X> = 0
Entonces
RESULTADO = FACTORIAL (X)
Mostrar RESULTADOS
Si no
Mostrar <<el numero X es negativo>>
Fin_si <
Leer un número (X)
Fin_mientras
fin
Factorial de 6, 7, 8, 9, 10
Algoritmo
Prueba de escritorio
¿Qué es factorial de un número?
El factorial de un entero positivo n, el factorial de n o n factorial se define en
principio como el producto de todos los números enteros positivos desde 1 (es
decir, los números naturales) hasta n. Por ejemplo,
6
9
7
10
8
11
Elaborar un cuadro sinóptico de diez características de los lenguajes de programación orientada a
objetos
2
Cómo se piensa en objetos
Pensar en términos de objetos es muy parecido a cómo lo haríamos en la vida real. Por ejemplo vamos a
pensar en un coche para tratar de modernizarlo en un esquema de POO. Diríamos que el coche es el
elemento principal que tiene una serie de características, como podrían ser el color, el modelo o la
marca. Además tiene una serie de funcionalidades asociadas, como pueden ser ponerse en marcha,
parar o aparcar. Pues en un esquema POO el coche sería el objeto, las propiedades serían las
características como el color o el modelo y los métodos serían las funcionalidades asociadas como
ponerse en marcha o parar.
Por poner otro ejemplo vamos a ver cómo modelaríamos en un esquema POO una fracción, es decir, esa
estructura matemática que tiene un numerador y un denominador que divide al numerador, por ejemplo
3/2.La fracción será el objeto y tendrá dos propiedades, el numerador y el denominador. Luego podría
tener varios métodos como simplificarse, sumarse con otra fracción o número, restarse con otra
fracción, etc.
Estos objetos se podrán utilizar en los programas, por ejemplo en un programa de
matemáticas harás uso de objetos fracción y en un programa que gestione un taller de coches utilizarás
objetos coche. Los programas Orientados a objetos utilizan muchos objetos para realizar las acciones
que se desean realizar y ellos mismos también son objetos. Es decir, el taller de coches será un objeto
que utilizará objetos coche, herramienta, mecánico, recambios, etc.
Clases en POO
Las clases son declaraciones de objetos, también se podrían definir como abstracciones de objetos.
Esto quiere decir que la definición de un objeto es la clase. Cuando programamos un objeto y definimos
sus características y funcionalidades en realidad lo que estamos haciendo es programar una clase. En
los ejemplos anteriores en realidad hablábamos de las clases coche o fracción porque sólo estuvimos
definiendo, aunque por encima, sus formas.
Propiedades
en
clases
Las propiedades o atributos son las características de los objetos. Cuando definimos una propiedad
normalmente especificamos su nombre y su tipo. Nos podemos hacer a la idea de que las propiedades
son algo así como variables donde almacenamos datos relacionados con los objetos.
Métodos
en
las
clases
Son las funcionalidades asociadas a los objetos. Cuando estamos programando las clases las llamamos
métodos. Los métodos son como funciones que están asociadas a un objeto.
Objetos en POO
Los objetos son ejemplares de una clase cualquiera. Cuando creamos un ejemplar tenemos que
especificar la clase a partir de la cual se creará. Esta acción de crear un objeto a partir de una clase se
llama instanciar (que viene de una mala traducción de la palabra instace que en inglés significa
ejemplar). Por ejemplo, un objeto de la clase fracción es por ejemplo 3/5. El concepto o definición de
fracción sería la clase, pero cuando ya estamos hablando de una fracción en concreto 4/7, 8/1000 o
cualquier otra, la llamamos objeto.
Para crear un objeto se tiene que escribir una instrucción especial que puede ser distinta dependiendo el
lenguaje de programación que se emplee, pero será algo parecido a esto.
miCoche = new Coche()
Con la palabra new especificamos que se tiene que crear una instancia de la clase que sigue a
continuación. Dentro de los paréntesis podríamos colocar parámetros con los que inicializar el objeto de
la clase coche.
Estados
en
objetos
Cuando tenemos un objeto sus propiedades toman valores. Por ejemplo, cuando tenemos un coche la
propiedad color tomará un valor en concreto, como por ejemplo rojo o gris metalizado. El valor concreto
de una propiedad de un objeto se llama estado.
Para acceder a un estado de un objeto para ver su valor o cambiarlo se utiliza el operador punto.
miCoche.color = rojo
El objeto es miCoche, luego colocamos el operador punto y por último el nombre e la propiedad a la que
deseamos acceder. En este ejemplo estamos cambiando el valor del estado de la propiedad del objeto a
rojo con una simple asignación.
Mensajes
en
objetos
Un mensaje en un objeto es la acción de efectuar una llamada a un método. Por ejemplo, cuando le
decimos a un objeto coche que se ponga en marcha estamos pasándole el mensaje “ ponte en marcha” .
Para mandar mensajes a los objetos utilizamos el operador punto, seguido del método que deseamos
invocar. miCoche.ponerseEnMarcha()
3
4