Foro de elhacker.net

Programación => Programación General => Mensaje iniciado por: linux1 en 18 Octubre 2010, 18:54 pm



Título: mejor lenguaje para empezar en poo?
Publicado por: linux1 en 18 Octubre 2010, 18:54 pm
hola amigos resulta que me voy a animar a aprender programacion orientada a objetos poo

pero no se con que lenguaje comenzar... c++, java, vb .net, etc...

ya programo en c

aclaro que ya estuve viendo los conceptos de la poo

herencia
recursividad
clases
etc....
 :)


Título: Re: mejor lenguaje para empezar en poo?
Publicado por: Littlehorse en 18 Octubre 2010, 19:04 pm
C++, sin dudas.  :)


Título: Re: mejor lenguaje para empezar en poo?
Publicado por: Lunfardo en 19 Octubre 2010, 00:06 am

herencia
recursividad
clases
etc....
 :)



La recursividad no tiene nada que ver con un objeto


Título: Re: mejor lenguaje para empezar en poo?
Publicado por: Franki en 19 Octubre 2010, 20:03 pm
Java o .NET sin duda.


Título: Re: mejor lenguaje para empezar en poo?
Publicado por: Horricreu en 19 Octubre 2010, 20:05 pm
Si vienes de C, ¿por qué no C++ :D?


Título: Re: mejor lenguaje para empezar en poo?
Publicado por: Siuto en 19 Octubre 2010, 21:00 pm
Si lo que queres aprender es el paradigna de la POO bien podes aprenderlo en C++ ya que sabiendo C pasar de un lenguaje al otro es muuuuy simple.

De todas formas yo te recomiendo C# o Java que aunque necesitas un poco mas de trabajo para entender viniendo de C son lenguajes de mas alto nivel y podes hacer aplicaciones con mucho menos esfuerzo y ambos poseen una sintaxis basada en C.


Título: Re: mejor lenguaje para empezar en poo?
Publicado por: MazarD en 20 Octubre 2010, 13:27 pm
Aunque cualquiera de los nombrados es bueno yo recomendaría c# o java, el hecho de que sean lenguajes orientados a objetos puros evitará que cometas algunos errores que podrías cometer en lenguajes multiparadigma como c++.



Título: Re: mejor lenguaje para empezar en poo?
Publicado por: klaussius en 22 Octubre 2010, 16:17 pm
El camino del aprendizaje del programador que ha empezado a hacer cosas en C es  ir de C a C++, y de C++ a Java y/o a C#...

...aunque con esto que Apple ha soltado de que no va a soportar Java estos días, no sé yo si sería mejor pasar de C++ a C# y dejar la otra opción aparcada (que no olvidada) para esos días...


Título: Re: mejor lenguaje para empezar en poo?
Publicado por: globsharp en 22 Octubre 2010, 19:17 pm
Lo mejor para empezar es un lenguaje de Orientación a Objetos puro, yo te recomiendo Java, una vez aprendás bien la POO en Java te será mas sencillo entender las peculiaridades de otros lenguajes como C++

Una buena alternativa a Java como primera experiencia es C#, que viene a ser una mejora de Java pero cerrado a sistemas de Microsoft.



Título: Re: mejor lenguaje para empezar en poo?
Publicado por: Littlehorse en 22 Octubre 2010, 19:57 pm
Decir que un lenguaje es OO puro es nada mas ni nada menos que decir que el lenguaje lo es, y no de las posibilidades disponibles del propio lenguaje respecto de la orientación a objetos.

C++ es multiparadigma y por supuesto eso le impide ser OO puro, pero eso no quita que se puedan implementar perfectamente todos los conceptos relacionados a la POO. Esto lo aclaro porque entre lineas se puede entender que C++ corre con una especie de desventaja por no ser OO puro, y eso desde mi punto de vista es incorrecto.

Tomando el concepto que un lenguaje OO puro es mejor para aprender POO, entonces por que nadie aquí todavía menciono a SmallTalk o Ruby?
Si un factor primordial es la salida laboral rápida, yo te recomendaría C# siempre que vaya acorde a tus objetivos, ya que tiene una curva de aprendizaje mas amigable que el resto, pero la verdad es que C++ es la mejor transición si venís de C.

En cuanto a lo de si Java y C# son OO puros, la verdad es que si nos ponemos en detalle lo podemos discutir por un rato largo, pero me parece que seria marear mucho el tema principal.
Solo dejo esto:

Citar
Languages called "pure" OO languages, because everything in them is treated consistently as an object, from primitives such as characters and punctuation, all the way up to whole classes, prototypes, blocks, modules, etc. They were designed specifically to facilitate, even enforce, OO methods. Examples: Smalltalk, Eiffel (http://en.wikipedia.org/wiki/Eiffel_%28programming_language%29), Ruby (http://en.wikipedia.org/wiki/Ruby_%28programming_language%29), JADE (http://en.wikipedia.org/wiki/JADE_%28programming_language%29).


Citar
Una buena alternativa a Java como primera experiencia es C#, que viene a ser una mejora de Java pero cerrado a sistemas de Microsoft.
Si te leyese Leyer  ;D. C# no es ni una mejora ni nada similar, son dos lenguajes distintos con sus ventajas y desventajas, y de hecho también existen proyectos como Mono (http://www.mono-project.com/Main_Page)


Saludos! :D


Título: Re: mejor lenguaje para empezar en poo?
Publicado por: globsharp en 22 Octubre 2010, 23:40 pm
Hola Littlehorse :)

No es que C++ cadezca de elementos de OO, pero sí lo encuentro mas complicado que Java para empezar a adentrarse en la POO, digamos que en Java creo que podría concentrarse mejor en la POO en sí sin tener que atender a la necesidad de programar destructores, gestionar la memoria dinámica y distraerse con los elementos no OO del lenguaje.

Lo de que C# es una mejora de Java no lo podría haber expresado mas inadecuadamente, cierto, no es una mejora de Java, quise expresar que parece una mejora de Java dado a que está influenciado por Java y C++ pero corrigiendo algunas fallas o desventajas de Java, pero no está hecho sobre Java, es un lenguaje diferente influenciado por otros lenguajes, ciertamente.

C# está cerrado a sistemas Windows, pero sé que una parte de .NET fue liberada y que el proyecto MONO aprovecha esto para dar compatibilidad de C# a otros sistemas, pero parte de .NET si no me equivoco sigue estando cerrado, y la compatibilidad que ofrece MONO es por tanto incompleta, hay que tenerlo en cuenta.


Título: Re: mejor lenguaje para empezar en poo?
Publicado por: [D4N93R] en 23 Octubre 2010, 00:00 am
" una parte de .NET fue liberada y que el proyecto MONO aprovecha esto para dar compatibilidad de C# a otros sistemas,"

Falso :) Mono no puede implementar ni una línea de código parecida a la de Microsoft, por la licencia de éste último. Mono es una implementación del CLR totalmente basada en el standard ECMA de C#.

" la compatibilidad que ofrece MONO es por tanto incompleta"

Falso :), la versión 2 y 3.5 están totalmente estables, lo único que no se va a hacer es WPF. y ya están trabajando en 4.0.

Mono está tan bien desarrollado que tiene casi el mismo performance que Java en un Ubuntu. Un ejemplo de estabilidad son algunos juegos de EA que implementan mono dentro del core como lenguaje de scripting o la misma página de Mono está en Asp.net / Apache.

Aportando al tema, C# aparte de como dice globsharp de estar influenciado (al principio) por Java y C++, también lo estuvo por Delphi ya que fue el mismo creador que lo diseñó. Aparte de eso, la OO en C# es superior a java, ya que en java si no me equivoco aún todo no hereda de Object. Aunque creo haber leído una noticia de que ya habían hecho esto.

Con respecto a cual es mejor? pues C++ tiene algo que no tiene Java ni C#, herencia múltiple, y que si se trata con cuidado es algo muy poderoso.

Para aprender POO no hace falta elegir uno, ya que con el que te sientas más cómodo aprenderás lo mismo en el mismo tiempo, son los mismo conceptos y no hay nada complicado ni oculto.

Un saludo.


Título: Re: mejor lenguaje para empezar en poo?
Publicado por: globsharp en 23 Octubre 2010, 01:01 am
Gracias por las rectificaciones, [D4N93R] :)

Solo un detalle, la herencia multiple no existe ni en Java ni en C# porque estos tienen soporte para interfaces.


Título: Re: mejor lenguaje para empezar en poo?
Publicado por: linux1 en 23 Octubre 2010, 02:42 am

Para aprender POO no hace falta elegir uno, ya que con el que te sientas más cómodo aprenderás lo mismo en el mismo tiempo, son los mismo conceptos y no hay nada complicado ni oculto.

Un saludo.
tienes razon el problema es que trato de buscar los fundamentos de la poo y solo encuentro articulos relacionados con otros lenguajes java, c++, javascript...


gracias por la ayuda creo que me voy a lanzar por java y asi mato dos pajaros de un tiro...
ya que tambien me interesa el desarrollo para moviles...


Título: Re: mejor lenguaje para empezar en poo?
Publicado por: [D4N93R] en 23 Octubre 2010, 03:06 am
Gracias por las rectificaciones, [D4N93R] :)

Solo un detalle, la herencia multiple no existe ni en Java ni en C# porque estos tienen soporte para interfaces.

Nop, Las interfaces son para otra cosa. La herencia multiple no existe ni en Java ni en C# simplemente para evitar problemas como bases duplicadas y hace también que la implementación tenga más complejidad que puede tener impactos en casting, generics, acceso a campos, serialización, reflection, etc.

Aunque es cierto que se puede resolver el uso de MI con interfaces, la existencia de las interfaces no son la causa de la inexistencia.

Un saludo.!


Título: Re: mejor lenguaje para empezar en poo?
Publicado por: Littlehorse en 23 Octubre 2010, 03:13 am
Exacto, uno de los objetivos de ambos lenguajes es mantener la simplicidad a toda costa, y la herencia múltiple adiciona demasiada complejidad. Por esa misma razón, Java tampoco permite la sobrecarga de operadores.


Citar
tienes razon el problema es que trato de buscar los fundamentos de la poo y solo encuentro articulos relacionados con otros lenguajes java, c++, javascript...

En las referencias de wikipedia tenes varios:

  • chach, Stephen (2006). Object-Oriented and Classical Software Engineering, Seventh Edition. McGraw-Hill (http://en.wikipedia.org/wiki/McGraw-Hill). ISBN (http://en.wikipedia.org/wiki/International_Standard_Book_Number) 0-073-19126-4 (http://en.wikipedia.org/wiki/Special:BookSources/0-073-19126-4).
  • Abadi, Martin (http://en.wikipedia.org/wiki/Martin_Abadi); Luca Cardelli (http://en.wikipedia.org/wiki/Luca_Cardelli) (1998). A Theory of Objects. Springer Verlag (http://en.wikipedia.org/wiki/Springer_Verlag). ISBN (http://en.wikipedia.org/wiki/International_Standard_Book_Number) 0-387-94775-2 (http://en.wikipedia.org/wiki/Special:BookSources/0-387-94775-2).
  • Abelson, Harold (http://en.wikipedia.org/wiki/Harold_Abelson); Gerald Jay Sussman (http://en.wikipedia.org/wiki/Gerald_Jay_Sussman), (1997). Structure and Interpretation of Computer Programs (http://mitpress.mit.edu/sicp/). MIT Press (http://en.wikipedia.org/wiki/MIT_Press). ISBN (http://en.wikipedia.org/wiki/International_Standard_Book_Number) 0-262-01153-0 (http://en.wikipedia.org/wiki/Special:BookSources/0-262-01153-0).
  • Armstrong, Deborah J. (February 2006). "The Quarks of Object-Oriented Development" (http://portal.acm.org/citation.cfm?id=1113040). Communications of the ACM 49 (2): 123–128. doi (http://en.wikipedia.org/wiki/Digital_object_identifier):10.1145/1113034.1113040 (http://dx.doi.org/10.1145%2F1113034.1113040). ISSN (http://en.wikipedia.org/wiki/International_Standard_Serial_Number) 0001-0782 (http://www.worldcat.org/issn/0001-0782). http://portal.acm.org/citation.cfm?id=1113040 (http://portal.acm.org/citation.cfm?id=1113040). Retrieved 2006-08-08.
  • Booch, Grady (http://en.wikipedia.org/wiki/Grady_Booch) (1997). Object-Oriented Analysis and Design with Applications. Addison-Wesley (http://en.wikipedia.org/wiki/Addison-Wesley). ISBN (http://en.wikipedia.org/wiki/International_Standard_Book_Number) 0-8053-5340-2 (http://en.wikipedia.org/wiki/Special:BookSources/0-8053-5340-2).
  • Eeles, Peter; Oliver Sims (1998). Building Business Objects. John Wiley & Sons (http://en.wikipedia.org/wiki/John_Wiley_%26_Sons). ISBN (http://en.wikipedia.org/wiki/International_Standard_Book_Number) 0-471-19176-0 (http://en.wikipedia.org/wiki/Special:BookSources/0-471-19176-0).
  • Gamma, Erich (http://en.wikipedia.org/wiki/Erich_Gamma); Richard Helm (http://en.wikipedia.org/w/index.php?title=Richard_Helm&action=edit&redlink=1), Ralph Johnson (http://en.wikipedia.org/wiki/Ralph_Johnson), John Vlissides (http://en.wikipedia.org/wiki/John_Vlissides) (1995). Design Patterns: Elements of Reusable Object Oriented Software. Addison-Wesley. ISBN (http://en.wikipedia.org/wiki/International_Standard_Book_Number) 0-201-63361-2 (http://en.wikipedia.org/wiki/Special:BookSources/0-201-63361-2).
  • Harmon, Paul (http://en.wikipedia.org/wiki/Paul_Harmon_%28management_author%29); William Morrissey (1996). The Object Technology Casebook - Lessons from Award-Winning Business Applications. John Wiley & Sons. ISBN (http://en.wikipedia.org/wiki/International_Standard_Book_Number) 0-471-14717-6 (http://en.wikipedia.org/wiki/Special:BookSources/0-471-14717-6).
  • Jacobson, Ivar (http://en.wikipedia.org/wiki/Ivar_Jacobson) (1992). Object-Oriented Software Engineering: A Use Case (http://en.wikipedia.org/wiki/Use_case)-Driven Approach. Addison-Wesley. ISBN (http://en.wikipedia.org/wiki/International_Standard_Book_Number) 0-201-54435-0 (http://en.wikipedia.org/wiki/Special:BookSources/0-201-54435-0).
  • Kay, Alan (http://en.wikipedia.org/wiki/Alan_Kay). The Early History of Smalltalk (http://gagne.homedns.org/%7etgagne/contrib/EarlyHistoryST.html). http://gagne.homedns.org/%7etgagne/contrib/EarlyHistoryST.html (http://gagne.homedns.org/%7etgagne/contrib/EarlyHistoryST.html).
  • Meyer, Bertrand (http://en.wikipedia.org/wiki/Bertrand_Meyer) (1997). Object-Oriented Software Construction (http://en.wikipedia.org/wiki/Object-Oriented_Software_Construction). Prentice Hall (http://en.wikipedia.org/wiki/Prentice_Hall). ISBN (http://en.wikipedia.org/wiki/International_Standard_Book_Number) 0-13-629155-4 (http://en.wikipedia.org/wiki/Special:BookSources/0-13-629155-4).
  • Rumbaugh, James (http://en.wikipedia.org/wiki/James_Rumbaugh); Michael Blaha, William Premerlani, Frederick Eddy, William Lorensen (1991). Object-Oriented Modeling and Design. Prentice Hall. ISBN (http://en.wikipedia.org/wiki/International_Standard_Book_Number) 0-13-629841-9 (http://en.wikipedia.org/wiki/Special:BookSources/0-13-629841-9).
  • Taylor, David A. (1992). Object-Oriented Information Systems - Planning and Implementation. John Wiley & Sons. ISBN (http://en.wikipedia.org/wiki/International_Standard_Book_Number) 0-471-54364-0 (http://en.wikipedia.org/wiki/Special:BookSources/0-471-54364-0).
  • Schreiner, Axel-Tobias (1993). Object oriented programming with ANSI-C (http://hdl.handle.net/1850/8544). Hanser. ISBN (http://en.wikipedia.org/wiki/International_Standard_Book_Number) 3-446-17426-5 (http://en.wikipedia.org/wiki/Special:BookSources/3-446-17426-5). http://hdl.handle.net/1850/8544 (http://hdl.handle.net/1850/8544).

Saludos



Título: Re: mejor lenguaje para empezar en poo?
Publicado por: globsharp en 23 Octubre 2010, 03:58 am
Ah :D gracias a los dos por las aclaraciones, da gusto leerles.


Título: Re: mejor lenguaje para empezar en poo?
Publicado por: MazarD en 23 Octubre 2010, 13:43 pm
Ya no viene muy a cuento pero me quedé con las ganas de responder. xD

El problema de aprender orientación a objetos en C++ no es que no puedas hacerlo, es que abarcas un rango de posibilidades "no adecuadas" en OO que no serían posibles en c# o java, otro punto es la sintaxis, que en estos dos últimos lenguajes es más explicita. Está claro que se puede aprender en C++ pero seguramente no será el mejor para aprender.

El hecho de que puedas declarar funciones y variables fuera de una clase en C++ y no en java o c#, el que no puedas crear structs en java (o en c# debas especificar el acceso), el tener que especificar abstract para crear clases abstractas tanto en c# como en java y no en c++, etc etc etc hacen que sea mejor para aprender unos que el otro.
Aunque ruby, eiffel y demás puedan ser igual o más válidos (personalmente no he tenido la oportunidad de probarlos) de lejos no tendrán la documentación o comunidad de desarrolladores que tiene java, c# o c++.

Saludos!


Título: Re: mejor lenguaje para empezar en poo?
Publicado por: [D4N93R] en 23 Octubre 2010, 15:44 pm
Buen post MazarD,

Sí, yo creo que tomando en cuenta lo que expones si sea un poco más adecuado Java o C# en un principio, pero dada la sintaxis no creo que sea poblema por ejemplo saltar de C# a Java, o Java a C++. Se pueden a prender los 3 sin ningún problema, obviamente cada uno tiene lo suyo, pero creo que es la mejor opción a la hora de elegir uno.

Yo mismo primero con Java que con .net, y primero fue Atari Basic  y luego VB5, aunque estuve muchos años con la sintaxis de Basic, (incluso VB.net) , yo mismo decía que esos {} no me gustaban, pero la verdad es que es muy diferente a la hora de programar y leer código.

Por lo mismo digo de nuevo, pruébalos :)


Título: Re: mejor lenguaje para empezar en poo?
Publicado por: Littlehorse en 23 Octubre 2010, 19:40 pm
@Mazard

Yo aclare el tema de las posibilidades en C++ porque en los posts anteriores se podía entender entre lineas que en C++ no se podía utilizar POO perfectamente. Mas allá de que sabia que no era eso lo que quisiste decir, es como que flotaba esa idea.
De Eiffel yo solo conozco la torre :xD, lo mencione porque la conclusión era que para aprender POO lo mejor es un lenguaje OO puro, sin embargo ningún lenguaje OO puro había sido mencionado.
De hecho, no recomiendo aprender ni Eiffel, ni Smalltalk, ya que no considero que aporten nada para aprender ni C++, ni Java, ni C#. Lo importante para aprender POO es que el lenguaje soporte el paradigma completamente y nada mas.

En cuanto al resto, estoy de acuerdo a medias por el hecho que el usuario viene de C, por lo tanto esta claro que tiene que saber reconocer los elementos de estructurada a la hora de meterse con C++.
Otra historia es cuando C++ es el primer lenguaje, se tarda un tiempo en dejar la estructurada y se tarda otro tiempo mas en programar orientado a objetos en lugar de basado en objetos. En ese caso si estaría de acuerdo con lo ultimo que dijiste.

Saludos!


Título: Re: mejor lenguaje para empezar en poo?
Publicado por: MazarD en 25 Octubre 2010, 17:02 pm
Citar
De Eiffel yo solo conozco la torre :xD, lo mencione porque la conclusión era que para aprender POO lo mejor es un lenguaje OO puro, sin embargo ningún lenguaje OO puro había sido mencionado.
De hecho, no recomiendo aprender ni Eiffel, ni Smalltalk, ya que no considero que aporten nada para aprender ni C++, ni Java, ni C#.
Tienes razón, siendo rigurosos c# y java no serán lenguajes oo puros, de todos modos fueron diseñados con la intención de serlo, al contrario de c++ que lo soporta perfectamente pero no pretende darle mas importancia que a cualquier otro paradigma.

Citar
Lo importante para aprender POO es que el lenguaje soporte el paradigma completamente y nada mas.
También cierto, pero si la pregunta es "cual es el mejor lenguaje para aprenderlo", aunque no puede dejar de ser subjetivo, java o c# por estar diseñados para serlo muy probablemente serán una mejor opción.

Citar
En cuanto al resto, estoy de acuerdo a medias por el hecho que el usuario viene de C, por lo tanto esta claro que tiene que saber reconocer los elementos de estructurada a la hora de meterse con C++.

Bueno, esto es mas o menos lo que intentaba reflejar en mi otro post.
El punto es que sepa reconocerlos (más que de la estructurada de la procedimental) y deje de utilizarlos para empezar a utilizar la metodología típica de la OO, con C++ nunca tendras problemas para hacer lo que no debes, con java y c# si.
Aunque este no sea el punto principal para aprender, puede en buena medida simplificar el proceso, y puestos a elegir un lenguaje para aprender, mejor que simplifique el camino por poco que sea.

Saludos!


Título: Re: mejor lenguaje para empezar en poo?
Publicado por: [D4N93R] en 25 Octubre 2010, 18:45 pm
Correcto, C# no es 100% puro OO, ya que es imperativo, declarativo, funcional, orientado a objetos y orientado a componentes.


Título: Re: mejor lenguaje para empezar en poo?
Publicado por: Meta en 25 Octubre 2010, 19:09 pm
Hoy en día es Java o .NET con C#.


Título: Re: mejor lenguaje para empezar en poo?
Publicado por: reJu en 26 Octubre 2010, 20:25 pm
En mi caso puntual, programe en C, luego en C++ y ahora migre a C#
No hay grandes cambios, y el c# es bastante mas robusto que el C++
Espero haberte ayudado


Título: Re: mejor lenguaje para empezar en poo?
Publicado por: [D4N93R] en 26 Octubre 2010, 21:13 pm
"No hay grandes cambios, y el c# es bastante mas robusto que el C++"

Estás seguro de eso?, puedes confundir a cualquier persona con eso. Comenzando con que no hay forma ni manera de comparar C# (managed) con C++ (unmanaged), es como comparar peras con manzanas, puede que a ti te guste la pera y a mi la manzana pero nunca podrás decir que una es mejor que la otra.

Un saludo!