UNIVERSIDAD DE CANTABRIA
Una comparación entre
C, C++, Java y Ada
Santander, enero de 2009
J. Javier Gutiérrez
[email protected]
GRUPO DE COMPUTADORES Y TIEMPO REAL
DPTO. DE ELECTRÓNICA Y COMPUTADORES
© Michael González, Javier Gutiérrez
19/ene/09
Una comparación
entre C, C++, Java y Ada
UNIVERSIDAD DE CANTABRIA
1. Introducción
2. Estructura de un programa
3. Tipos de datos y declaraciones de datos
4. Operadores y expresiones
5. Entrada/salida simple
6. Instrucciones de control
7. Subprogramas y paso de parámetros
8. Modularidad y ocultamiento de información
9. Abstracción de tipos y reusabilidad
10.Excepciones
11.Llamada a funciones C y Java desde Ada
12.Conclusiones
GRUPO DE COMPUTADORES Y TIEMPO REAL
DPTO. DE ELECTRÓNICA Y COMPUTADORES
© Michael González, Javier Gutiérrez
19/ene/09
1
2
1. Introducción
UNIVERSIDAD DE CANTABRIA
El lenguaje C es uno de los lenguajes de programación más populares
que existen hoy en día
Características más importantes:
• lenguaje sencillo (aunque más difícil de aplicar)
• estructurado
• tipos definidos por el usuario
• no exige tipificación estricta
• permite compilación separada
• es de un nivel relativamente bajo
• compiladores baratos y eficientes
GRUPO DE COMPUTADORES Y TIEMPO REAL
DPTO. DE ELECTRÓNICA Y COMPUTADORES
© Michael González, Javier Gutiérrez
19/ene/09
3
Versiones del lenguaje C
UNIVERSIDAD DE CANTABRIA
Existen diversas versiones del lenguaje C:
• C común: apareció en 1978 y estaba directamente ligado al sistema
operativo UNIX
• C ANSI o C ISO: estandarización en 1988, y luego en 1995 y 1999;
versión no ambigua y más portable, que añade
- asignación de estructuras (registros)
- tipos enumerados
- prototipos de funciones, con especificación de sus argumentos
- librerías estándares (funciones matemáticas, entrada/salida,
etc.)
En este seminario nos referiremos al ISO C 99
GRUPO DE COMPUTADORES Y TIEMPO REAL
DPTO. DE ELECTRÓNICA Y COMPUTADORES
© Michael González, Javier Gutiérrez
19/ene/09
El lenguaje C++
UNIVERSIDAD DE CANTABRIA
Es un lenguaje derivado del C, pero mucho más complejo. Incluye:
• definición de módulos (llamados clases)
• programación orientada al objeto
• tipificación más estricta
• tratamiento de excepciones
• plantillas (equivalentes a módulos genéricos)
El C++ fue estandarizado en 1998.
GRUPO DE COMPUTADORES Y TIEMPO REAL
DPTO. DE ELECTRÓNICA Y COMPUTADORES
© Michael González, Javier Gutiérrez
19/ene/09
El lenguaje Java
UNIVERSIDAD DE CANTABRIA
Es un lenguaje con una sintaxis similar a la del C++, pero unos
conceptos de diseño totalmente diferentes:
• portabilidad de clases mediante:
- código intermedio estandarizado, e interpretado por una
máquina virtual (portable, pero ineficiente)
- las clases se cargan dinámicamente (y de sitios remotos)
• gestión automática de memoria, que aumenta la fiabilidad
• programación orientada a objetos
• tipificación estricta
• tratamiento de excepciones; recientemente, genéricos
El Java pertenece a la empresa Sun y no está estandarizado
GRUPO DE COMPUTADORES Y TIEMPO REAL
DPTO. DE ELECTRÓNICA Y COMPUTADORES
© Michael González, Javier Gutiérrez
19/ene/09
4
5
6
2. Estructura de un programa
UNIVERSIDAD DE CANTABRIA
Estructura de un bloque en Ada y en C/Java:
Ada
C/Java
declare
begin
<declaraciones>
<instrucciones>
exception
<manejadores>
end;
{
}
<declaraciones>
<instrucciones>
GRUPO DE COMPUTADORES Y TIEMPO REAL
DPTO. DE ELECTRÓNICA Y COMPUTADORES
© Michael González, Javier Gutiérrez
19/ene/09
7
2. Estructura de un programa
(cont.)
UNIVERSIDAD DE CANTABRIA
Estructura de un programa:
Ada
with modulo1;
procedure Nombre is
<declaraciones>
begin
<instrucciones>
end;
C
Java
#include <modulo1.h>
main()
{
<declaraciones>
<instrucciones>
}
import paquete.*;
public class Nombre {
public static void
main (String[] args)
{
<declaraciones>
<instrucciones>
}
}
GRUPO DE COMPUTADORES Y TIEMPO REAL
DPTO. DE ELECTRÓNICA Y COMPUTADORES
© Michael González, Javier Gutiérrez
19/ene/09
8
Ejemplos
UNIVERSIDAD DE CANTABRIA
#include <stdio.h>
main()
{
printf("hola\n"); // printf para escribir
}
with Ada.Text_IO;
procedure Hola is
begin
Ada.Text_IO.Put_Line("hola"); -- put para escribir
end Hola;
GRUPO DE COMPUTADORES Y TIEMPO REAL
DPTO. DE ELECTRÓNICA Y COMPUTADORES
© Michael González, Javier Gutiérrez
19/ene/09
9
Ejemplos (cont.)
UNIVERSIDAD DE CANTABRIA
public class Hola {
public static void main(String[] args)
{
// println es una operación del objeto
// out de la clase System
System.out.println("hola");
}
}
GRUPO DE COMPUTADORES Y TIEMPO REAL
DPTO. DE ELECTRÓNICA Y COMPUTADORES
© Michael González, Javier Gutiérrez
19/ene/09
10
Algunas observaciones:
UNIVERSIDAD DE CANTABRIA
C/Java
se distingue entre mayúsculas y minúscu-
las
las instrucciones acaban con “;”, pero los
bloques no
Ada
no hay distinción
instrucciones y bloques acaban con “;”
En Java las funciones son bloques que
siempre son métodos de clases
Las funciones y procedimientos son blo-
ques que se pueden anidar
comentarios entre /**/, o empezando
con // hasta fin de línea
los comentarios empiezan con “--” y
continúan hasta el final de la línea
todas las variables deben declararse
los strings se encierran entre ""
idem.
idem.
en C y Java el retorno de línea se pone en
el string "\n"
retorno de línea con operaciones específi-
cas (New_Line, Put_Line)
GRUPO DE COMPUTADORES Y TIEMPO REAL
DPTO. DE ELECTRÓNICA Y COMPUTADORES
© Michael González, Javier Gutiérrez
19/ene/09
11
Importancia de la declaración de
variables
UNIVERSIDAD DE CANTABRIA
La siguiente línea de programa en Fortran causó la pérdida de la
nave Viking dirigida al planeta Venus:
DO 20 I=1.100
La línea correcta, que hubiera sido el equivalente de un lazo for era:
DO 20 I=1,100
En su lugar, el compilador interpretó que la instrucción era una
asignación a la variable (no declarada) DO20I:
DO20I = 1.100
En C, Java y Ada todos los objetos deben ser declarados
GRUPO DE COMPUTADORES Y TIEMPO REAL
DPTO. DE ELECTRÓNICA Y COMPUTADORES
© Michael González, Javier Gutiérrez
19/ene/09
12
3. Tipos de datos
Tipos predefinidos:
Ada
Integer
C
signed char
short
int
long
Boolean
Character (8 bits)
Wide_Character (16 bits)
(se usa int)
se usa char (8 bits)
wchar_t
Float
Duration
String
float
double
-
char[], char*
UNIVERSIDAD DE CANTABRIA
Java
byte
short
int
long
boolean
char (16 bits)
float
double
-
String
GRUPO DE COMPUTADORES Y TIEMPO REAL
DPTO. DE ELECTRÓNICA Y COMPUTADORES
© Michael González, Javier Gutiérrez
19/ene/09
13
Declaraciones
C/Java
UNIVERSIDAD DE CANTABRIA
int lower;
char c,resp;// dos variables de tipo char
int i=0; // variable inicializada
const float eps=1.0e-5; // constante C
#define MAX 8 // constante textual (C)
final float eps=1.0e-5; // constante Java
Ada
Lower : Integer;
C, Resp : Character; -- dos variables Character
I : Integer := 0; -- variable inicializada
Eps : constant Float:=1.0e-5; -- Constante
GRUPO DE COMPUTADORES Y TIEMPO REAL
DPTO. DE ELECTRÓNICA Y COMPUTADORES
© Michael González, Javier Gutiérrez
19/ene/09
14
Observaciones sobre las
declaraciones
UNIVERSIDAD DE CANTABRIA
Puede observarse que, tanto en C y Java como en Ada:
• las variables se pueden inicializar
• se pueden declarar como constantes
• se pueden declarar varias variables juntas
En C y Java se pone primero el tipo, y luego la variable (al revés que
en Ada)
GRUPO DE COMPUTADORES Y TIEMPO REAL
DPTO. DE ELECTRÓNICA Y COMPUTADORES
© Michael González, Javier Gutiérrez
19/ene/09
15
Tipos discretos definidos por
el usuario
UNIVERSIDAD DE CANTABRIA
Ni en C ni en Java se pueden crear más tipos enteros o reales
Tampoco se pueden definir tipos subrango
En ambos se pueden definir tipos enumerados
Suponer el siguiente tipo enumerado en Ada:
type Dimension is (Planox, Planoy, Planoz);
Fuerza, Linea : Dimension;
...
Fuerza:=Planox;
Linea :=Dimension’Succ(Fuerza);
GRUPO DE COMPUTADORES Y TIEMPO REAL
DPTO. DE ELECTRÓNICA Y COMPUTADORES
© Michael González, Javier Gutiérrez
19/ene/09
16
Tipos discretos (cont.)
Su equivalente en C sería:
UNIVERSIDAD DE CANTABRIA
typedef enum {planox,planoy,planoz} dimension;
dimension fuerza, linea;
linea=planox;
fuerza=linea+1;
Observaciones:
• en C (y en Java también) el operador de asignación es “=”
• los valores enumerados se tratan como enteros, con valores 0, 1,
2,...
• fuerza toma el valor planoy en el ejemplo
GRUPO DE COMPUTADORES Y TIEMPO REAL
DPTO. DE ELECTRÓNICA Y COMPUTADORES
© Michael González, Javier Gutiérrez
19/ene/09
17
Tipos discretos (cont.)
UNIVERSIDAD DE CANTABRIA
El equivalente al tipo Dimension en Java sería esta clase:
public enum Dimension {planox, planoy, planoz};
Dimension fuerza, linea;
linea=Dimension.planox;
GRUPO DE COMPUTADORES Y TIEMPO REAL
DPTO. DE ELECTRÓNICA Y COMPUTADORES
© Michael González, Javier Gutiérrez
19/ene/09
18
Caracteres
UNIVERSIDAD DE CANTABRIA
Los caracteres en Ada, C, y Java se representan encerrados entre
apóstrofes:
char c1,c2;
c1=’a’;
Los caracteres de control tiene una representación especial:
Ada
ASCII.LF
ASCII.NUL
ASCII.BEL
’’’
Carácter
new-line
carácter nulo
bell (pitido)
apóstrofe
C/Java
’\n’
’\0’
’\a’
’\’’
GRUPO DE COMPUTADORES Y TIEMPO REAL
DPTO. DE ELECTRÓNICA Y COMPUTADORES
© Michael González, Javier Gutiérrez
19/ene/09
19
Arrays
UNIVERSIDAD DE CANTABRIA
Los arrays de C son muy diferentes de los de Ada o Java:
• no tienen un tamaño especificado
• el usuario es responsable de no exceder su tamaño real
• se pueden manipular mediante punteros
Los arrays de Ada y Java son mucho más seguros
Los arrays de Java se crean siempre en memoria dinámica
• la variable array es una referencia que apunta al array creado
dinámicamente
• la asignación copia la referencia, no el array
En Java no hay tipos array, pero sí objetos (o variables) array
GRUPO DE COMPUT
Comentarios de: Una comparación entre C, C++, Java y Ada (0)
No hay comentarios