0% encontró este documento útil (0 votos)
47 vistas15 páginas

Práctica Unidad 1

El documento presenta una práctica de la asignatura Lenguajes de Programación de la carrera Licenciatura en Sistemas de la Universidad Nacional de Entre Ríos. La práctica incluye preguntas sobre lenguajes de programación populares, dominios de aplicación, abstracciones de datos y control, y códigos para calcular el máximo común divisor en diferentes paradigmas como imperativo, funcional, lógico y orientado a objetos.

Cargado por

Julian Denis
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
47 vistas15 páginas

Práctica Unidad 1

El documento presenta una práctica de la asignatura Lenguajes de Programación de la carrera Licenciatura en Sistemas de la Universidad Nacional de Entre Ríos. La práctica incluye preguntas sobre lenguajes de programación populares, dominios de aplicación, abstracciones de datos y control, y códigos para calcular el máximo común divisor en diferentes paradigmas como imperativo, funcional, lógico y orientado a objetos.

Cargado por

Julian Denis
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 15

Práctica Unidad 1

● Universidad: Universidad Nacional de Entre Ríos


● Carrera: Licenciatura en Sistemas
● Asignatura: Lenguajes de Programación
● Actividad: Práctica Unidad 1
● Alumnos: Morán Facundo, Daniela Marqués
● Fecha de presentación: 11 abril 2023
1. Dada la siguiente definición de Lenguaje de Programación (LP),
tomada del libro Lenguajes de programación: principios y prácticas de
Kenneth C. Louden: “Un lenguaje de programación es un sistema
notacional para describir computaciones en una forma legible tanto para
la máquina como para el ser humano.” Explica los conceptos que
aparecen resaltados estableciendo relaciones con los conceptos de
abstracción e implementación de LP.

En la definición de Lenguaje de Programación proporcionada por Kenneth C. Louden,


podemos analizar los conceptos resaltados y establecer relaciones con los conceptos de
abstracción e implementación de LP:

● Sistema notacional: Un sistema notacional se relaciona con la abstracción, ya que


permite representar ideas complejas de una manera más simplificada y estructurada.
En el caso de los LP, el sistema notacional abstrae los detalles técnicos y las
especificaciones del hardware, permitiendo a los programadores centrarse en la
lógica y las estructuras de datos de un programa sin preocuparse por el
funcionamiento interno de la máquina.

● Describir computaciones: La descripción de computaciones también está


relacionada con la abstracción, ya que los LP permiten representar algoritmos y
estructuras de datos en una forma de alto nivel. Esto facilita la implementación de
programas al proporcionar una capa de abstracción que oculta la complejidad y las
particularidades de la arquitectura del hardware.

● Forma legible para la máquina: La legibilidad para la máquina se relaciona con la


implementación, ya que se refiere a la capacidad de una computadora para
interpretar y ejecutar el código fuente escrito en un LP. Los LP son convertidos a
lenguaje de máquina o código de bytes mediante compiladores o intérpretes, lo que
permite a la computadora ejecutar el programa. La implementación involucra la
traducción del código fuente de alto nivel a un formato que pueda ser ejecutado por
el hardware.

● 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.

2. Considerando siguientes rankings de Lenguajes de Programación: El


índice TIOBE (https://www.tiobe.com/tiobe-index/ ) es un indicador de la
popularidad de los lenguajes de programación. Es importante tener en
cuenta que el índice TIOBE no se refiere al mejor lenguaje de
programación o al lenguaje en el que se han escrito la mayoría de las
líneas de código. El índice de popularidad de lenguajes de
programación de PYPL (https://pypl.github.io/PYPL.html ), relaciona
popularidad con el número de búsquedas de tutoriales del lenguaje.
Utiliza Google Trends para conseguir los datos de las búsquedas. a)
Teniendo en cuenta los primeros 10 LPs de cada ranking indica: i. Entre
los LPs que aparecen en ambos índices, teniendo en cuenta lo
desarrollado en clase, ¿cuál es el dominio de aplicación predominante?
ii. Elige un LP que aparezca en un índice y no en el otro, y menciona
antecesores y predecesores del mismo. b) Para el LP ubicado en el
primer lugar de ambos rankings, brinda ejemplos de abstracciones de
datos y de control que provee. c) En el índice PYPL, dentro de los diez
primeros puestos aparecen los lenguajes JavaScript y TypeScript.
Explica brevemente la relación entre estos LPs. d) Para el índice TIOBE,
el lenguaje Ensamblador (Assembly) se encuentra dentro de los
primeros 15 lenguajes rankeados. Teniendo en cuenta el tipo de
lenguaje que es, ¿a qué consideras que debe su actual popularidad?

a) Teniendo en cuenta los primeros 10 LPs de cada ranking:

● 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.

● El lenguaje SQL aparece en el índice TIOBE pero no en el índice PYPL. SQL


(Structured Query Language) es un lenguaje de programación diseñado para
administrar y manipular bases de datos relacionales. Antecesores de SQL incluyen a
SEQUEL, que fue desarrollado en IBM en la década de 1970. En cuanto a los

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).

b) Python se encuentra en el primer lugar de ambos rankings. Ejemplos de


abstracciones de datos y control que provee Python son:

● Abstracciones de datos: Python incluye estructuras de datos de alto nivel como


listas, tuplas, diccionarios y conjuntos. Estas estructuras simplifican la manipulación
4.1
y almacenamiento de datos y permiten a los programadores escribir código más
limpio y eficiente.
● Abstracciones de control: Python provee estructuras de control como bucles for,
while, y condicionales if, elif, y else. Además, Python utiliza indentación para
delimitar bloques de código, lo que facilita la lectura y comprensión del flujo de
control en un programa.

c) La relación entre JavaScript y TypeScript es que TypeScript es un superset de


JavaScript. TypeScript extiende las capacidades de JavaScript al agregar tipos
estáticos opcionales y otras características, como la declaración de clases y la
implementación de interfaces. El código TypeScript se compila a JavaScript puro, lo
que significa que cualquier código JavaScript válido también es válido en
TypeScript. TypeScript fue desarrollado para mejorar la escalabilidad y la seguridad
de tipo en aplicaciones JavaScript de gran tamaño.

d) El lenguaje ensamblador (Assembly) se encuentra dentro de los primeros 15


lenguajes rankeados en el índice TIOBE. A pesar de ser un lenguaje de bajo nivel y
no ser tan fácil de leer y escribir como los lenguajes de alto nivel, su popularidad
puede deberse a varias razones, como:

● La necesidad de optimización y control detallado en áreas como el desarrollo de


sistemas embebidos, firmware o controladores de hardware.
● La creciente popularidad de la seguridad informática y la ingeniería inversa, donde el
conocimiento del lenguaje ensamblador es fundamental para analizar el
comportamiento de programas y vulnerabilidades.
● El interés en la educación y la investigación en ciencias de la computación, donde el
aprendizaje del lenguaje ensamblador ayuda a comprender cómo funciona el
hardware y cómo se ejecutan los programas a nivel de máquina.

3. Los siguientes códigos, escritos en diferentes paradigmas de


programación, calculan el máximo común divisor (mcd) de dos enteros:

Imperativo (ADA):

● Secuencia de instrucciones: El código en ADA muestra una secuencia de


instrucciones que se ejecutan paso a paso para calcular el máximo común divisor
(mcd).

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

● Inmutabilidad: En Haskell, las variables son inmutables, es decir, no cambian de


valor una vez que se les ha asignado uno.

● Recursión: El código en Haskell utiliza la recursión para calcular el mcd en lugar de


un bucle, lo cual es típico en programación funcional.

● Patrones de coincidencia: La función 'mcd' utiliza patrones de coincidencia para


especificar casos base (v == 0) y casos recursivos (otherwise).

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.

● Recursión: La recursión es utilizada para definir las relaciones lógicas en ProLog.

● Unificación y búsqueda: ProLog utiliza unificación y búsqueda para encontrar la


solución al problema (en este caso, el mcd).

Orientado a Objetos (Java):

● 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.

● Encapsulamiento: La variable 'value' está declarada como 'private', lo que garantiza


que solo se pueda acceder a ella a través de los métodos de la clase.

● Métodos: La lógica para calcular el mcd se encapsula en un método llamado 'mcd',


que se puede invocar en objetos de la clase 'IntWithMcd'.

4. Señala la principal diferencia en relación al concepto de variables en


los lenguajes funcionales y en los imperativos. ¿Qué ventajas y/o
desventajas puedes ver respecto a esta diferencia?

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.

La principal ventaja de las variables inmutables en los lenguajes funcionales es que se


eliminan las posibilidades de efectos secundarios no deseados, lo que hace que el código
sea más fácil de entender y depurar. Además, como las variables no cambian, el código
puede ser más fácil de razonar y analizar, ya que se puede confiar en que el valor de una
variable no se modificará en algún otro lugar del programa.

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.

En conclusión, la principal diferencia entre los lenguajes funcionales e imperativos en


relación al concepto de variables es que los lenguajes funcionales hacen uso de variables
inmutables, mientras que los lenguajes imperativos permiten variables mutables. Cada
enfoque tiene sus ventajas y desventajas, y la elección de un enfoque depende del
problema que se está resolviendo y del estilo de programación preferido del desarrollador.

5. Es más probable encontrar una estructura de bucle, como ser un


bucle while, ¿en un programa procedimental (imperativo/orientado a
objetos) o en un programa funcional? Justifica tu respuesta.

Es más probable encontrar una estructura de bucle en un programa procedimental


(imperativo/orientado a objetos) que en un programa funcional.
La programación procedimental se centra en la ejecución de procedimientos y funciones,
que se ejecutan secuencialmente, y utiliza variables y estructuras de control de flujo, como
bucles y condicionales, para controlar el flujo del programa. Por lo tanto, es común en este
paradigma el uso de estructuras de bucle, como el while, para iterar sobre un conjunto de
instrucciones mientras se cumple una condición.
Por otro lado, en la programación funcional, se enfatiza en la evaluación de expresiones y
funciones matemáticas. En este paradigma, la iteración se realiza utilizando funciones de
orden superior, como map, filter o reduce, que aplican una función a cada elemento de una
lista o colección. Aunque también se pueden utilizar bucles en la programación funcional, no
son tan comunes como en la programación procedimental, y se usan con menos frecuencia
debido al énfasis en la inmutabilidad de los datos y la transparencia referencial.
En resumen, mientras que los bucles son una herramienta común en la programación
procedimental para controlar el flujo del programa, en la programación funcional se enfatiza
en la evaluación de expresiones y funciones matemáticas, y se utilizan funciones de orden
superior en lugar de bucles para realizar la iteración.

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.

Si el LP trabaja con evaluación ansiosa (evaluación típica de los lenguajes imperativos),


primero se evaluaría el argumento de la función "q" para obtener el valor de 0 (5 - 5), y
luego se evaluaría la función "m" con un argumento de 15 dividido por 0, lo que provocaría
un error de división por cero.

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.

7. En un lenguaje funcional, la función f(x, y, z) se puede escribir como


(((g x) y) z), que se interpreta como g x da una función que se aplica a y.
El resultado es una función que se aplica a z.

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?

El principio de diseño de reusabilidad se relaciona más directamente con la abstracción de


alto nivel en la programación orientada a objetos. La reutilización de código es un objetivo
clave en la programación orientada a objetos, y se puede lograr a través de la creación de
clases y métodos abstractos que pueden ser utilizados en diferentes contextos y por
diferentes objetos.
La abstracción de alto nivel implica la creación de clases y métodos abstractos que
encapsulan conceptos generales y se pueden utilizar en diferentes situaciones. Estos
conceptos generales pueden ser aplicados a diferentes dominios de problema y
proporcionan una forma de crear código reutilizable y modular.
La creación de clases y métodos abstractos también ayuda a reducir la complejidad del
código al ocultar detalles innecesarios y permitir la creación de interfaces limpias y fáciles
de usar. Esto también facilita la colaboración entre desarrolladores y el mantenimiento del
código a largo plazo.
En resumen, el principio de diseño de reusabilidad se relaciona directamente con la
abstracción de alto nivel en la programación orientada a objetos, ya que la creación de
clases y métodos abstractos permite la creación de código reutilizable y modular.

9. Entornos de programación: a) ¿A qué se denomina entorno de


programación integrado (IDE, por sus siglas en inglés)? b)
Considerando el ranking de IDEs (Integrated Development
Environments) de marzo de 2023, publicado en
https://pypl.github.io/IDE.html: Para 2 (dos) de los IDEs rankeados
dentro de los diez primeros puestos, indaga sus características y
establece una comparación entre los mismos (considerando, por
ejemplo, lenguajes de programación que soporta, funcionalidades,
licencia de uso, entre otros aspectos). c) Consulta el ranking de ODEs
(Online Integrated Development Environments) brindado por PYPL de
marzo de 2023, en https://pypl.github.io/ODE.html: i. ¿Conoces alguno
de los entornos que aparecen en el ranking? Si es así, comenta
brevemente sus características (como ser, lenguaje/s de programación
que soporta, funcionalidades, entre otras). ii. ¿En qué situación/es
preferirías utilizar un ODE en lugar de un IDE?

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:

● Soporte para múltiples lenguajes de programación: VS Code soporta una amplia


variedad de lenguajes de programación, incluyendo JavaScript, Python, Java, C++,
entre otros.
● Amplia gama de extensiones: VS Code tiene una gran cantidad de extensiones
disponibles, lo que permite a los desarrolladores personalizar el entorno según sus
necesidades.
● Integración con Git: VS Code tiene una integración muy buena con Git, lo que facilita
el control de versiones y la colaboración en proyectos.

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.

c) En cuanto al ranking de ODEs de PYPL de marzo de 2023:

● 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.

● Un ODE podría ser preferible en situaciones en las que no se tiene acceso a un


ordenador con el software instalado, como en una computadora pública o en una
tableta. Además, los ODEs pueden ser una buena opción para proyectos más
pequeños que no requieren el poder y la flexibilidad de un IDE completo. Sin
embargo, para proyectos más grandes y complejos, un IDE local podría ser una
mejor opción debido a su mayor capacidad de personalización y rendimiento.

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.

a) En el ámbito de la ingeniería de software, un Framework es un conjunto de conceptos,


prácticas y herramientas que proporcionan una estructura para desarrollar aplicaciones de
software. Se trata de un esqueleto que proporciona una base sólida y estructurada para
desarrollar software, con el objetivo de facilitar el proceso de desarrollo, la reutilización de
código y la modularidad.

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.

c) Los Frameworks y los lenguajes de programación están estrechamente relacionados. De


hecho, muchos Frameworks están diseñados para ser utilizados con un lenguaje de
programación específico. Por ejemplo, el Framework Ruby on Rails está diseñado
específicamente para el lenguaje de programación Ruby. Sin embargo, algunos
Frameworks son más flexibles y pueden utilizarse con múltiples lenguajes de programación.

d) Django es un Framework de Python que se utiliza principalmente para desarrollar


aplicaciones web. Algunas de sus características son:

● 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.

● ORM (Mapeo Objeto-Relacional): Django tiene un ORM integrado que facilita la


interacción con la base de datos, lo que hace que sea más fácil de escribir y
mantener código para interactuar con la base de datos.

● Administrador de Django: Django viene con un administrador web incorporado que


proporciona una interfaz de usuario para administrar los datos de la aplicación, lo
que hace que sea más fácil para los desarrolladores realizar tareas como la creación
de usuarios o la administración de contenido.

● Autenticación y autorización: Django tiene un sistema de autenticación y autorización


incorporado que permite a los desarrolladores gestionar fácilmente la autenticación y
la autorización de los usuarios en la aplicación.

● 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.

11. ¿Con cuál de los siguientes esquemas se relaciona el modo de


implementación del lenguaje C? ¿y Python? Explica.

Esquema A: codigo alto nivel → Se traducen todas las declaraciones de alto nivel a la vez
→ Instrucciones en bajo nivel → Ejecutar.

Esquema B: Se traduce repetidamente una sentencia de alto nivel y se ejecutan las


instrucciones correspondientes en tiempo de ejecución → Vuelve a interpretar la siguiente.

El modo de implementación del lenguaje C se relaciona con el Esquema A: el código de alto


nivel se traduce de manera estática a instrucciones en bajo nivel antes de su ejecución. En
el caso de C, se utiliza un proceso de compilación para convertir el código fuente en un
archivo ejecutable que puede ser ejecutado por la máquina. Este proceso incluye la
traducción de todas las declaraciones de alto nivel a instrucciones en bajo nivel de una sola
vez, antes de que el programa sea ejecutado.
Por otro lado, el modo de implementación del lenguaje Python se relaciona con el Esquema
B: el código se traduce y se ejecuta en tiempo de ejecución. Python utiliza un proceso de
interpretación en el que cada sentencia de alto nivel se traduce y se ejecuta de forma
repetida en tiempo de ejecución. En otras palabras, cada sentencia se interpreta y se
ejecuta en orden, y luego se pasa a la siguiente sentencia para su interpretación y
ejecución.
En resumen, el modo de implementación del lenguaje C se relaciona con el Esquema A,
donde el código de alto nivel se traduce de manera estática antes de su ejecución, mientras
que el modo de implementación del lenguaje Python se relaciona con el Esquema B, donde
el código se traduce y se ejecuta repetidamente en tiempo de ejecución.

12. Considera la siguiente situación y responde la consigna: Se necesita


un software para diseñar modelos 3D que puedan utilizar los
estudiantes en las escuelas. Para desarrollar este sistema el
programador puede utilizar un lenguaje ensamblador o un lenguaje de
alto nivel. Además, el programador tiene que elegir el tipo de traductor
que va a utilizar. Indica las consecuencias de cada elección y aconseja
al programador sobre las opciones que le convendría elegir.

En esta situación, el programador debe elegir entre un lenguaje ensamblador y un lenguaje


de alto nivel, así como el tipo de traductor que utilizará. A continuación, se describen las
consecuencias de cada elección y se proporciona un consejo al programador.

10
1. Lenguaje ensamblador:

● Consecuencias: Los lenguajes ensambladores están más cercanos al hardware y,


por lo tanto, son más difíciles de aprender y de programar. Los programas escritos
en lenguaje ensamblador son menos portables, ya que están diseñados
específicamente para un tipo de procesador. Además, suelen requerir más tiempo y
esfuerzo para desarrollar y mantener.

2. Lenguaje de alto nivel:

● Consecuencias: Los lenguajes de alto nivel son más fáciles de aprender y de


programar, ya que están diseñados para ser más comprensibles por los humanos.
Los programas escritos en lenguajes de alto nivel son más portables y tienen un
tiempo de desarrollo y mantenimiento menor. Sin embargo, estos lenguajes pueden
tener un rendimiento ligeramente inferior al de los lenguajes ensambladores, ya que
tienen una capa adicional de abstracción.

En cuanto a los traductores, el programador debe elegir entre un compilador y un


intérprete:

1. Compilador:

● Consecuencias: Un compilador convierte el código fuente en un código de máquina


o en un código intermedio antes de su ejecución. Esto permite un mejor rendimiento
en tiempo de ejecución, pero puede tener un proceso de compilación más lento.
Además, los errores en 12.1
el código no se detectan hasta que se intenta compilar el
programa.

2. Intérprete:

● Consecuencias: Un intérprete ejecuta el código fuente directamente, sin necesidad


de compilarlo previamente. Esto permite un proceso de desarrollo más rápido, ya
que los errores en el código se detectan inmediatamente. Sin embargo, el
rendimiento en tiempo de ejecución suele ser inferior al de un programa compilado.

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?

Un compilador y un transpilador son dos tipos de traductores de código que transforman el


código fuente de un lenguaje a otro. Aunque ambos cumplen una función similar, tienen
diferencias fundamentales en su enfoque y propósito:

1. Compilador:

● Un compilador toma el código fuente escrito en un lenguaje de programación de alto


nivel y lo transforma en código de máquina o en un código intermedio (como
bytecode) que es específico para un sistema o arquitectura. El código resultante se
ejecuta en el hardware de la computadora, proporcionando un rendimiento
optimizado.
● Ejemplos de compiladores incluyen el compilador de C++ (GCC) y el compilador de
Java (javac).

2. Transpilador (también conocido como "compilador de origen a origen" o


"compilador a nivel de fuente"):

● Un transpilador toma el código fuente escrito en un lenguaje de programación y lo


transforma en otro lenguaje de programación, generalmente de un nivel de
abstracción similar. El propósito de un transpilador es mejorar la compatibilidad,
facilitar el uso de características modernas en lenguajes más antiguos o permitir la
escritura de código en un lenguaje y su ejecución en otro.
● Ejemplos de transpiladores incluyen Babel, que convierte el código JavaScript
moderno (ES6+) en una versión compatible con navegadores más antiguos (ES5), y
TypeScript, que transforma el código TypeScript en JavaScript.

En resumen, la principal diferencia entre un compilador y un transpilador radica en su


propósito y en el tipo de conversión de código que realizan. Mientras que un compilador
transforma el código de un lenguaje de alto nivel a un lenguaje de bajo nivel (código de
máquina o intermedio) para mejorar el rendimiento, un transpilador convierte el código entre
dos lenguajes de programación de similar nivel de abstracción, generalmente para mejorar
la compatibilidad o permitir el uso de características específicas.

14. En cuanto a la administración de memoria en ejecución, ¿cuál es la


diferencia entre un registro de activación y una instancia registro de
activación?

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.

Una instancia de registro de activación es una ocurrencia específica de un registro de


activación en un momento determinado durante la ejecución del programa. En otras

12
palabras, es una copia del registro de activación en un momento específico durante la
ejecución del programa.

La principal diferencia entre un registro de activación y una instancia de registro de


activación es que el primero es una plantilla o un esquema para almacenar información
durante la ejecución de una función o subrutina, mientras que el segundo es una versión
específica de ese registro de activación que se crea cada vez que se llama a la función o
subrutina.

En resumen, un registro de activación es una estructura de datos que define el esquema de


información que se necesita para controlar la ejecución de una función o subrutina, mientras
que una instancia de registro de activación es una ocurrencia específica de esa estructura
de datos en un momento determinado durante la ejecución del programa.

13

Powered by TCPDF (www.tcpdf.org)


Índice de comentarios

4.1 Es conveniente identificar en básica, estructuradas y unitarias

5.1 funciones

12.1 Sin embargo, decimos que se detectan de manera temprana, previo a la ejecución

Powered by TCPDF (www.tcpdf.org)

También podría gustarte