Les Classes en VBScript: Pourquoi ces deux exemples font la même chose?
J'ai trouvé ce bout de code sur ce StackOverFlow question, Dictionnaire d'Objets/Classes en VBScript.
Ma question est: pourquoi est-ce que "court" de la classe de faire la même chose que ce "long" de la classe? Pourquoi même pas la peine de codage long de la classe? Pourrait la courte version de la classe être utilisé avec d'autres méthodes dans la même classe? Merci!
Court de classe
Class employeeclass
Public first, last, salary
End Class
Long De La Classe
Class employeeclass
Private m_first
Private m_last
Private m_salary
Public Property Get first
first = m_first
End Property
Public Property Let first(value)
m_first = value
End Property
Public Property Get last
last = m_last
End Property
Public Property Let last(value)
m_last = value
End Property
Public Property Get salary
salary = m_salary
End Property
Public Property Let salary(value)
m_salary = value
End Property
End Class
Plein de script avec le court-classe cependant, il suffit de remplacer le court de classe avec le long la classe d'un obtenez le même résultat.
Class employeeclass
Public first, last, salary
End Class
Dim employeedict: Set employeedict = CreateObject("Scripting.Dictionary")
Dim employee: Set employee = new employeeclass
With employee
.first = "John"
.last = "Doe"
.salary = 50000
End With
employeedict.Add "1", employee
Set employee = new employeeclass
With employee
.first = "Mary"
.last = "Jane"
.salary = 50000
End With
employeedict.Add "3", employee
Dim employeedetails: Set employeedetails = employeedict.Item("1")
WScript.Echo "Name: " & employeedetails.first & " " & employeedetails.last & " $" & employeedetails.salary
WScript.Echo employeedict.Item("3").first & " " & employeedict.Item("3").last & " makes $" & employeedict.Item("3").salary
OriginalL'auteur J P | 2013-04-07
Vous devez vous connecter pour publier un commentaire.
Tous les paradigmes de programmation (différentes façons de développer le logiciel) de s'efforcer de renforcer les programmes avec moins d'effort. Les concepts de "mieux" et de "l'effort", cependant, sont moins strictement définis comme des termes mathématiques et leurs principales significations changent au fil du temps.
L'idée de base de la programmation orientée objet est de regrouper des données complexes (comme les informations nécessaires pour traiter avec les employés) avec des fonctionnalités complexes (comme les actions nécessaires pour manipuler de telles informations). Avant la programmation orientée objet, vous pourriez avoir employé des structures/dossiers/types et astucieux fonctions/sous-marins/les procédures d'élever le salaire de l'employé, mais le programmeur est responsable de l'application de la fonction de correction de données correct dans le bon sens.
De bâtir sur cette base, la programmation orientée objet peut fournir plus d'avantages que d'augmenter la qualité des logiciels et réduire les efforts et les risques d'erreurs, surtout dans le contexte des grandes équipes de création et de re-utilisation de gros systèmes de composants logiciels:
Votre première (courte) catégorie a données, mais pas les méthodes. Nous allons ajouter une fonction init:
Donc, pour obtenir de 10 salariés, vous pouvez écrire 10 fois
au lieu de 10 fois
Maintenant, imaginons un raiseSalary méthode qui ne quelques calculs (basé sur les cents pas
de dollars pour l'amour d'un argument)
L'appel de cette méthode et de la modification de la formule une fois lors de certains changements de la loi - certainement beats ayant 40 lignes comme
éparpillés sur votre script. (C'est juste fonctionnel de l'abstraction, pas de la programmation orientée objet; en C++ ou en Java, il serait facile de/automagiquement d'avoir le patron " le salaire est calculé par une formule différente (fonction polymorphe) lorsque vous traitez une longue liste de collaborateurs en VBScript, vous devrez recourir à la sale/risqué astuces impliquant duck-typing.)
Votre deuxième (longues) de catégorie a de la chaudière de la plaque - méthodes (propriétés) pour contrôler l'accès aux données, mais pas de charge la fonctionnalité (comme raiseSalary). Tant que vous n'ajoutez pas de choses intéressantes pour les setters (validation de l'entrée, les conversions (par ex. de dollars pour cents) du monde réel et des méthodes utilisables, le long de la classe est juste une perte de temps de codage. (Bien sûr, si vous êtes payé par la ligne de code/heure et votre manager ne prend pas conscience de la classe telle qu'elle est n'a pas la garde contre incomplet ou erroné d'initialisation, il est facile si mauvais obtenu de l'argent.)
Mais si votre fonction init garanties de terminer l'initialisation de données des membres et valide d'entrée (par exemple, doubler le nombre dans la gamme plausible) et votre augmenter le salaire formule est centralisé dans une seule méthode, vous pouvez modifier le calcul de l'utilisation des numéros longs pour une meilleure précision et convertir des dollars en cents fois dans la méthode init - pas de changement dans le code qui utilise la classe.
Si vous devez protéger contre les utilisateurs définissant le salaire directement stupide valeurs par le livre (membres privés et des accesseurs) ou par le livre (documenté réprimandes) dépend de votre audience.
Pour résumer:
first = "First: " & m_first
. Et comme @AnsgarWiechers mentionné précédemment, vous pouvez faire une propriété en lecture seule.OriginalL'auteur Ekkehard.Horner
La différence entre "court" et "long" de la classe est, comme @Garath déjà mentionné, que l'ancien expose les variables de membre de stocker la valeur réelle, tandis que le second encapsule ces variables dans les propriétés.
Propriétés en VBScript n'ont fait que 2 avantages, malgré le fait qu'ils ont besoin de plus de code:
ip_addr
qui prend une adresse IP en quad-point notation, vous pouvez vérifier si elle est composée de 4 nombres séparés par des points, chaque nombre entre 0 et 255, et de déclencher une erreur si la vérification échoue.OriginalL'auteur Ansgar Wiechers
Ils regardent et ne presque la même. Mais frist une utilisation de terrain, la deuxième utilisation des propriétés. Voir ici pour une explication http://blogs.msdn.com/b/vbteam/archive/2009/09/04/properties-vs-fields-why-does-it-matter-jonathan-aneja.aspx
Faire de cette "aucune des raisons"
Je voudrais examiner la 2ème raison valable même pour VBScript.
cette réponse ne le dites pas à la personne tout ce que le demandeur ne connaît pas déjà. Un lien sans une explication est une mauvaise réponse.
OriginalL'auteur Piotr Stapp