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