Eu sou novo em programação orientada a objetos e não entendo qual é o objetivo principal.
Sim, eu li que é o "ponto de entrada" do programa, mas o que eu não entendo é o que deve ser o principal? E quais são as suas responsabilidades?
Pode acontecer que algo escrito no principal possa ser encapsulado em outro objeto, mas quanto você deve usar essa abordagem?
Aqui está o meu primeiro artigo principal que escrevi em Java, é muito simples, mas pode fazer você entender melhor minha dúvida. Eu tenho uma classe abstrata Animal, que é estendida por "Cat" e "Dog". Eu usei o main para criar algum objeto e também como uma "interface" com o usuário, como você pode ver, usei algumas instruções condicionais para "perguntar ao usuário" o que ele deseja fazer.
Minha pergunta surgiu do fato de que a interface poderia ser encapsulada em outro objeto e não atribuir essa responsabilidade ao 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
função não é um conceito do OOP.Respostas:
Primeiro, seu exemplo não é um programa orientado a objetos. É um programa processual que armazena dados em objetos, porque é a ferramenta que sua linguagem (Java?) Fornece para dados estruturados.
Um verdadeiro programa orientado a objetos consiste em objetos que interagem entre si - trata-se de comportamento e não de dados (eu percebo que é uma afirmação controversa, então aqui está um link onde você pode ver várias definições de orientação a objetos de pessoas com mais credenciais do que eu; observe que o comportamento aparece na maioria deles).
Em um verdadeiro programa orientado a objetos, de acordo com a definição que eu uso, você tem objetos independentes interagindo entre si. O papel da
main
função é criar os objetos iniciais e conectá-los.Como um exemplo simples, considere um aplicativo Web construído sobre um banco de dados. Esse aplicativo pode ser dividido em objetos de várias maneiras, mas eis uma delas: um
Networking
objeto que aceita conexões, analisa a solicitação HTTP e envia para umController
objeto apropriado , que interage com umDatabase
objeto e produz a resposta (se você desejar para associar um ou maisView
objetos a cada controlador, sinta-se à vontade para fazê-lo). Você também pode adicionar umThreadpool
objeto para fornecer fluxos de execução separados.O papel
main
deste aplicativo pode ser:Database
objetoController
objetos e associe-os aoDatabase
objetoNetwork
objeto e associe todos osController
objetos a ele.Network
objeto em execução (o que também pode envolver a criaçãoThreadpool
e conexão do mesmoNetwork
).Essas etapas de instalação podem ser explicitamente especificadas em
main
ou podem ser tratadas por outro objeto. Por exemplo, em um aplicativo Spring típico, tudo o que amain
função faz é criar o contexto do aplicativo (um único objeto). Isso aciona a criação e a fiação de todos os objetos mencionados na configuração para esse contexto de aplicativo.fonte
main
método nem pode existir.Map
). Mas o Java fornece apenas uma maneira de fazer isso (versus C ++, que diferencia estruturas e classes). Portanto, defina classes sem comportamento, porque isso facilita a compreensão do programa, mas reconheça que isso não torna o programa "orientado a objetos".Bem, isto depende. Leve-o a dois extremos:
main
. Isso irá compilar e executar bem. Mas para um humano, o código não será digerível.main
e chamá-ladoWhatNeedsToBeDone
e, eventualmente, continuar nessa rotina da mesma maneira. Agora você tem uma aparência muito elegante,main
mas é claro que não entende o que precisa ser feito.Então, a verdade está em algum lugar intermediário. Tente criar um
main
que se encaixe em uma página, para que alguém possa obter as principais instruções que precisam ser executadas. Obter a borda certa é simplesmente uma questão de experiência.O acima é uma regra geral e aplica-se ao OO, bem como à programação funcional.
fonte
O método principal estático existe como uma transição do mundo não orientado a objetos para o mundo orientado a objetos. Isso tem sido feito dessa maneira desde pelo menos C ++ nos anos 80.
Métodos estáticos são essencialmente métodos não orientados a objetos: podem ser métodos procedimentais; eles podem ser métodos funcionais. A noção de métodos estáticos é essencialmente uma fuga do POO para outros paradigmas de programação.
Java, C # e C ++ usam o main estático como uma transição do main do estilo C tradicional para a respectiva linguagem de programação, a partir da qual agora você pode optar por usar objetos (ou não) à vontade.
Essas linguagens poderiam ter exigido um objeto de instância primordial em vez de um main estático, mas optaram pela abordagem principal estática. Usando uma alternativa de abordagem de instância, a
main
classe seria uma subclasse dathread
classe e o language runtime conjuraria uma instância de objeto inicial damain
classe e, em seguida, chamaria seurun
método de instância, da mesma maneira que threads adicionais são iniciados / criados.Porém, historicamente, isso foi feito de outra maneira: em parte, essas linguagens estão apenas seguindo o exemplo, e em parte, porque o threading não era uma prioridade naqueles dias, então eles usaram a abordagem estática mais simples.
Além disso, a abordagem principal estática é "mais simples", pois você não precisa usar subclassificação; portanto, programas tutoriais triviais, como
hello world
são mais simples em algum sentido (ainda assim, eles usam o relativamente inexplicávelstatic
, que é difícil de explicar para alguém quando você está tentando primeiro ensinar OOP.)fonte
O método Main () é usado para executar o programa
Responsabilidade - Depois que você inicia a execução do programa, o método Main () chama outros métodos para iniciar a execução do programa.
Esta é uma resposta simples que me ajuda a entender qual é a responsabilidade do método Main ().
fonte