¿Por qué usar Java sobre C? (mejor respuesta para entrevista)

Cómo Java difiere de c

Aunque Java fue modelado después de C, difiere de C en muchos aspectos. Java no incorpora una serie de características disponibles en C. Para el beneficio de los programadores de C, señalamos aquí algunas diferencias importantes entre los lenguajes C y Java.

Java y C

Java se parece mucho a C, pero la principal diferencia entre Java y C es que Java es un lenguaje orientado a objetos y tiene un mecanismo para definir clases y objetos; mientras que C es un lenguaje orientado a procedimientos . En un esfuerzo por construir un lenguaje simple y seguro, el equipo de Java no incluyó algunas de las características de C en Java.

· JAVA está orientado a objetos mientras que C es de procedimiento. Diferentes paradigmas, es decir, la mayoría de las diferencias entre las características de los dos lenguajes surgen debido al uso de diferentes paradigmas de programación. C se desglosa en funciones mientras que JAVA se desglosa en Objetos. C está más orientado a procedimientos mientras que JAVA está orientado a datos.

· Java es un lenguaje interpretado mientras que C es un lenguaje compilado.

· C es un lenguaje de bajo nivel mientras que JAVA es un lenguaje de alto nivel.

· C usa el enfoque de arriba hacia abajo {sharp & smooth} mientras que JAVA usa el enfoque de abajo hacia arriba {on the rocks} . En C, la formulación del programa comienza definiendo el todo y luego dividiéndolos en elementos más pequeños. JAVA (y C ++ y otros lenguajes OOP) sigue el enfoque ascendente donde los elementos más pequeños se combinan para formar el todo.

· JAVA admite la sobrecarga de métodos, mientras que C no admite la sobrecarga en absoluto: JAVA admite la sobrecarga de funciones o métodos, es decir, podemos tener dos o más funciones con el mismo nombre (con ciertos parámetros variables como los tipos de retorno para permitir que la máquina diferencie entre ellos) ) Es decir, podemos sobrecargar métodos con el mismo nombre que tengan firmas de métodos diferentes . JAVA (a diferencia de C ++), no admite la sobrecarga del operador, mientras que C no permite la sobrecarga en absoluto.

· A diferencia de C, JAVA no es compatible con preprocesadores, y realmente no los necesita. Las directivas de preprocesador como #include & #define, etc. se consideran uno de los elementos más esenciales de la programación en C. Sin embargo, no hay preprocesadores en JAVA. Como Java no es compatible con preprocesadores; no podemos usar las declaraciones #define, #include y #ifdef. JAVA utiliza otras alternativas para los preprocesadores. Por ejemplo, se utiliza public static final en lugar del #define preprocessor. Java asigna nombres de clase a un directorio y estructura de archivos en lugar del #include utilizado para incluir archivos en C.

· Java no incluye las palabras clave de declaración únicas C goto, sizeof y typedef.

· Java no contiene los tipos de datos struct, union y enum.

· Java no define las palabras clave de modificadores de tipo automático, externo, registro, con signo y sin signo.

· La fuente y los archivos binarios de Java son completamente portátiles (sujetos a la disponibilidad de las bibliotecas apropiadas), ya que el formato fuente está estandarizado y los archivos binarios se ejecutan en una emulación de software de un procesador estandarizado, que también ralentiza la ejecución. En C, los binarios no suelen ser portátiles de una plataforma a otra, ya que utilizan directamente el procesador de hardware nativo de la plataforma y, por lo tanto, se ejecutan más rápido.

· Java no admite un tipo de puntero explícito. El puntero va detrás del escenario en JAVA, mientras que C requiere un manejo explícito de los punteros. Cuando se trata de JAVA, no necesitamos los * ‘s &’ s para lidiar con los punteros y sus direcciones. Más formalmente, no se requiere sintaxis de puntero en JAVA. Hace lo que necesita hacer. Mientras estamos en JAVA, creamos referencias para objetos.

· Java no admite ningún mecanismo para definir argumentos variables para funciones.

· Java requiere que las funciones sin argumentos se declaren con paréntesis vacíos y no con la palabra clave nula como se hace en C.

· Java agrega nuevos operadores como instanceof y >>>.

· Java agrega saltos rotulados y declaraciones continuas .

· Las funciones estándar de entrada y salida: aunque esta diferencia podría no tener ningún significado conceptual (intuitivo), tal vez sea solo la tradición. C usa las funciones printf y scanf como entrada y salida estándar, mientras que JAVA usa las funciones System.out.print & System and Information and Information..read.

· Java agrega muchas características requeridas para la programación orientada a objetos.

Ventajas de Java sobre lenguaje C

· Todos sabemos lo que hace un compilador. Toma su código y lo traduce en algo que la máquina puede entender, es decir, 0 y 1, el código de nivel de máquina. Eso es exactamente lo que sucede con nuestro código C: se ‘compila’. Mientras que con JAVA, el código se transforma primero a lo que se llama thebytecode. Este bytecode es ejecutado por JVM (Java Virtual Machine). Por la misma razón, el código JAVA es más portátil.

· C es un lenguaje de bajo nivel (interpretación difícil para el usuario, mayor significado para el código de nivel de máquina) mientras que JAVA es un lenguaje de alto nivel (abstraído de los detalles de nivel de máquina, mayor significado para el programa en sí).

· La gestión de memoria detrás de escena con JAVA y la gestión de memoria basada en el usuario en C: ‘malloc’ y ‘gratis’ son las llamadas a la biblioteca utilizadas en C para asignar y liberar fragmentos de memoria para datos específicos (especificados usando la palabra clave ‘tamaño de’). Por lo tanto, en C, la memoria es administrada por el usuario mientras que JAVA usa un recolector de basura que elimina los objetos que ya no tienen ninguna referencia a ellos.

· Manejo de excepciones en JAVA Y los errores y bloqueos en C: cuando se produce un error en un programa Java, se produce una excepción. Luego se puede manejar usando varias técnicas de manejo de excepciones. Mientras que en C, si hay un error, hay un error.

· Los programas Java pueden ser más fáciles de desarrollar ya que:

a. La gestión dinámica de la memoria se maneja en gran medida automáticamente, y

si. Se lanzan excepciones de diagnóstico para operaciones ilegales (como acceder a través de una referencia nula o acceder más allá de los límites de una matriz).

· Mejora de la productividad del desarrollo de software: la programación orientada a objetos es modular, ya que proporciona separación de tareas en el desarrollo de programas basados ​​en objetos. También es extensible, ya que los objetos se pueden extender para incluir nuevos atributos y comportamientos. Los objetos también se pueden reutilizar dentro de una aplicación cruzada. Debido a estos tres factores (modularidad, extensibilidad y reutilización), la programación orientada a objetos proporciona una productividad mejorada de desarrollo de software sobre las técnicas de programación basadas en procedimientos tradicionales.

· Mantenimiento mejorado del software: por las razones mencionadas anteriormente, el software orientado a objetos también es más fácil de mantener. Dado que el diseño es modular, parte del sistema se puede actualizar en caso de problemas sin necesidad de realizar cambios a gran escala.

· Desarrollo más rápido : la reutilización permite un desarrollo más rápido. Los lenguajes de programación orientados a objetos vienen con ricas bibliotecas de objetos, y el código desarrollado durante los proyectos también es reutilizable en proyectos futuros.

· Menor costo de desarrollo: la reutilización del software también reduce el costo de desarrollo. Típicamente, se pone más esfuerzo en el análisis y diseño orientado a objetos, lo que reduce el costo general de desarrollo.

· Software de mayor calidad: el desarrollo más rápido del software y el menor costo de desarrollo permiten utilizar más tiempo y recursos en la verificación del software. Aunque la calidad depende de la experiencia de los equipos, la programación orientada a objetos tiende a dar como resultado un software de mayor calidad.

Desventajas de Java sobre lenguaje C

· Tamaño de programa más grande: los programas orientados a objetos generalmente incluyen más líneas de código que los programas de procedimientos.

· No es adecuado para todo tipo de problemas: existen problemas que se prestan bien al estilo de programación funcional, al estilo de programación lógica o al estilo de programación basado en procedimientos, y la aplicación de programación orientada a objetos en esas situaciones no dará como resultado programas eficientes.

· Curva de aprendizaje empinada: el proceso de pensamiento involucrado en la programación orientada a objetos puede no ser natural para algunas personas, y puede llevar tiempo acostumbrarse. Es complejo crear programas basados ​​en la interacción de objetos. Algunas de las técnicas de programación clave, como la herencia y el polimorfismo, pueden ser difíciles de comprender inicialmente.

· Los programas C generalmente se ejecutarán más rápido, ya que la administración dinámica de la memoria (que a menudo no se requiere) está completamente bajo el control del programador, y no hay controles para operaciones ilegales.

· En C es más fácil trabajar con hardware directamente. Además, los programas C suelen ser más eficientes.

Déjame explicarte el funda con una analogía,

(Suponiendo que sabes algunas cosas sobre motocicletas).

Hay varios tipos de motos, cruceros, Tourer, OffRoad, Commuter, Sports, etc. (Hay una lista enorme).

Cada tipo de motocicleta es especializada / se adapta a un tipo particular de conducción. Ejemplo: Tourer está diseñado para viajar, lo que significa que estas motocicletas deben ser capaces de viajar a larga distancia. Del mismo modo, las motocicletas Off Road se usan cuando la conducción debe realizarse sobre una superficie rugosa, a menudo creada de forma natural, como arena, grava, un río, barro o nieve.

Para una situación dada, es importante tener la motocicleta correcta. Espero que estés de acuerdo conmigo en esto.

De manera similar en el mundo de la programación, tiene más sentido usar un lenguaje de programación apropiado en una situación particular. Esta oración puede parecer genérica y de alto nivel, déjame explicarte con un escenario

(En aras de la explicación, restringiré mi discusión a los lenguajes Java y C. El mismo argumento es aplicable en otros idiomas)

Considere una aplicación bancaria, este tipo de software tendría miles de flujos, requiere una base de datos para almacenar y recuperar datos, debe desarrollarse lo más rápido posible (para mantenerse al día con la competencia de otros bancos), etc. Ahora tenemos que elija entre Java y C. En este tipo de situaciones, el uso de Java es más apropiado, ya que es fácil de aprender, tiene varias bibliotecas o paquetes para facilitar las operaciones de DB. También teniendo en cuenta la cantidad de recursos de Java en el mercado, es fácil encontrar recursos para trabajar en los flujos.

Consideremos otro escenario, esta vez hablemos sobre los compiladores de idiomas. Para nuestro ejemplo, hablaré sobre el compilador de C ++ (que está escrito en C). Una de las características deseadas del lenguaje que se utiliza para escribir el compilador es la velocidad. ¿Qué tan rápido se puede compilar el código? Ahora tenemos que tomar una decisión entre Java y C. En esta situación, todo tiene sentido usar C. ¿Por qué? Puedes ir a través de este enlace.

¿Notaste el patrón? Para la situación dada (aplicación bancaria / compilador de lenguaje), debe elegir el lenguaje de programación correcto (Java o C).

Debe comprender la necesidad del requisito de seleccionar mejor el lenguaje de programación adecuado. Seleccionar un lenguaje de programación adecuado es tan clave para la aplicación como lo son los requisitos.

Dado que en nuestro día a día tenemos diferentes situaciones o requisitos, necesitamos usar Java o C en consecuencia.

Espero que esto sea útil.

  1. Polimorfismo Podemos usar el concepto de sobrecarga de funciones de tal manera que usando una función, existente en varias formas, podemos hacer operaciones similares, como encontrar el área de una figura geométrica.
  2. Herencia. Admite la reutilización del código. Una clase puede heredar las propiedades de otra clase y también puede agregar nuevas características propias.
  3. Encapsulación El programador puede controlar la visibilidad de la clase, las variables miembro y las funciones con la ayuda de modificadores de acceso.
  4. Lista de arreglo. No necesitamos usar una matriz de una longitud predefinida. Las ArrayLists son matrices dinámicas cuya longitud puede variar.
  5. Las operaciones de cadena son posibles de una manera mucho más simple. Hay varias funciones integradas como charAt (), reverse (), indexOf (), equals () etc.
  6. Manejo de excepciones. Java proporciona la función de manejo de excepciones mediante la cual el programador puede encargarse de un fragmento de código que probablemente arroje una excepción.
  7. Recolección automática de basura . Esta característica de Java garantiza que los objetos se destruyan y que el espacio de memoria se libere una vez que ya no sea necesario.
  8. Máquina independiente. Java se ejecuta según el principio de WORA (Write Once Run Anywhere). El código de bytes compilado, es decir, el archivo .class, se puede ejecutar en cualquier sistema que tenga un JDK instalado.

C es un lenguaje orientado a procedimientos donde, como Java, es un lenguaje de programación orientado a objetos.

  1. El programa C depende de la plataforma, lo que significa que su código compilado depende de la plataforma, pero Java no depende de la plataforma. Esta magia se debe al código de bytes de Java, lo que significa que el código compilado de Java es un código de bytes que es independiente de la plataforma. Entonces, los programas de Java también se llaman Write una vez que se ejecutan en cualquier lugar.
  2. En C hay conceptos de puntero, pero en Java no hay conceptos de puntero.
  3. Java proporciona más funciones de seguridad al proporcionar diferentes modificadores como Privado, protegido, predeterminado, etc.
  4. No podemos desarrollar aplicaciones web o aplicaciones de Internet utilizando C, pero en Java podemos desarrollar tanto aplicaciones independientes como aplicaciones web.
  5. Java es más simple, flexible y robusto, ya que proporciona algunas características de medición, como el acoplamiento Lose y el polimorfismo de tiempo de rin.
  6. C no proporciona un mecanismo de manejo de excepciones, pero admite Java.
  7. No existe un mecanismo de recolección de basura en C, pero en Java sí.

Entonces Java es preferible a C

Espero que esto te ayudará

C es un lenguaje de programación orientado a procedimientos, de nivel medio y de alto nivel. Y el enfoque es de arriba a abajo.

Contras de c:

* Sin uso de conceptos OOPS (herencia, polimorfismo, encapsulación, abstracción)

* El uso de punteros no es fácilmente comprensible para muchos usuarios.

* La seguridad es menos

* El uso de ir a una declaración de rama incondicional hace que sea difícil seguir el flujo del programa.

* Compiladores dependientes de la plataforma

Ahora moviéndose a Java, Java es un lenguaje de programación orientado a objetos bien enriquecido y sigue un enfoque ascendente.

Pros de java sobre c:

* Recolectores automáticos de basura.

* No uso de punteros y declaración goto

* sigue los conceptos de OOPS

* Programas multiproceso.

* Use para codificar aplicaciones web (Applets)

* El uso de colecciones hace que sea más fácil para los usuarios utilizar estructuras de datos como listas enlazadas, Hashmap, hashtable … ya que no quieren escribir ningún código desde cero.

Su pregunta merece alguna pregunta de respuesta …

¿Por qué caminas / corres cuando puedes gatear?

¿Por qué usas autos mientras puedes caminar y correr?

¿Por qué usas Airplane mientras tienes auto?

¿Ves, entendiste?

Es para mejorar para un programador. De lo contrario, aún tendríamos que trabajar con binarios donde 8 significa 1000.

Espero que esta respuesta cumpla con sus expectativas.