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
Facultad de Informática, Electrónica y Comunicación............................................................. 0
Fortran........................................................................................................................................... 2
ALGOL .......................................................................................................................................... 6
Pascal.............................................................................................................................................. 8
C.................................................................................................................................................... 15
Ada................................................................................................................................................ 19
Java............................................................................................................................................... 26
C#...................................................................................................................................................31
3. 2
Objetivos: 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
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
Tipos de estructura
de datos
Puntuación 3:
Sustentación:
4. 3
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
Eficiencia Puntuación: 3
Sustentación:
Es un lenguaje muy eficiente para un tipo de problemas en concreto
para el cálculo matemático.
5. 4
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. 5
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. 6
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. 7
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. 8
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. 9
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. 10
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. 11
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. 12
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. 13
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. 14
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. 15
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.
17. 16
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.)
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.
18. 17
Eficiencia Puntuación: 3
Es un lenguaje potente y eficiente, permitiendo obtener
programas rápidos y compactos.
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.
19. 18
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
20. 19
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++.
21. 20
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.
22. 21
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
23. 22
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
génerico 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;
24. 23
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++.
25. 24
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.
26. 25
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 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
27. 26
Criterio de
Evaluación
Java
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.
http://la-morsa.blogspot.com/2011/02/sobre-la-expresividad-
de-los-lenguajes.html
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.
28. 27
Tipos de estructura de
datos
Puntuación: 3
Sustentación:
Los tipos de datos como Double, Float, Boolean, entre otros.
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.
https://www.campusmvp.es/recursos/post/variables-y-tipos-de-
datos-en-java-tipos-simples-clases-y-tipos-envoltorio-o-
wrapper.aspx
Modularidad
Puntuación: 3
Sustentación:
En los lenguajes orientados a objetos, como Java, el concepto
esencial es el de clase, y los programas consisten básicamente
en conjuntos de declaraciones de clases. En la mayoría de los
lenguajes OO, existen,
sin embargo, mecanismos para agrupar las clases relacionadas
en conjuntos de clases, asimilables a los módulos de los
lenguajes no OO. https://lsi.ugr.es/curena/doce/lp/tr-11-12/lp-
c08-impr.pdf
29. 28
Facilidades de entrada
y salida
Puntuación: 3
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.
http://www.euskalnet.net/jaoprogramador/j2ee/java/java25.htm
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.
https://medium.com/techwomenc/como-elegir-el-lenguaje-de-
programaci%C3%B3n-adecuado-402503a6a230
Observación:
30. 29
En cuanto a Java para utilizarlo en Celulares es algo
complicado con respecto a leer y guardar archivos.
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.
31. 30
Lógicos (Declarativos)
Puntuación: 2
Sustentación:
Calcula el proceso de encontrar qué elementos de un dominio
cumple determinada relación definida
sobre dicho dominio, o bien determinar si un determinado
elemento cumple o no dicha relación.
Observación:
Dependiendo del punto de vista en el que se utilice, Java está
perfectamente equilibrado.
Funcionales
Puntuación: 2
Sustentación:
Un cálculo es el proceso de aplicar una función recursiva a un
valor de su dominio para obtener el correspondiente valor del
rango (el resultado).
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.
32. 31
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
33. 32
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:
34. 33
Presentamos la definición de los subprogramas o funciones aplicables para C y todos
sus derivados:
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.
35. 34
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:
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.
36. 35
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 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:
37. 36
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.