Creo que el objetivo de exigir que todo esté incluido en las clases es minimizar el número de conceptos que debe tratar en el idioma. En C# o Java, solo necesita comprender el modelo de objeto (que es bastante complejo, sin embargo). Sin embargo, solo tiene clases con miembros e instancias de clases (objetos).
Creo que este es un objetivo muy importante que la mayoría de los idiomas intenta seguir de una forma u otra. Si C# tuviera algún código global (por ejemplo, para permitir la evaluación interactiva y la especificación del código de inicio sin el método Main
), tendría que aprender un concepto adicional (código de nivel superior). La elección hecha por C#/Java es, por supuesto, solo una forma de obtener la simplicidad.
Por supuesto, es una pregunta si esta es la opción correcta. Por ejemplo:
En los lenguajes funcionales, los programas están estructurados usando tipos (tipo de declaraciones) y expresiones. El cuerpo del programa es simplemente una expresión que se evalúa, que es mucho más simple que una clase con el método Main
y también permite scripting interactivo (como en Python).
En Erlang (y otros idiomas similares), el programa se estructura como procesos que se ejecutan simultáneamente con un proceso principal que inicia otros procesos. Este es un enfoque dramáticamente diferente, pero tiene sentido para algunos tipos de aplicaciones.
En general, cada lengua tiene alguna manera de mirar el mundo y modelarla y utiliza este punto de vista cuando se mira en todo .Esto funciona bien en algunos escenarios, pero creo que ninguno de los modelos es completamente universal. Esa puede ser una razón por la cual los lenguajes que mezclan múltiples paradigmas son bastante populares hoy en día.
Como nota al margen, creo que el uso del método Main
es una opción algo discutible (probablemente heredando de los lenguajes C/C++). Supongo que una solución más clara orientada a objetos sería iniciar el programa creando una instancia de alguna clase Main
.
Python no tiene primitivos? Eh? –
Buena pregunta. Prefiero no ser forzado a escribir clases cuando estoy escribiendo algo que simplemente no se ajusta al paradigma de OOP. (Esta es la razón por la cual cada proyecto de C# en el mundo tiene una clase de "utilidad" estática llena de métodos impares) –
@San: AFAIK, todo en Python está representado por un 'PyObject *' en C. – Javier