Je suis nouveau dans la programmation orientée objet et je ne comprends pas quel est le but de la principale.
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 dans la principale? Et quelles sont ses responsabilités?
Il peut arriver que quelque chose écrit dans la principale puisse être encapsulé dans un autre objet, mais combien devriez-vous utiliser cette approche?
Voici ma première principale que j'ai écrite en Java, c'est très simple, mais cela peut vous faire comprendre mon doute mieux. J'ai un animal de classe abstrait qui est prolongé par "chat" et "chien". J'ai utilisé le principal pour créer un objet et aussi comme une "interface" avec l'utilisateur, comme vous pouvez le constater, j'ai utilisé une instruction conditionnelle pour "demander à l'utilisateur" ce qu'il veut faire.
Ma question se pose du fait que l'interface pourrait être encapsulée dans un autre objet et ne pas donner cette responsabilité à la principale.
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);
}
Tout d'abord, votre exemple n'est pas un programme orienté objet. C'est un programme procédural qui stocke des données dans des objets, car c'est l'outil que votre langue (Java?) Fournit des données structurées.
Un vrai programme orienté objet consiste en des objets qui interagissent entre eux - c'est environ comportement plutôt que Data (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 objet d'objet à partir de personnes avec plus de références que moi; Notez que le comportement apparaît dans la plupart d'entre eux).
Dans un véritable 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 fonction main
est de créer les objets initiaux et de les câbler ensemble.
À titre d'exemple simple, envisagez une application Web qui est construite sur une base de données. Cette application pourrait être divisée en objets de plusieurs manières, mais voici l'un d'entre eux: un objet Networking
qui accepte les connexions, analyse la requête HTTP et les dépêches à un objet Controller
approprié, qui interagit avec Un objet Database
et produit la réponse (si vous souhaitez associer un ou plusieurs objets View
avec chaque contrôleur, n'hésitez pas à le faire). Vous pouvez également ajouter un objet Threadpool
pour fournir des flux d'exécution séparés.
Le rôle de main
dans cette application pourrait être de:
Database
Controller
et associez-les à l'objet Database
Network
et associez tous les objets Controller
avec celui-ci.Network
en cours d'exécution (qui pourrait également impliquer la création de la Threadpool
et le câblant dans le Network
).Ces étapes de configuration pourraient être explicitement spécifiées dans main
ou pourraient être traitées par un autre objet. Par exemple, dans une application de ressort typique, tout ce que la fonction main
est crée 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.
En fait ça dépend. Prenez-le à deux extrêmes:
main
. Cela compilera et courira bien. Mais pour un humain, le code ne sera pas digestible.main
et appelez-le doWhatNeedsToBeDone
et continuez de continuer dans cette routine de la même manière. Maintenant, vous avez un très soigné main
mais bien sûr, vous n'obtenez pas ce qui doit être fait.Donc, la vérité est quelque part entre les deux. Essayez de créer un main
qui correspond à une page, alors que quelqu'un puisse obtenir ce que les principales instructions doivent être effectuées. Obtenir la frontière droite est simplement une question d'expérience.
Ce qui précède est une règle générale et s'applique à OO ainsi que la programmation fonctionnelle.
La méthode principale statique existe comme une 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 des méthodes essentiellement non orientées objet: elles peuvent être des méthodes de procédure; Ils peuvent être des méthodes fonctionnelles. La notion de méthodes statiques est essentiellement une évasion de OOP à d'autres paradigmes de programmation.
Java, C # et C++ utilisent tous la principale statique comme une transition de la principale du style C traditionnel dans leur langage de programmation respectif, à partir duquel vous pouvez maintenant choisir d'utiliser des objets (ou non) à volonté.
Ces langues auraient besoin d'un objet d'instance primordial au lieu d'une principale statique, mais ont choisi l'approche principale statique. Utilisation d'une alternative d'approche d'instance, la classe main
serait une sous-classe de la classe thread
, et l'exécution de la langue susciterait une instance d'objet initiale de la classe main
puis invoquerait son run
méthode d'instance, tant la manière dont les threads supplémentaires sont lancés/créés.
Mais il a toujours été fait dans l'autre sens à la place: en partie, ces langues sont simplement en costume et, en partie, parce que le filetage n'était pas une priorité à ces jours, ils ont donc utilisé l'approche statique plus simple.
En outre, l'approche principale statique est "plus simple" en ce que vous n'avez pas à utiliser le sous-classement, donc des programmes de tutoriels triviaux comme hello world
Sont plus simples en quelque sorte (mais ils utilisent encore le relativement inexplicable static
, qui est difficile à expliquer à quelqu'un lorsque vous essayez de d'abord enseigner OOP.)