Documentos de Académico
Documentos de Profesional
Documentos de Cultura
COMPARACION Java C PDF
COMPARACION Java C PDF
Una comparacin
entre C, C++, Java y Ada UNIVERSIDAD DE CANTABRIA
1. Introduccin
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 parmetros
8. Modularidad y ocultamiento de informacin
9. Abstraccin de tipos y reusabilidad
10.Excepciones
11.Llamada a funciones C y Java desde Ada
12.Conclusiones
Ada C/Java
declare {
<declaraciones> <declaraciones>
begin
<instrucciones> <instrucciones>
exception }
<manejadores>
end;
2. Estructura de un programa
(cont.) UNIVERSIDAD DE CANTABRIA
Estructura de un programa:
Ada C Java
with modulo1; #include <modulo1.h> import paquete.*;
procedure Nombre is main() public class Nombre {
<declaraciones> { public static void
begin <declaraciones> main (String[] args)
{
<instrucciones>
<instrucciones> <declaraciones>
end;
}
<instrucciones>
}
}
#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;
C/Java Ada
se distingue entre maysculas y minscu- no hay distincin
las
las instrucciones acaban con ;, pero los instrucciones y bloques acaban con ;
bloques no
En Java las funciones son bloques que Las funciones y procedimientos son blo-
siempre son mtodos de clases ques que se pueden anidar
comentarios entre /**/, o empezando los comentarios empiezan con -- y
con // hasta fin de lnea continan hasta el final de la lnea
todas las variables deben declararse idem.
los strings se encierran entre "" idem.
en C y Java el retorno de lnea se pone en retorno de lnea con operaciones especfi-
el string "\n" cas (New_Line, Put_Line)
Importancia de la declaracin de
variables UNIVERSIDAD DE CANTABRIA
Tipos predefinidos:
Ada C Java
Integer signed char byte
short short
int int
long long
Boolean (se usa int) boolean
Character (8 bits) se usa char (8 bits) char (16 bits)
Wide_Character (16 bits) wchar_t
Float float float
double double
Duration - -
String char[], char* String
C/Java
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
Su equivalente en C sera:
typedef enum {planox,planoy,planoz} dimension;
dimension fuerza, linea;
linea=planox;
fuerza=linea+1;
Observaciones:
en C (y en Java tambin) el operador de asignacin es =
los valores enumerados se tratan como enteros, con valores 0, 1,
2,...
fuerza toma el valor planoy en el ejemplo
linea=Dimension.planox;
Y en Java:
float v[]={0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0};
boolean contactos[][]=new boolean[8][8];
int a[]=new int[4];
Punteros y estructuras de
datos dinmicas UNIVERSIDAD DE CANTABRIA
Observar que:
el smbolo -> se usa para indicar el miembro de una estructura
a la que apunta el puntero
el puntero no se inicializa por defecto a 0 (que es el equivalente a
null)
malloc() equivale a new, pero es preciso pasarle el nmero de
bytes que se reservan para la nueva variable
el nmero de bytes que ocupa un tipo de datos se obtiene con
sizeof()
el operador unario & se puede usar para obtener un puntero que
apunte a una variable (p.e. &var_i es un puntero que apunta a
var_i)
Operadores y expresiones
(cont.) UNIVERSIDAD DE CANTABRIA
Operadores y expresiones
(cont.) UNIVERSIDAD DE CANTABRIA
En Ada:
Paquete Ada.Text_IO:
Put (Character); Get (Character);
Put (String); Get (String);
Put_Line (String); Get_Line (String, Num);
New_Line; Skip_Line;
Paquete Ada.Integer_Text_IO:
Put (Integer); Get (Integer);
Put (Integer, Ancho);
Paquete Ada.Float_Text_IO:
Put (Float); Get (Float);
Put (Float, Antes, Despues, Exp);
En C, mdulo <stdio.h>
int printf(string_formato[, expr, ...]);
// escribe y retorna el nmero de caracteres
// escritos
int scanf (string_formato,&var[,&var...]);
// lee y retorna el nmero de datos ledos
// correctamente
char *fgets(char *s, int size, FILE* stream);
// lee una lnea y la mete en s, hasta el
// final de la lnea (inclusive) o hasta un mximo
// de size-1 caracteres; aade un nulo al final
// stream es un fichero: para el teclado usar stdin
// retorna NULL si hay error
#include <stdio.h>
int main ()
{
int nota1, nota2, nota3, media;
// falta la deteccin de errores
printf("Nota primer trimestre: ");
scanf ("%d", ¬a1);
printf("Nota segundo trimestre: ");
scanf ("%d",¬a2);
printf("Nota tercer trimestre: ");
scanf ("%d",¬a3);
media=(nota1+nota2+nota3)/3;
printf ("La nota media es : %d\n",media);
return 0;
}
Instruccin condicional
Ada C Java
if exp_booleana then if (exp_entera) { if (exp_booleana) {
instrucciones; instrucciones; instrucciones;
end if; } }
if exp_booleana then if (exp_entera) { if (exp_booleana) {
instrucciones; instrucciones; instrucciones;
else } else { } else {
instrucciones; instrucciones; instrucciones;
end if; } }
if (i=4) {
printf("valor de i=%d",i);
} else {
printf("no es 4");
}
#include <stdio.h>
main () {
int nota1, nota2, nota3, media;
Ada C/Java
case exp_discreta is switch (exp_entera) {
when valor1 => case valor1 :
instrucciones; instrucciones;
when valor2 | valor3 => break;
instrucciones; case valor2 :
when others => case valor3 :
instrucciones; instrucciones;
end case; break;
default :
instrucciones;
break;
}
Cuidado: No olvidarse el break
GRUPO DE COMPUTADORES Y TIEMPO REAL Michael Gonzlez, Javier Gutirrez 46
DPTO. DE ELECTRNICA Y COMPUTADORES 19/ene/09
Ada C Java
while exp_booleana while (exp_entera) { while (exp_booleana) {
loop instrucciones; instrucciones;
instrucciones; } }
end loop;
loop while (1) { while (true) {
instrucciones; instrucciones; instrucciones;
end loop; } }
loop do { do {
instrucciones; instrucciones; instrucciones;
exit when } while (exp_entera); } while(exp_booleana);
exp_booleana;
end loop;
Ada C Java
for i in v_ini..v_fin for (i=v_ini; for (int i=v_ini;
loop i<=v_fin; i++) i<=v_fin; i++)
instrucciones; { {
end loop; instrucciones; instrucciones;
} }
Observar que:
En C, la variable de control del lazo debe aparecer en las
declaraciones; en Ada no; en Java y C99 es opcional
La instruccin C/Java es ms flexible: las tres expresiones entre
parntesis son arbitrarias
Puede usarse break para salirse de un lazo, de igual modo que la
instruccin exit incondicional de Ada
Y su llamada es:
int a,b;
intercambia (&a,&b);
Y su llamada es:
Entero a=new Entero(val1),b=new Entero(val2);
intercambia (a,b);
8. Modularidad y ocultamiento de
informacin UNIVERSIDAD DE CANTABRIA
typedef struct {
stacks.h
int elem[30];
int top;
} stack;
void push(int i,
stack *s);
int pop (stack *s);...
main.c stacks.c
#include "stacks.h" #include "stacks.h"
#include <math.h> void push(int i,
main() { stack *s)
stack s; { ...
}
push(1,&s); int pop (stack *s)
... { ...
} }...
// manejo de excepciones
...
try {
termometro.pon_valor(t);
...
} catch (error_de_rango error) {
printf("Valor incorrecto: %f",
error.valor_erroneo);
<otras instrucciones de manejo>;
} catch (...) {
<instrucciones de manejo de otras excep.>;
}
use Ada.Text_IO;
procedure Test_System is
Orden : String(1..50);
N_Orden : Natural;
Codigo_Error : Integer;
UNIVERSIDAD DE CANTABRIA