
Sintaxis:
Prácticamente idéntica en C++ y Java
Orientación a objetos:
En C++ se pueden escribir programas orientados a objetos, no orientados a objetos, o mezcla de ambos (por ejemplo, tener clases junto con funciones globales en el mismo programa)
Java es puramente orientado a objetos; cualquier función debe pertenecer
a alguna clase (es un método). Existe la función main, pero es un método
estático de una clase (la clase principal)
Control sobre la plataforma (hardware+S.O.):
C y C++: el programador tiene control del procesador.
Java: el programa se ejecuta sobre un procesador virtual (JVM) que
abstrae al programador de la plataforma concreta
Código de máquina generado:
C y C++: el compilador genera código de máquina para una plataforma concreta
Java: el compilador genera código de máquina (bytecode) para el
procesador JVM; dicho código debe ser interpretado a posteriori
Liberación de Memoria:
C y C++: a cargo del programador (delete)
Java: automática; los objetos creados son destruidos automáticamente cuando se quedan sin referencias. Un proceso de la JVM llamado recolector de basura (garbage collector)
Punteros:
C y C++: existen punteros con una aritmética bien definida, y entre otras cosas, permiten programador explorar la memoria del computador físico
Java: no existe el concepto de puntero; los objetos son accedidos mediante referencias (una referencia se puede considerar como el propio identificador del objeto); no existe aritmética de referencias
Paquetes:
C y C++: no existe tal concepto; lo más aproximado son los archivos de biblioteca (.h)
Java: un paquete es una entidad organizativa que permite agrupar clases, interfaces y excepciones, así como que sus elementos dispongan de una determinada visibilidad con respecto a elementos externos al paquete
Conversión implícita de tipos:
C y C++: existe (flexibilidad para el programador)
Java: no existe por considerarse un mecanismo objeto de errores potenciales
Sobrecarga de funciones y operadores:
C++: existen ambos tipos de sobrecarga
Java: sólo existe la sobrecarga de funciones (métodos); Los operadores que existen ya vienen sobrecargados por el compilador, (p.e. + para sumar números o concatenar cadenas).
Herencia múltiple:
C++: existe
Java: no existe por considerarse poco eficiente (esto implicó algunas críticas a Java desde ciertos sectores)
Interfaces:
C++: no existen este concepto
Java: existe el concepto de interfaz como conjunto de especificaciones de métodos y de atributos constantes; se estudiará en la siguiente práctica
Estructuras dinámicas:
C++: Librería STL
Java: paquete java.util. Los nombres y el funcionamiento son distintos.
Compiladores:
C++: Muchos compiladores. Pueden ser bastante distintos.
Java: Un único compilador siempre igual.
Objetos:
C++: Ningún ancestro común.
Java: Todos los objetos heredan automáticamente de Object.
Prácticamente idéntica en C++ y Java
Orientación a objetos:
En C++ se pueden escribir programas orientados a objetos, no orientados a objetos, o mezcla de ambos (por ejemplo, tener clases junto con funciones globales en el mismo programa)
Java es puramente orientado a objetos; cualquier función debe pertenecer
a alguna clase (es un método). Existe la función main, pero es un método
estático de una clase (la clase principal)
Control sobre la plataforma (hardware+S.O.):
C y C++: el programador tiene control del procesador.
Java: el programa se ejecuta sobre un procesador virtual (JVM) que
abstrae al programador de la plataforma concreta
Código de máquina generado:
C y C++: el compilador genera código de máquina para una plataforma concreta
Java: el compilador genera código de máquina (bytecode) para el
procesador JVM; dicho código debe ser interpretado a posteriori
Liberación de Memoria:
C y C++: a cargo del programador (delete)
Java: automática; los objetos creados son destruidos automáticamente cuando se quedan sin referencias. Un proceso de la JVM llamado recolector de basura (garbage collector)
Punteros:
C y C++: existen punteros con una aritmética bien definida, y entre otras cosas, permiten programador explorar la memoria del computador físico
Java: no existe el concepto de puntero; los objetos son accedidos mediante referencias (una referencia se puede considerar como el propio identificador del objeto); no existe aritmética de referencias
Paquetes:
C y C++: no existe tal concepto; lo más aproximado son los archivos de biblioteca (.h)
Java: un paquete es una entidad organizativa que permite agrupar clases, interfaces y excepciones, así como que sus elementos dispongan de una determinada visibilidad con respecto a elementos externos al paquete
Conversión implícita de tipos:
C y C++: existe (flexibilidad para el programador)
Java: no existe por considerarse un mecanismo objeto de errores potenciales
Sobrecarga de funciones y operadores:
C++: existen ambos tipos de sobrecarga
Java: sólo existe la sobrecarga de funciones (métodos); Los operadores que existen ya vienen sobrecargados por el compilador, (p.e. + para sumar números o concatenar cadenas).
Herencia múltiple:
C++: existe
Java: no existe por considerarse poco eficiente (esto implicó algunas críticas a Java desde ciertos sectores)
Interfaces:
C++: no existen este concepto
Java: existe el concepto de interfaz como conjunto de especificaciones de métodos y de atributos constantes; se estudiará en la siguiente práctica
Estructuras dinámicas:
C++: Librería STL
Java: paquete java.util. Los nombres y el funcionamiento son distintos.
Compiladores:
C++: Muchos compiladores. Pueden ser bastante distintos.
Java: Un único compilador siempre igual.
Objetos:
C++: Ningún ancestro común.
Java: Todos los objetos heredan automáticamente de Object.