lunes, 19 de junio de 2017

Pseudocodigo

Crea una clase llamada Cuenta que tendrá los siguientes atributos: titular y cantidad (puede tener decimales).
El titular será obligatorio y la cantidad es opcional. Crea dos constructores que cumpla lo anterior.
Crea sus métodos get, set y toString.
Tendrá dos métodos especiales:
  • ingresar(double cantidad): se ingresa una cantidad a la cuenta, si la cantidad introducida es negativa, no se hará nada.
  • retirar(double cantidad): se retira una cantidad a la cuenta, si restando la cantidad actual a la que nos pasan es negativa, la cantidad de la cuenta pasa a ser 0.

Clase Cuenta
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
/**
 * Clase Cuenta
 * @author DiscoDurodeRoer
 */
public class Cuenta {
 
    //Atributos
    private String titular;
    private double cantidad;
 
    //Constructores
    public Cuenta(String titular) {
        this(titular, 0); //Sobrecarga
    }
 
    public Cuenta(String titular, double cantidad) {
        this.titular = titular;
        //Si la cantidad es menor que cero, lo ponemos a cero
        if (cantidad < 0) {
            this.cantidad = 0;
        } else {
            this.cantidad = cantidad;
        }
    }
 
    //Metodos
    public String getTitular() {
        return titular;
    }
 
    public void setTitular(String titular) {
        this.titular = titular;
    }
 
    public double getCantidad() {
        return cantidad;
    }
 
    public void setCantidad(double cantidad) {
        this.cantidad = cantidad;
    }
 
    /**
     * Ingresa dinero en la cuenta,
     * solo si es positivo la cantidad
     *
     * @param cantidad
     */
    public void ingresar(double cantidad) {
        if(cantidad > 0){
            this.cantidad += cantidad;  
        }
    }
 
    /**
     * Retira una cantidad en la cuenta, si se quedara en negativo se quedaria
     * en cero
     *
     * @param cantidad
     */
    public void retirar(double cantidad) {
        if (this.cantidad - Math.abs(cantidad) < 0) {
            this.cantidad = 0;
        } else {
            this.cantidad -= cantidad;
        }
    }
 
    /**
     * Devuelve el estado del objeto
     *
     * @return
     */
    @Override
    public String toString() {
        return "El titular " + titular + " tiene " + cantidad + " euros en la cuenta";
    }
 
}
–Clase ejecutable
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class CuentaApp {
 
    public static void main(String[] args) {
         
        Cuenta cuenta_1 = new Cuenta("DiscoDurodeRoer");
        Cuenta cuenta_2 = new Cuenta("Fernando", 300);
         
        //Ingresa dinero en las cuentas
        cuenta_1.ingresar(300);
        cuenta_2.ingresar(400);
         
        //Retiramos dinero en las cuentas
        cuenta_1.retirar(500);
        cuenta_2.retirar(100);
         
        //Muestro la informacion de las cuentas
        System.out.println(cuenta_1); // 0 euros
        System.out.println(cuenta_2); // 600 euros
         
    }
     
}

jueves, 8 de junio de 2017

Lenguajes de P.O.O

  • C++.
Es un lenguaje de programación diseñado a mediados de los años 1980 por Bjarne Stroustrup. La intención de su creación fue el extender al lenguaje de programación C mecanismos que permiten la manipulación de objetos. En ese sentido, desde el punto de vista de los lenguajes orientados a objetos, el C++ es un lenguaje híbrido.
Los objetos en C++ son abstraídos mediante una clase. Según el paradigma de la programación orientada a objetos un objeto consta de:
  1. Identidad, que lo diferencia de otros objetos (Nombre que llevará la clase a la que pertenece dicho objeto).
  2. Métodos o funciones miembro
  3. Atributos o variables miembro
Un ejemplo de clase que podemos tomar es la clase perro. Cada perro comparte unas características (atributos). Su número de patas, el color de su pelaje o su tamaño son algunos de sus atributos. Las funciones que lo hagan ladrar, cambiar su comportamiento... esas son las funciones de la clase

Ejemplo:

/* Esta cabecera permite usar los objetos que encapsulan los descriptores stdout
y stdin: cout(<<) y cin(>>)*/
#include <iostream>

using namespace std;

int main()
{
   cout << "Hola mundo" << endl;
   cin.get();
return 0;
}

  • JAVA
Java es un lenguaje de programación de propósito general, concurrente, orientado a objetos que fue diseñado específicamente para tener tan pocas dependencias de implementación como fuera posible. Su intención es permitir que los desarrolladores de aplicaciones escriban el programa una vez y lo ejecuten en cualquier dispositivo (conocido en inglés como WORA, o "write once, run anywhere"), lo que quiere decir que el código que es ejecutado en una plataforma no tiene que ser recompilado para correr en otra. Java es, a partir de 2012, uno de los lenguajes de programación más populares en uso, particularmente para aplicaciones de cliente-servidor de web, con unos 10 millones de usuarios reportados.

  • C#
Todo los lenguajes administrados en el .NET, Framework, visual basic y C#, proporcionan compatibilidad completa para programación orientada a objetos como encapsulación, herencia y polimorfismo.

  • Visual Basic
Express es una manera rápida y sencilla de crear programas para Microsoft Windows. Aunque no tenga experiencia de programación en Windows, con Visual Basic dispone de un completo conjunto de herramientas para simplificar las tareas de desarrollo.










Carecteristicas de la P.O.O

Hay un cierto desacuerdo sobre exactamente que características de un método de programación o lenguaje le define como "orientado a objetos", pero hay un consenso general en que las características siguientes son las mas importantes (para mas información, seguir los enlaces respectivos):
  • Abstracción:
Cada objeto en el sistema sirve como modelo de un "agente" abstracto que puede realizar trabajo, informar y cambiar su estado, y "comunicarse" con otros objetos en el sistema sin revelar como se implementa estas características. Los procesos, las funciones o los métodos pueden también ser abstraídos y cuando lo están, una variedad de técnicas son requeridas para ampliar una abstracción.
  • Encapsulamiento:
Significa reunir a todos los elementos que pueden considerarse pertenecientes a una misma entidad, al mismo nivel de abstracción. Esto permite aumentar la cohesion de los compo
  • Principio de ocultación:
Cada objeto esta aislado del exterior, es un modulo material, y cada tipo de objeto expone un interfaz a otros objetos que especifican como pueden interactuar con los objetos de la clase. El aislamiento mentes del sistema.
Algunos autores confunden este concepto con el principio de ocultación principalmente porque se suelen emplear conjuntamente.protege a las propiedades de un objeto contra su modificación por quien no tenga derecho a acceder a ellas, solamente los propios métodos internos del objeto pueden acceder a su estado. Esto asegura que otros objetos no pueden cambiar el estado interno de un objeto de maneras inesperadas, eliminando objetos secundarios e interacciones inesperadas. Algunos leguajes relajan esto, permitiendo un acceso directo a los datos internos del objeto de una manera controlada y limitando el grado de abstracción. La aplicación de entera se reduce a un agregado o rompecabezas de objetos.
  • Polimorfismo:
Comportamiento diferentes asociados a objetos distintos, pueden compartir el mismo nombre, al llamarlo por ese nombre se utilizara el comportamiento correspondiente al objeto que se este usando. O dicho de otro modo, la referencia y las colecciones de objetos pueden contener objetos de diferentes tipos, y la invocación   de un comportamiento en una referencia producirá el comportamiento correcto para el tipo real del objeto referenciado. Cuando esto ocurre en "tiempo de ejecución", esta ultima característica se llama asignación tardía o asignación dinámica. Algunos lenguajes proporcionan medios mas estáticos (en "tiempo de compilación") de polimorfismo, tales como las plantillas y la sobrecarga de operadores de C++.
  • Herencia:
La clases no están aisladas, si no que se relacionan entre si formando una a jerarquía de clasificación, Los objetos heredan las propiedades y el comportamiento de todas las clases a las que pertenecen. La herencia organiza y facilita el polimorfismo y el en capsula miento permitiendo a los objetos ser definidos y creados como tipos especializados preexistentes. Estos pueden compartir "y extender" su comportamiento sin tener que volver a implementarlo. Esto suele hacerse habitualmente agrupado los objetos en clases  y estas en arboles o en rejados que reflejan un comportamiento común. Cuando un objeto hereda de mas de una clase se dice que hay herencia multiple.   

miércoles, 7 de junio de 2017

Identificacion de elementos de programacion orientada a objetos.

  • Concepto

Programación Orientada a Objetos (P.O.O)

Es un paradigma de programación que define los programas en términos de "Clases de objetos", objetos que son entidades que combinan estado (propiedades o datos), comportamiento (procedimiento o métodos) e identidad (propiedad del objeto que lo diferencia del resto). La programación orientada a objetos expresa un programa como un conjunto de estos, que colaboran entre ellos para realizar tareas.
Esto permite hacer los programas y módulos mas fáciles de escribir, mantener y reutilizar.



https://www.youtube.com/watch?v=AAKoccH230Y

Programacion funcional con recursividad aplicaciones en rutinas de pseudocodigo

  • Aplicaciones en rutinas de Pseudocodigo.
Generalmente se utiliza pseudocódigo en los libros de texto y publicaciones científicas relacionadas con la informática y la computación numérica, para la descripción de algoritmos, de manera que todos los programadores puedan entenderlo, aunque no todos conozcan el mismo lenguaje de programación.
Generalmente, en los libros de texto se adjunta una explicación que acompaña a la introducción y que explica las convenciones particulares en uso.
El nivel de detalle del pseudocódigo puede, en algunos casos, acercarse a la de formalizar los idiomas de propósito general.
Un programador que tiene que aplicar un algoritmo específico, sobre todo uno des familiarizado, generalmente comienza con una descripción en pseudocódigo, y luego "traduce" esa descripción en el lenguaje de programación meta y lo modifica para que interactúe correctamente con el resto del programa.
Los programadores también pueden iniciar un proyecto describiendo la forma del código en pseudocódigo en el papel antes de escribirlo en su lenguaje de programación, como ocurre en la estructuración de un enfoque de Top-down y Bottomup arriba hacia abajo.


Java. https://www.youtube.com/watch?v=dOVcYDtFaTY

Programacion funcional con recursividad

  • Sistema de tipos.

Un tipo indica un conjunto de valores que tienen el mismo significado genérico o propósito (aunque unos tipos, como los tipos de datos abstractos y tipos de datos función talvez no representen valores en el programa que se esta ejecutando).


  • Técnicas de programación recursiva.
  1. Vez la forma en la cual se especifica un proceso basado en su propia definición. Siendo un poco mas preciso, y para evitar el aparente circulo sin fin en esta definición: vi
  2. Un problema que pueda ser definido en funciones de su tamaño, sea este N, puede ser dividido en instancias (<N) del mismo problema y se conozca la solución explicita a las sustancias mas simples.

  • Modelos evaluación.
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 que 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 verdadero2 , 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. aplicaciones en rutinas de seudocódigo.

lunes, 5 de junio de 2017

Lenguajes de programacion funcional

  •  Lisp: 
Lisp es un lenguaje tipo funcional, es el segundo lenguaje de alto nivel más viejo, los dialectos de Lisp más ampliamente conocidos son el Scheme y Common Lisp.
El nombre Lisp viene de "LISt Processing" (Proceso de LIStas). Una de las estructuras de datos importante de Lisp son las listas encadenadas, el código fuente de lisp esta compuesto de listas.
Es un lenguaje útil para desarrollar la inteligencia artificial.


  • Camel:
CAMEL 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 se asemejan a las jorobas de un camello. El nombre Camel 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.
Existen dos tipos de Camel:
UpperCamelCase
lowerCamelCase




Hope:
El Hope es un pequeño lenguaje el de programación funcional desarrollado en el principios de los 80 antes de Miranda y de Haskell. Es notable por ser el primer lenguage de programación con la evaluación del llamado-por-patrón y tipos de datos algebraicos. El Hope es un lenguaje importante en el desarrollo de la programación funcional. 
Un programa factorial en hope es: 

dec fact : num -> num; 
--- fact 0 <= 1; 
--- fact n <= n*fact(n-1); 

A diferencia del Haskell, el cambio de la orden de las cláusulas no cambiaría el significado del programa, porque en los modelos Hope, su adaptación favorece siempre patrones más específicos sobre los menos específicos. 

Otra manera de la cual la esperanza diferencia de Haskell y ML es que los tipos en Hope están declarados explícitamente, en vez de ser deducido por un algoritmo de tipo-inferencia.


  • Erlang:
Es un lenguaje funcional y de programación concurrente, fue diseñado por la compañía Ericsson con el propósito de hacer aplicaciones que puedan soportar fallos, funcionamiento ininterrumpido, aplicaciones distribuidas, entre otras cosas.
Tiene una característica muy importante "el cambio de código en caliente" el cual se refiere a poder modificar el código aun cuando la aplicación esta corriendo. Erlang no seguía la filosofía de código abierto hasta 1998 cuando Ericsson lo cedió como tal.
Erlang es un lenguaje interpretado, aunque también se puede compila usando el compilador HiPE, aunque este compilador solo es para algunas plataformas es muy bueno porque pude soportar la concurrencia característica muy distintiva del lenguaje.
Esta es la pagina oficial de HiPE.
Es posible que pensemos que entender este proceso de concurrencia es complicado y más aun aplicarlo en algún programa pero en Erlang la concurrencia es explicita y no implícita con en otros lenguajes.
El nombre de Erlang viene de las palabras Ericsson y Language.
Erlang lenguaje funcional
Los programa en Erlang están compuestos de bloques "funciones" y las identificamos por su nombre y el numero de argumentos de entrada también llamado "aridad". Por ejemplo las funciones multiplicacion/2, multiplicacion/3, multipicacion/4 pueden existir perfectamente juntas y llamándose a cada una según el numero de datos que se introduzca por el usuario, los resultados que devuelven las funcione son puede ser de cualquier elemento soportado por Erlang flotante, tupla, entero, lista.


  • F#(Functional#):
Es un lenguaje de programación, que proporciona la mejor combinación de seguridad, rendimiento y script, con todas las ventajas de ejecutarse en un runtime moderno. Se ejecuta sobre el Framework de .NET
Un lenguaje de programación de script, funcional, imperativo, orientado a objetos que es una base fantástica para realizar diversidad de tareas dentro de la programación:
Script interactivo como Phyton,
Ambiente interactivo de visualizacion de datos como MATLAB
Fuerte inferencia de tipos y seguridad de ML
Compilacion compatible compartida con el lenguaje popular OCaml
Un perfomance como C#
Facil acceso a todas las librerias de clases base que tenemos en .NET asi como herramientas de acceso a datos.
Manejo de esquemas
Una integración con Visual Studio
La velocidad de ejecucion de codigo nativo, ya sea portable, o distribuido.
El unico lenguaje que nos provee una combinacion como esta es F# que es pronunciado como FSharp, un lenguaje de programacion para scripts, funcional, imperativo, orientado a objetos, usado para muchas practicas cientificas, tareas en web, etc.

Caracteristicas de programacion funcional

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 referencia (el significado de una expresión depende únicamente del significado de sus subexpresiones), 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 interacción (lo que obliga en la práctica a que todas las repeticiones de instrucciones se lleven a cabo por medio de funciones re cursivas).

Existen dos grandes categorías de lenguajes funcionales: los funcionales puros y los híbridos. La diferencia entre ambos estriba en que los lenguajes funcionales híbridos son menos dogmáticos que los puros, al admitir conceptos tomados de los lenguajes imperativos, como las secuencias de instrucciones o la asignación de variables. En contraste, los lenguajes funcionales puros tienen una mayor potencia expresiva, conservando a la vez su transparencia referencias, algo que no se cumple siempre con un lenguaje funcional híbrido.

¿Que es Programacion Funcional?

En ciencias de la computación, la programación funcional es un paradigma de programación declarativa basado en el uso de funciones matemáticas, en contraste con la programación imperativa, que enfatiza los cambios de estado mediante la mutación de variables.
La programación funcional tiene sus raíces en el cálculo lambda, un sistema formal desarrollado en los años 1930 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.
En la práctica, la diferencia entre una función matemática y la noción de una "función" utilizada en la programación imperativa, es que las funciones imperativas pueden tener efectos secundarios, como cambiar el valor de cálculos realizados previamente.
Por esta razón carecen de transparencia referencia, es decir, la misma expresión sintáctica puede resultar en valores diferentes en varios momentos de la ejecución del programa. Con código funcional, en contraste, el valor generado por una función depende exclusivamente de los argumentos alimentados a la función.
Al eliminar los efectos secundarios se puede entender y predecir el comportamiento de un programa mucho más fácilmente. Ésta es una de las principales motivaciones para utilizar la programación funcional.
El objetivo es conseguir lenguajes expresivos y matemáticamente elegantes, en los que no sea necesario bajar al nivel de la máquina para describir el proceso llevado a cabo por el programa, y evitar el concepto de estado del cómputo.
La secuencia de computaciones llevadas a cabo por el programa se rige única y exclusivamente por la re escritura de definiciones más amplias a otras cada vez más concretas y definidas, usando lo que se denominan "definiciones dirigidas".