Soy nuevo en la programación orientada a objetos y no entiendo cuál es el propósito de main.
Sí, leí que es el "punto de entrada" del programa, pero lo que no entiendo es ¿qué debería ser lo principal? ¿Y cuáles son sus responsabilidades?
Puede suceder que algo escrito en el main pueda encapsularse en otro objeto, pero ¿cuánto debe usar este enfoque?
Aquí está mi primer main que escribí en Java, es muy simple pero puede hacerte entender mejor mis dudas. Tengo una clase abstracta Animal que se extiende por "Cat" y "Dog". Usé el principal para crear algún objeto y también como una "interfaz" con el usuario, de hecho, como puede ver, usé algunas instrucciones condicionales para "preguntarle al usuario" qué quiere hacer.
Mi pregunta surgió del hecho de que la interfaz podría encapsularse en otro objeto y no dar esa responsabilidad al principal.
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("What type of animal do you want to create? \n dog cat");
String type = input.nextLine();
if ( Objects.equals(type, "dog")){
System.out.println("Enter the animal's age: ");
int age = input.nextInt(); // Scans the next token of the input as an int.
System.out.println("Enter the animal's name: ");
String name = input.next();
Dog first = new Dog(name, age);
}
else if ( Objects.equals(type, "cat")) {
System.out.println("Enter the animal's age: ");
int age = input.nextInt(); // Scans the next token of the input as an int.
System.out.println("Enter the animal's name: ");
String name = input.next();
Cat first = new Cat(name, age);
}
else{
System.out.println("Error: the specified type does not exist.");
}
System.out.println("The number of animals is:" + numberOfAnimals);
}
main
función no es un concepto de OOP.Respuestas:
En primer lugar, su ejemplo no es un programa orientado a objetos. Es un programa de procedimientos que almacena datos en objetos, porque esa es la herramienta que su lenguaje (¿Java?) Proporciona para datos estructurados.
Un verdadero programa orientado a objetos consiste en objetos que interactúan entre sí: se trata de comportamiento en lugar de datos (me doy cuenta de que es una declaración controvertida, así que aquí hay un enlace donde puede ver múltiples definiciones de orientación a objetos de personas con más credenciales que yo; tenga en cuenta que el comportamiento aparece en la mayoría de ellos).
En un verdadero programa orientado a objetos, de acuerdo con la definición que uso, tienes objetos independientes que interactúan entre sí. El papel de la
main
función es crear los objetos iniciales y unirlos.Como un ejemplo simple, considere una aplicación web que se construye sobre una base de datos. Esta aplicación podría dividirse en objetos de muchas maneras, pero aquí hay uno de ellos: un
Networking
objeto que acepta conexiones, analiza la solicitud HTTP y se envía a unController
objeto apropiado , que interactúa con unDatabase
objeto y produce la respuesta (si lo desea para asociar uno o másView
objetos con cada controlador, siéntase libre de hacerlo). También puede agregar unThreadpool
objeto para proporcionar secuencias de ejecución separadas.El papel de
main
en esta aplicación podría ser:Database
objetoController
objetos y asócielos con elDatabase
objeto.Network
objeto y asocie todos losController
objetos con él.Network
ejecutar el objeto (lo que también podría implicar crearloThreadpool
y conectarlo a élNetwork
).Estos pasos de configuración podrían especificarse explícitamente
main
o podrían ser manejados por algún otro objeto. Por ejemplo, en una aplicación Spring típica, todo lo que hace lamain
función es crear el contexto de la aplicación (un solo objeto). Esto desencadena la creación y el cableado de todos los objetos mencionados en la configuración para ese contexto de aplicación.fuente
main
método ni siquiera puede existir.Map
). Pero Java solo proporciona una forma de hacerlo (frente a C ++, que diferencia entre estructuras y clases). Así que defina clases sin comportamiento, porque eso hace que su programa sea más fácil de entender, pero reconozca que hacerlo no hace que su programa esté "orientado a objetos".Bueno, eso depende. Llévalo a dos extremos:
main
. Eso se compilará y funcionará bien. Pero para un humano, el código no será digerible.main
y llámeladoWhatNeedsToBeDone
y, finalmente, continúe en esta rutina de la misma manera. Ahora tienes una muy buenamain
pero, por supuesto, no obtienes lo que hay que hacer.Entonces, la verdad está en algún punto intermedio. Intente crear una
main
que se ajuste a una página, para que alguien pueda obtener cuáles son las instrucciones principales que deben realizarse. Conseguir el borde correcto es simplemente una cuestión de experiencia.Lo anterior es una regla general y se aplica tanto a OO como a la programación funcional.
fuente
El método principal estático existe como una transición del mundo no orientado a objetos al mundo orientado a objetos. Se ha hecho de esta manera desde al menos C ++ en los años 80.
Los métodos estáticos son esencialmente métodos no orientados a objetos: pueden ser métodos de procedimiento; Pueden ser métodos funcionales. La noción de métodos estáticos es esencialmente un escape de OOP a otros paradigmas de programación.
Java, C # y C ++ usan el principal estático como una transición del principal tradicional de estilo C a su respectivo lenguaje de programación, desde el cual ahora puede elegir usar objetos (o no) a voluntad.
Estos lenguajes podrían haber requerido un objeto de instancia primordial en lugar de un principal estático, pero en su lugar han elegido el enfoque principal estático. Usando una alternativa de enfoque de instancia, la
main
clase sería una subclase de lathread
clase, y el tiempo de ejecución del lenguaje evocaría una instancia de objeto inicial de lamain
clase y luego invocaría surun
método de instancia, de la misma manera que se lanzan / crean hilos adicionales.Pero históricamente se ha hecho de otra manera: en parte, estos lenguajes simplemente están siguiendo su ejemplo, y en parte, porque el enhebrado no era una prioridad en aquellos días, por lo que utilizaron el enfoque estático más simple.
Además, el enfoque principal estático es "más simple", ya que no tiene que usar subclases, por lo que los programas de tutoriales triviales como
hello world
son más simples en algún sentido (sin embargo, usan el relativamente inexplicablestatic
, que es difícil de explicar a alguien cuando está tratando de enseñar primero OOP.)fuente
El método Main () se usa para ejecutar el programa
Responsabilidad: una vez que comienza a ejecutar su programa, el Método Main () llama a otros métodos para comenzar a ejecutar su programa.
Esta es una respuesta simple que me ayuda a comprender cuál es la responsabilidad del método Main ().
fuente