SlideShare una empresa de Scribd logo
1 de 39
Universidad de Panamá
Facultad de Informática, Electrónica y Comunicación
Integrantes:
Oloninikinya Castro 10-711-1765
Melanie Castro 8-943-2211
Gloris Cedeño 9-754-699
Diego Cedeño 8-900-2261
Edwin Cueto 8-936-1200
Informe de Laboratorio N°4
Profesora: Marelisa Saldarriaga
Profesor de Laboratorio: Ariel Vernaza
Ingeniería Informática-Tercer Año
2020
1
ÍNDICE
Universidad de Panamá................................................................................................................ 0
Objetivo.......................................................................................................................................... 2
Fortran........................................................................................................................................... 3
ALGOL .......................................................................................................................................... 7
Pascal.............................................................................................................................................. 9
C.................................................................................................................................................... 17
Ada................................................................................................................................................ 21
C++ ............................................................................................................................................... 28
Java............................................................................................................................................... 27
C#.................................................................................................................................................. 34
2
Objetivo
Evaluar los lenguajes de programación según los criterios de evaluación
Metodología: realizar la evaluación de los siguientes lenguajes de programación deberán
revisar un fragmento de código y calificar del 0 al 3 el cumplimiento del criterio de
evaluación y sustentar con evidencia tomando en cuenta la lección su respuesta. Deberán
presentar sus resultados en el programa slideshire. Los criterios de calificación de los
lenguajes de programación serían así:
 0: No cumple
 1: Apenas cumple
 2: Cumple, pero con observaciones
 3: Cumple
3
Fragmento del código en Lenguaje FORTRAN
Criterio de
Evaluación
Fortran
Expresividad, Puntuación: 1
Sustentación:
ocultan los detalles del procesador, ofreciendo primitivas de control
de flujo (bucles, condicionales, …), declaración de variables y
vectores, etc.
Bien definido Puntuación 3:
Es un lenguaje que está bien definido y cada línea del programa
forma parte de una sentencia que describe una instrucción a ser
llevada a cabo y tales sentencias se siguen en el orden que están
escritas. E
4
Tipos de estructura
de datos
Puntuación 3:
Sustentación:
El lenguaje fue ampliamente adoptado por los científicos para
escribir programas numéricamente intensivos, que incentivó a los
escritores de compiladores a producir compiladores que pudieran
generar un código más rápido y más eficiente. La inclusión en el
lenguaje de un tipo de datos y de la aritmética de números
complejos amplió la gama de aplicaciones para las cuales el
lenguaje se adaptaba especialmente e hizo al FORTRAN
especialmente adecuado para aplicaciones técnicas tales como la
ingeniería eléctrica.
Modularidad Puntuación 3:
Sustentación:
impone una disciplina a la construcción de programas, que tiene
como pilar la descomposición del programa en módulos: porciones
de código que cumplen funciones diferenciadas.
Facilidades de
entrada y salida
Puntuación: 2
Sustentación:
En Fortran, hay dos maneras de realizar entradas/salidas: •
entrada/salida dirigida por lista. En este caso, el formato de los datos
depende de sus tipos (enteros, reales, etc.) y del computador. Se dice
que es una entrada/salida con formato libre. • entrada/salida con
formatos. El programador define la manera exacta en que quiere
leer/escribir los datos.
https://ocw.unican.es/pluginfile.php/1904/course/section/2188/Curs
o-Fortran-7.pdf
5
Eficiencia Puntuación: 3
Sustentación:
Es un lenguaje muy eficiente para un tipo de problemas en concreto
para el cálculo matemático.
Transportabilidad Puntuación 3:
Sustentación:
Uno de los mayores beneficios potenciales de FORTRAN 90
era la transportabilidad entre SIMD y las supercomputadoras
paralelas/vectoriales. Conforme ambas arquitecturas fueron
reemplazadas con multiprocesadores con memoria uniforme
compartida, FORTRAN 77 se convirtió en el lenguaje que
ofrecía la máxima transportabilidad entre las computadoras
usadas típicamente por los programadores de cómputo de
alto rendimiento.
Generalidades Puntuación 3:
es un lenguaje de programación de alto nivel de propósito general,2
procedimental3 e imperativo, que está especialmente adaptado al
cálculo numérico y a la computación científica.
Imperativo Puntuación: 3
Sustentación:
contiene los comandos a ser ejecutados en el momento en que corre
un programa. A las instrucciones imperativas de FORTRAN se les
denomina “sentencias ejecutables”.
6
Lógicos
(Declarativos)
Puntuación 3:
Sustentación:
describe las áreas de datos, sus longitudes (tipos) y sus valores
iniciales. Las instrucciones declarativas existen en la mayor parte de
los lenguajes estructurados, aunque se les llama de maneras
distintas. En FORTRAN se les denomina “sentencias no
ejecutables”.
Cáceres, Abdiel, 2004, Monterrey Ciudad de México, México.
http://profesores.fi-
b.unam.mx/ing_gpemn/cpi/basica/pdfs/Fortran4.pdf
Funcionales Puntuación 3
Sustentación:
Ha estado en uso continuo por más de medio siglo en áreas de
cómputo intensivo tales como la predicción numérica del tiempo,
análisis de elementos finitos, dinámica de fluidos computacional
(CFD), física computacional y química computacional.
7
ALGOL
Fragmento del código a evaluar (ALGOL 68)
proc absmax=(ref[]real a)real:
begin
int i, k; real y:=0;
comment De la matriz a se toma el elemento con el valor absoluto mayor y se coloca en y. x
Los subíndices del elemento se colocan en i y k;peme comment
i:= k:= 1⌊a;
for p from 1⌊a by 1 to 1⌈a do
for q from 2⌊a by 1 to 2⌈a do
if abs a[p, q] > y then
y:= abs a[p, q];
i:= p; k:= q
fi
od
od;
y
end
8
IMPERATIVO
Está bien programado sin embargo se necesitaba mejorar la forma de la secuencia de la
programación.
Criterio de Evaluación ALGOL
Expresividad Puntuación: 0
Bien definido Puntuación: 1
transportabilidad Puntuación: 1
tipos de estructuras de datos Puntuación: 0
modularidad Puntuación: 3
facilidades de entrada y salida Puntuación: 1
eficiencia Puntuación: 0
generalidades Puntuación: 1
imperativo Puntuación: 2
lógicos (declarativos) Puntuación: 1
funcionales Puntuación: 1
9
Criterio de
Evaluación
Pascal
Expresividad Puntuación:3
Sustentación: Pascal se caracteriza por ser un lenguaje de
programación estructurado fuertemente tipificado. Esto implica
que: El código esta dividido en porciones fácilmente legibles
llamadas funciones o procedimientos. De esta forma Pascal
facilita la utilización de la programación estructurada en
oposición al antiguo estilo de programación monolítica. El tipo
de dato de todas las variables debe ser declarado previamente
para que su uso quede habilitado.
Bien definido Puntuación: 3
Sustentación: Object Pascal (Embarcadero Delphi) todavía se
utiliza para el desarrollo de aplicaciones Windows, pero también
tiene la capacidad de compilación cruzada del mismo código
para Mac, iOS y Android. Otra versión multiplataforma llamada
Free Pascal, con el IDE Lazarus, es popular entre los usuarios de
Linux, ya que también ofrece desarrollo escribe una vez,
compila para todos (write once, compile anywhere).
CodeTyphon es una distribución de Lazarus con más paquetes
preinstalados y compiladores cruzados.
10
Tipos de estructura
de datos
Puntuación:
Sustentación: consiste en dotar al programa de un cierto orden
dividiéndolo en bloques independiente uno de otros y, que se
encarga de cada una de las tareas necesarias. Esto hace un
programa fácil de leer y modificar.
11
Modularidad Puntuación: 2
Sustentación: Programación modular
– Es una técnica para escribir programas grandes y complejos
– Se basa en subdividir el programa en secciones más simples.
Cada sección se llama módulo y realiza una única tarea
• Módulos
– Cada módulo tiene un nombre (identificador) y consiste en un
conjunto de sentencias agrupadas mediante un begin y un end
– El módulo (grupo de sentencias) se ejecuta cuando se escribe
su
nombre en el programa
– Pascal utiliza dos tipos de módulos: procedimientos y
funciones
• Procedimientos: Agrupación de sentencias que efectúan una
tarea
específica a partir de una serie opcional de datos de entrada
(parámetros).
– Ejemplo: writeln (valor_entrada);
• Funciones: Agrupación de sentencias que efectúan una tarea
que da
como resultado un valor específico a partir de una serie de datos
de
entrada (parámetros)
– Ejemplo: valor_salida:=sqrt(valor_entrada);
12
Facilidades de
entrada y salida
Puntuación: 3
Sustentación: Una sentencia de entrada en PASCAL toma una de
las siguientes dos formas: Read (lista-de-variables) Read
(imput, lista-de-variables)
Y La sentencia básica de salida en PASCAL toma una de las dos
formas Write (lista-de-salida) Write (output, lista-de-
salida)Donde la lista de salida es una lista de valores a ser
producidos.
13
Eficiencia Puntuación:
Sustentación:
Se trata de un lenguaje de propósito general, esto quiere decir
que se puede emplear para construir todo tipo de aplicaciones.
En la práctica también quiere decir que se trata de un lenguaje no
diseñado para desarrollar ningún tipo específico de aplicaciones.
Pero el PASCAL es especialmente útil para algo: para la
enseñanza de buenos modos de programación. El PASCAL es
hoy en día el lenguaje más usado para la enseñanza de la
programación por varios motivos:
• Posee unas reglas sencillas de sintaxis.
• Es un lenguaje muy estructurado.
• Realiza una comprobación exhaustiva de tipos de datos.
14
Transportabilidad Puntuación: 3
Sustentación: Object Pascal (Embarcadero Delphi) todavía se
utiliza para el desarrollo de aplicaciones Windows, pero también
tiene la capacidad de compilación cruzada del mismo código
para Mac, iOS y Android. Otra versión multiplataforma llamada
Free Pascal, con el IDE Lazarus, es popular entre los usuarios de
Linux, ya que también ofrece desarrollo escribe una vez,
compila para todos (write once, compile anywhere).
CodeTyphon es una distribución de Lazarus con más paquetes
preinstalados y compiladores cruzados.
Generalidades Puntuación: 3
Sustentación:
El código está dividido en porciones fácilmente legibles
llamadas funciones o procedimientos.
Imperativo Puntuación: 3
Sustentación:
El paradigma imperativo debe su nombre al papel dominante que
desempeñan las sentencias imperativas, es decir aquellas que
indican realizar una determinada operación que modifica los
datos guardados en memoria.
15
Lógicos
(Declarativos)
Puntuación: 3
Sustentación: es la técnica utilizada para desarrollar
instrucciones en una secuencia para lograr determinado objetivo.
Es la organización y planificación de instrucciones en un
algoritmo, con el objetivo de tornar visible la implementación de
un programa o software.
Funcionales Puntuación: 3
Sustentación:
Los lenguajes funcionales priorizan el uso de recursividad y
aplicación de funciones de orden superior para resolver
problemas que en otros lenguajes se resolverán mediante
estructuras de control (por ejemplo, ciclos). Muchos lenguajes de
programación funcionales pueden ser vistos como elaboraciones
del cálculo lambda.
16
Fragmento del código en el Lenguaje C
17
Criterio de
Evaluación
C
Expresividad Puntuación: 2
Sustentación:
siempre fue distinguido como altamente expresivo y
potencialmente muy económico dada su reducida cantidad de
palabras clave y el poder de algunos de sus operadores (por
ejemplo, de los punteros.) En la actualidad, sin embargo, es
frecuente el deseo de soportar estructuras de programación cada
vez más complejas (aunque con frecuencia con los mismos
algoritmos) con lo cual las implementaciones en lenguaje C
tienden a tornarse oscuras (e inseguras) frente a equivalentes en
otros lenguajes.
Bien definido Puntuación: 2
Sustentación:
el principal problema radica en la gran cantidad de aspectos que
son dejados a criterio del implementador, entre los cuales
destaca el tamaño de los tipos de datos.
Tipos de estructura
de datos
Puntuación: 2
Sustentación:
proporciona mecanismos que actualmente se consideran
rudimentarios para proporcionar tipos de datos estructurados.
Las estructuras (y uniones) se suelen utilizar para definir tipos
complejos constituidos a partir de otros más simples (que a la
vez pueden ser estructuras y/o uniones) con la posibilidad de
crear identificadores auxiliares que simplifican la notación
(typedef.)
18
Modularidad Puntuación: 2
Sustentación:
proporciona sólo dos niveles: componentes visibles dentro del
archivo de código fuente, y componentes visibles globalmente
(concretamente, funciones y variables.)
Facilidades de
entrada y salida
Puntuación: 2,
Sustentación:
no proporciona instrucciones de I/O salvo mediante funciones
de su "librería estándar", la cual fue diseñada en gran medida
para aprovechar las facilidades del sistema de archivos Unix.
En ese sentido, las funciones de I/O proporcionan acceso
secuencial byte a byte o bloque a bloque, así como
desplazamientos arbitrarios en la posición de lectura/escritura;
esto en realidad depende de las facilidades inherentes al sistema
operativo, pero están presentes en prácticamente todo sistema
comercial moderno.
Eficiencia Puntuación: 3
Es un lenguaje potente y eficiente, permitiendo obtener
programas rápidos y compactos.
19
Transportabilidad Puntuación: 3
Sustentación:
ha proporcionado como parte de la distribución del sistema
operativo Unix (aunque en ocasiones, con un costo adicional)
siempre siguiendo los lineamientos de sus creadores (K&R) por
lo que es reconocido como uno de los lenguajes más difundidos
y portables de la historia, al menos, hasta los años 80.
Generalidades Puntuación: 2
Sustentación:
suele ser utilizado para construir componentes básicos o de bajo
nivel (notablemente, el kernel de muchos sistemas operativos).
Imperativo Puntuación: 3
Sustentación:
C es muy concretos y trabaja cerca del sistema, de esta forma,
el código es, por un lado, fácilmente comprensible, pero, por el
otro, requiere muchas líneas de texto fuente para describir lo
que en los lenguajes de la programación declarativa se consigue
con solo una parte de las instrucciones.
20
Lógicos
(Declarativos)
Puntuación: 1
Sustentación:
Este lenguaje es más imperativo, porque los lenguajes
declarativos no dicen cómo hacer una cosa, sino, más bien qué
cosa hacer, a diferencia del lenguaje imperativo.
Funcionales Puntuación 3:
Sustentación:
Un programa funcional está constituido enteramente por
funciones; el programa principal es una función que toma como
argumento la entrada al programa y genera la salida del
programa como su resultado.
Gonzales, Fabio, Colombia, Colombia
file:///C:/Users/nilke/Desktop/21044-71292-1-PB.pdf
21
Criterio de
Evaluación
Ada
Expresividad Puntuación: 3
Sentencia:
Es bastante legible incluso para personas que no conocen el
lenguaje. Es un lenguaje que no escatima en la longitud de las
palabras clave, en la filosofía de que un programa se escribe
una vez, se modifica decenas de veces y se lee miles de veces
(legibilidad es más importante que rapidez de escritura).
Bien definido Puntuación: 3
Sustentación: Es un lenguaje multipropósito, orientado a
objetos y concurrente, pudiendo llegar desde la facilidad de
Pascal hasta la flexibilidad de C++.
22
Tipos de estructura
de datos
Puntuación: 3
Sustentación: La parte declarativa incluye las declaraciones de
cualquier objeto. Puede contener definiciones de variables y
procedimientos.
· Tipo integer: Representa una secuencia de uno o más
dígitos. Ada permite que cualquiera de los dígitos (excepto
el primero) esté precedido por el carácter “_” para dar
legibilidad al programa.
· Tipo flotante: se distinguen por la presencia de un
punto decimal. Pueden incluir un exponente.
· Tipo Boolean: Los valores booleanos están denotados
por unos de dos literales predefinidos: true y false.
· Tipo Character: Los valores de este tipo representan
valores ASCII. Son caracteres encerrados entre comillas
simples.
· Tipo string: todos los tipos anteriores son tipos
escalares, esto es, que tiene valores que no
pueden ser divididos en partes más pequeñas. Ada tiene un tipo
predefinido que es un tipo
compuesto, el tipo String, que consiste de una secuencia de
valores character.
Un literal string es una secuencia de cero, o más caracteres
encerrados entre comillas dobles.
23
Modularidad Puntuación: 2
Sustentación:
El objetivo anterior se puede conseguir dividendo un programa
en partes, cada una de ellas siendo un grupo de elementos, de
forma que:
I Cada elemento de un grupo esta fuertemente relacionado con
otros elementos de dicho grupo.
I Las dependencias entre elementos de grupos distintos son las
menores posibles, y en cualquier caso están bien documentadas.
I Cada parte puede ser reutilizable en mas de un programa
24
Facilidades de
entrada y salida
Puntuación: 3
Sentencia:
Las operaciones básicas de entrada/salida de Ada se encuentran
definidas en la librería estándar Text_IO que habrá que incluir
en la cláusula de contexto de una unidad de programa que
pretenda usarlas:
With Text_Io;
Use Text_Io;
También se puede realizar entrada/salida de valores del tipo
predefinido Integer y sus subtipos usando el paquete no
genérico Ada. Integer_Text_Io; y del tipo predefinido Float y
sus subtipos usando el paquete no genérico Ada. Float_Text_Io
with Ada.Integer_Text_Io, Ada. Float_Text_Io;
use Ada. Integer_Text_Io, Ada. Float_Text_Io;
25
Eficiencia Puntuación:
Sentencia:
Es bastante legible incluso para personas que no conocen el
lenguaje. Es un lenguaje que no escatima en la longitud de las
palabras clave, en la filosofía de que un programa se escribe
una vez, se modifica decenas de veces y se lee miles de veces
(legibilidad es más importante que rapidez de escritura).
Transportabilidad Puntuación: 3
Sustentación: Se puede obtener mayor transportabilidad y
mejor mantenimiento si se pueden separar los detalles de la
representación de los datos y las especificaciones de las
operaciones lógicas sobre los mismos.
Generalidades Puntuación: 3
Sustentación: es un lenguaje de programación orientado a
objetos y fuertemente tipado de forma estática que fue diseñado
por Jean Ichbiah de CII Honeywell Bull por encargo del
Departamento de Defensa de los Estados Unidos. Es un
lenguaje multipropósito, orientado a objetos y concurrente,
pudiendo llegar desde la facilidad de Pascal hasta la flexibilidad
de C++.
26
Imperativo Puntuación: 3
Sustentación:
Los lenguajes de programación imperativa son como unas
instrucciones paso a paso (cómo) redactadas para el ordenador.
Describen de forma explícita qué pasos deben llevarse a cabo y
en qué secuencia para alcanzar finalmente la solución deseada.
Lógicos
(Declarativos)
Puntuación:
Sustentación: En Ada, todo el programa es un único
procedimiento, que puede contener subprogramas
(procedimientos o funciones). Cada sentencia se cierra con end
qué_cerramos. Es un modo de evitar errores y facilitar la
lectura. No es necesario hacerlo en el caso de subprogramas,
aunque todos los manuales lo aconsejan y casi todos los
programadores de Ada lo hacen.
Funcionales Puntuación: 2
Sustentación:
Un programa en estos lenguajes consiste en una especificación
de la función recursiva que queremos calcular, junto con los
argumentos sobre los que se aplica.
27
Fragmento del código en Lenguaje C++
LÓGICOS
Le falta pulir un poco lo que sería la programación funcional, programación con restricciones,
programas DSL e híbridos.
Criterio de Evaluación
Java
28
Criterio de Evaluación
C++
Expresividad Puntuación: 3
Bien definido Puntuación: 3
transportabilidad Puntuación: 3
tipos de estructuras de datos Puntuación: 1
modularidad Puntuación: 3
facilidades de entrada y salida Puntuación: 3
eficiencia Puntuación: 3
generalidades Puntuación: 3
imperativo Puntuación: 3
lógicos (declarativos) Puntuación: 2
funcionales Puntuación: 3
29
Expresividad
Puntuación: 3
Sustentación:
El lenguaje de programación expresivo permite expresar con
facilidad procesos o estructuras complejas.
Por lo tanto, la expresividad se define como la capacidad de
decir ideas en cómputo, ayudado a través de las estructuras de
datos que el lenguaje que uses tiene.
Bien definido
Puntuación: 3
Sustentación:
Desde el punto de vista bien definido quiere decir que el
lenguaje cumple con lo necesario a lo que está orientado a
objetos e imperativo.
30
Tipos de estructura de
datos
Puntuación: 3
Sustentación:
Se caracterizan por poder almacenar un único valor. Salvo este
reducido conjunto de tipos de datos primitivos, que facilitan el
trabajo con números, caracteres y valores booleanos, todos los
demás tipos de Java son objetos, también llamados tipos
estructurados o Clases.
Double dinero;
Int edad;
Float numero;
String Nombre;
Modularidad
Puntuación: 3
Sustentación:
Java hace uso a esta metodología ya que se basa en la
agrupación de procedimientos, funciones o subrutinas en
bloques, paquetes que quedan bien organizados.
31
Facilidades de entrada
y salida
Puntuación: 2
Sustentación:
Los programas necesitan comunicarse con su entorno, tanto
para recoger datos e información que deben procesar, como
para devolver los resultados obtenidos.
Eficiencia
Puntuación: 3
Sustentación:
Depender de parámetros cómo cuál es la plataforma sobre la
que se ejecuta, la versión de las librerías, la versión del
compilador/intérprete/máquina virtual y los parámetros de
optimización que se le suministran.
Transportabilidad
Puntuación: 2
Sustentación:
La Transportabilidad/portabilidad de Java le permite estar en
dispositivos desde celulares Android, Ordenadores, entre otros.
Java no se compila habitualmente en código nativo, sino en
bytecode.
32
Generalidades
Puntuación: 3
Sustentación:
Java es un lenguaje de programación sencillo y a la vez
potente, que permite crear cualquier tipo de aplicación de
propósito general.
Imperativo
Puntuación: 3
Sustentación:
En la programación se considera imperativo a los lenguajes
que calculan un conjunto de instrucciones que establecen
explícitamente como se debe manipular la información digital
presente en memoria o como se debe recoger/ enviar la
información desde/hacia los dispositivos.
33
Lógicos (Declarativos)
Puntuación: 2
Sustentación:
Nos permite crear programas más compactos, reutilizables,
poco a poco se acostumbrará esto en Java
Observación:
Dependiendo del punto de vista en el que se utilice, Java está
perfectamente equilibrado.
Funcionales
Puntuación: 2
Sustentación:
En Java 8 se proporciona la clase Function la cual acepta el
paramtero y la clase BiFunction acepta dos.
Observación:
Desde mi punto de vista Java tiene un buen soporte para ello.
Sin embargo, muchas veces no se tiene muy claro cómo
aplicarlo.
34
Criterio de
Evaluación C#
Expresividad,
Puntuación: 3, cumple con los requerimientos de esta característica.
Sustentación:
Un lenguaje se considera expresivo cuando:
Es bastante fácil aprender, la gran mayoría de los desarrolladores que lo utilizan pueden ser
muy productivos; e igualmente expresivo en casi todo su dominio de utilidad. Esto
concuerda con la definición de expresividad trabajada en clase, la cuál citamos
“expresividad es la facilidad con la cual un lenguaje puede expresar procesos y estructuras
complejas”. Características que promueven su rápido aprendizaje e implementación al
utilizar expresiones cortas y claras para representar ideas.
Para medir eso, tomamos en cuenta el rango Inter cuartil (IQR; la distancia entre los
percentiles 25 y 75) como un acercamiento para estos dos criterios, y clasifiquemos los
lenguajes a través del mismo. Adjuntamos una imagen obtenida de los benchmarks de
expresividad de diversos lenguajes de programación, donde se observa a C# clasificado
como uno de los lenguajes más expresivos, contando con esta información aseguramos que
ambos criterios anteriormente mencionados se cumplen.
http://dberkholz-
media.redmonk.com/dberkholz/files/2013/03/expressiveness_by_iqr_weighted2.png
Por lo tanto, comprobamos mediante esta clasificación que C# cumple con las
características evaluadas de expresividad y por consecuente se considera un lenguaje
altamente expresivo.
Bien definido
El siguiente criterio de evaluación es “Bien definido”, y trata sobre que el flujo del
programa lleve a un resultado. Los lenguajes de programación que cuentan con este criterio
manejan paradigmas como: imperativos, declarativos y orientación a objetos.
Puntuación: 3, cumple con los requerimientos de la característica
Sustentación:
En el caso de C# el paradigma implementado es orientado a objetos, al tener un paradigma
que define al lenguaje se considera “bien definido”. C# es un lenguaje de programación que
se ha diseñado para generar diversas aplicaciones que se ejecutan en .NET Framework.
C# proporciona compatibilidad completa para la programación orientada a objetos incluida
la abstracción, la encapsulación, la herencia y el polimorfismo. Todas estas características
validan que C# cumple con los criterios evaluados en el paradigma de programación
orientado a objetos.
Tipos de
estructura de
datos
En Informática, una estructura de datos es una forma particular de organizar datos en una
computadora para que puedan ser utilizados de manera eficiente. Diferentes tipos de
estructuras de datos son adecuados para diferentes tipos de aplicaciones, y algunos son
altamente especializados para tareas específicas.
Puntuación: 2, cumple, pero con observaciones
35
Sustentación:
Los tipos de estructura tienen semántica de valores. Es decir, una variable de un tipo de
estructura contiene una instancia del tipo. De forma predeterminada, los valores de variable
se copian al asignar, pasar un argumento a un método o devolver el resultado de un
método. En el caso de una variable de tipo de estructura, se copia una instancia del
tipo. Para más información, vea Tipos de valor.
Normalmente, los tipos de estructura se usan para diseñar tipos de pequeño tamaño
centrados en datos que proporcionan poco o ningún comportamiento. Por ejemplo, en .NET
se usan los tipos de estructura para representar un número (entero y real), un valor
booleano, un carácter Unicode, una instancia de tiempo. Si le interesa el comportamiento de
un tipo, considere la posibilidad de definir una clase. Los tipos de clase tienen semántica de
referencias. Es decir, una variable de un tipo de clase contiene una referencia a una
instancia del tipo, no la propia instancia.
Dado que los tipos de estructura tienen semántica del valor, le recomendamos que defina
tipos de estructura inmutables.
Al diseñar un tipo de estructura, tiene las mismas funciones que con un tipo de clase, con
las siguientes excepciones:
 No se puede declarar un constructor sin parámetros. Cada tipo de estructura ya
proporciona un constructor sin parámetros implícito que genera el valor
predeterminado del tipo.
 No se puede inicializar una propiedad o un campo de instancia en su
declaración. Pero se puede inicializar un campo static o const, o una propiedad
estática en su declaración.
 Un constructor de un tipo de estructura debe inicializar todos los campos de
instancia del tipo.
 Un tipo de estructura no puede heredar de otro tipo de estructura o clase ni
puede ser la base de una clase. Pero un tipo de estructura puede
implementar interfaces.
 No se puede declarar un finalizador dentro de un tipo de estructura.
Modularidad,
La modularidad es la capacidad que tiene un sistema de ser estudiado, visto
o entendido como la unión de varias partes que interactúan entre sí y que trabajan para
alcanzar un objetivo común, realizando cada una de ellas una tarea necesaria para la
consecución de dicho objetivo. Esta es la definición estudiada en clase.
Puntuación: 3, cumple con los requisitos de la característica
Sustentación:
Presentamos la definición de los subprogramas o funciones aplicables para C y todos sus
derivados:
36
 Cada "trozo de programa" independiente será más fácil de programar, al realizar una
función breve y concreta.
 El "programa principal" será más fácil de leer, porque no necesitará contener todos
los detalles de cómo se hace cada cosa.
 Evitaremos mucho código repetitivo.
 Podremos repartir el trabajo, para que cada persona se encargue de realizar un "trozo
de programa", y finalmente se integrará el trabajo individual de cada persona
(aunque para proyectos realmente grandes, pronto veremos una alternativa que hace
que el reparto y la integración sean más sencillos).
Esos "trozos" de programa son lo que suele llamar "subrutinas", "procedimientos" o
"funciones". En el lenguaje C y sus derivados (entre los que está C#), el nombre que más se
usa es el de funciones. Conociendo estas características podemos concluir que cumple con
el objetivo de la modularidad, por lo tanto el programa tiene esta propiedad.
Adjuntamos video donde se utiliza la modularidad en C#:
https://videosinformaticablog.wordpress.com/tutorial-curso-c-7-modularidad-y-
encapsulamiento/
Facilidades de
entrada y salida,
Puntuación: 3, cumple con los requisitos de la característica.
Sustentación:
En C#, la entrada y la salida de datos se pueden manejar a través de los métodos de la clase
Console.
Entrada de datos desde el teclado.
Para la entrada de datos por medio del teclado se pueden utilizar los métodos Read() y
ReadLine() de la clase Console.
Ejemplos:
System.Console.Read( ) ; // Lee el siguiente carácter desde el flujo de la entrada estándar.
System.Console.ReadLine( ) ; // Lee la siguiente línea de caracteres desde el flujo de la
entrada estándar.
Salida de datos hacia la pantalla.
La salida de datos hacia la pantalla se puede realizar utilizando los métodos Write y
WriteLine( ) de la clase Console.
Estas funcionalidades nos demuestran que existe la facilidad de entrada y salida de datos en
C#.
Eficiencia
El criterio de evaluación eficiencia, se refiere a que tan rápido se ejecuta un programa.
Puntuación: 3, cumple con los requerimientos de la característica
Sustentación:
37
C# mantiene una velocidad de ejecución bastante buena con respecto a otros lenguajes que
son considerados eficientes. Como prueba adjuntamos este benchmark:
Es destacable como C# es el más rápido con 2.01, no tengo ni idea de si eso es así por la
implementación de Mono, del lenguaje en sí, o si es que no he hecho bien el benchmark en
C# pero lo cierto es que estoy gratamente impresionado. Le sigue muy de cerca C con
2.19s, después la implementación PyPy de Python 2.7 con 2.70, tras él le toca el turno a Go
con 2.93, la implementación de CPython 2.7 le sigue con 3.86 y muy tristemente el último
lugar lo ocupa C++ con un 4.24
https://www.genbeta.com/desarrollo/benchmark-entre-c-c-c-python-y-go
Transportabilidad
Se define como la característica que posee un software para ejecutarse en diferentes
plataformas es decir la portabilidad que se refiere exclusivamente a la propiedad que posee
un software que le permite ser ejecutado en diferentes plataformas y/o sistemas operativos.
Puntuación: 3, cumple con los requerimientos de la propiedad.
Sustentación:
Para facilitar la migración de programadores, C# no sólo mantiene una sintaxis muy similar
a C, C++ o Java que permite incluir directamente en código escrito en C# fragmentos de
código escrito en estos lenguajes, sino que el CLR también ofrece, a través de los
llamados Platform Invocation Services (PInvoke), la posibilidad de acceder a código
nativo escrito como funciones sueltas no orientadas a objetos tales como las DLLs de la API
Win32. Nótese que la capacidad de usar punteros en código inseguro permite que se pueda
acceder con facilidad a este tipo de funciones, ya que éstas muchas veces esperan recibir o
devuelven punteros.
También es posible acceder desde código escrito en C# a objetos COM. Para facilitar esto,
el .NET Framework SDK incluye una herramientas llamadas tlbimp y regasm mediante las
que es posible generar automáticamente clases proxy que permitan, respectivamente, usar
objetos COM desde .NET como si de objetos .NET se tratase y registrar objetos .NET para
su uso desde COM.
Finalmente, también se da la posibilidad de usar controles ActiveX desde código .NET y
viceversa. Para lo primero se utiliza la utilidad aximp, mientras que para lo segundo se usa
la ya mencionada regasm
Generalidades
Este criterio hace alusión a las características o construcciones propias del lenguaje y deben
ser aplicables uniformemente y con las mínimas restricciones en todos los contextos
posibles.
Puntuación: 3, cumple con los requerimientos de la propiedad.
Sustentación:
C# incorpora en el propio lenguaje elementos que a lo largo de los años ha ido
demostrándose son muy útiles para el desarrollo de aplicaciones y que en otros lenguajes
38
como Java o C++ hay que simular, como un tipo básico decimal que permita realizar
operaciones de alta precisión con reales de 128 bits (muy útil en el mundo financiero), la
inclusión de una instrucción foreach que permita recorrer colecciones con facilidad y es
ampliable a tipos definidos por el usuario, la inclusión de un tipo básico string para
representar cadenas o la distinción de un tipo bool específico para representar valores
lógicos.
En este aspecto, es importante señalar que C# incorpora muchos elementos de los que Java
carece (sistema de tipos homogéneo, propiedades, indexadores, tablas multidimensionales,
operadores redefinibles, etc.) y que según los benchmarks pruebas de velocidad de
ejecución del código escrito en C# es ligeramente superior a su respectiva versión en Java.
Imperativo
Puntuación: 3, cumple.
Sustentación:
En la programación imperativa se describen sentencias que modifican el estado de un
programa. En muchos sentidos la programación imperativa es la programación natural para
las CPUs que se basan en ese paradigma al nivel más básico.
En este paradigma se expresa como debe solucionarse un problema especificando
una secuencia de acciones a realizar a través de uno o más procedimientos denominados
subrutinas o funciones.
Dentro de esta categoría se engloban la programación estructurada que restringe el uso de
la instrucción goto, la programación modular y la programación orientada a objetos.
Cada una de estas extensiones o evoluciones han permitido mejorar la mantenibilidad y
la calidad de los programas imperativos.
Lógicos
(Declarativos)
Puntuación: 0, no cumple con los requisitos de la característica.
Sustentación:
A la programación imperativa se le contrapone la programación declarativa en la que
se describe la lógica de computación necesaria para resolver un problema sin describir
un flujo de control de ningún tipo. Esta característica no la cumple el lenguaje C#.
Funcionales
La programación funcional puede ayudarnos a crear software más robusto, mantenible y
fácil de testear.
Puntuación: 3, cumple con los requerimientos de la característica.
Sustentación:
La programación funcional se centra en las funciones. En un programa funcional, todos los
elementos pueden entenderse como funciones y el código puede ejecutarse
mediante llamadas de función secuenciales. Por el contrario, no se asignan valores de
forma independiente. Una función se imagina mejor como una variante especial de un
subprograma. Esta es reutilizable y, a diferencia de un procedimiento, devuelve
directamente un resultado. Como ya hemos mencionado anteriormente en la característica
de modularidad, C# permite el desarrollo de esta mediante el uso de funciones o
subprogramas, por tanto, comprobamos el cumplimiento de las características de
funcionalidad.

Más contenido relacionado

La actualidad más candente

La actualidad más candente (19)

Monografia
MonografiaMonografia
Monografia
 
Poovb
PoovbPoovb
Poovb
 
MANUAL DE RAPTOR 2
MANUAL DE RAPTOR 2MANUAL DE RAPTOR 2
MANUAL DE RAPTOR 2
 
FUNDAMENTOS DE PROGRAMACIÓN EN DISEÑO WEB
 FUNDAMENTOS DE PROGRAMACIÓN EN DISEÑO WEB FUNDAMENTOS DE PROGRAMACIÓN EN DISEÑO WEB
FUNDAMENTOS DE PROGRAMACIÓN EN DISEÑO WEB
 
Correa correa juan_felipe
Correa correa juan_felipeCorrea correa juan_felipe
Correa correa juan_felipe
 
Manual de Programación c/c++ Ricky Bonilla
Manual de Programación c/c++ Ricky BonillaManual de Programación c/c++ Ricky Bonilla
Manual de Programación c/c++ Ricky Bonilla
 
Paradigmas de programación
Paradigmas de programaciónParadigmas de programación
Paradigmas de programación
 
Paradigmas programacion
Paradigmas programacionParadigmas programacion
Paradigmas programacion
 
Danelly
DanellyDanelly
Danelly
 
Introducccion programacion
Introducccion programacionIntroducccion programacion
Introducccion programacion
 
Universidad de panam1.lenguaje de programación
Universidad de panam1.lenguaje de programaciónUniversidad de panam1.lenguaje de programación
Universidad de panam1.lenguaje de programación
 
PARADIGMA FUNCIONAL
PARADIGMA FUNCIONALPARADIGMA FUNCIONAL
PARADIGMA FUNCIONAL
 
Introducción a la Algoritmia
Introducción a la AlgoritmiaIntroducción a la Algoritmia
Introducción a la Algoritmia
 
Glosario
GlosarioGlosario
Glosario
 
Lenguajes de programación: Paradigmas de Programación
Lenguajes de programación: Paradigmas de ProgramaciónLenguajes de programación: Paradigmas de Programación
Lenguajes de programación: Paradigmas de Programación
 
Software1
Software1Software1
Software1
 
Taller paola
Taller paolaTaller paola
Taller paola
 
Resumen lenguajes c#
Resumen lenguajes c#Resumen lenguajes c#
Resumen lenguajes c#
 
Paradigmas de programacion
Paradigmas de programacionParadigmas de programacion
Paradigmas de programacion
 

Similar a Laboratorio 4

Clase 1_Unidad II (2).pdf
Clase 1_Unidad II  (2).pdfClase 1_Unidad II  (2).pdf
Clase 1_Unidad II (2).pdfamacias7983
 
3ra Evaluación de Programación.docx
3ra Evaluación de Programación.docx3ra Evaluación de Programación.docx
3ra Evaluación de Programación.docxJulioRodolfodeJessHe
 
Java Ago Dic07
Java Ago Dic07Java Ago Dic07
Java Ago Dic07adrianpro
 
Entrada y salida de información - Grupo # 5
Entrada y salida de información - Grupo # 5Entrada y salida de información - Grupo # 5
Entrada y salida de información - Grupo # 5Darwin Hurtado
 
Ici opc-unidad v-tema 6
Ici opc-unidad v-tema 6Ici opc-unidad v-tema 6
Ici opc-unidad v-tema 6Nelson Gimon
 
2.2. algoritmos definicion - metodología - ejemplos ing comp
2.2. algoritmos  definicion - metodología - ejemplos ing comp2.2. algoritmos  definicion - metodología - ejemplos ing comp
2.2. algoritmos definicion - metodología - ejemplos ing compMaría Sofía Molina Molina
 
Opc tema 5- unidad v
Opc tema 5- unidad vOpc tema 5- unidad v
Opc tema 5- unidad vOpc Udo
 
Ici rtu-unidad 5- tema 8
Ici rtu-unidad 5- tema 8Ici rtu-unidad 5- tema 8
Ici rtu-unidad 5- tema 8Daniela Barbosa
 
Analista-programador Cobol - Módulo 1.3
Analista-programador Cobol - Módulo 1.3Analista-programador Cobol - Módulo 1.3
Analista-programador Cobol - Módulo 1.3natachaceleste
 
2.2. algoritmos definición - metodología - ejemplos
2.2. algoritmos  definición - metodología - ejemplos2.2. algoritmos  definición - metodología - ejemplos
2.2. algoritmos definición - metodología - ejemplosMaría Sofía Molina Molina
 
Tema1
Tema1Tema1
Tema1UH
 
Tema1
Tema1Tema1
Tema1UH
 
Tema1
Tema1Tema1
Tema1UH
 
Algoritmos, programas, compiladores y lenguajes de programacion
Algoritmos, programas, compiladores y lenguajes de programacionAlgoritmos, programas, compiladores y lenguajes de programacion
Algoritmos, programas, compiladores y lenguajes de programacionBoris Salleg
 
Introduccion a la Programación I parte
Introduccion a la Programación I parte Introduccion a la Programación I parte
Introduccion a la Programación I parte Yelixa Araque Angulo
 

Similar a Laboratorio 4 (20)

Clase 1_Unidad II (2).pdf
Clase 1_Unidad II  (2).pdfClase 1_Unidad II  (2).pdf
Clase 1_Unidad II (2).pdf
 
3ra Evaluación de Programación.docx
3ra Evaluación de Programación.docx3ra Evaluación de Programación.docx
3ra Evaluación de Programación.docx
 
Java Ago Dic07
Java Ago Dic07Java Ago Dic07
Java Ago Dic07
 
Tema5-u5-ici-equipo-cad
Tema5-u5-ici-equipo-cadTema5-u5-ici-equipo-cad
Tema5-u5-ici-equipo-cad
 
Entrada y salida de información - Grupo # 5
Entrada y salida de información - Grupo # 5Entrada y salida de información - Grupo # 5
Entrada y salida de información - Grupo # 5
 
Ici opc-unidad v-tema 6
Ici opc-unidad v-tema 6Ici opc-unidad v-tema 6
Ici opc-unidad v-tema 6
 
2.2. algoritmos definicion - metodología - ejemplos ing comp
2.2. algoritmos  definicion - metodología - ejemplos ing comp2.2. algoritmos  definicion - metodología - ejemplos ing comp
2.2. algoritmos definicion - metodología - ejemplos ing comp
 
Opc tema 5- unidad v
Opc tema 5- unidad vOpc tema 5- unidad v
Opc tema 5- unidad v
 
Ici rtu-unidad 5- tema 8
Ici rtu-unidad 5- tema 8Ici rtu-unidad 5- tema 8
Ici rtu-unidad 5- tema 8
 
Programacion
ProgramacionProgramacion
Programacion
 
Programacion
ProgramacionProgramacion
Programacion
 
Analista-programador Cobol - Módulo 1.3
Analista-programador Cobol - Módulo 1.3Analista-programador Cobol - Módulo 1.3
Analista-programador Cobol - Módulo 1.3
 
Pascal
PascalPascal
Pascal
 
2.2. algoritmos definición - metodología - ejemplos
2.2. algoritmos  definición - metodología - ejemplos2.2. algoritmos  definición - metodología - ejemplos
2.2. algoritmos definición - metodología - ejemplos
 
Programacion
Programacion Programacion
Programacion
 
Tema1
Tema1Tema1
Tema1
 
Tema1
Tema1Tema1
Tema1
 
Tema1
Tema1Tema1
Tema1
 
Algoritmos, programas, compiladores y lenguajes de programacion
Algoritmos, programas, compiladores y lenguajes de programacionAlgoritmos, programas, compiladores y lenguajes de programacion
Algoritmos, programas, compiladores y lenguajes de programacion
 
Introduccion a la Programación I parte
Introduccion a la Programación I parte Introduccion a la Programación I parte
Introduccion a la Programación I parte
 

Último

EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxJorgeParada26
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanamcerpam
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...JohnRamos830530
 
Guia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosGuia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosJhonJairoRodriguezCe
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativanicho110
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21mariacbr99
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIhmpuellon
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.FlorenciaCattelani
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxFederico Castellari
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estossgonzalezp1
 

Último (10)

EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
Guia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosGuia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos Basicos
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXI
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptx
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 

Laboratorio 4

  • 1. Universidad de Panamá Facultad de Informática, Electrónica y Comunicación Integrantes: Oloninikinya Castro 10-711-1765 Melanie Castro 8-943-2211 Gloris Cedeño 9-754-699 Diego Cedeño 8-900-2261 Edwin Cueto 8-936-1200 Informe de Laboratorio N°4 Profesora: Marelisa Saldarriaga Profesor de Laboratorio: Ariel Vernaza Ingeniería Informática-Tercer Año 2020
  • 2. 1 ÍNDICE Universidad de Panamá................................................................................................................ 0 Objetivo.......................................................................................................................................... 2 Fortran........................................................................................................................................... 3 ALGOL .......................................................................................................................................... 7 Pascal.............................................................................................................................................. 9 C.................................................................................................................................................... 17 Ada................................................................................................................................................ 21 C++ ............................................................................................................................................... 28 Java............................................................................................................................................... 27 C#.................................................................................................................................................. 34
  • 3. 2 Objetivo Evaluar los lenguajes de programación según los criterios de evaluación Metodología: realizar la evaluación de los siguientes lenguajes de programación deberán revisar un fragmento de código y calificar del 0 al 3 el cumplimiento del criterio de evaluación y sustentar con evidencia tomando en cuenta la lección su respuesta. Deberán presentar sus resultados en el programa slideshire. Los criterios de calificación de los lenguajes de programación serían así:  0: No cumple  1: Apenas cumple  2: Cumple, pero con observaciones  3: Cumple
  • 4. 3 Fragmento del código en Lenguaje FORTRAN Criterio de Evaluación Fortran Expresividad, Puntuación: 1 Sustentación: ocultan los detalles del procesador, ofreciendo primitivas de control de flujo (bucles, condicionales, …), declaración de variables y vectores, etc. Bien definido Puntuación 3: Es un lenguaje que está bien definido y cada línea del programa forma parte de una sentencia que describe una instrucción a ser llevada a cabo y tales sentencias se siguen en el orden que están escritas. E
  • 5. 4 Tipos de estructura de datos Puntuación 3: Sustentación: El lenguaje fue ampliamente adoptado por los científicos para escribir programas numéricamente intensivos, que incentivó a los escritores de compiladores a producir compiladores que pudieran generar un código más rápido y más eficiente. La inclusión en el lenguaje de un tipo de datos y de la aritmética de números complejos amplió la gama de aplicaciones para las cuales el lenguaje se adaptaba especialmente e hizo al FORTRAN especialmente adecuado para aplicaciones técnicas tales como la ingeniería eléctrica. Modularidad Puntuación 3: Sustentación: impone una disciplina a la construcción de programas, que tiene como pilar la descomposición del programa en módulos: porciones de código que cumplen funciones diferenciadas. Facilidades de entrada y salida Puntuación: 2 Sustentación: En Fortran, hay dos maneras de realizar entradas/salidas: • entrada/salida dirigida por lista. En este caso, el formato de los datos depende de sus tipos (enteros, reales, etc.) y del computador. Se dice que es una entrada/salida con formato libre. • entrada/salida con formatos. El programador define la manera exacta en que quiere leer/escribir los datos. https://ocw.unican.es/pluginfile.php/1904/course/section/2188/Curs o-Fortran-7.pdf
  • 6. 5 Eficiencia Puntuación: 3 Sustentación: Es un lenguaje muy eficiente para un tipo de problemas en concreto para el cálculo matemático. Transportabilidad Puntuación 3: Sustentación: Uno de los mayores beneficios potenciales de FORTRAN 90 era la transportabilidad entre SIMD y las supercomputadoras paralelas/vectoriales. Conforme ambas arquitecturas fueron reemplazadas con multiprocesadores con memoria uniforme compartida, FORTRAN 77 se convirtió en el lenguaje que ofrecía la máxima transportabilidad entre las computadoras usadas típicamente por los programadores de cómputo de alto rendimiento. Generalidades Puntuación 3: es un lenguaje de programación de alto nivel de propósito general,2 procedimental3 e imperativo, que está especialmente adaptado al cálculo numérico y a la computación científica. Imperativo Puntuación: 3 Sustentación: contiene los comandos a ser ejecutados en el momento en que corre un programa. A las instrucciones imperativas de FORTRAN se les denomina “sentencias ejecutables”.
  • 7. 6 Lógicos (Declarativos) Puntuación 3: Sustentación: describe las áreas de datos, sus longitudes (tipos) y sus valores iniciales. Las instrucciones declarativas existen en la mayor parte de los lenguajes estructurados, aunque se les llama de maneras distintas. En FORTRAN se les denomina “sentencias no ejecutables”. Cáceres, Abdiel, 2004, Monterrey Ciudad de México, México. http://profesores.fi- b.unam.mx/ing_gpemn/cpi/basica/pdfs/Fortran4.pdf Funcionales Puntuación 3 Sustentación: Ha estado en uso continuo por más de medio siglo en áreas de cómputo intensivo tales como la predicción numérica del tiempo, análisis de elementos finitos, dinámica de fluidos computacional (CFD), física computacional y química computacional.
  • 8. 7 ALGOL Fragmento del código a evaluar (ALGOL 68) proc absmax=(ref[]real a)real: begin int i, k; real y:=0; comment De la matriz a se toma el elemento con el valor absoluto mayor y se coloca en y. x Los subíndices del elemento se colocan en i y k;peme comment i:= k:= 1⌊a; for p from 1⌊a by 1 to 1⌈a do for q from 2⌊a by 1 to 2⌈a do if abs a[p, q] > y then y:= abs a[p, q]; i:= p; k:= q fi od od; y end
  • 9. 8 IMPERATIVO Está bien programado sin embargo se necesitaba mejorar la forma de la secuencia de la programación. Criterio de Evaluación ALGOL Expresividad Puntuación: 0 Bien definido Puntuación: 1 transportabilidad Puntuación: 1 tipos de estructuras de datos Puntuación: 0 modularidad Puntuación: 3 facilidades de entrada y salida Puntuación: 1 eficiencia Puntuación: 0 generalidades Puntuación: 1 imperativo Puntuación: 2 lógicos (declarativos) Puntuación: 1 funcionales Puntuación: 1
  • 10. 9 Criterio de Evaluación Pascal Expresividad Puntuación:3 Sustentación: Pascal se caracteriza por ser un lenguaje de programación estructurado fuertemente tipificado. Esto implica que: El código esta dividido en porciones fácilmente legibles llamadas funciones o procedimientos. De esta forma Pascal facilita la utilización de la programación estructurada en oposición al antiguo estilo de programación monolítica. El tipo de dato de todas las variables debe ser declarado previamente para que su uso quede habilitado. Bien definido Puntuación: 3 Sustentación: Object Pascal (Embarcadero Delphi) todavía se utiliza para el desarrollo de aplicaciones Windows, pero también tiene la capacidad de compilación cruzada del mismo código para Mac, iOS y Android. Otra versión multiplataforma llamada Free Pascal, con el IDE Lazarus, es popular entre los usuarios de Linux, ya que también ofrece desarrollo escribe una vez, compila para todos (write once, compile anywhere). CodeTyphon es una distribución de Lazarus con más paquetes preinstalados y compiladores cruzados.
  • 11. 10 Tipos de estructura de datos Puntuación: Sustentación: consiste en dotar al programa de un cierto orden dividiéndolo en bloques independiente uno de otros y, que se encarga de cada una de las tareas necesarias. Esto hace un programa fácil de leer y modificar.
  • 12. 11 Modularidad Puntuación: 2 Sustentación: Programación modular – Es una técnica para escribir programas grandes y complejos – Se basa en subdividir el programa en secciones más simples. Cada sección se llama módulo y realiza una única tarea • Módulos – Cada módulo tiene un nombre (identificador) y consiste en un conjunto de sentencias agrupadas mediante un begin y un end – El módulo (grupo de sentencias) se ejecuta cuando se escribe su nombre en el programa – Pascal utiliza dos tipos de módulos: procedimientos y funciones • Procedimientos: Agrupación de sentencias que efectúan una tarea específica a partir de una serie opcional de datos de entrada (parámetros). – Ejemplo: writeln (valor_entrada); • Funciones: Agrupación de sentencias que efectúan una tarea que da como resultado un valor específico a partir de una serie de datos de entrada (parámetros) – Ejemplo: valor_salida:=sqrt(valor_entrada);
  • 13. 12 Facilidades de entrada y salida Puntuación: 3 Sustentación: Una sentencia de entrada en PASCAL toma una de las siguientes dos formas: Read (lista-de-variables) Read (imput, lista-de-variables) Y La sentencia básica de salida en PASCAL toma una de las dos formas Write (lista-de-salida) Write (output, lista-de- salida)Donde la lista de salida es una lista de valores a ser producidos.
  • 14. 13 Eficiencia Puntuación: Sustentación: Se trata de un lenguaje de propósito general, esto quiere decir que se puede emplear para construir todo tipo de aplicaciones. En la práctica también quiere decir que se trata de un lenguaje no diseñado para desarrollar ningún tipo específico de aplicaciones. Pero el PASCAL es especialmente útil para algo: para la enseñanza de buenos modos de programación. El PASCAL es hoy en día el lenguaje más usado para la enseñanza de la programación por varios motivos: • Posee unas reglas sencillas de sintaxis. • Es un lenguaje muy estructurado. • Realiza una comprobación exhaustiva de tipos de datos.
  • 15. 14 Transportabilidad Puntuación: 3 Sustentación: Object Pascal (Embarcadero Delphi) todavía se utiliza para el desarrollo de aplicaciones Windows, pero también tiene la capacidad de compilación cruzada del mismo código para Mac, iOS y Android. Otra versión multiplataforma llamada Free Pascal, con el IDE Lazarus, es popular entre los usuarios de Linux, ya que también ofrece desarrollo escribe una vez, compila para todos (write once, compile anywhere). CodeTyphon es una distribución de Lazarus con más paquetes preinstalados y compiladores cruzados. Generalidades Puntuación: 3 Sustentación: El código está dividido en porciones fácilmente legibles llamadas funciones o procedimientos. Imperativo Puntuación: 3 Sustentación: El paradigma imperativo debe su nombre al papel dominante que desempeñan las sentencias imperativas, es decir aquellas que indican realizar una determinada operación que modifica los datos guardados en memoria.
  • 16. 15 Lógicos (Declarativos) Puntuación: 3 Sustentación: es la técnica utilizada para desarrollar instrucciones en una secuencia para lograr determinado objetivo. Es la organización y planificación de instrucciones en un algoritmo, con el objetivo de tornar visible la implementación de un programa o software. Funcionales Puntuación: 3 Sustentación: Los lenguajes funcionales priorizan el uso de recursividad y aplicación de funciones de orden superior para resolver problemas que en otros lenguajes se resolverán mediante estructuras de control (por ejemplo, ciclos). Muchos lenguajes de programación funcionales pueden ser vistos como elaboraciones del cálculo lambda.
  • 17. 16 Fragmento del código en el Lenguaje C
  • 18. 17 Criterio de Evaluación C Expresividad Puntuación: 2 Sustentación: siempre fue distinguido como altamente expresivo y potencialmente muy económico dada su reducida cantidad de palabras clave y el poder de algunos de sus operadores (por ejemplo, de los punteros.) En la actualidad, sin embargo, es frecuente el deseo de soportar estructuras de programación cada vez más complejas (aunque con frecuencia con los mismos algoritmos) con lo cual las implementaciones en lenguaje C tienden a tornarse oscuras (e inseguras) frente a equivalentes en otros lenguajes. Bien definido Puntuación: 2 Sustentación: el principal problema radica en la gran cantidad de aspectos que son dejados a criterio del implementador, entre los cuales destaca el tamaño de los tipos de datos. Tipos de estructura de datos Puntuación: 2 Sustentación: proporciona mecanismos que actualmente se consideran rudimentarios para proporcionar tipos de datos estructurados. Las estructuras (y uniones) se suelen utilizar para definir tipos complejos constituidos a partir de otros más simples (que a la vez pueden ser estructuras y/o uniones) con la posibilidad de crear identificadores auxiliares que simplifican la notación (typedef.)
  • 19. 18 Modularidad Puntuación: 2 Sustentación: proporciona sólo dos niveles: componentes visibles dentro del archivo de código fuente, y componentes visibles globalmente (concretamente, funciones y variables.) Facilidades de entrada y salida Puntuación: 2, Sustentación: no proporciona instrucciones de I/O salvo mediante funciones de su "librería estándar", la cual fue diseñada en gran medida para aprovechar las facilidades del sistema de archivos Unix. En ese sentido, las funciones de I/O proporcionan acceso secuencial byte a byte o bloque a bloque, así como desplazamientos arbitrarios en la posición de lectura/escritura; esto en realidad depende de las facilidades inherentes al sistema operativo, pero están presentes en prácticamente todo sistema comercial moderno. Eficiencia Puntuación: 3 Es un lenguaje potente y eficiente, permitiendo obtener programas rápidos y compactos.
  • 20. 19 Transportabilidad Puntuación: 3 Sustentación: ha proporcionado como parte de la distribución del sistema operativo Unix (aunque en ocasiones, con un costo adicional) siempre siguiendo los lineamientos de sus creadores (K&R) por lo que es reconocido como uno de los lenguajes más difundidos y portables de la historia, al menos, hasta los años 80. Generalidades Puntuación: 2 Sustentación: suele ser utilizado para construir componentes básicos o de bajo nivel (notablemente, el kernel de muchos sistemas operativos). Imperativo Puntuación: 3 Sustentación: C es muy concretos y trabaja cerca del sistema, de esta forma, el código es, por un lado, fácilmente comprensible, pero, por el otro, requiere muchas líneas de texto fuente para describir lo que en los lenguajes de la programación declarativa se consigue con solo una parte de las instrucciones.
  • 21. 20 Lógicos (Declarativos) Puntuación: 1 Sustentación: Este lenguaje es más imperativo, porque los lenguajes declarativos no dicen cómo hacer una cosa, sino, más bien qué cosa hacer, a diferencia del lenguaje imperativo. Funcionales Puntuación 3: Sustentación: Un programa funcional está constituido enteramente por funciones; el programa principal es una función que toma como argumento la entrada al programa y genera la salida del programa como su resultado. Gonzales, Fabio, Colombia, Colombia file:///C:/Users/nilke/Desktop/21044-71292-1-PB.pdf
  • 22. 21 Criterio de Evaluación Ada Expresividad Puntuación: 3 Sentencia: Es bastante legible incluso para personas que no conocen el lenguaje. Es un lenguaje que no escatima en la longitud de las palabras clave, en la filosofía de que un programa se escribe una vez, se modifica decenas de veces y se lee miles de veces (legibilidad es más importante que rapidez de escritura). Bien definido Puntuación: 3 Sustentación: Es un lenguaje multipropósito, orientado a objetos y concurrente, pudiendo llegar desde la facilidad de Pascal hasta la flexibilidad de C++.
  • 23. 22 Tipos de estructura de datos Puntuación: 3 Sustentación: La parte declarativa incluye las declaraciones de cualquier objeto. Puede contener definiciones de variables y procedimientos. · Tipo integer: Representa una secuencia de uno o más dígitos. Ada permite que cualquiera de los dígitos (excepto el primero) esté precedido por el carácter “_” para dar legibilidad al programa. · Tipo flotante: se distinguen por la presencia de un punto decimal. Pueden incluir un exponente. · Tipo Boolean: Los valores booleanos están denotados por unos de dos literales predefinidos: true y false. · Tipo Character: Los valores de este tipo representan valores ASCII. Son caracteres encerrados entre comillas simples. · Tipo string: todos los tipos anteriores son tipos escalares, esto es, que tiene valores que no pueden ser divididos en partes más pequeñas. Ada tiene un tipo predefinido que es un tipo compuesto, el tipo String, que consiste de una secuencia de valores character. Un literal string es una secuencia de cero, o más caracteres encerrados entre comillas dobles.
  • 24. 23 Modularidad Puntuación: 2 Sustentación: El objetivo anterior se puede conseguir dividendo un programa en partes, cada una de ellas siendo un grupo de elementos, de forma que: I Cada elemento de un grupo esta fuertemente relacionado con otros elementos de dicho grupo. I Las dependencias entre elementos de grupos distintos son las menores posibles, y en cualquier caso están bien documentadas. I Cada parte puede ser reutilizable en mas de un programa
  • 25. 24 Facilidades de entrada y salida Puntuación: 3 Sentencia: Las operaciones básicas de entrada/salida de Ada se encuentran definidas en la librería estándar Text_IO que habrá que incluir en la cláusula de contexto de una unidad de programa que pretenda usarlas: With Text_Io; Use Text_Io; También se puede realizar entrada/salida de valores del tipo predefinido Integer y sus subtipos usando el paquete no genérico Ada. Integer_Text_Io; y del tipo predefinido Float y sus subtipos usando el paquete no genérico Ada. Float_Text_Io with Ada.Integer_Text_Io, Ada. Float_Text_Io; use Ada. Integer_Text_Io, Ada. Float_Text_Io;
  • 26. 25 Eficiencia Puntuación: Sentencia: Es bastante legible incluso para personas que no conocen el lenguaje. Es un lenguaje que no escatima en la longitud de las palabras clave, en la filosofía de que un programa se escribe una vez, se modifica decenas de veces y se lee miles de veces (legibilidad es más importante que rapidez de escritura). Transportabilidad Puntuación: 3 Sustentación: Se puede obtener mayor transportabilidad y mejor mantenimiento si se pueden separar los detalles de la representación de los datos y las especificaciones de las operaciones lógicas sobre los mismos. Generalidades Puntuación: 3 Sustentación: es un lenguaje de programación orientado a objetos y fuertemente tipado de forma estática que fue diseñado por Jean Ichbiah de CII Honeywell Bull por encargo del Departamento de Defensa de los Estados Unidos. Es un lenguaje multipropósito, orientado a objetos y concurrente, pudiendo llegar desde la facilidad de Pascal hasta la flexibilidad de C++.
  • 27. 26 Imperativo Puntuación: 3 Sustentación: Los lenguajes de programación imperativa son como unas instrucciones paso a paso (cómo) redactadas para el ordenador. Describen de forma explícita qué pasos deben llevarse a cabo y en qué secuencia para alcanzar finalmente la solución deseada. Lógicos (Declarativos) Puntuación: Sustentación: En Ada, todo el programa es un único procedimiento, que puede contener subprogramas (procedimientos o funciones). Cada sentencia se cierra con end qué_cerramos. Es un modo de evitar errores y facilitar la lectura. No es necesario hacerlo en el caso de subprogramas, aunque todos los manuales lo aconsejan y casi todos los programadores de Ada lo hacen. Funcionales Puntuación: 2 Sustentación: Un programa en estos lenguajes consiste en una especificación de la función recursiva que queremos calcular, junto con los argumentos sobre los que se aplica.
  • 28. 27 Fragmento del código en Lenguaje C++ LÓGICOS Le falta pulir un poco lo que sería la programación funcional, programación con restricciones, programas DSL e híbridos. Criterio de Evaluación Java
  • 29. 28 Criterio de Evaluación C++ Expresividad Puntuación: 3 Bien definido Puntuación: 3 transportabilidad Puntuación: 3 tipos de estructuras de datos Puntuación: 1 modularidad Puntuación: 3 facilidades de entrada y salida Puntuación: 3 eficiencia Puntuación: 3 generalidades Puntuación: 3 imperativo Puntuación: 3 lógicos (declarativos) Puntuación: 2 funcionales Puntuación: 3
  • 30. 29 Expresividad Puntuación: 3 Sustentación: El lenguaje de programación expresivo permite expresar con facilidad procesos o estructuras complejas. Por lo tanto, la expresividad se define como la capacidad de decir ideas en cómputo, ayudado a través de las estructuras de datos que el lenguaje que uses tiene. Bien definido Puntuación: 3 Sustentación: Desde el punto de vista bien definido quiere decir que el lenguaje cumple con lo necesario a lo que está orientado a objetos e imperativo.
  • 31. 30 Tipos de estructura de datos Puntuación: 3 Sustentación: Se caracterizan por poder almacenar un único valor. Salvo este reducido conjunto de tipos de datos primitivos, que facilitan el trabajo con números, caracteres y valores booleanos, todos los demás tipos de Java son objetos, también llamados tipos estructurados o Clases. Double dinero; Int edad; Float numero; String Nombre; Modularidad Puntuación: 3 Sustentación: Java hace uso a esta metodología ya que se basa en la agrupación de procedimientos, funciones o subrutinas en bloques, paquetes que quedan bien organizados.
  • 32. 31 Facilidades de entrada y salida Puntuación: 2 Sustentación: Los programas necesitan comunicarse con su entorno, tanto para recoger datos e información que deben procesar, como para devolver los resultados obtenidos. Eficiencia Puntuación: 3 Sustentación: Depender de parámetros cómo cuál es la plataforma sobre la que se ejecuta, la versión de las librerías, la versión del compilador/intérprete/máquina virtual y los parámetros de optimización que se le suministran. Transportabilidad Puntuación: 2 Sustentación: La Transportabilidad/portabilidad de Java le permite estar en dispositivos desde celulares Android, Ordenadores, entre otros. Java no se compila habitualmente en código nativo, sino en bytecode.
  • 33. 32 Generalidades Puntuación: 3 Sustentación: Java es un lenguaje de programación sencillo y a la vez potente, que permite crear cualquier tipo de aplicación de propósito general. Imperativo Puntuación: 3 Sustentación: En la programación se considera imperativo a los lenguajes que calculan un conjunto de instrucciones que establecen explícitamente como se debe manipular la información digital presente en memoria o como se debe recoger/ enviar la información desde/hacia los dispositivos.
  • 34. 33 Lógicos (Declarativos) Puntuación: 2 Sustentación: Nos permite crear programas más compactos, reutilizables, poco a poco se acostumbrará esto en Java Observación: Dependiendo del punto de vista en el que se utilice, Java está perfectamente equilibrado. Funcionales Puntuación: 2 Sustentación: En Java 8 se proporciona la clase Function la cual acepta el paramtero y la clase BiFunction acepta dos. Observación: Desde mi punto de vista Java tiene un buen soporte para ello. Sin embargo, muchas veces no se tiene muy claro cómo aplicarlo.
  • 35. 34 Criterio de Evaluación C# Expresividad, Puntuación: 3, cumple con los requerimientos de esta característica. Sustentación: Un lenguaje se considera expresivo cuando: Es bastante fácil aprender, la gran mayoría de los desarrolladores que lo utilizan pueden ser muy productivos; e igualmente expresivo en casi todo su dominio de utilidad. Esto concuerda con la definición de expresividad trabajada en clase, la cuál citamos “expresividad es la facilidad con la cual un lenguaje puede expresar procesos y estructuras complejas”. Características que promueven su rápido aprendizaje e implementación al utilizar expresiones cortas y claras para representar ideas. Para medir eso, tomamos en cuenta el rango Inter cuartil (IQR; la distancia entre los percentiles 25 y 75) como un acercamiento para estos dos criterios, y clasifiquemos los lenguajes a través del mismo. Adjuntamos una imagen obtenida de los benchmarks de expresividad de diversos lenguajes de programación, donde se observa a C# clasificado como uno de los lenguajes más expresivos, contando con esta información aseguramos que ambos criterios anteriormente mencionados se cumplen. http://dberkholz- media.redmonk.com/dberkholz/files/2013/03/expressiveness_by_iqr_weighted2.png Por lo tanto, comprobamos mediante esta clasificación que C# cumple con las características evaluadas de expresividad y por consecuente se considera un lenguaje altamente expresivo. Bien definido El siguiente criterio de evaluación es “Bien definido”, y trata sobre que el flujo del programa lleve a un resultado. Los lenguajes de programación que cuentan con este criterio manejan paradigmas como: imperativos, declarativos y orientación a objetos. Puntuación: 3, cumple con los requerimientos de la característica Sustentación: En el caso de C# el paradigma implementado es orientado a objetos, al tener un paradigma que define al lenguaje se considera “bien definido”. C# es un lenguaje de programación que se ha diseñado para generar diversas aplicaciones que se ejecutan en .NET Framework. C# proporciona compatibilidad completa para la programación orientada a objetos incluida la abstracción, la encapsulación, la herencia y el polimorfismo. Todas estas características validan que C# cumple con los criterios evaluados en el paradigma de programación orientado a objetos. Tipos de estructura de datos En Informática, una estructura de datos es una forma particular de organizar datos en una computadora para que puedan ser utilizados de manera eficiente. Diferentes tipos de estructuras de datos son adecuados para diferentes tipos de aplicaciones, y algunos son altamente especializados para tareas específicas. Puntuación: 2, cumple, pero con observaciones
  • 36. 35 Sustentación: Los tipos de estructura tienen semántica de valores. Es decir, una variable de un tipo de estructura contiene una instancia del tipo. De forma predeterminada, los valores de variable se copian al asignar, pasar un argumento a un método o devolver el resultado de un método. En el caso de una variable de tipo de estructura, se copia una instancia del tipo. Para más información, vea Tipos de valor. Normalmente, los tipos de estructura se usan para diseñar tipos de pequeño tamaño centrados en datos que proporcionan poco o ningún comportamiento. Por ejemplo, en .NET se usan los tipos de estructura para representar un número (entero y real), un valor booleano, un carácter Unicode, una instancia de tiempo. Si le interesa el comportamiento de un tipo, considere la posibilidad de definir una clase. Los tipos de clase tienen semántica de referencias. Es decir, una variable de un tipo de clase contiene una referencia a una instancia del tipo, no la propia instancia. Dado que los tipos de estructura tienen semántica del valor, le recomendamos que defina tipos de estructura inmutables. Al diseñar un tipo de estructura, tiene las mismas funciones que con un tipo de clase, con las siguientes excepciones:  No se puede declarar un constructor sin parámetros. Cada tipo de estructura ya proporciona un constructor sin parámetros implícito que genera el valor predeterminado del tipo.  No se puede inicializar una propiedad o un campo de instancia en su declaración. Pero se puede inicializar un campo static o const, o una propiedad estática en su declaración.  Un constructor de un tipo de estructura debe inicializar todos los campos de instancia del tipo.  Un tipo de estructura no puede heredar de otro tipo de estructura o clase ni puede ser la base de una clase. Pero un tipo de estructura puede implementar interfaces.  No se puede declarar un finalizador dentro de un tipo de estructura. Modularidad, La modularidad es la capacidad que tiene un sistema de ser estudiado, visto o entendido como la unión de varias partes que interactúan entre sí y que trabajan para alcanzar un objetivo común, realizando cada una de ellas una tarea necesaria para la consecución de dicho objetivo. Esta es la definición estudiada en clase. Puntuación: 3, cumple con los requisitos de la característica Sustentación: Presentamos la definición de los subprogramas o funciones aplicables para C y todos sus derivados:
  • 37. 36  Cada "trozo de programa" independiente será más fácil de programar, al realizar una función breve y concreta.  El "programa principal" será más fácil de leer, porque no necesitará contener todos los detalles de cómo se hace cada cosa.  Evitaremos mucho código repetitivo.  Podremos repartir el trabajo, para que cada persona se encargue de realizar un "trozo de programa", y finalmente se integrará el trabajo individual de cada persona (aunque para proyectos realmente grandes, pronto veremos una alternativa que hace que el reparto y la integración sean más sencillos). Esos "trozos" de programa son lo que suele llamar "subrutinas", "procedimientos" o "funciones". En el lenguaje C y sus derivados (entre los que está C#), el nombre que más se usa es el de funciones. Conociendo estas características podemos concluir que cumple con el objetivo de la modularidad, por lo tanto el programa tiene esta propiedad. Adjuntamos video donde se utiliza la modularidad en C#: https://videosinformaticablog.wordpress.com/tutorial-curso-c-7-modularidad-y- encapsulamiento/ Facilidades de entrada y salida, Puntuación: 3, cumple con los requisitos de la característica. Sustentación: En C#, la entrada y la salida de datos se pueden manejar a través de los métodos de la clase Console. Entrada de datos desde el teclado. Para la entrada de datos por medio del teclado se pueden utilizar los métodos Read() y ReadLine() de la clase Console. Ejemplos: System.Console.Read( ) ; // Lee el siguiente carácter desde el flujo de la entrada estándar. System.Console.ReadLine( ) ; // Lee la siguiente línea de caracteres desde el flujo de la entrada estándar. Salida de datos hacia la pantalla. La salida de datos hacia la pantalla se puede realizar utilizando los métodos Write y WriteLine( ) de la clase Console. Estas funcionalidades nos demuestran que existe la facilidad de entrada y salida de datos en C#. Eficiencia El criterio de evaluación eficiencia, se refiere a que tan rápido se ejecuta un programa. Puntuación: 3, cumple con los requerimientos de la característica Sustentación:
  • 38. 37 C# mantiene una velocidad de ejecución bastante buena con respecto a otros lenguajes que son considerados eficientes. Como prueba adjuntamos este benchmark: Es destacable como C# es el más rápido con 2.01, no tengo ni idea de si eso es así por la implementación de Mono, del lenguaje en sí, o si es que no he hecho bien el benchmark en C# pero lo cierto es que estoy gratamente impresionado. Le sigue muy de cerca C con 2.19s, después la implementación PyPy de Python 2.7 con 2.70, tras él le toca el turno a Go con 2.93, la implementación de CPython 2.7 le sigue con 3.86 y muy tristemente el último lugar lo ocupa C++ con un 4.24 https://www.genbeta.com/desarrollo/benchmark-entre-c-c-c-python-y-go Transportabilidad Se define como la característica que posee un software para ejecutarse en diferentes plataformas es decir la portabilidad que se refiere exclusivamente a la propiedad que posee un software que le permite ser ejecutado en diferentes plataformas y/o sistemas operativos. Puntuación: 3, cumple con los requerimientos de la propiedad. Sustentación: Para facilitar la migración de programadores, C# no sólo mantiene una sintaxis muy similar a C, C++ o Java que permite incluir directamente en código escrito en C# fragmentos de código escrito en estos lenguajes, sino que el CLR también ofrece, a través de los llamados Platform Invocation Services (PInvoke), la posibilidad de acceder a código nativo escrito como funciones sueltas no orientadas a objetos tales como las DLLs de la API Win32. Nótese que la capacidad de usar punteros en código inseguro permite que se pueda acceder con facilidad a este tipo de funciones, ya que éstas muchas veces esperan recibir o devuelven punteros. También es posible acceder desde código escrito en C# a objetos COM. Para facilitar esto, el .NET Framework SDK incluye una herramientas llamadas tlbimp y regasm mediante las que es posible generar automáticamente clases proxy que permitan, respectivamente, usar objetos COM desde .NET como si de objetos .NET se tratase y registrar objetos .NET para su uso desde COM. Finalmente, también se da la posibilidad de usar controles ActiveX desde código .NET y viceversa. Para lo primero se utiliza la utilidad aximp, mientras que para lo segundo se usa la ya mencionada regasm Generalidades Este criterio hace alusión a las características o construcciones propias del lenguaje y deben ser aplicables uniformemente y con las mínimas restricciones en todos los contextos posibles. Puntuación: 3, cumple con los requerimientos de la propiedad. Sustentación: C# incorpora en el propio lenguaje elementos que a lo largo de los años ha ido demostrándose son muy útiles para el desarrollo de aplicaciones y que en otros lenguajes
  • 39. 38 como Java o C++ hay que simular, como un tipo básico decimal que permita realizar operaciones de alta precisión con reales de 128 bits (muy útil en el mundo financiero), la inclusión de una instrucción foreach que permita recorrer colecciones con facilidad y es ampliable a tipos definidos por el usuario, la inclusión de un tipo básico string para representar cadenas o la distinción de un tipo bool específico para representar valores lógicos. En este aspecto, es importante señalar que C# incorpora muchos elementos de los que Java carece (sistema de tipos homogéneo, propiedades, indexadores, tablas multidimensionales, operadores redefinibles, etc.) y que según los benchmarks pruebas de velocidad de ejecución del código escrito en C# es ligeramente superior a su respectiva versión en Java. Imperativo Puntuación: 3, cumple. Sustentación: En la programación imperativa se describen sentencias que modifican el estado de un programa. En muchos sentidos la programación imperativa es la programación natural para las CPUs que se basan en ese paradigma al nivel más básico. En este paradigma se expresa como debe solucionarse un problema especificando una secuencia de acciones a realizar a través de uno o más procedimientos denominados subrutinas o funciones. Dentro de esta categoría se engloban la programación estructurada que restringe el uso de la instrucción goto, la programación modular y la programación orientada a objetos. Cada una de estas extensiones o evoluciones han permitido mejorar la mantenibilidad y la calidad de los programas imperativos. Lógicos (Declarativos) Puntuación: 0, no cumple con los requisitos de la característica. Sustentación: A la programación imperativa se le contrapone la programación declarativa en la que se describe la lógica de computación necesaria para resolver un problema sin describir un flujo de control de ningún tipo. Esta característica no la cumple el lenguaje C#. Funcionales La programación funcional puede ayudarnos a crear software más robusto, mantenible y fácil de testear. Puntuación: 3, cumple con los requerimientos de la característica. Sustentación: La programación funcional se centra en las funciones. En un programa funcional, todos los elementos pueden entenderse como funciones y el código puede ejecutarse mediante llamadas de función secuenciales. Por el contrario, no se asignan valores de forma independiente. Una función se imagina mejor como una variante especial de un subprograma. Esta es reutilizable y, a diferencia de un procedimiento, devuelve directamente un resultado. Como ya hemos mencionado anteriormente en la característica de modularidad, C# permite el desarrollo de esta mediante el uso de funciones o subprogramas, por tanto, comprobamos el cumplimiento de las características de funcionalidad.