Je suis nouveau dans la programmation orientée objet et je ne comprends pas quel est le but du principal.
Oui, j'ai lu que c'est le "point d'entrée" du programme mais ce que je ne comprends pas, c'est ce qui devrait être au fond? Et quelles sont ses responsabilités?
Il peut arriver qu'un élément écrit dans le principal puisse être encapsulé dans un autre objet, mais dans quelle mesure devez-vous utiliser cette approche?
Voici mon tout premier principal que j'ai écrit en Java, c'est très simple mais cela peut vous faire mieux comprendre mon doute. J'ai une classe abstraite Animal qui est complétée par "Chat" et "Chien". J'ai utilisé le principal pour créer un objet et aussi comme une "interface" avec l'utilisateur, en effet comme vous pouvez le voir, j'ai utilisé des instructions conditionnelles pour "demander à l'utilisateur" ce qu'il veut faire.
Ma question venait du fait que l'interface pouvait être encapsulée dans un autre objet et ne pas confier cette responsabilité au 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
fonction n'est pas un concept de POO.Réponses:
Tout d'abord, votre exemple n'est pas un programme orienté objet. C'est un programme procédural qui arrive à stocker des données dans des objets, car c'est l'outil que votre langage (Java?) Fournit pour les données structurées.
Un vrai programme orienté objet se compose d'objets qui interagissent les uns avec les autres - il s'agit de comportement plutôt que de données (je me rends compte que c'est une déclaration controversée, alors voici un lien où vous pouvez voir plusieurs définitions de l'orientation d'objet de personnes avec plus d'informations d'identification que moi; notez que le comportement apparaît dans la plupart d’entre eux).
Dans un vrai programme orienté objet, selon la définition que j'utilise, vous avez des objets indépendants interagissant les uns avec les autres. Le rôle de la
main
fonction est de créer les objets initiaux et de les câbler ensemble.À titre d'exemple simple, considérons une application Web construite au-dessus d'une base de données. Cette application peut être divisée en objets de plusieurs façons, mais en voici une: un
Networking
objet qui accepte les connexions, analyse la demande HTTP et envoie unController
objet approprié , qui interagit avec unDatabase
objet et produit la réponse (si vous le souhaitez) pour associer un ou plusieursView
objets à chaque contrôleur, n'hésitez pas à le faire). Vous pouvez également ajouter unThreadpool
objet pour fournir des flux d'exécution distincts.Le rôle de
main
dans cette application pourrait être de:Database
objetController
objets et associez-les à l'Database
objetNetwork
objet et associez-lui tous lesController
objets.Network
objet en cours d'exécution (ce qui pourrait également impliquer la créationThreadpool
et le câblage dans leNetwork
).Ces étapes de configuration peuvent être explicitement spécifiées dans
main
ou être gérées par un autre objet. Par exemple, dans une application Spring typique, lamain
fonction ne fait que créer le contexte de l'application (un seul objet). Cela déclenche la création et le câblage de tous les objets mentionnés dans la configuration pour ce contexte d'application.la source
main
méthode ne peut même pas exister.Map
). Mais Java ne fournit qu'une seule façon de le faire (par rapport à C ++, qui différencie les structures et les classes). Définissez donc des classes sans comportement, car cela rend votre programme plus facile à comprendre, mais reconnaissez que cela ne rend pas votre programme "orienté objet".En fait ça dépend. Amenez-le à deux extrêmes:
main
. Cela se compilera et fonctionnera bien. Mais pour un humain, le code ne sera pas digeste.main
et de l'appelerdoWhatNeedsToBeDone
et de continuer éventuellement dans cette routine de la même manière. Maintenant, vous avez un très bon,main
mais bien sûr, vous n'obtenez pas ce qui doit être fait.Donc, la vérité se situe quelque part entre les deux. Essayez de créer une
main
page qui correspond à une page, afin que quelqu'un puisse obtenir les instructions principales à exécuter. Obtenir la bonne frontière est simplement une question d'expérience.Ce qui précède est une règle générale et s'applique à l'OO ainsi qu'à la programmation fonctionnelle.
la source
La méthode principale statique existe en tant que transition du monde non orienté objet vers le monde orienté objet. Cela a été fait de cette façon depuis au moins C ++ dans les années 80.
Les méthodes statiques sont essentiellement des méthodes non orientées objet: elles peuvent être des méthodes procédurales; ce peuvent être des méthodes fonctionnelles. La notion de méthodes statiques est essentiellement une échappatoire de la POO à d'autres paradigmes de programmation.
Java, C # et C ++ utilisent tous le main statique comme une transition du principal de style C traditionnel vers leur langage de programmation respectif, à partir duquel vous pouvez maintenant choisir d'utiliser des objets (ou non) à volonté.
Ces langages auraient pu nécessiter un objet d'instance primordial au lieu d'un principal statique, mais ont plutôt choisi l'approche principale statique. En utilisant une alternative d'approche d'instance, la
main
classe serait une sous-classe de lathread
classe et le runtime de langagemain
invoquerait une instance d'objet initiale de la classe, puis invoquerait sarun
méthode d'instance, de la même manière que les threads supplémentaires sont lancés / créés.Mais historiquement, cela a été fait dans l'autre sens à la place: en partie, ces langages ne font que suivre, et en partie, car le filetage n'était pas une priorité à l'époque, ils ont donc utilisé l'approche statique plus simple.
De plus, l'approche principale statique est "plus simple" dans la mesure où vous n'avez pas à utiliser de sous-classe, donc les programmes de tutoriel triviaux comme
hello world
sont plus simples dans un certain sens (pourtant ils utilisent le relativement inexplicablestatic
, qui est difficile à expliquer à quelqu'un lorsque vous êtes essayer d'abord d'enseigner la POO.)la source
La méthode Main () est utilisée pour exécuter le programme
Responsabilité - Une fois que vous commencez à exécuter votre programme, la méthode Main () appelle d'autres méthodes pour commencer à exécuter votre programme.
Ceci est une réponse simple qui m'aide à comprendre quelle est la responsabilité de la méthode Main ().
la source