Práctica Unidad 1
Práctica Unidad 1
● Forma legible para el ser humano: La legibilidad humana está relacionada con la
abstracción, ya que los LP están diseñados para ser fácilmente comprensibles por
los programadores. Al utilizar palabras clave y estructuras sintácticas familiares, los
LP facilitan la lectura, el entendimiento y la modificación del código fuente. Esta
legibilidad permite a los desarrolladores centrarse en la lógica y la funcionalidad de
un programa en lugar de preocuparse por detalles de bajo nivel.
1
En resumen, los conceptos resaltados en la definición de Lenguaje de Programación de
Kenneth C. Louden se relacionan con la abstracción y la implementación de un LP. La
abstracción se refiere a la simplificación de las ideas, mientras que la implementación
implica la traducción y ejecución del código fuente en una máquina. Estas relaciones son
fundamentales para comprender cómo los LP facilitan el desarrollo de software y permiten a
los programadores crear programas eficientes y efectivos.
● Entre los LPs que aparecen en ambos índices (Python, Java, C, C++, C#, JavaScript
y PHP), el dominio de aplicación predominante es el desarrollo web, ya que varios
de estos lenguajes (como Java, JavaScript, C# y PHP) son ampliamente utilizados
para crear aplicaciones y servicios web. Además, algunos de estos lenguajes
también son populares en otros dominios, como el desarrollo de aplicaciones de
escritorio, móviles, sistemas embebidos y software de sistemas.
2
predecesores, SQL no tiene un sucesor directo, pero ha influido en el desarrollo de
lenguajes de consulta similares para bases de datos NoSQL, como MongoDB Query
Language (MQL).
Imperativo (ADA):
3
● Variables y asignaciones: Las variables (y, t, z) se declaran y se les asignan valores
a lo largo del código.
● Control de flujo: Se utiliza un bucle 'loop' y una sentencia 'exit when' para controlar el
flujo del programa y salir del bucle cuando se cumpla la condición especificada (y =
0).
Funcional (Haskell):
5.1
Lógico (ProLog):
● Reglas y hechos: El código en ProLog está compuesto por reglas y hechos, que
definen las relaciones entre los elementos del problema.
● Clases y objetos: El código en Java define una clase llamada "IntWithMcd" que
encapsula el comportamiento y los datos asociados al cálculo del mcd.
En los lenguajes funcionales, las variables son inmutables, lo que significa que una vez que
se les asigna un valor, no se puede cambiar. En contraste, en los lenguajes imperativos, las
4
variables pueden ser mutables, lo que significa que su valor puede cambiar a lo largo del
tiempo.
Por otro lado, la principal desventaja de las variables inmutables es que a veces puede ser
difícil escribir programas que requieren cambios en el estado. En los lenguajes imperativos,
donde las variables pueden ser mutables, es posible modificar el estado a medida que se
ejecuta el programa, lo que puede ser necesario en algunas situaciones.
5
6. Dado el siguiente fragmento de código escrito en un LP con sintaxis
similar a C: m( 15 / q( 5 ) ); int m( int var ){ return 3; } int q( int var ){
return var - 5; } Determina cuál sería el resultado de la ejecución de la
primera línea, si el LP trabaja con evaluación ansiosa (evaluación típica
de los lenguajes imperativos). ¿Y con la evaluación típica de los
lenguajes funcionales?
En el fragmento de código dado, la primera línea llama a la función "m" con un argumento
de 15 dividido por el resultado de la función "q" con un argumento de 5.
Por otro lado, si el LP trabaja con evaluación típica de los lenguajes funcionales, primero se
llamaría a la función "q" con un argumento de 5, que devolvería un valor de 0. Luego se
llamaría a la función "m" con un argumento de 15 dividido por 0, lo que no produciría un
error en la llamada de la función. Sin embargo, la función "m" devolvería siempre un valor
de 3, independientemente del valor del argumento, por lo que el resultado final sería 3.
En resumen, con evaluación ansiosa se produciría un error de división por cero, mientras
que con la evaluación típica de los lenguajes funcionales se obtendría un valor de 3 como
resultado.
En un lenguaje funcional, la función f(x, y, z) se puede expresar como (((g x) y) z), donde g
es una función que toma un argumento y devuelve otra función que se aplicará al siguiente
argumento.
En este caso, la expresión (g x) aplica la función g al argumento x, lo que devuelve una
nueva función que toma un argumento y se aplica a ese argumento. Luego, ((g x) y) aplica
esta nueva función al argumento y, lo que devuelve otra nueva función que toma un
argumento z y se aplica a él.
Finalmente, (((g x) y) z) aplica la última función resultante al argumento z, lo que devuelve el
valor final de f(x, y, z).
Esta forma de expresar la función f(x, y, z) se conoce como currificación, que es una técnica
común en la programación funcional para transformar funciones que toman múltiples
argumentos en funciones que toman un solo argumento y devuelven otra función que toma
el siguiente argumento, y así sucesivamente. La currificación permite la composición de
funciones y facilita la creación de funciones de orden superior en la programación funcional.
6
8. ¿Con qué tipo de abstracción se relaciona más directamente el
principio de diseño reusabilidad?
7
a) Un entorno de programación integrado (IDE) es un software que combina varias
herramientas y funcionalidades para ayudar a los desarrolladores a crear, probar y depurar
software de manera eficiente. Un IDE típicamente incluye un editor de código, un depurador,
herramientas de construcción y pruebas, entre otras características.
b) Uno de los IDEs más populares en la actualidad es Visual Studio Code (VS Code), que
ocupa el primer lugar en el ranking de PYPL de marzo de 2023. Algunas de sus
características son:
Por otro lado, JetBrains IntelliJ IDEA es otro IDE muy popular que se encuentra en el tercer
lugar del ranking de PYPL de marzo de 2023. Algunas de sus características son:
● Soporte para múltiples lenguajes de programación: IntelliJ IDEA soporta una amplia
variedad de lenguajes de programación, incluyendo Java, Kotlin, Python, JavaScript,
entre otros.
● Refactorización automática: IntelliJ IDEA tiene una serie de herramientas que
permiten a los desarrolladores refactorizar su código de manera automática, lo que
puede ahorrar tiempo y reducir errores.
● Integración con herramientas de construcción: IntelliJ IDEA se integra con
herramientas de construcción como Maven y Gradle, lo que facilita la configuración y
el despliegue de proyectos.
● Uno de los ODEs que aparece en el ranking es CodePen, que es una herramienta
en línea para crear y compartir código en HTML, CSS y JavaScript. CodePen tiene
algunas características interesantes, como la posibilidad de ver los cambios en
tiempo real y la opción de compartir y colaborar en proyectos con otros
desarrolladores.
8
10. Frameworks: a) En el ámbito de la ingeniería de software, ¿qué es
un Framework? b) ¿Podemos hablar de tipos de Framework? Explica. c)
¿Qué relación puedes establecer entre Framework y lenguajes de
programación? d) Si conoces y/o has utilizado algún Framework, explica
brevemente sus características.
b) Sí, podemos hablar de diferentes tipos de Frameworks. Por ejemplo, existen Frameworks
de desarrollo web, Frameworks para aplicaciones móviles, Frameworks de pruebas
automatizadas, Frameworks de seguridad, entre otros. Cada tipo de Framework está
diseñado para un propósito específico y proporciona un conjunto de herramientas y
prácticas para ese propósito en particular.
● Modelo Vista Controlador (MVC): Django utiliza el patrón de diseño Modelo Vista
Controlador para separar la lógica de la aplicación en diferentes componentes, lo
que facilita la comprensión y el mantenimiento del código.
● Comunidad activa: Django tiene una comunidad muy activa y una gran cantidad de
recursos disponibles, lo que facilita el aprendizaje y la resolución de problemas.
9
Además, hay muchas librerías y plugins disponibles que se integran fácilmente con
Django.
Esquema A: codigo alto nivel → Se traducen todas las declaraciones de alto nivel a la vez
→ Instrucciones en bajo nivel → Ejecutar.
10
1. Lenguaje ensamblador:
1. Compilador:
2. Intérprete:
Consejo de programador:
Dado que el objetivo es desarrollar un software para diseñar modelos 3D que sea fácil de
usar y mantener en las escuelas, se recomienda elegir un lenguaje de alto nivel, ya que
ofrecen una mayor facilidad de programación, portabilidad y mantenimiento. Además, como
el rendimiento es una consideración importante en un software de diseño 3D, se aconseja
utilizar un compilador para mejorar el rendimiento en tiempo de ejecución. Algunos
lenguajes de alto nivel populares para el desarrollo de aplicaciones gráficas incluyen C++,
C# y Python.
11
13. ¿Cuál es la diferencia entre un compilador y un transpilador?
1. Compilador:
Un registro de activación (también conocido como marco de pila o stack frame en inglés) es
una estructura de datos en la memoria que se utiliza para controlar la ejecución de una
función o subrutina en un programa. Contiene información como los parámetros de entrada,
las variables locales y los valores de retorno.
12
palabras, es una copia del registro de activación en un momento específico durante la
ejecución del programa.
13
5.1 funciones
12.1 Sin embargo, decimos que se detectan de manera temprana, previo a la ejecución