[Article qui comprend 5000% de l'orientation objet (pratique)](/ gorillab / items / fab2a6637f681221f687 ) C'était très intéressant, donc je voulais le mettre en pratique, alors je l'ai posté pour la première fois.
Je pense au mot objet orienté objet comme un objet au sens du synonyme de sujet, c'est-à-dire un objet / cible.
Cependant, pour ceux qui ne sont pas orientés objet, j'explique souvent que «les objets sont des« choses »». Cependant, on l'appelle "chose" au lieu de "chose". Ce n'est pas limité à l'existence physique, mais cela peut aussi être un concept abstrait, alors j'explique souvent que c'est assez difficile.
Je suis désolé pour ma commodité, mais l'exemple d'implémentation est écrit en Java, que j'ai l'habitude d'écrire. Je n'ai pas d'environnement pour passer le compilateur sous la main, donc s'il y a une erreur, je la corrigerai plus tard. Je n'ai pas écrit Javadoc non plus. Nous nous excusons à l'avance.
Sur la base de ce qui précède, abordons le problème.
Je suis désolé pour le texte intégral du problème, mais veuillez vous référer à l'article source. Le contenu est que trois joueurs A à C jouent à un jeu comme le poker indien en utilisant les cartes 1 à 5.
Je pense que c'est une approche simple pour imaginer une scène où vous jouez à ce jeu dans le monde réel et identifiez la classe à partir de là. Cependant, dans mon sens, le monde réel est un peu lourd.
Ce que je veux dire, c'est que lorsque vous regardez cette question, il est probablement naturel de penser à «trois» comme les personnages. Cependant, à proprement parler, outre le joueur, «la personne qui gère la progression du jeu» et «la personne qui juge si la réponse est correcte» devraient également être nécessaires. (En premier lieu, ce n'est peut-être pas une «personne».) Malheureusement, je ne pense pas que de telles personnes soient généralement disponibles dans le monde réel. Chaque joueur gérera la progression et jugera l'exactitude de la réponse.
Dans le monde de la programmation, on peut penser aux choses sans être lié par les contraintes de la réalité réelle, donc je pense qu'il serait plus heureux de penser un peu plus à un monde idéal qu'au monde réel.
Tout d'abord, vous avez besoin d'un joueur et d'une carte.
Assurez-vous que le joueur a un nom. De plus, chaque joueur a une carte, alors préparez un terrain et un getter / setter.
Player.java
public class Player {
private String name;
private Card card;
public Player(String name) {
this.name = name;
}
public void getName() {
return name;
}
public void getCard() {
return card;
}
public void setCard(Card card) {
this.card = card;
}
}
Le numéro sur la carte ne changera pas une fois que vous l'avez décidé en premier, alors définissez-le dans le constructeur et ne préparez que le getter. En faisant cela, il devient un objet dit immuable.
Card.java
public class Card {
private int number;
public Card(int number) {
this.number = number;
}
public int getNumber() {
return number;
}
}
Ensuite, nous représenterons le jeu de cartes dans une autre classe appelée "Deck". Bien sûr, cela peut être exprimé comme une simple liste de Cartes, mais puisque l'acte de "mélanger et dessiner une à une par le haut" est imaginé, il devrait être commode d'extraire le "concept de deck" en tant que classe. est.
Deck.java
public class Deck {
private List<Card> cards;
public Deck() {
//Pour plus de simplicité, créez un jeu de 1 à 5 cartes dans le constructeur.
cards = new ArrayList<>();
for(int i = 0; i < 5; i++) {
cards.add(new Card(i + 1));
}
}
public void shuffle() {
//Mélangé avec l'API Collection pour plus de simplicité
Collections.shuffle(cards);
//Si vous le souhaitez, vous pouvez mettre en œuvre un mélange de fusils à pompe, etc.
}
//Mon tour! Si vous appelez cette méthode, vous pouvez tirer une carte du haut
public Card draw() {
return cards.remove(0);
}
}
Ensuite, introduisons "la personne qui gère la progression du jeu". Cette personne distribuera des cartes à tous les joueurs et laissera M. A répondre dans l'ordre. Le nom de la classe semble être meilleur, mais j'imaginerai quelque chose comme une table de casino et la laisserai comme croupier. Continuez avec l'image que le revendeur entoure trois joueurs.
Dealer.java
public class Dealer {
private List<Player> players;
public Dealer() {
//Pour plus de simplicité, enfermez 3 personnes dans le constructeur
players = new ArrayList<>();
players.add(new Player("A"));
players.add(new Player("B"));
players.add(new Player("C"));
}
//Distribuez des cartes aux joueurs (je me demande si le nom de la méthode est deal)
public void deal() {
//Mélangez votre nouveau deck
Deck deck = new Deck();
deck.shuffle();
//Distribuez-en un à chaque joueur
for(Player player: players) {
Card card = deck.draw();
player.setCard(card);
}
}
À ce stade, tout ce que vous avez à faire est de juger du résultat du jeu. Et si vous y réfléchissez bien, même si chaque joueur ne juge pas le résultat en regardant les numéros des cartes de tous les autres joueurs, même si le croupier juge en regardant le contenu des cartes dans l'ordre de M. A, le résultat Vous remarquerez que cela ne change pas. (Ce n'est pas de très bon goût comme jeu ...)
Dealer.java
public class Dealer {
//(Le contenu ci-dessus est omis)
//À proprement parler, cette méthode doit être conçue de manière à ne pouvoir être appelée qu'après l'appel de la méthode deal.
public void judge() {
//En cela, créez un processus pour juger dans l'ordre à partir de la carte de M. A
int currentPlayerIndex = 0;
while(true) {
Player currentPlayer = players.get(currentPlayerIndex);
int currentPlayerNumber = player.getCard().getNumber();
//Le traitement de jugement spécifique est omis.
//(Sérieusement, cela semble un peu étrange de faire ça, mais
//J'ai l'impression que je n'ai besoin que de transmettre l'atmosphère. )
//Si vous connaissez le résultat, vous pouvez quitter le processus itératif (les variables de jugement de condition sont appropriées)
if(result != UNKNOWN) {
break;
}
//Si vous ne connaissez pas le résultat, passez au joueur suivant
currentPlayerIndex++;
currentPlayerIndex %= players.size();
}
}
}
C'est un exemple de la soi-disant mise en œuvre «mes pensées». La vérité d'aujourd'hui est un mensonge. Pardon. En fonction de l'échelle de la cible de programmation et des intérêts, je pense à la granularité de la division de classe et à la méthode à mettre en œuvre dans quelle classe à chaque fois, mais si l'échelle concerne le sujet donné, pensez comme ci-dessus. Je vais.
En pensant à diverses choses dans mon esprit et en les produisant sous forme d'articles, j'ai pu prendre conscience de moi-même, donc je pense que ma compréhension de l'orientation des objets s'est un peu approfondie. Je ne pense pas que ce soit la bonne réponse, mais j'espère que cela vous sera utile en tant que l'une des idées.
Recommended Posts