Hola Estimados:
Una de las diferencias entre Java y C++, es que Java introdujo arrays que realmente lo son y eliminaron la aritmetica de punteros. que significa esto
Gracias por su respuesta
| |||
Diferencias entre java y C++ Hola Estimados: Una de las diferencias entre Java y C++, es que Java introdujo arrays que realmente lo son y eliminaron la aritmetica de punteros. que significa esto Gracias por su respuesta |
| ||||
Respuesta: Diferencias entre java y C++ Hola mira la dif mas grande que tenes es q en C++ necesitas pedir memoria(al igual q en java cuando haces un new) pero a su vez esa memoria en C++ te debes encargar de liberarla en java eso no pasa ya que posee un GC(garbage collector) que cuando pasa(automatica no hay forma de llamarlo) y ve variables que no estan en usa las borra, y otra cosa java es un lenguaje 100% Orientado a Objetos, C++ no(esto no quiere decir q no se pueda programar OO con C++, se puede ya que abarca los tres paradigmas de la programacion (estructurada, orientada a objetos y generica)), C++ soporta herencia multiple, java no lo "resuelve" con interfaces. mira para resumirte JAVA== C++ -- jejeje dijiera Bruce Eckel saludos y cuidate |
| ||||
Respuesta: Diferencias entre java y C++ Que tal!! Las respuesta anteriores son muy buenas, solo quiero aclarar lo siguiente, C++ si bien soporta herencia multiple, es imposible hacer andar eso, y si bien JAVA no soporta herencia multiple lo soluciona usando Interface,s que si es posible realizar, y usandolas bien son muy muy potentes!!! Aclaro esto por que en la anterior respuesta falto un coma ",". y se puede prestar a confucion!!!. Desde mi punto de vista, doy gracias a que JAVA hizo desaperecer los punteros!!!!, uuuuuuuuuufffffff es feo lidear con ellos, Saludos!!!. |
| |||
Respuesta: Diferencias entre java y C++ Una de las cosas que tiene Java por lo que los arrays son "verdaderos" y con lo que se impide una forma habitual de aritmetica de punteros es que se comprueba en tiempo de ejecucion el acceso a los miembros de un array y no se permite acceder a posiciones que no esten en el rango correcto (salta una ArrayIndexOutOfBoundsException). En C++ no se hace y a través de eso se pueden acceder a posiciones de memoria mas alla del array declarado, para lo bueno y para lo malo. S!
__________________ Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana. |
| ||||
Respuesta: Diferencias entre java y C++ Hola, Solamente me gustaría aclarar lo siguiente... Cita: Que es un array verdadero ? C++ tiene arrays falsos ? Quien define qué es un array ? En Java el Array es un objeto, por lo que tiene mayor funcionalidad, igual que si usas Vector:: en C++.La aritmetica de punteros se eliminó completamente, puesto que Java es un lenguage que funciona en diferentes sistemas operativos y arquitecturas. Funciona indistintamente en un procesador de 16, 32 o 64 bits sin necesidad de compilar de nuevo el código, al contrario de C++. Creo que ocultando los punteros al programador (acceso directo a memoria) fue importante para eliminar los inconvenientes entre varias arquitecturas de hardware y software. Pero tiene un concepto de "referencias", que en su debido límite viene a compararse a los punteros.
Código:
En Java, q hace referencia a p de una forma parecida a un puntero.// ************ Java public class Test { private class _v { public _v(int v) { value = v; }; public int value; } public Test() { _v p = new _v(1); _v q; q = p; System.out.println(p.value + " " + p.toString()); // 1 Test$_v@19821f System.out.println(q.value + " " + q.toString()); // 1 Test$_v@19821f } public static void main(String[] args) { new Test(); } } // ************ C++ #include "iostream" using namespace std; class _v { public: _v(int v) { value = v; }; int value; }; int main() { _v* p = new _v(1); _v* q; q = p; cout << p->value << " " << (void *)p << endl; // 1 00032E18 cout << q->value << " " << (void *)q << endl; // 1 00032E18 delete q; return 0; } En C, son punteros. (Solo hay 1 instancia de _v en los dos ejemplos). Cita: Runtime r = Runtime.getRuntime();r.gc(); Cita: Para cada tipo primitivo hay una clase que encapsula el tipo.Saludos, |
| |||
Respuesta: Diferencias entre java y C++ Cita: Como ya he dicho, alguna gente considera que los arrays en C++ no son "verdaderos" por que como no se comprueba que te salgas del indice en tiempo de ejecución, se pueden hacer muchas "cochinadas" y pervertir su uso real de arrays. Es una cuestion semántica y como la mayoría de tales cuestiones, como si un lenguaje es OO al 100%, sirve poco más que para iniciar flames en foros . Cita: Eliminar la aritmetica de punteros no es por los diferentes sistemas operativos donde ha de correr, es para evitar los problemas que da el abuso de los mismos, ya que los problemas de errores al usarla son dificiles de detectar y pueden tener consecuencias catastroficas. De hecho, es una de las cosas que usan virus y "exploits" para infectar programas.
Iniciado por HackmanC La aritmetica de punteros se eliminó completamente, puesto que Java es un lenguage que funciona en diferentes sistemas operativos y arquitecturas. Funciona indistintamente en un procesador de 16, 32 o 64 bits sin necesidad de compilar de nuevo el código, al contrario de C++. Creo que ocultando los punteros al programador (acceso directo a memoria) fue importante para eliminar los inconvenientes entre varias arquitecturas de hardware y software. La frase más correcta escrita debió ser: "no hay forma de controlar cuando hace su trabajo". Con lo que has escrito tu puedes pedirle al GC que haga su trabajo, pero no te garantiza que limpie completamente. Lo unico que se garantiza es que "se esforzará en limpiar" . La diferencia es sutil pero importante, por si esperamos que al hacer Runtime.gc() nos haya limpiado todo y pretendemos calcular con eso el tamaño que ocupaba un objeto, por ejemplo. S!
__________________ Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana. |
| ||||
Respuesta: Diferencias entre java y C++ Runtime r = Runtime.getRuntime(); r.gc(); esto no asegura que pase, lo unico que le dice al GC es que ahora podria ser un buen momento para que el pasara, pero en ningun momento lo fuerza, o sea solo le recuerda ahora si pasa o no es problema del GC saludos |
| ||||
Respuesta: Diferencias entre java y C++ Gente creo que C++ se asemeja mejor a la definicion de array!!! "una serie de direccienes de memoria cuntinuas", mientra que java "Gracias a dios", nos abstrae de esta definicion!!! y nos proteje respecto a direciones invalidas y de no dejar basura en la memoria, no tenemos que lidia con el hecho de punteros colgados... uuuffff. Respecto a la liberacion de memoria en C++ eso se hace explicito y ahi se termina!!!, si uno no libera memoria hablando mal y pronto "Cagaste" queda ahi dando vueltas!!! Eso es to to todo Amigos!!!! |
| ||||
Respuesta: Diferencias entre java y C++ Hola, Espero que no. Cita: Quien define qué es un array ?Java tiene funcionalidad extendida como dicha verificación. Pero eso es un valor agregado al lenguaje, podría decir que Perl tiene un mejor "array", por que tiene mas funcionalidad que el array de Java. Cita: No, no solamente por los diferentes sistemas operativos. Por diferentes arquitecturas de hardware.Un procesador de 16 bits "paginado" no maneja la memoria de la misma forma que un procesador de 32 con acceso "flat". Un procesador Alpha maneja la memoria de diferente forma que un RISC y un x86. (Sin mencionar PDA's, mobiles, etc). Windows 95 de 16 bits, o Windows 98 de supuestos 32 bits, no maneja la memoria de igual forma que Windows 2000, XP de 32 bits. Igual a Windows Vista de 64 bits. Inclusive hay que definir si es un OS ANSI o Unicode (WideByte/DoubleByte). (CreateWindow: Implemented as Unicode and ANSI versions on Windows NT/2000/XP.) Los programadores en C++ saben que tiene que pensar en todas esas características, en Java no. Los virus pueden ser transmitidos inclusive por medio de la VM. (No creo que hayan pensado en suprimir virus al crear Java) Para cada tipo primitivo hay una clase que encapsula el tipo. No dije que fuera un lenguaje 100% OO, ... la aseveración que Java no es 100% OO puede o no puede ser cierta, pero no puede asegurarse por el concepto que tiene también tipos de datos primitivos. Cita: No aseguré que fuera a suceder... solamente que si existe una forma de llamar al gc (tampoco aseguré que fuera a limpiar tooooooda la memoria).Saludos, Última edición por HackmanC; 01/08/2008 a las 18:39 Razón: append |
| ||||
Respuesta: Diferencias entre java y C++ Sí, pero tiene datos primitivos... eso no lo hace lenguaje objeto puro. Al igual que C++ tampoco lo es, claro. En contrapartida tienes SmallTalk. Cita: Pues yo si lo considero suficiente.la aseveración que Java no es 100% OO puede o no puede ser cierta, pero no puede asegurarse por el concepto que tiene también tipos de datos primitivos. Si existen "cosas" que no son objetos, no es un lenguaje orientado a objetos puro. Otra cosa es que eso sea mejor o peor. :) |
| ||||
Respuesta: Diferencias entre java y C++ Hola, Cita: No voy a contradecirte en ese punto, realmente no estoy seguro que java sea 100% orientado a objetos o no lo sea. Como correctamente hiciste la referencia a SmallTalk que si es orientado a objetos puro.Pero si Java tiene clases para los mismos objetos primitivos, es una cuestión conceptual nada más. Y se refiere más a la forma en que lo usas y no al lenguaje en sí. Si usas primitivos, tienes un lenguaje que no es 100% OO. Si usas las clases que encapsulan los datos primitivos, incertidumbre. Saludos, |
| ||||
Respuesta: Diferencias entre java y C++ Hola mira no se si es 100% OO pero sin duda que JAVA se invento para programar en Objetos, incluso todas las cosas que tiene java heredan directamente o indirectamente de Object(a excepcion de los datos primitivos), para mi eso ya es suficiente para decir que es OO saludos |
| |||
Respuesta: Diferencias entre java y C++ Bueno, ya hemos visto para que sirve definir un lenguaje como OO 100% o no . Y no, la aritmética de punteros no se quitó por eso. Precisamente Java define un procesador virtual en la JVM donde en todas las arquitecturas todos los datos usan el mismo numero de bytes y el orden esta definido. Y sí, se pensó en la seguridad al crear la JVM, incluyendo los ataques por buffer overflow etc. por eso hay varios niveles de seguridad para que tu codigo no pueda saltarse esos límites. Y seguramente se puedan hacer virus en la JVM, pero como si no es atacando la JVM, tu codigo no puede atacar a otro por "overflow". Lo del GC no era para contradecirte, solo era para explicar un poco mejor lo que puedes esperar. S!
__________________ Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana. |
| ||||
Respuesta: Diferencias entre java y C++ Hola, Bueno, ya hemos visto para que sirve definir por qué se quito la aritmética de punteros . Cita: ¿ Como se logró que en todas las arquitecturas todos los datos usaran el mismo numero de bytes y el orden estuviera definido ?Ocultando al programador el acceso directo a memoria y los punteros. El objetivo inicial de Java era portabilidad, y para eso era necesario eliminar todas las diferencias entres procesadores (incluyendo acceso directo a memoria o punteros). Cita: Como dijiste anteriormente, semántica. Creo, que si pensaron en la seguridad, pero no era el objetivo principal al crearlo.Saludos, ps: El ejemplo clásico de mi punto de vista es el procesador Morotola y PowerPC con su "endianess" tipo "big-endian". ps: Para comprender realmente este concepto hay que entrar en detalle como funciona el procesador, las instrucciones de código de maquina, y los punteros que existen en lenguaje assembler. Por ejemplo en x86: mov ax,[bx] o en RISC: li $v0,(10) ; y como Java elimina ese problema, creando diferentes VM para cada arquitectura de hardware, que muestren simplemente java.lang.Integer i = 10; sin importar si bx es 16, 32 o 64 bits. (O inclusive $v0 es de 64 bits). Y asegurando que java.lang.Integer va a ser de 32 bits. Y como está fuera de contexto en el foro de Java. Cada quien saque sus propias conclusiones. Última edición por HackmanC; 03/08/2008 a las 16:34 Razón: rewrite all & ps2 & correct big-endian x little-endian & end. |
| |||
Respuesta: Diferencias entre java y C++ Claro, por eso la seguridad se nombra como uno de los objetivos de diseño al crear Java, y de ahí, entre otras cosas, eliminar la aritmética de punteros y el control de los accesos a los arrays. Será que los de Sun no saben de lo que hablan, y eso que lo crearon. http://java.sun.com/docs/white/langenv/Intro.doc2.html ps: Se lo que es el "endian" y como funciona un procesador, así que comprendo perfectamente el concepto. Otra cosa es que si la gente que creo el lenguaje me dice que la aritmetica de punteros la quitaron para evitar errores y por seguridad y no para conseguir independencia de plataforma, pues les crea a ellos.
__________________ Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana. |