2009-06-08 13 views
5

Actualmente estoy trabajando con Java y sus aspectos de diseño orientado a objetos (también trabajo mucho con PHP/MySQL). No lo implemento en la web; Solo lo uso para diseñar programas para propósitos generales. Sin embargo, ahora necesito aprender C en este momento, y tengo un interés en C++. Obtuve El lenguaje de programación C, que algunas personas dicen que es el mejor libro sobre el tema. ¿Puede alguien decirme cuáles serán los mayores desafíos, excepto en el manejo de String, en la forma en que pienso en el diseño de programación y en la forma en que creo los programas? Entiendo que no puedo tener clases, pero ¿cómo me afectará esto específicamente (es decir, tendré que rediseñar los métodos y siempre diseñar todo con la idea de que es más difícil de editar)? Además, ¿es difícil el salto a C++ desde esos idiomas? Todos dicen que es un lenguaje muy difícil, pero ¿alguna experiencia previa ayuda? Y con esa experiencia sería Acelerado C++ ser duro de un libro para empezar?¿Transición de Java a C y luego a C++?

Gracias a un millón.

+0

Escribí un poco de C y ASM "de vuelta en el día" y no echo de menos la asignación de memoria y los punteros un bit (actualmente un chico C#). – JohnOpincar

+2

@John: Mi opinión es que trabajar con memoria alloc y punteros es como conducir stick-shift. Puede ser divertido y emocionante cuando conduces por una hermosa carretera de montaña, pero el 99% del tiempo estás atrapado en el tráfico en el camino al centro comercial. Estoy orgulloso de algunas cosas de bajo nivel que hice en el día, pero para el 99% de las cosas que hago hoy, eso sería una pérdida de esfuerzo. – Uri

+0

Sí, cosa extraña que cada país europeo está impulsando stick shift. Es la misma manera que las personas a las que les gusta programar en c en momentos en que podrían haber usado C++ C# java python no entiendo por qué. Excepto por la forma dura y profunda de aprender cómo funciona su computadora – Janusz

Respuesta

5

No se preocupe ni un poco. Empecé a programar con Java, luego pasé a C++. Y luego aprendí ensamblado x86 y ahora estoy en C y luego volví para usar algunas características de C++ como objetos. Incluso hice un proyecto de Java no hace mucho tiempo. El orden no es importante, siempre que trabajes para aprender estos idiomas, tendrás éxito con ellos.

Ahora, ha preguntado por el diseño. Creo que esta es la parte que más te gustará. En OOP, si quisiera crear un contenedor simple sobre una base de datos, crearía un Objeto y luego podría configurar un sistema de herencia con funciones polimórficas, etc.

En C, simplemente crearía un archivo llamado sqlite_wrapper. c, incluya # sqlite3.h y comience a escribir el código. Realizará un par de funciones, decidirá los parámetros que desea enviar (estructuras y valores) y habrá terminado.

En C no tiene clases pero tiene ARCHIVOS. Tener diferentes archivos ya separa la lógica. En Java tienes archivos + clases dentro de ellos para separar la lógica y eso también es muy bueno.

Buena suerte, diviértase.

+0

Gracias por la respuesta realmente en profundidad. El ejemplo ayudó a entenderlo mucho más. – Brian

10

Si está acostumbrado a OOP, la parte más difícil de la transición a un idioma que no sea OO será ajustarse a la logística de "simular objetos" utilizando el mecanismo existente. En C, esto normalmente implica tener una estructura, y luego tener un conjunto de funciones que toman esa estructura como un parámetro. Con C++, puedes evitar esto.

Sin embargo, el mayor desafío de la transición a C o C++ va a ser acostumbrarse a los punteros ya la asignación de memoria. Indudablemente cometerá errores inicialmente al hacer referencias y desreferenciaciones, y se confundirá con las referencias de C++ cuando trabaje con ellas. También provocará fugas de memoria o errores. Y dado que estás trabajando "en el cable", los bloqueos no serán bonitos. No estoy seguro de que haya una manera de superar estos dolores, sino practicar.

1

Como muchos otros dijeron. Es posible si conoces las diferencias. En algunos puntos, debe usar otras formas en algunos puntos que puede intentar programar en el idioma y no con el idioma, p. "simular" objetos con estructuras y un puntero a la estructura como primer argumento. Si tienes experiencia y te obligan a trabajar con ella, la aprenderás.

dos cosas que quiero recomendar que:

  1. Después de aprender lo básico de la lengua tratar de conseguir una comprensión profunda de los punteros y manejo de la memoria, dónde utilizar *, &,. , ->, hay diferencias importantes y yo solía probar hasta que el programa parecía funcionar. Esta es una muy mala idea.

  2. Piense en una buena forma en que realmente pueda probar sus programas, use un depurador tanto como sea posible para comprender por qué su programa se está ejecutando o fallando y qué está sucediendo. Puede cometer errores que nunca se presenta, pero cuando es importante y no tienen el tiempo que van a comer hasta que

2

pasé de ser un programador Uni -level segundo año en Java (con una gran cantidad de experiencia en otros idiomas que no son c) a un novato de C++ con aproximadamente 2 horas de tutoría de un amigo. En la línea de "Así es como declaras una clase, aquí está Hola mundo, etc."

La transición de allí a C es mucho más dolorosa, ya que C++ tiene la mayoría de las características de Java (la mayor que falta es la recolección de basura). Sugeriría que busques en Boost (una biblioteca C++), especialmente los punteros inteligentes. Además, ¡el tiempo dedicado a dominar la Biblioteca de plantillas estándar de C++ es un tiempo bien empleado!

4

me gustaría decir que sería más fácil de aprender C++ en las bases de Java, que en las bases de C.

acelerada C++ no sería más difícil, es un libro de nivel principiante. Hay muchos otros buenos libros por ahí. Pensar en C++ puede ser un buen comienzo, pero puede abrumarte al principio con muchas cosas familiares. Entonces, sugeriría que solo lo revise y luego tome Effective Series. Entonces excepcional, C++ moderno estará listo.

C++ no es tan difícil, lo único es que debe hacer algunas cosas por su cuenta. La parte más difícil puede ser la gestión de la memoria, como declaró Uri en su publicación. De hecho, es vasto y difícil de agarrar por completo, y esa podría ser la razón por la que es difícil.

This SO thread proporciona una buena e importante lista de lecturas para C++.

3

Existen diferencias sustanciales entre C y C++. El principal es el uso del diseño orientado a objetos en C++. También hay diferencias menores que son más de tipo de trato "acostumbrarse a" que cualquier otra cosa. Aquí hay algunos de ellos solo para pintar una imagen general.

  1. Diferencias en la asignación dinámica de memoria.
  2. Sin sobrecarga de funciones en C
  3. No hay prototipos de funciones en C
  4. Diferentes estilos de fundición
  5. Una biblioteca más amplia en C++.

Dado que te estás moviendo de Java, la programación de OO debe ser algo así como un hábito para ti y sería más fácil pasar a C++. Si tienes que empezar por C, no es gran cosa. Todavía podrá captar los mismos conceptos generales utilizados en ambos idiomas.

1

Como dije antes, C no es muy difícil, y puede ser una buena adición a su arsenal de programación.

C Cuando se compara con Java:

  • Hay punteros, esto le permite accesos de menor nivel, y hace que los insectos interesantes.
  • El lenguaje es delgado: hay muchas menos funciones.
  • No hay JVM que lo proteja con un buen lanzamiento que explica el error y el número de línea. Hay algo de compatibilidad con el sistema operativo, pero es muy limitado, por lo que deberá usar herramientas.
  • Sin recolección de basura, a menos que use one, usted mismo tendrá que ocuparse de su memoria.

En resumen: el problema principal será la depuración, encontrará algunos errores nuevos en lo que respecta a la memoria y el uso de punteros, y tendrá que usar herramientas/pensar más para resolverlo, ya que no hay JVM.