Programación Funcional, Orientada A Objetos y Bajo Nivel

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 8

Programación funcional

La programación funcional es un paradigma declarativo. Nos enfocaremos en "qué"


estamos haciendo y no en "cómo" se está haciendo (enfoque imperativo). Esto
quiere decir que nosotros expresaremos nuestra lógica sin describir controles de
flujo; no usaremos ciclos o condicionales.
Utiliza expresiones en lugar de declaraciones. Una expresión se evalúa para
producir un valor, mientras que una declaración se ejecuta para asignar
variables. Esas funciones tienen algunas características especiales que se explican
a continuación.
La programación funcional se basa en el cálculo Lambda:
El cálculo Lambda es un marco desarrollado por Alonzo Church para estudiar los
cálculos con funciones. Puede ser llamado como el lenguaje de programación más
pequeño del mundo. Da la definición de lo que es computable. Cualquier cosa que
pueda ser calculada por el cálculo lambda es computable. Es equivalente a la
máquina de Turing en su capacidad para computar.
Conceptos de programación funcional:
Funciones puras: estas funciones tienen dos propiedades principales. Primero,
siempre producen el mismo resultado para los mismos argumentos,
independientemente de cualquier otra cosa.
En segundo lugar, no tienen efectos secundarios, es decir, modifican cualquier
argumento o variable global o generan algo.
La propiedad posterior se llama inmutabilidad. El resultado de las funciones puras
solo es el valor que devuelve. Son deterministas.
Las funciones puras también facilitan la escritura de aplicaciones paralelas /
concurrentes.
Recursión: no hay un bucle "for" o "while" en los lenguajes funcionales. La iteración
en lenguajes funcionales se implementa a través de la recursión. Las funciones
recursivas se llaman a sí mismas repetidamente, hasta que llega al caso base.
Transparencia referencial: en los programas funcionales, las variables una vez
definidas no cambian su valor en todo el programa. Los programas funcionales no
tienen sentencias de asignación. Si tenemos que almacenar algún valor, en su lugar
definimos nuevas variables. Esto elimina cualquier posibilidad de efectos
secundarios porque cualquier variable puede ser reemplazada por su valor real en
cualquier punto de ejecución. El estado de cualquier variable es constante en
cualquier instante.
Las funciones son de primera clase y pueden ser de orden superior: las
funciones de primera clase se tratan como una variable de primera clase. Las
variables de primera clase pueden pasarse a funciones como parámetro, pueden
devolverse desde funciones o almacenarse en estructuras de datos.
Las variables son inmutables: en la programación funcional, no podemos
modificar una variable después de que se haya inicializado. Podemos crear nuevas
variables, pero no podemos modificar las variables existentes, y esto realmente
ayuda a mantener el estado durante el tiempo de ejecución de un programa.
Si queremos aprender programación funcional, a día de hoy tenemos muchísimas
opciones. Vamos algunos de ellos:

Haskell

Haskell es uno de esos lenguajes funcionales conocidos como puros. Esto quiere
decir que no permite mutar los datos y que las operaciones se tratan como la
evaluación de funciones matemáticas.

Erlang/Elixir

Erlang fue un lenguaje creado inicialmente para la gestión de centralitas telefónicas


de Ericsson allá por 1986. Con esta premisa acabó siendo un lenguaje funcional,
pensado para aplicaciones distribuidas y tolerantes a fallos. Erlang al igual que Elixir
es un lenguaje de tipado dinámico.

Scala
La máquina virtual de Java es una de las más avanzadas, y esto está haciendo que
se generen muchos lenguajes nuevos en torno a ella. Scala es probablemente uno
de los más famosos. Aunque Scala soporta todas las características típicas de la
POO de Java, también posee muchas características funcionales como: funciones
anónimas, funciones de orden superior, lazy evaluation, currificación, pattern
matching, tuplas etc.

Clojure

Otro lenguaje funcional que corre sobre la máquina virtual de Java es Clojure. El
tipado de Clojure, al igual que el de otros lenguajes funcionales como Elixir es
dinámico. Y también como en otros lenguajes funcionales Clojure promueve la
inmutabilidad de los datos. Clojure hace uso del concepto de identidad, que es algo
así como una entidad lógica asociada a distintos valores a lo largo del tiempo.

F#

F# es el lenguaje funcional de Microsoft, compatible con el stack de .NET. Por


defecto los datos son inmutables, aunque podemos especificar que puedan mutar
su estado. La sintaxis de F# se basa en la de OCaml, aunque con diferencias. Una
de las curiosidades de F# es que es un lenguaje estático, en el que no hay que
definir tipos, ya que estos son casi siempre inferidos por el compilador.

Programación orientada a objetos


La programación orientada a objetos es un enfoque de programación formal que
combina datos y acciones asociadas (métodos) en estructuras lógicas (objetos).
Este enfoque aumenta la capacidad para administrar la complejidad del software, lo
cual resulta especialmente importante cuando se desarrollan y mantienen
aplicaciones y estructuras de datos de gran tamaño.
La programación orientada a objetos (POO) es un modelo de lenguaje de
programación organizado alrededor de objetos en lugar de "acciones" y datos en
lugar de lógica. Históricamente, un programa ha sido visto como un procedimiento
lógico que toma datos de entrada, los procesa y produce datos de salida. La
programación orientada a objetos considera que lo que realmente nos importa son
los objetos que queremos manipular en lugar de la lógica requerida para
manipularlos. Los ejemplos de objetos van desde seres humanos (descritos por
nombre, dirección, etc.) hasta edificios y pisos (cuyas propiedades se pueden
describir y administrar) hasta pequeños widgets en el escritorio de una computadora
(como botones y barras de desplazamiento).
¿Qué es una Clase?
Al igual que un diseñador crea prototipos de dispositivos que podrían utilizarse en
repetidas ocasiones para construir los dispositivos reales, una clase es un prototipo
de software que puede utilizarse para instanciar (es decir crear) muchos objetos
iguales.
¿Qué contiene una clase?
Los miembros de una clase son un conjunto de elementos que definen a los objetos
(atributos ó propiedades), así como los comportamientos o funciones (métodos) que
maneja el objeto.
Entonces tenemos que una clase es la estructura de un objeto, es decir, la definición
de todos los elementos de que está hecho un objeto.
¿Qué es el constructor de una clase?
El constructor es un miembro que implementa las acciones requeridas para
inicializar la instancia de una clase. El constructor es invocado cuando se usa el
operador new.
El constructor es parecido a los métodos, pero no tiene un tipo de retorno y su
nombre es el mismo que el de la clase y también puede o no recibir parámetro como
los métodos.
Tipos de variables que puede tener una clase
De instancia
Son aquellas que se declaran dentro de una clase y que no existen hasta que se
hace una instancia de esa clase.
De referencia
Son aquellas que hace referencia a otra clase. Esto se puede definir mejor diciendo
que es una variable del tipo de otra clase, y cuando se haga la instancia tendremos:
un objeto dentro de otro objeto.
De clase
Estas variables se declaran anteponiendo la palabra static a su declaración, y a
diferencia de las variables de instancia, éstas no necesitan que se haga una
instancia (que se cree un objeto), existen desde que se crea la clase.
Modificadores de Acceso
Es la forma en cómo clasificamos nuestras propiedades o métodos para hacerlos
visibles o invisibles a quienes usen un objeto de una clase que creamos.
Los modificadores de acceso son: Public, Private, Protected.
Encapsulación
Es un mecanismo que permite a los diseñadores de tipos de datos determinar qué
miembros de los tipos pueden ser utilizados por otros programadores y cuáles no.
Las principales ventajas que ello aporta son:
 Se facilita a los programadores que vaya a usar el tipo de dato
(programadores clientes) el aprendizaje de cómo trabajar con él, pues se le
pueden ocultar todos los detalles relativos a su implementación interna y sólo
dejarle visibles aquellos que puedan usar con seguridad.
 Se facilita al creador del tipo la posterior modificación del mismo, pues si los
programadores clientes no pueden acceder a los miembros no visibles, sus
aplicaciones no se verán afectadas si éstos cambian o se eliminan.
 La encapsulación se consigue añadiendo modificadores de acceso en las
definiciones de miembros y tipos de datos.
¿Qué es la Herencia?
La herencia se da cuando una clase hereda sus propiedades y métodos a otra clase,
ésta segunda se convierte en la subclase y la primera en clase superior o clase
padre. Es decir, una clase base o clase padre le hereda sus propiedades a la clase
hija o subclase.
Método Override
Este método proporciona una nueva implementación de un miembro heredado de
una clase base. El método reemplazado por una declaración override se conoce
como método base reemplazado. El método base reemplazado debe tener la misma
firma que el método override.
¿Qué es el Polimorfismo?
En este último ejemplo pudimos observar este concepto. A través de la herencia,
una clase puede utilizarse como más de un tipo; puede utilizarse como su propio
tipo, o como el tipo de su clase base.
LENGUAJES POPULARES ORIENTADOS A OBJETOS

 Simula, el primer lenguaje de programación orientado a objetos.


 Java
 Python
 Ruby
 C++
 Smalltalk
 Visual Basic .NET
 Objective-C: POO es un principio fundamental de la programación de
aplicaciones móviles de iOS, y Objective-C es esencialmente el lenguaje C
con una capa orientada a objetos.
 Curl
 Delphi
 Eiffel
Programación de bajo nivel
Los lenguajes de bajo nivel están diseñados para operar y manejar todo el
hardware e instrucciones que configuran la arquitectura de una computadora
directamente.
Los lenguajes de bajo nivel se consideran más cercanos a las computadoras. En
otras palabras, su función principal es operar, administrar y manipular el hardware
y los componentes informáticos. Los programas y aplicaciones escritos en un
lenguaje de bajo nivel se ejecutan directamente en el hardware de computación
sin ninguna interpretación o traducción.

Dentro de los lenguajes de bajo nivel están:

 El lenguaje maquina, es el que da ordenes a la máquina, que son las


operaciones fundamentales para su funcionamiento.
El ordenador sólo entiende un lenguaje conocido como código binario o
código máquina, consistente en ceros y unos, que son las ordenes, y que
sean fáciles de entender por el hardware de la maquina.
Este lenguaje es mucho más rápido que los lenguajes de alto nivel.
La desventaja es que son bastantes difíciles de manejar y usar, además de
tener códigos fuente enormes donde encontrar un fallo es casi imposible.

 El lenguaje ensamblador, es un derivado del lenguaje maquina y esta


formado por abreviaturas de letras y números.
Con la aparición de este lenguaje se crearon los programas traductores
para poder pasar los
programas escritos en lenguaje ensamblador a lenguaje máquina.
Como ventaja, es que los códigos fuentes eran más cortos y los programas
creados ocupaban menos memoria.
Las desventajas de este lenguaje siguen siendo prácticamente las mismas
que las del lenguaje ensamblador, añadiendo la dificultad de tener que
aprender un nuevo lenguaje difícil de probar y mantener.

En este tipo de lenguajes se trabaja a nivel de instrucciones, es decir, su


programación es al más fino detalle, además, está completamente orientado a la
máquina.

 Adaptación - Máxima entre programación y aprovechamiento del recurso


de la máquina.
 Velocidad - Máxima al contar con un acceso directo a los recursos, sin
capas intermedias.
 Portabilidad - Mínima por estar restringido a las especificaciones del
fabricante.
 Abstracción - Mínima por depender completamente de la técnica del
hardware.
 Uso - Requiere de la máxima atención y de una organización estructurada
en base a los planos del hardware y del objetivo del software.

Bibliografía
conociendoalgoritmo.weebly.com. (s.f.). conociendoalgoritmo.weebly.com. Obtenido de
LENGUAJE DE BAJO NIVEL : https://conociendoalgoritmo.weebly.com/lenguaje-de-bajo-
nivel.html

geeksforgeeks. (s.f.). www.geeksforgeeks.com. Obtenido de Functional Programming Paradigm:


https://www.geeksforgeeks.org/functional-programming-paradigm/

genbeta.com. (10 de Octubre de 2018). www.genbeta.com. Obtenido de El resurgir de la


programación funcional: https://www.genbeta.com/desarrollo/el-resurgir-de-la-
programacion-funcional

Ismael García, E. (s.f.). codigofacilito.com. Obtenido de ¿Qué Es La Programación Funcional?:


https://codigofacilito.com/articulos/programacion-funcional

J. Rodriguez, G. (18 de Febrero de 2012). northware.mx. Obtenido de Programación Orientada a


Objetos: https://www.northware.mx/programacion_orientada_objetos/

Rouse, M. (s.f.). searchmicroservices.techtarget.com. Obtenido de object-oriented programming


(OOP): https://searchmicroservices.techtarget.com/definition/object-oriented-
programming-OOP

techopedia.com. (s.f.). techopedia.com. Obtenido de Low-Level Language:


https://www.techopedia.com/definition/3933/low-level-language

WODEHOUSE, C. (s.f.). upwork.com. Obtenido de What Is Object-Oriented Programming & Why Is


It Important?: https://www.upwork.com/hiring/development/object-oriented-
programming/

También podría gustarte